[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#11983: 24.1; Electric-command-loop broken?
From: |
Stefan Monnier |
Subject: |
bug#11983: 24.1; Electric-command-loop broken? |
Date: |
Fri, 20 Jul 2012 08:09:41 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.1.50 (gnu/linux) |
>> > (unwind-protect
>> > (catch 'return-tag
>> > (Electric-command-loop 'return-tag))
>> > (cleanup-form))
>> But in which way is this different from `recursive-edit'?
> I do not know much about recursive-edit. How would you use it as a
> replacement for the above to be sure that after leaving
> recursive-edit cleanup-form is always executed?
(unwind-protect
(recursive-edit)
(cleanup-form))
>> It seems that it requires a fair bit of extra surrounding code to
>> use it right. E.g. electric-buffer-list is buggy because it lacks
>> this extra code: after popping up the electric-buffer-list, you
>> can select some other window and work there, but the behavior is
>> then all messed up.
> The amount of protection provided by an Electric-command-loop
> depends on the surrounding code (save-excursion,
> save-window-excursion, etc.)
The issue is not that the buffer is not reset when you return from
electric-buffer-list, but that during electric-buffer-list if you select
some other window you do not exit electric-buffer-list and the keys end
up behaving weird (e.g. typing "c" in a normal buffer will insert "c"
and then move to EOB or something like that). Once you exit from
electric-buffer-list, things are back to normal.
> I believe that the intended usage pattern of Electric-command-loop
> does not include too wild things such as selecting other windows. Or
> phrased differently: of course, you can always do whatever you
> like. But only cleanup-form is definitely evaluated at the end.
What I'm saying is that it's tricky to use Electric-command-loop without
introducing bugs because Electric-command-loop presumes that all
operations will stay within the current buffer, but it does not (help
to) try to enforce it. So it's a poor API.
Stefan