Información rápida de un carácter en Emacs (con nombre Unicode y código)

La función describe-char de Emacs es tremendamente útil. Si la llamamos interactivamente nos desplegará una ventana contigua con una información prolija del carácter sobre el que tenemos situado el cursor. Lo que ocurre es que esa información puede llegar a ser muchas veces demasiado densa, cuando lo que queremos tan sólo es conocer o recordar unos pocos datos. En mi caso, me basta y me sobra con:

Nombre canónico Unicode Código hexadecimal del carácter y, ya puestos y si el carácter es complejo, la descomposición canónica y los dos códigos simples

Así que no me ha sido muy difícil escribir esta sencilla función. Muestra en el echo-area del minibúfer los datos anteriores y, por si queremos hacer uso de ellos más tarde, los guarda en el portapapeles de Emacs, el kill-ring. La función quedó tal que así:

( defun nombre-caracter-actual () "muestra el nombre Unicode del carácter con su código actual en el minibúfer y lo copia en el kill-ring" ( interactive ) ( let* ((nombre-caracter (get-char-code-property (char-after (point)) 'name)) ;; pasamos el código a hexadecimal (codigo (format "#%x" (char-after (point)))) (desc (get-char-code-property (char-after (point)) 'decomposition)) (nombre-codigo (concat nombre-caracter " / " codigo " / descomp: " desc "\s" (mapconcat ( lambda (cod) (format "#%x" cod)) desc "\s+\s" )))) (kill-new nombre-codigo) (message nombre-codigo)))

Y sigue una breve explicación. Primero declaramos una lista de variables locales que deben tenerse en cuenta por su orden, así que usamos la versión estrellada de la expresión let:

nombre-caracter nos devuelve como cadena el nombre canónico Unicode. Para ello echamos mano de la función get-char-code-property llamando a la propiedad name

nos devuelve como cadena el nombre canónico Unicode. Para ello echamos mano de la función llamando a la propiedad codigo nos da como cadena el código hexadecimal. Como Emacs trabaja con códigos decimales, debemos convertirlo a hexadecimal. Véase, para más información, la documentación de la expresión format

nos da como cadena el código hexadecimal. Como Emacs trabaja con códigos decimales, debemos convertirlo a hexadecimal. Véase, para más información, la documentación de la expresión desc nos da el carácter compuesto por combinación

nos da el carácter compuesto por combinación nombre-codigo concatena todas las variables. Para sacar el código de los caracteres combinatorios usamos una expresión mapconcat , ya que la variable desc nos da una lista de dos códigos decimales.

Con nuestra función ya evaluada, si la llamamos con el cursor en, por ejemplo, la letra a con acento á , en el minibúfer nos aparecerá: LATIN SMALL LETTER A WITH ACUTE / #e1 / descomp: á #61 + #301 . Los códigos hexadecimales hay que leerlos en Emacs sustituyendo el signo de la almohadilla # por los ceros necesarios. De tal forma que tenemos: