Как я могу заставить Emacs предупредить меня, если я собираюсь открыть файл, который не содержит текста?

Пример: когда я редактирую исходный код c++ в файле test.cpp и компилирую его как исполняемый test в том же каталоге, я часто случайно открываю test двоичного файла.

1 ответ1

2

Emacs не может предупредить вас, что файл не содержит текста, если он либо не откроет его (чтобы он мог видеть его содержимое), либо не попросит другую программу выяснить это (возможно, с помощью чего-то вроде команды file Unix).

Проблема с последним подходом состоит в том, что Emacs может обрабатывать многие виды двоичных файлов, поэтому вам потребуется, чтобы эта внешняя программа также знала, какие типы двоичных файлов распознает Emacs, включая поддержку, добавляемую дополнительными библиотеками, которые могут динамически изменяться и для каждого пользователя.

Я не думаю, что есть хорошие варианты там.

Что именно вы пытаетесь избежать?

Редактировать:

Поскольку требуемый тест для данного примера основан только на именах файлов, следующий подход будет приемлемым.

(defvar my-find-file-check-source-extensions
  '(".cpp" ".cc"))

(defadvice find-file-read-args (after my-find-file-read-args-check-source)
  (let* ((filename (car ad-return-value))
         (source-filename
          (catch 'source-file-exists
            (mapc (lambda (ext)
                    (let ((source-filename (concat filename ext)))
                      (when (file-exists-p source-filename)
                        (throw 'source-file-exists source-filename))))
                  my-find-file-check-source-extensions)
            nil)))

    (and source-filename
         (not (y-or-n-p (format "Source file %s detected. Are you sure you \
want to open %s? " source-filename filename)))
         (error "find-file aborted by user"))))

(ad-activate 'find-file-read-args)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .