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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
A symbol table should never be created twice therefore we can make it
static and global. We add locks so it is totally thread-safe, too.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Many 8bit C1 codes have 7bit escape sequences as equivalents. This adds handlers
for all of them with comments what they are supposed to do. They are dummies for
now but they will be implemented later.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Add handlers for C1 codes with a description what they are supposed to do. They
are not yet implemented and are no-ops.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This is now a fully vt500-series compliant state machine that parses escape
sequences. See vt100.net/emu for information on this state-machine. This is
written from scratch, though.
It now handles all kind of escape sequences that we every want to support. It
correctly ignores all unsupported ones right now.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Print the CSI command in debug messages so we can better understand what
escape commands were sent.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Add new helper to console subsystem which performs a backspace
operation. We must take care of auto-wrap mode so we cannot simply use
the *_move_left() function.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The A, B, C and D CSIs are used to move the cursor in the scroll-region
without scrolling the buffer when reaching the margins.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This adds support for line-feed and carriage-return controls. The two
special line-feed controls which are not \n do not take care NL-mode so
they must be handled separately.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The new parser reads CSI parameters correctly and saves them in an array
for later evaluation. We currently do not handle the CSI commands. This
needs to be added now.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This adds a parser for basic control codes but does not implement their
functionality, yet. Only the newline handler is kept.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
We should first check whether we recognize the XK_* identifier before we
rely on the converted UCS4 character.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
The system keys are mapped to their ASCII equivalents. We do not support
CR/NL mode nor scroll-lock yet (is this supported by any term?).
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>