Emacs:如何设置存储在变量中的主模式?

时间:2011-09-24 14:27:22

标签: emacs elisp

假设我有一个带有某些模式名称的变量newName,例如"python-mode"。如何创建newName指定模式的当前缓冲区?

(progn
  (let (newName)
    (setq newName "python-mode")
    (newName) ;; doesn't work! It doesn't set current buffer's mode to be a python mode.
  )
)

这也不起作用:

(set-variable 'major-mode "python-mode")

这个问题很重要 - 因为它等于“是否真的可以将数据视为lisp中的代码?”

修改

@phils

您的解决方案对我不起作用。我复制一个缓冲区 - 我希望新的缓冲区具有与旧缓冲区相同的模式。所以我将原始缓冲区的模式存储在变量中。然后尝试应用您的解决方案。它给出了错误(这是本质 - 我在这里省略了缓冲区复制的东西):

(let (sameMode)
  (setq sameMode major-mode)
  (funcall (intern sameMode))
)

sameMode以“python-mode”的形式存储此模式(python-mode的示例)。

1 个答案:

答案 0 :(得分:6)

(let ((mode "python-mode"))
  (funcall (intern mode)))

(let ((mode 'python-mode))
  (funcall mode))