I think the problem in your lobste.rs post is that you have (bind-key* "Tab" ...) instead of (bind-key* (kbd "tab") ...). I don't think your define-key solution works because I think it can be rebound by major or minor modes. I think bind-key.el is required by use-package so if you have use-package you should have it. If you don't have use-package you should install it.
I'm not at a computer with an emacs installation so I can't try it out myself. I would try binding to a regular key (e.g. "q") while debugging to try to reduce the possible problems.
I think you'll find that remapping tab everywhere like that is going to break a lot of things though (navigating fields/links, expanding sections, etc). You might want to just remap the key by explicitly listing the modes you care about.
The #emacs channel on libera (previously freenode) used to be amazing but since IRC waned it's become less good but if you're lucky and during busy times you might still find someone there that can give you a better solution.
Thanks a lot! Yeah, I'm already realizing I need to be careful what I wish for, because I can't tab complete anymore after C-x C-f. I think I'm going to follow the process outlined by CyberShadow: https://news.ycombinator.com/item?id=29726398#29728696. I'm not hung up on getting this perfectly automated, just want to not have to think about this the next time I run into it.
Someone above pointed out that you can remap it for prog-mode which (I think) programming modes derive from so (again, I think) if you remapped it there you would cover the programming modes. Then you could add the few other modes that aren't covered. You would define a list of the modes and loop over them in your init.el to remap them.
The other thing you might want to try is to remap the function indent-for-tab-command to insert-tab.
No! I've somehow never encountered `tab-always-indent`, according to my detailed past records. It actually looks like `(setq tab-always-indent nil)` should get me pretty close, according to the documentation.
"If the value is t (the default), the command normally just indents the current line. If the value is nil, the command indents the current line only if point is at the left margin or in the line’s indentation; otherwise, it inserts a tab character." (https://www.gnu.org/software/emacs/manual/html_node/elisp/Mo...)
Unfortunately this doesn't immediately work as described (Mac OS, GNU Emacs 27.2). When the buffer x.c looks like this (^ showing point):
int main(void) {
aaa
^
Pressing Tab now does nothing. I wonder if I need to do something to add this to c-major-mode. I also don't yet understand `setq-default`.
We've hit comment depth limit, but check out M-i (tab-to-tab-stop), other people seem to declare that that is the solution for them (and they rebind it to tab per mode).
Ah, yes, this ([c-]tab-always-indent) seems to work. On both my machines. I'm slightly leery of declaring victory, but this might do the trick for me. I think the major reason I care about this so much (I don't have any unique-snowflake indentation approach) is being able to indent prose inside comments. This approach would buy me that. Let me run with it and see how it goes. Thanks again.
Update: now nothing is working. I think maybe it's because I switched machines from Linux to Mac. Nothing is working on Mac OS running GNU Emacs 27.2 installed using `brew install`. I'll circle back in a few hours and post a more careful update describing what I see on each machine (if that matters) with each of the solutions.
I'm not at a computer with an emacs installation so I can't try it out myself. I would try binding to a regular key (e.g. "q") while debugging to try to reduce the possible problems.
I think you'll find that remapping tab everywhere like that is going to break a lot of things though (navigating fields/links, expanding sections, etc). You might want to just remap the key by explicitly listing the modes you care about.
The #emacs channel on libera (previously freenode) used to be amazing but since IRC waned it's become less good but if you're lucky and during busy times you might still find someone there that can give you a better solution.