Questions tagged «emacsclient»

emacsclient是一个程序,允许用户连接到Emacs服务器。在将Emacs用作类Unix系统上的默认编辑器时,这很有用,因为它允许在不创建新进程的情况下调用Emacs,从而允许重用共享缓冲区和命令历史记录。


7
如何将我的本地Emacs客户端用作通过TRAMP访问的远程计算机的$ EDITOR?
我经常使用TRAMP来管理多个远程服务器,用于编辑文件和在中运行远程shell shell-mode。但是,这在命令使用EDITOR变量来编辑文件时不起作用,例如,crontab -e特别是因为shell-mode它是“哑”终端,不支持在其中运行其他编辑器。 在本地,我通过适当的调用来做到这一点emacsclient,打开了一个新的缓冲区并使生活变得非常轻松。不幸的是,这在远程计算机上不起作用。 我想我可以用ed。(哈!) 如何设置一个遥控器EDITOR,该遥控器可以让我使用本地Emacs实例编辑文件?

5
Mac上的Emacsdaemon和Emacsclient
作业系统:OS X 10.9.5,Mavericks 2014年4月3日在Rainers-MacBook-Pro-3.local上的GNU Emacs 24.3.1(x86_64-apple-darwin13.1.0,Carbon版本1.6.0 AppKit 1265.19) 我通过安装了Emacs 自制自railwaycat和它工作得很好-没有抱怨。我不在终端中使用emacs,通常是通过应用程序启动它。 正如我所说-到目前为止我很高兴。 我只有一件事我没有设法正确解决(这在Linux之前可以很好地工作),那就是: 登录后获取emacs守护程序 使用emacsclient打开 关闭emacsdaemon并在注销时保存所有文件 有什么可行的食谱可以帮助我进行设置吗? 补充信息 登录后启动emacs守护程序 我创建了一个执行bash命令的Automator应用程序 /usr/local/bin/emacs --daemon 并将其添加到登录项目中,效果很好。 从终端使用守护程序 我可以通过使用emacs守护程序 emacsclient .bashrc 这将在emacs终端会话中打开.bashrc。 从GUI使用 现在仍然存在问题:如何从GUI中利用它? 据我了解emacsclient,除非指定要打开的文件,否则无法打开emacsclient。 我想打开emacsclient GUI并打开以前打开的所有文件?这可能吗? 我发现我可以使用 emacsclient -c 在终端中做我想做的-但是我可以对GUI做同样的事情吗?

3
如何崩溃撤消历史?
我正在使用一种Emacs模式,该模式可以让您通过语音识别控制Emacs。我遇到的问题之一是Emacs处理撤消的方式与您期望通过语音进行控制时的工作方式不匹配。 当用户说出几个字然后停顿时,这被称为“话语”。话语可能包含多个命令,供Emacs执行。识别器经常会错误地识别出话语中的一个或多个命令。在这一点上,我希望能够说“撤消”,并使Emacs撤消所有由语音执行的动作,而不仅仅是语音中的最后一个动作。换句话说,我希望Emacs就撤消而言将一个发声视为一个命令,即使一个发声包含多个命令也是如此。我还想指出要回到发话之前的确切位置,我注意到普通的Emacs撤消操作不会这样做。 我已经设置了Emacs来在每个话语的开始和结束时获取回调,所以我可以检测到这种情况,我只需要弄清楚Emacs会做什么。理想情况下,我会打电话给类似的东西(undo-start-collapsing),然后(undo-stop-collapsing)将介于两者之间的所有内容神奇地折叠成一张唱片。 我在文档中进行了一些检索,发现了undo-boundary这一点,但这与我想要的相反-我需要将所有动作折叠成一个撤消记录,而不是拆分。我可以undo-boundary在发声之间使用,以确保插入被认为是分开的(默认情况下,Emacs将连续插入操作视为一个达到一定限制的操作),仅此而已。 其他并发症: 我的语音识别守护程序通过模拟X11按键来向Emacs发送一些命令,并通过emacsclient -e这样的方式发送一些命令,如果有人说(undo-collapse &rest ACTIONS)我没有可以包装的地方。 我使用undo-tree,不确定是否会使事情变得更复杂。理想情况下,解决方案将与undo-treeEmacs的正常撤消行为一起使用。 如果话语中的命令之一是“撤消”或“重做”怎么办?我想我可以更改回调逻辑,以始终将它们作为独特的发音发送给Emacs,以使事情变得更简单,然后应像使用键盘一样处理它。 延伸目标:语音可能包含用于切换当前活动窗口或缓冲区的命令。在这种情况下,最好在每个缓冲区中分别说一次“撤消”,我不需要那么花哨。但是,单个缓冲区中的所有命令仍应分组,因此,如果我说“ do-x do-y do-z switch-buffer do-a do-b do-c”,则x,y,z应该是一个撤消原始缓冲区中的记录,而a,b,c应该是切换到缓冲区中的一个记录。 是否有捷径可寻?AFAICT没有内置的功能,但Emacs广阔而深刻。 更新:我最终在下面使用了jhc的解决方案并添加了一些额外的代码。在全局中,before-change-hook我检查要更改的缓冲区是否在修改了此话语的全局缓冲区列表中,如果没有,它将进入列表并被undo-collapse-begin调用。然后,在发话结束时,我迭代列表中的所有缓冲区并调用undo-collapse-end。以下代码(为函数命名而在函数名称前添加md-): (defvar md-utterance-changed-buffers nil) (defvar-local md-collapse-undo-marker nil) (defun md-undo-collapse-begin (marker) "Mark the beginning of a collapsible undo block. This must be followed with a call to undo-collapse-end with a marker …

3
守护程序模式:在启动时是否推迟交互提示?
(请注意,与此相反,此问题与“ 如何在守护程序模式下启动并禁止交互对话框?”相同,因为提交者“回答”了该问题,从而消除了导致出现特定提示的原因。) 我想知道是否有一种通用方法可以防止emacs --daemon永远挂起,等待对尚未存在的微型缓冲区中显示的提示的答案。 与emacsclient连接以回答这些提示是不可能的,因为直到Emacs完成启动顺序服务器才启动。(这意味着,如果您将ALTERNATE_EDITOR设置为空字符串,这将导致emacsclient找不到服务器启动新的守护程序,则最终可能会导致多个Emacs守护程序被卡住并等待。)我必须killall emacs解决此问题。在继续之前。 我可以在识别到每件事的过程中对每件事都进行重击(通过在非守护程序模式下启动Emacs并查看其要求),但这不是解决方案,因为它无法停止下一个守护程序因新原因而挂在启动上。 举个例子:当系统重新启动或Emacs崩溃后,它挂起的常见原因是第一次重新启动后,Emacs想知道是否可以从已失效的Emacs窃取锁定文件。我可以通过创建建议来解决该问题,以使该提示始终在没有交互的情况下回答“是”。但是随后,在上一个会话保存中打开的文件之一是需要使用sudo或SSH密码的TRAMP文件,因此,守护程序一直在等待密码提示。因此,我通过手动编辑会话文件(使用vi或emacs -q!)来删除有问题的文件来解决此问题,但这并不能阻止它下次发生。 因此,我可以在启动时自动停止加载会话,并将其更改为必须从第一个emacsclient手动执行的命令。但是,如果它不是在后台加载我的会话,那么在我准备使用它的时候就已经准备好了,守护程序的全部目的都将丢失! 所以我想要的是: (最佳)以某种方式将最小缓冲区提示延迟到我打开emacsclient时,同时仍完成其余的初始化。 (确定)以某种方式使所有我没有告知过的小缓冲区提示,否则如上所述,no除非正在运行emacsclient,否则只是返回。只要它可以正常工作,我就可以忍受TRAMP缓冲区出错。 有什么方法可以实现这些目标之一?

3
有什么方法只能运行一次挂钩函数吗?
上下文 我正在使用after-make-frame-functions挂钩在emacs客户端/服务器配置中正确加载主题。具体来说,这是我用来创建代码段(基于此SO答案): (if (daemonp) (add-hook 'after-make-frame-functions (lambda (frame) (select-frame frame) (load-theme 'monokai t) ;; setup the smart-mode-line and its theme (sml/setup))) (progn (load-theme 'monokai t) (sml/setup))) 问题 当emacsclient -c/t开始新的会话时,不仅在新框架中,而且还在所有先前存在的框架(其他emacsclient会话)中执行挂钩,这会产生非常烦人的视觉效果(在所有那些框架中再次加载主题)。更糟糕的是,在终端中已经打开的客户端的主题颜色就完全混乱了。显然,这仅在连接到同一emacs服务器的emacs客户端上发生。出现这种现象的原因很明显,该挂钩在服务器上运行,并且其所有客户端都受到影响。 问题 有什么方法可以只执行一次此功能,也可以不使用钩子而获得相同的结果吗? 部分解决方案 由于@Drew的回答,我现在有了这段代码。但是仍然存在问题,一旦在终端中启动客户端会话,GUI将无法正确加载主题,反之亦然。经过大量测试,我意识到其行为取决于首先启动哪个emacsclient,并且丢弃各种东西后,我认为它可能与所加载的调色板有关。如果您手动重新加载主题,那么一切都可以正常工作,这就是为什么每次在钩子上调用函数时都不会出现此行为的原因,就像在我的初始配置中一样。 (defun emacsclient-setup-theme-function (frame) (progn (select-frame frame) (load-theme 'monokai t) ;; setup the smart-mode-line and its theme (sml/setup) …

2
在Gnome 3中使用守护程序模式
我已经使用EmacsWiki页面使Emacs守护程序通过命令行工作了,但是我仍然停留在如何使客户端通过Gnome 3启动器运行的问题上。如何设置一个Gnome桌面文件,该文件将启动一个GUI窗口,该窗口连接到Emacs守护程序?

2
仅当emacsclient没有框架时,才创建框架
emacsclient -a '' -n仅在还没有框架时,如何才能创建一个新框架? -c标志的问题是它每次都会创建一个新的帧。没有它的问题是,如果没有打开的框架,它将在命令行中打开。 如果可以从外壳检查是否有打开的Emacs框架,则可以-c根据需要进行调用,无论是否调用它,都可以得到所需的行为。我试过了: $ emacsclient -a '' --eval '(frames-on-display-list)' (#<frame F1 0xba2740>) 我总是得到相同的结果。 我可以使用临时文件或pgrep,但是这些方法很容易出错。 这类似于此问题,但不是重复的,因为OP对在调用之前必须打开框架感到满意emacsclient。

4
从emacsclient运行emacs GUI
我正在运行emacs 25.1。 我有emacs服务器作为启动时的守护程序启动,并且可以使用以下别名打开emacs终端会话: alias em="emacsclient -t" 如何以类似方式启动emacs gui?

3
重新加载环境变量
超级用户是否有在emacs中重新加载环境变量的方法提出了此问题,但是没有给出好的解决方案。 我使用EmacsClient时通常会打开30多个缓冲区,如果我在外壳中更改环境变量,则需要退出EmacsClient(然后重新打开所有缓冲区),或者也必须在Emacs中手动设置环境变量。我无法在Emacs中轻松更新环境变量,这很烦人。有什么建议么?

3
Emacsclient:从启动开始一直一直只有一个emacs进程,永远不会关闭,更好地隐藏GUI
由于emacsclient可以适当地处理较长的程序包加载时间,因此我真的想保留至少一个emacs进程,并且大多数时候只保留一个emacs进程,作为后台进程打开并更好地隐藏GUI。 现在,我在.bashrc中定义了以下函数: emc () { if [[ $# -eq 0 ]]; then emacs --eval "(suspend-frame)" & return fi args=($*); setsid emacsclient -c -e "(find-file \"${args[*]}\")" } 在.bashrc中也有以下行: emc 因此,每次打开外壳程序时,我都会遇到一个新的emacs进程。 问题是打开许多外壳后,我将有许多其他不必要的emacs进程。但是,我只希望在启动后一直保持一个emacs进程更好,更好地隐藏GUI。

2
从Emacs调用的程序中调用emacsclient
我在使用AucTex查看pdf文档文件时遇到问题。我pdf-tools曾经在Emacs中查看PDF文件,并且将其设置emacsclient -n为默认的pdf查看器(通过Debian Linux上的xdg-mime)。在大多数情况下,此方法工作正常,但会破坏(Tex-documentation-texdoc ...)Auctex(C-c ?)的功能。 我已将问题缩小为一行代码。当我尝试查看该listings软件包的文档时,TeX-documentation-texdoc将其转换为以下sexp: (shell-command-to-string "texdoc --view listings") texdoc依次调用emacsclient实际打开文件(基于我通过xdg配置桌面的方式)。但是,此时,Emacs挂起,我需要退出(C-g)以重新获得控制权。之后,将不会打开新的pdf。如果我尝试直接调用emacsclient,则会发生相同的事情: (shell-command-to-string "emacsclient -n tmp.pdf") 这两个命令都在命令行上运行(即emacsclient -n tmp.pdf和)texdoc --view listings。 我的问题是,在这种情况下,如何在Emacs中调用emacsclient?(而且我知道我可以使用find-file;仅打开pdf文件,这不是一个选项,因为我需要调用外部进程(texdoc)来查找文件,然后该进程调用emacsclient)。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.