Merged #353 with changes

PR #353 implemented highlighting on search terms within search results.
This PR:

- Merges the above
- Makes a few modifications upon the implementation

Specifically, the new implementation no longer relies on hard-coded
escape-sequences. Instead, a new `highlight` function has been created,
which in turn attempts to defer to the `termcolors` library to colorize
the necessary text.
This commit is contained in:
Chris Lane 2019-01-11 15:46:54 -05:00
commit e1fdca231e
2 changed files with 24 additions and 2 deletions

View File

@ -2,6 +2,7 @@ import os
from cheat import cheatsheets from cheat import cheatsheets
from cheat.utils import die from cheat.utils import die
from cheat.utils import highlight
def default_path(): def default_path():
""" Returns the default cheatsheet path """ """ Returns the default cheatsheet path """
@ -84,7 +85,12 @@ def search(term):
for cheatsheet in sorted(get().items()): for cheatsheet in sorted(get().items()):
match = '' match = ''
for line in open(cheatsheet[1]): for line in open(cheatsheet[1]):
if lowered_term in line.lower(): if term in line:
# highlight the search term if CHEATCOLORS equals true
if 'CHEATCOLORS' in os.environ:
line = highlight(term, line);
match += ' ' + line match += ' ' + line
if match != '': if match != '':

View File

@ -1,8 +1,24 @@
from __future__ import print_function from __future__ import print_function
import os import os
import sys
import subprocess import subprocess
import sys
def highlight(needle, haystack):
""" Highlights a search term matched in a line """
# only colorize if so configured
if not 'CHEATCOLORS' in os.environ or os.environ.get('CHEATCOLORS') != 'true':
return sheet_content
try:
from termcolor import colored
# if pygments can't load, just return the uncolorized text
except ImportError:
return haystack
# colorize the search term, and replace it within the surrounding line
return haystack.replace(needle, colored(needle, 'blue'));
def colorize(sheet_content): def colorize(sheet_content):
""" Colorizes cheatsheet content if so configured """ """ Colorizes cheatsheet content if so configured """