如何识别Emacs中缓冲区的所有者/创建者

时间:2012-07-26 17:57:45

标签: emacs elisp

如何检查在Emacs中创建缓冲区的人的身份,然后检查是否是访问该缓冲区的同一用户?我的意思是"我是谁?"在Unix命令..然后检查同一用户是否正在访问该文件? - >我想在我自己的代码中使用函数或方法

2 个答案:

答案 0 :(得分:5)

请注意缓冲区文件之间的区别:文件是位于硬盘上的内容,例如.jpg图像文件或.mp3 aufio文件或.txt文件。其中一些文件(通常是文本文件)可能需要使用Emacs进行编辑。为此,您可以将文件加载到Emacs中 - 这称为“访问”Emacs术语中的文件。文件内容显示在缓冲区中。但请注意,您可能还有一个与文件根本没有关联的缓冲区 - 例如,如果在未指定文件的情况下启动Emacs,则会显示*scratch*缓冲区。

因此,文件和缓冲区是非常正交的概念,尽管通常通过访问文件来创建缓冲区,并通过写入文件来保存缓冲区的内容。 (您可以通过键入 Cx b buffer-name 来创建与文件无关的缓冲区,其中 buffer-name 是未使用的标识符通过任何已经存在的缓冲区。)

缓冲区仅存在于正在运行的Emacs中。这就是为什么到目前为止你得到的评论和答案可能不是你想要的:缓冲区的创建者/所有者的概念令人困惑,因为显然是那个坐在键盘上的人时刻。

说到文件的所有者/创建者更有意义。在多帐户设置中,多个用户可以写入同一磁盘,因此他们可以访问相同的文件。现在知道谁有访问权限,特别是谁拥有该文件或者上次修改文件时,可能会很有趣。在Elisp中,您可以使用函数

(file-attributes FILENAME &optional ID-FORMAT)

获取与文件关联的属性列表。如果当前缓冲区正在访问文件,则可以将该函数与函数

组合使用
(buffer-file-name &optional BUFFER)

返回缓冲区正在访问的文件。对于未访问文件的缓冲区,此函数返回nil

但请注意,您可能感兴趣的某些信息无法通过(file-attributes ...)获得,例如上次访问该文件的人和/或上次修改过的人。这不是Emacs的错,而是来自操作系统不存储此类信息的事实。

另请注意,文件的当前所有者可能不一定是创建文件的人,因为具有所需权限的人可以在创建文件后chown创建文件。

要从whoami的意义上接收有关当前用户的信息,您可以查看变量

user-login-name
user-real-login-name
user-full-name

输入 C-h v 变量名称

答案 1 :(得分:4)

从系统看到的AFAIK,Emacs是一个单一进程,由启动它的用户拥有

(getenv“USER”)

分别是

echo $ USER