unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* Use of where-is-internal
@ 2020-01-25  6:18 Paul W. Rankin
  2020-01-25 16:02 ` Stefan Monnier
  0 siblings, 1 reply; 3+ messages in thread
From: Paul W. Rankin @ 2020-01-25  6:18 UTC (permalink / raw)
  To: help-gnu-emacs

Hello Emacs major modes,

I'm considering of using where-is-internal in a program ~~outside of the
help library~~. I've used the following in my init for a while to cycle
windows and so far the world has persisted unscathed:

    (defun other-window-and-beyond (count &optional all-frames)
      "Select another window in cyclic ordering of windows.
    Successive pressing `o' calls `other-window'."
      (interactive "p")
      (let ((key-vector (where-is-internal this-command
                                           overriding-local-map t)))
        (set-transient-map
         (let ((map (make-sparse-keymap)))
           (define-key map (vector (aref key-vector (1- (length key-vector))))
             'other-window)
           map)
         t)
        (other-window count all-frames)))

As the docstring implies, this function allows me to type C-x o o o o to
keep on truckin through all frame windows (and only trips me up with I
want to then immediately type "o"), with the idea being to allow the
command to work with any key binding rather than hardcoding anything.

I maintain a minor mode called olivetti that also uses a transient key
map to allow changing a buffer-local variable with C-c { { { ... The key
binding is currently hardcoded within the transient key map but I'd like
to allow user customisation.

So, should I throw caution to the wind and reimplement the transient key
map in olivetti using where-is-internal, or is there a better way?

Thanks,

--
Paul W. Rankin
https://www.paulwrankin.com



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Use of where-is-internal
  2020-01-25  6:18 Use of where-is-internal Paul W. Rankin
@ 2020-01-25 16:02 ` Stefan Monnier
  2020-02-01 14:58   ` Paul W. Rankin
  0 siblings, 1 reply; 3+ messages in thread
From: Stefan Monnier @ 2020-01-25 16:02 UTC (permalink / raw)
  To: help-gnu-emacs

>     (defun other-window-and-beyond (count &optional all-frames)
>       "Select another window in cyclic ordering of windows.
>     Successive pressing `o' calls `other-window'."
>       (interactive "p")
>       (let ((key-vector (where-is-internal this-command
>                                            overriding-local-map t)))

I think you're looking for `this-single-command-keys`.
The difference is not just the avoidance of "-internal" but also the
behavior in case the command is bound to several keys, since you
probably want to support repeating the same last key that was used to
run the command rather than repeating "the last key of its first
keybinding".


        Stefan




^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Use of where-is-internal
  2020-01-25 16:02 ` Stefan Monnier
@ 2020-02-01 14:58   ` Paul W. Rankin
  0 siblings, 0 replies; 3+ messages in thread
From: Paul W. Rankin @ 2020-02-01 14:58 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: help-gnu-emacs


> On 26 Jan 2020, at 2:02 am, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
> 
>>    (defun other-window-and-beyond (count &optional all-frames)
>>      "Select another window in cyclic ordering of windows.
>>    Successive pressing `o' calls `other-window'."
>>      (interactive "p")
>>      (let ((key-vector (where-is-internal this-command
>>                                           overriding-local-map t)))
> 
> I think you're looking for `this-single-command-keys`.
> The difference is not just the avoidance of "-internal" but also the
> behavior in case the command is bound to several keys, since you
> probably want to support repeating the same last key that was used to
> run the command rather than repeating "the last key of its first
> keybinding".

Thanks for both replies! I didn't receive this one as I'm not subscribed, but should have checked the archives first.


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-02-01 14:58 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-01-25  6:18 Use of where-is-internal Paul W. Rankin
2020-01-25 16:02 ` Stefan Monnier
2020-02-01 14:58   ` Paul W. Rankin

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).