emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* PROPOSAL: Bind `org-fold-hide-subtree' by default in Org Mode.
@ 2023-02-22  7:29 Karl Fogel
  2023-02-22 15:57 ` Max Nikulin
  0 siblings, 1 reply; 12+ messages in thread
From: Karl Fogel @ 2023-02-22  7:29 UTC (permalink / raw)
  To: Org Mode

Hey everyone, is there a reason we don't bind 
`org-fold-hide-subtree' by default in Org Mode?

I bind it to C-<tab> and now find this to be one of the most 
useful keybindings in Org Mode.  I suspect my workflow is pretty 
typical.

The use case is simple:

When reading material within a certain heading level, one often 
decides that one is done with that section (and therefore done 
with everything inside it -- including anything at deeper levels 
of nesting).  So one just folds the entire subtree around point 
and moves on, without changing the visibility of any of the 
sibling-or-higher subtrees around it (because often the next place 
one is going is one of them).

This is one of my most frequent actions in Org Mode.  In fact, I 
think it might be the most common Org Mode command I run.

It seems like an obvious thing have bound to a key, and yet Org 
Mode doesn't bind it by default.  Should we?

(I put it on "C-<tab>" because that's normally unbound in Org 
Mode, and because so many of the Org Mode cycling commands involve 
modified tab already.  But I don't feel strongly about the 
particular key, as long as it's fast to type; maybe there's a 
better key available.)

I looked for prior discussion about this in the archives and 
didn't find anything: 
https://list.orgmode.org/?q=org-fold-hide-subtree

Best regards,
-Karl


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

* Re: PROPOSAL: Bind `org-fold-hide-subtree' by default in Org Mode.
  2023-02-22  7:29 PROPOSAL: Bind `org-fold-hide-subtree' by default in Org Mode Karl Fogel
@ 2023-02-22 15:57 ` Max Nikulin
  2023-02-22 17:01   ` Karl Fogel
  0 siblings, 1 reply; 12+ messages in thread
From: Max Nikulin @ 2023-02-22 15:57 UTC (permalink / raw)
  To: emacs-orgmode

On 22/02/2023 14:29, Karl Fogel wrote:
> I put it on "C-<tab>" because that's normally unbound in Org Mode, and 
> because so many of the Org Mode cycling commands involve modified tab 
> already.

Perhaps C-<tab> is not the best choice:

9092c289b6bea38bb519e6c59a60237ae5af8f08
author Bastien Mon Jun 1 14:39:28 2020 +0200

Bind `org-force-cycle-archived' to C-c C-TAB

* lisp/org-keys.el (org-mode-map): Bind `org-force-cycle-archived'
to C-c C-TAB instead of C-TAB to avoid conflict with native Emacs
keybinding.

...

-(org-defkey org-mode-map (kbd "C-<tab>") #'org-force-cycle-archived)
+(org-defkey org-mode-map (kbd "C-c C-<tab>") #'org-force-cycle-archived)




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

* Re: PROPOSAL: Bind `org-fold-hide-subtree' by default in Org Mode.
  2023-02-22 15:57 ` Max Nikulin
@ 2023-02-22 17:01   ` Karl Fogel
  2023-02-23  2:35     ` Max Nikulin
  0 siblings, 1 reply; 12+ messages in thread
From: Karl Fogel @ 2023-02-22 17:01 UTC (permalink / raw)
  To: Max Nikulin; +Cc: emacs-orgmode

On 22 Feb 2023, Max Nikulin wrote:
>On 22/02/2023 14:29, Karl Fogel wrote:
>> I put it on "C-<tab>" because that's normally unbound in Org 
>> Mode,
>> and because so many of the Org Mode cycling commands involve
>> modified tab already.
>
>Perhaps C-<tab> is not the best choice:
>
>9092c289b6bea38bb519e6c59a60237ae5af8f08
>author Bastien Mon Jun 1 14:39:28 2020 +0200
>
>Bind `org-force-cycle-archived' to C-c C-TAB
>
>* lisp/org-keys.el (org-mode-map): Bind 
>`org-force-cycle-archived'
>to C-c C-TAB instead of C-TAB to avoid conflict with native Emacs
>keybinding.

Ah, clearly it is not a good choice -- thank you for noticing 
that.

I think there are two separate questions here:

1) Would it be useful to bind `org-fold-hide-subtree' by default?

2) If yes to (1), then is there a good key to bind it to?  (C-c 
C-something, I guess.)

If we agree on (1), then let's figure out the answer to (2).  I 
don't know if anyone else agrees about (1) yet, though.

By the way, the binding in my Org Mode hook looks like this:

  (when (not (keymap-lookup nil "C-<tab>"))
    (keymap-local-set "C-<tab>" 'org-fold-hide-subtree))

So FWIW C-<tab> is not bound in Org Mode buffers for me, in Emacs 
30.x (i.e., recent development builds).  However, I agree with 
Bastien's logic: C-<tab> is not in the reserved keymap space, so 
Emacs might bind it (and perhaps does bind it in other modes).

I don't know how widely-used `org-cycle-force-archived' is (that's 
the new name of that function).  I don't use it, personally, so if 
we decide against (1)+(2) above, then perhaps I'll just override 
that binding for myself instead.

Best regards,
-Karl


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

* Re: PROPOSAL: Bind `org-fold-hide-subtree' by default in Org Mode.
  2023-02-22 17:01   ` Karl Fogel
@ 2023-02-23  2:35     ` Max Nikulin
  2023-02-23  4:48       ` Samuel Wales
  2023-02-23 19:02       ` PROPOSAL: Bind `org-fold-hide-subtree' by default in Org Mode Karl Fogel
  0 siblings, 2 replies; 12+ messages in thread
From: Max Nikulin @ 2023-02-23  2:35 UTC (permalink / raw)
  To: emacs-orgmode

On 23/02/2023 00:01, Karl Fogel wrote:
> 
>   (when (not (keymap-lookup nil "C-<tab>"))
>     (keymap-local-set "C-<tab>" 'org-fold-hide-subtree))
> 
> So FWIW C-<tab> is not bound in Org Mode buffers for me, in Emacs 30.x 
> (i.e., recent development builds).

lisp/tab-bar.el:130:  (unless (global-key-binding [(control tab)])
lisp/tab-bar.el:131:    (global-set-key [(control tab)] #'tab-next))

Minibuffer file cache completion should not be relevant to Org buffers.



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

* Re: PROPOSAL: Bind `org-fold-hide-subtree' by default in Org Mode.
  2023-02-23  2:35     ` Max Nikulin
@ 2023-02-23  4:48       ` Samuel Wales
  2023-02-25  8:01         ` Key binding in help (was: Re: PROPOSAL: Bind `org-fold-hide-subtree' by default in Org Mode.) Max Nikulin
  2023-02-23 19:02       ` PROPOSAL: Bind `org-fold-hide-subtree' by default in Org Mode Karl Fogel
  1 sibling, 1 reply; 12+ messages in thread
From: Samuel Wales @ 2023-02-23  4:48 UTC (permalink / raw)
  To: Max Nikulin; +Cc: emacs-orgmode

huh i had put org-next-link there.  i wish define-key could have a
button in a help page like functions and vars do so you could go to
where you define it.  [there are probably 300 competing packages that
do exactly that.]

On 2/22/23, Max Nikulin <manikulin@gmail.com> wrote:
> On 23/02/2023 00:01, Karl Fogel wrote:
>>
>>   (when (not (keymap-lookup nil "C-<tab>"))
>>     (keymap-local-set "C-<tab>" 'org-fold-hide-subtree))
>>
>> So FWIW C-<tab> is not bound in Org Mode buffers for me, in Emacs 30.x
>> (i.e., recent development builds).
>
> lisp/tab-bar.el:130:  (unless (global-key-binding [(control tab)])
> lisp/tab-bar.el:131:    (global-set-key [(control tab)] #'tab-next))
>
> Minibuffer file cache completion should not be relevant to Org buffers.
>
>
>


-- 
The Kafka Pandemic

A blog about science, health, human rights, and misopathy:
https://thekafkapandemic.blogspot.com


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

* Re: PROPOSAL: Bind `org-fold-hide-subtree' by default in Org Mode.
  2023-02-23  2:35     ` Max Nikulin
  2023-02-23  4:48       ` Samuel Wales
@ 2023-02-23 19:02       ` Karl Fogel
  2023-02-25  0:13         ` Karl Fogel
  1 sibling, 1 reply; 12+ messages in thread
From: Karl Fogel @ 2023-02-23 19:02 UTC (permalink / raw)
  To: Max Nikulin; +Cc: emacs-orgmode

On 23 Feb 2023, Max Nikulin wrote:
>On 23/02/2023 00:01, Karl Fogel wrote:
>>   (when (not (keymap-lookup nil "C-<tab>"))
>>     (keymap-local-set "C-<tab>" 'org-fold-hide-subtree))
>> So FWIW C-<tab> is not bound in Org Mode buffers for me, in 
>> Emacs
>> 30.x (i.e., recent development builds).
>
>lisp/tab-bar.el:130:  (unless (global-key-binding [(control 
>tab)])
>lisp/tab-bar.el:131:    (global-set-key [(control tab)] 
>#'tab-next))
>
>Minibuffer file cache completion should not be relevant to Org 
>buffers.

Ah, I don't use tab-bar at all (at least not as far as I know), so 
I'm not 100% sure what the above is saying.

Are you saying that the only current default binding for C-<tab> 
in Emacs is that one in tab-bar.el, and therefore we should feel 
free to rebind it in Org Mode?  If so, we should still be 
cautious, since Emacs has policies for maintaining the keybinding 
space.  Generally, the space "C-c C-<LETTER>" is reserved for 
major modes, so ideally we should find something in there if we 
can -- although Org Mode has used up a lot of that space already 
:-), so I'm not sure what's left, unless we decide to swap out 
some existing binding in favor of this one.

(I realize this contradicts what I said in my inital post.  I had 
forgotten that C-<tab> was not part of the mode-reserved space.)

Best regards,
-Karl


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

* Re: PROPOSAL: Bind `org-fold-hide-subtree' by default in Org Mode.
  2023-02-23 19:02       ` PROPOSAL: Bind `org-fold-hide-subtree' by default in Org Mode Karl Fogel
@ 2023-02-25  0:13         ` Karl Fogel
  2023-02-25 11:26           ` Max Nikulin
  0 siblings, 1 reply; 12+ messages in thread
From: Karl Fogel @ 2023-02-25  0:13 UTC (permalink / raw)
  To: emacs-orgmode

Okay, today I did some research and found that every "C-c 
C-<letter>" binding is used in Org Mode except for "C-c C-g". 
While that one is technically reserved for the mode's use, I 
suspect the reason it's unbound is that people are accustomed to 
using C-g as a quit command (and they get that effect if they 
accidentally type C-c, because then they type C-g and it's just an 
undefined key -- i.e., it quits, which is what the user wanted).

Note that while "C-c C-h" does not appear to be bound, it actually 
is: it gets you a help buffer about the Org Mode keybindings 
(which then, ironically, does not list "C-c C-h" as one of the 
bindings).

(It's not clear to me whether Emacs's conventions consider "C-c 
C-i" to be a letter or whether they treat "C-i" as "TAB" and 
consider it special; based on the previous evidence in this 
thread, maybe the latter, so we shouldn't consider "C-c C-i" to be 
available.)

I think what this is telling me is that Org Mode keybinding real 
estate is quite valuable :-), and that unless there are other 
people who feel as strongly as I do that `org-fold-hide-subtree' 
is amazingly useful, we probably won't decide to bind it by 
default in Org Mode.  So I should just continue to bind it to a 
custom key myself and continue to live a glorious life all alone 
in my private keymap splendour.

Best regards,
-Karl

I wrote:
>On 23 Feb 2023, Max Nikulin wrote:
>>On 23/02/2023 00:01, Karl Fogel wrote:
>>>  =C2=A0(when (not (keymap-lookup nil "C-<tab>"))
>>>  =C2=A0=C2=A0 (keymap-local-set "C-<tab>" 
>>>  'org-fold-hide-subtree))
>>> So FWIW C-<tab> is not bound in Org Mode buffers for me, in=20
>>> Emacs
>>> 30.x (i.e., recent development builds).
>>
>>lisp/tab-bar.el:130:  (unless (global-key-binding [(control=20
>>tab)])
>>lisp/tab-bar.el:131:    (global-set-key [(control tab)]=20
>>#'tab-next))
>>
>>Minibuffer file cache completion should not be relevant to 
>>Org=20
>>buffers.
>
>Ah, I don't use tab-bar at all (at least not as far as I know), 
>so=20
>I'm not 100% sure what the above is saying.
>
>Are you saying that the only current default binding for 
>C-<tab>=20
>in Emacs is that one in tab-bar.el, and therefore we should 
>feel=20
>free to rebind it in Org Mode?  If so, we should still be=20
>cautious, since Emacs has policies for maintaining the 
>keybinding=20
>space.  Generally, the space "C-c C-<LETTER>" is reserved for=20
>major modes, so ideally we should find something in there if 
>we=20
>can -- although Org Mode has used up a lot of that space 
>already=20
>:-), so I'm not sure what's left, unless we decide to swap out=20
>some existing binding in favor of this one.
>
>(I realize this contradicts what I said in my inital post.  I 
>had=20
>forgotten that C-<tab> was not part of the mode-reserved space.)


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

* Key binding in help (was: Re: PROPOSAL: Bind `org-fold-hide-subtree' by default in Org Mode.)
  2023-02-23  4:48       ` Samuel Wales
@ 2023-02-25  8:01         ` Max Nikulin
  2023-02-25 23:32           ` Samuel Wales
  0 siblings, 1 reply; 12+ messages in thread
From: Max Nikulin @ 2023-02-25  8:01 UTC (permalink / raw)
  To: emacs-orgmode

On 23/02/2023 11:48, Samuel Wales wrote:
> huh i had put org-next-link there.  i wish define-key could have a
> button in a help page like functions and vars do so you could go to
> where you define it.  [there are probably 300 competing packages that
> do exactly that.]

C-h f org-next-link

displays at the top:

It is bound to C-c C-x C-n, <menu-bar> <Org> <Hyperlinks> <Next link>.

Is it the feature you are asking for? This one is available out of the box.

Unfortunately it is not trivial to discover binding from a file that is 
not loaded. Actually I found `tab-next' in the manual at first. Earlier 
attempts with "C-<tab>" and "C-TAB" failed due to "[(control tab)]" is 
used in tab-bar.el.



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

* Re: PROPOSAL: Bind `org-fold-hide-subtree' by default in Org Mode.
  2023-02-25  0:13         ` Karl Fogel
@ 2023-02-25 11:26           ` Max Nikulin
  2023-02-25 17:33             ` Karl Fogel
  0 siblings, 1 reply; 12+ messages in thread
From: Max Nikulin @ 2023-02-25 11:26 UTC (permalink / raw)
  To: emacs-orgmode

On 25/02/2023 07:13, Karl Fogel wrote:
> Okay, today I did some research and found that every "C-c C-<letter>" 
> binding is used in Org Mode except for "C-c C-g". While that one is 
> technically reserved for the mode's use

No, there is an explicit exception for C-g, see (info "(elisp) Key 
Binding Conventions") in "Tips and Conventions" appendix.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Key-Binding-Conventions.html

> (It's not clear to me whether Emacs's conventions consider "C-c C-i" to 
> be a letter or whether they treat "C-i" as "TAB" and consider it 
> special; based on the previous evidence in this thread, maybe the 
> latter, so we shouldn't consider "C-c C-i" to be available.)

It might be a problem to distinguish C-i and <tab> in text terminal. 
Issues with "C-c C-," raised on this list
- (info "(emacs) Named ASCII Chars")
 
https://www.gnu.org/software/emacs/manual/html_node/emacs/Named-ASCII-Chars.html
- (info "(elisp) Function Keys")
 
https://www.gnu.org/software/emacs/manual/html_node/elisp/Function-Keys.html
A similar issue exists with C-S-letter
- (info "(emacs) Modifier Keys")
 
https://www.gnu.org/software/emacs/manual/html_node/emacs/Modifier-Keys.html
- (info "(elisp) Other Char Bits")
 
https://www.gnu.org/software/emacs/manual/html_node/elisp/Other-Char-Bits.html

> I think what this is telling me is that Org Mode keybinding real estate 
> is quite valuable :-),

Even C-c C-x prefix is quite busy. Other modifiers might be a rescue: 
C-c M-something.

However perhaps M-x with fuzzy completion allowing typos (and ideally 
synonyms) might be a better solution.

>> Are you saying that the only current default binding for C-<tab>=20
>> in Emacs is that one in tab-bar.el, and therefore we should feel=20
>> free to rebind it in Org Mode?

No, [Ctrl+Tab] and [Ctrl+Shift+Tab] is widely used in other applications 
to switch to next/previous tabs. I would strongly prefer to keep it 
consistent across as much applications as possible. (There are corner 
cases like e.g. vim with multiple tabs running in a terminal application 
having several tabs as well. E.g. gnome terminal is able to pass 
[Ctrl+PgDn], a [Ctrl+Tab] alternative, while it has single tab, but 
intercepts the same shortcut when more terminal tabs are opened, so vim 
keys have to be used.)



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

* Re: PROPOSAL: Bind `org-fold-hide-subtree' by default in Org Mode.
  2023-02-25 11:26           ` Max Nikulin
@ 2023-02-25 17:33             ` Karl Fogel
  0 siblings, 0 replies; 12+ messages in thread
From: Karl Fogel @ 2023-02-25 17:33 UTC (permalink / raw)
  To: Max Nikulin; +Cc: emacs-orgmode

On 25 Feb 2023, Max Nikulin wrote:
>On 25/02/2023 07:13, Karl Fogel wrote:
>> Okay, today I did some research and found that every "C-c
>> C-<letter>" binding is used in Org Mode except for "C-c 
>> C-g". While
>> that one is technically reserved for the mode's use
>
>No, there is an explicit exception for C-g, see (info "(elisp) 
>Key
>Binding Conventions") in "Tips and Conventions" appendix.
>https://www.gnu.org/software/emacs/manual/html_node/elisp/Key-Binding-Conventions.html

Ah, thanks for pointing that out.

>Even C-c C-x prefix is quite busy. Other modifiers might be a 
>rescue:
>C-c M-something.
>
>However perhaps M-x with fuzzy completion allowing typos (and 
>ideally
>synonyms) might be a better solution.

Well, sure -- we get that for free.

I think we can consider this proposal over.  While I find 
`org-fold-hide-subtree' very useful, the Org Mode default keyspace 
is very busy already, and we don't hear anyone proposing to drop 
something else in favor of `org-fold-hide-subtree'.  Anyone can 
custom-bind it themselves, of course (which is what I'll continue 
doing).

>No, [Ctrl+Tab] and [Ctrl+Shift+Tab] is widely used in other
>applications to switch to next/previous tabs. I would strongly 
>prefer
>to keep it consistent across as much applications as 
>possible. (There
>are corner cases like e.g. vim with multiple tabs running in a
>terminal application having several tabs as well. E.g. gnome 
>terminal
>is able to pass [Ctrl+PgDn], a [Ctrl+Tab] alternative, while it 
>has
>single tab, but intercepts the same shortcut when more terminal 
>tabs
>are opened, so vim keys have to be used.)

Agreed.

Best regards,
-Karl


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

* Re: Key binding in help (was: Re: PROPOSAL: Bind `org-fold-hide-subtree' by default in Org Mode.)
  2023-02-25  8:01         ` Key binding in help (was: Re: PROPOSAL: Bind `org-fold-hide-subtree' by default in Org Mode.) Max Nikulin
@ 2023-02-25 23:32           ` Samuel Wales
  2023-03-08 15:27             ` Max Nikulin
  0 siblings, 1 reply; 12+ messages in thread
From: Samuel Wales @ 2023-02-25 23:32 UTC (permalink / raw)
  To: Max Nikulin; +Cc: emacs-orgmode

what i meant was that i have a binding, org-next-link, bound to c-tab.

i acccomplished this with (define-key org-mode-map (quote [C-tab])
(quote org-next-link)) [kbd would be better].

i did similar with org-link-minor-mode.  i was just offtopicing that
it would be useful to jump to those definitions.

i.e. like m-. on a function name, if that is set up to work, or c-h f
command tab ret to go to the fuction definition, but for keys.

On 2/25/23, Max Nikulin <manikulin@gmail.com> wrote:
> On 23/02/2023 11:48, Samuel Wales wrote:
>> huh i had put org-next-link there.  i wish define-key could have a
>> button in a help page like functions and vars do so you could go to
>> where you define it.  [there are probably 300 competing packages that
>> do exactly that.]
>
> C-h f org-next-link
>
> displays at the top:
>
> It is bound to C-c C-x C-n, <menu-bar> <Org> <Hyperlinks> <Next link>.
>
> Is it the feature you are asking for? This one is available out of the box.
>
> Unfortunately it is not trivial to discover binding from a file that is
> not loaded. Actually I found `tab-next' in the manual at first. Earlier
> attempts with "C-<tab>" and "C-TAB" failed due to "[(control tab)]" is
> used in tab-bar.el.
>
>
>


-- 
The Kafka Pandemic

A blog about science, health, human rights, and misopathy:
https://thekafkapandemic.blogspot.com


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

* Re: Key binding in help (was: Re: PROPOSAL: Bind `org-fold-hide-subtree' by default in Org Mode.)
  2023-02-25 23:32           ` Samuel Wales
@ 2023-03-08 15:27             ` Max Nikulin
  0 siblings, 0 replies; 12+ messages in thread
From: Max Nikulin @ 2023-03-08 15:27 UTC (permalink / raw)
  To: emacs-orgmode

On 26/02/2023 06:32, Samuel Wales wrote:
> i acccomplished this with (define-key org-mode-map (quote [C-tab])
> (quote org-next-link)) [kbd would be better].
...
> i.e. like m-. on a function name, if that is set up to work, or c-h f
> command tab ret to go to the fuction definition, but for keys.

I do not mind to have such feature as well. If you really want to get 
it, you should send a feature request to bug-gnu-emacs.

>> On 23/02/2023 11:48, Samuel Wales wrote:
>>> [there are probably 300 competing packages that
>>> do exactly that.]

I expect that it should be implemented in Emacs core since updated 
`define-key' should be available rather early during initialization. 
Looking into
https://www.gnu.org/software/emacs/manual/html_node/elisp/Format-of-Keymaps.html
https://www.gnu.org/software/emacs/manual/html_node/elisp/Key-Lookup.html
I do not see a ready to use slot for location of key definition. Another 
point is that keymap extension should not noticeably affect performance.




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

end of thread, other threads:[~2023-03-08 15:28 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-02-22  7:29 PROPOSAL: Bind `org-fold-hide-subtree' by default in Org Mode Karl Fogel
2023-02-22 15:57 ` Max Nikulin
2023-02-22 17:01   ` Karl Fogel
2023-02-23  2:35     ` Max Nikulin
2023-02-23  4:48       ` Samuel Wales
2023-02-25  8:01         ` Key binding in help (was: Re: PROPOSAL: Bind `org-fold-hide-subtree' by default in Org Mode.) Max Nikulin
2023-02-25 23:32           ` Samuel Wales
2023-03-08 15:27             ` Max Nikulin
2023-02-23 19:02       ` PROPOSAL: Bind `org-fold-hide-subtree' by default in Org Mode Karl Fogel
2023-02-25  0:13         ` Karl Fogel
2023-02-25 11:26           ` Max Nikulin
2023-02-25 17:33             ` Karl Fogel

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

	https://git.savannah.gnu.org/cgit/emacs/org-mode.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).