emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Suggestion to increase usefulness of TAB key / 'org-cycle' function


From: Philipp Kiefer
Subject: Re: Suggestion to increase usefulness of TAB key / 'org-cycle' function
Date: Fri, 28 Apr 2023 17:17:30 +0200

Thanks, Eric, I am aware of customization options.

My suggestion was aimed at improving the out-of-the-box experience of (new) Org users by extending the usefulness of 'org-cycle' by folding the subtree at point from anywhere inside it that is not itself a parent item rather than doing nothing at all in those positions. I've used two flavours of dedicated outlining software for many years and both have easy shortcuts to fold the current subtree from any position - it is a frequently used action.



Fraga, Eric <e.fraga@ucl.ac.uk> schrieb am Fr., 28. Apr. 2023, 11:45:
Hi Philipp,

On Friday, 28 Apr 2023 at 10:49, Philipp Kiefer wrote:
> Well, it could simplify things a good deal further if, on issuing the
> command when point is *not* on a parent heading, (non-global)
> org-cycle would instead fold the subtree that point is in, i. e. do
> 'outline-up-heading' and 'hide-subtree' on the parent heading.

You could always bind TAB to your own command that does this.  As an
illustration, I have TAB bound to my own function that invokes
completion instead unless I'm on an org heading!

--8<---------------cut here---------------start------------->8---
(defun esf/complete-or-indent ()
  (interactive)
  (cond
   ;; ((eq 'message-mode major-mode)
   ;;  (message-tab))
   ((and (eq 'message-mode major-mode)
         (message-point-in-header-p)
         (looking-back "^\\(To\\|B?[Cc]c\\): *.*" (line-beginning-position)))
    (if (looking-back " ")
        (progn
          (message "try inserting alias abbrev")
          (insert (symbol-value (intern-soft (completing-read "Expand alias: " mail-abbrevs nil t) mail-abbrevs))))
      (progn
        (message "try eudc")
        (eudc-expand-try-all))))
   ((eq 'message-mode major-mode)
    (completion-at-point))
   ((org-table-p)
    (org-cycle))
   ((looking-back "[ \t\n]")
    (if (eq 'org-mode major-mode)
        (if (looking-back "^\\(\\*+ \\| *|\\)[^\\n]*")     ;a heading or table line
            (org-cycle)
          (indent-for-tab-command)
          )
      (indent-for-tab-command))
    )
   (t
    ;;(consult-company)
    (completion-at-point)
    )))
--8<---------------cut here---------------end--------------->8---

You could use a similar (and much simpler) approach to get what you
want.

HTH,
eric

--
: Eric S Fraga, with org release_9.6.4-335-ge065b5 in Emacs 30.0.50

reply via email to

[Prev in Thread] Current Thread [Next in Thread]