unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* Modifying a hook while it's being executed
@ 2005-08-08 15:32 PT
  2005-08-08 15:42 ` J. David Boyd
       [not found] ` <mailman.3028.1123516720.20277.help-gnu-emacs@gnu.org>
  0 siblings, 2 replies; 8+ messages in thread
From: PT @ 2005-08-08 15:32 UTC (permalink / raw)


Is it safe? I haven't seen it anywhere stated explicitly.

For example, I add a hook function to pre-command-hook or  
post-command-hook which removes itself from the hook when invoked.

-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/m2/

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Modifying a hook while it's being executed
  2005-08-08 15:32 Modifying a hook while it's being executed PT
@ 2005-08-08 15:42 ` J. David Boyd
       [not found] ` <mailman.3028.1123516720.20277.help-gnu-emacs@gnu.org>
  1 sibling, 0 replies; 8+ messages in thread
From: J. David Boyd @ 2005-08-08 15:42 UTC (permalink / raw)


PT <mailshield.gg@mailnull.com> writes:

> Is it safe? I haven't seen it anywhere stated explicitly.
>
> For example, I add a hook function to pre-command-hook or
> post-command-hook which removes itself from the hook when invoked.
>

Does it blow up emacs?  If not, then it is probably safe!

Dave

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Modifying a hook while it's being executed
       [not found] ` <mailman.3028.1123516720.20277.help-gnu-emacs@gnu.org>
@ 2005-08-08 18:51   ` rgb
  2005-08-08 20:21     ` kcin
  0 siblings, 1 reply; 8+ messages in thread
From: rgb @ 2005-08-08 18:51 UTC (permalink / raw)



J. David Boyd wrote:
> PT <mailshield.gg@mailnull.com> writes:
>
> > Is it safe? I haven't seen it anywhere stated explicitly.
> >
> > For example, I add a hook function to pre-command-hook or
> > post-command-hook which removes itself from the hook when invoked.
> >
>
> Does it blow up emacs?  If not, then it is probably safe!

At first I thought something similar, but that's not really
a valid way to view the problem.  If something else runs a
hook that would normally execute after the one you are removing
there is a potential for other hooks not to run on that command.
Something like that would not likely manifest itself in a
catastrophic way but could cause unusual behaviors that a
conscientious coder would want to avoid.

This line appears in remove-hook.

(setq hook-value (delete function (copy-sequence hook-value)))

It makes me think that a change to the hook's value will not
be visible to the present execution of the run-hooks command.
So I'd say it appears to be perfectly safe.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Modifying a hook while it's being executed
  2005-08-08 18:51   ` rgb
@ 2005-08-08 20:21     ` kcin
  2005-08-08 20:34       ` Henrik Enberg
       [not found]       ` <mailman.3053.1123533819.20277.help-gnu-emacs@gnu.org>
  0 siblings, 2 replies; 8+ messages in thread
From: kcin @ 2005-08-08 20:21 UTC (permalink / raw)


rgb wrote:
>
> This line appears in remove-hook.
>
> (setq hook-value (delete function (copy-sequence hook-value)))
>
> It makes me think that a change to the hook's value will not
> be visible to the present execution of the run-hooks command.
> So I'd say it appears to be perfectly safe.

Yes, it seems OK. However I wonder why it is not simply

  (setq hook-value (remove function hook-value))
 
remove also returns a copy. Is there a difference?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Modifying a hook while it's being executed
  2005-08-08 20:21     ` kcin
@ 2005-08-08 20:34       ` Henrik Enberg
       [not found]       ` <mailman.3053.1123533819.20277.help-gnu-emacs@gnu.org>
  1 sibling, 0 replies; 8+ messages in thread
From: Henrik Enberg @ 2005-08-08 20:34 UTC (permalink / raw)
  Cc: help-gnu-emacs

> From: kcin@mytrashmail.com
> Date: 8 Aug 2005 13:21:13 -0700
> 
> rgb wrote:
> >
> > This line appears in remove-hook.
> >
> > (setq hook-value (delete function (copy-sequence hook-value)))
> >
> > It makes me think that a change to the hook's value will not
> > be visible to the present execution of the run-hooks command.
> > So I'd say it appears to be perfectly safe.
> 
> Yes, it seems OK. However I wonder why it is not simply
> 
>   (setq hook-value (remove function hook-value))
>  
> remove also returns a copy. Is there a difference?

`remove' is part of the cl library which isn't supposed to be used in
core Emacs.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Modifying a hook while it's being executed
       [not found]       ` <mailman.3053.1123533819.20277.help-gnu-emacs@gnu.org>
@ 2005-08-08 20:55         ` David Kastrup
  2005-08-08 21:08           ` Henrik Enberg
       [not found]           ` <mailman.3058.1123535725.20277.help-gnu-emacs@gnu.org>
  0 siblings, 2 replies; 8+ messages in thread
From: David Kastrup @ 2005-08-08 20:55 UTC (permalink / raw)


Henrik Enberg <henrik.enberg@telia.com> writes:

>> From: kcin@mytrashmail.com
>> Date: 8 Aug 2005 13:21:13 -0700
>> 
>> rgb wrote:
>> >
>> > This line appears in remove-hook.
>> >
>> > (setq hook-value (delete function (copy-sequence hook-value)))
>> >
>> > It makes me think that a change to the hook's value will not
>> > be visible to the present execution of the run-hooks command.
>> > So I'd say it appears to be perfectly safe.
>> 
>> Yes, it seems OK. However I wonder why it is not simply
>> 
>>   (setq hook-value (remove function hook-value))
>>  
>> remove also returns a copy. Is there a difference?
>
> `remove' is part of the cl library which isn't supposed to be used in
> core Emacs.

remove is a compiled Lisp function in `subr'.
(remove ELT SEQ)

Return a copy of SEQ with all occurrences of ELT removed.
SEQ must be a list, vector, or string.  The comparison is done with `equal'.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Modifying a hook while it's being executed
  2005-08-08 20:55         ` David Kastrup
@ 2005-08-08 21:08           ` Henrik Enberg
       [not found]           ` <mailman.3058.1123535725.20277.help-gnu-emacs@gnu.org>
  1 sibling, 0 replies; 8+ messages in thread
From: Henrik Enberg @ 2005-08-08 21:08 UTC (permalink / raw)


> From: David Kastrup <dak@gnu.org>
> Date: Mon, 08 Aug 2005 22:55:17 +0200
> 
> Henrik Enberg <henrik.enberg@telia.com> writes:
> 
> > `remove' is part of the cl library which isn't supposed to be used in
> > core Emacs.
> 
> remove is a compiled Lisp function in `subr'.
> (remove ELT SEQ)
> 
> Return a copy of SEQ with all occurrences of ELT removed.
> SEQ must be a list, vector, or string.  The comparison is done with `equal'.

doh, I must have been passing through a low flying crack cloud when I
wrote my previous message.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Modifying a hook while it's being executed
       [not found]           ` <mailman.3058.1123535725.20277.help-gnu-emacs@gnu.org>
@ 2005-08-08 21:32             ` David Kastrup
  0 siblings, 0 replies; 8+ messages in thread
From: David Kastrup @ 2005-08-08 21:32 UTC (permalink / raw)


Henrik Enberg <henrik.enberg@telia.com> writes:

>> From: David Kastrup <dak@gnu.org>
>> Date: Mon, 08 Aug 2005 22:55:17 +0200
>> 
>> Henrik Enberg <henrik.enberg@telia.com> writes:
>> 
>> > `remove' is part of the cl library which isn't supposed to be used in
>> > core Emacs.
>> 
>> remove is a compiled Lisp function in `subr'.
>> (remove ELT SEQ)
>> 
>> Return a copy of SEQ with all occurrences of ELT removed.
>> SEQ must be a list, vector, or string.  The comparison is done with `equal'.
>
> doh, I must have been passing through a low flying crack cloud when I
> wrote my previous message.

I would not be terribly surprised if cl had its own keyword-rich
variant of remove.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2005-08-08 21:32 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-08-08 15:32 Modifying a hook while it's being executed PT
2005-08-08 15:42 ` J. David Boyd
     [not found] ` <mailman.3028.1123516720.20277.help-gnu-emacs@gnu.org>
2005-08-08 18:51   ` rgb
2005-08-08 20:21     ` kcin
2005-08-08 20:34       ` Henrik Enberg
     [not found]       ` <mailman.3053.1123533819.20277.help-gnu-emacs@gnu.org>
2005-08-08 20:55         ` David Kastrup
2005-08-08 21:08           ` Henrik Enberg
     [not found]           ` <mailman.3058.1123535725.20277.help-gnu-emacs@gnu.org>
2005-08-08 21:32             ` David Kastrup

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).