2013-08-06 92 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)