如果我要打开一个不包含文本的文件,如何让 Emacs 给我发出警告?
示例:当我在文件中编辑 C++ 源代码并将其编译为同一目录中的test.cpp
可执行文件时,我经常会意外打开二进制文件。test
test
答案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)