我想实现一个命令,将前几个字符键入现有命令,然后让我输入其余的字符。
例如,icicle-execute-extended-command
的变体以“icicle-”开头已经输入。
我试过了:
M-x i c i c l e s
这样的简单事情)也没有明显的原因。icicle-execute-extended-command
阻止命令序列我将如何以一般化的方式进行此操作?
答案 0 :(得分:2)
好问题。 以下是您可以尝试的通用内容:
(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))
答案 1 :(得分:0)
如果您在命令定义中自己调用completing-read
,那么只需将文本作为INITIAL-INPUT
参数传递给insert。这就是它的用途。
如果你使用icicle-define-command
或icicle-define-file-command
(这样你的命令将是multi-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)))