假设我有一个带有某些模式名称的变量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的示例)。
答案 0 :(得分:6)
(let ((mode "python-mode"))
(funcall (intern mode)))
或
(let ((mode 'python-mode))
(funcall mode))