Ryan Ballantyne
Ryan Ballantyne

Reputation: 4094

How to write full-screen Linux console app/script?

I'm having a hard time even googling this, because I don't know the right keywords. Some command-line apps (such as vi and less) take over the whole console screen and present an interactive interface to the user. Upon exiting such an app, the screen is returned to the state it was in before the app was launched. I want to write a program that behaves in this fashion, but again, I don't even know what this is called, so I can't find any documentation for how it's accomplished.

So, my question is threefold:

  1. What keywords can I use to find documentation on this?
  2. If you are so inclined, links to such documentation would be helpful.
  3. Lastly, can I accomplish this in a scripting language like Ruby, or even bash? I have no problem with C, but the environment I work in is more amenable to interpreted languages.

Upvotes: 14

Views: 5806

Answers (3)

beder
beder

Reputation: 1074

As said in some comments, you are looking for ncurses. The Linux Documentation Project have a very good HOWTO on ncurses for C that I used myself to start on it

https://tldp.org/HOWTO/NCURSES-Programming-HOWTO/

Upvotes: 7

Nick
Nick

Reputation: 2050

you can even access ncurses in bash by using the tput program. The whole ncurses library (like curses before it) works by sending escape sequences to the terminal. The xterm program emulates a vt100 terminal (and also a Tektronic terminal) and there were various combinations of characters which would move the cursor, clear the screen, draw various characters etc. These would generally start with an escape character, hence the name: escape sequence. You also sometimes see these escape sequences in people's PS1 shell variables with the \e to provide the escape character; often used to colour the prompt or set the window title.

tput refers to the terminfo database to figure out what the escape sequences are to perform the functions you've asked it to do.

see the manual page, type:

man 5 terminfo

for more details

Upvotes: 3

larsks
larsks

Reputation: 312038

The feature you are describing is the alternate screen buffer. I think that [N]Curses will enable this by default. There are certainly curses bindings for Ruby, Python, and other scripting languages.

Upvotes: 4

Related Questions