GNU bug report logs -
#62563
[FR] Expose `interactive' arg handling as an Elisp function
Previous Next
Reported by: Ruijie Yu <ruijie <at> netyu.xyz>
Date: Fri, 31 Mar 2023 07:29:01 UTC
Severity: wishlist
Tags: moreinfo
Done: Stefan Kangas <stefankangas <at> gmail.com>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
Hello,
I find myself sometimes needing to manually write code that do the same
job as the string-form `interactive' would do, like "read for an
existing file name" (the "f" form), etc. This happens because I want to
do the following conversion.
--8<---------------cut here---------------start------------->8---
(defun foo (fname)
(interactive "f")
(ignore fname))
(defun foo (fname bar)
(interactive
(list (simulate-interactive-f)
(get-bar)))
(ignore fname bar))
--8<---------------cut here---------------end--------------->8---
In short, this is useful when I need to add an interactive argument that
is not already covered by interactive codes, so I have to use the more
verbose interactive list form.
Currently, the code that handles interactive codes is written as part of
`call-interactively'. This is in src/callint.c,
DEFUN("call-interactively").
In fact, there is already _a way_ to do it (I consider it more like a
workaround). However, I think my proposal might be more concise than
the workaround for readers. And also more performant, since the
workaround unnecessarily creates a lambda and then extracts its
interactive form, only to make use of the result of its interactive
code.
--8<---------------cut here---------------start------------->8---
(call-interactively (lambda (f) (interactive "f") f))
--8<---------------cut here---------------end--------------->8---
If people are in favor of exposing the interactive codes, I imagine it
can be defined as `interactive-handle-code (code &optional prompt)', and
I would be able to do this:
--8<---------------cut here---------------start------------->8---
(interactive-handle-code ?f)
(interactive-handle-code ?M "Insert some random text: ")
;; etc
--8<---------------cut here---------------end--------------->8---
Alternatively, if we believe that my c-i + λ workaround is sufficiently
small, we could advise people in the same boat to follow suit? That
implies modifying the `interactive' docstring and (info "(elisp)
Interactive Codes").
--
Best,
RY
This bug report was last modified 1 year and 250 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.