Logotipos
Basicamente o que eu ” Nas últimas semanas, tenho tentado personalizar meus atalhos de teclado, um modo de cada vez; portanto, passei por cada modo um a um e limpei completamente o mapa de teclado individualmente. E vinculando as funções que considero úteis.
Também estou fazendo isso para fins educacionais para aprender mais sobre o funcionamento interno dos mapas de teclado, como eles se relacionam, como manipulá-los etc.
Mas o que me prendeu é que algumas chaves (ou functions
/ macros
; não claro como eles devem ser chamados) estão definidos. Por exemplo <backtab>
, <C-return>
, <C-tab>
, <C-iso-lefttab>
, etc.
Eu desviei todas as teclas de função em function-key-map
e local-function-map
usando o comando: (setf (cdr <keymap>) nil)
Mas, ainda assim, essas chaves ainda parecem persistir na existência.
Talvez eu esteja apenas confundindo tentando compreender os vários níveis de abstração ao mesmo tempo.
Pergunta
Então, como eu poderia obliterar completamente essas chaves, para que eu pudesse começar com os primeiros princípios e criá-los sozinho (com seus próprios nomes e funcionalidades personalizados)?
Pergunta bônus
Por que (define-key input-decode-map [?\C-i] (kbd "<C-i>"))
cria uma abstração que interpreta as chaves C-i
e <C-i>
de forma diferente?
Control + i == C-i
== ^I
== TAB
Control + i = = <C-i>
! = TAB
Isso talvez tenha algo a ver com a mudança de paradigma do meu pensamento que precisa acontecer em ordem entender melhor os mapas de teclado?
Acho que realmente ajudaria a mim e às pessoas no futuro se alguém pudesse fazer um exemplo trivial e complexo em um formato como este (presumindo que o modo principal atual seja text-mode
):
keypress Control + Backspace ->
local-function-keymap Control + Backspace = <C-backspace>
->
text-mode-map <C-backspace>
= nil
->
mapa global <C-backspace>
= backward-kill-word
ATUALIZAÇÃO
Descobri que você pode (meio que) oblitera as funções e, em seguida, vincule-as novamente às chaves ASCII correspondentes, como:
(setf (cdr x-alternatives-map) nil) (setf (cdr function-key-map) nil) (setf (cdr local-function-key-map) nil) (define-key local-function-key-map (kbd "<tab>") [9]) (define-key local-function-key-map (kbd "<return>") [13]) (define-key local-function-key-map (kbd "<escape>") [27]) (define-key local-function-key-map (kbd "<backspace>") [127])
Mas mesmo que eu nunca religue as chaves, por algum motivo sem o meu conhecimento, o mod ifiers das chaves ainda funcionam. Então, há um mapa de teclado que “simplesmente não conheço?
if <tab> = undefined C-<tab> = defined
Comentários
- É ' um mistério para mim. 🙁 Há ' s também
x-alternatives-map
ekey-translation-map
einput-decode-map
, mas posso ' descobrir onde travar ' s definição vem de… - Acho que posso ter descoberto onde eles são definidos. Parece que eles estão codificados no
keyboard.c
arquivo de origem . Portanto, não há como apagá-los completamente.
Resposta
Talvez eu possa responder parte de sua (s) pergunta (s). Outros provavelmente podem ajudar mais aqui.
<backtab>
é chamada de “tecla de função”, mas pode ser associada a um comando em qualquer mapa de teclado. (Esqueça function-key-map
neste contexto.)
Vanilla Emacs (emacs -Q
, sem arquivo init) vincula algumas teclas de função em vários mapas de teclado. E as bibliotecas que você carrega também podem fazer isso.
Se você realmente deseja remover as ligações de teclas de função, eu sugiro que você trabalhe a partir dos modos que são atuais em um determinado momento, em qualquer contexto. Use C-h k
para descobrir a que essa chave está vinculada. Determine a qual mapa de teclado ela está vinculada (normalmente um mapa de teclado de modo) e, em seguida, desvincule-o desse mapa (em seu arquivo init , no gancho de modo, por exemplo). Enxágue e repita.
Você pode ver as chaves que estão atualmente vinculadas em um determinado mapa de teclado usando C-h M-k
(describe-keymap
) seguido por uma variável associada a um mapa de teclado (ou seguido por um mapa de teclado real, se não houver nenhuma variável).Você precisa da biblioteca help-fns+.el
se quiser usar describe-keymap
.
Algumas teclas de função (como backtab
e f1
, ou melhor, <backtab>
e <f1>
( mas eu prefiro a notação simples ) são bastante padrão. Outros são específicos do Emacs. Você pode pense em uma tecla de função como um nome lógico para algo que pode ter diferentes implementações físicas. backtab
é tipicamente essencialmente S-TAB
, por exemplo. é o que está por trás da indicação de “tradução” que você às vezes vê em *Help*
para C-h k
.
( Mas eu me pergunto por que, exceto para aprender sobre chaves e mapas de teclado (o que é uma coisa boa), você está realizando este exercício de remoção de combinações de teclas. Mais típico é simplesmente ligar uma chave diferente ao comando cuja ligação você não gosta e. De qualquer forma, não preciso entender o porquê.
keyboard.c
arquivo de origem . Portanto, não há como eliminá-los completamente.