2009-10-08 68 views
9

這是一個相當基本的問題,但是在emacs中打開一個單獨的框架(make-new-frame)中的新文件或在emacsclient的實例中打開該文件的實際區別是什麼?我可以看到,如果您正在通過終端進行工作,則區別很明顯......但emacsclient是否還可以將緩衝區菜單或ido模式訪問的緩衝區列表限制爲在該特定emacsclient實例中打開的緩衝區?Emacs - emacsclient或新框架?

回答

5

除了服務器設置一些緩衝區本地狀態以啓用C-x #(又名server-edit)之外,兩種情況之間確實沒有區別。

您可以限制M-x list-buffers行爲就像你用下面的建議,要求:

(defadvice list-buffers-noselect (before list-buffers-noselect-limit-to-those-for-emacsclient activate) 
    "When the current buffer is a being viewed by an emacclient, restrict the buffers to those associated with the emacsclient" 
    (when (and (null (ad-get-arg 1)) server-buffer-clients) 
    (let ((blist (delete-dups (reduce 'append 
             (mapcar (lambda (proc) (process-get proc 'buffers)) 
               server-buffer-clients))))) 
     (ad-set-arg 1 blist)))) 

現在,當你通過emacsclient參觀了一個緩衝區做M-x buffer-menu,你只能看到由同一個客戶端訪問其他緩衝區(S )。當緩衝區未被emacsclient訪問時,它正常工作。

我不使用ido,但我想象定製會是類似的(如果這個建議不起作用)。

詳細信息是,當您運行emacsclient時,打開的緩衝區與服務器進程相關聯(它可以不止一個,因爲您可以通過多個調用emacsclient打開相同的文件)。緩衝區的服務器客戶端存儲在緩衝區本地變量server-buffer-clients中。

要找出緩衝區與emacsclient特定調用相關聯,找到進程爲emacsclient,並做到:(process-get proc 'buffers)(其中proc是特定emacsclient過程 - 在server-buffer-clients發現列表中的元素之一)。

這就是所有的建議。

+0

謝謝!正如Jed所提到的,打開一個新框架時似乎沒有區別,但是當我使用emacsclient -t打開一個新文件時,上面的建議可行。有趣的...我會研究這個ido模式和可能ibuffer。非常感激! – hatmatrix 2009-10-09 03:09:24

+0

你有沒有得到它與ido一起工作? – tatsuhirosatou 2013-04-07 19:30:17

3

只要emacsserver在運行,emacs 23就沒有區別。緩衝區列表將在每個中相同。

+0

謝謝 - 是的,它看起來大部分是正確的,但似乎有一些emacs部分意識到哪些客戶端正在訪問特定文件,正如Trey指出的那樣...但感謝您的輸入! – hatmatrix 2009-10-09 03:11:00