1

如果我正在运行带有一堆缓冲区的 emacs --daemon,有没有办法启动 emacsclient 以便它打开我上次工作时的顶部缓冲区?如果我使用 emacsclient -t 或 emacsclient -c 它会创建一个新框架并将其放在顶部,我怎样才能避免这种行为并恢复我正在做的事情?

4

4 回答 4

1

您可以尝试以下方法:

emacsclient -e '(raise-frame)'

或者

emacsclient -e '(other-frame 0)'

如果这些解决方案都不起作用(取决于您的窗口管理器),您还可以尝试以下解决方案(来自this SO answer):

emacsclient -e  "(select-frame-set-input-focus (selected-frame))"
于 2013-08-06T06:43:31.633 回答
1

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

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

因此,如果守护进程不存在,则会启动它,emacs 客户端连接到它,创建一个新缓冲区并立即将其杀死,从而留下之前在顶部的任何缓冲区(我使用 emacs 桌面保存)现在显示在顶部.

于 2013-08-06T01:53:12.600 回答
0

您似乎对 emacs 概念有些困惑。框架在emacs 中,其他人称之为窗口,而 emacs窗口是显示缓冲区(您正在编辑的文本)的位置。

选项-c-t应该创建一个新框架(以图形方式或在 tty 上),如果您不希望这样做,则将它们排除在外。

如果仍然有一个打开的(图形)框架,则最后一个活动的框架将被聚焦(可能取决于您的窗口管理器)并在最后一个活动窗口中显示访问给定文件的缓冲区。如果没有图形框架,则在当前 tty 上打开一个新框架。

emacsclient不能在没有文件或目录以及 或情况下调用。因此,请使用您的窗口管理器来显示所需的框架。-t-c

但是,如果您真正想要的是,在列表顶部打开一个带有缓冲区的新(list-buffers),那么您就不走运了,因为新帧总是显示暂存缓冲区(如果未配置)。您可以使用变量手动更改C-x b或修补initial-buffer-choice

于 2016-10-23T14:36:59.460 回答
0

没有

emacsclient -e '(raise-frame)'

或者

emacsclient -e '(other-frame 0)'

或者

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

为我工作。它们确实导致 emacs 最初显示 *scratch* 以外的缓冲区,但这不是我正在处理的最后一个缓冲区。我必须编写自己的机制才能使其正常工作 - 它假设您使用 Cx Cc 断开 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)                                                                                                                      
于 2017-03-07T11:10:08.473 回答