diff options
Diffstat (limited to 'plugins/aliases')
| -rw-r--r-- | plugins/aliases/aliases.plugin.zsh | 10 | ||||
| -rw-r--r-- | plugins/aliases/cheatsheet.py | 55 | ||||
| -rw-r--r-- | plugins/aliases/termcolor.py | 168 | 
3 files changed, 233 insertions, 0 deletions
| diff --git a/plugins/aliases/aliases.plugin.zsh b/plugins/aliases/aliases.plugin.zsh new file mode 100644 index 000000000..28d8fba24 --- /dev/null +++ b/plugins/aliases/aliases.plugin.zsh @@ -0,0 +1,10 @@ +# with lots of 3rd-party amazing aliases installed, just need something to explore it quickly. +# +# - acs: alias cheatsheet +#   group alias by command, pass addition argv to grep. +ALIASES_PLUGIN_ROOT=$(cd `dirname $0` && pwd) +function acs(){ +    which python >>/dev/null +    [[ $? -eq 1 ]] && echo "[error]no python executable detected!" && return +    alias | python $ALIASES_PLUGIN_ROOT/cheatsheet.py $@ +} diff --git a/plugins/aliases/cheatsheet.py b/plugins/aliases/cheatsheet.py new file mode 100644 index 000000000..d6d507b92 --- /dev/null +++ b/plugins/aliases/cheatsheet.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python +import sys +import itertools +import termcolor + +def parse(line): +    left = line[0:line.find('=')].strip() +    right = line[line.find('=')+1:].strip('\'"\n ') +    try: +        cmd = next(part for part in right.split() if len([char for char in '=<>' if char in part])==0) +    except StopIteration: +        cmd = right +    return (left, right, cmd) + +def cheatsheet(lines): +    exps = [ parse(line) for line in lines ] +    cheatsheet = {'_default': []} +    for key, group in itertools.groupby(exps, lambda exp:exp[2]): +        group_list = [ item for item in group ] +        if len(group_list)==1: +            target_aliases = cheatsheet['_default'] +        else: +            if key not in cheatsheet: +                cheatsheet[key] = [] +            target_aliases = cheatsheet[key] +        target_aliases.extend(group_list) +    return cheatsheet + +def pretty_print_group(key, aliases, hightlight=None): +    if len(aliases) == 0: +        return +    group_hl_formatter = lambda g, hl: termcolor.colored(hl, 'yellow').join([termcolor.colored(part, 'red') for part in ('[%s]' % g).split(hl)]) +    alias_hl_formatter = lambda alias, hl: termcolor.colored(hl, 'yellow').join([termcolor.colored(part, 'green') for part in ('\t%s = %s' % alias[0:2]).split(hl)]) +    group_formatter = lambda g: termcolor.colored('[%s]' % g, 'red') +    alias_formatter = lambda alias: termcolor.colored('\t%s = %s' % alias[0:2], 'green') +    if hightlight and len(hightlight)>0: +        print (group_hl_formatter(key, hightlight)) +        print ('\n'.join([alias_hl_formatter(alias, hightlight) for alias in aliases])) +    else: +        print (group_formatter(key)) +        print ('\n'.join([alias_formatter(alias) for alias in aliases])) +    print ('') + +def pretty_print(cheatsheet, wfilter): +    sorted_key = sorted(cheatsheet.keys()) +    for key in sorted_key: +        aliases = cheatsheet.get(key) +        if not wfilter: +            pretty_print_group(key, aliases, wfilter) +        else: +            pretty_print_group(key, [ alias for alias in aliases if alias[0].find(wfilter)>-1 or alias[1].find(wfilter)>-1], wfilter) + +if __name__ == '__main__': +    lines = sys.stdin.readlines() +    pretty_print(cheatsheet(lines), sys.argv[1] if len(sys.argv)>1 else None) diff --git a/plugins/aliases/termcolor.py b/plugins/aliases/termcolor.py new file mode 100644 index 000000000..f11b824b2 --- /dev/null +++ b/plugins/aliases/termcolor.py @@ -0,0 +1,168 @@ +# coding: utf-8 +# Copyright (c) 2008-2011 Volvox Development Team +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +# Author: Konstantin Lepa <konstantin.lepa@gmail.com> + +"""ANSII Color formatting for output in terminal.""" + +from __future__ import print_function +import os + + +__ALL__ = [ 'colored', 'cprint' ] + +VERSION = (1, 1, 0) + +ATTRIBUTES = dict( +        list(zip([ +            'bold', +            'dark', +            '', +            'underline', +            'blink', +            '', +            'reverse', +            'concealed' +            ], +            list(range(1, 9)) +            )) +        ) +del ATTRIBUTES[''] + + +HIGHLIGHTS = dict( +        list(zip([ +            'on_grey', +            'on_red', +            'on_green', +            'on_yellow', +            'on_blue', +            'on_magenta', +            'on_cyan', +            'on_white' +            ], +            list(range(40, 48)) +            )) +        ) + + +COLORS = dict( +        list(zip([ +            'grey', +            'red', +            'green', +            'yellow', +            'blue', +            'magenta', +            'cyan', +            'white', +            ], +            list(range(30, 38)) +            )) +        ) + + +RESET = '\033[0m' + + +def colored(text, color=None, on_color=None, attrs=None): +    """Colorize text. + +    Available text colors: +        red, green, yellow, blue, magenta, cyan, white. + +    Available text highlights: +        on_red, on_green, on_yellow, on_blue, on_magenta, on_cyan, on_white. + +    Available attributes: +        bold, dark, underline, blink, reverse, concealed. + +    Example: +        colored('Hello, World!', 'red', 'on_grey', ['blue', 'blink']) +        colored('Hello, World!', 'green') +    """ +    if os.getenv('ANSI_COLORS_DISABLED') is None: +        fmt_str = '\033[%dm%s' +        if color is not None: +            text = fmt_str % (COLORS[color], text) + +        if on_color is not None: +            text = fmt_str % (HIGHLIGHTS[on_color], text) + +        if attrs is not None: +            for attr in attrs: +                text = fmt_str % (ATTRIBUTES[attr], text) + +        text += RESET +    return text + + +def cprint(text, color=None, on_color=None, attrs=None, **kwargs): +    """Print colorize text. + +    It accepts arguments of print function. +    """ + +    print((colored(text, color, on_color, attrs)), **kwargs) + + +if __name__ == '__main__': +    print('Current terminal type: %s' % os.getenv('TERM')) +    print('Test basic colors:') +    cprint('Grey color', 'grey') +    cprint('Red color', 'red') +    cprint('Green color', 'green') +    cprint('Yellow color', 'yellow') +    cprint('Blue color', 'blue') +    cprint('Magenta color', 'magenta') +    cprint('Cyan color', 'cyan') +    cprint('White color', 'white') +    print(('-' * 78)) + +    print('Test highlights:') +    cprint('On grey color', on_color='on_grey') +    cprint('On red color', on_color='on_red') +    cprint('On green color', on_color='on_green') +    cprint('On yellow color', on_color='on_yellow') +    cprint('On blue color', on_color='on_blue') +    cprint('On magenta color', on_color='on_magenta') +    cprint('On cyan color', on_color='on_cyan') +    cprint('On white color', color='grey', on_color='on_white') +    print('-' * 78) + +    print('Test attributes:') +    cprint('Bold grey color', 'grey', attrs=['bold']) +    cprint('Dark red color', 'red', attrs=['dark']) +    cprint('Underline green color', 'green', attrs=['underline']) +    cprint('Blink yellow color', 'yellow', attrs=['blink']) +    cprint('Reversed blue color', 'blue', attrs=['reverse']) +    cprint('Concealed Magenta color', 'magenta', attrs=['concealed']) +    cprint('Bold underline reverse cyan color', 'cyan', +            attrs=['bold', 'underline', 'reverse']) +    cprint('Dark blink concealed white color', 'white', +            attrs=['dark', 'blink', 'concealed']) +    print(('-' * 78)) + +    print('Test mixing:') +    cprint('Underline red on grey color', 'red', 'on_grey', +            ['underline']) +    cprint('Reversed green on red color', 'green', 'on_red', ['reverse']) + | 
