Cuaderno de GNUtas

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:

  1. Nombre canónico Unicode
  2. Código hexadecimal del carácter
  3. 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:

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:

  1. #e1, el código del carácter precompuesto, que equivale a U+00E1
  2. #61 + #301, los dos códigos combinatorios, que equivalen a U+0061 (la letra a) y U+=0301 (el acento agudo de combinación).

Publicado: 15/01/20

Última actualización: 18/05/20


Índice general

Acerca de...

Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.

© Juan Manuel Macías
Creado con esmero en
GNU Emacs