Lassen Sie Emacs Binärdateien automatisch im Hexl-Modus öffnen

8

Wie kann ich Emacs dazu bringen, Binärdateien im Hexl-Modus automatisch zu öffnen? Es ist wahrscheinlich ausreichend, "binär" als "enthält ein Null-Byte" zu definieren (ich nehme an, https://github.com/audreyr/binaryornot könnte verwendet werden, wenn dies zu einer unzureichenden Heuristik führt).

asmeurer
quelle

Antworten:

5

Wenn Sie wissen, dass die Dateierweiterungen funktionieren, ist die beste Lösung, einfach den Auto-Modus-Alist zu verwenden, um den Hexl-Modus zu starten.

Wenn nicht, und Sie nehmen das, was Sie gesagt haben, wörtlich:

It's probably sufficient to define "binary" as "contains a null byte"

Sie können dies tun, indem Sie eine Funktion hinzufügen, die den Hexl-Modus aktiviert, wenn eine Datei ein Null-Byte enthält find-file-hooks.

Hier ist eine Implementierung:

(defun buffer-binary-p (&optional buffer)
  "Return whether BUFFER or the current buffer is binary.

A binary buffer is defined as containing at least on null byte.

Returns either nil, or the position of the first null byte."
  (with-current-buffer (or buffer (current-buffer))
    (save-excursion
      (goto-char (point-min))
      (search-forward (string ?\x00) nil t 1))))

(defun hexl-if-binary ()
  "If `hexl-mode' is not already active, and the current buffer
is binary, activate `hexl-mode'."
  (interactive)
  (unless (eq major-mode 'hexl-mode)
    (when (buffer-binary-p)
      (hexl-mode))))

(add-hook 'find-file-hooks 'hexl-if-binary)
Jordon Biondo
quelle
1
Genial, das scheint gut zu funktionieren.
Asmeurer