Tidy tparm wrapper functions to have more obvious names and check tparm

return value.
pull/3573/head
nicm 2023-04-25 09:31:50 +00:00
parent 551e0c36d9
commit 8f34504736
3 changed files with 111 additions and 86 deletions

26
tmux.h
View File

@ -2296,12 +2296,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);
@ -2365,15 +2365,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);

View File

@ -754,35 +754,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));
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));
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));
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), a));
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), a, b));
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

124
tty.c
View File

@ -405,7 +405,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));
@ -415,7 +415,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->ccolour != -1)
tty_raw(tty, tty_term_string(tty->term, TTYC_CR));
@ -514,42 +514,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
@ -611,7 +611,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++;
}
@ -690,7 +690,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;
}
@ -751,7 +751,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);
@ -759,27 +759,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;
@ -835,7 +835,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);
@ -1124,7 +1124,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;
}
}
@ -1265,7 +1265,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;
}
@ -1280,7 +1280,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;
}
}
@ -1587,7 +1587,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);
}
}
@ -1602,7 +1602,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);
}
}
@ -1820,7 +1820,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
@ -1901,7 +1901,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);
}
}
@ -1932,7 +1932,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);
@ -2137,7 +2137,7 @@ tty_set_selection(struct tty *tty, const char *flags, const char *buf,
b64_ntop(buf, len, encoded, size);
tty->flags |= TTY_NOBLOCK;
tty_putcode_ptr2(tty, TTYC_MS, flags, encoded);
tty_putcode_ss(tty, TTYC_MS, flags, encoded);
free(encoded);
}
@ -2210,7 +2210,7 @@ tty_reset(struct tty *tty)
if (!grid_cells_equal(gc, &grid_default_cell)) {
if (gc->link != 0)
tty_putcode_ptr2(tty, TTYC_HLS, "", "");
tty_putcode_ss(tty, TTYC_HLS, "", "");
if ((gc->attr & GRID_ATTR_CHARSET) && tty_acs_needed(tty))
tty_putcode(tty, TTYC_RMACS);
tty_putcode(tty, TTYC_SGR0);
@ -2285,7 +2285,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;
}
@ -2313,7 +2313,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;
@ -2321,7 +2321,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;
}
@ -2431,7 +2431,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) &&
@ -2441,12 +2441,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) {
@ -2479,21 +2479,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;
@ -2514,9 +2514,9 @@ tty_hyperlink(struct tty *tty, const struct grid_cell *gc,
return;
if (gc->link == 0 || !hyperlinks_get(hl, gc->link, &uri, NULL, &id))
tty_putcode_ptr2(tty, TTYC_HLS, "", "");
tty_putcode_ss(tty, TTYC_HLS, "", "");
else
tty_putcode_ptr2(tty, TTYC_HLS, id, uri);
tty_putcode_ss(tty, TTYC_HLS, id, uri);
}
void
@ -2593,13 +2593,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);
@ -2656,14 +2656,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;
}
}
@ -2833,12 +2833,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. */
@ -2865,12 +2865,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. */
@ -2906,10 +2906,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. */
@ -2923,18 +2923,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);
}
@ -3018,7 +3018,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);