summaryrefslogtreecommitdiffstats
path: root/pgcli/key_bindings.py
diff options
context:
space:
mode:
Diffstat (limited to 'pgcli/key_bindings.py')
-rw-r--r--pgcli/key_bindings.py86
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