我如何获得系统权限,以便编译 emacs 的 etags?



如何获得在emacs中运行compile的权限?

我正在一个特定的目录(/usr/share/emacs/24.3/lisp)中创建TAGS文件,下面介绍Robert Chassell在emacs lisp中的编程。

我已经运行了compile命令, M-x compile RET etags *.el RET

作为回报,我被告知许可被拒绝了。这是我的个人电脑,运行具有sudo权限的ubuntu 14.04 LTS(我的个人计算机)。

我发现在运行sh脚本时,一些信息权限被拒绝,这可能是适用的,值得尝试(也许在示例中尝试chmod+x*.el而不是chmod+x filename.sh?)但我有点害怕,因为这些不是确切的解决方案,而且我对编程还很陌生,更不用说linux了(我已经损坏了一些文件,不得不在几天前重新安装ubuntu 14.04

以下是bufer中显示的实际消息:

-*- mode: compilation; default-directory: "/usr/share/emacs/24.3/lisp/" -*-
Compilation started at Sat Jun  4 05:36:16
etags *.el
TAGS: Permission denied
Compilation exited abnormally with code 1 at Sat Jun  4 05:36:16

首先,您可以使用find-function免费获得一半的标签功能(无论如何,对于Emacs-lisp)。我将其绑定到C-h C-f。还有find-variable,但我发现describe-variable(C-h v)更有用。


您可能是以普通用户而非管理员的身份运行Emacs。这绝对是正确的做法,但不允许像/usr下的任何东西一样写入系统目录。您可以以root(sudo emacs)身份运行Emacs,也可以使用名为tramp的包,该包允许您以不同的用户身份工作(它还允许您编辑远程机器上的文件)。

使用C-x C-f /sudo:localhost:/usr/share/emacs/24.3/lisp/以root身份打开目录。打开目录后,运行compile

此外,我怀疑指挥部会做你想做的事。大多数Emacs都安装了对lisp源代码的gzip,虽然etags似乎足够聪明,可以处理这个问题,但glob模式*.el将不匹配。此外,还有子目录。最好使用find命令:find -name "*.el" -o -name "*.el.gz" -exec etags '{}' +


真正的解决方案是不将TAGS文件放在该目录中只需将它放在您有写权限的其他地方。

cd; find /usr/share/emacs/24.3/lisp -name "*.el" -o -name "*.el.gz" -exec etags '{}' +`

最新更新