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

Ara*_*ash 3 emacs elisp

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

Tho*_*mas 5

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

因此,文件和缓冲区是非常正交的概念,尽管通常通过访问文件来创建缓冲区,并通过写入文件来保存缓冲区的内容.(可以创建不与通过键入一个文件相关联的缓冲器,其中缓冲液名称是不使用任何已经存在的缓冲器的标识符.)C-x b buffer-name

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

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

(file-attributes FILENAME &optional ID-FORMAT)
Run Code Online (Sandbox Code Playgroud)

获取与文件关联的属性列表.如果当前缓冲区正在访问文件,则可以将该功能与该功能组合使用

(buffer-file-name &optional BUFFER)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

user-login-name
user-real-login-name
user-full-name
Run Code Online (Sandbox Code Playgroud)

通过打字.C-h v variable-name