Emacs Elisp динамическая интерактивная подсказка - PullRequest
11 голосов
/ 16 апреля 2009

Я пытаюсь получить динамическое приглашение от моей функции elisp. Я хочу что-то вроде replace-regexp, где он покажет вам последнее введенное регулярное выражение Я старался (интерактивный (конкат "саб" "баб"))) это не работает!

Я также пробовал формат сообщения (интерактивное "s% s" последнее использованное регулярное выражение)

и это не работает! Кто-нибудь знает, как это сделать?

Спасибо!

Ответы [ 2 ]

15 голосов
/ 16 апреля 2009

M-x find-function твой друг. Он расскажет вам, как работает emacs, и покажет вам исходный код. Используя его, я обнаружил, что query-regexp-replace вызывает query-replace-read-args, который вызывает query-replace-read-from, который вызывает read-from-minibuffer, используя приглашение, созданное из последнего использованного регулярного выражения, которое сохраняется в пунктирной паре query-replace-defaults.

Итак:

(defun my-func ()
  "Do stuff..."
  (interactive)
  (read-from-minibuffer "Regexp? " (first query-replace-defaults)))

- это команда, которая выдает приглашение с последним введенным регулярным выражением по умолчанию.

9 голосов
/ 16 апреля 2009

Используйте переменную для истории ввода и интерактив со списком:

(defvar my-func-history nil)

(defun my-func (str)
  (interactive (list (read-from-minibuffer "Input string: " (car my-func-history) nil nil 'my-func-history)))
  (insert str))

Если вы не хотите, чтобы последнее введенное там значение изначально, измените (car my-func-history) на nil Вы можете, конечно, стрелку вверх / вниз, чтобы просмотреть историю в приглашении.

...