Daniel Eklöf
de575ac58e
conf: improve configuration file parsing
...
* Strip whitespaces from keys and values
* Detect (and ignore) comments
* Detect syntax errors (no value specified etc)
* Error out on syntax errors and invalid keys
2019-07-17 10:12:14 +02:00
Daniel Eklöf
c11cc2be57
main: allow user to override shell on the command line
2019-07-17 09:55:36 +02:00
Daniel Eklöf
aa87be43ba
slave: report exec() failure back to main process
2019-07-17 09:39:12 +02:00
Daniel Eklöf
519f721577
main: jump to cleanup on failure to load cursor pointer theme
2019-07-17 09:38:54 +02:00
Daniel Eklöf
153894eb73
slave: exec shell from conf
2019-07-17 09:30:39 +02:00
Daniel Eklöf
9ded4b3de2
main: fallback for strikeout positioning seems to work
2019-07-16 16:07:55 +02:00
Daniel Eklöf
06f9495ae2
render: implement strikeout
2019-07-16 15:08:02 +02:00
Daniel Eklöf
d93ca2f654
render: implement 'underline'
2019-07-16 14:20:39 +02:00
Daniel Eklöf
ccc8ef9606
terminal: foreground/background in cell attributes are now uint32_t
...
This reduces the cell size, and thus improves the cache behavour
2019-07-16 13:17:51 +02:00
Daniel Eklöf
0d1b4449b9
conf: initial support for configuration file
...
* Look for configuration file in (in this order):
- XDG_CONFIG_HOME/footrc
- ~/.config/footrc
* Currently supports setting the font
2019-07-16 11:52:22 +02:00
Daniel Eklöf
22115e1cf4
main: default font is 'monospace'
2019-07-16 11:03:48 +02:00
Daniel Eklöf
5597856762
main: set TERM=xterm-direct
2019-07-15 12:36:00 +02:00
Daniel Eklöf
6077b57ca5
rename project to 'foot'
2019-07-11 20:10:59 +02:00
Daniel Eklöf
703aeecb95
selection: add support for pasting *from* primary
2019-07-11 17:38:03 +02:00
Daniel Eklöf
b50ec1a850
selection: initial copy-to-clipboard functionality
2019-07-11 17:38:02 +02:00
Daniel Eklöf
632790d5d8
selection: selections can be made, and are rendered
...
* Start selection on mouse button down
* Update selection on motion
* Button release cancels selection if there were no motion after start
* Renderer detects cells inside the selection and inverts their colors
2019-07-11 17:38:01 +02:00
Daniel Eklöf
1ff1b3a71e
grid: don't pre-allocate the entire grid (with all scrollback lines)
...
The row array may now contain NULL pointers. This means the
corresponding row hasn't yet been allocated and initialized.
On a resize, we explicitly allocate the visible rows.
Uninitialized rows are then allocated the first time they are
referenced.
2019-07-10 16:27:55 +02:00
Daniel Eklöf
94fdde3da7
main: hopefully fix logical error in delayed rendering
...
We want the timeout_ms to *not* be -1 (i.e. someone has requested
delayed rendering), while we're *not* getting client output.
2019-07-10 09:56:15 +02:00
Daniel Eklöf
9b5c044b29
terminal: rename and redefine cursor keys mode and keypad keys mode
2019-07-09 11:07:06 +02:00
Daniel Eklöf
b4fdf51752
input: add support for dead keys (composing)
2019-07-09 10:00:54 +02:00
Daniel Eklöf
0d24fcafd0
render: store frame callback pointer in terminal struct
...
This allows us to free it when exiting
2019-07-09 09:23:32 +02:00
Daniel Eklöf
d7bb83022d
cleanup
2019-07-09 09:18:58 +02:00
Daniel Eklöf
729974492d
main: verify compositor has WL_SHM_FORMAT_ARGB8888
2019-07-08 16:12:02 +02:00
Daniel Eklöf
1e2a7e77f0
rgba: drop alpha channel support
2019-07-08 15:56:15 +02:00
Daniel Eklöf
4e25019ba6
wip: grid is now represented as a grid, not a linear array
...
The grid is now represented with an array of row *pointers*. Each row
contains an array of cells (the row's columns).
The main point of having row pointers is we can now move rows around
almost for free.
This is useful when scrolling with scroll margins for example, where
we previously had to copy the lines in the margins. Now it's just a
matter of swapping two pointers.
2019-07-08 13:57:31 +02:00
Daniel Eklöf
a102ff09f9
input: mouse events
2019-07-05 10:44:57 +02:00
Daniel Eklöf
1a341a56cc
render: load cursor theme from XCURSOR_THEME and XCURSOR_SIZE
2019-07-05 10:44:09 +02:00
Daniel Eklöf
1947d33868
render: break out rendering functions to render.{c,h}
2019-07-05 10:16:56 +02:00
Daniel Eklöf
3ba1721c0f
osc: implement change window title and icon
2019-07-05 09:50:35 +02:00
Daniel Eklöf
998ce52b7e
render: bump number of glyphs we can render in a single call
2019-07-05 09:31:03 +02:00
Daniel Eklöf
19cef74153
main: it's not the terminal emulators job to set LINES and COLUMNS
2019-07-05 09:21:12 +02:00
Daniel Eklöf
28d05a5528
main: initialize colors in VT state
2019-07-05 09:08:58 +02:00
Daniel Eklöf
8091f7c781
render: force a full redraw when we cannot reuse last buffer
2019-07-05 08:55:02 +02:00
Daniel Eklöf
4a35aa9724
resize: cursor reset was off-by-one when cursor was outside new size
2019-07-04 19:56:50 +02:00
Daniel Eklöf
1c737fa7bd
resize: re-align grid offset
2019-07-04 19:56:27 +02:00
Daniel Eklöf
dd5a3b1009
main: handle EINTR in poll()
2019-07-04 19:16:32 +02:00
Daniel Eklöf
ef944933e6
flash mitigation: add a small delay before rendering after receiving client data
...
Simply re-trying to read client data is not enough in many
cases. Re-work the flash mitigation to instead incur a small delay
before rendering.
2019-07-04 09:54:40 +02:00
Daniel Eklöf
03ca7a04ab
main: more zenburn:ish default foreground and background colors
2019-07-04 09:27:06 +02:00
Daniel Eklöf
3c67628c57
vt: implement (untested!) smam and rmam (auto margins)
...
Default is auto-margins enabled (scroll when cursor reaches right
margin).
2019-07-03 21:18:06 +02:00
Daniel Eklöf
1373d18dbc
logging: disable debug logging by default
2019-07-03 20:21:03 +02:00
Daniel Eklöf
f87d4f856a
main: mitigate screen flashes on slow client
...
If a client writes to the PTY "too slow", we often end up flashing the
screen. This could for example be caused by a client first erasing a
line, then we render that frame, followed by the client updating the
just-erased line. When we render _that_ frame, it will be perceived as
a flash.
Mitigate this by trying to read client data again, after finishing
processing one batch, but before rendering.
To avoid hanging on client output (and never rendering anything),
limit this to at most 3 iterations. This may have to be tweaked.
2019-07-03 15:16:38 +02:00
Daniel Eklöf
5e8c75aa38
csi: implement 'civis' (show/hide cursor)
2019-07-03 14:14:46 +02:00
Daniel Eklöf
a7a28ff581
scrolling: initial reverse scrolling support - no scroll regions
2019-07-03 10:45:49 +02:00
Daniel Eklöf
048f619b19
render: fix last-cursor comparison
2019-07-03 09:46:39 +02:00
Daniel Eklöf
2bca2a894e
main: add --font/-f command line option
2019-07-03 09:46:13 +02:00
Daniel Eklöf
dfaa5f5640
main: make sure cursor is inside the new row/col limits on resize
2019-07-02 22:32:25 +02:00
Daniel Eklöf
d5158b2432
render: track last cursor position in absolute values
...
This seems to fix an issue where we sometimes saw "ghost" cursors when
scrolling.
2019-07-02 22:31:52 +02:00
Daniel Eklöf
d04029d703
render: revert glyph caching
...
Instead, try to group as long sequences of glyphs as possible, as
fewer calls to cairo_show_glyphs() is *much* faster.
2019-07-02 19:44:02 +02:00
Daniel Eklöf
607df23a92
render: fix cursor not always being rendered
...
In case the only difference between this and the last frame was cursor
movement, the cursor was not rendered.
2019-07-02 12:51:43 +02:00
Daniel Eklöf
9392cfbbf3
render: draw pre-rendered glyph OVER background
...
This allows us to render the background dynamically. Note that
pre-rendered glyphs still have wrong foreground color.
2019-07-02 12:50:18 +02:00