unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Stefan Monnier <monnier@iro.umontreal.ca>
To: Juri Linkov <juri@linkov.net>
Cc: emacs-devel@gnu.org
Subject: Re: master 6458e16: New mode outline-cycle-minor-mode with Orgmode-like TAB cycling on headings
Date: Thu, 04 Mar 2021 08:20:08 -0500	[thread overview]
Message-ID: <jwv7dmnm5e9.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: <87a6rj5jdl.fsf@mail.linkov.net> (Juri Linkov's message of "Thu,  04 Mar 2021 10:58:06 +0200")

>> Any mode where you've found bad interactions?
>
> Only in two modes so far:
>
> 1. in emacs-lisp-mode sometimes the inner part of a large expression
> gets to the beginning of the line, then trying to indent it with TAB
> hides the remaining part.  A workaround is to type SPC before indenting
> with TAB.
>
> 2. in diff-mode TAB on a diff header line used to navigate to the next hunk
> with 'diff-hunk-next', now it hides the next hunk.  A workaround is to
> move point to the next line before typing TAB to go to the next hunk.
>
> Are these a possible reasons that would prevent enabling cycling
> in outline-minor-mode by default?

Until we resolve them?  Sounds like it, yes.

[ As for how to resolve it (in terms of behavior rather than in terms
  of code), I think the cycling should only kick after trying
  indentation and the indentation function did not change the buffer.
  This is the kind of refinement in behavior which can't be obtained
  just by key bindings but is (barely) obtainable via `add-function`.  ]

>>> 3. (add-hook 'emacs-lisp-mode-hook 'outline-cycle-minor-mode)
>>>    without outline highlighting to not overwrite major mode faces
>> In which way did the highlighting get in the way?
> Actually, I discovered only now that outline faces with
> outline-minor-mode-highlight don't override major mode faces.

So at least it currently doesn't get in the way ;-)
More seriously: it's because you've put `append` in the LAXMATCH part
rather than the OVERRIDE part of the font-lock-keywords rule.

>> FWIW, I think the only really good way to solve this problem is to
>> replace `indent-for-tab-command` with a new command (call it
>> `tab-dwim`?)  which can be more finely configured by major and minor
>> modes.  E.g.  by making it call `tab-dwim-function` on which modes can
>> `add-function` at will (and at various depths so they can control
>> whether it should take precedence or not over the "TAB causes
>> indentation" or "TAB causes completion", ...).
>
> The problem is that too many commands bound to TAB need to adapt
> this special handling: indent-for-tab-command, diff-hunk-next,
> compilation-next-error, forward-button, etc. etc.

And I'm saying we should reduce this to a single command (`tab-dwim`)
and then instead of binding TAB modes should `add-function` to
`tab-dwim-function`.

>> The mechanism of priorities of keymaps coupled with "fallthrough"
>> (either via the "menu-item + filter" trick or via some explicitly
>> looking up the keymaps and calling the next command) isn't fine-grained
>> enough to deal with the amount of overloading that people want to use on
>> that poor TAB key.
> It seems only some very high-level map like overriding-terminal-local-map
> could handle this generally.

That'd only be necessary as a temporary measure until modes learn not to
bind TAB to their own command but to use `tab-dwim-functions` instead.


        Stefan




  reply	other threads:[~2021-03-04 13:20 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20210303191236.24697.93201@vcs0.savannah.gnu.org>
     [not found] ` <20210303191237.2B2D720E1B@vcs0.savannah.gnu.org>
2021-03-03 20:13   ` master 6458e16: New mode outline-cycle-minor-mode with Orgmode-like TAB cycling on headings Stefan Monnier
2021-03-03 20:38     ` Juri Linkov
2021-03-03 21:44       ` Stefan Monnier
2021-03-04  8:58         ` Juri Linkov
2021-03-04 13:20           ` Stefan Monnier [this message]
2021-03-04 18:12             ` Juri Linkov
2021-03-04 19:07               ` Stefan Monnier
2021-03-04 17:03         ` Daniele Nicolodi
2021-03-04 18:06           ` Stefan Monnier
2021-03-04 20:38             ` Juri Linkov
2021-03-04 18:17           ` Juri Linkov
2021-03-04 19:37             ` Daniele Nicolodi
2021-03-04 20:35               ` Juri Linkov
2021-03-04 20:44                 ` Daniele Nicolodi
2021-03-04 20:53                   ` Juri Linkov
2021-03-04 22:57                 ` Stefan Monnier
2021-03-04  0:31       ` Gabriel do Nascimento Ribeiro
2021-03-04  9:05         ` Juri Linkov
2021-03-07 18:54           ` Juri Linkov
2021-03-07 18:53     ` Juri Linkov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=jwv7dmnm5e9.fsf-monnier+emacs@gnu.org \
    --to=monnier@iro.umontreal.ca \
    --cc=emacs-devel@gnu.org \
    --cc=juri@linkov.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).