如何阻止 Emacs 打开二进制文件

如何阻止 Emacs 打开二进制文件

如果我要打开一个不包含文本的文件,如何让 Emacs 给我发出警告?

示例:当我在文件中编辑 C++ 源代码并将其编译为同一目录中的test.cpp可执行文件时,我经常会意外打开二进制文件。testtest

答案1

Emacs 无法警告你文件不包含文本,除非它打开它(以便它可以看到其内容),或者以其他方式要求其他程序查找(可能使用类似 Unixfile命令的东西)。

后一种方法的问题在于 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)

相关内容