2010-10-12 1 views
4

Я пытался научить себя emacs, и потому что я использую dvorak, я глупо отскакиваю C-c до ключа движения и привык к нему. Теперь я действительно начинаю с ним программировать, и я загрузил файл python и заметил, что C-c является префиксом для всех специальных команд в python-mode.Переопределить ключ префикса основного режима в Emacs

Могу ли я перекрыть ключ префикса и изменить все команды python одним махом в моем файле init.el? Если нет, следует ли переписывать все команды python индивидуально?

ответ

1

Если вы посмотрите на исходный код для python.el, вы увидите, что команды были добавлены индивидуально, используя полную спецификацию, например. (define-key map "\C-c\C-r" 'python-send-region).

Итак, вам придется переделать их все самостоятельно. Тем не менее, это довольно прямолинейно. Из вашего комментария вы хотите изменить префиксный ключ, чтобы быть C- ', и трюк к тому, чтобы ускользнуть вправо, - это не использовать экраны вообще, а вместо этого использовать макрос kbd (documentation link).

При том, что вы можете обновить определение режима-карты, чтобы быть:

(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)) 
+0

если я хочу использовать 'C-'', как мне избежать апострофа? (Я получаю ошибки, поэтому я предполагаю, что это проблема) – colinmarc

+0

@colinmarc Обновленный ответ на использование этого префикса. –

+0

на несвязанной ноте, как вы получаете уценку для отображения таких клавиш? – colinmarc

3

Если вы хотите Ctrl + C действовать как left и F12 действовать как C-c:

(define-key key-translation-map [f12] "\C-c") 
(define-key key-translation-map "\C-c" [left]) 

Обратите внимание, что это также повлияет на привязки нескольких ключей, например вам нужно будет ввести Ctrl + XF12 для выхода из Emacs. Оборотной стороной этой монеты является то, что C-c C-c напечатан как F12F12.

 Смежные вопросы

  • Нет связанных вопросов^_^