##// END OF EJS Templates
Try to elide long completion based on user input....
Try to elide long completion based on user input. If what the user has typed is already in the completion and the completion is really long, try to elide what the user has already typed from the displayed text of the completion. Keep the first 3 and last 3 of what is already present. This will behave weirdly if all the completion have a common prefix as I believe prompt toolkit will insert the common prefix (or do we?). I'll have to check how to consider the common prefix as being typed.

File last commit:

r24402:7bc34163
r25689:d5704fdc
Show More
autogen_shortcuts.py
90 lines | 2.6 KiB | text/x-python | PythonLexer
/ docs / autogen_shortcuts.py
klonuo
Added keyboard shortcuts docs
r22590 from os.path import abspath, dirname, join
Gabriel Potter
Fix autogen_shortcuts.py for prompt_toolkit 2.0
r24389 from IPython.terminal.shortcuts import create_ipython_shortcuts
klonuo
Added keyboard shortcuts docs
r22590
def name(c):
s = c.__class__.__name__
Matthias Bussonnier
Improve grouping of filter
r22624 if s == '_Invert':
return '(Not: %s)' % name(c.filter)
if s in log_filters.keys():
return '(%s: %s)' % (log_filters[s], ', '.join(name(x) for x in c.filters))
klonuo
Added keyboard shortcuts docs
r22590 return log_filters[s] if s in log_filters.keys() else s
def sentencize(s):
"""Extract first sentence
"""
s = s.replace('\n', ' ').strip().split('.')
s = s[0] if len(s) else s
try:
return " ".join(s.split())
except AttributeError:
return s
def most_common(lst, n=3):
"""Most common elements occurring more then `n` times
"""
from collections import Counter
c = Counter(lst)
return [k for (k, v) in c.items() if k and v > n]
def multi_filter_str(flt):
"""Yield readable conditional filter
"""
assert hasattr(flt, 'filters'), 'Conditional filter required'
yield name(flt)
Srinivas Reddy Thatiparthy
remove dict() function call and replace it with dict literal - {}
r23231 log_filters = {'_AndList': 'And', '_OrList': 'Or'}
Matthias Bussonnier
Improve grouping of filter
r22624 log_invert = {'_Invert'}
klonuo
Added keyboard shortcuts docs
r22590
Gabriel Potter
Fix autogen_shortcuts.py for prompt_toolkit 2.0
r24389 class _DummyTerminal(object):
"""Used as a buffer to get prompt_toolkit bindings
"""
handle_return = None
Thomas Kluyver
Fix generating shortcuts docs
r24402 input_transformer_manager = None
Gabriel Potter
Fix autogen_shortcuts.py for prompt_toolkit 2.0
r24389 display_completions = None
ipy_bindings = create_ipython_shortcuts(_DummyTerminal()).bindings
klonuo
Added keyboard shortcuts docs
r22590
dummy_docs = [] # ignore bindings without proper documentation
common_docs = most_common([kb.handler.__doc__ for kb in ipy_bindings])
if common_docs:
dummy_docs.extend(common_docs)
dummy_docs = list(set(dummy_docs))
Srinivas Reddy Thatiparthy
remove dict() function call and replace it with dict literal - {}
r23231 single_filter = {}
multi_filter = {}
klonuo
Added keyboard shortcuts docs
r22590 for kb in ipy_bindings:
doc = kb.handler.__doc__
if not doc or doc in dummy_docs:
continue
shortcut = ' '.join([k if isinstance(k, str) else k.name for k in kb.keys])
shortcut += shortcut.endswith('\\') and '\\' or ''
if hasattr(kb.filter, 'filters'):
flt = ' '.join(multi_filter_str(kb.filter))
multi_filter[(shortcut, flt)] = sentencize(doc)
else:
single_filter[(shortcut, name(kb.filter))] = sentencize(doc)
if __name__ == '__main__':
Matthias Bussonnier
Sort by filter, before sorting by shortcut....
r22625 sort_key = lambda k:(str(k[0][1]),str(k[0][0]))
klonuo
Added keyboard shortcuts docs
r22590 here = abspath(dirname(__file__))
dest = join(here, 'source', 'config', 'shortcuts')
with open(join(dest, 'single_filtered.csv'), 'w') as csv:
Matthias Bussonnier
Sort by filter, before sorting by shortcut....
r22625 for k, v in sorted(single_filter.items(), key=sort_key):
klonuo
Added keyboard shortcuts docs
r22590 csv.write(':kbd:`{}`\t{}\t{}\n'.format(k[0], k[1], v))
with open(join(dest, 'multi_filtered.csv'), 'w') as csv:
Matthias Bussonnier
Sort by filter, before sorting by shortcut....
r22625 for k, v in sorted(multi_filter.items(), key=sort_key):
klonuo
Added keyboard shortcuts docs
r22590 csv.write(':kbd:`{}`\t{}\t{}\n'.format(k[0], k[1], v))