liga o Controle a outra chave no Emacs 23

1

Estou usando o GNU Emacs 23.2. Eu gostaria de ligar [Control] à chave ö no meu teclado (alemão). Dessa forma, posso acionar confortavelmente C - em comandos de prefixo com a mão direita. Infelizmente não tenho ideia de como fazer isso. O global-set-key do Emacs não ajuda aqui, pois pressionar C - não é um comando.

Atualização: estou no Win32 e no GNU / Linux. Eu gostaria de ter essa ligação apenas no emacs - conseguida com os próprios meios do emacs.

    
por emacser 28.01.2011 / 14:46

2 respostas

3

Que tal uma tecla Bloqueio de controle ?

Um obstáculo para um equivalente completo ao Controle é que ele precisaria saber quando foi mantido pressionado e quando foi liberado. Os eventos de teclado do Emacs (ao contrário dos eventos de mouse) não são divididos em partes 'para baixo' e 'para cima', o que torna 'liberado' para nós detectarmos lá. Por exemplo, a única diferença significativa entre C-x C-o e C-xo é o evento 'control-up' antes do segundo caractere. No entanto, isso é apenas um problema se você 'soltar' parte de uma sequência de teclas

O método aqui permite ligar qualquer tecla como Bloqueio de controle dentro do Emacs. Eu também incluí algumas soluções fáceis para seqüências de teclas que liberam a tecla Control na metade.

O código a seguir fornece uma ligação 'Control Lock', que mantém pressionado o modificador para uma sequência de teclas inteira. O exemplo abaixo vincula isso a ö , mas você pode vinculá-lo a qualquer coisa que desejar.

(defun read-control-sequence (prompt)
  (let (keys)
    (setq extra-keyboard-modifiers ?\C-a)
    (setq keys (read-key-sequence-vector (or prompt "[Control lock]")))
    (setq extra-keyboard-modifiers 0)
    keys))

(define-key key-translation-map [?ö] 'read-control-sequence)

Para usar isto, simplesmente pressione (e solte) ö . A próxima tecla agirá como se control fosse pressionado. Se a chave que você digitou era uma chave de prefixo (por exemplo, você pressionou x para obter Cx ) então o control permanecerá pressionado para a próxima chave, e assim por diante até você pressionar uma tecla sem prefixo.

Se você usa muito isso, você também pode querer adicionar ligações em seu .emacs para comandos comuns que não 'soltam' o controle no meio do caminho. Por exemplo, isso:

(global-set-key (kbd "C-x C-4")
                (lookup-key (current-global-map)
                            (kbd "C-x 4")))

fará com que todos os comandos que estão iniciando Cx 4 também estejam disponíveis em Cx C-4 , de modo que digitar ö x 4 f execute find-file-other-window .

Você também pode achar útil adicionar um mapeamento (por exemplo, capital Ö ) apenas para fornecer um C-x autônomo:

(define-key key-translation-map [?Ö] [(control ?x)])

Todo o código acima pode ser instalado (como de costume) adicionando-o ao seu arquivo .emacs e reiniciando o Emacs, ou digitando C-x C-e após cada expressão de nível superior. Você deve descobrir que essa abordagem se integra com o resto do Emacs mais ou menos perfeitamente.

    
por 10.03.2011 / 20:53
1

Não é possível, control é uma tecla modificadora e é manipulada pelo sistema operacional / gerenciador de janelas.

Veja esta pergunta no SO: Mapeamento Caps Lock Controlar a partir do emacs no Windows

    
por 28.01.2011 / 18:17

Tags