Emacs:使用十六进制转义序列显示

Emacs:使用十六进制转义序列显示

Emacs 将不带字形的字符显示为八进制转义序列“\OOO”,例如从 PDF 文件的开头:

%PDF-1.4
%\344\343\317\322
1 0 obj
[/PDF/ImageB/ImageC/ImageI/Text]
endobj
4 0 obj
<</Length 5 0 R/Filter/FlateDecode>>
stream
9\323\317\221\321\356j\305
endstream

我可以设置一些(相对简单的)配置来获取十六进制转义序列“\xFF”吗?例如:

%PDF-1.4
%\xE4\xE3\xCF\xD2
1 0 obj
[/PDF/ImageB/ImageC/ImageI/Text]
endobj
4 0 obj
<</Length 5 0 R/Filter/FlateDecode>>
stream
9\xD3\xCF\x91\xD1\xEEj\xC5
endstream

(使用文本模式,或基本模式,或...但不是十六进制模式)

答案1

我以前从来没有玩过这个,但是阅读了一下 Elisp 手册并进行了实验后,我认为你正在寻找这样的东西:

(let ((ii          128)
      (new-dtable  (make-display-table))
      (hex-string  nil))
  (while (< ii 256) ; Convert decimal codes 128 to 255.
    (setq hex-string  (format "%X" ii))
    (aset new-dtable ii
          (vector
           (make-glyph-code ?\ 'escape-glyph)
           (make-glyph-code ?x 'escape-glyph)
           (make-glyph-code (aref hex-string 0) 'escape-glyph)
           (make-glyph-code (aref hex-string 1) 'escape-glyph)))
    (setq ii  (1+ ii)))
  (set-window-display-table (selected-window) new-dtable))

如果您随后使用,比如说C-q 3 4 4 RET,通常会插入八进制转义序列\344,它将插入一个显示 的字形xE4

我查看的 Elisp 手册的相关部分是 node 下的部分Character Display

相关内容