* update tmux to 3.3_a-7
This commit is contained in:
parent
b71269daeb
commit
953bfdc123
759
tmux/0002-ncurses.patch
Normal file
759
tmux/0002-ncurses.patch
Normal file
@ -0,0 +1,759 @@
|
||||
From 33b5788ef7534cf9b3492dda5fd15056042f3e1b Mon Sep 17 00:00:00 2001
|
||||
From: nicm <nicm>
|
||||
Date: Tue, 25 Apr 2023 09:31:50 +0000
|
||||
Subject: [PATCH 1/3] Tidy tparm wrapper functions to have more obvious names
|
||||
and check tparm return value.
|
||||
|
||||
(cherry picked from commit 8f34504736cf3547992c4ba948c1e65f3813715c)
|
||||
---
|
||||
tmux.h | 26 ++++++------
|
||||
tty-term.c | 47 ++++++++++++++++-----
|
||||
tty.c | 118 ++++++++++++++++++++++++++---------------------------
|
||||
3 files changed, 108 insertions(+), 83 deletions(-)
|
||||
|
||||
diff --git a/tmux.h b/tmux.h
|
||||
index 53084b8b..5a90352e 100644
|
||||
--- a/tmux.h
|
||||
+++ b/tmux.h
|
||||
@@ -2250,12 +2250,12 @@ void tty_margin_off(struct tty *);
|
||||
void tty_cursor(struct tty *, u_int, u_int);
|
||||
void tty_clipboard_query(struct tty *);
|
||||
void tty_putcode(struct tty *, enum tty_code_code);
|
||||
-void tty_putcode1(struct tty *, enum tty_code_code, int);
|
||||
-void tty_putcode2(struct tty *, enum tty_code_code, int, int);
|
||||
-void tty_putcode3(struct tty *, enum tty_code_code, int, int, int);
|
||||
-void tty_putcode_ptr1(struct tty *, enum tty_code_code, const void *);
|
||||
-void tty_putcode_ptr2(struct tty *, enum tty_code_code, const void *,
|
||||
- const void *);
|
||||
+void tty_putcode_i(struct tty *, enum tty_code_code, int);
|
||||
+void tty_putcode_ii(struct tty *, enum tty_code_code, int, int);
|
||||
+void tty_putcode_iii(struct tty *, enum tty_code_code, int, int, int);
|
||||
+void tty_putcode_s(struct tty *, enum tty_code_code, const char *);
|
||||
+void tty_putcode_ss(struct tty *, enum tty_code_code, const char *,
|
||||
+ const char *);
|
||||
void tty_puts(struct tty *, const char *);
|
||||
void tty_putc(struct tty *, u_char);
|
||||
void tty_putn(struct tty *, const void *, size_t, u_int);
|
||||
@@ -2318,15 +2318,15 @@ int tty_term_read_list(const char *, int, char ***, u_int *,
|
||||
void tty_term_free_list(char **, u_int);
|
||||
int tty_term_has(struct tty_term *, enum tty_code_code);
|
||||
const char *tty_term_string(struct tty_term *, enum tty_code_code);
|
||||
-const char *tty_term_string1(struct tty_term *, enum tty_code_code, int);
|
||||
-const char *tty_term_string2(struct tty_term *, enum tty_code_code, int,
|
||||
+const char *tty_term_string_i(struct tty_term *, enum tty_code_code, int);
|
||||
+const char *tty_term_string_ii(struct tty_term *, enum tty_code_code, int,
|
||||
int);
|
||||
-const char *tty_term_string3(struct tty_term *, enum tty_code_code, int,
|
||||
+const char *tty_term_string_iii(struct tty_term *, enum tty_code_code, int,
|
||||
int, int);
|
||||
-const char *tty_term_ptr1(struct tty_term *, enum tty_code_code,
|
||||
- const void *);
|
||||
-const char *tty_term_ptr2(struct tty_term *, enum tty_code_code,
|
||||
- const void *, const void *);
|
||||
+const char *tty_term_string_s(struct tty_term *, enum tty_code_code,
|
||||
+ const char *);
|
||||
+const char *tty_term_string_ss(struct tty_term *, enum tty_code_code,
|
||||
+ const char *, const char *);
|
||||
int tty_term_number(struct tty_term *, enum tty_code_code);
|
||||
int tty_term_flag(struct tty_term *, enum tty_code_code);
|
||||
const char *tty_term_describe(struct tty_term *, enum tty_code_code);
|
||||
diff --git a/tty-term.c b/tty-term.c
|
||||
index fdf0c4fa..32dd849a 100644
|
||||
--- a/tty-term.c
|
||||
+++ b/tty-term.c
|
||||
@@ -760,35 +760,60 @@ tty_term_string(struct tty_term *term, enum tty_code_code code)
|
||||
}
|
||||
|
||||
const char *
|
||||
-tty_term_string1(struct tty_term *term, enum tty_code_code code, int a)
|
||||
+tty_term_string_i(struct tty_term *term, enum tty_code_code code, int a)
|
||||
{
|
||||
- return (tparm((char *) tty_term_string(term, code), a, 0, 0, 0, 0, 0, 0, 0, 0));
|
||||
+ const char *x = tty_term_string(term, code), *s;
|
||||
+
|
||||
+ s = tparm((char *)x, a);
|
||||
+ if (s == NULL)
|
||||
+ fatalx("could not expand %s", tty_term_codes[code].name);
|
||||
+ return (s);
|
||||
}
|
||||
|
||||
const char *
|
||||
-tty_term_string2(struct tty_term *term, enum tty_code_code code, int a, int b)
|
||||
+tty_term_string_ii(struct tty_term *term, enum tty_code_code code, int a, int b)
|
||||
{
|
||||
- return (tparm((char *) tty_term_string(term, code), a, b, 0, 0, 0, 0, 0, 0, 0));
|
||||
+ const char *x = tty_term_string(term, code), *s;
|
||||
+
|
||||
+ s = tparm((char *)x, a, b);
|
||||
+ if (s == NULL)
|
||||
+ fatalx("could not expand %s", tty_term_codes[code].name);
|
||||
+ return (s);
|
||||
}
|
||||
|
||||
const char *
|
||||
-tty_term_string3(struct tty_term *term, enum tty_code_code code, int a, int b,
|
||||
+tty_term_string_iii(struct tty_term *term, enum tty_code_code code, int a, int b,
|
||||
int c)
|
||||
{
|
||||
- return (tparm((char *) tty_term_string(term, code), a, b, c, 0, 0, 0, 0, 0, 0));
|
||||
+ const char *x = tty_term_string(term, code), *s;
|
||||
+
|
||||
+ s = tparm((char *)x, a, b, c);
|
||||
+ if (s == NULL)
|
||||
+ fatalx("could not expand %s", tty_term_codes[code].name);
|
||||
+ return (s);
|
||||
}
|
||||
|
||||
const char *
|
||||
-tty_term_ptr1(struct tty_term *term, enum tty_code_code code, const void *a)
|
||||
+tty_term_string_s(struct tty_term *term, enum tty_code_code code, const char *a)
|
||||
{
|
||||
- return (tparm((char *) tty_term_string(term, code), (long)a, 0, 0, 0, 0, 0, 0, 0, 0));
|
||||
+ const char *x = tty_term_string(term, code), *s;
|
||||
+
|
||||
+ s = tparm((char *)x, (long)a);
|
||||
+ if (s == NULL)
|
||||
+ fatalx("could not expand %s", tty_term_codes[code].name);
|
||||
+ return (s);
|
||||
}
|
||||
|
||||
const char *
|
||||
-tty_term_ptr2(struct tty_term *term, enum tty_code_code code, const void *a,
|
||||
- const void *b)
|
||||
+tty_term_string_ss(struct tty_term *term, enum tty_code_code code, const char *a,
|
||||
+ const char *b)
|
||||
{
|
||||
- return (tparm((char *) tty_term_string(term, code), (long)a, (long)b, 0, 0, 0, 0, 0, 0, 0));
|
||||
+ const char *x = tty_term_string(term, code), *s;
|
||||
+
|
||||
+ s = tparm((char *)x, (long)a, (long)b);
|
||||
+ if (s == NULL)
|
||||
+ fatalx("could not expand %s", tty_term_codes[code].name);
|
||||
+ return (s);
|
||||
}
|
||||
|
||||
int
|
||||
diff --git a/tty.c b/tty.c
|
||||
index 49cf9795..a4d744d0 100644
|
||||
--- a/tty.c
|
||||
+++ b/tty.c
|
||||
@@ -399,7 +399,7 @@ tty_stop_tty(struct tty *tty)
|
||||
if (tcsetattr(c->fd, TCSANOW, &tty->tio) == -1)
|
||||
return;
|
||||
|
||||
- tty_raw(tty, tty_term_string2(tty->term, TTYC_CSR, 0, ws.ws_row - 1));
|
||||
+ tty_raw(tty, tty_term_string_ii(tty->term, TTYC_CSR, 0, ws.ws_row - 1));
|
||||
if (tty_acs_needed(tty))
|
||||
tty_raw(tty, tty_term_string(tty->term, TTYC_RMACS));
|
||||
tty_raw(tty, tty_term_string(tty->term, TTYC_SGR0));
|
||||
@@ -409,7 +409,7 @@ tty_stop_tty(struct tty *tty)
|
||||
if (tty_term_has(tty->term, TTYC_SE))
|
||||
tty_raw(tty, tty_term_string(tty->term, TTYC_SE));
|
||||
else if (tty_term_has(tty->term, TTYC_SS))
|
||||
- tty_raw(tty, tty_term_string1(tty->term, TTYC_SS, 0));
|
||||
+ tty_raw(tty, tty_term_string_i(tty->term, TTYC_SS, 0));
|
||||
}
|
||||
if (tty->mode & MODE_BRACKETPASTE)
|
||||
tty_raw(tty, tty_term_string(tty->term, TTYC_DSBP));
|
||||
@@ -506,42 +506,42 @@ tty_putcode(struct tty *tty, enum tty_code_code code)
|
||||
}
|
||||
|
||||
void
|
||||
-tty_putcode1(struct tty *tty, enum tty_code_code code, int a)
|
||||
+tty_putcode_i(struct tty *tty, enum tty_code_code code, int a)
|
||||
{
|
||||
if (a < 0)
|
||||
return;
|
||||
- tty_puts(tty, tty_term_string1(tty->term, code, a));
|
||||
+ tty_puts(tty, tty_term_string_i(tty->term, code, a));
|
||||
}
|
||||
|
||||
void
|
||||
-tty_putcode2(struct tty *tty, enum tty_code_code code, int a, int b)
|
||||
+tty_putcode_ii(struct tty *tty, enum tty_code_code code, int a, int b)
|
||||
{
|
||||
if (a < 0 || b < 0)
|
||||
return;
|
||||
- tty_puts(tty, tty_term_string2(tty->term, code, a, b));
|
||||
+ tty_puts(tty, tty_term_string_ii(tty->term, code, a, b));
|
||||
}
|
||||
|
||||
void
|
||||
-tty_putcode3(struct tty *tty, enum tty_code_code code, int a, int b, int c)
|
||||
+tty_putcode_iii(struct tty *tty, enum tty_code_code code, int a, int b, int c)
|
||||
{
|
||||
if (a < 0 || b < 0 || c < 0)
|
||||
return;
|
||||
- tty_puts(tty, tty_term_string3(tty->term, code, a, b, c));
|
||||
+ tty_puts(tty, tty_term_string_iii(tty->term, code, a, b, c));
|
||||
}
|
||||
|
||||
void
|
||||
-tty_putcode_ptr1(struct tty *tty, enum tty_code_code code, const void *a)
|
||||
+tty_putcode_s(struct tty *tty, enum tty_code_code code, const char *a)
|
||||
{
|
||||
if (a != NULL)
|
||||
- tty_puts(tty, tty_term_ptr1(tty->term, code, a));
|
||||
+ tty_puts(tty, tty_term_string_s(tty->term, code, a));
|
||||
}
|
||||
|
||||
void
|
||||
-tty_putcode_ptr2(struct tty *tty, enum tty_code_code code, const void *a,
|
||||
- const void *b)
|
||||
+tty_putcode_ss(struct tty *tty, enum tty_code_code code, const char *a,
|
||||
+ const char *b)
|
||||
{
|
||||
if (a != NULL && b != NULL)
|
||||
- tty_puts(tty, tty_term_ptr2(tty->term, code, a, b));
|
||||
+ tty_puts(tty, tty_term_string_ss(tty->term, code, a, b));
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -603,7 +603,7 @@ tty_putc(struct tty *tty, u_char ch)
|
||||
* it works on sensible terminals as well.
|
||||
*/
|
||||
if (tty->term->flags & TERM_NOAM)
|
||||
- tty_putcode2(tty, TTYC_CUP, tty->cy, tty->cx);
|
||||
+ tty_putcode_ii(tty, TTYC_CUP, tty->cy, tty->cx);
|
||||
} else
|
||||
tty->cx++;
|
||||
}
|
||||
@@ -682,7 +682,7 @@ tty_force_cursor_colour(struct tty *tty, int c)
|
||||
else {
|
||||
colour_split_rgb(c, &r, &g, &b);
|
||||
xsnprintf(s, sizeof s, "rgb:%02hhx/%02hhx/%02hhx", r, g, b);
|
||||
- tty_putcode_ptr1(tty, TTYC_CS, s);
|
||||
+ tty_putcode_s(tty, TTYC_CS, s);
|
||||
}
|
||||
tty->ccolour = c;
|
||||
}
|
||||
@@ -743,7 +743,7 @@ tty_update_cursor(struct tty *tty, int mode, struct screen *s)
|
||||
if (tty_term_has(tty->term, TTYC_SE))
|
||||
tty_putcode(tty, TTYC_SE);
|
||||
else
|
||||
- tty_putcode1(tty, TTYC_SS, 0);
|
||||
+ tty_putcode_i(tty, TTYC_SS, 0);
|
||||
}
|
||||
if (cmode & (MODE_CURSOR_BLINKING|MODE_CURSOR_VERY_VISIBLE))
|
||||
tty_putcode(tty, TTYC_CVVIS);
|
||||
@@ -751,27 +751,27 @@ tty_update_cursor(struct tty *tty, int mode, struct screen *s)
|
||||
case SCREEN_CURSOR_BLOCK:
|
||||
if (tty_term_has(tty->term, TTYC_SS)) {
|
||||
if (cmode & MODE_CURSOR_BLINKING)
|
||||
- tty_putcode1(tty, TTYC_SS, 1);
|
||||
+ tty_putcode_i(tty, TTYC_SS, 1);
|
||||
else
|
||||
- tty_putcode1(tty, TTYC_SS, 2);
|
||||
+ tty_putcode_i(tty, TTYC_SS, 2);
|
||||
} else if (cmode & MODE_CURSOR_BLINKING)
|
||||
tty_putcode(tty, TTYC_CVVIS);
|
||||
break;
|
||||
case SCREEN_CURSOR_UNDERLINE:
|
||||
if (tty_term_has(tty->term, TTYC_SS)) {
|
||||
if (cmode & MODE_CURSOR_BLINKING)
|
||||
- tty_putcode1(tty, TTYC_SS, 3);
|
||||
+ tty_putcode_i(tty, TTYC_SS, 3);
|
||||
else
|
||||
- tty_putcode1(tty, TTYC_SS, 4);
|
||||
+ tty_putcode_i(tty, TTYC_SS, 4);
|
||||
} else if (cmode & MODE_CURSOR_BLINKING)
|
||||
tty_putcode(tty, TTYC_CVVIS);
|
||||
break;
|
||||
case SCREEN_CURSOR_BAR:
|
||||
if (tty_term_has(tty->term, TTYC_SS)) {
|
||||
if (cmode & MODE_CURSOR_BLINKING)
|
||||
- tty_putcode1(tty, TTYC_SS, 5);
|
||||
+ tty_putcode_i(tty, TTYC_SS, 5);
|
||||
else
|
||||
- tty_putcode1(tty, TTYC_SS, 6);
|
||||
+ tty_putcode_i(tty, TTYC_SS, 6);
|
||||
} else if (cmode & MODE_CURSOR_BLINKING)
|
||||
tty_putcode(tty, TTYC_CVVIS);
|
||||
break;
|
||||
@@ -833,7 +833,7 @@ tty_emulate_repeat(struct tty *tty, enum tty_code_code code,
|
||||
enum tty_code_code code1, u_int n)
|
||||
{
|
||||
if (tty_term_has(tty->term, code))
|
||||
- tty_putcode1(tty, code, n);
|
||||
+ tty_putcode_i(tty, code, n);
|
||||
else {
|
||||
while (n-- > 0)
|
||||
tty_putcode(tty, code1);
|
||||
@@ -1122,7 +1122,7 @@ tty_clear_line(struct tty *tty, const struct grid_cell *defaults, u_int py,
|
||||
/* Section of line. Use ECH if possible. */
|
||||
if (tty_term_has(tty->term, TTYC_ECH)) {
|
||||
tty_cursor(tty, px, py);
|
||||
- tty_putcode1(tty, TTYC_ECH, nx);
|
||||
+ tty_putcode_i(tty, TTYC_ECH, nx);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1263,7 +1263,7 @@ tty_clear_area(struct tty *tty, const struct grid_cell *defaults, u_int py,
|
||||
tty_term_has(tty->term, TTYC_INDN)) {
|
||||
tty_region(tty, py, py + ny - 1);
|
||||
tty_margin_off(tty);
|
||||
- tty_putcode1(tty, TTYC_INDN, ny);
|
||||
+ tty_putcode_i(tty, TTYC_INDN, ny);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1278,7 +1278,7 @@ tty_clear_area(struct tty *tty, const struct grid_cell *defaults, u_int py,
|
||||
tty_term_has(tty->term, TTYC_INDN)) {
|
||||
tty_region(tty, py, py + ny - 1);
|
||||
tty_margin(tty, px, px + nx - 1);
|
||||
- tty_putcode1(tty, TTYC_INDN, ny);
|
||||
+ tty_putcode_i(tty, TTYC_INDN, ny);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1579,7 +1579,7 @@ tty_sync_start(struct tty *tty)
|
||||
|
||||
if (tty_term_has(tty->term, TTYC_SYNC)) {
|
||||
log_debug("%s sync start", tty->client->name);
|
||||
- tty_putcode1(tty, TTYC_SYNC, 1);
|
||||
+ tty_putcode_i(tty, TTYC_SYNC, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1594,7 +1594,7 @@ tty_sync_end(struct tty *tty)
|
||||
|
||||
if (tty_term_has(tty->term, TTYC_SYNC)) {
|
||||
log_debug("%s sync end", tty->client->name);
|
||||
- tty_putcode1(tty, TTYC_SYNC, 2);
|
||||
+ tty_putcode_i(tty, TTYC_SYNC, 2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1793,7 +1793,7 @@ tty_cmd_reverseindex(struct tty *tty, const struct tty_ctx *ctx)
|
||||
if (tty_term_has(tty->term, TTYC_RI))
|
||||
tty_putcode(tty, TTYC_RI);
|
||||
else
|
||||
- tty_putcode1(tty, TTYC_RIN, 1);
|
||||
+ tty_putcode_i(tty, TTYC_RIN, 1);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1872,7 +1872,7 @@ tty_cmd_scrollup(struct tty *tty, const struct tty_ctx *ctx)
|
||||
tty_cursor(tty, 0, 0);
|
||||
else
|
||||
tty_cursor(tty, 0, tty->cy);
|
||||
- tty_putcode1(tty, TTYC_INDN, ctx->num);
|
||||
+ tty_putcode_i(tty, TTYC_INDN, ctx->num);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1902,7 +1902,7 @@ tty_cmd_scrolldown(struct tty *tty, const struct tty_ctx *ctx)
|
||||
tty_cursor_pane(tty, ctx, ctx->ocx, ctx->orupper);
|
||||
|
||||
if (tty_term_has(tty->term, TTYC_RIN))
|
||||
- tty_putcode1(tty, TTYC_RIN, ctx->num);
|
||||
+ tty_putcode_i(tty, TTYC_RIN, ctx->num);
|
||||
else {
|
||||
for (i = 0; i < ctx->num; i++)
|
||||
tty_putcode(tty, TTYC_RI);
|
||||
@@ -2101,7 +2101,7 @@ tty_set_selection(struct tty *tty, const char *buf, size_t len)
|
||||
|
||||
b64_ntop(buf, len, encoded, size);
|
||||
tty->flags |= TTY_NOBLOCK;
|
||||
- tty_putcode_ptr2(tty, TTYC_MS, "", encoded);
|
||||
+ tty_putcode_ss(tty, TTYC_MS, "", encoded);
|
||||
|
||||
free(encoded);
|
||||
}
|
||||
@@ -2246,7 +2246,7 @@ tty_region(struct tty *tty, u_int rupper, u_int rlower)
|
||||
tty_cursor(tty, 0, tty->cy);
|
||||
}
|
||||
|
||||
- tty_putcode2(tty, TTYC_CSR, tty->rupper, tty->rlower);
|
||||
+ tty_putcode_ii(tty, TTYC_CSR, tty->rupper, tty->rlower);
|
||||
tty->cx = tty->cy = UINT_MAX;
|
||||
}
|
||||
|
||||
@@ -2274,7 +2274,7 @@ tty_margin(struct tty *tty, u_int rleft, u_int rright)
|
||||
if (tty->rleft == rleft && tty->rright == rright)
|
||||
return;
|
||||
|
||||
- tty_putcode2(tty, TTYC_CSR, tty->rupper, tty->rlower);
|
||||
+ tty_putcode_ii(tty, TTYC_CSR, tty->rupper, tty->rlower);
|
||||
|
||||
tty->rleft = rleft;
|
||||
tty->rright = rright;
|
||||
@@ -2282,7 +2282,7 @@ tty_margin(struct tty *tty, u_int rleft, u_int rright)
|
||||
if (rleft == 0 && rright == tty->sx - 1)
|
||||
tty_putcode(tty, TTYC_CLMG);
|
||||
else
|
||||
- tty_putcode2(tty, TTYC_CMG, rleft, rright);
|
||||
+ tty_putcode_ii(tty, TTYC_CMG, rleft, rright);
|
||||
tty->cx = tty->cy = UINT_MAX;
|
||||
}
|
||||
|
||||
@@ -2392,7 +2392,7 @@ tty_cursor(struct tty *tty, u_int cx, u_int cy)
|
||||
* the cursor with CUB/CUF.
|
||||
*/
|
||||
if ((u_int) abs(change) > cx && tty_term_has(term, TTYC_HPA)) {
|
||||
- tty_putcode1(tty, TTYC_HPA, cx);
|
||||
+ tty_putcode_i(tty, TTYC_HPA, cx);
|
||||
goto out;
|
||||
} else if (change > 0 &&
|
||||
tty_term_has(term, TTYC_CUB) &&
|
||||
@@ -2402,12 +2402,12 @@ tty_cursor(struct tty *tty, u_int cx, u_int cy)
|
||||
tty_putcode(tty, TTYC_CUB1);
|
||||
goto out;
|
||||
}
|
||||
- tty_putcode1(tty, TTYC_CUB, change);
|
||||
+ tty_putcode_i(tty, TTYC_CUB, change);
|
||||
goto out;
|
||||
} else if (change < 0 &&
|
||||
tty_term_has(term, TTYC_CUF) &&
|
||||
!tty_use_margin(tty)) {
|
||||
- tty_putcode1(tty, TTYC_CUF, -change);
|
||||
+ tty_putcode_i(tty, TTYC_CUF, -change);
|
||||
goto out;
|
||||
}
|
||||
} else if (cx == thisx) {
|
||||
@@ -2440,21 +2440,21 @@ tty_cursor(struct tty *tty, u_int cx, u_int cy)
|
||||
(change < 0 && cy - change > tty->rlower) ||
|
||||
(change > 0 && cy - change < tty->rupper)) {
|
||||
if (tty_term_has(term, TTYC_VPA)) {
|
||||
- tty_putcode1(tty, TTYC_VPA, cy);
|
||||
+ tty_putcode_i(tty, TTYC_VPA, cy);
|
||||
goto out;
|
||||
}
|
||||
} else if (change > 0 && tty_term_has(term, TTYC_CUU)) {
|
||||
- tty_putcode1(tty, TTYC_CUU, change);
|
||||
+ tty_putcode_i(tty, TTYC_CUU, change);
|
||||
goto out;
|
||||
} else if (change < 0 && tty_term_has(term, TTYC_CUD)) {
|
||||
- tty_putcode1(tty, TTYC_CUD, -change);
|
||||
+ tty_putcode_i(tty, TTYC_CUD, -change);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
absolute:
|
||||
/* Absolute movement. */
|
||||
- tty_putcode2(tty, TTYC_CUP, cy, cx);
|
||||
+ tty_putcode_ii(tty, TTYC_CUP, cy, cx);
|
||||
|
||||
out:
|
||||
tty->cx = cx;
|
||||
@@ -2533,13 +2533,13 @@ tty_attributes(struct tty *tty, const struct grid_cell *gc,
|
||||
!tty_term_has(tty->term, TTYC_SMULX))
|
||||
tty_putcode(tty, TTYC_SMUL);
|
||||
else if (changed & GRID_ATTR_UNDERSCORE_2)
|
||||
- tty_putcode1(tty, TTYC_SMULX, 2);
|
||||
+ tty_putcode_i(tty, TTYC_SMULX, 2);
|
||||
else if (changed & GRID_ATTR_UNDERSCORE_3)
|
||||
- tty_putcode1(tty, TTYC_SMULX, 3);
|
||||
+ tty_putcode_i(tty, TTYC_SMULX, 3);
|
||||
else if (changed & GRID_ATTR_UNDERSCORE_4)
|
||||
- tty_putcode1(tty, TTYC_SMULX, 4);
|
||||
+ tty_putcode_i(tty, TTYC_SMULX, 4);
|
||||
else if (changed & GRID_ATTR_UNDERSCORE_5)
|
||||
- tty_putcode1(tty, TTYC_SMULX, 5);
|
||||
+ tty_putcode_i(tty, TTYC_SMULX, 5);
|
||||
}
|
||||
if (changed & GRID_ATTR_BLINK)
|
||||
tty_putcode(tty, TTYC_BLINK);
|
||||
@@ -2593,14 +2593,14 @@ tty_colours(struct tty *tty, const struct grid_cell *gc)
|
||||
if (have_ax)
|
||||
tty_puts(tty, "\033[39m");
|
||||
else if (tc->fg != 7)
|
||||
- tty_putcode1(tty, TTYC_SETAF, 7);
|
||||
+ tty_putcode_i(tty, TTYC_SETAF, 7);
|
||||
tc->fg = gc->fg;
|
||||
}
|
||||
if (COLOUR_DEFAULT(gc->bg) && !COLOUR_DEFAULT(tc->bg)) {
|
||||
if (have_ax)
|
||||
tty_puts(tty, "\033[49m");
|
||||
else if (tc->bg != 0)
|
||||
- tty_putcode1(tty, TTYC_SETAB, 0);
|
||||
+ tty_putcode_i(tty, TTYC_SETAB, 0);
|
||||
tc->bg = gc->bg;
|
||||
}
|
||||
}
|
||||
@@ -2768,12 +2768,12 @@ tty_colours_fg(struct tty *tty, const struct grid_cell *gc)
|
||||
xsnprintf(s, sizeof s, "\033[%dm", gc->fg);
|
||||
tty_puts(tty, s);
|
||||
} else
|
||||
- tty_putcode1(tty, TTYC_SETAF, gc->fg - 90 + 8);
|
||||
+ tty_putcode_i(tty, TTYC_SETAF, gc->fg - 90 + 8);
|
||||
goto save;
|
||||
}
|
||||
|
||||
/* Otherwise set the foreground colour. */
|
||||
- tty_putcode1(tty, TTYC_SETAF, gc->fg);
|
||||
+ tty_putcode_i(tty, TTYC_SETAF, gc->fg);
|
||||
|
||||
save:
|
||||
/* Save the new values in the terminal current cell. */
|
||||
@@ -2800,12 +2800,12 @@ tty_colours_bg(struct tty *tty, const struct grid_cell *gc)
|
||||
xsnprintf(s, sizeof s, "\033[%dm", gc->bg + 10);
|
||||
tty_puts(tty, s);
|
||||
} else
|
||||
- tty_putcode1(tty, TTYC_SETAB, gc->bg - 90 + 8);
|
||||
+ tty_putcode_i(tty, TTYC_SETAB, gc->bg - 90 + 8);
|
||||
goto save;
|
||||
}
|
||||
|
||||
/* Otherwise set the background colour. */
|
||||
- tty_putcode1(tty, TTYC_SETAB, gc->bg);
|
||||
+ tty_putcode_i(tty, TTYC_SETAB, gc->bg);
|
||||
|
||||
save:
|
||||
/* Save the new values in the terminal current cell. */
|
||||
@@ -2841,10 +2841,10 @@ tty_colours_us(struct tty *tty, const struct grid_cell *gc)
|
||||
* non-RGB version may be wrong.
|
||||
*/
|
||||
if (tty_term_has(tty->term, TTYC_SETULC))
|
||||
- tty_putcode1(tty, TTYC_SETULC, c);
|
||||
+ tty_putcode_i(tty, TTYC_SETULC, c);
|
||||
else if (tty_term_has(tty->term, TTYC_SETAL) &&
|
||||
tty_term_has(tty->term, TTYC_RGB))
|
||||
- tty_putcode1(tty, TTYC_SETAL, c);
|
||||
+ tty_putcode_i(tty, TTYC_SETAL, c);
|
||||
|
||||
save:
|
||||
/* Save the new values in the terminal current cell. */
|
||||
@@ -2858,18 +2858,18 @@ tty_try_colour(struct tty *tty, int colour, const char *type)
|
||||
|
||||
if (colour & COLOUR_FLAG_256) {
|
||||
if (*type == '3' && tty_term_has(tty->term, TTYC_SETAF))
|
||||
- tty_putcode1(tty, TTYC_SETAF, colour & 0xff);
|
||||
+ tty_putcode_i(tty, TTYC_SETAF, colour & 0xff);
|
||||
else if (tty_term_has(tty->term, TTYC_SETAB))
|
||||
- tty_putcode1(tty, TTYC_SETAB, colour & 0xff);
|
||||
+ tty_putcode_i(tty, TTYC_SETAB, colour & 0xff);
|
||||
return (0);
|
||||
}
|
||||
|
||||
if (colour & COLOUR_FLAG_RGB) {
|
||||
colour_split_rgb(colour & 0xffffff, &r, &g, &b);
|
||||
if (*type == '3' && tty_term_has(tty->term, TTYC_SETRGBF))
|
||||
- tty_putcode3(tty, TTYC_SETRGBF, r, g, b);
|
||||
+ tty_putcode_iii(tty, TTYC_SETRGBF, r, g, b);
|
||||
else if (tty_term_has(tty->term, TTYC_SETRGBB))
|
||||
- tty_putcode3(tty, TTYC_SETRGBB, r, g, b);
|
||||
+ tty_putcode_iii(tty, TTYC_SETRGBB, r, g, b);
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -2953,7 +2953,7 @@ tty_clipboard_query(struct tty *tty)
|
||||
|
||||
if ((~tty->flags & TTY_STARTED) || (tty->flags & TTY_OSC52QUERY))
|
||||
return;
|
||||
- tty_putcode_ptr2(tty, TTYC_MS, "", "?");
|
||||
+ tty_putcode_ss(tty, TTYC_MS, "", "?");
|
||||
|
||||
tty->flags |= TTY_OSC52QUERY;
|
||||
evtimer_set(&tty->clipboard_timer, tty_clipboard_query_callback, tty);
|
||||
--
|
||||
2.40.1
|
||||
|
||||
|
||||
From de51c8eb81b9db49fa34a8ea7886c9fe4164f46d Mon Sep 17 00:00:00 2001
|
||||
From: Nicholas Marriott <nicholas.marriott@gmail.com>
|
||||
Date: Fri, 28 Apr 2023 06:44:40 +0100
|
||||
Subject: [PATCH 2/3] Use ncurses' new tparm_s function (added in 6.4-20230424)
|
||||
instead of tparm so it does not object to string arguments in capabilities it
|
||||
doesn't already know.
|
||||
|
||||
(cherry picked from commit 39d41d0810d4e8ae6ce8d27776dfbb96722d9319)
|
||||
---
|
||||
configure.ac | 4 ++++
|
||||
tty-term.c | 48 +++++++++++++++++++++++++++++++++++++++---------
|
||||
2 files changed, 43 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 2b8b3b11..3c3c1873 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -344,6 +344,10 @@ else
|
||||
AC_MSG_ERROR("curses not found")
|
||||
fi
|
||||
fi
|
||||
+AC_CHECK_FUNCS([ \
|
||||
+ tiparm \
|
||||
+ tiparm_s \
|
||||
+])
|
||||
|
||||
# Look for utempter.
|
||||
AC_ARG_ENABLE(
|
||||
diff --git a/tty-term.c b/tty-term.c
|
||||
index 32dd849a..18b17420 100644
|
||||
--- a/tty-term.c
|
||||
+++ b/tty-term.c
|
||||
@@ -764,7 +764,13 @@ tty_term_string_i(struct tty_term *term, enum tty_code_code code, int a)
|
||||
{
|
||||
const char *x = tty_term_string(term, code), *s;
|
||||
|
||||
- s = tparm((char *)x, a);
|
||||
+#if defined(HAVE_TIPARM_S)
|
||||
+ s = tiparm_s(1, 0, x, a);
|
||||
+#elif defined(HAVE_TIPARM)
|
||||
+ s = tiparm(x, a);
|
||||
+#else
|
||||
+ s = tparm((char *)x, a, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||
+#endif
|
||||
if (s == NULL)
|
||||
fatalx("could not expand %s", tty_term_codes[code].name);
|
||||
return (s);
|
||||
@@ -775,19 +781,31 @@ tty_term_string_ii(struct tty_term *term, enum tty_code_code code, int a, int b)
|
||||
{
|
||||
const char *x = tty_term_string(term, code), *s;
|
||||
|
||||
- s = tparm((char *)x, a, b);
|
||||
+#if defined(HAVE_TIPARM_S)
|
||||
+ s = tiparm_s(2, 0, x, a, b);
|
||||
+#elif defined(HAVE_TIPARM)
|
||||
+ s = tiparm(x, a, b);
|
||||
+#else
|
||||
+ s = tparm((char *)x, a, b, 0, 0, 0, 0, 0, 0, 0);
|
||||
+#endif
|
||||
if (s == NULL)
|
||||
fatalx("could not expand %s", tty_term_codes[code].name);
|
||||
return (s);
|
||||
}
|
||||
|
||||
const char *
|
||||
-tty_term_string_iii(struct tty_term *term, enum tty_code_code code, int a, int b,
|
||||
- int c)
|
||||
+tty_term_string_iii(struct tty_term *term, enum tty_code_code code, int a,
|
||||
+ int b, int c)
|
||||
{
|
||||
const char *x = tty_term_string(term, code), *s;
|
||||
|
||||
- s = tparm((char *)x, a, b, c);
|
||||
+#if defined(HAVE_TIPARM_S)
|
||||
+ s = tiparm_s(3, 0, x, a, b, c);
|
||||
+#elif defined(HAVE_TIPARM)
|
||||
+ s = tiparm(x, a, b, c);
|
||||
+#else
|
||||
+ s = tparm((char *)x, a, b, c, 0, 0, 0, 0, 0, 0);
|
||||
+#endif
|
||||
if (s == NULL)
|
||||
fatalx("could not expand %s", tty_term_codes[code].name);
|
||||
return (s);
|
||||
@@ -798,19 +816,31 @@ tty_term_string_s(struct tty_term *term, enum tty_code_code code, const char *a)
|
||||
{
|
||||
const char *x = tty_term_string(term, code), *s;
|
||||
|
||||
- s = tparm((char *)x, (long)a);
|
||||
+#if defined(HAVE_TIPARM_S)
|
||||
+ s = tiparm_s(1, 1, x, a);
|
||||
+#elif defined(HAVE_TIPARM)
|
||||
+ s = tiparm(x, a);
|
||||
+#else
|
||||
+ s = tparm((char *)x, (long)a, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||
+#endif
|
||||
if (s == NULL)
|
||||
fatalx("could not expand %s", tty_term_codes[code].name);
|
||||
return (s);
|
||||
}
|
||||
|
||||
const char *
|
||||
-tty_term_string_ss(struct tty_term *term, enum tty_code_code code, const char *a,
|
||||
- const char *b)
|
||||
+tty_term_string_ss(struct tty_term *term, enum tty_code_code code,
|
||||
+ const char *a, const char *b)
|
||||
{
|
||||
const char *x = tty_term_string(term, code), *s;
|
||||
|
||||
- s = tparm((char *)x, (long)a, (long)b);
|
||||
+#if defined(HAVE_TIPARM_S)
|
||||
+ s = tiparm_s(2, 3, x, a, b);
|
||||
+#elif defined(HAVE_TIPARM)
|
||||
+ s = tiparm(x, a, b);
|
||||
+#else
|
||||
+ s = tparm((char *)x, (long)a, b, 0, 0, 0, 0, 0, 0, 0);
|
||||
+#endif
|
||||
if (s == NULL)
|
||||
fatalx("could not expand %s", tty_term_codes[code].name);
|
||||
return (s);
|
||||
--
|
||||
2.40.1
|
||||
|
||||
|
||||
From 732135ed357566d65749fde1967f5639026d9418 Mon Sep 17 00:00:00 2001
|
||||
From: nicm <nicm>
|
||||
Date: Fri, 28 Apr 2023 05:59:35 +0000
|
||||
Subject: [PATCH 3/3] Do not fatal if tparm fails, instead just log it (not
|
||||
working sequences are better than exiting).
|
||||
|
||||
(cherry picked from commit bf636d9575806134ca7efd917ee0d54e9330ae86)
|
||||
---
|
||||
tty-term.c | 30 ++++++++++++++++++++----------
|
||||
1 file changed, 20 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/tty-term.c b/tty-term.c
|
||||
index 18b17420..e489f610 100644
|
||||
--- a/tty-term.c
|
||||
+++ b/tty-term.c
|
||||
@@ -771,8 +771,10 @@ tty_term_string_i(struct tty_term *term, enum tty_code_code code, int a)
|
||||
#else
|
||||
s = tparm((char *)x, a, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||
#endif
|
||||
- if (s == NULL)
|
||||
- fatalx("could not expand %s", tty_term_codes[code].name);
|
||||
+ if (s == NULL) {
|
||||
+ log_debug("could not expand %s", tty_term_codes[code].name);
|
||||
+ return ("");
|
||||
+ }
|
||||
return (s);
|
||||
}
|
||||
|
||||
@@ -788,8 +790,10 @@ tty_term_string_ii(struct tty_term *term, enum tty_code_code code, int a, int b)
|
||||
#else
|
||||
s = tparm((char *)x, a, b, 0, 0, 0, 0, 0, 0, 0);
|
||||
#endif
|
||||
- if (s == NULL)
|
||||
- fatalx("could not expand %s", tty_term_codes[code].name);
|
||||
+ if (s == NULL) {
|
||||
+ log_debug("could not expand %s", tty_term_codes[code].name);
|
||||
+ return ("");
|
||||
+ }
|
||||
return (s);
|
||||
}
|
||||
|
||||
@@ -806,8 +810,10 @@ tty_term_string_iii(struct tty_term *term, enum tty_code_code code, int a,
|
||||
#else
|
||||
s = tparm((char *)x, a, b, c, 0, 0, 0, 0, 0, 0);
|
||||
#endif
|
||||
- if (s == NULL)
|
||||
- fatalx("could not expand %s", tty_term_codes[code].name);
|
||||
+ if (s == NULL) {
|
||||
+ log_debug("could not expand %s", tty_term_codes[code].name);
|
||||
+ return ("");
|
||||
+ }
|
||||
return (s);
|
||||
}
|
||||
|
||||
@@ -823,8 +829,10 @@ tty_term_string_s(struct tty_term *term, enum tty_code_code code, const char *a)
|
||||
#else
|
||||
s = tparm((char *)x, (long)a, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||
#endif
|
||||
- if (s == NULL)
|
||||
- fatalx("could not expand %s", tty_term_codes[code].name);
|
||||
+ if (s == NULL) {
|
||||
+ log_debug("could not expand %s", tty_term_codes[code].name);
|
||||
+ return ("");
|
||||
+ }
|
||||
return (s);
|
||||
}
|
||||
|
||||
@@ -841,8 +849,10 @@ tty_term_string_ss(struct tty_term *term, enum tty_code_code code,
|
||||
#else
|
||||
s = tparm((char *)x, (long)a, b, 0, 0, 0, 0, 0, 0, 0);
|
||||
#endif
|
||||
- if (s == NULL)
|
||||
- fatalx("could not expand %s", tty_term_codes[code].name);
|
||||
+ if (s == NULL) {
|
||||
+ log_debug("could not expand %s", tty_term_codes[code].name);
|
||||
+ return ("");
|
||||
+ }
|
||||
return (s);
|
||||
}
|
||||
|
||||
--
|
||||
2.40.1
|
||||
|
13
tmux/LICENSE
13
tmux/LICENSE
@ -1,13 +0,0 @@
|
||||
Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
|
||||
Permission to use, copy, modify, and distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
@ -4,7 +4,7 @@
|
||||
|
||||
pkgname=tmux
|
||||
pkgver=3.3_a
|
||||
pkgrel=3
|
||||
pkgrel=7
|
||||
pkgdesc='Terminal multiplexer'
|
||||
url='https://github.com/tmux/tmux/wiki'
|
||||
arch=(x86_64 powerpc64le powerpc64 powerpc riscv64)
|
||||
@ -12,13 +12,19 @@ license=('BSD')
|
||||
depends=('ncurses' 'libevent' 'libutempter' 'systemd-libs')
|
||||
makedepends=('systemd')
|
||||
source=("https://github.com/tmux/tmux/releases/download/${pkgver/_/}/tmux-${pkgver/_/}.tar.gz"
|
||||
"CVE-2022-47016.patch")
|
||||
'0001-CVE-2022-47016.patch'
|
||||
'0002-ncurses.patch')
|
||||
sha256sums=('e4fd347843bd0772c4f48d6dde625b0b109b7a380ff15db21e97c11a4dcdf93f'
|
||||
'58fb690833e086b71b52555aa8eced695ace0a0bc51b8bccfda441e35a47ca93')
|
||||
'58fb690833e086b71b52555aa8eced695ace0a0bc51b8bccfda441e35a47ca93'
|
||||
'70e8cc2a95dd4a19ff54bcf0abaeff6464ebecbaace5ed0aec06ca93a84d415a')
|
||||
|
||||
prepare() {
|
||||
cd "$pkgname-${pkgver/_/}"
|
||||
patch -Np1 -i ../CVE-2022-47016.patch
|
||||
|
||||
patch -Np1 -i ../0001-CVE-2022-47016.patch
|
||||
patch -Np1 -i ../0002-ncurses.patch
|
||||
|
||||
autoreconf -fi
|
||||
}
|
||||
|
||||
build() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user