2014-02-13 62 views
1

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

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

我尝试过自动保存模式和自动还原模式的组合,尝试自动保存自动还原,但似乎并不正确。

有没有一些正常的方法来做到这一点与emacs?

+1

是否暗示您有两个用户同时在一台计算机上登录(例如,,一台服务器),你希望两个用户能够同时查看同一个文件并在每个站点上实时更新?你能否详细说明你的双重登录是如何建立的。 – lawlist

回答

1

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

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目录中的服务器套接字。

所以,你有选择。

相关问题