
The TTY demystified (2008) - r4um
http://www.linusakesson.net/programming/tty/
======
leaveyou
I have read this with interest but the obsessive compulsive developer inside
me keeps bothering me with questions like "isn't it worrying/depressing that
today's best OS & applications are stuck with interfaces modeled with messy,
leaky or no abstraction at all after devices used more than 100 years ago with
no opportunity for radical improvement in sight ?". Sometimes I have the
feeling that in software we are building skyscrapers on foundations of mud
(usually after I read C code).

~~~
angdis
OK, but you have to admit it does the job and few (none?) people complain
about the limitations of VT100 terminal emulation.

If we could start from scratch what would a contemporary TTY be like? Would it
be better in terms of functionality, multi-platform capability? What would be
the advantage?

~~~
philh
I don't know if it's fair to describe this as a limitation of VT100 (and I
haven't RTFA yet), but some things that AFAIK terminals don't get right yet:

\- Screen's scrollback buffer and my terminal's scrollback buffer don't know
about each other. If I swap screen tabs frequently, my terminal scrollbar
becomes useless. OTOH, if I use a tabbed terminal, I'm guessing it would use a
different VT100 in each tab and that wouldn't work very well with screen.

\- I'd like to be able to drop a marker in my bash prompt, and easily scroll
back to the top of the previous command.

\- For that matter, I'd like to be able to selectively hide the output of
previous commands, and when I want to look at it again I'd like to be able to
view it in less instead of just unfolding it in-place.

~~~
joosters
The scrollback buffer problem is annoying, but I just don't think there's a
good solution to it.

screen (and tmux) basically store their own scrollback. The advantage here is
that you can then page through the line history on another terminal or even
another computer. The downside is that that your terminal
(xterm/iterm/whatever) has to decide what to show when you page up. It has no
way to read screen's internal scrollback, so it can either show you old non-
screen lines, or hide the scrollback entirely. Switching into/out of screen
will just add to the confusion.

(I think some terminals will hide the scrollback history when they spot the
TTY in curses-style mode, and only bring it back when that process quits?)

One other annoyance for me is the behaviour of scrollback with a command like
'less' or 'more'. If you are paging down through a file, then scroll back up,
some terminals will show you earlier lines of the file you are viewing, while
others show you 'pre-less' scrollback.

~~~
philh
There may not be a good solution currently, but I don't believe that no good
solution is possible even in theory. Which makes me wonder if the VT100
paradigm is holding us back.

Like, if a VT100 understood the concept of tabs natively, it seems like this
wouldn't be a problem. Screen could just map its windows onto VT100 tabs, and
the terminal would know what to do with that.

I don't know if adding tabs to VT100 emulators would be remotely feasible, or
a good idea if it was, but I expect there's _something_ in this space that
would be an improvement on what we have.

~~~
peteri
Eh. A real VT100 should understand tabs, you can set them with 'Esc H' oddly
the DEC manuals don't say what the effect of resetting tabs would be (I'd
guess it defaults to multiples of 8 characters).

~~~
yuubi
Not \x08 tabs, but tabs like recent firefox and chrome use (as if you had
several terminal windows with separate ptys and screen contents, but all in
one window-manager window).

------
JabavuAdams
Fantastic!

This comes at a good time for me -- I'm getting interested in TTY emulation.

Currently on a learn-Emacs kick. Every couple of years I start using it then
back off due to general cruftiness. However, it is undeniably featurefull, and
the idea of just learning one last editor rather than a bunch of half-baked
ones is appealing.

What about embedding Emacs, through a TTY interface in whatever new fancy cool
TM editor experiment you want?

~~~
joosters
emacs is almost exactly the other way round - it provides its own TTY
interface so you can run a shell or UNIX command inside its own buffers!

Good luck with the emacs learning. I've been a user for years and have barely
scraped the surface of its features. Luckily, you don't need to be an expert
in emacs for it to be a good editor.

------
Animats
The classic MacOS (not the UNIX-based one) has no terminal abstraction. The
basic mechanism of the system is a GUI. That was a good move. (Not having a
CPU dispatcher was a bad move; the underlying MacOS is very DOS-like.)

Then there's X-Windows, which was explicitly designed as a terminal system.
There were special-purpose X-terminals once.

In the phone space, things are less terminal-like. Although, amusingly, the
interface to the phone modem usually accepts the Hayes AT command set.

------
no1ne
Excellent article. Helped me to clearly understand tty. Thank-You :)

------
userbinator
Several times I've experienced unintentional humour arising from how "TTY" is
usually pronounced.

