* How to exit function from inside its `interactive' call?
@ 2014-08-06 19:38 Thorsten Jolitz
2014-08-06 19:47 ` Drew Adams
0 siblings, 1 reply; 5+ messages in thread
From: Thorsten Jolitz @ 2014-08-06 19:38 UTC (permalink / raw)
To: help-gnu-emacs
Hi List,
how can I use catch/throw (or whatever) to exit function foo from inside
its 'interactive call? All combinations I tried so far only exit
'interactive and still execute the function body.
#+begin_src emacs-lisp
(defun foo (&optional arg)
(catch 'exit
(interactive
(let ((bar (if current-prefix-arg
(prefix-numeric-value)
(throw 'exit nil))))
(list (+ 2 bar)))))
(message "Arg: %s" arg))
#+end_src
#+results:
: Arg: nil
#+begin_src emacs-lisp
(foo)
#+end_src
#+results:
: Arg: nil
#+begin_src emacs-lisp
(foo '(4))
#+end_src
#+results:
: Arg: (4)
Thanks for any hint.
--
cheers,
Thorsten
^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: How to exit function from inside its `interactive' call?
2014-08-06 19:38 How to exit function from inside its `interactive' call? Thorsten Jolitz
@ 2014-08-06 19:47 ` Drew Adams
2014-08-06 21:12 ` Thorsten Jolitz
0 siblings, 1 reply; 5+ messages in thread
From: Drew Adams @ 2014-08-06 19:47 UTC (permalink / raw)
To: Thorsten Jolitz, help-gnu-emacs
> how can I use catch/throw (or whatever) to exit function foo from inside
> its 'interactive call? All combinations I tried so far only exit
> 'interactive and still execute the function body.
(defun bar ()
(interactive (top-level))
(message "aaaaaaaaa"))
(defun foo ()
(interactive
(throw 'top-level 'HELLO))
(message "JJJJJJJJJJJJJJ"))
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: How to exit function from inside its `interactive' call?
2014-08-06 19:47 ` Drew Adams
@ 2014-08-06 21:12 ` Thorsten Jolitz
2014-08-07 7:14 ` Nicolas Richard
0 siblings, 1 reply; 5+ messages in thread
From: Thorsten Jolitz @ 2014-08-06 21:12 UTC (permalink / raw)
To: help-gnu-emacs
Drew Adams <drew.adams@oracle.com> writes:
>> how can I use catch/throw (or whatever) to exit function foo from inside
>> its 'interactive call? All combinations I tried so far only exit
>> 'interactive and still execute the function body.
>
> (defun bar ()
> (interactive (top-level))
> (message "aaaaaaaaa"))
>
> (defun foo ()
> (interactive
> (throw 'top-level 'HELLO))
> (message "JJJJJJJJJJJJJJ"))
That works, thanks!
Did not know about `top-level'.
--
cheers,
Thorsten
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: How to exit function from inside its `interactive' call?
2014-08-06 21:12 ` Thorsten Jolitz
@ 2014-08-07 7:14 ` Nicolas Richard
2014-08-07 8:33 ` Thorsten Jolitz
0 siblings, 1 reply; 5+ messages in thread
From: Nicolas Richard @ 2014-08-07 7:14 UTC (permalink / raw)
To: Thorsten Jolitz; +Cc: help-gnu-emacs
Thorsten Jolitz <tjolitz@gmail.com> writes:
> That works, thanks!
> Did not know about `top-level'.
There is an obvious shortcoming : if you're in the middle of a recursive
edit, you'll be back to top level.
Why not simply throw an error ?
(defun foo ()
(interactive
(user-error "Interrupted"))
(message "JJJJJJJJJJJJJJ"))
--
Nico.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: How to exit function from inside its `interactive' call?
2014-08-07 7:14 ` Nicolas Richard
@ 2014-08-07 8:33 ` Thorsten Jolitz
0 siblings, 0 replies; 5+ messages in thread
From: Thorsten Jolitz @ 2014-08-07 8:33 UTC (permalink / raw)
To: help-gnu-emacs
Nicolas Richard <theonewiththeevillook@yahoo.fr> writes:
> Thorsten Jolitz <tjolitz@gmail.com> writes:
>> That works, thanks!
>> Did not know about `top-level'.
>
> There is an obvious shortcoming : if you're in the middle of a recursive
> edit, you'll be back to top level.
I see.
> Why not simply throw an error ?
>
> (defun foo ()
> (interactive
> (user-error "Interrupted"))
> (message "JJJJJJJJJJJJJJ"))
Mhhh ... because actually no error occured, the function is simply done
at that point, and I did not want to produce an error?
But when called interactively, its more like an (error-) message anyway,
so I might as well use this. Thanks.
--
cheers,
Thorsten
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-08-07 8:33 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-08-06 19:38 How to exit function from inside its `interactive' call? Thorsten Jolitz
2014-08-06 19:47 ` Drew Adams
2014-08-06 21:12 ` Thorsten Jolitz
2014-08-07 7:14 ` Nicolas Richard
2014-08-07 8:33 ` Thorsten Jolitz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).