Buat emacs secara otomatis membuka file biner dalam mode hexl

8

Bagaimana saya bisa membuat emacs secara otomatis membuka file biner dalam mode hexl? Mungkin cukup untuk mendefinisikan "biner" sebagai "berisi byte nol" (Saya kira https://github.com/audreyr/binaryornot dapat digunakan jika yang akhirnya menjadi heuristik tidak mencukupi).

penilai
sumber

Jawaban:

5

Jika Anda tahu ekstensi file berfungsi, solusi terbaik adalah dengan hanya menggunakan auto-mode-alist untuk memulai hexl-mode.

Jika tidak, dan Anda menerima apa yang Anda katakan secara harfiah:

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

Anda dapat melakukan ini dengan menambahkan fungsi yang mengaktifkan mode hexl jika file berisi byte nol ke find-file-hooks.

Berikut ini adalah implementasinya:

(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
sumber
1
Luar biasa, ini tampaknya bekerja dengan baik.
penanggung jawab