1

I would like to write a function that starts a search (evil-search-forward specifically), with some arbitrary text already in the minibuffer.

Following directions in this link I came up with the following:

  (defun my/insert-headline-string ()
    (insert "foobar"))

  (minibuffer-with-setup-hook
      (:append 'my/insert-headline-string)
    (call-interactively #'evil-search-forward))

But it doesn't work for me: evil-search-forward runs just fine, but there is no text in the mini-buffer. If I use a different function (eg find-file) it prefills mini-buffer as expected, like so:

  (minibuffer-with-setup-hook
      (:append 'my/insert-headline-string)
    (call-interactively #'find-file))

Is there a reason this won't work for the search minibuffer?

5
  • 1
    I don't use Evil, but did you try just using insert instead of :append? (Dunno what :append does.) And does evil-search-forward actually use the minibuffer? Isearch does not, for example, even though it looks like it does.
    – Drew
    Jul 9, 2022 at 15:42
  • Thanks for the tip! Looking into evil-search-forward, it's basically a wrapper for isearch, which explains why editting the minibuffer doesn't do what I want. Would there be a way to prefill the isearch minibuffer I wonder? (Also, played with insert instead of :append but could not get that to work).
    – randouser
    Jul 10, 2022 at 1:44
  • 1
    You ask how to "prefill the isearch minibuffer". There is no Isearch minibuffer - that's what I said. But you can predefine ("prefill") the initial search string: (defun the () (setq isearch-string "the")) (defun find-the ()(interactive) (add-hook 'isearch-mode-hook 'the) (isearch-mode t))
    – Drew
    Jul 10, 2022 at 4:11
  • That did it, thanks! I just added a remove-hook after the search to clean things up and it's just what I wanted. I can post the final code I'm using as an answer? Or do you want to? I don't know SE etiquette.
    – randouser
    Jul 12, 2022 at 9:47
  • Sure. Please post your answer. (And you can accept your own answer.) Thx.
    – Drew
    Jul 12, 2022 at 15:34

1 Answer 1

0

Following @Drew 's suggestions, I managed to achieve this with the following code:


  (defun my/set-isearch-string ()
    (setq isearch-string "^\*+[[:space:]].*"))

  (defun my/search-headlines-only ()
    (interactive)
    (add-hook 'isearch-mode-hook 'my/set-isearch-string)
    (evil-search-forward) 
    (remove-hook 'isearch-mode-hook 'my/set-isearch-string))

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.