Emacs: wyświetlanie za pomocą szesnastkowych sekwencji sterujących


3

Emacs wyświetla znaki bez glifów jako ósemkowe sekwencje ucieczki „OOO”, np. Od początku pliku 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

Czy mogę ustawić (stosunkowo prostą) konfigurację, aby uzyskać te w szesnastkowych sekwencjach ucieczki „xFF”? Tak jak:

%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

(przy użyciu trybu tekstowego lub trybu podstawowego, lub ... ale nie w trybie hexl)

Odpowiedzi:


2

Nigdy wcześniej z tym nie grałem, ale przeczytanie nieco podręcznika Elisp i eksperymentowanie sprawia, że ​​myślę, że czegoś takiego właśnie szukasz:

(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))

Jeśli następnie użyjesz, powiedzmy C-q 3 4 4 RET, który zwykle wstawia ósemkową sekwencję ucieczki \344, wstawi pokazujący glif xE4.

Odpowiednią częścią podręcznika Elisp, na którą patrzyłem, są te znajdujące się pod węzłem Character Display.


Wygląda dobrze, ale nie działa całkowicie. Nie mam teraz czasu na głębsze zbadanie, ale wygląda na to, że konwertuje nowo wstawione znaki, ale nie te wcześniej istniejące
Rolazaro Azeveires

To brzmi, że ma to związek ze sposobem działania funkcji redisplay i tabeli wyświetlania. Nie jestem ekspertem od tego. Może być konieczne wymuszenie ponownego wyświetlenia (np. force-mode-line-update z ALL arg), a nawet powróć do bufora (np. C-x v lub cofnij). (Zapraszamy do głosowania lub zaakceptowania odpowiedzi, BTW. ;-))
Drew

Upvoted, ponieważ jest przydatny, nie akceptowany (jeszcze?), Ponieważ (jeszcze) nie rozwiązuje go. I ja nienawidzić proszony o głosowanie
Rolazaro Azeveires

FYI - Dla mnie to robi konwertuj także wcześniej istniejące znaki w buforze. Czy próbowałeś dodać połączenie do force-mode-line-update (z argonem innym niż zero)? Dla mnie kod działa zarówno z Emacs 24 (niedawna migawka dev) jak i Emacs 23.4 z MS Windows.
Drew

Spróbuj także ikonifikować (minimalizować), a następnie przywracać ramkę lub po prostu zmienić rozmiar ramki. Spróbuj także zabić bufor i ponownie go utworzyć (przynajmniej aby sprawdzić, czy to pomaga).
Drew
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.