使用emacs lisp以编程方式设置缓冲区的主要模式

Cod*_*lus 3 emacs buffer elisp mode

我希望以编程方式设置缓冲区的主要模式.我已经挖掘了文档,该函数set-buffer-major-mode只接受一个缓冲对象.我本质上是在寻找一个带缓冲区对象和模式名称的函数.

或者,我也尝试使用auto-mode-alist强制缓冲区具有文件扩展名,但即使我调用该set-buffer-major-mode函数也不起作用.

感谢您的帮助!

Lin*_*cer 10

基本的是,如果你想切换到my模式,你所要做的就是调用my-mode,例如:

(with-current-buffer buffer
  (my-mode))
Run Code Online (Sandbox Code Playgroud)

如果您有一个缓冲区和一个绑定到主模式的变量,您可以使用以下内容:

(with-current-buffer buffer
  (funcall the-mode-i-want))
Run Code Online (Sandbox Code Playgroud)

同样,如果您有一个绑定到字符串的变量,则必须使用intern以下命令将其转换为符号:

(with-current-buffer buffer
  (funcall (intern the-name-of-the-mode-i-want)))
Run Code Online (Sandbox Code Playgroud)

  • @azzamsa,您应该使用“(my-mode)”或“(funcall a-variable-holding-the-major-mode)”,但不应混合使用这两种变体。 (2认同)