问题标签 [emacsclient]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
emacs - Emacs 服务器可以编辑 Emacs 客户端指定的远程文件吗?
我希望设置一个emacs 服务器,以便emacsclients指定的文件 相对于 emacsclients 的文件系统而不是服务器的文件系统。例如,如果我在“darkstar”机器上设置了一个 emacs 服务器,并通过“brightstar”上的 emacsclient 使用以下命令连接到该服务器
emacs 服务器将尝试在 darkstar 上而不是在 brightstar 上编辑文件 ~/fantastic。我喜欢这个的相反。我对各种滑稽的建议持开放态度。
*背景说明:我想要一个 emacs 进程来跟踪我在各种机器上打开的所有缓冲区,跟踪我的颜色设置、绑定等。我希望所有这些都可用并在任何带有 emacs 的机器上复制。emacs 服务器似乎就是这样做的,但无法编辑客户端的本地文件!
linux - 如何将emacsclient背景设置为Emacs背景?
我有(在我的 .emacs 中)
我有 2 个绑定:
ex 可以很好地在终端中打开客户端,但是当我想将其作为框架打开时,我有白色背景:(
为什么以及如何在那里使用我的深色背景?
linux - 如何检查emacs是在框架中还是在终端中?
基于这个问题:如何将 emacsclient 背景设置为 Emacs 背景?
我只需要框架的背景,而不是终端和控制台。
这是我尝试为控制台添加修复的方式
但是这样我就没有 emacsclient 的背景知识(即使是框架)。也许检查甚至没有在 emacsclient 中运行?
基本上我不想在终端和控制台中向 emacsclient 添加背景,而是在框架中。
emacs - 如何在根文件上使用 emacsclient,使用 sudo 和单个守护程序
我总是将 emacs 作为守护进程运行,但是当我想做类似的事情时
我不能这样做,因为 root 正在使用另一个 emacs,我真的不想运行 2 个守护程序或等待通常的 emacs 加载简单文件。
我需要一些类似的解决方案emacsclientsudo /etc/make.conf
:) 使用用户 emacs 客户端编辑系统文件。
macos - Non-Latin input in emacsclient
When run in foreground mode, Emacs inserts non-Latin input correctly.
It's when I run it as emacs --damon
+ emacsclient
, begins the madness. Each keystroke, which should insert a character, results in an action, like selecting words, jumping around expressions, selecting functions and so on. Almost like (a horrifying thought) Vim!
Is there a configuration option I am missing?
Update:
Actually solved it: M-x set-locale-environment
RETRET.
It's still not clear why it doesn't use the system-wide locale settings (UTF-8).
Update 2:
Yay, fixed in trunk! Thanks to the one who did it!
emacs - Emacs:获取 new-frame 和 emacsclient -c 以使用设置的帧大小?
我是 StackOverflow 的新手,我有一个问题,这个问题几乎是我在掌握 Emacs 的过程中唯一让我烦恼的事情。
我将.emacs
文件配置为将 Emacs 的默认帧大小设置为 70 行和 80 列,如下所示:
这在启动 Emacs 时工作正常,问题是当我使用new-frame
或emacsclient -c
不遵守这些设置启动新框架时。有没有办法在执行时强制emacsclient
并new-frame
读取.emacs
文件中的设置?
编辑:
这是我的.emacs
文件:
emacs - 在命令行上评估 emacs lisp 表达式
我是emacs的新手。我在 redhat linux 上使用 emacs-24.1,并试图评估一个 elisp 表达式。我希望 emacs 做的是在不启动 emacs 本身的情况下评估 elisp 表达式。我在尝试不同的东西
我不知道 emacs 是否正在评估表达式,但结果未显示在控制台上,并且 emacs 窗口出现。接下来我尝试了这个
Emacs 客户端需要一个服务器。它找不到服务器,因此引发错误(找不到套接字。启动服务器等)。所以我启动了一个服务器(服务器名称是 SERVER)并再次运行 emacsclient
这一次,emacs 评估表达式并在控制台上打印结果。那是因为 emacs 正在使用现有的服务器来评估表达式。现在,当服务器未运行时,我遇到了问题。
这一次,我在控制台上没有收到任何错误。Emacs 正在启动一个新窗口,因为 -a(我的 .emacs 中有 (server-start) 命令,并且 server-name 设置为 ANOTHER_SERVER)。但是 emacs 正在尝试编辑文件 (+ 2 3)。它显示在模式行上。我很困惑。emacsclient --help 向我展示了这个
和emacs手册说这个。
我不知道该怎么做。正如我所说,我的目标是在不启动 emacs 的情况下评估 elisp 表达式。是否可以?
emacs - 以其他用户身份在其他机器上使用 Emacs server 和 emacsclient
我知道在(start-server)
现有的 Emacs 会话中调用之后,我可以使用emacsclient -c
(在同一台计算机上)创建连接到该服务器的新帧,以便由创建的每个新帧emacsclient
都可以访问同一组共享状态(例如缓冲区)。
我发现的大多数文档都集中在“让我快速访问我的本地 Emacs”用例上,所以有两件事我还没有看到任何细节:
可以访问由其他
emacsclient -c
用户启动的 Emacs 服务器,还是硬连线只能检测由我自己的用户启动的会话?Emacs 服务器(直接或间接)是否支持远程连接?也就是说,是否有某种方法可以设置 Emacs(可能涉及 SSH),允许
emacsclient -c
对远程机器的调用访问我的 Emacs 服务器的本地状态?
(如果您还没有猜到,我最终想做的是结合上述两种技术来提供基本的协作编辑支持。)
这是一个现实世界的问题,所以这就是我正在处理的问题:
- 必要的功能应该已经内置在 Emacs 中(23.3.1,64 位)。我可以从标准的 Ubuntu 存储库扩展到 Emacs 扩展,但我不希望这样做。(可悲的是,我认为排除了Rudel。)
- 没有新用户或用户欺骗。解决方案应该使用现有的用户帐户集,并且用户不得假装是其他用户(例如通过
su
或ssh
)。
如果有什么不同的话,这些机器在私有 LAN 上,安装(并运行)OpenSSH 客户端和服务器,所有用户都可以连接到(他们自己的帐户)所有机器,但他们没有共享文件系统。
那么,有谁知道 Emacs 服务器是否可以
- 授予其他用户访问权限,或
- 提供远程访问?
编辑
正如 rwb 的回答中所评论的那样,很明显,通过运行在本地打开的新窗口emacsclient -c
实际上是由远程Emacs 服务器进程创建的。也就是说,emacsclient
只是简单地触发服务器中的相关行为。这会导致一些显示设置不正确的问题,因为服务器通常无法访问本地桌面(见下文)。但是,如果我使用以下命令序列,我现在可以连接到远程 Emacs 会话:
在一个终端中,1.22.333.44
IP 地址在哪里remotehost
:
然后在另一个(在同一台机器上):
该emacsclient
命令使远程 Emacs 服务器(它可以找到 in 的详细信息/tmp/server-file
)打开一个图形 Emacs 窗口(在本地显示器上),该窗口与远程主机上的 Emacs 会话共享状态。
由于远程 Emacs 服务器是通过 启动的ssh -X
,因此 SSH 为它提供了通过“假”显示访问我的本地显示的权限:10
。因此,DISPLAY=:10
传递给它(通过emacsclient
)会导致在我的本地桌面上打开一个窗口。
虽然上面的方法确实勾选了“在远程机器上运行 Emacs 服务器,使用emacsclient
本地连接到它”框,但它非常有限。实际上,以单个用户的身份在本地运行服务器和客户端并没有太大区别:唯一的区别是服务器现在是远程的,因此可以访问不同的系统资源。
不幸的是,通过启动ssh -X
是我能够在另一台机器的 X 服务器上成功打开窗口的唯一方法:
指定一个 basic
DISPLAY=remote:0
无处可去(因为 Ubuntu X 服务器是使用该-nolisten tcp
选项启动的)。通过 SSH 连接然后使用
DISPLAY=:0
也会失败,但这一次只是因为缺少合适的身份验证凭据。(无论如何,我相信是这样的:错误消息神秘地说No protocol specified
/Can't open display
。)
我认为找到解决第二个问题的方法可能会让我更接近解决方案。
阅读了http://comments.gmane.org/gmane.emacs.devel/103350上的帖子(从 '25 Oct 14:50' 帖子开始,大约一半)我开始怀疑这是否可能是Emacs 不能做的罕见事情之一(即不可能 ;-) )。
但是,如果有人确实有办法在没有上述权限错误的情况下提供对远程 X 显示器的访问,我仍然愿意说服......
TL;博士
正如 rwb 的回答所指出的那样,我上面关于 Emacs 是否可以授予远程访问的问题让事情倒退了。Emacs 授予其他用户访问权限并没有真正的问题(server-use-tcp
并且适当server-file
地处理这一点):问题是如何允许一台机器上的进程在其他用户的 X 显示器上打开新的 X 窗口(具体来说,Emacs 正在运行(start-server)
需要为通过emacsclient -c
) 要求它的用户打开窗口。这个答案超出了这个问题的范围。
替代解决方案
作为一种解决方法,我们使用以下方法:
- 机器0:
tmux -S /tmp/shared-tmux-socket new-session
- 机器1..机器N:
ssh -t machine0 tmux -S /tmp/shared-tmux-socket attach
具有适当的文件权限/tmp/shared-tmux-socket
。
然后我们在共享终端中运行一个文本模式的 Emacs。:-) 这确实引发了一些用户欺骗问题,但至少主人可以看到客人所做的一切。
emacs - 从 emacsclient 静默调用 defun
在源代码编译期间,我希望 GNU Make 调用 emacs defun。为此,我有 2 个选项:
- 启动一个新的 emacs 实例,并加载所需的函数并调用它。
从 emacsclient 调用 defun 如下:
/li>
后者有优势,它更快,因为 emacs 服务器已经在运行并且加载了所需的 defun。
但这也有一个缺点,如果(message ...)
从 调用(my-emacs-defun)
,它会中断我的活动 emacs 会话。我可以尝试修改(my-emacs-defun)
所以(message ...)
不调用,但是在使用 emacs 内置函数时真的很难。
因此,我想知道如何抑制(message ...)
from (my-emacs-defun)
。是否可以在为此调用 (defadvice)` 时改变(message ...)
行为(my-emacs-defun)? Can I use
?
编辑
真正的问题是,消息显示在小缓冲区中。那时(例如在 期间(find-file)
)使用 minibuffer 时会很烦人。
emacs - 当服务器繁忙时,如何从 emacsclient 中向 emacs 发送 Cg/quit 信号?
在我当前的设置中,我emacs --daemon
在启动时运行,然后用于emacsclient
工作。但是,我注意到了这个问题。当发生复杂的处理块时,C-g停止工作:复杂的工作不能提前停止或终止。据我所知,这是因为在处理来自客户端的任何输入之前,emacs 客户端需要等待服务器确认。因此,C-g当我最需要它时,它就不起作用了——以摆脱耗时或可能具有破坏性的过程。
是否有任何解决方法,或者告诉服务器进程“停止它!”?手册的“退出”或“紧急逃生”部分似乎没有承认存在这个问题 - 所以这也可能是我做错了什么的结果。如果是这样,我做错了什么?
如果答案是“不,没有办法做你想做的事;emacsclient
进程无法应对服务器被阻塞一段不平凡的时间”,我会将代码或文档中指出的答案标记为已接受哪里可以得到答案:我一直没能找到这样的东西。:(