* Re: turning off all indentation
[not found] ` <81679436-5d3c-429c-bc39-7121f452d51b@d39g2000yqa.googlegroups.com>
@ 2010-05-12 19:11 ` Alan Mackenzie
2010-05-12 19:15 ` Lowell Gilbert
2010-05-12 19:59 ` Andreas Politz
2 siblings, 0 replies; 6+ messages in thread
From: Alan Mackenzie @ 2010-05-12 19:11 UTC (permalink / raw)
To: help-gnu-emacs
Hi, Lynn,
Lynn Newton <lynn.newton@gmail.com> wrote:
>> (add-hook 'after-change-major-mode-hook
>> ? ? ? ? ? (lambda nil
>> ? ? ? ? ? ? (local-set-key [return] nil)
>> ? ? ? ? ? ? (local-set-key [tab] nil)))
> With this, if I start up Emacs and start to edit a file myfile.c,
> I get this far:
> main()
> {
> int i
> Pretend there's a tab in front of int. When I add a semicolon to that
> line, it backindents it to column 2 (counting from 0), which is what I
> meant about the local modes taking over.
To configure CC Mode not to this, turn off CC Mode's "electric mode", as
described on pages "Minor Modes" and "Getting Started" in the CC Mode
manual. Or, if you can't be bothered with the manual, stick this in your
.emacs:
(setq-default c-electric-flag nil)
. By default, <CR> just inserts a new line; it doesn't put any
indentation on the new line.
> If I edit a plain text file, e.g., myfile.txt or without an extension,
> a tab indents me only four spaces. If a line is indented more spaces,
> typing a tab on the line below indents the next line to whatever column
> the previous line is indented to.
It's actually cleverer than that; it indents the new line to the
syntactically right place.
> Mind you, I think that's clever and wonderful, but what my friend wants
> is whenever he presses a TAB key, in whatever mode, and in whatever
> context, it skips to the next 8-character tab stop, regardless of the
> mode, the position of the line above, etc.
There's no way of doing this for EVERY mode, because the modes don't
invoke indentation in the same way. It can be done for _each_ mode in a
small finite set. To make <TAB> insert a tab in CC Mode, put this into
your .emacs:
(eval-after-load 'cc-mode
'(define-key c-mode-base-map ?\C-i 'tab-to-tab-stop))
(not tested).
> And whenever he hits RETURN, he wants the cursor to go to column zero
> of the next line, period, no ifs ands or buts.
This should be happening by default anyway. Might there be something in
his .emacs which binds <CR> to `newline-and-indent'?
> And I'm pretty sure that when he hits other keys, such as semicolons,
> curly brackets, and other syntactically significant characters within
> some given mode, he wants it *not* to change the alignment of the
> current line or any other line nearby.
See above for CC Mode.
> One would think that would be pretty easy to do, but the subtleties of
> various languages and accompanying modes are so thoroughly built in
> that it's hard to escape them. Most people consider that a Good Thing.
:-)
--
Alan Mackenzie (Nuremberg, Germany).
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: turning off all indentation
[not found] ` <81679436-5d3c-429c-bc39-7121f452d51b@d39g2000yqa.googlegroups.com>
2010-05-12 19:11 ` Alan Mackenzie
@ 2010-05-12 19:15 ` Lowell Gilbert
2010-05-12 19:59 ` Andreas Politz
2 siblings, 0 replies; 6+ messages in thread
From: Lowell Gilbert @ 2010-05-12 19:15 UTC (permalink / raw)
To: help-gnu-emacs
Lynn Newton <lynn.newton@gmail.com> writes:
>> (add-hook 'after-change-major-mode-hook
>> (lambda nil
>> (local-set-key [return] nil)
>> (local-set-key [tab] nil)))
>
> With this, if I start up Emacs and start to edit a file myfile.c,
> I get this far:
>
> main()
> {
> int i
>
> Pretend there's a tab in front of int. When I add a semicolon
> to that line, it backindents it to column 2 (counting from 0),
> which is what I meant about the local modes taking over.
>
> If I edit a plain text file, e.g., myfile.txt or without an
> extension, a tab indents me only four spaces. If a line
> is indented more spaces, typing a tab on the line below
> indents the next line to whatever column the previous
> line is indented to.
>
> Mind you, I think that's clever and wonderful, but what
> my friend wants is whenever he presses a TAB key,
> in whatever mode, and in whatever context, it skips
> to the next 8-character tab stop, regardless of the mode,
> the position of the line above, etc. And whenever he
> hits RETURN, he wants the cursor to go to column zero
> of the next line, period, no ifs ands or buts.
>
> And I'm pretty sure that when he hits other keys, such
> as semicolons, curly brackets, and other syntactically
> significant characters within some given mode, he
> wants it *not* to change the alignment of the current
> line or any other line nearby.
>
> One would think that would be pretty easy to do, but the
> subtleties of various languages and accompanying modes
> are so thoroughly built in that it's hard to escape them.
> Most people consider that a Good Thing.
Yes. To follow the approach, you'd need to extend it to all of the
other keys that should strictly self-insert. It might be easier to just
delete the local keymap. On the other hand, deleting the local keymap
in all keymaps would make some non-programming modes (like dired and
info) pretty much useless.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: turning off all indentation
[not found] ` <81679436-5d3c-429c-bc39-7121f452d51b@d39g2000yqa.googlegroups.com>
2010-05-12 19:11 ` Alan Mackenzie
2010-05-12 19:15 ` Lowell Gilbert
@ 2010-05-12 19:59 ` Andreas Politz
2 siblings, 0 replies; 6+ messages in thread
From: Andreas Politz @ 2010-05-12 19:59 UTC (permalink / raw)
To: help-gnu-emacs
Lynn Newton <lynn.newton@gmail.com> writes:
>> (add-hook 'after-change-major-mode-hook
>> (lambda nil
>> (local-set-key [return] nil)
>> (local-set-key [tab] nil)))
>
> With this, if I start up Emacs and start to edit a file myfile.c,
> I get this far:
>
> main()
> {
> int i
>
> Pretend there's a tab in front of int. When I add a semicolon
> to that line, it backindents it to column 2 (counting from 0),
> which is what I meant about the local modes taking over.
>
The author of cc-mode probably worked hours on this one.
> If I edit a plain text file, e.g., myfile.txt or without an
> extension, a tab indents me only four spaces. If a line
> is indented more spaces, typing a tab on the line below
> indents the next line to whatever column the previous
> line is indented to.
>
This is easily fixed by finding the desired command (obviously not
`indent-for-tab-command').
> Mind you, I think that's clever and wonderful, but what
> my friend wants is whenever he presses a TAB key,
> in whatever mode, and in whatever context, it skips
> to the next 8-character tab stop, regardless of the mode,
> the position of the line above, etc. And whenever he
> hits RETURN, he wants the cursor to go to column zero
> of the next line, period, no ifs ands or buts.
Is this any different than simply inserting a tab character ?
(global-set-key [tab] 'self-insert-command)
>
> And I'm pretty sure that when he hits other keys, such
> as semicolons, curly brackets, and other syntactically
> significant characters within some given mode, he
> wants it *not* to change the alignment of the current
> line or any other line nearby.
>
> One would think that would be pretty easy to do, but the
> subtleties of various languages and accompanying modes
> are so thoroughly built in that it's hard to escape them.
> Most people consider that a Good Thing.
Yes, most.
I don't think a foolproof, automatic solution is worth the time. It
would have to examine all bound commands and make a guess about it
being on the blacklist (touching indentation) or not.
Also, unconditionally unbinding tab and return in all mode-maps would
break e.g. help-mode, where return follows a link.
Ask your friend how many modes he really uses. 5-10 ? Not to much for
manually configuration.
Supplementary the idea of a hot-button comes to mind, which your friend
can push and tell Emacs that the last command sucked. At this point the
binding in the mode-map could be cleared, in order to make way for the
global one.
Or maybe installing an Emacs from a time where people, who wanted to
have full control over indentation, still constituted the majority.
-ap
^ permalink raw reply [flat|nested] 6+ messages in thread