all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Vladimir Nikishkin <lockywolf@gmail.com>
To: help-gnu-emacs@gnu.org
Subject: A TAB operation reform question.
Date: Mon, 10 Oct 2022 23:03:00 +0800	[thread overview]
Message-ID: <87tu4blmf0.fsf@laptop.lockywolf.net> (raw)

Hello, Emacs users and developers

I would like to ask if a reform to the way TAB (C-i) works has been
considered? And if "yes", then how hard would it be to implement it?

The motivation is the following:

The way TAB works at the moment is peculiar.

There is this "indent-for-tab-command", which either indents, or inserts
a tab-character, or completes... unless "tab-always-indent" is set to
some special value, but there are mode-specific
modename-tab-always-indent, but they are also sometimes ignored. Also,
org-mode overrides it with "org-cycle", and perhaps, other modes do too.
Also, "tab" is considered to be "the place somehow close to completion
functions", so M-C-i==M-TAB is "ispell-complete-word", and a lot of
other packages try to make their completion somehow close to TAB.

This looks a bit like a mess, partly because TAB is almost universally
seen as a "dwim" entry point, but it is not officially so in Emacs.

Could there be an alternative protocol? Could TAB be make a DWIM entry
point "officially"?

In particular, could it be possible to make a "hard-switch" variable
"tab-always-inserts-tab", which would be the opposite of
"tab-always-indent", but simpler, and it would be possible to override
it in the major modes, thus making "c-tab-always-indent" unnecessary.

If tab-always-inserts-tab is set to nil, TAB (for example) would be
looking in some customizable list of functions, say
"tab-dwim-list-functions", and run each function until some does not
return non-nil. The default list could be something like
(indent-if-possible indent-comment-if-possible hs-fold-if-possible
complete-if-possible insert-tab).
Using TAB with a prefix-argument would always insert a TAB. (which would
be an exception to the rule "default prefix argument is 4", but I think
it would be understandable.).

This way, instead of rebinding tab to org-cycle, org-mode could prepend
"org-cycle" to this list, or make it the only member of the list, but
this would still allow the users to plug in custom dwim functions
further into the list, such as ispell-word (not completion), jump
between table cells, and such.

-- 
Your sincerely,
Vladimir Nikishkin (MiEr, lockywolf)
(Laptop)



             reply	other threads:[~2022-10-10 15:03 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-10 15:03 Vladimir Nikishkin [this message]
2022-10-10 15:49 ` A TAB operation reform question Christopher Dimech
2022-10-11  0:01 ` Emanuel Berg
2022-10-11  9:15   ` Thibaut Verron
2022-10-11 10:25     ` Emanuel Berg
2022-10-11  2:37 ` Fwd: " Vladimir Nikishkin
2022-10-11  6:15   ` Emanuel Berg
2022-10-11 12:54   ` Stefan Monnier
2022-10-11 12:59     ` Vladimir Nikishkin
2022-10-11 13:48       ` Stefan Monnier
2022-10-12  6:57         ` Ihor Radchenko

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

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

  git send-email \
    --in-reply-to=87tu4blmf0.fsf@laptop.lockywolf.net \
    --to=lockywolf@gmail.com \
    --cc=help-gnu-emacs@gnu.org \
    /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 external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.