使用来自两个用户帐户的emacs打开同一个文件



我的Mac上有两个用户帐户。我想用emacs在两个帐户上打开相同的文本文件。我可以将文件放在一个目录中,在该目录中,两个用户都有读写权限。

当我将文本添加到一个进程时,我希望它显示在另一个缓冲区中,反之亦然。

我尝试了自动保存模式和自动恢复模式的组合来尝试自动保存自动恢复,但这似乎不太正确。

有什么正常的方法可以治疗消瘦症吗?

我认为您应该学习协作编辑。emacs wiki上有一个关于它的页面链接

不是一个完整的答案。只是一些想法。尽管如此,这是一个答案,因为我想用elisp代码来补充它,也许稍后会对它进行改进。

我想你实际上是在两个账户上与两个emacsen合作。此外,我假设auto-revert-buffer的问题在于定时,即auto-revert-buffer使用轮询而不是按需工作。

如果你想按需更新,你必须将两个emacsen都设置为服务器,并为它们提供双向通信的可能性。

您可以通过emacsclient使用选项-e而不是ssh来执行类似的操作。

如果您在专用网络中,也可以让emacs服务器直接通信。由于emacsclient检查套接字的所有权,所以我在emacsclient和默认服务器设置为套接字时运气不佳。(注意:首先,我使用emacsclient进行测试。然后,我验证了两个emacsen之间的通信也可以工作。)

但是下面的代码显示了emacs服务器通过tcp/ip进行通信的可能性。

两个emacsen都应该将它们的服务器文件放在同一目录中。当然,您需要以不同的方式命名服务器。然后您可以通过命令server-eval-at进行通信。

注意,这些东西与安全相关,只能在安全的专用网络上使用

下面的elisp代码不像一个包,更像是有用命令的集合。尽管如此,在一台服务器上,您可以按原样使用命令。另一方面,你需要小的修改。例如:更改server-name

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Communication over tcp:
(setq server-use-tcp t)
(setq server-auth-dir "/tmp/eserv/")
(if (file-directory-p server-auth-dir)
(progn
(unless (file-accessible-directory-p server-auth-dir)
(error "Cannot access server-auth-dir"))
(unless (file-writable-p  server-auth-dir)
(error "Cannot write to server-auth-dir"))
)
(mkdir server-auth-dir t)
(unless (shell-command (concat "chgrp users "" server-auth-dir """))
(error "Cannot change group of server file directory to users."))
(chmod server-auth-dir (file-modes-symbolic-to-number "g+xr" (file-modes server-auth-dir))))
;; 
(defadvice server-ensure-safe-dir (around unsafe activate)
"We are on a private network and do not fear intrusion.
Furthermore, the directory is already set up.
This is a SECURITY HOLE if you do not know what you are doing!"
(let ((dir (ad-get-arg 0)))
(unless (file-exists-p dir)
(error "File %s does not exist." dir))
(unless (file-directory-p dir)
(error "File %s is not a directory." dir))))
(server-force-delete)
(server-start)
(defvar server-file nil
"Full name of server file.")
(setq server-file (concat server-auth-dir server-name))
(unless (shell-command (concat "chgrp users "" server-file """))
(error "Cannot change group of server file to users."))
(chmod server-file (file-modes-symbolic-to-number "g+r" (file-modes server-file)))

后来,我发现两个emacsen的通信也可以通过套接字进行。只需要绕过安全性并软链接auth目录中的服务器套接字。

所以,你可以选择。

最新更新