unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* 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).