O Emacs religará o C-i enquanto mantém as ligações de abas

3

Estou usando o Aquamacs. Ele pode distinguir entre <tab> , a chave de tabulação atual e TAB , que vem da digitação de C-i . Quero associar C-i a 'next-line permanentemente. Isso funciona para isso:

(global-set-key (kbd "TAB") 'next-line)

Mas, em seguida, os mapas de modo substituem o TAB pelo comportamento de preenchimento automático ou o que quer que seja e eu perco a funcionalidade de próxima linha. Eu poderia colocar minha ligação no overriding-terminal-local-map, mas eu prefiro que os mapas de modo remapem <tab> , então eu ainda posso usar a função que o modo atribui à aba.

Eu posso religar a guia manualmente para cada modo que uso, mas espero que haja uma maneira fácil de redirecionar todos os mapeamentos TAB para a chave de tabulação sem bagunçar C-i .

    
por mckeed 15.05.2012 / 01:13

1 resposta

2

Isso é um pouco complicado, mas é possível. O que eu faço para essa situação exata é criar um modo menor, a saber gvol-mode , e então ligar C-i para previous-line (ou o que você quiser). Então eu ligo para a função abaixo.

(defun gvol-indent-for-tab-command ()
  "This is to fix 'indent-for-tab-command' for 'gvol-mode'.
It runs [tab] or C-i with 'gvol-mode' nil because 'gvol-mode'
binds C-i to a different command.  Ideally this should take into
account window system so that it can DTRT in a terminal (whatever
the right thing is)."
  (interactive)
  (let* ((gvol-mode nil)
         (command (or (key-binding [tab])
                      (key-binding "\C-i"))))
    ;; This is to satisfy 'python-indent-line' which checks
    ;; 'this-command' to cycle
    (setq this-command 'indent-for-tab-command)
    ;; Make people think this was called with C-i.  This allows
    ;; 'self-insert-command' to work
    (setq last-command-event 9)
    (call-interactively command)))

Para explicar um pouco, eu deixo o bind gvol-mode para nil para que quando eu fizer a pesquisa de chave, meu modo menor não esteja em jogo. Assim, ele encontrará a ligação para < tab > ou C-i que estaria no lugar se o modo secundário não estivesse ativado. Então, para que algumas funções funcionem, eu tenho que definir this-command para indent-for-tab-command . Eu também faço parecer que eu digitei C-i que permite trabalhar com yasnippet-mode IIRC.

    
por 24.05.2012 / 09:05