Un terminal de texto transmite solo caracteres (más precisamente, bytes), no claves. Las teclas y los acordes de teclado (teclas con modificadores) están codificados como secuencias de caracteres. Las claves que insertan caracteres imprimibles se envían como ellos mismos; Las teclas de función se envían como secuencias de escape. La mayoría de las secuencias de escape consisten en el carácter Escape ( ?\e
en la sintaxis de Emacs) seguido de dos o más caracteres imprimibles. Consulte Teclas de control y arriba / abajo en el terminal para uso de emacs y ¿Cómo funcionan la entrada del teclado y la salida de texto? para más información.
Emacs tiene un mecanismo para traducir secuencias de escape en su propia noción de claves. La tabla de traducción input-decode-map
se inicializa cuando se inicia Emacs (o más precisamente, cuando se abre un nuevo marco: esta variable tiene un valor diferente en cada terminal). A veces, Emacs no conoce todas las secuencias de escape enviadas por el terminal.
En su caso, parece que Emacs tiene una interpretación incorrecta para la secuencia de escape enviada por Shift+ Up. Necesitas decirle que lo interprete como en S-up
lugar de select
. Primero, descubra cuál es la secuencia de escape. En el *scratch*
búfer, presione Ctrl+ Qluego Shift+ Up. El comando C-q
hace que el siguiente carácter, que es el carácter de escape, se inserte literalmente, seguido del resto de la secuencia de escape. Digamos que Shift+ Upenvía \e[1;2A
en nuestro sistema, entonces deberá redefinir la entrada correspondiente en input-mode-map
:
(define-key input-decode-map "\e[1;2A" [S-up])
En principio, input-decode-map
debe establecerse por terminal. En la práctica, es muy raro tener dos terminales en los que la misma secuencia de escape codifique diferentes claves, por lo que una configuración global funcionará bien.
Are the (define-key ...)
Se supone que los comandos deben entrar en init.el? ¿Hay un ejemplo detallado en algún lugar que pueda mirar?define-key
comandos @vfclists van a su archivo init. Eso puede ser~/.emacs.d/init.el
o un par de otras ubicaciones. Encontrarás muchos ejemplos de usosdefine-key
al buscardefine-key
, pero encontrar qué mapa vincular es otra cuestión. Varios mapas están involucrados:global-map
,input-decode-map
,function-key-map
,keyboard-translate-map
. No sé cómo responder a tu pregunta porque no sé Spacemacs. No recomiendo el uso de paquetes como Spacemacs que redefinen desordenadamente las interfaces estándar.input-decode-map
después de encontrar algunos ejemplos. ¿Puedo considerar que seinput-decode-map
aplica cuando el usuario ingresa texto en un búfer?input-decode-map
es uno de los mapas de teclas que se aplican. Consulte el manual para más detalles.En emacs, la región está delimitada por el punto (cursor) y la marca (alguna posición anterior del cursor, que ha sido "marcada").
Por lo tanto, para "seleccionar una región", debe colocar esa marca y luego mover el punto.
La forma más fácil de colocar la marca es presionar
C-SPC
. Luego, simplemente mueva el cursor, verá que la "región" se extiende como lo hace.Para "deseleccionar la región", puede presionar
C-SPC
nuevamente.Dado que "shift + movimiento" es una combinación de teclas común en otro software, por defecto, emula este comportamiento de "seleccionar región". Sin embargo, no funciona en la terminal, porque shift no se puede enviar a emacs como una tecla modificadora.
Tenga en cuenta que, en general, el
C-SPC
método es mucho más poderoso que otros métodos para seleccionar una región: no está limitado a arriba / abajo / izquierda / derecha para el movimiento (puede usar la búsqueda, por ejemplo ...), y no requiere que mantienes una combinación de teclas incómoda durante mucho tiempo.fuente