480 Commits

Author SHA1 Message Date
David Herrmann
8f9270822c vte: fix up SM/RM modes
The ANSI and DEC modes overlap so fix up parsing of flags.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 16:05:54 +02:00
David Herrmann
5b84906662 vte: declare all available modes
This adds dummy modes for all available DEC/ANSI modes. This does not
actually implement them but adds support for SM/RM CSI sequences.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 15:17:17 +02:00
David Herrmann
771ca42c16 vte: implement DECKPAM and DECKPNM
Both either set or reset the keypad application mode.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 14:39:05 +02:00
David Herrmann
cc3d8b22a4 vte: implement SM/RM
SM/RM - SetMode/ResetMode are used to explicitely set terminal modes. DEC
private modes and ANSI modes are separated as defined by VT220.

We currently only parse modes that we actually support. Further modes may
follow.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 14:35:49 +02:00
David Herrmann
25b5a7583c vte: implement S7C1T and S8C1T
Both escape sequences are used to change the C1 escape character mode from
using 8bit or 7bit escape codes/sequences.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 14:19:52 +02:00
David Herrmann
a7a51fcb80 vte: set FLAG_USE_C1 when C1-8bit mode is requested
We currently do not support sending C1 controls as 8bit characters because
this doesn't make any sense with UTF-8. However, in 7bit/8bit
compatibility mode the client can request this. As nearly all clients are
backwards compatible to VT100 they also support C1 controls as 7bit
sequences, though, so there is really no time pressure to implement
FLAG_USE_C1.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 14:14:38 +02:00
David Herrmann
71db8be57c vte: implement charset shift in/out
This allows changing GL and GR to the values set in G0-G3. GL can also be
set temporarily, GR currently does not have such a mode.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 14:08:28 +02:00
David Herrmann
5ac6f8c211 vte: trivial: fix switch indentation
We use kernel-style switch-case indentation.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 13:59:19 +02:00
David Herrmann
a2e1ea7388 vte: support designating charsets
With ESC {int} {final} you can designate G0-G3. If no {int} is given, we
fall back to the default escape sequences that replace the C1 set.
However, the user might designate other sets manually so we ignore all
escape sequences that have intermediates set.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 13:52:23 +02:00
David Herrmann
239e7697bb vte: collect csi flags +, ( and )
All three flags are most often used with basic escape sequences and not
with CSI sequences, however, we treat them generic here to avoid more
complexity.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 13:31:33 +02:00
David Herrmann
2ac1aad8c9 vte: support temporary charsets and g0-g3
Temporary charsets are only used for the next graphics character that is
displayed. After that, the VTE returns to the previous charset. On
soft-reset we also reset these temporary slots.

This also adds the g0-g3 backend slots that can be set by the client and
allow mapping of arbitrary other charsets into gl/gr/glr/grt.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 13:23:22 +02:00
David Herrmann
52f55d50c8 vte: always perform soft reset on DECSCL
All DECSCL modes automatically perform a soft reset.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 13:18:14 +02:00
David Herrmann
d702a5ca5d vte: add support for GL/GR mappings
This allows mapping different charsets into GL/GR.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 13:09:38 +02:00
David Herrmann
2ad76e2fa7 vte: perform soft reset on initialization
Instead of copying all that initialization stuff around, we simply perform
a soft reset on initialization.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 13:06:56 +02:00
David Herrmann
536c6da6d1 vte: handle XK_Find and XK_Select
Even though modern keyboard often do not include such keys, we should
handle them correctly, anyway. For the sake of backwards-compatibility.

This also comes in handy if you define these keys separately. The
functions that are implemented by many applications with these keys are
handy, indeed.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 12:46:09 +02:00
David Herrmann
30c1c20876 vte: move long csi-handlers into separate function
Avoid making do_csi() too big. So put long csi-handlers into separate
functions.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 12:43:58 +02:00
David Herrmann
2ad5600d60 vte: implement DECSTR / soft-reset
On soft-reset, all internal state is reset but the screen data is kept
alive.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 12:40:01 +02:00
David Herrmann
4587f1b803 vte: corectly implement DECSCL
We now select the 8bit/7bit modes if the client sends an DECSCL requesting
a conformance level.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 12:37:18 +02:00
David Herrmann
4b6a7b593d vte: select CSI flags
Correctly select CSI flags like ?, !, > or $ and more. We actually don't
care about the position of these flags as other CSI parameters are just
digits.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 12:30:17 +02:00
David Herrmann
5c67c969bf vte: add kmscon_vte_reset()
This performs a soft reset of the VTE state machine. It does not affect
the console that is bound to the VTE, though.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 12:16:18 +02:00
David Herrmann
64e235bc22 vte: support 7bit and 8bit modes
In 7bit and 8bit modes we treat incoming characters as single-byte
characters and map them directly to the corresponding value instead of
using the UTF8 state-machine.

This allows using old non-utf8 applications with this VT. However, default
value is still UTF8-mode and you must explicitely request a conformance
level to change that. If you selected such a mode once, you can only
return to UTF8-mode by performing a soft/hard-reset.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 12:01:23 +02:00
David Herrmann
75d981b7be console: add kmscon_console_reset() dummy
This dummy is supposed to hard-reset the console. As the console is far
from finished, we keep it as dummy and implement this later.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 11:39:07 +02:00
David Herrmann
277edee2dc unicode: introduce kmscon_utf8_mach_reset()
Sometimes we need to reset the UTF8 state-machine, for instance when
resetting the VTE. This function simply resets the internal state to
KMSCON_UTF8_START so we start all over on the next input character.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 11:13:49 +02:00
David Herrmann
f6a39baf39 build: define KMSCON_ENABLE_DEBUG on --enable-debug
We build several internal libraries and to keep the namespaces apart we
also need different debug constants. Therefore, introduce the new
KMSCON_ENABLE_DEBUG constant which is for every debug object in base
kmscon code.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 11:12:21 +02:00
David Herrmann
771e08de07 vte: add special character sets
Since vt100 (and extended with vt220) you can load different character
sets into GL and GR. As we use UTF-8 as base encoding, we actually do not
need them but have to support it for backwards compatibility. For further
information, see the comments in vte_charsets.c.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-29 10:27:46 +02:00
David Herrmann
6b5fb5613d vte: implement DECSCL 'p' CSI
DECSCL is used to select compatibility modes. We do not support the VT100
compatibility mode explicitely or the VT220 mode, however, we always send
7-bit control characters and support escape sequences from both series so
we can safely ignore DECSCL.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-28 18:10:59 +02:00
David Herrmann
4b656aaa11 vte: implement NEL
NEL is a shortcut for newline independent of the line-feed/new-line mode.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-28 17:58:46 +02:00
David Herrmann
1d6eb0dd72 vte: implement IND and RI
IND and RI both either move one row up or down and perform scroll up/down
if required.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-28 17:56:44 +02:00
David Herrmann
2e6bac3e67 vte: explicitely ignore DEL
Add dummy to do_execute() which explicitely ignores the DEL input.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-28 17:51:51 +02:00
David Herrmann
b1e5d75220 vte: show reversed question mark on SUB
When receiving SUB we now correctly write a reversed question mark into
the buffer. We still cancel the ongoing escape sequence, this worked even
without this patch.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-28 17:47:51 +02:00
David Herrmann
6b4fc364df vte: remove kmscon_console_backspace()
This function is not needed at all. Instead, we should simply move one
character to the left on incoming backspace. There is no need to handle
auto-wrap on backspace.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-28 16:49:56 +02:00
David Herrmann
cd553c54ad vte: answer with ACK to an ENQ enquiry
Other emulators might ignore this. However, the easiest way to answer to
an enquiry is probably ACK.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-28 16:48:08 +02:00
David Herrmann
9aa76272e9 vte: use callback for outgoing messages
VTE now requires a new callback that is called when we want to send
messages to the pty etc. This is needed if we want to send messages as
responses to incoming data. Otherwise, we would have way too much overhead
assembling composed messages.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-28 16:38:56 +02:00
David Herrmann
c2515b2ae7 vte: add ctrl+0-9 shortcuts
The VT220 defines some additional shortcuts to send escape codes with
ctrl+<num>. Implement these as aliases to the same well-defined shortcuts.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-28 15:39:25 +02:00
David Herrmann
1647c5fc32 vte: handle F1-F20 correctly
F1-F4 are mapped to the keypad keys as these keys were not available on
VT220. F5 is special mapped and F6-F20 correspond to the same keys on the
keyboards for VT220.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-28 15:30:17 +02:00
David Herrmann
d6c50d9b8f vte: handle KeyPad/NumPad keys
This adds handlers for all the special keys on numpads/keypads.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-28 15:18:45 +02:00
David Herrmann
0986989ce7 vte: add line-feed/new-line mode
In line-feed/new-line mode the NL/.. codes generate a CR *and* a NL.
Otherwise, they only generate CRs.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-28 15:12:10 +02:00
David Herrmann
a3d5eef70e vte: implement cursor keys
In cursor-key-mode reset we send the normal CSI sequences, again encoded
with C0 codes as C1 codes are nonsense in UTF8. In cursor-key-mode set we
use the SS3 codes instead.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-28 14:12:30 +02:00
David Herrmann
8157556602 vte: implement editing keys
Implement the basic editing keys that are used by several applications. We
use the 7bit CSI sequence to avoid UTF8 issues. Otherwise, we would have
to encode the C1 CSI 0x9b as UTF8 character which is also a 2 byte
sequence.

Besides INSERT, DELETE, PAGEUP and PAGEDOWN an VT220 also had SELECT and
FIND keys which we do not implement as they are not present on modern
keyboards.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-28 14:01:22 +02:00
David Herrmann
2396423d03 vte/font/console: support basic character attributes
This adds support for colored and bold characters. This also adds the
infrastrucure for background colors and underlined characters, however,
these are not properly implemented, yet.

The color codes are similar to xterm and optimized on black backgrounds.
So they are not too bright or shiny.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-28 12:37:12 +02:00
David Herrmann
47d7cf085c vte: send correct escape characters on ctrl+KEY input
This adds support for the ctrl+KEY inputs to send escape sequences to the
child process.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-27 16:45:27 +02:00
David Herrmann
9c7e0159aa uterm_input: introduce UTERM_INPUT_HAS_MODS()
This is a convenient macro to check whether a given set of modifiers is
enabled on the given input event.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-27 16:43:26 +02:00
David Herrmann
51bfe9d107 test_input: always print keysym
Print keysym even if we have a UCS4 representation. This makes debugging
keyboard issues much easier. Also increase buffer size to 32 as there are
many symbols longer than 16 characters.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-27 16:41:19 +02:00
David Herrmann
ff7c065692 vte: print debug message on unknown CSI parameters
Print a debug message if the CSI-K/J parameters are unknown.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-27 15:21:32 +02:00
David Herrmann
2c5712685b vte: remove kmscon_vte_bind()
Bind the console at vte creation instead of dynamically during runtime.
There is no need to rebind a console so remove this complexity.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-27 14:47:11 +02:00
David Herrmann
a1b2202ccf main: start ui on each seat
We now have a video device for each seat so we only need to launch the UI
when the video device is registered.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-27 12:08:49 +02:00
David Herrmann
415417c97c uterm_input: fix increasing refcnt
We need to correctly increase the refcnt. We currently increase it only
when it was 0 before due to a very subtle bug as we missed the "return".

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-27 12:04:48 +02:00
Ran Benita
6c8877e0a2 xkb: add a TODO note to kbd_dev_reset stub
This is a small regression whereby starting kmscon with e.g. Caps Lock
already on, will not be reflected in the modifier mask. It's not
currently possible with xkbcommon.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-27 10:46:25 +02:00
Ran Benita
698d0fb95a xkb: produce key events
Use the new API in kbd_dev_process_key.
This introduces a regression whereby repeating key events are sent for
modifier keys. This is a currently a limitation in xkbcommon.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-27 10:45:54 +02:00
Ran Benita
c6ccc9b842 xkb: initialize the xkb objects
The new xkb types correspond quite closely to our own types, which now
become thin wrappers.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-05-27 10:42:54 +02:00