1

为了在程序没有 root 访问权限时以编程方式管理删除,将“已删除”文件移动到用户目录的本地位置是有意义的。

通常,Emacs 使用函数make-directory-internal().

但是,我的 Emacs 在不归其用户所有的位置上执行此操作,而无需测试所有权,首先:

make-directory-internal("~/.local/share/Trash")

根据https://www.gnu.org/software/emacs/manual/html_node/elisp/Testing-Accessibility.html,在尝试写入目录之前,我可以很容易地测试所有权:

(file-accessible-directory-p "/foo")
     ⇒ nil

相反,此 Emacs 代码尝试使用我的 ~ 中但由 root 拥有的文件夹。它不使用它实际有权访问的文件夹来处理异常。

例如,它使用~/.local/share/Trash, 而不是~/.Trash.

代码中没有更好的异常处理是否有某些原因?我是否需要提交补丁,或者这是一种正常的、被接受的编程方式?

简而言之,为什么这段代码会这样做?

根据@Erlaunis 的问题,What is ./.local/share/Trash (Unix)?,我emacs无法编辑~/.local/share/Trash,因为它归根用户所有。

正因为如此,我最终遇到了如下的 BS:

Debugger entered--Lisp error: (file-error "Creating directory" "Permission denied" "/Users/myusername/.local/share/Trash")

我在这里发布了完整的错误输出:http: //0bin.net/paste/YSQgBhxbFwBnaJer#vcTHnyC+BE-SepxK+5rLmNt73GUg9dZr1Kk6CekiqnQ [链接在 2016 年 4 月 23 日之前可用)

(注意:虽然我认为这个问题的一部分在 Emacs Lisp 之外有一些普遍的兴趣,但我不会拒绝将其转移到 emacs.stackexchange.com 的建议。请在评论中提出建议。)

4

0 回答 0