Versão curta: Posso fazer o Emacs mostrar \ff
ou em \xff
vez de \377
?
Versão longa: suponha que você abra um arquivo que não seja totalmente texto e tenha alguns dados binários (por exemplo, um arquivo PostScript ou PDF). Por exemplo, suponha que você abra o Cartão de Referência GNU Emacs (PDF) .
Em seguida, para bytes fora do intervalo imprimível ASCII (32–126),
- O Emacs mostra os bytes "altos" (bytes com valor 128 a 255) como seqüências de escape octais: 128 é mostrado como
\200
, 129 é mostrado como\201
,…, 255 é mostrado como\377
. - O Emacs mostra os bytes de 0 a 31 (exceto o byte 9, que não é mostrado como uma guia
^I
e o byte 10, que não é uma nova linha^J
) como um sinal de intercalação seguido pelo caractere que está 64 à frente: o byte 0 é mostrado como^@
, byte 1 é mostrado como^A
,…, byte 26 é mostrado como^Z
, byte 27 é mostrado como^[
,…, byte 31 é mostrado como^_
. Além disso, o Emacs mostra o byte 127 como^?
.
Sei que a razão pela qual o Emacs mostra octal é histórica: em algum momento, algumas décadas atrás, octal era mais comumente usado. (Por exemplo, man ascii
começa com octal primeiro e o TeX suporta seqüências de escape octal.) Mas como octal é menos útil que o hexadecimal atualmente (por exemplo, para comparar com a saída hexdump
ou representações de string de bytes do Python), gostaria de ver o hexadecimal seqüências de escape. Como posso mudar isto?
(Nota: as seqüências octais de escape são mostradas realçadas em vez de parecerem texto normal e, é claro, não é possível entrar "no caractere de escape" (por exemplo, bater C-f
no ponto anterior \343
leva você ao ponto seguinte \343
); para reter isso.)
fonte
edit : Com o Emacs 26.1 ou posterior, está
(setq display-raw-bytes-as-hex t)
fora.Não, você não pode. A exibição de não imprimíveis acima da faixa ASCII imprimível é codificada em
xdisp.c
:Enviei um patch corrigindo isso para depuração .
fonte
Eu descobri isso graças à resposta de Gilles e ao tópico 2010/2011
gnu.emacs.help
chamado "Como alternar do código de caractere octal com escape para o HEX com escape?" ( Grupos do Google , Nabble ).Os detalhes de como o Emacs exibe caracteres estão na seção Exibição> Exibição de texto (“Como o texto é exibido”) do manual do Emacs ( C-h r) e na seção Exibição> Exibição de caracteres do Manual de referência do Emacs Lisp. O que se deve fazer é alterar a tabela de exibição dos caracteres 128 para 255 (e quaisquer outros caracteres desejados, como escapes hexadecimais).
Eu tive que fazer duas pequenas alterações na resposta de Gilles:
Em vez de algo como
Eu tive que usar algo como
A configuração
standard-display-table
nem sempre é suficiente, porque alguns modos (comoglobal-whitespace-mode
) podem atrapalhar. E então parece que você precisa definirbuffer-display-table
.Então, em vez disso, criei uma função interativa que posso chamar quando quero que a exibição seja alterada em um buffer específico.
Com isso, se eu abrir
refcard.pdf
e executar M-x use-hex-not-octal, obtenho o seguinte, para a mesma região da pergunta:fonte
O modo hexl do Emacs deve fazer o que você deseja - é um modo principal que fornece suporte para visualizar e editar arquivos binários. Use Mx hexl-find-file em vez de Cx Cf para visitar o arquivo e começar. Mais detalhes podem ser encontrados no manual de informações do Emacs ou em https://www.gnu.org/software/emacs/manual/html_node/emacs/Editing-Binary-Files.html .
fonte