mirror of
https://github.com/tmux/tmux.git
synced 2024-12-13 01:48:47 +00:00
Make the grid_cell passed into screen_write_* const.
This commit is contained in:
parent
97417a1813
commit
5f2bfd9807
100
screen-write.c
100
screen-write.c
@ -64,11 +64,15 @@ screen_write_reset(struct screen_write_ctx *ctx)
|
|||||||
|
|
||||||
/* Write character. */
|
/* Write character. */
|
||||||
void
|
void
|
||||||
screen_write_putc(struct screen_write_ctx *ctx, struct grid_cell *gc,
|
screen_write_putc(struct screen_write_ctx *ctx, const struct grid_cell *gcp,
|
||||||
u_char ch)
|
u_char ch)
|
||||||
{
|
{
|
||||||
utf8_set(&gc->data, ch);
|
struct grid_cell gc;
|
||||||
screen_write_cell(ctx, gc);
|
|
||||||
|
memcpy(&gc, gcp, sizeof gc);
|
||||||
|
|
||||||
|
utf8_set(&gc.data, ch);
|
||||||
|
screen_write_cell(ctx, &gc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Calculate string length, with embedded formatting. */
|
/* Calculate string length, with embedded formatting. */
|
||||||
@ -148,75 +152,74 @@ screen_write_strlen(const char *fmt, ...)
|
|||||||
|
|
||||||
/* Write simple string (no UTF-8 or maximum length). */
|
/* Write simple string (no UTF-8 or maximum length). */
|
||||||
void
|
void
|
||||||
screen_write_puts(struct screen_write_ctx *ctx, struct grid_cell *gc,
|
screen_write_puts(struct screen_write_ctx *ctx, const struct grid_cell *gcp,
|
||||||
const char *fmt, ...)
|
const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
screen_write_vnputs(ctx, -1, gc, fmt, ap);
|
screen_write_vnputs(ctx, -1, gcp, fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Write string with length limit (-1 for unlimited). */
|
/* Write string with length limit (-1 for unlimited). */
|
||||||
void
|
void
|
||||||
screen_write_nputs(struct screen_write_ctx *ctx, ssize_t maxlen,
|
screen_write_nputs(struct screen_write_ctx *ctx, ssize_t maxlen,
|
||||||
struct grid_cell *gc, const char *fmt, ...)
|
const struct grid_cell *gcp, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
screen_write_vnputs(ctx, maxlen, gc, fmt, ap);
|
screen_write_vnputs(ctx, maxlen, gcp, fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
screen_write_vnputs(struct screen_write_ctx *ctx, ssize_t maxlen,
|
screen_write_vnputs(struct screen_write_ctx *ctx, ssize_t maxlen,
|
||||||
struct grid_cell *gc, const char *fmt, va_list ap)
|
const struct grid_cell *gcp, const char *fmt, va_list ap)
|
||||||
{
|
{
|
||||||
|
struct grid_cell gc;
|
||||||
|
struct utf8_data *ud = &gc.data;
|
||||||
char *msg;
|
char *msg;
|
||||||
struct utf8_data ud;
|
|
||||||
u_char *ptr;
|
u_char *ptr;
|
||||||
size_t left, size = 0;
|
size_t left, size = 0;
|
||||||
enum utf8_state more;
|
enum utf8_state more;
|
||||||
|
|
||||||
|
memcpy(&gc, gcp, sizeof gc);
|
||||||
xvasprintf(&msg, fmt, ap);
|
xvasprintf(&msg, fmt, ap);
|
||||||
|
|
||||||
ptr = msg;
|
ptr = msg;
|
||||||
while (*ptr != '\0') {
|
while (*ptr != '\0') {
|
||||||
if (*ptr > 0x7f && utf8_open(&ud, *ptr) == UTF8_MORE) {
|
if (*ptr > 0x7f && utf8_open(ud, *ptr) == UTF8_MORE) {
|
||||||
ptr++;
|
ptr++;
|
||||||
|
|
||||||
left = strlen(ptr);
|
left = strlen(ptr);
|
||||||
if (left < (size_t)ud.size - 1)
|
if (left < (size_t)ud->size - 1)
|
||||||
break;
|
break;
|
||||||
while ((more = utf8_append(&ud, *ptr)) == UTF8_MORE)
|
while ((more = utf8_append(ud, *ptr)) == UTF8_MORE)
|
||||||
ptr++;
|
ptr++;
|
||||||
ptr++;
|
ptr++;
|
||||||
|
|
||||||
if (more == UTF8_DONE) {
|
if (more != UTF8_DONE)
|
||||||
if (maxlen > 0 &&
|
continue;
|
||||||
size + ud.width > (size_t) maxlen) {
|
if (maxlen > 0 && size + ud->width > (size_t)maxlen) {
|
||||||
while (size < (size_t) maxlen) {
|
while (size < (size_t)maxlen) {
|
||||||
screen_write_putc(ctx, gc, ' ');
|
screen_write_putc(ctx, &gc, ' ');
|
||||||
size++;
|
size++;
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
size += ud.width;
|
break;
|
||||||
|
|
||||||
utf8_copy(&gc->data, &ud);
|
|
||||||
screen_write_cell(ctx, gc);
|
|
||||||
}
|
}
|
||||||
|
size += ud->width;
|
||||||
|
screen_write_cell(ctx, &gc);
|
||||||
} else {
|
} else {
|
||||||
if (maxlen > 0 && size + 1 > (size_t) maxlen)
|
if (maxlen > 0 && size + 1 > (size_t)maxlen)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (*ptr == '\001')
|
if (*ptr == '\001')
|
||||||
gc->attr ^= GRID_ATTR_CHARSET;
|
gc.attr ^= GRID_ATTR_CHARSET;
|
||||||
else if (*ptr > 0x1f && *ptr < 0x7f) {
|
else if (*ptr > 0x1f && *ptr < 0x7f) {
|
||||||
size++;
|
size++;
|
||||||
screen_write_putc(ctx, gc, *ptr);
|
screen_write_putc(ctx, &gc, *ptr);
|
||||||
}
|
}
|
||||||
ptr++;
|
ptr++;
|
||||||
}
|
}
|
||||||
@ -228,22 +231,22 @@ screen_write_vnputs(struct screen_write_ctx *ctx, ssize_t maxlen,
|
|||||||
/* Write string, similar to nputs, but with embedded formatting (#[]). */
|
/* Write string, similar to nputs, but with embedded formatting (#[]). */
|
||||||
void
|
void
|
||||||
screen_write_cnputs(struct screen_write_ctx *ctx, ssize_t maxlen,
|
screen_write_cnputs(struct screen_write_ctx *ctx, ssize_t maxlen,
|
||||||
struct grid_cell *gc, const char *fmt, ...)
|
const struct grid_cell *gcp, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
struct grid_cell lgc;
|
struct grid_cell gc;
|
||||||
struct utf8_data ud;
|
struct utf8_data *ud = &gc.data;
|
||||||
va_list ap;
|
va_list ap;
|
||||||
char *msg;
|
char *msg;
|
||||||
u_char *ptr, *last;
|
u_char *ptr, *last;
|
||||||
size_t left, size = 0;
|
size_t left, size = 0;
|
||||||
enum utf8_state more;
|
enum utf8_state more;
|
||||||
|
|
||||||
|
memcpy(&gc, gcp, sizeof gc);
|
||||||
|
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
xvasprintf(&msg, fmt, ap);
|
xvasprintf(&msg, fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
memcpy(&lgc, gc, sizeof lgc);
|
|
||||||
|
|
||||||
ptr = msg;
|
ptr = msg;
|
||||||
while (*ptr != '\0') {
|
while (*ptr != '\0') {
|
||||||
if (ptr[0] == '#' && ptr[1] == '[') {
|
if (ptr[0] == '#' && ptr[1] == '[') {
|
||||||
@ -255,42 +258,39 @@ screen_write_cnputs(struct screen_write_ctx *ctx, ssize_t maxlen,
|
|||||||
}
|
}
|
||||||
*last = '\0';
|
*last = '\0';
|
||||||
|
|
||||||
style_parse(gc, &lgc, ptr);
|
style_parse(gcp, &gc, ptr);
|
||||||
ptr = last + 1;
|
ptr = last + 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*ptr > 0x7f && utf8_open(&ud, *ptr) == UTF8_MORE) {
|
if (*ptr > 0x7f && utf8_open(ud, *ptr) == UTF8_MORE) {
|
||||||
ptr++;
|
ptr++;
|
||||||
|
|
||||||
left = strlen(ptr);
|
left = strlen(ptr);
|
||||||
if (left < (size_t)ud.size - 1)
|
if (left < (size_t)ud->size - 1)
|
||||||
break;
|
break;
|
||||||
while ((more = utf8_append(&ud, *ptr)) == UTF8_MORE)
|
while ((more = utf8_append(ud, *ptr)) == UTF8_MORE)
|
||||||
ptr++;
|
ptr++;
|
||||||
ptr++;
|
ptr++;
|
||||||
|
|
||||||
if (more == UTF8_DONE) {
|
if (more != UTF8_DONE)
|
||||||
if (maxlen > 0 &&
|
continue;
|
||||||
size + ud.width > (size_t) maxlen) {
|
if (maxlen > 0 && size + ud->width > (size_t)maxlen) {
|
||||||
while (size < (size_t) maxlen) {
|
while (size < (size_t)maxlen) {
|
||||||
screen_write_putc(ctx, gc, ' ');
|
screen_write_putc(ctx, &gc, ' ');
|
||||||
size++;
|
size++;
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
size += ud.width;
|
break;
|
||||||
|
|
||||||
utf8_copy(&lgc.data, &ud);
|
|
||||||
screen_write_cell(ctx, &lgc);
|
|
||||||
}
|
}
|
||||||
|
size += ud->width;
|
||||||
|
screen_write_cell(ctx, &gc);
|
||||||
} else {
|
} else {
|
||||||
if (maxlen > 0 && size + 1 > (size_t) maxlen)
|
if (maxlen > 0 && size + 1 > (size_t)maxlen)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (*ptr > 0x1f && *ptr < 0x7f) {
|
if (*ptr > 0x1f && *ptr < 0x7f) {
|
||||||
size++;
|
size++;
|
||||||
screen_write_putc(ctx, &lgc, *ptr);
|
screen_write_putc(ctx, &gc, *ptr);
|
||||||
}
|
}
|
||||||
ptr++;
|
ptr++;
|
||||||
}
|
}
|
||||||
|
10
tmux.h
10
tmux.h
@ -2034,15 +2034,15 @@ void screen_write_stop(struct screen_write_ctx *);
|
|||||||
void screen_write_reset(struct screen_write_ctx *);
|
void screen_write_reset(struct screen_write_ctx *);
|
||||||
size_t printflike(1, 2) screen_write_cstrlen(const char *, ...);
|
size_t printflike(1, 2) screen_write_cstrlen(const char *, ...);
|
||||||
void printflike(4, 5) screen_write_cnputs(struct screen_write_ctx *,
|
void printflike(4, 5) screen_write_cnputs(struct screen_write_ctx *,
|
||||||
ssize_t, struct grid_cell *, const char *, ...);
|
ssize_t, const struct grid_cell *, const char *, ...);
|
||||||
size_t printflike(1, 2) screen_write_strlen(const char *, ...);
|
size_t printflike(1, 2) screen_write_strlen(const char *, ...);
|
||||||
void printflike(3, 4) screen_write_puts(struct screen_write_ctx *,
|
void printflike(3, 4) screen_write_puts(struct screen_write_ctx *,
|
||||||
struct grid_cell *, const char *, ...);
|
const struct grid_cell *, const char *, ...);
|
||||||
void printflike(4, 5) screen_write_nputs(struct screen_write_ctx *,
|
void printflike(4, 5) screen_write_nputs(struct screen_write_ctx *,
|
||||||
ssize_t, struct grid_cell *, const char *, ...);
|
ssize_t, const struct grid_cell *, const char *, ...);
|
||||||
void screen_write_vnputs(struct screen_write_ctx *, ssize_t,
|
void screen_write_vnputs(struct screen_write_ctx *, ssize_t,
|
||||||
struct grid_cell *, const char *, va_list);
|
const struct grid_cell *, const char *, va_list);
|
||||||
void screen_write_putc(struct screen_write_ctx *, struct grid_cell *,
|
void screen_write_putc(struct screen_write_ctx *, const struct grid_cell *,
|
||||||
u_char);
|
u_char);
|
||||||
void screen_write_copy(struct screen_write_ctx *, struct screen *, u_int,
|
void screen_write_copy(struct screen_write_ctx *, struct screen *, u_int,
|
||||||
u_int, u_int, u_int);
|
u_int, u_int, u_int);
|
||||||
|
Loading…
Reference in New Issue
Block a user