我想实现一个命令,将前几个字符输入到现有命令中,然后让我输入其余的。
例如,icicle-execute-extended-command
已经输入了以“icicle-”开头的变体。
我试过了:
- 键盘宏
M-x i c i c l e s
无缘无故失败(即使是在简单的事情上)。
- 职能
- 调用
icicle-execute-extended-command
块命令序列
- 调用
我将如何以一种普遍的方式来做这件事?
我想实现一个命令,将前几个字符输入到现有命令中,然后让我输入其余的。
例如,icicle-execute-extended-command
已经输入了以“icicle-”开头的变体。
我试过了:
M-x i c i c l e s
无缘无故失败(即使是在简单的事情上)。icicle-execute-extended-command
块命令序列我将如何以一种普遍的方式来做这件事?
好问题。您可以尝试以下通用方法:
(defun no-mondays ()
(interactive)
(minibuffer-with-setup-hook
(lambda()
(insert "monday"))
(call-interactively 'query-replace)))
这是一个重构:
(defun with-initial-minibuffer (str fun)
`(lambda ()
(interactive)
(minibuffer-with-setup-hook
(lambda ()
(insert ,str))
(call-interactively ',fun))))
(defalias 'no-weekends
(with-initial-minibuffer
"\\(?:satur\\|sun\\)day"
'query-replace-regexp))
如果您completing-read
在命令定义中调用自己,则只需将要插入的文本作为INITIAL-INPUT
参数传递。这就是它的用途。
如果你使用icicle-define-command
or icicle-define-file-command
(这样你的命令将是一个多命令),那么同样的事情:传递INITIAL-INPUT
arg。
如果您使用这样的宏,请务必在定义命令的文件中放入类似的内容,以便宏定义在字节编译时可用:
(eval-when-compile
(or (condition-case nil
(load-library "icicles-mac") ; Use load-library to ensure latest .elc.
(error nil))
(require 'icicles-mac)))