问题标签 [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.

0 投票
2 回答
527 浏览

emacs - Emacs 服务器可以编辑 Emacs 客户端指定的远程文件吗?

我希望设置一个emacs 服务器,以便emacsclients指定的文件 相对于 emacsclients 的文件系统而不是服务器的文件系统。例如,如果我在“darkstar”机器上设置了一个 emacs 服务器,并通过“brightstar”上的 emacsclient 使用以下命令连接到该服务器

emacs 服务器将尝试在 darkstar 上而不是在 brightstar 上编辑文件 ~/fantastic。我喜欢这个的相反。我对各种滑稽的建议持开放态度。

*背景说明:我想要一个 emacs 进程来跟踪我在各种机器上打开的所有缓冲区,跟踪我的颜色设置、绑定等。我希望所有这些都可用并在任何带有 emacs 的机器上复制。emacs 服务器似乎就是这样做的,但无法编辑客户端的本地文件!

0 投票
1 回答
1539 浏览

linux - 如何将emacsclient背景设置为Emacs背景?

我有(在我的 .emacs 中)

我有 2 个绑定:

ex 可以很好地在终端中打开客户端,但是当我想将其作为框架打开时,我有白色背景:(

为什么以及如何在那里使用我的深色背景?

0 投票
2 回答
1526 浏览

linux - 如何检查emacs是在框架中还是在终端中?

基于这个问题:如何将 emacsclient 背景设置为 Emacs 背景?

我只需要框架的背景,而不是终端和控制台。

这是我尝试为控制台添加修复的方式

但是这样我就没有 emacsclient 的背景知识(即使是框架)。也许检查甚至没有在 emacsclient 中运行?

基本上我不想在终端和控制台中向 emacsclient 添加背景,而是在框架中。

0 投票
2 回答
3297 浏览

emacs - 如何在根文件上使用 emacsclient,使用 sudo 和单个守护程序

我总是将 emacs 作为守护进程运行,但是当我想做类似的事情时

我不能这样做,因为 root 正在使用另一个 emacs,我真的不想运行 2 个守护程序或等待通常的 emacs 加载简单文件。

我需要一些类似的解决方案emacsclientsudo /etc/make.conf:) 使用用户 emacs 客户端编辑系统文件。

0 投票
1 回答
324 浏览

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!

0 投票
1 回答
2855 浏览

emacs - Emacs:获取 new-frame 和 emacsclient -c 以使用设置的帧大小?

我是 StackOverflow 的新手,我有一个问题,这个问题几乎是我在掌握 Emacs 的过程中唯一让我烦恼的事情。

我将.emacs文件配置为将 Emacs 的默认帧大小设置为 70 行和 80 列,如下所示:

这在启动 Emacs 时工作正常,问题是当我使用new-frameemacsclient -c不遵守这些设置启动新框架时。有没有办法在执行时强制emacsclientnew-frame读取.emacs文件中的设置?

编辑:

这是我的.emacs文件:

0 投票
2 回答
6557 浏览

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 表达式。是否可以?

0 投票
4 回答
25367 浏览

emacs - 以其他用户身份在其他机器上使用 Emacs server 和 emacsclient

我知道在(start-server)现有的 Emacs 会话中调用之后,我可以使用emacsclient -c(在同一台计算机上)创建连接到该服务器的新帧,以便由创建的每个新帧emacsclient都可以访问同一组共享状态(例如缓冲区)。

我发现的大多数文档都集中在“让我快速访问我的本地 Emacs”用例上,所以有两件事我还没有看到任何细节:

  1. 可以访问由其他emacsclient -c用户启动的 Emacs 服务器,还是硬连线只能检测由我自己的用户启动的会话?

  2. Emacs 服务器(直接或间接)是否支持远程连接?也就是说,是否有某种方法可以设置 Emacs(可能涉及 SSH),允许emacsclient -c远程机器的调用访问我的 Emacs 服务器的本地状态?

(如果您还没有猜到,我最终想做的是结合上述两种技术来提供基本的协作编辑支持。)


这是一个现实世界的问题,所以这就是我正在处理的问题:

  • 必要的功能应该已经内置在 Emacs 中(23.3.1,64 位)。我可以从标准的 Ubuntu 存储库扩展到 Emacs 扩展,但我不希望这样做。(可悲的是,我认为排除了Rudel。)
  • 没有新用户或用户欺骗。解决方案应该使用现有的用户帐户集,并且用户不得假装是其他用户(例如通过sussh)。

如果有什么不同的话,这些机器在私有 LAN 上,安装(并运行)OpenSSH 客户端和服务器,所有用户都可以连接到(他们自己的帐户)所有机器,但他们没有共享文件系统。


那么,有谁知道 Emacs 服务器是否可以

  • 授予其他用户访问权限,或
  • 提供远程访问?

编辑

正如 rwb 的回答中所评论的那样,很明显,通过运行在本地打开的新窗口emacsclient -c实际上是由远程Emacs 服务器进程创建的。也就是说,emacsclient只是简单地触发服务器中的相关行为。这会导致一些显示设置不正确的问题,因为服务器通常无法访问本地桌面(见下文)。但是,如果我使用以下命令序列,我现在可以连接到远程 Emacs 会话:

在一个终端中,1.22.333.44IP 地址在哪里remotehost

然后在另一个(在同一台机器上):

emacsclient命令使远程 Emacs 服务器(它可以找到 in 的详细信息/tmp/server-file)打开一个图形 Emacs 窗口(在本地显示器上),该窗口与远程主机上的 Emacs 会话共享状态。

由于远程 Emacs 服务器是通过 启动的ssh -X,因此 SSH 为它提供了通过“假”显示访问我的本地显示的权限:10。因此,DISPLAY=:10传递给它(通过emacsclient)会导致在我的本地桌面上打开一个窗口。


虽然上面的方法确实勾选了“在远程机器上运行 Emacs 服务器,使用emacsclient本地连接到它”框,但它非常有限。实际上,以单个用户的身份在本地运行服务器和客户端并没有太大区别:唯一的区别是服务器现在是远程的,因此可以访问不同的系统资源。

不幸的是,通过启动ssh -X是我能够在另一台机器的 X 服务器上成功打开窗口的唯一方法:

  • 指定一个 basicDISPLAY=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。:-) 这确实引发了一些用户欺骗问题,但至少主人可以看到客人所做的一切。

0 投票
6 回答
395 浏览

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 时会很烦人。

0 投票
2 回答
753 浏览

emacs - 当服务器繁忙时,如何从 emacsclient 中向 emacs 发送 Cg/quit 信号?

在我当前的设置中,我emacs --daemon在启动时运行,然后用于emacsclient工作。但是,我注意到了这个问题。当发生复杂的处理块时,C-g停止工作:复杂的工作不能提前停止或终止。据我所知,这是因为在处理来自客户端的任何输入之前,emacs 客户端需要等待服务器确认。因此,C-g当我最需要它时,它就不起作用了——以摆脱耗时或可能具有破坏性的过程。

是否有任何解决方法,或者告诉服务器进程“停止它!”?手册的“退出”或“紧急逃生”部分似乎没有承认存在这个问题 - 所以这也可能是我做错了什么的结果。如果是这样,我做错了什么?

如果答案是“不,没有办法做你想做的事;emacsclient进程无法应对服务器被阻塞一段不平凡的时间”,我会将代码或文档中指出的答案标记为已接受哪里可以得到答案:我一直没能找到这样的东西。:(