2012-07-26 70 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