From 4c45de6f1f6ed486fe7888b0914ae36e683934bc Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Sat, 5 Oct 2024 11:50:34 +0200 Subject: [PATCH] Prefer defvar-keymap in python.el It's okay to use defvar-keymap here since the 'compat' package backports it for all versions of Emacs that we support (24.4 or later). * lisp/progmodes/python.el (python-mode-map): Prefer defvar-keymap. (python-menu): Move to toplevel. (cherry picked from commit 364801fcd66d8e93a900fd750a998f4590d85397) --- lisp/progmodes/python.el | 210 +++++++++++++++++++-------------------- 1 file changed, 104 insertions(+), 106 deletions(-) diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 450eac372c3..70a6117dc70 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -317,112 +317,110 @@ To customize the Python interpreter for interactive use, modify ;;; Bindings -(defvar python-mode-map - (let ((map (make-sparse-keymap))) - ;; Movement - (define-key map [remap backward-sentence] #'python-nav-backward-block) - (define-key map [remap forward-sentence] #'python-nav-forward-block) - (define-key map [remap backward-up-list] #'python-nav-backward-up-list) - (define-key map [remap up-list] #'python-nav-up-list) - (define-key map [remap mark-defun] #'python-mark-defun) - (define-key map "\C-c\C-j" #'imenu) - ;; Indent specific - (define-key map "\177" #'python-indent-dedent-line-backspace) - (define-key map (kbd "") #'python-indent-dedent-line) - (define-key map "\C-c<" #'python-indent-shift-left) - (define-key map "\C-c>" #'python-indent-shift-right) - ;; Skeletons - (define-key map "\C-c\C-tc" #'python-skeleton-class) - (define-key map "\C-c\C-td" #'python-skeleton-def) - (define-key map "\C-c\C-tf" #'python-skeleton-for) - (define-key map "\C-c\C-ti" #'python-skeleton-if) - (define-key map "\C-c\C-tm" #'python-skeleton-import) - (define-key map "\C-c\C-tt" #'python-skeleton-try) - (define-key map "\C-c\C-tw" #'python-skeleton-while) - ;; Shell interaction - (define-key map "\C-c\C-p" #'run-python) - (define-key map "\C-c\C-s" #'python-shell-send-string) - (define-key map "\C-c\C-e" #'python-shell-send-statement) - (define-key map "\C-c\C-r" #'python-shell-send-region) - (define-key map "\C-\M-x" #'python-shell-send-defun) - (define-key map "\C-c\C-b" #'python-shell-send-block) - (define-key map "\C-c\C-c" #'python-shell-send-buffer) - (define-key map "\C-c\C-l" #'python-shell-send-file) - (define-key map "\C-c\C-z" #'python-shell-switch-to-shell) - ;; Some util commands - (define-key map "\C-c\C-v" #'python-check) - (define-key map "\C-c\C-f" #'python-eldoc-at-point) - (define-key map "\C-c\C-d" #'python-describe-at-point) - ;; Import management - (define-key map "\C-c\C-ia" #'python-add-import) - (define-key map "\C-c\C-if" #'python-fix-imports) - (define-key map "\C-c\C-ir" #'python-remove-import) - (define-key map "\C-c\C-is" #'python-sort-imports) - ;; Utilities - (substitute-key-definition #'complete-symbol #'completion-at-point - map global-map) - (easy-menu-define python-menu map "Python Mode menu" - '("Python" - :help "Python-specific Features" - ["Shift region left" python-indent-shift-left :active mark-active - :help "Shift region left by a single indentation step"] - ["Shift region right" python-indent-shift-right :active mark-active - :help "Shift region right by a single indentation step"] - "-" - ["Start of def/class" beginning-of-defun - :help "Go to start of outermost definition around point"] - ["End of def/class" end-of-defun - :help "Go to end of definition around point"] - ["Mark def/class" mark-defun - :help "Mark outermost definition around point"] - ["Jump to def/class" imenu - :help "Jump to a class or function definition"] - "--" - ("Skeletons") - "---" - ["Start interpreter" run-python - :help "Run inferior Python process in a separate buffer"] - ["Switch to shell" python-shell-switch-to-shell - :help "Switch to running inferior Python process"] - ["Eval string" python-shell-send-string - :help "Eval string in inferior Python session"] - ["Eval block" python-shell-send-block - :help "Eval block in inferior Python session"] - ["Eval buffer" python-shell-send-buffer - :help "Eval buffer in inferior Python session"] - ["Eval statement" python-shell-send-statement - :help "Eval statement in inferior Python session"] - ["Eval region" python-shell-send-region - :help "Eval region in inferior Python session"] - ["Eval defun" python-shell-send-defun - :help "Eval defun in inferior Python session"] - ["Eval file" python-shell-send-file - :help "Eval file in inferior Python session"] - ["Debugger" pdb :help "Run pdb under GUD"] - "----" - ["Check file" python-check - :help "Check file for errors"] - ["Help on symbol" python-eldoc-at-point - :help "Get help on symbol at point"] - ["Complete symbol" completion-at-point - :help "Complete symbol before point"] - "-----" - ["Add import" python-add-import - :help "Add an import statement to the top of this buffer"] - ["Remove import" python-remove-import - :help "Remove an import statement from the top of this buffer"] - ["Sort imports" python-sort-imports - :help "Sort the import statements at the top of this buffer"] - ["Fix imports" python-fix-imports - :help "Add missing imports and remove unused ones from the current buffer"] - "-----" - ("Toggle..." - ["Subword Mode" subword-mode - :style toggle :selected subword-mode - :help "Toggle subword movement and editing mode"]) - )) - map) - "Keymap for `python-mode'.") +(defvar-keymap python-mode-map + :doc "Keymap for `python-mode'." + ;; Movement + " " #'python-nav-backward-block + " " #'python-nav-forward-block + " " #'python-nav-backward-up-list + " " #'python-nav-up-list + " " #'python-mark-defun + "C-c C-j" #'imenu + ;; Indent specific + "DEL" #'python-indent-dedent-line-backspace + "" #'python-indent-dedent-line + "C-c <" #'python-indent-shift-left + "C-c >" #'python-indent-shift-right + ;; Skeletons + "C-c C-t c" #'python-skeleton-class + "C-c C-t d" #'python-skeleton-def + "C-c C-t f" #'python-skeleton-for + "C-c C-t i" #'python-skeleton-if + "C-c C-t m" #'python-skeleton-import + "C-c C-t t" #'python-skeleton-try + "C-c C-t w" #'python-skeleton-while + ;; Shell interaction + "C-c C-p" #'run-python + "C-c C-s" #'python-shell-send-string + "C-c C-e" #'python-shell-send-statement + "C-c C-r" #'python-shell-send-region + "C-M-x" #'python-shell-send-defun + "C-c C-b" #'python-shell-send-block + "C-c C-c" #'python-shell-send-buffer + "C-c C-l" #'python-shell-send-file + "C-c C-z" #'python-shell-switch-to-shell + ;; Some util commands + "C-c C-v" #'python-check + "C-c C-f" #'python-eldoc-at-point + "C-c C-d" #'python-describe-at-point + ;; Import management + "C-c C-i a" #'python-add-import + "C-c C-i f" #'python-fix-imports + "C-c C-i r" #'python-remove-import + "C-c C-i s" #'python-sort-imports + ;; Utilities + " " #'completion-at-point) + +(easy-menu-define python-menu python-mode-map + "Menu used for ´python-mode'." + '("Python" + :help "Python-specific Features" + ["Shift region left" python-indent-shift-left :active mark-active + :help "Shift region left by a single indentation step"] + ["Shift region right" python-indent-shift-right :active mark-active + :help "Shift region right by a single indentation step"] + "-----" + ["Start of def/class" beginning-of-defun + :help "Go to start of outermost definition around point"] + ["End of def/class" end-of-defun + :help "Go to end of definition around point"] + ["Mark def/class" mark-defun + :help "Mark outermost definition around point"] + ["Jump to def/class" imenu + :help "Jump to a class or function definition"] + "-----" + ("Skeletons") + "-----" + ["Start interpreter" run-python + :help "Run inferior Python process in a separate buffer"] + ["Switch to shell" python-shell-switch-to-shell + :help "Switch to running inferior Python process"] + ["Eval string" python-shell-send-string + :help "Eval string in inferior Python session"] + ["Eval block" python-shell-send-block + :help "Eval block in inferior Python session"] + ["Eval buffer" python-shell-send-buffer + :help "Eval buffer in inferior Python session"] + ["Eval statement" python-shell-send-statement + :help "Eval statement in inferior Python session"] + ["Eval region" python-shell-send-region + :help "Eval region in inferior Python session"] + ["Eval defun" python-shell-send-defun + :help "Eval defun in inferior Python session"] + ["Eval file" python-shell-send-file + :help "Eval file in inferior Python session"] + ["Debugger" pdb :help "Run pdb under GUD"] + "-----" + ["Check file" python-check + :help "Check file for errors"] + ["Help on symbol" python-eldoc-at-point + :help "Get help on symbol at point"] + ["Complete symbol" completion-at-point + :help "Complete symbol before point"] + "-----" + ["Add import" python-add-import + :help "Add an import statement to the top of this buffer"] + ["Remove import" python-remove-import + :help "Remove an import statement from the top of this buffer"] + ["Sort imports" python-sort-imports + :help "Sort the import statements at the top of this buffer"] + ["Fix imports" python-fix-imports + :help "Add missing imports and remove unused ones from the current buffer"] + "-----" + ("Toggle..." + ["Subword Mode" subword-mode + :style toggle :selected subword-mode + :help "Toggle subword movement and editing mode"]))) (defvar python-ts-mode-map (copy-keymap python-mode-map) "Keymap for `python-ts-mode'.") -- 2.39.2