Alternate Screen in Terminal Emulator
Terminal (short for Terminal Emulator) is the key interface between developers and Linux, and we spend most of our working there. Because of such close interaction, we (maybe only me) tend to forget the complexity of it, believing it’s just one simple tool, does some simple jobs. Unfortunately, that’s far from the truth; most terminals are unbelievably complex, mainly because of history reasons. Even though I use it in my daily work, I have basically no idea what’s happening inside it. I will only cover one feature, alternate screen, of terminal in this post. When I learned more about terminal, I will wrote them as well.
§What THE HELL is Alternate Screen
Alternate Screen could be understood as one alternative workspace (buffer or universe), and everything happens there will not affect the main screen, (the one you see or in before entering Alternate Screen, and after exiting it). Considering one might looks through the history buffer of the terminal, it makes sense that the history is kept in one readable fashion. Some screen-oriented programs could easily messed it up, if there’s no Alternate Screen. (It’s one design choice, based on the assumption that people will read the history buffer sometime, and it’s one reasonable assumption, IMO.)
§It’s still a bit abstract…
I agree. Maybe this will make it clear if the process of entering and exiting Alternate Screen is illustrated. Terminal will enter and exit Alternate
Screen only when it’s requested to, and the correspond command is tput smcup
and tput rmcup
, respectively. (I admit, it’s rather cryptic.) The
programs need to use Alternate Screen will use these two commands to request for it, which happens behind the scene.
§Come on, you didn’t explain it
You just introduce some cryptic commands, that claims to do the work. I agree, again. tput
is just one tool, that has sth to do terminfo, which provides some description for the terminal’s capability, for different
terminals have different capability (you can’t imagine how fragmented the open source software world is). Therefore, terminfo acts as one abstract
layer over all the different terminals. Inside terminfo, smcup
and rmcup
are just two entries describing the capability concerning Alternate
Screen. (I could find what they stand for, so I persuade myself that smcup
stands for Save Memory CUrsor Positon
, and rmcup
could be deducted
easily then).
§It starts to make sense now, but terminfo is still quite abstract
Not if you can see the content of terminfo, using infocmp
, which will show the terminfo for the terminal you are using.