Commit Graph

75 Commits

Author SHA1 Message Date
bakkeby
0c41364e3d optimize column width calculation and utf-8 encode for ASCII
In particular on OpenBSD and on glibc wcwidth() is quite expensive.
On musl there is little difference.
2020-05-20 14:24:44 +02:00
bakkeby
6bf5eb8a38 fix for incorrect (partial) written sequences when libc wcwidth() == -1
Fix an issue with incorrect (partial) written sequences when libc wcwidth() ==
-1. The sequence is updated to on wcwidth(u) == -1:

	c = "\357\277\275"

but len isn't.

A way to reproduce in practise:

* st -o dump.txt
* In the terminal: printf '\xcd\xb8'
- This is codepoint 888, on OpenBSD it reports wcwidth() == -1.
- Quit the terminal.
- Look in dump.txt (partial written sequence of "UTF_INVALID").

This was introduced in:

"	commit 11625c7166b7e4dad414606227acec2de1c36464
	Author: czarkoff@gmail.com <czarkoff@gmail.com>
	Date:   Tue Oct 28 12:55:28 2014 +0100

	    Replace character with U+FFFD if wcwidth() is -1

	    Helpful when new Unicode codepoints are not recognized by libc."

Change:

Remove setting the sequence. If this happens to break something, another
solution could be setting len = 3 for the sequence.
2020-05-20 14:23:46 +02:00
bakkeby
338818b2b3 tiny code-style and typo-fix in comment (df79f2) 2020-05-20 14:22:04 +02:00
bakkeby
5c7d8ab1ad auto-sync: draw on idle to avoid flicker/tearing
st could easily tear/flicker with animation or other unattended
output. This commit eliminates most of the tear/flicker.

Before this commit, the display timing had two "modes":

- Interactively, st was waiting fixed `1000/xfps` ms after forwarding
  the kb/mouse event to the application and before drawing.

- Unattended, and specifically with animations, the draw frequency was
  throttled to `actionfps`. Animation at a higher rate would throttle
  and likely tear, and at lower rates it was tearing big frames
  (specifically, when one `read` didn't get a full "frame").

The interactive behavior was decent, but it was impossible to get good
unattended-draw behavior even with carefully chosen configuration.

This commit changes the behavior such that it draws on idle instead of
using fixed latency/frequency. This means that it tries to draw only
when it's very likely that the application has completed its output
(or after some duration without idle), so it mostly succeeds to avoid
tear, flicker, and partial drawing.

The config values minlatency/maxlatency replace xfps/actionfps and
define the range which the algorithm is allowed to wait from the
initial draw-trigger until the actual draw. The range enables the
flexibility to choose when to draw - when least likely to flicker.

It also unifies the interactive and unattended behavior and config
values, which makes the code simpler as well - without sacrificing
latency during interactive use, because typically interactively idle
arrives very quickly, so the wait is typically minlatency.

While it only slighly improves interactive behavior, for animations
and other unattended-drawing it improves greatly, as it effectively
adapts to any [animation] output rate without tearing, throttling,
redundant drawing, or unnecessary delays (sounds impossible, but it
works).
2020-05-20 14:15:57 +02:00
bakkeby
f34aef7e07 [PATCH] replace exit(3) by _exit(2) in signal handler sigchld() 2020-04-30 09:06:54 +02:00
bakkeby
17afd4c38b bump version to 0.8.3 2020-04-27 14:05:28 +02:00
bakkeby
b71d9f6669 [st][PATCH] externalpipe and externalpipein
This patch must be applied on the externalpipe patch. It adds the
function externalpipein to redirect the standard output of the external
command to the slave size of the pty, that is, as if the external
program had been manually executed on the terminal. It can be used to
send desired escape sequences to the terminal with a shortcut.

I created the patch to make use of the dynamic-colors program
(https://github.com/sos4nt/dynamic-colors) that uses the OSC escape
sequences to change the colors of the terminal. The program keeps the
last colorscheme selected in a file, so you can use it to select the
colorscheme for all newly opened terminals from that moment on. If you
want to change the color of the background and foreground independently
from the palette, you have to merge in the patch for the OSC escape
sequences 10, 11, and 12.

This patch includes the changes of the externalpipe sigaction patch to
prevent reseting the signal handler for SIGCHLD when the proces of the
external command exits.
2020-04-20 13:06:39 +02:00
bakkeby
5ad2174cf9 [st][PATCH] externalpipe sigaction
This patch should be applied on top of the externalpipe patch. It
prevents the reset of the signal handler set on SIGCHILD, when the
forked process that executes the external process exits. I opted for
switching from signal to sigaction instead of rearming the signal in the
sigchld function, just because it is the recommended function (although I
tried both ways and both worked).
2020-04-20 12:46:50 +02:00
bakkeby
a4d8ea1853 Added the force redraw on keypress patch 2020-04-20 12:14:49 +02:00
bakkeby
d230df0802 Correcting link to patches.h following move to patches.def.h 2020-04-02 12:43:58 +02:00
bakkeby
7dee587ceb Adding workingdir patch 2020-03-29 16:46:38 +02:00
bakkeby
d26b46ffa7 Adding invert patch 2020-03-29 15:38:16 +02:00
bakkeby
4966f31256 Custom changes to make the altscreen mouse scollback patch working with latest version of st 2020-03-24 20:05:07 +01:00
bakkeby
d7c5b9f40b fixime strikethrough 2020-03-24 11:34:18 +01:00
bakkeby
e7cfd5ae16 better Input Method Editor (IME) support (35f7db) 2020-03-24 11:25:39 +01:00
bakkeby
9f1a2db7c5 Adding font2 patch as per request #3 2020-03-21 16:41:43 +01:00
bakkeby
352170eec8 Adding st embedder patch 2020-01-07 14:05:53 +01:00
bakkeby
dc915b6056 Adding note about flexipatch-finalizer 2019-10-16 12:05:53 +02:00
bakkeby
cfecd195ba Adding relativeborder, fix-keyboard-input, iso14755, visualbell, rightclicktoplumb, boxdraw and keyboard-select patches 2019-09-17 15:16:22 +02:00
bakkeby
db32474a7f Adding spoiler, external pipe and themed cursor patches 2019-09-17 01:18:44 +02:00
bakkeby
d52c5e4ce8 Adding scrollback patch 2019-09-16 15:31:58 +02:00
bakkeby
7615c2f0aa Adding fixime, newterm and opencopied patches 2019-09-16 12:40:07 +02:00
bakkeby
35e6403c69 Adding copyurl and disable-fonts patch 2019-09-16 10:40:16 +02:00
bakkeby
9aefe8e4f7 Adding bold-is-not-bright patch 2019-09-16 09:40:40 +02:00
bakkeby
5d336c2796 Initial commit, adding alpha and anysize patches 2019-09-16 09:35:57 +02:00