Emacs协作缓冲区以错误模式打开

4 投票
2 回答
533 浏览
提问于 2025-04-15 19:59

我正在使用 Emacs 和 Rudel 来和一个远程程序员合作。Rudel 有一个叫做“发布缓冲区”的概念。当我的合作伙伴发布一个缓冲区时,我可以订阅这个缓冲区,这样我们就可以同时编辑它。

我遇到的问题是,当他发布一个后缀为 *.py 的 Python 文件时,我订阅后我的缓冲区并没有自动切换到 Python 模式,而是停留在基础模式(fundamental mode)。我该怎么做才能让这个缓冲区以正确的语言模式打开呢?

2 个回答

0

我对rudel是怎么工作的完全不了解。不过,你有没有试过在文本文件里明确设置模式呢?可以试着在文件的第一行加上类似下面的内容:

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

在文件的最前面加上这一行,emacs就会忽略文件的扩展名,直接用你指定的模式打开这个文件。

3

我对Rudel不太了解,所以不能给你一个百分之百的解决方案,但你想做的事情大概是这样的:

(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的值来确定主要模式,使用的是Emacs的一般机制

撰写回答