From: "Pascal J. Bourguignon" <pjb@informatimago.com>
To: help-gnu-emacs@gnu.org
Subject: Re: post-command-hook to slow?
Date: Thu, 05 Jun 2014 19:29:33 +0200 [thread overview]
Message-ID: <8761kf5koy.fsf@kuiper.lan.informatimago.com> (raw)
In-Reply-To: mailman.3007.1401978250.1147.help-gnu-emacs@gnu.org
Thorsten Jolitz <tjolitz@gmail.com> 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__
http://www.informatimago.com/
"Le mercure monte ? C'est le moment d'acheter !"
next parent reply other threads:[~2014-06-05 17:29 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <mailman.3007.1401978250.1147.help-gnu-emacs@gnu.org>
2014-06-05 17:29 ` Pascal J. Bourguignon [this message]
2014-06-05 18:11 ` post-command-hook to slow? Thorsten Jolitz
[not found] ` <mailman.3038.1401991947.1147.help-gnu-emacs@gnu.org>
2014-06-05 20:19 ` Pascal J. Bourguignon
2014-06-05 21:09 ` Thorsten Jolitz
[not found] ` <mailman.3061.1402002590.1147.help-gnu-emacs@gnu.org>
2014-06-05 23:05 ` Pascal J. Bourguignon
2014-06-06 17:37 ` Thorsten Jolitz
[not found] ` <mailman.3167.1402076299.1147.help-gnu-emacs@gnu.org>
2014-06-06 18:47 ` Pascal J. Bourguignon
2014-06-05 14:23 Thorsten Jolitz
2014-06-06 2:27 ` Stefan Monnier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8761kf5koy.fsf@kuiper.lan.informatimago.com \
--to=pjb@informatimago.com \
--cc=help-gnu-emacs@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.