Versión corta: ¿Puedo hacer que Emacs muestre \ff
o \xff
no \377
?
Versión larga: suponga que abre un archivo que no es completamente texto y tiene algunos datos binarios (digamos un archivo PostScript o PDF). Por ejemplo, suponga que abre la Tarjeta de referencia de GNU Emacs (PDF) .
Luego, para bytes fuera del rango imprimible ASCII (32–126),
- Emacs muestra los bytes "altos" (bytes con un valor de 128 a 255) como secuencias de escape octal: 128 se muestra como
\200
, 129 se muestra como\201
, ..., 255 se muestra como\377
. - Emacs muestra los bytes del 0 al 31 (excepto el byte 9 que se muestra como una pestaña no
^I
, y el byte 10 que se muestra como una nueva línea no^J
) como un cursor seguido del carácter que está adelante 64: el byte 0 se muestra como^@
byte 1 se muestra como^A
, ..., el byte 26 se muestra como^Z
, el byte 27 se muestra como^[
, ..., el byte 31 se muestra como^_
. Además, Emacs muestra el byte 127 como^?
.
Sé que la razón por la que Emacs muestra octal es histórica: en algún momento hace algunas décadas, octal se usaba más comúnmente. (Por ejemplo, man ascii
comienza con octal primero, y TeX admite secuencias de escape octal). Pero como octal es menos útil que hexadecimal en estos días (por ejemplo, para comparar con la salida de hexdump
las representaciones de bytes de Python), me gustaría ver hexadecimal secuencias de escape. ¿Cómo puedo cambiar esto?
(Nota: las secuencias de escape octal se muestran resaltadas en lugar de verse como texto normal, y por supuesto no es posible "entrar" en el carácter de escape (es decir, golpear C-f
en el punto anterior lo \343
lleva al punto posterior \343
); me gustaría retener esto.)
fuente
editar : con Emacs 26.1 o posterior, está
(setq display-raw-bytes-as-hex t)
lejos.No puedes. La visualización de no imprimibles por encima del rango ASCII imprimible está codificada en
xdisp.c
:Envié un parche arreglando esto a debbugs .
fuente
Lo descubrí gracias a la respuesta de Gilles y al hilo 2010/2011 sobre
gnu.emacs.help
"¿Cómo cambiar del código de caracteres octal escapado a HEX escapado?" ( Grupos de Google , Nabble ).Los detalles de cómo Emacs muestra los caracteres se encuentran en la sección Pantalla> Pantalla de texto (“Cómo se muestra el texto”) del manual de Emacs ( C-h r), y en la sección Pantalla> Pantalla de caracteres del Manual de referencia de Emacs Lisp. Lo que hay que hacer es cambiar la tabla de visualización de los caracteres 128 a 255 (y cualquier otro carácter que se quiera mostrar como escapes hexadecimales).
Tuve que hacer dos cambios menores a partir de la respuesta de Gilles:
En lugar de algo como
Tuve que usar algo como
La configuración
standard-display-table
no siempre es suficiente, porque algunos modos (comoglobal-whitespace-mode
) pueden estropearlo. Y luego parece que debes configurarlobuffer-display-table
.Entonces, en su lugar, hice una función interactiva que puedo invocar cuando quiero que la pantalla cambie en un búfer específico.
Con esto, si abro
refcard.pdf
y ejecuto M-x use-hex-not-octal, obtengo lo siguiente, para la misma región que en la pregunta:fuente
El modo hexl de Emacs debe hacer lo que desee: es un modo principal que proporciona soporte para ver y editar archivos binarios. Use Mx hexl-find-file en lugar de Cx Cf para visitar el archivo y comenzar. Puede encontrar más detalles en el manual de información de Emacs o en https://www.gnu.org/software/emacs/manual/html_node/emacs/Editing-Binary-Files.html .
fuente