Skip to content

Commit dd9d536

Browse files
committed
Modify binding mechanism to allow binding to one of a set of whitelisted commands, Add five such commands ("beginning_of_buffer", "end_of_buffer", "end_of_line", "forward_word", "unix_line_discard").
1 parent b65cf89 commit dd9d536

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

IPython/terminal/interactiveshell.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
from .ptutils import IPythonPTCompleter, IPythonPTLexer
5353
from .shortcuts import (
5454
KEY_BINDINGS,
55+
UNASSIGNED_ALLOWED_COMMANDS,
5556
create_ipython_shortcuts,
5657
create_identifier,
5758
RuntimeBinding,
@@ -508,19 +509,23 @@ def _merge_shortcuts(self, user_shortcuts):
508509
# rebuild the bindings list from scratch
509510
key_bindings = create_ipython_shortcuts(self)
510511

511-
# for now we only allow adding shortcuts for commands which are already
512-
# registered; this is a security precaution.
513-
known_commands = {
512+
# for now we only allow adding shortcuts for a specific set of
513+
# commands; this is a security precution.
514+
allowed_commands = {
514515
create_identifier(binding.command): binding.command
515516
for binding in KEY_BINDINGS
516517
}
518+
allowed_commands.update({
519+
create_identifier(command): command
520+
for command in UNASSIGNED_ALLOWED_COMMANDS
521+
})
517522
shortcuts_to_skip = []
518523
shortcuts_to_add = []
519524

520525
for shortcut in user_shortcuts:
521526
command_id = shortcut["command"]
522-
if command_id not in known_commands:
523-
allowed_commands = "\n - ".join(known_commands)
527+
if command_id not in allowed_commands:
528+
allowed_commands = "\n - ".join(allowed_commands)
524529
raise ValueError(
525530
f"{command_id} is not a known shortcut command."
526531
f" Allowed commands are: \n - {allowed_commands}"
@@ -544,7 +549,7 @@ def _merge_shortcuts(self, user_shortcuts):
544549
new_keys = shortcut.get("new_keys", None)
545550
new_filter = shortcut.get("new_filter", None)
546551

547-
command = known_commands[command_id]
552+
command = allowed_commands[command_id]
548553

549554
creating_new = shortcut.get("create", False)
550555
modifying_existing = not creating_new and (

IPython/terminal/shortcuts/__init__.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -628,3 +628,11 @@ def win_paste(event):
628628
*SIMPLE_CONTROL_BINDINGS,
629629
*ALT_AND_COMOBO_CONTROL_BINDINGS,
630630
]
631+
632+
UNASSIGNED_ALLOWED_COMMANDS = [
633+
nc.beginning_of_buffer,
634+
nc.end_of_buffer,
635+
nc.end_of_line,
636+
nc.forward_word,
637+
nc.unix_line_discard,
638+
]

0 commit comments

Comments
 (0)