A menudo encuentro que necesito insertar caracteres Unicode que no tienen un enlace predeterminado iso-transl-ctl-x-8-map, es decir, caracteres que no se pueden insertar usando C-x 8seguido de una o más letras / caracteres de puntuación.
Para agregar enlaces al C-x 8mapa de teclas , generalmente
- definir un comando personalizado para insertar un carácter Unicode dado, como: - (defun ucs-rightwards-arrow () "Insert unicode symbol: →" (interactive) (insert-char #x2192))
- agregue un enlace para este comando al mapa mediante - (define-key iso-transl-ctl-x-8-map (kbd "a") 'ucs-rightwards-arrow)
Dado que el C-x 8mapa de teclas realmente solo combina las combinaciones de teclas con caracteres individuales, me pregunto:
P: ¿Existe una forma más ligera / idiomática de extender el C-x 8mapa de teclas?
                    
                        key-bindings
                                keymap
                                unicode
                                
                    
                    
                        itsjeyd
fuente
                
                
            fuente

La biblioteca
ucs-cmds.elpuede ayudar.Proporciona una macro
ucsc-make-commandspara crear rápidamente un conjunto de comandos que insertan caracteres Unicode. Le proporciona una expresión regular, que se compara con todos los nombres de caracteres Unicode (enucs-names). Se crea un comando de inserción para cada uno de los caracteres cuyo nombre coincide. (Los nombres de los comandos son esencialmente los mismos que los nombres de caracteres; consulte a continuación).Ejemplos de creaciones de comandos:
Esta es la cadena de documentación:
Si desea vincular los comandos que crea a las teclas de manera sistemática, puede crear fácilmente una macro basada en el código
ucsc-make-commandsque crea los comandos que desea y los vincula. Macroucsc-make-commandssimplemente itera sobre todos los autos Unicode y crea comandos para aquellos cuyos nombres coinciden con elREGEXPargumento.Durante una iteración, tiene acceso al nombre del personaje y su punto de código. Calcule un mapeo regular conveniente de puntos de código o nombres de caracteres a las teclas, y su macro puede agregar los correos
define-keyelectrónicos apropiados además de los comandosdefun.La biblioteca también proporciona un comando
ucsc-insert, que puede reemplazar el comando vanillainsert-char. El comportamiento y el código deucsc-insertson idénticos a los deinsert-charexcepto lo que sucede cuando usa un argumento de prefijo negativo:Actúa como si el valor del prefijo-arg fuera positivo. Entonces, un valor de -3 inserta tres copias del personaje, al igual que 3.
Además de insertar el carácter, define un comando que puede usar posteriormente para insertar ese carácter. Puede usar un argumento de prefijo con ese comando para insertar varias copias del carácter dado.
Esto le da un comando hecho a medida para insertar un carácter Unicode dado. Luego puede vincular el comando a una secuencia de teclas, agregando efectivamente caracteres Unicode a su teclado.
Siempre que
insert-charhace algo (no hace nada por un prefijo negativo arg),ucsc-inserthace lo mismo. Debido a esto, se puede obligarucsc-insertaC-x 8 RETcomo un reemplazo parainsert-char:Si solo necesita unos pocos de estos comandos para insertar caracteres Unicode particulares, utilizarlos
ucsc-insertpara definirlos es lo suficientemente conveniente. Si necesita muchos de estos comandos, entonces macroucsc-make-commandses su amigo.fuente
ucsc-insertparece que podría ayudar a cubrir mis casos de uso. La definición de nuevos comandos de forma interactiva (víaM--M-xucsc-insertRET#x2190RET) funciona bien, pero cuando trato de ejecutarlos (después de vincularlos vía(define-key iso-transl-ctl-x-8-map (kbd "b") 'left-arrow)) me sale "Argumento de tipo incorrecto: wholenump, nil". ¿Podría dar un ejemplo de cómoucsc-insertse puede utilizar para definir mediante programación un enlace para un carácter Unicode específico?ucs-cmds.el. Debe reflejarse en MELPA dentro de las 24 horas. Gracias.(ucsc-insert #x2192 -1) (define-key ctl-x-map (kbd "8 a") 'right-arrow), lo que definitivamente es más conciso que mi enfoque original. Sin embargo, debo preguntar si esta es la forma prevista de usarucsc-insertpara definir comandos para símbolos Unicode que persisten en las sesiones. Tengo la sensación de que podría no serlo, porque hace que Emacs inserte caracteres para los que estoy definiendo comandos personalizados en el*scratch*búfer al inicio ...ucsc-insertes para que se comporte de la misma manera queucs-insert, ainsert-charmenos que use un prefijo negativo arg: siempre inserta un carácter . Si no desea insertar un carácter, pero solo desea definir un comando para insertar un carácter, puede usar macroucsc-make-commands. Pero tiene razón (nuevamente) de que sería bueno tener una función que simplemente defina un solo comando. Entonces agregué la función (comando)ucsc-define-char-insert-cmd. Por ejemplo:(ucsc-define-char-insert-cmd 8592)define el comando y devuelve su símbolo,left-arrow. Por favor intente lo último. Gracias.