kmscon: move kmscon_main.h to kmscon_conf.h

Everything in this header is solely related to configuration parsing so we
should name it properly. We will also move the configuration-handling from
kmscon_main.c to kmscon_conf.c in some of the next commits to clean up
kmscon-main.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
terminal: reopen terminal on HUP if no callback is given

If the caller didn't pass a callback to be called on HUP, we now
automatically reopen the terminal as default behavior.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
kmscon: move config-handling to kmscon_conf.c

Configuration handling is totally independent from kmscon_main.c so we
move it into a separate file to avoid cluttering up kmscon_main.c.

This also does some basic initialization in kmscon_conf.c which is solely
related to configuration handling and logging.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
uterm: video: fbdev: send UTERM_NEW/GONE events for fbdev devices

We didn't send these events as the fake-display for fbdev video-objects
was created during video-creation and thus no listener could have been
registered so far.
However, this caused every video listener to iterate over all displays on
wake-up. This is really ugly and we want to avoid that. Therefore, we now
send the UTERM_NEW event in an idle-handler and the GONE event on
shutdown.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
build: run ./configure in ./autogen.sh only if NOCONFIGURE is not set

In some circumstances it might not be desirable to run ./configure
together with ./autogen.sh. You can now set NOCONFIGURE=1 to avoid this.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Introduce session management

On seats other than seat0 we do not have any session-management, because
VTs are not available. Furthermore, if we want to get rid of CONFIG_VT
entirely, we also need to provide session-management for seat0.

This commit introduces sessions. Every seat (seats are now managed in
kmscon_seat.c) can have registered sessions. One of the sessions is active
and gets control over all displays. Session switching is entirely handled
inside of kmscon so there is always an active session (except if no
session is registered at all).

This also reworks the seat-management. kmscon_main.c now only manages the
seat allocation/deallocation and video-objects. The seat itself is handled
inside of kmscon_seat.c and does not know of uterm_video objects. Instead,
it is assigned a list of displays that it can use. Everything is still
hotplugging capable so user-experience should be the same as before.

The kmscon_terminal layer is reworked to be session based. So every
terminal is now a single session. By default, a single terminal-session is
created for each seat. This may be changed, though.

There is currently no input-control to change between session with
keyboard hotkeys. However, this will be added when we have more than one
session.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
tsm: screen: allocate alternate screen buffer

This changes the line-allocation helpers of TSM-screen to allocate an
alternate buffer along with the main-buffer. We still keep the "lines"
pointer to the main-buffer all the time, but this will allow to implement
alternate-xterm-screens later.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
tsm: screen: add flag to select alternate screen buffer

The VTE layer can now set the TSM_SCREEN_ALTERNATE flag to switch to the
alternate screen-buffer and back.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
tsm: vte: implement alternate-screen modes

On DECSET 47, 1047-1049 we switch between normal screen mode and alternate
screen mode. xterm and friends support a titeInhibit resource that
disables this feature, so we add a flag to set this, too. However, there
is currently no way to set this on the command-line. If someone needs
that, we can easily add that.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
tsm: screen: fix freeing alternate screen buffers on shutdown

We have to free both, main and alternate buffers on shutdown. We only used
to free the currently active buffer.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
tsm: screen: fix cell-initialization on line resize

We didn't correctly initialize new lines on resize. In fact, we didn't
initialize new cells at all. This was all covered by a nasty-fix in the
screen-resize handler.
This fixes the line-resize handler to initialize all new cells correctly.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
tsm: screen: remove obsolete comment

We correctly free all new space and this is really needed due to rotations
in the active screen and scrollback buffer.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
tsm: screen: do not link alternate-screen lines to scrollback

The alternate screen is mainly used to avoid linking lines to the
scrollback buffer. This implements this feature so only main-screen lines
end up in the scrollback buffer.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>