Emacs ouvre automatiquement les fichiers binaires en mode hexl

8

Comment puis-je faire en sorte qu'emacs ouvre automatiquement les fichiers binaires en mode hexl? Il suffit probablement de définir «binaire» comme «contient un octet nul» (je suppose que https://github.com/audreyr/binaryornot pourrait être utilisé si cela finit par être une heuristique insuffisante).

asmeurer
la source

Réponses:

5

Si vous savez que les extensions de fichiers fonctionnent, la meilleure solution consiste simplement à utiliser la liste des modes automatiques pour démarrer le mode hexl.

Sinon, et vous prenez littéralement ce que vous avez dit:

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

Vous pouvez le faire en ajoutant une fonction qui active le mode hexl si un fichier contient un octet nul dans le find-file-hooks.

Voici une implémentation:

(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
la source
1
Génial, cela semble bien fonctionner.
asmeurer