Программно вставить текст в команду, которая обычно блокирует цикл событий
Я хотел бы реализовать команду, которая вводит первые несколько символов в существующую команду и позволяет мне вводить остальные.
Например, вариант icicle-execute-extended-command
который начинается с "icicle-" уже введен.
Я пытался:
- макросы клавиатуры
- не удается (даже на простых вещах, таких как
M-x i c i c l e s
) без видимой причины.
- не удается (даже на простых вещах, таких как
- функции
- призвание
icicle-execute-extended-command
заблокировать последовательность команд
- призвание
Как бы я сделал это в обобщенном виде?
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))
Если вы звоните completing-read
сами в определении вашей команды, а затем просто передать текст для вставки в качестве INITIAL-INPUT
аргумент. Вот для чего это.
Если вы используете icicle-define-command
или же 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)))