##// END OF EJS Templates
PR: Unassigned allowed commands (#14564)...
M Bussonnier -
r28945:08be4c99 merge
parent child Browse files
Show More
@@ -52,6 +52,7 b' from .prompts import Prompts, ClassicPrompts, RichPromptDisplayHook'
52 from .ptutils import IPythonPTCompleter, IPythonPTLexer
52 from .ptutils import IPythonPTCompleter, IPythonPTLexer
53 from .shortcuts import (
53 from .shortcuts import (
54 KEY_BINDINGS,
54 KEY_BINDINGS,
55 UNASSIGNED_ALLOWED_COMMANDS,
55 create_ipython_shortcuts,
56 create_ipython_shortcuts,
56 create_identifier,
57 create_identifier,
57 RuntimeBinding,
58 RuntimeBinding,
@@ -508,19 +509,25 b' class TerminalInteractiveShell(InteractiveShell):'
508 # rebuild the bindings list from scratch
509 # rebuild the bindings list from scratch
509 key_bindings = create_ipython_shortcuts(self)
510 key_bindings = create_ipython_shortcuts(self)
510
511
511 # for now we only allow adding shortcuts for commands which are already
512 # for now we only allow adding shortcuts for a specific set of
512 # registered; this is a security precaution.
513 # commands; this is a security precution.
513 known_commands = {
514 allowed_commands = {
514 create_identifier(binding.command): binding.command
515 create_identifier(binding.command): binding.command
515 for binding in KEY_BINDINGS
516 for binding in KEY_BINDINGS
516 }
517 }
518 allowed_commands.update(
519 {
520 create_identifier(command): command
521 for command in UNASSIGNED_ALLOWED_COMMANDS
522 }
523 )
517 shortcuts_to_skip = []
524 shortcuts_to_skip = []
518 shortcuts_to_add = []
525 shortcuts_to_add = []
519
526
520 for shortcut in user_shortcuts:
527 for shortcut in user_shortcuts:
521 command_id = shortcut["command"]
528 command_id = shortcut["command"]
522 if command_id not in known_commands:
529 if command_id not in allowed_commands:
523 allowed_commands = "\n - ".join(known_commands)
530 allowed_commands = "\n - ".join(allowed_commands)
524 raise ValueError(
531 raise ValueError(
525 f"{command_id} is not a known shortcut command."
532 f"{command_id} is not a known shortcut command."
526 f" Allowed commands are: \n - {allowed_commands}"
533 f" Allowed commands are: \n - {allowed_commands}"
@@ -544,7 +551,7 b' class TerminalInteractiveShell(InteractiveShell):'
544 new_keys = shortcut.get("new_keys", None)
551 new_keys = shortcut.get("new_keys", None)
545 new_filter = shortcut.get("new_filter", None)
552 new_filter = shortcut.get("new_filter", None)
546
553
547 command = known_commands[command_id]
554 command = allowed_commands[command_id]
548
555
549 creating_new = shortcut.get("create", False)
556 creating_new = shortcut.get("create", False)
550 modifying_existing = not creating_new and (
557 modifying_existing = not creating_new and (
@@ -586,12 +593,14 b' class TerminalInteractiveShell(InteractiveShell):'
586 RuntimeBinding(
593 RuntimeBinding(
587 command,
594 command,
588 keys=new_keys or old_keys,
595 keys=new_keys or old_keys,
589 filter=filter_from_string(new_filter)
596 filter=(
590 if new_filter is not None
597 filter_from_string(new_filter)
591 else (
598 if new_filter is not None
592 old_filter
599 else (
593 if old_filter is not None
600 old_filter
594 else filter_from_string("always")
601 if old_filter is not None
602 else filter_from_string("always")
603 )
595 ),
604 ),
596 )
605 )
597 )
606 )
@@ -628,3 +628,11 b' KEY_BINDINGS = ['
628 *SIMPLE_CONTROL_BINDINGS,
628 *SIMPLE_CONTROL_BINDINGS,
629 *ALT_AND_COMOBO_CONTROL_BINDINGS,
629 *ALT_AND_COMOBO_CONTROL_BINDINGS,
630 ]
630 ]
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 ]
General Comments 0
You need to be logged in to leave comments. Login now