2013-08-06 40 views
0

如果我正在運行帶有一堆緩衝區的emacs - 守護進程,是否有一種方法可以啓動emacsclient,以便在上次使用它時打開什麼是頂層緩衝區?如果我使用emacsclient -t或emacsclient -c,它會創建一個新框架並將其置於頂部,我如何避免此行爲並恢復我正在做的任何事情?啓動沒有新框架的emacsclient

回答

0

好像我找到了答案,雖然它有點不雅。在我的.bash_profile中,我把

alias emacs='emacsclient -a "" -t -e \(kill-buffer\)' 

所以,如果它不存在一個守護進程啓動後,Emacs的客戶端連接到它,創建一個新的緩衝區,並立即殺死它,從而留下任何緩衝是在頂部之前(我使用emacs桌面保存)現在顯示在頂部。

0

你可以嘗試這樣的:

emacsclient -e '(raise-frame)' 

emacsclient -e '(other-frame 0)' 

如果這些解決方案的工作(這取決於你的窗口管理器),你也可以嘗試以下解決方案(從這個SO answer):

emacsclient -e "(select-frame-set-input-focus (selected-frame))" 
0

您似乎對emacs概念有點困惑。一個框架是在Emacs別人叫窗口和emacs的窗口是顯示一個緩衝(您正在編輯的文本)。

選項-c-t應該創建一個新的框架(圖形或tty),如果你不想要的,而不是把它們放在外面。

如果仍然有一個打開的(圖形)框架,最後一個活動的框架將被聚焦(可能取決於您的窗口管理器)並顯示訪問上一個活動窗口中給定文件的緩衝區。如果沒有圖形框架,則會打開當前tty上的新框架。

emacsclient不能被稱爲沒有一個文件或目錄要麼-t-c。因此,請使用您的窗口管理器來顯示所需的幀。

但如果你真的想要的是,在該列表(list-buffers),那麼你的運氣了頂部與緩衝區打開一個新的框架,因爲一個新的幀總是顯示劃痕緩衝區(如果沒有配置)。您可以使用C-x b或變量initial-buffer-choice修改手動更改。

+0

我對幀和緩衝區沒有困惑。回到2013年,當我問這個問題時,我在非圖形環境中將emacs服務器作爲後臺運行的守護程序運行,並且我想要某種方式將emacsclient連接到它,而不必指定任何內容,有點像附加和分離屏幕會話。 但這是重點。這是2016年,我幾年前解決了這個問題,我不再使用emacs。 –

0

emacsclient -e '(raise-frame)' 

emacsclient -e '(other-frame 0)' 

emacsclient -e "(select-frame-set-input-focus (selected-frame))" 

沒有爲我工作。他們確實導致emacs最初顯示除* scratch *以外的緩衝區,但它不是我正在處理的最後一個緩衝區。我必須編寫自己的機制來實現它 - 它假定您使用C-x C-c從服務器斷開emacsclient:

(defun save-last-buffer-name-and-kill()                                  
    (interactive)                                        
    (setq jeeves/last-buffer-name (current-buffer))                               
    (save-buffers-kill-terminal)                                    
)                                           
(defun get-last-buffer-name()                                    
    jeeves/last-buffer-name                                     
)                                           
(global-set-key (kbd "C-x C-c") 'save-last-buffer-name-and-kill)                           
(setq initial-buffer-choice 'get-last-buffer-name)