Emacs Socket的位置

10
我在远程服务器上使用emacs进行工作。由于我的会话通常涉及数十个文件和进程,因此我一直在使用emacs服务器并使用emacs客户端进行连接。这样做的好处在于,如果我的ssh连接由于任何原因(我在英国而服务器在加利福尼亚)中断,我只需再次连接到emacs服务器,就可以像什么都没有发生一样继续工作。
然而,一段时间以前,服务器的管理员更改了其配置,以便定期从/tmp目录(默认情况下是emacs套接字所在的位置)清除“未使用”的文件。由于时间戳在初始创建之后不会更新,清除过程会认为它是未使用的文件,这意味着尽管服务器正在运行,但我无法连接到它。
有人知道如何告诉emacs在除了默认目录外的目录中创建套接字的方法吗?
顺便说一句,我还尝试过使用定期更新套接字时间戳的脚本,但它仍然被删除了。
提前致谢。

你的脚本不起作用很有趣。它修改了mtime,还是ctime,或者两者都修改了? - Wayne Conrad
2个回答

8
看起来你需要的是server-socket-dirserver-auth-dir这两个变量,根据文档C-hvserver-socket-dirRET

放置服务器套接字的目录。如果不支持本地套接字,则为nil。

另外,根据C-hvserver-auth-dirRET

服务器认证文件所在的目录。只有当server-use-tcp'非nil时,我们才会使用此选项。否则,我们使用server-socket-dir'。


这个解决方案似乎只适用于TCP套接字,而不是Unix套接字。 - ACz

4
我最终自己找到了答案,现在分享给大家。可用于TCP和Unix套接字。
ATMP="${HOME}/.tmp"     # alternative tmp directory, choose any directory you like
mkdir $ATMP
env TMPDIR=${ATMP} emacs --daemon=$SOCKETNAME   # start the daemon; SOCKETNAME can be anything
emacsclient -s ${ATMP}/$SOCKETNAME $OTHER_ARGS  # start the client

不错!上面的代码如何确保当父进程因为你的 ssh 被中断而被杀死时守护进程不会终止?这可能是在使用 nohup 命令调用脚本吗?另外,你的 ${HOME} 目录是否在网络存储中,并且你知道我们是否应该预期任何性能损失吗? - malcook
最好能提供信息来源的参考。而且它看起来已经过时了。 - SenhorLucas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接