Os terminais conhecem caracteres, não chaves, portanto, chaves sem caractere correspondente precisam ser traduzidas em seqüências de escape e de volta.
Você pode escolher qualquer sequência de controle que não cause conflito e que o iterm2 e o Emacs concordem. Infelizmente, essas seqüências de controle não são padronizadas. \e[1;5A
e \e[1;5B
são escolhas populares (em que \e
é um caractere de escape).
O Emacs possui um sistema bastante complexo para traduzir seqüências de escape em chaves. Consulte keymaps de tradução no manual. Use input-decode-map
a menos que você tenha uma versão antiga do Emacs que não tenha.
(define-key input-decode-map "\e[1;5A" [C-up])
(define-key input-decode-map "\e[1;5B" [C-down])
Em iterm2, defina as seqüências de teclas correspondentes na guia "Chaves" do seu perfil. Veja Como posso obter o controle + seta para a esquerda para voltar uma palavra no iTerm2? para um guia ilustrado.
Veja também Emacs + paredit sob terminal (Terminal.app, iTerm, iTerm2 ) .