2010-03-03 2 views
4

Я использую Emacs и Rudel для совместной работы с удаленным программистом. Рудель имеет концепцию опубликованных буферов. Когда мой партнер публикует буфер, я могу подписаться на него, и мы можем одновременно редактировать его.Совместные буферы Emacs открываются в неправильном режиме

Моя проблема заключается в том, что когда он публикует файл Python с расширением * .py и подписывается на него, мой буфер не устанавливается в режим python автоматически (он находится в основном режиме). Как я могу получить его так, чтобы буфер открывался с правильным языковым режимом?

+0

вид оффтопа, но как вы его все настроили? есть хороший учебник? (Мне никогда не удавалось нормально работать с руделем) – unhammer

+0

Я точно не помню, но Рудель не был прост в настройке, и я никогда не получил его на 100% правильно. Даже когда это сработало, буферы моего и моего партнера часто не синхронизировались в течение часа работы. Я отказался от использования Руделя. В эти дни я предпочитаю использовать tmux или GNU Screen для обмена текстовым терминалом с Emacs. Недостатком является то, что этот метод позволяет одновременно вводить только одного человека. На мой взгляд, это все равно, так как это заставляет вас больше сотрудничать. – hekevintran

+0

Вот что я использую сейчас, tmux с emacs multi-tty. Но мы можем печатать в одно и то же время (этот метод http://www.emacswiki.org/emacs/tmux_for_collaborative_editing), но я думаю, что isearch и это немного перепутано ... – unhammer

ответ

3

Я не знаю Rudel достаточно хорошо, чтобы дать 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- предлагаемый буферный документ) "? Я заблудился в части ... get-name-from-document .... – hekevintran

+0

@hekevintran Я расширил ответ, дайте мне знать, если это поможет. –

+0

Спасибо, это отлично работает. – hekevintran

0

Я абсолютно ничего не знаю о том, как работает рудель. Однако вы пытались явно установить режим в текстовом файле? Попробуйте добавить что-то вроде этого в первой строке файла:

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

Ввод линии, как это первый в файле будет вызывать Emacs игнорировать расширение файла и открыть в данном режиме.

Смежные вопросы