* Explanation Request for the Function set-transient-map in subr.el
@ 2021-11-11 18:10 xenodasein--- via Users list for the GNU Emacs text editor
2021-11-12 14:41 ` Stefan Monnier via Users list for the GNU Emacs text editor
2021-11-14 12:08 ` FWD: " xenodasein--- via Users list for the GNU Emacs text editor
0 siblings, 2 replies; 14+ messages in thread
From: xenodasein--- via Users list for the GNU Emacs text editor @ 2021-11-11 18:10 UTC (permalink / raw)
To: help-gnu-emacs
What does this section do? In what situations this-command gets called using keys of the transient map but it is not equal to itself? What does mc mean?
((eq t keep-pred)
(let ((mc (lookup-key map (this-command-keys-vector))))
;; If the key is unbound `this-command` is
;; nil and so is `mc`.
(and mc (eq this-command mc))))
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Explanation Request for the Function set-transient-map in subr.el
2021-11-11 18:10 Explanation Request for the Function set-transient-map in subr.el xenodasein--- via Users list for the GNU Emacs text editor
@ 2021-11-12 14:41 ` Stefan Monnier via Users list for the GNU Emacs text editor
2021-11-14 12:08 ` FWD: " xenodasein--- via Users list for the GNU Emacs text editor
1 sibling, 0 replies; 14+ messages in thread
From: Stefan Monnier via Users list for the GNU Emacs text editor @ 2021-11-12 14:41 UTC (permalink / raw)
To: help-gnu-emacs
> What does this section do? In what situations this-command gets called using
> keys of the transient map but it is not equal to itself? What does mc mean?
>
> ((eq t keep-pred)
> (let ((mc (lookup-key map (this-command-keys-vector))))
> ;; If the key is unbound `this-command` is
> ;; nil and so is `mc`.
> (and mc (eq this-command mc))))
It checks whether the user used one of the bindings from the `map` as
opposed to one of the bindings from other active keymaps (e.g. the
global map).
Stefan
^ permalink raw reply [flat|nested] 14+ messages in thread
* FWD: Explanation Request for the Function set-transient-map in subr.el
2021-11-11 18:10 Explanation Request for the Function set-transient-map in subr.el xenodasein--- via Users list for the GNU Emacs text editor
2021-11-12 14:41 ` Stefan Monnier via Users list for the GNU Emacs text editor
@ 2021-11-14 12:08 ` xenodasein--- via Users list for the GNU Emacs text editor
2021-11-14 13:04 ` xenodasein--- via Users list for the GNU Emacs text editor
2021-11-28 18:12 ` xenodasein--- via Users list for the GNU Emacs text editor
1 sibling, 2 replies; 14+ messages in thread
From: xenodasein--- via Users list for the GNU Emacs text editor @ 2021-11-14 12:08 UTC (permalink / raw)
To: Monnier; +Cc: help-gnu-emacs
Date: Nov 11, 2021, 21:10
From: xenodasein@tutanota.de
To: help-gnu-emacs@gnu.org
Subject: Explanation Request for the Function set-transient-map in subr.el
> What does this section do? In what situations this-command gets called using keys of the transient map but it is not equal to itself? What does mc mean?
>
> ((eq t keep-pred)
> (let ((mc (lookup-key map (this-command-keys-vector))))
> ;; If the key is unbound `this-command` is
> ;; nil and so is `mc`.
> (and mc (eq this-command mc))))
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: FWD: Explanation Request for the Function set-transient-map in subr.el
2021-11-14 12:08 ` FWD: " xenodasein--- via Users list for the GNU Emacs text editor
@ 2021-11-14 13:04 ` xenodasein--- via Users list for the GNU Emacs text editor
2021-11-14 23:13 ` Stefan Monnier via Users list for the GNU Emacs text editor
2021-11-28 18:12 ` xenodasein--- via Users list for the GNU Emacs text editor
1 sibling, 1 reply; 14+ messages in thread
From: xenodasein--- via Users list for the GNU Emacs text editor @ 2021-11-14 13:04 UTC (permalink / raw)
To: Monnier; +Cc: Help Gnu Emacs
I'm sorry I just saw your answer on this post.
> It checks whether the user used one of the bindings from the `map` as> opposed to one of the bindings from other active keymaps (e.g. the> global map).
set-transient-map uses interal-push-map to modify overriding-terminal-local-map, so I assume you can call another command that uses set-transient map on top of a previous one and they stack? Should isearch also use that function to modify o-t-l-m? Because is currently uses setq nil on the map while exiting and nukes the whole thing...
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: FWD: Explanation Request for the Function set-transient-map in subr.el
2021-11-14 13:04 ` xenodasein--- via Users list for the GNU Emacs text editor
@ 2021-11-14 23:13 ` Stefan Monnier via Users list for the GNU Emacs text editor
0 siblings, 0 replies; 14+ messages in thread
From: Stefan Monnier via Users list for the GNU Emacs text editor @ 2021-11-14 23:13 UTC (permalink / raw)
To: help-gnu-emacs
>> It checks whether the user used one of the bindings from the `map` as
>> opposed to one of the bindings from other active keymaps (e.g. the> global
>> map).
> set-transient-map uses interal-push-map to modify
> overriding-terminal-local-map, so I assume you can call another command that
> uses set-transient-map on top of a previous one and they stack?
Indeed, tho it's rather uncommon.
> Should isearch also use that function to modify o-t-l-m? Because is
> currently uses setq nil on the map while exiting and nukes the whole
> thing...
You can try, but interaction between different `set-transient-map` can
be tricky. IIRC it works better is they nest properly, and since
Isearch tends to run for a long time it's probably fine to nest
a `set-transient-map` during Isearch, but nesting an Isearch during
another `set-transient-map` is likely to work rather poorly.
Stefan
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Explanation Request for the Function set-transient-map in subr.el
2021-11-14 12:08 ` FWD: " xenodasein--- via Users list for the GNU Emacs text editor
2021-11-14 13:04 ` xenodasein--- via Users list for the GNU Emacs text editor
@ 2021-11-28 18:12 ` xenodasein--- via Users list for the GNU Emacs text editor
2021-11-28 19:17 ` Michael Heerdegen
2021-11-28 19:45 ` Stefan Monnier
1 sibling, 2 replies; 14+ messages in thread
From: xenodasein--- via Users list for the GNU Emacs text editor @ 2021-11-28 18:12 UTC (permalink / raw)
To: Monnier; +Cc: Help Gnu Emacs
Thanks for your clarification on isearch issue.
>> ((eq t keep-pred)
>> (let ((mc (lookup-key map (this-command-keys-vector))))
>> ;; If the key is unbound `this-command` is
>> ;; nil and so is `mc`.
>> (and mc (eq this-command mc))))
>>
I'm still not clear why exactly this expression is used though: (eq this-command mc).
What are the possible values of mc here on the last line?
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Explanation Request for the Function set-transient-map in subr.el
2021-11-28 18:12 ` xenodasein--- via Users list for the GNU Emacs text editor
@ 2021-11-28 19:17 ` Michael Heerdegen
2021-11-28 19:45 ` Stefan Monnier
1 sibling, 0 replies; 14+ messages in thread
From: Michael Heerdegen @ 2021-11-28 19:17 UTC (permalink / raw)
To: help-gnu-emacs
xenodasein--- via Users list for the GNU Emacs text editor
<help-gnu-emacs@gnu.org> writes:
> Thanks for your clarification on isearch issue.
>
> >> ((eq t keep-pred)
> >> (let ((mc (lookup-key map (this-command-keys-vector))))
> >> ;; If the key is unbound `this-command` is
> >> ;; nil and so is `mc`.
> >> (and mc (eq this-command mc))))
> >>
>
> I'm still not clear why exactly this expression is used though: (eq
> this-command mc).
As Stefan and the comment tried to describe: this checks whether the
execution of current command happened using a key binding from the
transient MAP.
> What are the possible values of mc here on the last line?
This test is done to fullfill this part of the docstring:
| [...] if the optional argument KEEP-PRED is t, MAP stays active if a
| key from MAP is used
If this is the case, it's as you described, and the test succeeds. But
when the current command has not been invoked using a binding in the
transient map, mc is `nil' and the `eq'ality test fails as we want to
disable the transient map.
Michael.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Explanation Request for the Function set-transient-map in subr.el
2021-11-28 18:12 ` xenodasein--- via Users list for the GNU Emacs text editor
2021-11-28 19:17 ` Michael Heerdegen
@ 2021-11-28 19:45 ` Stefan Monnier
2021-11-28 20:48 ` xenodasein--- via Users list for the GNU Emacs text editor
1 sibling, 1 reply; 14+ messages in thread
From: Stefan Monnier @ 2021-11-28 19:45 UTC (permalink / raw)
To: xenodasein; +Cc: Help Gnu Emacs
xenodasein@tutanota.de [2021-11-28 19:12:56] wrote:
> Thanks for your clarification on isearch issue.
>>> ((eq t keep-pred)
>>> (let ((mc (lookup-key map (this-command-keys-vector))))
>>> ;; If the key is unbound `this-command` is
>>> ;; nil and so is `mc`.
>>> (and mc (eq this-command mc))))
>
> I'm still not clear why exactly this expression is used though: (eq this-command mc).
> What are the possible values of mc here on the last line?
This tests whether the user typed a key-sequence from `map` as opposed
to some other one.
E.g. when you use `text-scale-adjust`, you want to "stay" in the
transient map as long as the user uses one of the keys in the `map`
(basically, +, -, or 0) and if the user types some other key, we
immediately/automatically exit from this transient map.
Stefan
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Explanation Request for the Function set-transient-map in subr.el
2021-11-28 19:45 ` Stefan Monnier
@ 2021-11-28 20:48 ` xenodasein--- via Users list for the GNU Emacs text editor
2021-11-28 21:07 ` Stefan Monnier via Users list for the GNU Emacs text editor
2021-11-28 22:29 ` xenodasein--- via Users list for the GNU Emacs text editor
0 siblings, 2 replies; 14+ messages in thread
From: xenodasein--- via Users list for the GNU Emacs text editor @ 2021-11-28 20:48 UTC (permalink / raw)
To: Stefan Monnier, michael_heerdegen; +Cc: Help Gnu Emacs
> This tests whether the user typed a key-sequence from `map` as opposed
> to some other one.
>
> E.g. when you use `text-scale-adjust`, you want to "stay" in the
> transient map as long as the user uses one of the keys in the `map`
> (basically, +, -, or 0) and if the user types some other key, we
> immediately/automatically exit from this transient map.
>
> Stefan
> As Stefan and the comment tried to describe: this checks whether the
> execution of current command happened using a key binding from the
> transient MAP.
> What are the possible values of mc here on the last line?
> This test is done to fullfill this part of the docstring:
>| [...] if the optional argument KEEP-PRED is t, MAP stays active if a
>| key from MAP is used
> If this is the case, it's as you described, and the test succeeds. But
> when the current command has not been invoked using a binding in the
> transient map, mc is `nil' and the `eq'ality test fails as we want to
> disable the transient map.
But then, isn't that second expression redundant? Lookup key is already looking
in our transient map, if it succeeds mc will be non-nil and equal this-command,
if it does not, 'and' will return nil anyway?
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Explanation Request for the Function set-transient-map in subr.el
2021-11-28 20:48 ` xenodasein--- via Users list for the GNU Emacs text editor
@ 2021-11-28 21:07 ` Stefan Monnier via Users list for the GNU Emacs text editor
2021-11-28 21:24 ` Michael Heerdegen
2021-11-28 22:29 ` xenodasein--- via Users list for the GNU Emacs text editor
1 sibling, 1 reply; 14+ messages in thread
From: Stefan Monnier via Users list for the GNU Emacs text editor @ 2021-11-28 21:07 UTC (permalink / raw)
To: help-gnu-emacs
> But then, isn't that second expression redundant? Lookup key is already looking
> in our transient map, if it succeeds mc will be non-nil and equal this-command,
> if it does not, 'and' will return nil anyway?
It's somewhat redundant but tries to protect from cases where some other
keymap was used instead (presumably a keymap with higher precedence).
Stefan
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Explanation Request for the Function set-transient-map in subr.el
2021-11-28 21:07 ` Stefan Monnier via Users list for the GNU Emacs text editor
@ 2021-11-28 21:24 ` Michael Heerdegen
0 siblings, 0 replies; 14+ messages in thread
From: Michael Heerdegen @ 2021-11-28 21:24 UTC (permalink / raw)
To: help-gnu-emacs
Stefan Monnier via Users list for the GNU Emacs text editor
<help-gnu-emacs@gnu.org> writes:
> It's somewhat redundant but tries to protect from cases where some
> other keymap was used instead (presumably a keymap with higher
> precedence).
But since `this-command' is never bound to nil, the `mc` part in the
`and' is redundant...or not?
Michael.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Explanation Request for the Function set-transient-map in subr.el
2021-11-28 20:48 ` xenodasein--- via Users list for the GNU Emacs text editor
2021-11-28 21:07 ` Stefan Monnier via Users list for the GNU Emacs text editor
@ 2021-11-28 22:29 ` xenodasein--- via Users list for the GNU Emacs text editor
2021-11-28 22:44 ` xenodasein--- via Users list for the GNU Emacs text editor
1 sibling, 1 reply; 14+ messages in thread
From: xenodasein--- via Users list for the GNU Emacs text editor @ 2021-11-28 22:29 UTC (permalink / raw)
To: Help Gnu Emacs
Come to think of it, I imagine a scenario where mc is non-nil and this-command is not eq mc;
the command changes it's own binding. I wonder if this is an undesirable effect as it will dismiss
the transient map.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Explanation Request for the Function set-transient-map in subr.el
2021-11-28 22:29 ` xenodasein--- via Users list for the GNU Emacs text editor
@ 2021-11-28 22:44 ` xenodasein--- via Users list for the GNU Emacs text editor
2021-11-29 10:28 ` Michael Heerdegen
0 siblings, 1 reply; 14+ messages in thread
From: xenodasein--- via Users list for the GNU Emacs text editor @ 2021-11-28 22:44 UTC (permalink / raw)
To: Help Gnu Emacs
> Come to think of it, I imagine a scenario where mc is non-nil and this-command is not eq mc; the command changes it's own binding. I wonder if this is an undesirable effect as it will dismiss the transient map.
>
Sorry, I forgot this thing is being called in pre-command-hook; in that case what I said before does not completely apply. However, if what changes this-command's binding to some other command is yet another pre-command-hook, then we arrive at the same situation?
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: Explanation Request for the Function set-transient-map in subr.el
2021-11-28 22:44 ` xenodasein--- via Users list for the GNU Emacs text editor
@ 2021-11-29 10:28 ` Michael Heerdegen
0 siblings, 0 replies; 14+ messages in thread
From: Michael Heerdegen @ 2021-11-29 10:28 UTC (permalink / raw)
To: help-gnu-emacs
xenodasein--- via Users list for the GNU Emacs text editor
<help-gnu-emacs@gnu.org> writes:
> However, if what changes this-command's binding to some other command
> is yet another pre-command-hook, then we arrive at the same situation?
I think so... but this sounds like a bad thing to do, and the problem
you describe is probably one of the smaller issues this might cause.
Michael.
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2021-11-29 10:28 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-11-11 18:10 Explanation Request for the Function set-transient-map in subr.el xenodasein--- via Users list for the GNU Emacs text editor
2021-11-12 14:41 ` Stefan Monnier via Users list for the GNU Emacs text editor
2021-11-14 12:08 ` FWD: " xenodasein--- via Users list for the GNU Emacs text editor
2021-11-14 13:04 ` xenodasein--- via Users list for the GNU Emacs text editor
2021-11-14 23:13 ` Stefan Monnier via Users list for the GNU Emacs text editor
2021-11-28 18:12 ` xenodasein--- via Users list for the GNU Emacs text editor
2021-11-28 19:17 ` Michael Heerdegen
2021-11-28 19:45 ` Stefan Monnier
2021-11-28 20:48 ` xenodasein--- via Users list for the GNU Emacs text editor
2021-11-28 21:07 ` Stefan Monnier via Users list for the GNU Emacs text editor
2021-11-28 21:24 ` Michael Heerdegen
2021-11-28 22:29 ` xenodasein--- via Users list for the GNU Emacs text editor
2021-11-28 22:44 ` xenodasein--- via Users list for the GNU Emacs text editor
2021-11-29 10:28 ` Michael Heerdegen
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).