This Stack Overflow answer告诉我,我可以使用set-face-attribute
设置Emacs的字体大小:
(set-face-attribute 'default nil :height 100)
评论显示您无法使用 M-x 运行set-face-attribute
:
相反,您必须使用 M - 运行它:
为什么某些命令(例如set-face-attribute
)无法通过 M-x 获得?
答案 0 :(得分:28)
execute-extended-command
,该命令允许您键入命令的名称并运行它。eval-expression
,它允许您键入包含函数调用的任意S表达式并对其进行求值。可以使用 M - 调用的函数用于实现Emacs功能,自定义(例如在.emacs
中)和插件。函数参数通常通过在S表达式中调用函数来传递。
如果命令的定义中有interactive
形式,那么任何函数也都可以成为命令。 interactive
形式描述了函数在作为命令调用时应如何获取其参数。例如,如果函数在其定义中具有(interactive "bGive me a buffer: ")
,则该函数将使用 M-x 进行调用。当用户使用 Mx 调用函数时,Emacs将提示用户输入缓冲区名称(因为b
),并且他们键入的名称将作为参数传递给函数
使函数成为命令的目的是让最终用户轻松调用它,而不仅仅是为Emacs Lisp程序员调用。命令(使用 M-x 运行)更容易以这些方式以交互方式运行:
()
包围命令名称,以使其成为有效的S表达式。interactive
表单code characters(如b
)指定了预期的输入类型。您无法使用 Mx 调用函数set-face-attribute
的原因是它的定义不包含interactive
形式,因此set-face-attribute
不是一个命令。您必须在S表达式中将其称为普通函数。您可以使用 M - :从迷你缓冲区执行此操作,也可以使用其他任何位置ways of evaluating code执行此操作。
Emacs Mini Manual → Concepts → Command对正常函数和命令之间的区别有一个简短的,措辞不同的解释。 Relationship between Emacs functions and commands解释了此答案中没有的一些细节。