Como substituir ligações de teclas por `term`

8

Para algumas tarefas como o uso de Ruby prye tmuxtanto eshelle shellnão se comportam bem. Tentei usar term, mas minha incapacidade de substituir as teclas de atalho termtorna seu uso irritante.

Como posso definir, por exemplo, M-ocomo other-windowe M-kcomo kill-bufferquando se usa term?

Renan Ranelli
fonte
5
Minhas combinações de teclas funcionam no termmodo linha, mas apenas C-c C-j. Apenas alterno o modo char C-c C-ksempre que necessário.
Vamsi 26/09
Eu não sabia C-c C-je C-c C-k! Obrigado!
Renan Ranelli 27/09/14

Respostas:

6

talvez o uso ansi-termseja um pouco menos irritante, pois expõe um C-xprefixo, permitindo que você use, digamos, C-x oou C-x ksem nenhum truque especial.

Se isso não for suficiente, você pode usar a seguinte abordagem:

(defun expose-global-binding-in-term (binding)
   (define-key term-raw-map binding 
     (lookup-key (current-global-map) binding)))

(expose-global-binding-in-term (kbd "M-o"))
(expose-global-binding-in-term (kbd "M-k"))
...
Sigma
fonte
5

No modo termo, qualquer C-x whatevercombinação de teclas regular se torna alternativa C-c whatever. Cortesia de Josh Matthews

Agora, para definir combinações de teclas que estarão ativas apenas no modo termo, tente o seguinte:

(add-hook 'term-mode-hook
  (lambda () 
    (define-key term-raw-map (kbd "M-J") 'other-window)
    (define-key term-raw-map (kbd "M-k") 'kill-buffer)))
Nsukami _
fonte
Bom, resolve meu problema. Estou aceitando a resposta da @ Sigma porque é um pouco mais conveniente de configurar (não é necessário duplicar minhas ligações de mapa global no termo mapa bruto). Obrigado!
Renan Ranelli 27/09/14
1
term-mode-hookÉ muito provável que o @LeMeteore fazer essas chamadas não seja útil: você acabará reinstalando essas teclas sempre que o modo for ativado, em vez de fazê-lo apenas uma vez.
Sigma
@ Sigma você está certo. Na verdade, eu estava tentando encontrar rapidamente uma solução. Sua resposta é realmente mais conveniente.
Nsukami _