2009-10-27 149 views
0

我试图让emacs的delete-file函数删除名称中带有感叹号的文件。如何删除带有感叹号的文件!使用emacs的删除文件

特别的用例是我设置了emacs将所有备份文件保存在一个目录中并删除旧的备份文件。但是,当所有备份文件都放在一个目录中时,目录分隔符/被替换为!

当名称中带有感叹号的文件调用delete-file时,它将返回零,并且文件不会被删除。它不表示任何错误。通常,删除文件返回nil。无论如何,emacs的备份系统使用删除文件进行删除,我宁愿不重新定义整个功能只是为了更改一行。

我试着反斜杠感叹号和shell引用文件名字符串,都没有工作。我发现在我的配置中有一些东西导致了这一点,但我还没有弄清楚什么。我已经将问题的来源追踪到我自定义的system-move-file-to-trash函数,我现在必须调试它。

那么,我该如何做这项工作?

Emacs的版本: GNU Emacs的23.1.50.1
emacs的快照: 安装:1:20090730-1〜jaunty1

+0

尝试使用Emacs的正式发布,也许问题是在这中间版本。 – 2009-10-27 05:50:52

+1

对于任何读这个问题的人来说,问题在于你不应该对传递给'call-process'的字符串调用'shell-quote-argument'。显然'呼叫过程'绕过了外壳,所以外壳引用只会产生问题。 – 2009-10-29 16:49:49

回答

1

我找到了答案。我的自定义功能system-move-file-to-trash,其中delete-file会自动使用,不恰当地称为shell-quote-argument上的文件名。显然参数运行使用call-process而不是需要用shell引用。

3
M-x delete-file 

然后,只需输入文件名,不要逃避什么,只是名字,

!home!blah!filename 

,它就可以工作。同样,对于lisp调用,

(delete-file "!home!blah!filename") 
+0

你的看法,即删除文件交互的作品给我我需要的线索。我怀疑我的一个自定义打破了以微妙的方式完成阅读,因此,即使删除文件没有提示我输入文件,它仍然以某种方式打断。 – 2009-10-27 05:50:44