unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#47878: Mark outline commands as repeatable
@ 2021-04-18 19:00 Philip Kaludercic
  2021-04-19 20:45 ` Juri Linkov
  0 siblings, 1 reply; 8+ messages in thread
From: Philip Kaludercic @ 2021-04-18 19:00 UTC (permalink / raw)
  To: 47878

[-- Attachment #1: Type: text/plain, Size: 517 bytes --]


This is a suggested extension for repeat-mode. outline-mode, especially
outline-minor-mode commands are somewhat inconvenient to access ("C-x @
C-<something>" requires me to change modifiers mid-input twice). When
repeat-mode is enabled, this would allow me to access all outline keys
in just one key-press.

One might want to discuss if outline-mode-prefix-map should be directly
marked as the repeat-map or if a subset should be used. My approach
requires less effort but might be more confusing.

-- 
	Philip K.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0002-Mark-outline-mode-keys-as-repeatable.patch --]
[-- Type: text/x-diff, Size: 812 bytes --]

From 060f1a9facd4e30bd0bca5b405dc6e544dca3cf9 Mon Sep 17 00:00:00 2001
From: Philip K <philipk@posteo.net>
Date: Sun, 18 Apr 2021 20:34:18 +0200
Subject: [PATCH 2/4] Mark outline-mode keys as repeatable

---
 lisp/outline.el | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/lisp/outline.el b/lisp/outline.el
index bce9c6b9e4..f5fbfb5b98 100644
--- a/lisp/outline.el
+++ b/lisp/outline.el
@@ -1274,6 +1274,12 @@ outline-cycle-buffer
       (setq outline--cycle-buffer-state 'show-all)
       (message "Show all")))))
 
+;;; mark all commands bound in `outline-mode-prefix-map' as
+;;; repeatable.
+(dolist (command (mapcar #'cdr (cdr outline-mode-prefix-map)))
+  (when (commandp command)
+    (put command 'repeat-map 'outline-mode-prefix-map)))
+
 (provide 'outline)
 (provide 'noutline)
 
-- 
2.30.2


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

* bug#47878: Mark outline commands as repeatable
  2021-04-18 19:00 bug#47878: Mark outline commands as repeatable Philip Kaludercic
@ 2021-04-19 20:45 ` Juri Linkov
  2021-04-21 13:53   ` Philip Kaludercic
  0 siblings, 1 reply; 8+ messages in thread
From: Juri Linkov @ 2021-04-19 20:45 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: 47878

> This is a suggested extension for repeat-mode. outline-mode, especially
> outline-minor-mode commands are somewhat inconvenient to access ("C-x @
> C-<something>" requires me to change modifiers mid-input twice). When
> repeat-mode is enabled, this would allow me to access all outline keys
> in just one key-press.
>
> One might want to discuss if outline-mode-prefix-map should be directly
> marked as the repeat-map

Is it possible to get the name of the keymap whose keys were bound to
and invoked the current command?  If such function exists, then the
feature of marking the whole keymap as repeatable could be discussed.

> or if a subset should be used. My approach requires less effort
> but might be more confusing.

Indeed, a subset would be more preferable since it reduces the number
of keys that users might want to use outside of the repeating sequence,
e.g. to type C-l to recenter instead of outline-hide-leaves.

To solve this problem the whole set of keys could be split to groups
of repeatable keymaps:

1. navigation keymap:

C-c @ C-b       outline-backward-same-level
C-c @ C-f       outline-forward-same-level
C-c @ C-n       outline-next-visible-heading
C-c @ C-p       outline-previous-visible-heading
C-c @ C-u       outline-up-heading

This would be the most useful keymap to make navigation keys repeatable.

2. editing keymap:

C-c @ RET       outline-insert-heading
C-c @ C-v       outline-move-subtree-down
C-c @ C-^       outline-move-subtree-up
C-c @ @         outline-mark-subtree
C-c @ C-<       outline-promote
C-c @ C->       outline-demote

Only outline-promote/outline-demote and 
outline-move-subtree-down/outline-move-subtree-up
could be repeatable.

3. visibility keymap:

C-c @ C-a       outline-show-all
C-c @ C-e       outline-show-entry
C-c @ TAB       outline-show-children
C-c @ C-k       outline-show-branches
C-c @ C-s       outline-show-subtree
C-c @ C-c       outline-hide-entry
C-c @ C-d       outline-hide-subtree
C-c @ C-l       outline-hide-leaves
C-c @ C-o       outline-hide-other
C-c @ C-q       outline-hide-sublevels
C-c @ C-t       outline-hide-body

I doubt if these keys need to be repeatable.
We have new Org-like short keys TAB and S-TAB
that are more convenient to use in outline-mode
and in outline-minor-mode.





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

* bug#47878: Mark outline commands as repeatable
  2021-04-19 20:45 ` Juri Linkov
@ 2021-04-21 13:53   ` Philip Kaludercic
  2021-04-21 19:20     ` Juri Linkov
  0 siblings, 1 reply; 8+ messages in thread
From: Philip Kaludercic @ 2021-04-21 13:53 UTC (permalink / raw)
  To: Juri Linkov; +Cc: 47878

Juri Linkov <juri@linkov.net> writes:

>> This is a suggested extension for repeat-mode. outline-mode, especially
>> outline-minor-mode commands are somewhat inconvenient to access ("C-x @
>> C-<something>" requires me to change modifiers mid-input twice). When
>> repeat-mode is enabled, this would allow me to access all outline keys
>> in just one key-press.
>>
>> One might want to discuss if outline-mode-prefix-map should be directly
>> marked as the repeat-map
>
> Is it possible to get the name of the keymap whose keys were bound to
> and invoked the current command?  If such function exists, then the
> feature of marking the whole keymap as repeatable could be discussed.
>
>> or if a subset should be used. My approach requires less effort
>> but might be more confusing.
>
> Indeed, a subset would be more preferable since it reduces the number
> of keys that users might want to use outside of the repeating sequence,
> e.g. to type C-l to recenter instead of outline-hide-leaves.
>
> To solve this problem the whole set of keys could be split to groups
> of repeatable keymaps:
>
> 1. navigation keymap:
>
> C-c @ C-b       outline-backward-same-level
> C-c @ C-f       outline-forward-same-level
> C-c @ C-n       outline-next-visible-heading
> C-c @ C-p       outline-previous-visible-heading
> C-c @ C-u       outline-up-heading
>
> This would be the most useful keymap to make navigation keys repeatable.
>
> 2. editing keymap:
>
> C-c @ RET       outline-insert-heading
> C-c @ C-v       outline-move-subtree-down
> C-c @ C-^       outline-move-subtree-up
> C-c @ @         outline-mark-subtree
> C-c @ C-<       outline-promote
> C-c @ C->       outline-demote
>
> Only outline-promote/outline-demote and 
> outline-move-subtree-down/outline-move-subtree-up
> could be repeatable.

I am not sure if these two maps are necessarily detached. When I want to
move a few subtrees, it might be natural for me to assume that I can
also move between them without having to invoke C-x @ ... again.

> 3. visibility keymap:
>
> C-c @ C-a       outline-show-all
> C-c @ C-e       outline-show-entry
> C-c @ TAB       outline-show-children
> C-c @ C-k       outline-show-branches
> C-c @ C-s       outline-show-subtree
> C-c @ C-c       outline-hide-entry
> C-c @ C-d       outline-hide-subtree
> C-c @ C-l       outline-hide-leaves
> C-c @ C-o       outline-hide-other
> C-c @ C-q       outline-hide-sublevels
> C-c @ C-t       outline-hide-body
>
> I doubt if these keys need to be repeatable.
> We have new Org-like short keys TAB and S-TAB
> that are more convenient to use in outline-mode
> and in outline-minor-mode.

That makes sense, I just found out about outline-minor-mode-cycle and it
probably does make these keys superfluous for most uses. Removing these
keys seems to also open up a lot of key bindings that would otherwise
maybe annoy users if they are bound in transient maps (especially C-a,
C-e, C-k, C-s, C-c).

-- 
	Philip K.





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

* bug#47878: Mark outline commands as repeatable
  2021-04-21 13:53   ` Philip Kaludercic
@ 2021-04-21 19:20     ` Juri Linkov
  2021-04-21 20:50       ` Philip Kaludercic
  0 siblings, 1 reply; 8+ messages in thread
From: Juri Linkov @ 2021-04-21 19:20 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: 47878

>> 1. navigation keymap:
>>
>> C-c @ C-b       outline-backward-same-level
>> C-c @ C-f       outline-forward-same-level
>> C-c @ C-n       outline-next-visible-heading
>> C-c @ C-p       outline-previous-visible-heading
>> C-c @ C-u       outline-up-heading

Maybe also it would make sense to add single key equivalents,
so e.g. next visible headings could be visited with
C-c @ n n n n …

>> This would be the most useful keymap to make navigation keys repeatable.
>>
>> 2. editing keymap:
>>
>> C-c @ RET       outline-insert-heading
>> C-c @ C-v       outline-move-subtree-down
>> C-c @ C-^       outline-move-subtree-up
>> C-c @ @         outline-mark-subtree
>> C-c @ C-<       outline-promote
>> C-c @ C->       outline-demote
>>
>> Only outline-promote/outline-demote and 
>> outline-move-subtree-down/outline-move-subtree-up
>> could be repeatable.
>
> I am not sure if these two maps are necessarily detached. When I want to
> move a few subtrees, it might be natural for me to assume that I can
> also move between them without having to invoke C-x @ ... again.

Ok, let's put navigation and editing keys into one repeatable keymap
(maybe without outline-insert-heading and outline-mark-subtree).

>> 3. visibility keymap:
>>
>> C-c @ C-a       outline-show-all
>> C-c @ C-e       outline-show-entry
>> C-c @ TAB       outline-show-children
>> C-c @ C-k       outline-show-branches
>> C-c @ C-s       outline-show-subtree
>> C-c @ C-c       outline-hide-entry
>> C-c @ C-d       outline-hide-subtree
>> C-c @ C-l       outline-hide-leaves
>> C-c @ C-o       outline-hide-other
>> C-c @ C-q       outline-hide-sublevels
>> C-c @ C-t       outline-hide-body
>>
>> I doubt if these keys need to be repeatable.
>> We have new Org-like short keys TAB and S-TAB
>> that are more convenient to use in outline-mode
>> and in outline-minor-mode.
>
> That makes sense, I just found out about outline-minor-mode-cycle and it
> probably does make these keys superfluous for most uses. Removing these
> keys seems to also open up a lot of key bindings that would otherwise
> maybe annoy users if they are bound in transient maps (especially C-a,
> C-e, C-k, C-s, C-c).

Indeed, these are among the most frequently used keys.





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

* bug#47878: Mark outline commands as repeatable
  2021-04-21 19:20     ` Juri Linkov
@ 2021-04-21 20:50       ` Philip Kaludercic
  2021-04-21 21:15         ` Juri Linkov
  0 siblings, 1 reply; 8+ messages in thread
From: Philip Kaludercic @ 2021-04-21 20:50 UTC (permalink / raw)
  To: Juri Linkov; +Cc: 47878

[-- Attachment #1: Type: text/plain, Size: 1116 bytes --]

Juri Linkov <juri@linkov.net> writes:

>> I am not sure if these two maps are necessarily detached. When I want to
>> move a few subtrees, it might be natural for me to assume that I can
>> also move between them without having to invoke C-x @ ... again.
>
> Ok, let's put navigation and editing keys into one repeatable keymap
> (maybe without outline-insert-heading and outline-mark-subtree).
>
>> That makes sense, I just found out about outline-minor-mode-cycle and it
>> probably does make these keys superfluous for most uses. Removing these
>> keys seems to also open up a lot of key bindings that would otherwise
>> maybe annoy users if they are bound in transient maps (especially C-a,
>> C-e, C-k, C-s, C-c).
>
> Indeed, these are among the most frequently used keys.

I've implemented your suggestions. Letting the editing map inherit from
the navigation map doesn't seem like a good idea, as long as repeat-mode
overwrites the repeat-map, because that makes commands disappear all of
a sudden. The extra keys without control are convenient, but it does
write a lot into the mini-buffer.

-- 
	Philip K.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Make-outline-commands-repeatable.patch --]
[-- Type: text/x-diff, Size: 2472 bytes --]

From df388bbf31f7970fe38190503b20eb60e944e131 Mon Sep 17 00:00:00 2001
From: Philip K <philipk@posteo.net>
Date: Wed, 21 Apr 2021 22:17:27 +0200
Subject: [PATCH] Make outline commands repeatable

* outline.el (outline-navigation-repeat-map): Add new map
(outline-editing-repeat-map): Add new map
---
 lisp/outline.el | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/lisp/outline.el b/lisp/outline.el
index bce9c6b9e4..fa7c1a27d9 100644
--- a/lisp/outline.el
+++ b/lisp/outline.el
@@ -1274,6 +1274,45 @@ outline-cycle-buffer
       (setq outline--cycle-buffer-state 'show-all)
       (message "Show all")))))
 
+(defvar outline-navigation-repeat-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map (kbd "C-b") #'outline-backward-same-level)
+    (define-key map (kbd "b") #'outline-backward-same-level)
+    (define-key map (kbd "C-f") #'outline-forward-same-level)
+    (define-key map (kbd "f") #'outline-forward-same-level)
+    (define-key map (kbd "C-n") #'outline-next-visible-heading)
+    (define-key map (kbd "n") #'outline-next-visible-heading)
+    (define-key map (kbd "C-p") #'outline-previous-visible-heading)
+    (define-key map (kbd "p") #'outline-previous-visible-heading)
+    (define-key map (kbd "C-u") #'outline-up-heading)
+    (define-key map (kbd "u") #'outline-up-heading)
+    map))
+
+(dolist (command '(outline-backward-same-level
+                   outline-forward-same-level
+                   outline-next-visible-heading
+                   outline-previous-visible-heading
+                   outline-up-heading))
+  (put command 'repeat-map 'outline-navigation-repeat-map))
+
+(defvar outline-editing-repeat-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map (kbd "C-v") #'outline-move-subtree-down)
+    (define-key map (kbd "v") #'outline-move-subtree-down)
+    (define-key map (kbd "C-^") #'outline-move-subtree-up)
+    (define-key map (kbd "^") #'outline-move-subtree-up)
+    (define-key map (kbd "C->") #'outline-demote)
+    (define-key map (kbd ">") #'outline-demote)
+    (define-key map (kbd "C-<") #'outline-promote)
+    (define-key map (kbd "<") #'outline-promote)
+    map))
+
+(dolist (command '(outline-move-subtree-down
+                   outline-move-subtree-up
+                   outline-demote
+                   outline-promote))
+  (put command 'repeat-map 'outline-editing-repeat-map))
+
 (provide 'outline)
 (provide 'noutline)
 
-- 
2.30.2


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

* bug#47878: Mark outline commands as repeatable
  2021-04-21 20:50       ` Philip Kaludercic
@ 2021-04-21 21:15         ` Juri Linkov
  2021-05-03 10:30           ` Lars Ingebrigtsen
  0 siblings, 1 reply; 8+ messages in thread
From: Juri Linkov @ 2021-04-21 21:15 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: 47878

> I've implemented your suggestions. Letting the editing map inherit from
> the navigation map doesn't seem like a good idea, as long as repeat-mode
> overwrites the repeat-map, because that makes commands disappear all of
> a sudden.

Thanks, I've tested your patch, and everything works swimmingly,
so now pushed to master.  Please close this feature request
when you think everything is done here.

> The extra keys without control are convenient, but it does
> write a lot into the mini-buffer.

Displaying the keys is customizable now, so this is less problematic.





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

* bug#47878: Mark outline commands as repeatable
  2021-04-21 21:15         ` Juri Linkov
@ 2021-05-03 10:30           ` Lars Ingebrigtsen
  2021-05-03 16:44             ` Juri Linkov
  0 siblings, 1 reply; 8+ messages in thread
From: Lars Ingebrigtsen @ 2021-05-03 10:30 UTC (permalink / raw)
  To: Juri Linkov; +Cc: Philip Kaludercic, 47878

Juri Linkov <juri@linkov.net> writes:

>> I've implemented your suggestions. Letting the editing map inherit from
>> the navigation map doesn't seem like a good idea, as long as repeat-mode
>> overwrites the repeat-map, because that makes commands disappear all of
>> a sudden.
>
> Thanks, I've tested your patch, and everything works swimmingly,
> so now pushed to master.  Please close this feature request
> when you think everything is done here.

Skimming this thread, it's not clear whether there's anything more to do
here or not...

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





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

* bug#47878: Mark outline commands as repeatable
  2021-05-03 10:30           ` Lars Ingebrigtsen
@ 2021-05-03 16:44             ` Juri Linkov
  0 siblings, 0 replies; 8+ messages in thread
From: Juri Linkov @ 2021-05-03 16:44 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Philip Kaludercic, 47878

tags 47878 fixed
close 47878 28.0.50
thanks

>>> I've implemented your suggestions. Letting the editing map inherit from
>>> the navigation map doesn't seem like a good idea, as long as repeat-mode
>>> overwrites the repeat-map, because that makes commands disappear all of
>>> a sudden.
>>
>> Thanks, I've tested your patch, and everything works swimmingly,
>> so now pushed to master.  Please close this feature request
>> when you think everything is done here.
>
> Skimming this thread, it's not clear whether there's anything more to do
> here or not...

I believe this could be closed now.





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

end of thread, other threads:[~2021-05-03 16:44 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-18 19:00 bug#47878: Mark outline commands as repeatable Philip Kaludercic
2021-04-19 20:45 ` Juri Linkov
2021-04-21 13:53   ` Philip Kaludercic
2021-04-21 19:20     ` Juri Linkov
2021-04-21 20:50       ` Philip Kaludercic
2021-04-21 21:15         ` Juri Linkov
2021-05-03 10:30           ` Lars Ingebrigtsen
2021-05-03 16:44             ` Juri Linkov

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

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