[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Info-mode patch
From: |
Arthur Miller |
Subject: |
Re: Info-mode patch |
Date: |
Tue, 04 Jul 2023 00:24:39 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
Juri Linkov <juri@linkov.net> writes:
>>>> Is there some way to tell interactive where all propts will be placed,
>>>> without
>>>> parsing interactive form and checking strings for interactive codes or
>>>> something
>>>> similar awkward?
>>>
>>> Yes, there is such way by using the variable
>>> 'minibuffer-follows-selected-frame'.
>>
>> So at least in theory, by let-bidinging it to nil, it should keep prompt
>> on the original frame. I did just quick naive test, and ended up in debugger:
>>
>> (defun info-menu-wrapper ()
>> (interactive)
>> (let ((minibuffer-follows-selected-frame nil))
>> (with-selected-window (info-window)
>> (call-interactively #'Info-menu))))
>>
>> but perhaps there are more tweacks to it which I am not familiar with, so
>> I'll
>> leave it at that.
>
> What happens when you customize minibuffer-follows-selected-frame
> to a third possible value that is not nil and not t. From docs:
>
> Any other value means the minibuffer will move onto another frame, but
> only when the user starts using a minibuffer there.
The very same. I used a symbol 'something as the third value.
> I guess this variable is not intended to do what you expected.
What should I have expected? :)
> But AFAIU, what you need is only to use with-current-buffer
> wrapped around the interactive spec? There is no need
> to select another window/frame while reading from the minibuffer?
As said earlier, that highly depends on the work done in the interactive form;
but for the majority of commands, and those in info.el specifically, it should
be enough I believe. This works:
(defun info-menu-wrapper ()
(interactive)
(let ((window (info-window)))
(with-current-buffer (window-buffer window)
(let ((args (eval (cadr (interactive-form 'Info-menu)))))
(with-selected-window window
(apply #'Info-menu args))))))
I would still take it with a grain of salt that it will do in all cases, you
should test each and every, but in majority cases it should work I think.
>> About wrapping; I agree that it is messy to go through each and every
>> command as
>> I did to modify them, so for old existing commands, it is definitely easier
>> to
>> do the wrapping, if possible. I just hope we get a better way for future
>> command
>> writing.
>
> I don't like creating wrapper commands too, but it seems there is no
> better way, at least no one proposed anything better.
You were against wrapping everything into with-selected-window, now you
everything wrapped into another function :).
The positive about wrappers is they will work with old commands, and if you turn
that into a:core package in Elpa, then even users of older Emacsens can use
it. So I am definitely not against wrappers per se; nor do I believe we should
rewrite each and every user command.
But for writing new commands, I do suggest to implement better macro; because
all this can abstracted away, so we don't double all the commands in the future.
- easy-menu-define keys for key-valid-p (was: Info-mode patch), (continued)
- Re: Info-mode patch, Arthur Miller, 2023/07/03
- Re: Info-mode patch, Andreas Schwab, 2023/07/04
- Re: Info-mode patch, Arthur Miller, 2023/07/04
- Re: Info-mode patch, Eli Zaretskii, 2023/07/03
- Re: Info-mode patch, Stefan Monnier, 2023/07/04
- Re: Info-mode patch, Eli Zaretskii, 2023/07/08
Re: Info-mode patch, Arthur Miller, 2023/07/02
- Re: Info-mode patch, Juri Linkov, 2023/07/03
- Re: Info-mode patch,
Arthur Miller <=
- Re: Info-mode patch, Juri Linkov, 2023/07/04
- Re: Info-mode patch, Arthur Miller, 2023/07/04
- Re: Info-mode patch, Juri Linkov, 2023/07/04
- Re: Info-mode patch, Arthur Miller, 2023/07/04
- Re: Info-mode patch, Juri Linkov, 2023/07/05
- Re: Info-mode patch, Arthur Miller, 2023/07/05