diff options
Diffstat (limited to 'pgcli/key_bindings.py')
-rw-r--r-- | pgcli/key_bindings.py | 86 |
1 files changed, 34 insertions, 52 deletions
diff --git a/pgcli/key_bindings.py b/pgcli/key_bindings.py index 646e6f77..f1eaaa39 100644 --- a/pgcli/key_bindings.py +++ b/pgcli/key_bindings.py @@ -1,69 +1,47 @@ +from __future__ import unicode_literals + import logging from prompt_toolkit.enums import EditingMode -from prompt_toolkit.keys import Keys -from prompt_toolkit.key_binding.manager import KeyBindingManager -from prompt_toolkit.filters import Condition -from .filters import HasSelectedCompletion +from prompt_toolkit.key_binding import KeyBindings +from prompt_toolkit.filters import completion_is_selected _logger = logging.getLogger(__name__) -def pgcli_bindings(get_vi_mode_enabled, set_vi_mode_enabled): - """ - Custom key bindings for pgcli. - """ - assert callable(get_vi_mode_enabled) - assert callable(set_vi_mode_enabled) - - key_binding_manager = KeyBindingManager( - enable_open_in_editor=True, - enable_system_bindings=True, - enable_auto_suggest_bindings=True, - enable_search=True, - enable_abort_and_exit_bindings=True) +def pgcli_bindings(pgcli): + """Custom key bindings for pgcli.""" + kb = KeyBindings() - @key_binding_manager.registry.add_binding(Keys.F2) + @kb.add('f2') def _(event): - """ - Enable/Disable SmartCompletion Mode. - """ + """Enable/Disable SmartCompletion Mode.""" _logger.debug('Detected F2 key.') - buf = event.cli.current_buffer - buf.completer.smart_completion = not buf.completer.smart_completion + pgcli.completer.smart_completion = not pgcli.completer.smart_completion - @key_binding_manager.registry.add_binding(Keys.F3) + @kb.add('f3') def _(event): - """ - Enable/Disable Multiline Mode. - """ + """Enable/Disable Multiline Mode.""" _logger.debug('Detected F3 key.') - buf = event.cli.current_buffer - buf.always_multiline = not buf.always_multiline + pgcli.multi_line = not pgcli.multi_line - @key_binding_manager.registry.add_binding(Keys.F4) + @kb.add('f4') def _(event): - """ - Toggle between Vi and Emacs mode. - """ + """Toggle between Vi and Emacs mode.""" _logger.debug('Detected F4 key.') - vi_mode = not get_vi_mode_enabled() - set_vi_mode_enabled(vi_mode) - - event.cli.editing_mode = EditingMode.VI if vi_mode else EditingMode.EMACS + pgcli.vi_mode = not pgcli.vi_mode + event.app.editing_mode = EditingMode.VI if pgcli.vi_mode else EditingMode.EMACS - @key_binding_manager.registry.add_binding(Keys.Tab) + @kb.add('tab') def _(event): - """ - Force autocompletion at cursor. - """ + """Force autocompletion at cursor.""" _logger.debug('Detected <Tab> key.') - b = event.cli.current_buffer + b = event.app.current_buffer if b.complete_state: b.complete_next() else: - event.cli.start_completion(select_first=True) + b.start_completion(select_first=True) - @key_binding_manager.registry.add_binding(Keys.ControlSpace) + @kb.add('c-space') def _(event): """ Initialize autocompletion at cursor. @@ -75,21 +53,25 @@ def pgcli_bindings(get_vi_mode_enabled, set_vi_mode_enabled): """ _logger.debug('Detected <C-Space> key.') - b = event.cli.current_buffer + b = event.app.current_buffer if b.complete_state: b.complete_next() else: - event.cli.start_completion(select_first=False) + b.start_completion(select_first=False) - @key_binding_manager.registry.add_binding(Keys.ControlJ, filter=HasSelectedCompletion()) + @kb.add('enter', filter=completion_is_selected) def _(event): + """Makes the enter key work as the tab key only when showing the menu. + + In other words, don't execute query when enter is pressed in + the completion dropdown menu, instead close the dropdown menu + (accept current selection). + """ - Makes the enter key work as the tab key only when showing the menu. - """ - _logger.debug('Detected <C-J> key.') + _logger.debug('Detected enter key.') event.current_buffer.complete_state = None - b = event.cli.current_buffer + b = event.app.current_buffer b.complete_state = None - return key_binding_manager + return kb |