如果我想创建自己的函数,其中包括调用wg-save(workgroups.el - save workgroups),那么我会这样做:
(defun foo ()
(interactive)
...
(call-interactively 'wg-save)
)
(global-set-key (kbd "my binding") 'foo)
Run Code Online (Sandbox Code Playgroud)
以下场景如何(我将使用eyebrowse.el作为示例):
眉毛使用Cc Cw'数字'移动到不同的窗口配置,例如Cc Cw 1移动到1或Cc Cw 2移动到2.
我怎么能写一个类似'foo'的类似函数,因为现在我需要传递'call-interactively'一个'number'作为参数?
编辑:Cc Cw 1调用eyebrowse-switch-to-window-config-1.因此,当键绑定为'Cc Cw 1','eyebrowse-switch-to时,我需要制作一个'foo'函数,就像上面那样'交互式调用''eyebrowse-switch-to-window-config-1' -window-config-2'当键绑定是'Cc Cw 2'时等.如下所示(如果有意义):
(defun foo ()
(interactive)
...
(call-interactively 'eyebrowse-switch-to-window-config-"number")
)
(global-set-key (kbd "C-c C-w 'number'") 'foo)
Run Code Online (Sandbox Code Playgroud)
从文档中阅读C-h f call-interactively RET:
如果命令询问要使用哪些事件来调用它,则可选的第三个arg KEYS(如果给定)指定要提供的事件序列(作为向量)。如果KEYS被省略或为nil,则使用'this-command-keys-vector'的返回值。
因此要将参数传递给call-interactively,给它一个带有参数的向量,就像这样
(call-interactively 'my-fn t (vector arg1 arg2))
Run Code Online (Sandbox Code Playgroud)
这样,您就无需调用eyebrowse-switch-to-config-window-nn是数字的地方,只需调用它们所依赖的函数eyebrowse-switch-to-window-config,并为其指定一个数字即可。
您可以为这样的参数获取一个数字:(请参阅“交互式”的帮助)
(defun foo (arg)
(interactive "nWindow? ")
(call-interactively 'my-fn t (vector arg))
)
Run Code Online (Sandbox Code Playgroud)
但是您读过眉毛的来源了吗?它将给出想法。
(defun eyebrowse-switch-to-window-config-0 ()
"Switch to window configuration 0."
(interactive)
(eyebrowse-switch-to-window-config 0))
Run Code Online (Sandbox Code Playgroud)
我相信你可以做这样的事情:
(defun foo (NUM)
"Enter the NUM of the screen to go to.
If the key pressed is not a number go to screen 0."
(interactive
(list (read-key-sequence "Which window: ")))
((eyebrowse-switch-to-window-config 3) (string-to-number NUM)))
Run Code Online (Sandbox Code Playgroud)
关键是read-key-sequence功能