为了在程序没有 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 的建议。请在评论中提出建议。)