Search code examples
emacsminibuffer

Simulate minibuffer input in Emacs


I'm looking for a way to simulate minibuffer input. So, some-func takes some input from the minibuffer and does something with it. The problem is that I have to call some-func from some other function calling-func and I need to do it interactively so I cant just pass an argument.

(defun some-func (arg)
  (interactive "*sEnter something: ")
  ;; Do something with arg
  )

(defun calling-func ()
  (call-interactively 'some-func)
  ;; Type to minibuffer
  )

Any ideas?

Thanks!


Solution

  • It might be interesting to explore why you need to call the other function interactively... but that's not what you asked.

    Here's an example of "calling" a function interactively and sending text to the minibuffer. You just use Emacs keyboard macros:

    (defun my-call-find-file (something)
      "An example of how to have emacs 'interact' with the minibuffer
    use a kbd macro"
      (interactive "sEnter something:")
      (let ((base-vector [?\M-x ?f ?i ?n ?d ?- ?f ?i ?l ?e return]))
        ;; create new macro of the form
        ;; M-x find-file RET <userinput> RET
        (execute-kbd-macro (vconcat base-vector 
                                    (string-to-vector something) 
                                    (vector 'return)))))
    

    The relevant documentation are Keyboard Macros and Functions for Vectors.