3

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

4

2 回答 2

5

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

因此,文件和缓冲区是非常正交的概念,尽管您经常通过访问文件来创建缓冲区,并通过写入文件来保存缓冲区的内容。(您可以通过键入其中缓冲区名称是任何现有缓冲区未使用的标识符来创建与文件无关的缓冲区。)C-x b 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 variable-name

于 2012-07-30T00:07:03.780 回答
4

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

(getenv "用户")

是各自的

回声 $USER

于 2012-07-26T19:04:26.800 回答