In a function X that calls completing-read
, I'd like to be able to call X and pass in a constant input without invoking the minibuffer. From the emacs manual, it seems I'm supposed to flet
completing-read-function
, but I'm not sure the correct way to do this.
1 Answer
Assuming that you want the constant input to be optional, you can declare the function as taking an optional argument and then check if the argument is actually passed: if it is, go ahead and use it; if it isn't, then call completing-read
.
Something like this:
(defun X (&optional foo)
(message (or foo (completing-read "Enter foo value: " nil)))
where I assume that the value of foo
is a string.
If you call it with M-: (X)
, then foo
will be nil
and you will get the prompt. If you call it with M-: (X "bar")
then no prompt will be issued and the value of foo
will be the string bar
.
-
1
-
1Hi @NickD, the function X in question is
counsel-org-goto
, which isn't my function. I'd like to refrain from changing it, and instead, when it callscompleting-read
, have a user-supplied constant value automatically fed in. Commented Jan 5, 2022 at 18:50 -
You should have specified that in your question. I do not have time to check (and I know nothing about counsel), so I'm afraid I can't help. Maybe somebody else will provide an answer.– NickDCommented Jan 5, 2022 at 19:43
flet
anything.completing-read-function
is a variable which you canlet
-bind (like any dynamic variable). You would bind that variable to a function value.completing-read
, or otherwise figure out a way to handle all of the calls sensibly.completing-read
.