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ónget-char-code-property
llamando a la propiedadname
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ónformat
desc
nos da el carácter compuesto por combinaciónnombre-codigo
concatena todas las variables. Para sacar el código de los caracteres combinatorios usamos una expresiónmapconcat
, ya que la variabledesc
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: á #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:
#e1
, el código del carácter precompuesto, que equivale aU+00E1
#61 + #301
, los dos códigos combinatorios, que equivalen aU+0061
(la letraa
) yU+=0301
(el acento agudo de combinación).
∞
Publicado: 15/01/20
Última actualización: 21/01/22
Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.