Commit graph

2770 commits

Author SHA1 Message Date
Daniel Eklöf
49f4b3da64
config: add ‘[default].word-delimiters’
This option lets the user configure which characters act as word
delimiters when selecting text.

This affects both “double clicking”, and ‘ctrl-w’ in scrollback search
mode.

Closes #156
2020-10-09 19:44:23 +02:00
Daniel Eklöf
8aba25a477
xmalloc: add xwcsdup() 2020-10-09 19:43:04 +02:00
Daniel Eklöf
c66ad118b7
changelog: add contributor 2020-10-09 19:19:40 +02:00
Daniel Eklöf
e48d259294
Merge branch 'wformat-nonliteral' into master 2020-10-09 18:56:57 +02:00
Daniel Eklöf
a4b7b1f28f
readme: minor rewrite of server/daemon section 2020-10-09 18:54:54 +02:00
Daniel Eklöf
5b0af8ed59
csi: only respond to Primary DA when Ps == 0 2020-10-09 18:53:00 +02:00
Daniel Eklöf
b611d56881
readme: clearer descriptions of secondary and tertiary DA responses 2020-10-09 18:52:28 +02:00
Daniel Eklöf
1f9ca7715f
term: remove unused bit in xtsave struct 2020-10-09 18:52:05 +02:00
Craig Barnes
afaeac0809 config: fix "-Wformat-nonliteral" warnings 2020-10-09 08:31:55 +01:00
Daniel Eklöf
96d7fcdce9
Merge branch 'sixel-at-scrollback-wraparound-gets-sheared' into master
Closes #151
2020-10-09 07:44:43 +02:00
Daniel Eklöf
606e901cea
changelog: we’ve fixed several sixel+reflow related bugs 2020-10-09 07:44:18 +02:00
Daniel Eklöf
468add5591
sixel: reflow: drop sixels that crosses the scrollback history’s end
This fixes various crashes that occurred after a reflow due to the
sixel image list invariants no longer being true.
2020-10-09 07:44:18 +02:00
Daniel Eklöf
2c952761f2
sixel: unhook: do overwrite *after* linefeeding
This ensures the overwrite is done when the scrollback history is in
the same state as when we then insert the new image.
2020-10-09 07:44:18 +02:00
Daniel Eklöf
93f5e743cc
sixel: overwrite: use pixman to calculate new the sixel boundaries
When punching a hole in a sixel (and thus splitting it up into up to
four new sixels), use pixman to calculate the new sixel coordinates
and sizes.
2020-10-09 07:44:18 +02:00
Daniel Eklöf
91c0aed26e
sixel: ovewrite-by-rectangle: in debug builds, cross-reference against pixman
Use pixman to calculate the intersection of the rectangle being
overwritten, and the sixel(s). Verify our code matches.
2020-10-09 07:44:18 +02:00
Daniel Eklöf
5ebab9dea9
sixel: verify scrollback consistency: new verify function
Verifies sixels have been scrolled out correctly
2020-10-09 07:44:18 +02:00
Daniel Eklöf
11760e9071
sixel: add comments to verify_*() functions 2020-10-09 07:44:17 +02:00
Daniel Eklöf
5607e5d658
sixel: verify-*: don’t return anything; rely on asserts only 2020-10-09 07:44:17 +02:00
Daniel Eklöf
0a5a6cb7fa
sixel: scroll up/down: early return when list is empty
Branch tagged as ‘likely’ for performance reason
2020-10-09 07:44:17 +02:00
Daniel Eklöf
984083bf19
sixel: cell-size-changed: don’t verify sixels here
The state after this function is an intermediate state and isn’t
necessarily valid.

This sixels needs to be ‘reflowed’ to ensure a valid state. This is
something that should be done by the caller after the text grid has
been reflowed and the sixel coordinates have been re-mapped to the new
grid.

TODO: can/should we update the sixel cols/rows in sixel_reflow()
instead?
2020-10-09 07:44:17 +02:00
Daniel Eklöf
cf620cf3d0
sixel: unhook: look total number of sixels
This helps debug sixel overwrites, as it makes it more visible when
there are sixels that _should_ have been removed.
2020-10-09 07:44:17 +02:00
Daniel Eklöf
b66e235e84
sixel: scroll-up: don’t break out early of loop
This function loops the list of sixels, and discards those that would
be scrolled out if the grid offset is moved forward by the specified
number of rows.

The criteria is when the rebased row value is less than the number of
rows to scroll.

A rebased row number is a zero-based number starting at the beginning
of the scrollback. Thus, when scrolling 5 rows, rows with a rebased
row number between 0-4 will be scrolled out.

For performance reasons, we used to break out of the loop as soon as a
row number *larger* than the scroll count.

This however does not work. The sixels are sorted by their *end*
row. While this works in most cases (think images outputted in the
shell in the normal screen), it doesn’t always.

In the alt screen, where applications can print images just about
anywhere, it is possible to have *any* start row number anywhere in
the sixel list. Just as long as their *end* row numbers are sorted.

For example, a huuuge sixel that covers the entire scrollback. This
sixel will naturally be first in the list (and thus sixel_scroll_up()
will visit it *last*, since it iterates the list in reverse), but
should still be destroyed when scrolling.
2020-10-09 07:44:17 +02:00
Daniel Eklöf
e870a0068f
sixel: verify-list-order: add an ‘index’ variable
This will make it easier when debugging assertions in this function.
2020-10-09 07:44:17 +02:00
Daniel Eklöf
675f3e56c8
sixel: overwrite-by-rectangle: assert sixels don’t cross scrollback wrap-around 2020-10-09 07:44:17 +02:00
Daniel Eklöf
8168fc19df
sixel: scroll: call sixel_erase() instead of sixel_destroy()
This ensures the screen is updated correctly. Without this, the sixel
image would remain on screen until force-refreshed by some other means.
2020-10-09 07:44:17 +02:00
Daniel Eklöf
42cc84eab7
sixel: TOOD -> TODO (fixes codespell build error) 2020-10-09 07:44:17 +02:00
Daniel Eklöf
8129ff69c9
sixel: verify-no-overlap: free pixman regions 2020-10-09 07:44:16 +02:00
Daniel Eklöf
2f5df30ef5
sixel: verify-no-overlap: initialize ‘intersection’ pixman region 2020-10-09 07:44:16 +02:00
Daniel Eklöf
f2da822e9a
render: resize: call sixel_reflow() after reflowing grids 2020-10-09 07:44:16 +02:00
Daniel Eklöf
47298776dc
sixel: unhook: only call render_refresh() once 2020-10-09 07:44:16 +02:00
Daniel Eklöf
dbfc636ade
sixel: implement reflow
Move sixel reflow from grid_reflow() to sixel_reflow(). This lets us
use internal sixel functions to update the sixels.

Note that grid_reflow() still needs to remap the sixelss coordinates.
2020-10-09 07:44:16 +02:00
Daniel Eklöf
892730e5b9
term: update sixel rows/cols *after* cell dimension change, *before* resize
This fixes an issue where we resized+reflowed with bad rows/cols
values in the sixels.
2020-10-09 07:44:16 +02:00
Daniel Eklöf
9102194846
sixel: verify-sixels: check for bad list order last 2020-10-09 07:44:16 +02:00
Daniel Eklöf
14b4231c09
sixel: verify-no-wraparound-crossover: fix calculation of ‘end’ row 2020-10-09 07:44:16 +02:00
Daniel Eklöf
52a7155897
sixel: add sixel_cell_size_changed()
This function should be called *after* the cell dimensions have
changed, but *before* resizing/reflowing the grids.
2020-10-09 07:44:16 +02:00
Daniel Eklöf
cf48d1dc4c
sixel: debug: more fine-grained verification of sixel image list
* Verify no sixel crosses the scrollback wrap-around
* Verify no sixels overlap
2020-10-09 07:44:15 +02:00
Daniel Eklöf
323119a645
grid: reflow: re-insert sixels *after* new grid offset has been set
Also make sure to destroy sixels that are too big to fit in the scrollback.

Fixes issues with the sixel list not being sorted correctly.
2020-10-09 07:44:15 +02:00
Daniel Eklöf
5a6b96817d
sixel: overwrite: calculate split-up image pieces’ rows/cols from their width/height 2020-10-09 07:44:15 +02:00
Daniel Eklöf
a53a81cebf
sixel: overwrite: remove asserts
Sixels may extend outside the visible screen area
2020-10-09 07:44:15 +02:00
Daniel Eklöf
6cf86d67d9
term: re-calculate sixel images’ rows/cols values when cell size changes 2020-10-09 07:44:15 +02:00
Daniel Eklöf
bc75f4744c
sixel: fix sheared image when image crosses scrollback wrap-around
When a sixel image crosses the scrollback wrap-around, it is split up
into (at least) two pieces.

We use cursor->point.col for all pieces’ x-coordinate. This caused the
final image to appear sheared, since we do a carriage-return (after a
number of linefeeds) after each piece - this causes the cursor’s
position to be reset to the left margin.

The solution is simple; remember the cursor’s initial x-coordinate,
and use that to position all image pieces.

Closes #151.
2020-10-09 07:44:15 +02:00
Daniel Eklöf
96405c2ca9
sixel: overwrite-by-rectangle expects ‘width’ to not exceed screen
This fixes a crash when the emitted sixel extends beyond the right
margin. The crash only happens when there are other sixel images
already emitted.

Fixes part of #151
2020-10-09 07:44:13 +02:00
Daniel Eklöf
7e026ba119
sixel: fold long line 2020-10-09 07:43:57 +02:00
Daniel Eklöf
b10d93b0ef
Merge branch 'bell-triggers-faked-urgency' into master
Closes #157
2020-10-09 07:41:39 +02:00
Daniel Eklöf
f47d27968f
doc: foot.ini: bell/urgency: add note about this getting replaced in the future
The ‘set-urgency’ action is an interim workaround for lack of support
of an urgency hint in Wayland compositors. If/when such a feature gets
implemented in Wayland, I intend to use that instead of the current
implementation in foot.
2020-10-09 07:39:53 +02:00
Daniel Eklöf
7c6686221f
bell: optionally render margins in red when receiving BEL
Add anew config option, ‘bell=none|set-urgency’. When set to
‘set-urgency’, the margins will be painted in red (if the window did
not have keyboard focus).

This is intended as a cheap replacement for the ‘urgency’ hint, that
doesn’t (yet) exist on Wayland.

Closes #157
2020-10-08 19:55:32 +02:00
Daniel Eklöf
7e0cfd46c6
doc: foot.1: remove ‘--’ from example command line 2020-10-08 19:54:28 +02:00
Daniel Eklöf
4c242cacb3
doc: foot.ini: mention that ‘lines’ is rounded up to nearest power of 2 2020-10-08 19:54:06 +02:00
Daniel Eklöf
219dbad5b5
doc: foot.ini: “top at” -> “top of” 2020-10-08 19:53:49 +02:00
Daniel Eklöf
17d6e85e1c
doc: foot.ini: it’s foot.ini, not foot.init 2020-10-08 19:53:30 +02:00