##// END OF EJS Templates
Try to fix Qt event loop, take III...
Try to fix Qt event loop, take III This involves neither threads nor calling in to the old inputhook machinery.

File last commit:

r22625:3bd0bd55
r22654:e9301c9b
Show More
autogen_shortcuts.py
85 lines | 2.4 KiB | text/x-python | PythonLexer
/ docs / autogen_shortcuts.py
klonuo
Added keyboard shortcuts docs
r22590 from os.path import abspath, dirname, join
from IPython.terminal.interactiveshell import KeyBindingManager
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)
Matthias Bussonnier
Improve grouping of filter
r22624 log_filters = dict(_AndList='And', _OrList='Or')
log_invert = {'_Invert'}
klonuo
Added keyboard shortcuts docs
r22590
kbm = KeyBindingManager.for_prompt()
ipy_bindings = kbm.registry.key_bindings
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))
single_filter = dict()
multi_filter = dict()
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))