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

Ado*_*obe 0 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.
  )
)
Run Code Online (Sandbox Code Playgroud)

这也行不通:

(set-variable 'major-mode "python-mode")
Run Code Online (Sandbox Code Playgroud)

这个问题是基本的 - 因为它等于"是否真的可以将数据视为lisp中的代码?"

编辑

@phils

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

(let (sameMode)
  (setq sameMode major-mode)
  (funcall (intern sameMode))
)
Run Code Online (Sandbox Code Playgroud)

sameMode以"python-mode"的形式存储此模式(python-mode的示例).

phi*_*ils 6

(let ((mode "python-mode"))
  (funcall (intern mode)))
Run Code Online (Sandbox Code Playgroud)

要么

(let ((mode 'python-mode))
  (funcall mode))
Run Code Online (Sandbox Code Playgroud)