【问题标题】:Emacs collaborative buffers open in the wrong modeEmacs 协作缓冲区以错误的模式打开
【发布时间】:2010-03-03 22:24:27
【问题描述】:

我正在使用 Emacs 和 Rudel 与远程程序员协作。 Rudel 有一个发布缓冲区的概念。当我的合作伙伴发布缓冲区时,我可以订阅它,我们可以同时对其进行编辑。

我的问题是,当他发布带有 *.py 扩展名的 Python 文件并订阅它时,我的缓冲区没有自动设置为 python 模式(它处于基本模式)。如何获取它以便缓冲区以正确的语言模式打开?

【问题讨论】:

  • 有点离题,但你是怎么把它全部设置好的?有没有好的教程? (我从来没有设法让 rudel 正常工作)
  • 我记不太清了,但是 Rudel 的设置并不简单,我从来没有让它 100% 正确工作。即使它确实有效,我和我的伙伴的缓冲区也经常会在工作一小时内失去同步。我放弃了使用 Rudel。这些天来,我更喜欢使用 tmux 或 GNU Screen 来共享一个运行 Emacs 的文本终端。缺点是这种方法一次只允许一个人打字。在我看来,这无论如何都会更好,因为它会迫使你进行更多的协作。
  • 这就是我现在用的,tmux 和 emacs multi-tty。但是我们可以同时打字(这个方法emacswiki.org/emacs/tmux_for_collaborative_editing),但是我觉得isearch之类的有点乱……

标签: python emacs collaboration pair-programming


【解决方案1】:

我不太了解 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 的主要模式。

【讨论】:

  • 你能澄清你所说的“(rudel-suggested-buffer-name document)”是什么意思吗?我迷失了 ...get-name-from-document... 部分。
  • @hekevintran 我扩展了答案,如果有帮助,请告诉我。
【解决方案2】:

我对 rudel 的工作原理一无所知。但是,您是否尝试过在文本文件中明确设置模式?尝试在文件的第一行添加类似这样的内容:

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

在文件中首先放置这样的一行将导致 emacs 忽略文件的扩展名并以给定的模式打开。

【讨论】:

    猜你喜欢
    • 2014-02-26
    • 1970-01-01
    • 2017-07-28
    • 2010-09-12
    • 2010-12-22
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多