如果我想创建自己的功能,其中包括 wg-save (workgroups.el - 保存工作组),那么我会这样做:
(defun foo ()
(interactive)
...
(call-interactively 'wg-save)
)
(global-set-key (kbd "my binding") 'foo)
以下场景如何(我将使用eyebrowse.el作为示例):
眉笔使用C-c C-w'数字'移动到不同的窗口配置,例如C-c C-w 1移动到1或C-c C-w 2移动到2。我怎样才能编写类似于' foo'从现在起,我需要以交互方式传递给对方。一个号码'作为参数?
编辑:C-c C-w 1调用eyebrowse-switch-to-window-config-1。 所以我需要制作一个' foo'像上面这样的功能将以交互方式呼叫#39; ' eyebrowse-交换机到窗口-CONFIG-1'当密钥绑定是' C-c C-w 1',' eyebrowse-switch-to-window-config-2'当密钥绑定是' C-c C-w 2'等等 类似下面的内容(如果有意义的话):
(defun foo ()
(interactive)
...
(call-interactively 'eyebrowse-switch-to-window-config-"number")
)
(global-set-key (kbd "C-c C-w 'number'") 'foo)
答案 0 :(得分:5)
从文档中,请阅读C-h f call-interactively RET
:
可选的第三个arg KEYS,如果给定,则指定事件序列 如果命令查询使用了哪些事件,则作为向量提供 调用它。如果省略KEYS或nil,则返回值 `这个命令密钥矢量'使用。
所以要将参数传递给call-interactively
,给它一个带参数的向量,就像这样
(call-interactively 'my-fn t (vector arg1 arg2))
这样你就不需要调用eyebrowse-switch-to-config-window-n
,其中n是数字,你可以调用他们所依赖的函数eyebrowse-switch-to-window-config
,并给它一个数字作为参数。
你可以得到一个这样的论证数字:(参见&#34的帮助;互动")
(defun foo (arg)
(interactive "nWindow? ")
(call-interactively 'my-fn t (vector arg))
)
但是你读过眉毛的来源了吗?它会给出想法。
(defun eyebrowse-switch-to-window-config-0 ()
"Switch to window configuration 0."
(interactive)
(eyebrowse-switch-to-window-config 0))
答案 1 :(得分:1)
我相信你可以这样做:
(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)))
关键是read-key-sequence
功能
答案 2 :(得分:0)
为节省时间和空间,您可以使用循环来定义将要使用的所有键绑定。
例如,对于眉毛来说,不必定义每个键绑定,而是可以这样做:
(load-library "eyebrowse")
(dotimes (i 10)
(global-set-key
(kbd (concat "C-c C-w " (number-to-string i)))
`(lambda ()
(interactive)
(eyebrowse-switch-to-window-config ,i))))