Chris Angelico <ros...@gmail.com> writes: > On Mon, Oct 15, 2018 at 9:56 AM Alan Bawden <a...@csail.mit.edu> wrote: > > In my experience this is a very common way to assume that tabs will be > > interpreted. Virtually every source-code file I have encountered since the > > mid 1970s (for any programming language or operating system) has assumed > > either this convention or, slightly less often, its 4-column variant. > > > > It's surprising that you've never encountered it. > > I've seen the four-column variant, but never the two. Maybe I just > move in different circles. In any case, I wouldn't say that "two space > indents, collapsed to a tab after eight" is somehow a universal > convention any more than four-space with or without collapsing.
I think we're talking past each other somehow here. I described the common 8-column interpretation, and the less common 4-column interpretation. I did not mention, nor do I ever remember encountering in the wild, the 2-column variation. (I _have_ seen the 10-column variation used -- it was the standard on Multics.) The ANSI standard for ASCII only describes the tab character as follows: 7.21 HT (HORIZONTAL TABULATION). A format effector that causes the active position to advance to the next predetermined character position. This says nothing about where those "predetermined character positions" happen to be. They could be set at columns 5, 17, 23, 99 and 100, or they could be set every N columns for some N, or wherever you want, it's up to you. (Note that this is exactly the way mechanical typewriters used to work: "tab stops" were originally physical sliders that you would position manually, and then when you pressed the "tab" key, a spring would pull the carriage holding the paper to the left until it would be physically _stopped_ by the tab stop.) Given that the ANSI standard is silent on where the tab stops should be set for the HT character, we can only ask where they are set _in practice_, based on looking at he contents of files and the behavior of various pieces of software. For example, in the Linux termios(3) manual page describes one of the options you can set to control output to a terminal: TABDLY Horizontal tab delay mask. Values are TAB0, TAB1, TAB2, TAB3 (or XTABS). A value of TAB3, that is, XTABS, expands tabs to spaces (with tab stops every eight columns). So if tabs are going to be converted to spaces on output, your only choice is the every-8-columns interpretation. (Interestingly, setting TABDLY to TAB3 to convert tabs to spaces is part of POSIX, but the POSIX standard does _not_ appear to specify the positions of the tab stops!) The 8-column interpretation is also the default behavior in every text editor I have ever used (except, as I noted above, on Multics!). The 8-column interpretation also seems most common in source code files, although 4-column files do show up occasionally. So when you say: I've literally NEVER come across this as a convention. Not a single file that I have ever worked with has used it. Where is this convention from? I feel that there _must_ be some misunderstanding here. Maybe you misinterpreted Marko's description of how 8-column tabs are used to achieve 2-columns-per-level indentation. Or maybe I'm misunderstanding what you mean by "convention". Or maybe one of us just beamed in from parallel universe... -- Alan Bawden -- https://mail.python.org/mailman/listinfo/python-list