2012-07-26 45 views
3

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

+2

您是否确实指缓冲区正在访问的* buffer *或*文件*? – Thomas 2012-07-27 02:27:56

回答

5

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

因此,文件和缓冲区是非常正交的概念,尽管通常您通过访问文件来创建缓冲区,并且通过写入文件来保存缓冲区的内容。 (可以创建不通过键入CX b 缓冲器名与文件相关联的缓冲器其中缓冲器名是不使用任何已经存在的缓冲器的识别符。)

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

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

(file-attributes FILENAME &optional ID-FORMAT) 

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

(buffer-file-name &optional BUFFER) 

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

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

还要注意,文件的当前所有者不一定是谁创造了它作为一个具有所需权限的用户可以chown在创建后一个文件的人。

要接收有关的whoami意义上的当前用户的信息,您可以通过键入C-H V 变量名检查出变量

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

+0

哇学到了很多你的答案。谢谢! – Arash 2012-07-30 08:59:14

4

据我所知,从系统的角度来看,Emacs是一个单一的过程中,谁开始这

(getenv的“用户”)

用户拥有

是相应于

回波$ USER

+1

同意,并强调;我无法想象一个与Emacs进程的所有者不同的用户可以对其执行任何操作的场景。 'root'当然可以冒充所有者,但这是一个不同的问题。 – tripleee 2012-07-26 19:54:59

+0

非常感谢你的回复,但我们假设我创建了一个文件/缓冲区;别人也可以访问和编辑buffer-让如果我们有两个管理员帐户并没有加密和etc-从另一个帐户上的我的电脑右键的说?所以我如何检查谁创建了第一个缓冲区。我的意思是缓冲区的所有者.. – Arash 2012-07-29 18:56:43

相关问题