2010-03-03 37 views
4

我正在使用Emacs和Rudel與遠程程序員協作。 Rudel有一個發佈的緩衝區的概念。當我的合作伙伴發佈緩衝區時,我可以訂閱它,我們可以同時編輯它。Emacs協作緩衝區以錯誤模式打開

我的問題是,當他發佈帶* .py擴展名的Python文件並訂閱它時,我的緩衝區沒有自動設置爲python模式(它處於基本模式)。我怎樣才能得到它,使緩衝區以正確的語言模式打開?

+0

一種偏離主義,但你是如何得到它的一切設置?有沒有一個很好的教程? (我從來沒有設法讓rudel正常工作) – unhammer 2012-04-11 14:09:36

+0

我記不起來了,但Rudel不是很容易設置,我從來沒有正確工作。即使它確實有效,我和我的合作伙伴的緩衝區在工作一小時內通常會失去同步。我放棄了使用Rudel。現在我更喜歡使用tmux或GNU Screen來共享運行Emacs的文本終端。缺點是這種方法一次只允許一個人輸入。在我看來,這無論如何都會更好,因爲它會迫使你做更多的合作。 – hekevintran 2012-04-11 19:25:03

+0

這就是我現在使用的,帶有emacs multi-tty的tmux。但我們可以在同一時間鍵入(此方法http://www.emacswiki.org/emacs/tmux_for_collaborative_editing),但我認爲isearch等有點搞砸了...... – unhammer 2012-04-12 06:15:46

回答

3

我不知道魯德爾也足以讓100%的解決方案,但你想做的事是這樣的:

(add-hook 'rudel-document-attach-hook 'my-rudel-set-mode-appropriately) 
(defun my-rudel-set-mode-appropriately (document buffer) 
    "try to set the mode appropriately" 
    (set-buffer buffer) 
    (let ((buffer-file-name ...get-name-from-document...)) 
    (set-auto-mode))) 

只是,你需要更換的代碼...get-name-from-document...部分例如,如果緩衝區的名稱爲myfile.py,那麼可以將其更改爲(buffer-name)。但是,如果緩衝區的名稱是奇數,則可能需要從文檔對象中提取名稱(Rudel內部使用文檔對象來表示您正在共享的內容)。所以,如果(buffer-name)不起作用,您可以嘗試(rudel-suggested-buffer-name document)

即嘗試上面的代碼,但使用這些線中的一條:

(let ((buffer-file-name (buffer-name))) 

(let ((buffer-file-name (rudel-suggested-buffer-name document))) 

set-auto-mode將使用的buffer-file-name值使用general Emacs mechanisms以確定主要模式。

+0

你能澄清你的意思嗎(「rudel-建議緩衝區名稱文件)「?我迷失了......從文檔中獲取名稱...部分。 – hekevintran 2010-03-04 00:52:42

+0

@hekevintran我擴大了答案,讓我知道如果這有幫助。 – 2010-03-04 04:10:04

+0

謝謝,這個作品很棒。 – hekevintran 2010-03-05 18:27:41

0

我對rudel的工作原理一無所知。但是,你有沒有試過在文本文件中明確設置模式?嘗試添加像這樣的文件的第一行:

# -*- mode: python; fill-column: 75; comment-column: 50; -*- 

把這樣一行首先在文件中會導致emacs的忽略文件的擴展名,並開放在給定的模式。