Compare commits

..

14 Commits

Author SHA1 Message Date
celso 667493fbc4 made font bigger for new glasses 2024-03-27 15:33:34 -03:00
celso 8b642a44e0 fixed japanese font issue 2024-03-27 15:33:34 -03:00
celso 23a3014ca8 added keyboard select patch 2024-03-27 15:33:34 -03:00
celso 8d8fbb51fa added st-mouse-altscreen and st-anysize patches 2024-03-27 15:33:34 -03:00
celso 0a150530fa added st-scrollback-mouse patch 2024-03-27 15:33:34 -03:00
celso 344c75863e added st-reflow patch 2024-03-27 15:33:34 -03:00
celso 4d6768c0f8 added st-scrollback 2024-03-27 15:33:34 -03:00
celso e603aa84ca added st-delkey patch 2024-03-27 15:33:34 -03:00
celso 9890bfbc3b modified config.mk for asus_desk 2024-03-27 15:33:34 -03:00
Hiltjo Posthuma 5ce9716281 bump version to 0.9.1 2024-03-19 12:13:42 +01:00
Hiltjo Posthuma f20e169a20 config.def.h: improve latency for the default configuration 2024-03-17 14:42:44 +01:00
Tommi Hirvola 95f22c5305 set upper limit for REP escape sequence argument
Previously, printf 'L\033[2147483647b' would call tputc('L') 2^31 times,
making st unresponsive. This commit allows repeating the last character
at most 65535 times in order to prevent freezing and DoS attacks.
2024-03-04 23:50:58 +01:00
Quentin Rameau 7473a8d1a5 Fix cursor move with wide glyphs
st would always move back 1 column,
even with wide glyhps (using more than a single column).

The glyph rune is set on its first column,
and the other ones are to 0,
so loop until we detect the start of the previous glyph.
2024-02-25 11:56:43 +01:00
Tim Culverhouse a3f7420310 csi: check for private marker in 'S' case
The handler for 'S' final character does not check for a private
marker. This can cause a conflict with a sequence called 'XTSMGRAPHICS'
which also has an 'S' final character, but uses the private marker '?'.
Without checking for a private marker, st will perform a scroll up
operation when XTSMGRAPHICS is seen, which can cause unexpected display
artifacts.
2024-02-18 16:14:26 +01:00
3 changed files with 11 additions and 6 deletions

View File

@ -57,7 +57,7 @@ int allowwindowops = 0;
* near minlatency, but it waits longer for slow updates to avoid partial draw. * near minlatency, but it waits longer for slow updates to avoid partial draw.
* low minlatency will tear/flicker more, as it can "detect" idle too early. * low minlatency will tear/flicker more, as it can "detect" idle too early.
*/ */
static double minlatency = 8; static double minlatency = 2;
static double maxlatency = 33; static double maxlatency = 33;
/* /*

View File

@ -1,5 +1,5 @@
# st version # st version
VERSION = 0.9 VERSION = 0.9.1
# Customize below to fit your system # Customize below to fit your system

13
st.c
View File

@ -112,8 +112,8 @@ enum escape_state {
typedef struct { typedef struct {
Glyph attr; /* current char attributes */ Glyph attr; /* current char attributes */
int x; int x; /* terminal column */
int y; int y; /* terminal row */
char state; char state;
} TCursor; } TCursor;
@ -1869,7 +1869,7 @@ csihandle(void)
ttywrite(vtiden, strlen(vtiden), 0); ttywrite(vtiden, strlen(vtiden), 0);
break; break;
case 'b': /* REP -- if last char is printable print it <n> more times */ case 'b': /* REP -- if last char is printable print it <n> more times */
DEFAULT(csiescseq.arg[0], 1); LIMIT(csiescseq.arg[0], 1, 65535);
if (term.lastc) if (term.lastc)
while (csiescseq.arg[0]-- > 0) while (csiescseq.arg[0]-- > 0)
tputc(term.lastc); tputc(term.lastc);
@ -1963,6 +1963,7 @@ csihandle(void)
} }
break; break;
case 'S': /* SU -- Scroll <n> line up */ case 'S': /* SU -- Scroll <n> line up */
if (csiescseq.priv) break;
DEFAULT(csiescseq.arg[0], 1); DEFAULT(csiescseq.arg[0], 1);
/* xterm, urxvt, alacritty save this in history */ /* xterm, urxvt, alacritty save this in history */
tscrollup(term.top, term.bot, csiescseq.arg[0], SCROLL_SAVEHIST); tscrollup(term.top, term.bot, csiescseq.arg[0], SCROLL_SAVEHIST);
@ -2404,12 +2405,16 @@ tstrsequence(uchar c)
void void
tcontrolcode(uchar ascii) tcontrolcode(uchar ascii)
{ {
size_t i;
switch (ascii) { switch (ascii) {
case '\t': /* HT */ case '\t': /* HT */
tputtab(1); tputtab(1);
return; return;
case '\b': /* BS */ case '\b': /* BS */
tmoveto(term.c.x-1, term.c.y); for (i = 1; term.c.x && term.line[term.c.y][term.c.x - i].u == 0; ++i)
;
tmoveto(term.c.x - i, term.c.y);
return; return;
case '\r': /* CR */ case '\r': /* CR */
tmoveto(0, term.c.y); tmoveto(0, term.c.y);