4

我想实现一个命令,将前几个字符输入到现有命令中,然后让我输入其余的。

例如,icicle-execute-extended-command已经输入了以“icicle-”开头的变体。

我试过了:

  • 键盘宏
    • M-x i c i c l e s无缘无故失败(即使是在简单的事情上)。
  • 职能
    • 调用icicle-execute-extended-command块命令序列

我将如何以一种普遍的方式来做这件事?

4

2 回答 2

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))
于 2014-01-02T21:46:36.693 回答
0

如果您completing-read在命令定义中调用自己,则只需将要插入的文本作为INITIAL-INPUT参数传递。这就是它的用途。

如果你使用icicle-define-commandor icicle-define-file-command(这样你的命令将是一个多命令),那么同样的事情:传递INITIAL-INPUTarg。

如果您使用这样的宏,请务必在定义命令的文件中放入类似的内容,以便宏定义在字节编译时可用:

 (eval-when-compile
  (or (condition-case nil
          (load-library "icicles-mac")   ; Use load-library to ensure latest .elc.
        (error nil))
      (require 'icicles-mac)))
于 2014-01-02T21:25:01.857 回答