[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: post-command-hook to slow?

From: Pascal J. Bourguignon
Subject: Re: post-command-hook to slow?
Date: Thu, 05 Jun 2014 19:29:33 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux)

Thorsten Jolitz <address@hidden> writes:

> Hi List, 
> I call a command to be executed in a temporary buffer, and that command
> runs a post-command-hook. Here is some pseudocode:
> ,----------------------------------
> | open-temp-buffer
> | set-buffer-mode
> | call-interactively cmd
> | copy-content-and-exit-temp-buffer
> `----------------------------------
> Unfortunately the post-command-hook of cmd is executed only after the
> temp buffer is already exited (i.e. in the original buffer in a
> different/wrong major-mode with the needed markers lost).
> Is that to be expected? Will `copy-content-and-exit-temp-buffer' be
> executed before the post-command-hook of cmd has a chance to be
> executed?

post-command-hook is called after each command.  Ie. after each
character you type!  So indeed, it should be very fast.  Perhaps you
could keep your temp buffer around (you can hide such a buffer by
prefixing its name with a space).

>From a quick scan, I don't see anything in call-interactively that would
make it not execute the command synchronously.
Furthermore, post-command-hooks are not called by call-interactively.

If cmd is this-command, then what you are doing, is to call
this-command a second time, after it has already been called.  This
call-interactively works with your temp buffer, but the original command
call was done before post-command-hooks were called of course.

If what you want to do is to wrap some commands to make them work in a
different buffer, then you cannot use post-command-hook to do that, and
just both pre-command-hook and post-command-hook wouldn't be very safe
(if anything breaks, you could end with a dangling state).  

In that case, I would advise you to use an around advice on the command
instead.  cf. defadvice.

Some commands may rely on the selected window in a hidden way, so if the
commands you call in the post-command-hook use a window, wrapping them in
a (with-selected-window window (call-interactively …)) could help.

Do you use with-temp-buffer?  You probably should, instead of creating
the buffer and later killing it.

__Pascal Bourguignon__
"Le mercure monte ?  C'est le moment d'acheter !"

reply via email to

[Prev in Thread] Current Thread [Next in Thread]