-
Notifications
You must be signed in to change notification settings - Fork 192
/
Copy pathkey_bindings.py
83 lines (69 loc) · 2.31 KB
/
key_bindings.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import logging
from prompt_toolkit.enums import EditingMode
from prompt_toolkit.key_binding import KeyBindings
from .filters import has_selected_completion
_logger = logging.getLogger(__name__)
def mssqlcli_bindings(mssql_cli):
"""
Custom key bindings for mssqlcli.
"""
key_bindings = KeyBindings()
@key_bindings.add(u'f2')
def _(event):
"""
Enable/Disable SmartCompletion Mode.
"""
del event # event is unused
_logger.debug('Detected F2 key.')
mssql_cli.completer.smart_completion = not mssql_cli.completer.smart_completion
@key_bindings.add(u'f3')
def _(event):
"""
Enable/Disable Multiline Mode.
"""
del event # event is unused
_logger.debug('Detected F3 key.')
mssql_cli.multiline = not mssql_cli.multiline
@key_bindings.add(u'f4')
def _(event):
"""
Toggle between Vi and Emacs mode.
"""
_logger.debug('Detected F4 key.')
mssql_cli.vi_mode = not mssql_cli.vi_mode
event.app.editing_mode = EditingMode.VI if mssql_cli.vi_mode else EditingMode.EMACS
@key_bindings.add(u'tab')
def _(event):
"""
Force autocompletion at cursor.
"""
_logger.debug('Detected <Tab> key.')
b = event.app.current_buffer
if b.complete_state:
b.complete_next()
else:
b.start_completion(select_first=True)
@key_bindings.add(u'c-space')
def _(event):
"""
Initialize autocompletion at cursor.
If the autocompletion menu is not showing, display it with the
appropriate completions for the context.
If the menu is showing, select the next completion.
"""
_logger.debug('Detected <C-Space> key.')
b = event.app.current_buffer
if b.complete_state:
b.complete_next()
else:
b.start_completion(select_first=False)
@key_bindings.add(u'enter', filter=has_selected_completion)
def _(event):
"""
Makes the enter key work as the tab key only when showing the menu.
"""
_logger.debug('Detected enter key.')
event.current_buffer.complete_state = None
b = event.app.current_buffer
b.complete_state = None
return key_bindings