Emacs协作缓冲区以错误模式打开
我正在使用 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的一般机制。