Redéfinir principale touche préfixe de mode dans Emacs
-
29-09-2019 - |
Question
J'ai essayé moi-même enseigner emacs, et parce que je me sers Dvořák, je rebond bêtement C-c
à une touche de mouvement et s'y est habitué. Maintenant, je suis en fait commence à faire de la programmation avec elle, et j'ai chargé un fichier python et remarqué que C-c
est le préfixe à toutes les commandes spéciales dans python-mode
.
Puis-je REBIND la clé de préfixe et changer toutes les commandes de python d'un seul dans mon fichier init.el
? Sinon, dois-je rebind toutes les commandes de python individuellement?
La solution
Si vous regardez le code source pour python.el, vous verrez que les commandes ont été ajoutées individuellement en utilisant la spécification complète, par exemple (define-key map "\C-c\C-r" 'python-send-region)
.
Alors, vous allez devoir les refaire vous-même. Cela dit, il est assez simple. À partir de votre commentaire, vous voulez modifier la clé de préfixe à C - , et le truc pour s'échapper est juste de ne pas utiliser échappe à tout, mais au lieu d'utiliser la kbd
macro ( lien documentation ).
Avec cela, vous pouvez mettre à jour la définition mode carte pour être:
(defvar python-mode-map
(let ((map (make-sparse-keymap)))
;; Mostly taken from python-mode.el.
(define-key map ":" 'python-electric-colon)
(define-key map "\177" 'python-backspace)
(define-key map (kbd "C-' <") 'python-shift-left)
(define-key map (kbd "C-' >") 'python-shift-right)
(define-key map (kbd "C-' C-k") 'python-mark-block)
(define-key map (kbd "C-' C-d") 'python-pdbtrack-toggle-stack-tracking)
(define-key map (kbd "C-' C-n") 'python-next-statement)
(define-key map (kbd "C-' C-p") 'python-previous-statement)
(define-key map (kbd "C-' C-u") 'python-beginning-of-block)
(define-key map (kbd "C-' C-f") 'python-describe-symbol)
(define-key map (kbd "C-' C-w") 'python-check)
(define-key map (kbd "C-' C-v") 'python-check) ; a la sgml-mode
(define-key map (kbd "C-' C-s") 'python-send-string)
(define-key map (kbd "C-\\ M-x") 'python-send-defun)
(define-key map (kbd "C-' C-r") 'python-send-region)
(define-key map (kbd "C-' M-r") 'python-send-region-and-go)
(define-key map (kbd "C-' C-c") 'python-send-buffer)
(define-key map (kbd "C-' C-z") 'python-switch-to-python)
(define-key map (kbd "C-' C-m") 'python-load-file)
(define-key map (kbd "C-' C-l") 'python-load-file) ; a la cmuscheme
(substitute-key-definition 'complete-symbol 'symbol-complete
map global-map)
(define-key map (kbd "C-' C-i") 'python-find-imports)
(define-key map (kbd "C-' C-t") 'python-expand-template)
(easy-menu-define python-menu map "Python Mode menu"
`("Python"
:help "Python-specific Features"
["Shift region left" python-shift-left :active mark-active
:help "Shift by a single indentation step"]
["Shift region right" python-shift-right :active mark-active
:help "Shift by a single indentation step"]
"-"
["Mark block" python-mark-block
:help "Mark innermost block around point"]
["Mark def/class" mark-defun
:help "Mark innermost definition around point"]
"-"
["Start of block" python-beginning-of-block
:help "Go to start of innermost definition around point"]
["End of block" python-end-of-block
:help "Go to end of innermost definition around point"]
["Start of def/class" beginning-of-defun
:help "Go to start of innermost definition around point"]
["End of def/class" end-of-defun
:help "Go to end of innermost definition around point"]
"-"
("Templates..."
:help "Expand templates for compound statements"
:filter (lambda (&rest junk)
(abbrev-table-menu python-mode-abbrev-table)))
"-"
["Start interpreter" python-shell
:help "Run `inferior' Python in separate buffer"]
["Import/reload file" python-load-file
:help "Load into inferior Python session"]
["Eval buffer" python-send-buffer
:help "Evaluate buffer en bloc in inferior Python session"]
["Eval region" python-send-region :active mark-active
:help "Evaluate region en bloc in inferior Python session"]
["Eval def/class" python-send-defun
:help "Evaluate current definition in inferior Python session"]
["Switch to interpreter" python-switch-to-python
:help "Switch to inferior Python buffer"]
["Set default process" python-set-proc
:help "Make buffer's inferior process the default"
:active (buffer-live-p python-buffer)]
["Check file" python-check :help "Run pychecker"]
["Debugger" pdb :help "Run pdb under GUD"]
"-"
["Help on symbol" python-describe-symbol
:help "Use pydoc on symbol at point"]
["Complete symbol" symbol-complete
:help "Complete (qualified) symbol before point"]
["Find function" python-find-function
:help "Try to find source definition of function at point"]
["Update imports" python-find-imports
:help "Update list of top-level imports for completion"]))
map))
Autres conseils
Si vous voulez Ctrl + C pour agir comme left
et F12 pour agir comme C-c
:
(define-key key-translation-map [f12] "\C-c")
(define-key key-translation-map "\C-c" [left])
Notez que cela influera également sur les liaisons multi-clés, par exemple vous devez maintenant taper Ctrl + X F12 pour quitter Emacs. Le revers de cette pièce est que C-c C-c
est entré comme F12 F12 .