Следующее использует функцию interactive
, которая позволяет использовать код вместо строки.Этот код будет выполняться только тогда, когда функция вызывается в интерактивном режиме (что делает этот ответ другим по сравнению с предыдущим ответом).Код должен соответствовать списку, в котором элементы отображаются на параметры.
(defun my-test (&optional arg)
(interactive (list (if current-prefix-arg
(read-from-minibuffer "MyPrompt: ")
nil)))
(if arg
(message arg)
(message "NO ARG")))
Используя этот метод, эту функцию можно вызывать из кода, подобного (my-test)
или (my-test "X")
, без запроса пользователядля ввода.В большинстве случаев вы хотели бы разработать функции таким образом, чтобы они запрашивали ввод только при интерактивном вызове.