是的,所有的Emacs命令都是函數,但並不是所有的函數都是Emacs命令。您可以任意elisp的功能使用(interactive)
通過M-x
訪問的命令:
(defun my-command()
"This is the docstring"
(interactive)
(do-foo)
(do-bar))
現在,您已經定義my-command
互動,您可以立即與M-x my-command
訪問它。 Emacs會自動爲您完成所有名稱簿記。
這是全部您必須添加新命令!然後,您可以將其綁定到類似以下的鍵:
(global-set-key (kbd "C-c f") 'my-command)
此外,每個鍵綁定都與一個類似這樣的交互功能相關聯。您可以使用C-h k
並輸入您的密鑰序列來查找哪個密鑰調用哪個函數。這將爲您提供將在該鍵序列上調用的函數的文檔。如果您運行的代碼我給你,做C-h k C-c f
會給你包含緩衝(除其他事項外)您的文檔字符串:
C-c f runs the command my-command, which is an interactive Lisp
function.
It is bound to C-c f.
(my-command)
This is the docstring
所以:所有的Emacs命令只是(interactive)
定義的功能。 (實際上,Emacs的C核也有一些原始功能,但這並不重要)。
命令和函數之間的這種簡單而優雅的關係 - 在任何方向都很容易遵循 - 是部分讓Emacs如此容易定製。如果您想知道您的常規操作稱爲什麼功能,那麼您可以輕鬆查看它們,並且如果您想添加更多命令,則只需在函數中添加一行。
M-x不是函數,它是綁定到函數的鍵序列。碰巧,它被綁定到一個函數,它將一個命令作爲參數;當交互調用時,它的「交互式」表單會導致它提示輸入命令名稱。 – tripleee