Commit graph

125 commits

Author SHA1 Message Date
Daniel Eklöf
23a6c6b711
vt: add missing 'entry' actions to 'anywhere' sections 2019-12-20 20:58:02 +01:00
Daniel Eklöf
b1fd960b4b
vt: convert CSI entry from table lookup to switch 2019-12-20 20:57:38 +01:00
Daniel Eklöf
a5f238b388
vt: re-align switches 2019-12-20 20:43:31 +01:00
Daniel Eklöf
b2f091d243
vt: replace GROUND, ESCAPE and ESCAPE_INTERMEDIATE tables with switches 2019-12-20 19:16:52 +01:00
Daniel Eklöf
56faca4266
vt: use a switch instead of a top-level state lookup table
Remove the top-level state lookup table, which mapped from a state
enum to a state transition table, and replace it with a switch.
2019-12-20 18:24:32 +01:00
Daniel Eklöf
2c4af8728d
vt: add commented out cases for 8-bit C1 control characters
XTerm seems to ignore these when in UTF-8 mode. Since we _only_
support UTF-8, we don't need to recognize these control characters at
all.

However, it may be good to have them here for reference. So add them,
but commented out, along with their corresponding 7-bit
versions (which we _do_ recognize and implement).
2019-12-14 20:28:05 +01:00
Daniel Eklöf
0e5a69d869
vt: don't try to move cursor outside the terminal
When we insert an auto-newline, we must make sure we don't try to move
outside the terminal window.

This can for example happen when a scrolling region have been
configured, and the cursor is **outside** the scrolling
region (i.e. it's in the bottom margin).
2019-11-30 00:32:34 +01:00
Daniel Eklöf
88c1a8939f
vt: fix memory corruption: wcwidth() may return -1
When it did, we called print_insert() with that, which in turn
resulted in a too large size value passed to memmove.
2019-11-30 00:15:05 +01:00
Daniel Eklöf
9551be492c
csi/vt: don't bad client data as errors
This gets rid of spam when cat:ing binary data.
2019-11-30 00:12:30 +01:00
Daniel Eklöf
66f941d00a
vt: only define esc_as_string() when debug logging has been enabled 2019-11-30 00:02:19 +01:00
Daniel Eklöf
cd9510aa7b
vt: disable logging BELL 2019-11-30 00:00:41 +01:00
Daniel Eklöf
616896e2a5
csi/ocs/vt: log unhandled/unrecognized sequences as debug messages
Having them as error messages was nice when we where still missing
lots of sequences.

Now we don't anymore, and these just spam stdout as well as syslog
when e.g. cat:ing binary data.
2019-11-29 23:59:24 +01:00
Daniel Eklöf
3026b8981a
vt: there are actually many state transitions that are no-ops
In most states, most 8-bit values are no-ops. This is already handled;
action() recognizes ACTION_NONE as a no-op. Thus, all we need to do is
remove the assertion.
2019-11-29 23:38:01 +01:00
Daniel Eklöf
04cbee7593
Revert "vt: replace pre_print() with term_autowrap()"
This reverts commit fd8a399274.
2019-11-17 17:22:16 +01:00
Daniel Eklöf
fd8a399274
vt: replace pre_print() with term_autowrap() 2019-11-17 12:14:45 +01:00
Daniel Eklöf
616e506f2e
csi: fix bad implementation of CBT (back tab)
* It takes a parameter, that indicates the number of tab stops to move
  through
* Use the tab stops defined in the tab stops list, not hard coded mod
  8 columns.
2019-11-17 11:20:59 +01:00
Daniel Eklöf
045f55a8c6
vt: bug (tab regression): don't get stuck on the same tab stop
There were actually two bugs here:

* When checking for a tab stop, make sure the new tab stop is at a
  different column. Otherwise you can't tab away from a tab stop.

* When there aren't any tab stops configured, or when we're already
  beyond the last tab stop, then tab to the last column (at least I
  think that's what we're supposed to do).
2019-11-17 10:15:56 +01:00
Daniel Eklöf
c9ebd527cf
term: save/restore charsets on save/restore cursor+attributes 2019-11-17 10:02:46 +01:00
Daniel Eklöf
ce544776ab
term: move charset variables into an anonymous struct 2019-11-17 09:59:12 +01:00
Daniel Eklöf
a70fe1f5d7
term: move lcf flag into 'cursor' struct 2019-11-17 09:46:20 +01:00
Daniel Eklöf
d637b8c9ba
term: add struct cursor 2019-11-17 09:44:31 +01:00
Daniel Eklöf
c1088d77ac
term: rename: print_needs_wrap -> lcf (Last Column Flag) 2019-11-17 09:39:43 +01:00
Daniel Eklöf
65ff3656f7
vt: execute: \t: use tab stops from tab stop list
Instead of assuming hardcoded 8-width tab stops, use the tab stops
from the tab stop list.
2019-11-16 10:57:39 +01:00
Daniel Eklöf
9ff48c2015
vt: implement ESC H - set tab stop at current column 2019-11-16 10:57:11 +01:00
Daniel Eklöf
69e0e454fa
vt: remove commented out code 2019-11-16 10:55:14 +01:00
Daniel Eklöf
35c56765a4
vt: DECALN: render at bottom of terminal, not in view 2019-11-14 11:08:49 +01:00
Daniel Eklöf
f635f48078
vt: implement VT - Vertical Tab
Despite its name, it always moves down exactly one line.
2019-11-05 13:56:52 +01:00
Daniel Eklöf
df65e29d0d
vt: always use hex (not octal) 2019-11-05 13:56:44 +01:00
Daniel Eklöf
27d00b15c7
vt: log hex version of printed character too 2019-11-05 13:56:25 +01:00
Daniel Eklöf
5d763b9e12
vt: always disable state_names[] array
It isn't used anywhere, even with LOG_ENABLE_DBG
2019-11-05 13:55:43 +01:00
Daniel Eklöf
33ea88aba6
vt: esc dispatch: implement DECALN
In esc dispatch:

* Switch on private first, then final
* Recognize ESC #8 (DECALN), and implement it
2019-11-05 11:32:56 +01:00
Daniel Eklöf
15b12f45c6
scan-build: fix a couple of minor warnings from a scan-build run 2019-11-05 10:39:36 +01:00
Daniel Eklöf
9f1525aef7
Rename: vt_to_slave() -> term_to_slave() 2019-11-03 00:52:24 +01:00
Daniel Eklöf
780a346071
vt: don't log ignored execute commands
cat:ing a binary file would otherwise result in us spamming syslog.
2019-09-28 13:59:11 +02:00
Daniel Eklöf
2707cf0fc4
vt: implement 'insert mode' 2019-08-30 22:08:37 +02:00
Daniel Eklöf
2e9349c4c4
vt: remove unneeded include 2019-08-30 21:43:50 +02:00
Daniel Eklöf
382bea8309
vt: tidy lazy initialization of escape parameters 2019-08-27 15:24:49 +02:00
Daniel Eklöf
936526ed5b
vt: no need to reset OSC string in CLEAR action
... as this is done when a new OSC string is started
2019-08-27 15:24:19 +02:00
Daniel Eklöf
8d65f45bf5
vt: store alt charset characters as wchars 2019-08-27 15:23:50 +02:00
Daniel Eklöf
0c5a19f950
vt: bug: fix lazy initialization of sub parameter value (off-by-one) 2019-08-24 11:39:28 +02:00
Daniel Eklöf
9b74cedb20
vt: clear CSI parameters lazily
The CLEAR action is so common, that explicitly clearing the entire
params array, which is kind of big, is too slow.

Clear it lazily instead. Meaning, we only set 'idx' (count) to 0 in
CLEAR. Then whenever we parse a parameter, clear the value and sub
parameters.
2019-08-24 11:33:13 +02:00
Daniel Eklöf
ece09cc76f
vt: remove support for urxvt 'extended' line drawing character set 2019-08-16 18:04:03 +02:00
Daniel Eklöf
8586c9cb91
vt: there is no default charset for \e0 and \eB 2019-08-16 18:01:24 +02:00
Daniel Eklöf
4d7993b36f
cell: pack more efficiently and store glyph as a wchar
The 'attributes' struct is now 8 bytes and naturally packed (used to
be 9 bytes, artificially packed).

'cell' struct is now 12 bytes, naturally packed (used to be 13 bytes,
artificially packed).

Furthermore, the glyph is stored as a wchar instead of a char*. This
makes it easier (faster) to do glyph lookup when rendering.
2019-08-02 18:19:07 +02:00
Daniel Eklöf
ab92abbd21
term: implement reset 2019-08-01 20:51:11 +02:00
Daniel Eklöf
858a0d9906
font: initial support for double-width *and* color emoji glyphs
Fonts are now loaded with FT_LOAD_COLOR and we recognize and support
the FT_PIXEL_MODE_BGRA pixel mode.

This is mapped to a CAIRO_FORMAT_ARGB32 surface, that is blitted
as-is (instead of used as a mask like we do for gray and mono glyphs).

Furthermore, since many emojis are double-width, we add initial
support for double-width glyphs.

These are assumed to always be utf8. When PRINT:ing an utf8 character,
we check its width, and add empty "spacer" cells after the cell with
the multi-column glyph.

When rendering, we render the columns in each row backwards. This
ensures the spacer cells get cleared *before* we render the glyph (so
that we don't end up erasing part of the glyph).

Finally, emoji fonts are usually bitmap fonts with *large*
glyphs. These aren't automatically scaled down. I.e. even if we
request a glyph of 13 pixels, we might end up getting a 100px glyph.

To handle this, fontconfig must be configured to scale bitmap
fonts. When it is, we can look at the 'scalable' and 'pixelsizefixup'
properties, and use these to scale the rendered glyph.
2019-07-31 18:03:35 +02:00
Daniel Eklöf
748a1f229c
vt: disable flash on bell, it's too annoying in e.g. zsh 2019-07-30 22:11:32 +02:00
Daniel Eklöf
e1f7fc459b
vt: BELL is now logged at info level, and flashes the screen 2019-07-30 22:09:07 +02:00
Daniel Eklöf
8acc3b891d
vt: remove almost all abort() calls
Replace with generic error log messages that simply says the
ESC/CSI/OSC sequence is unhandled. This can mean either invalid or
unimplemented, depending on the context.
2019-07-30 21:42:46 +02:00
Daniel Eklöf
51c1fc344a
vt: remove duplicate initialization warnings (clang) 2019-07-30 20:30:05 +02:00