keybindings específicos do modo emacs

4

Estou tentando obter emacs (23.3 no Arch Linux) para mapear Ctrl + F12 para a função "compilar" integrada quando em C- modo (na verdade, o modo CC, que vem embutido também). Até agora eu tentei o seguinte:

(defun my-c-mode-common-hook (define-key c-mode-map (kbd "C-<f12>") 'compile))
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)

e:

(eval-after-load 'c-mode
  '(define-key c-mode-map (kbd "C-<f12>") 'compile))

Mas nem funciona; Eu recebo <C-f12> is undefined . Com base no que li aqui , aqui e aqui , não vejo por que não está funcionando. Alguma idéia?

    
por Wolf 08.08.2011 / 01:01

2 respostas

3

O modo C (e especificamente a variável c-mode-map ) é fornecido por um pacote chamado cc-mode , não c-mode .

(eval-after-load 'cc-mode
  '(define-key c-mode-map (kbd "C-<f12>") 'compile))

Para o seu outro método, como o vschum já respondeu , você está perdendo a lista de argumentos no seu defun . Além disso, c-mode-common-hook não é o lugar certo para isso: é executado toda vez que você entra no modo C. O momento certo para adicionar sua ligação é quando o modo C é carregado; você pode fazer isso através do mecanismo geral eval-after-load como acima, ou através de c-initialization-hook :

(defun my-c-mode-common-hook ()
  (define-key c-mode-map (kbd "C-<f12>") 'compile))
(add-hook 'c-initialization-hook 'my-c-mode-common-hook)
    
por 08.08.2011 / 01:39
3

Você tem um erro de digitação. Você está perdendo a definição do argumento para o defun. Neste caso, como a função my-c-mode-common-hook não aceita nenhum argumento, adicione um conjunto vazio de parens após o nome da função.

(defun my-c-mode-common-hook ()
    (define-key c-mode-map (kbd "C-<f12>") 'compile))
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
    
por 08.08.2011 / 01:16

Tags