标签: emacsclient

在其他计算机上使用Emacs服务器和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:

ssh -t -X remotehost \
  "emacs -nw --eval
   '(progn (setq server-host \"1.22.333.44\" server-use-tcp t) (server-start))'"
Run Code Online (Sandbox Code Playgroud)

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

scp remotehost:.emacs.d/server/server /tmp/server-file
DISPLAY=localhost:10 emacsclient -c -f /tmp/server-file
Run Code Online (Sandbox Code Playgroud)

emacsclient命令使远程Emacs服务器(它找到其中的详细信息/tmp/server-file …

collaboration emacs remote-access emacsclient tmux

49
推荐指数
3
解决办法
2万
查看次数

如何删除杀死emacsclient缓冲区的提示?

在我用emacsclient打开一些东西后,当我杀死那个缓冲区(Cx k)时,我得到一个确认对话框:

Buffer `blah' still has clients; kill it? (yes or no)
Run Code Online (Sandbox Code Playgroud)

但是当我杀死直接从Emacs打开的缓冲区时,我没有.有没有办法在emacsclient打开它们时不能获取它们?

emacs emacsclient

24
推荐指数
2
解决办法
3805
查看次数

如何在启动emacsclient后自动评估某些lisp代码?

启动Emacs时,将评估init.el(或.emacs.el).但是,在启动emacsclient时,不会评估类似的lisp代码.

每次打开新的emacsclient时,如何获得要评估的lisp文件?

(这对于特定于帧的自定义很方便.)

我假设答案是使用一些钩子,但我似乎无法找到正确的钩子使用.

我期待着你的回答.

emacs emacsclient

14
推荐指数
3
解决办法
1903
查看次数

如何在root文件上使用emacsclient,使用sudo和单个守护进程

我总是将emacs作为守护进程运行,但是当我想要做出类似的东西时

sudo emacsclient /etc/make.conf
Run Code Online (Sandbox Code Playgroud)

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

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

permissions emacs emacsclient

13
推荐指数
2
解决办法
2450
查看次数

Emacs Magit提交打开新的Emacs客户端

我一直在使用Magit,并且在提交时,它曾经简单地拆分窗口并允许我在同一个emacs会话中提交,但我似乎已将此行为更改为以下内容:

现在,当我提交我的分阶段更改时,一个新的emacs客户端启动,需要一段时间才能加载,最后让我写下我的提交消息.然后我运行Cc Cc来提交.当我关闭此客户端时,提交会完成.

如何强制magit在同一个emacs会话中运行提交而不打开一个全新的客户端?

在此输入图像描述

git emacs emacsclient magit

13
推荐指数
1
解决办法
1538
查看次数

如何在不打开新文件的情况下使emacsclient只打开现有emacs守护程序的窗口

我使用emacs守护进程来保存我的emacs会话,即使我必须重新启动运行我的X服务器的机器,或者如果我想从另一台机器访问同一会话.这非常有效但是在恢复会话时我非常希望只运行"emacsclient --create-frame --no-wait"来连接守护进程而无需打开新文件.没有指定文件名,它不会让我逃脱.

我已经尝试使用--eval来执行一个函数而不是打开一个文件,但是当评估完成时窗口就会消失.

(Emacs 23.1通过Debian GNU/Linux 5.0上的backports.)

emacs emacsclient

12
推荐指数
2
解决办法
5797
查看次数

emacsclient窗口焦点

运行emacsclient后如何始终如一地控制窗口焦点?

目前,焦点取决于我是否已经运行emacs服务器.当emacsclient调用另一个编辑器时,焦点将转移到新的emacs窗口.当emacsclient连接到现有的emacs服务器时,焦点不会移位(即它停留在我的putty客户端上).

我想一直关注emacs窗口,因为我打开文件后通常会去emacs.

任何帮助将不胜感激!

笔记

版本信息

emacs: 21.4.1
emacsclient: 21.4
client os: Windows XP Service Pack 3
x server: Exceed 11.0.0.0
Run Code Online (Sandbox Code Playgroud)

我的.bash_profile的相关部分

# a wrapper is needed to sandwich multiple command line arguments in bash
# 2>/dev/null hides
#   "emacsclient: can't find socket; have you started the server?"
emacs_wrapper () {
  if [ 0 -eq $# ]
  then
    emacsclient -n -a emacs ~/notes.txt 2>/dev/null &
  else
    emacsclient -n -a emacs $* &
  fi
}
alias x="emacs_wrapper"
Run Code Online (Sandbox Code Playgroud)

另外,在我的.emacs结束时,我有

(server-start)
Run Code Online (Sandbox Code Playgroud)

我目前的解决方法是一个简单的autohotkey脚本,它专注于我的第一个Exceed窗口

^+x:: …
Run Code Online (Sandbox Code Playgroud)

emacs emacsclient

12
推荐指数
2
解决办法
2330
查看次数

如何关闭emacsclient gui框架而不杀死服务器

如何在不杀死服务器/守护进程的情况下关闭emacsclient框架

执行C-x C-cC-x 5 0在gui中将退出帧和服务器(以及其他客户端),而这只是在从终端完成时退出当前帧.

(Ps:我的emacs版本是24.2,gtk.我试过没有init-file看看它是否来自我的配置,但结果是一样的)

emacs emacsclient

12
推荐指数
2
解决办法
6619
查看次数

Emacs - emacsclient还是新架?

这是一个相当基本的问题,但是在emacs的单独框架(make-new-frame)中打开新文件或在emacsclient实例中打开文件之间的实际区别是什么?我可以看到,如果您正在通过终端工作,差异很明显......但emacsclient是否还可以将(buffer-menu)或ido-mode访问的缓冲区列表限制为在该特定emacsclient实例中打开的缓冲区?

emacs emacsclient emacs23

9
推荐指数
1
解决办法
1711
查看次数

Emacsclient挂钩杀死

我试图在Emacs中找到一个钩子,它应该在emacs服务器正常关闭之前启动.我尝试使用elisp之类的kill-emacs-query-functions,kill-emacs-hook,server-done-hook:

(add-hook 'server-done-hook
          '(lambda ()
             (savehist-save)
             )
          )
Run Code Online (Sandbox Code Playgroud)

...但是当操作系统关闭时,它们都不会被调用,因此不会保存历史记录.

也许有人可以暗示一下?

PS我在Gentoo Linux上,emacs-vcs-23.2.9999包,仅限终端.为了测试所需的行为,使用start-stop-daemon实用程序停止Emacs.

emacs kill emacsclient

8
推荐指数
1
解决办法
1842
查看次数