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

时间:2014-02-13 20:52:34

标签: emacs

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

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

我尝试过自动保存模式和自动恢复模式的组合,尝试自动保存自动恢复,但这似乎不能正常工作。

使用emacs有一些正常的方法吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

不完整的答案。只是一些想法。然而,这是作为答案而制定的,因为我想用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目录中的服务器套接字。

所以,你可以选择。