Logos
Básicamente, lo que yo » Lo que he estado haciendo durante las últimas dos semanas es intentar personalizar mis combinaciones de teclas de un modo a la vez, por lo que he estado revisando cada modo uno por uno y borrando completamente su mapa de teclas de forma individual. Y luego vincular las funciones que encuentro útiles.
También estoy haciendo esto con fines educativos para aprender más sobre el funcionamiento interno de los mapas de teclas, cómo se relacionan, cómo manipularlos, etc.
Pero lo que me tiene atascado es cómo algunas claves (o functions
/ macros
; yo «no seguro cómo deberían llamarse) están definidos. Por ejemplo, <backtab>
, <C-return>
, <C-tab>
, <C-iso-lefttab>
, etc.
He desatado todas las teclas de función en function-key-map
y local-function-map
usando el comando: (setf (cdr <keymap>) nil)
Pero, sin embargo, estas claves todavía parecen persistir en existencia.
Quizás estoy confundiendo yo mismo tratando de entender los múltiples niveles de abstracción al mismo tiempo ..
Pregunta
Entonces, ¿cómo podría borrar por completo estas claves, de modo que pueda comenzar desde los primeros principios y crearlas yo mismo (con sus propios nombres y funciones personalizados)?
Pregunta adicional
¿Por qué (define-key input-decode-map [?\C-i] (kbd "<C-i>"))
crea una abstracción que interpreta las claves C-i
y <C-i>
de forma diferente?
Control + i == C-i
== ^I
== TAB
Control + i = = <C-i>
! = TAB
¿Tiene esto quizás algo que ver con el cambio de paradigma de mi pensamiento que debe suceder para para comprender mejor los mapas de teclas?
Creo que realmente nos ayudaría a mí y a la gente en el futuro si alguien pudiera hacer un ejemplo trivial y complejo en un formato como este (asumiendo que el modo principal actual es text-mode
):
pulsación de tecla Control + Retroceso ->
mapa de teclas de función local Control + Retroceso = <C-backspace>
->
text-mode-map <C-backspace>
= nil
->
global-map <C-backspace>
= backward-kill-word
ACTUALIZAR
Descubrí que puedes (algo así) borrar las funciones y luego volver a vincularlas a sus claves ASCII correspondientes de esta manera:
(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])
Pero incluso si nunca vuelvo a vincular las claves, por alguna razón sin que yo lo sepa, el mod los ifiers de las claves todavía funcionan. Entonces, ¿hay un mapa de teclas que «no conozco?
if <tab> = undefined C-<tab> = defined
Comentarios
- Es ' un misterio para mí. 🙁 Hay ' también
x-alternatives-map
ykey-translation-map
yinput-decode-map
pero no puedo ' averiguar dónde está la pestaña proviene de… - Creo que puedo haber descubierto dónde están definidos. Parece que están codificados en
keyboard.c
archivo fuente . Por lo tanto, no hay forma de borrarlos por completo.
Respuesta
Tal vez pueda responder parte de sus preguntas. Otros probablemente puedan ayudar más aquí.
<backtab>
se llama «tecla de función», pero se puede vincular a un comando en cualquier mapa de teclas (Olvídese de function-key-map
en este contexto).
Vanilla Emacs (emacs -Q
, sin archivo de inicio) enlaza algunas teclas de función en varios mapas de teclas. Y las bibliotecas que carga también pueden hacerlo.
Si realmente desea eliminar los enlaces de teclas de función, le sugiero que trabaje desde los modos que están vigentes en un momento dado, en cualquier contexto dado. Use C-h k
para averiguar a qué está vinculada dicha clave. Determine en qué mapa de teclas está vinculada (generalmente un mapa de teclas de modo) y, luego, desvincúlela de ese mapa (en su archivo init , en el gancho de modo, por ejemplo). Enjuague y repita.
Puede ver las teclas que están enlazadas actualmente en un mapa de teclas dado usando C-h M-k
(describe-keymap
) seguida de una variable vinculada a un mapa de teclas (o seguida de un mapa de teclas real, si no hay ninguna variable).Necesita la biblioteca help-fns+.el
si desea utilizar describe-keymap
.
Algunas teclas de función (como backtab
y f1
, o más bien <backtab>
y <f1>
( pero prefiero la notación desnuda ) son bastante estándar. Otros son específicos de Emacs. Puede Piense en una tecla de función como un nombre lógico para algo que puede tener diferentes implementaciones físicas. backtab
suele ser esencialmente S-TAB
, por ejemplo. Este es lo que hay detrás de la indicación de «traducción» que a veces ves en *Help*
para C-h k
.
( Pero me pregunto por qué, además de aprender sobre claves y mapas de teclas (lo cual es bueno), está realizando este ejercicio de eliminación de enlaces de teclas. Más típico es simplemente enlazar una clave diferente al comando cuyo enlace no le gusta mi. De todos modos, no necesito entender por qué).
keyboard.c
archivo fuente . Por lo tanto, no hay forma de borrarlos por completo.