diff options
author | Přemysl Eric Janouch <p@janouch.name> | 2022-09-07 15:33:38 +0200 |
---|---|---|
committer | Přemysl Eric Janouch <p@janouch.name> | 2022-09-07 15:34:52 +0200 |
commit | 2341228efd02bcd4c99214885a5214826bfffa5c (patch) | |
tree | edab812d3e72c6b6e689db704c4ffb4dfbdbae0d /xC.c | |
parent | 2e3005d88b6ee65689f5cf71905b014a56523160 (diff) | |
download | xK-2341228efd02bcd4c99214885a5214826bfffa5c.tar.gz xK-2341228efd02bcd4c99214885a5214826bfffa5c.tar.xz xK-2341228efd02bcd4c99214885a5214826bfffa5c.zip |
xP: implement buffer line leakage
Rather than on redisplay, these get cleared on reconnect.
Diffstat (limited to 'xC.c')
-rw-r--r-- | xC.c | 14 |
1 files changed, 8 insertions, 6 deletions
@@ -3097,7 +3097,7 @@ relay_prepare_buffer_activate (struct app_context *ctx, struct buffer *buffer) static void relay_prepare_buffer_line (struct app_context *ctx, struct buffer *buffer, - struct buffer_line *line) + struct buffer_line *line, bool leak_to_active) { struct relay_event_message *m = relay_prepare (ctx); struct relay_event_data_buffer_line *e = &m->data.buffer_line; @@ -3107,6 +3107,7 @@ relay_prepare_buffer_line (struct app_context *ctx, struct buffer *buffer, e->is_highlight = !!(line->flags & BUFFER_LINE_HIGHLIGHT); e->rendition = 1 + line->r; e->when = line->when * 1000; + e->leak_to_active = leak_to_active; size_t len = 0; for (size_t i = 0; line->items[i].type; i++) @@ -4588,9 +4589,6 @@ log_formatter (struct app_context *ctx, struct buffer *buffer, if (buffer->log_file) buffer_line_write_to_log (ctx, line, buffer->log_file); - relay_prepare_buffer_line (ctx, buffer, line); - relay_broadcast (ctx); - bool unseen_pm = buffer->type == BUFFER_PM && buffer != ctx->current_buffer && !(flags & BUFFER_LINE_UNIMPORTANT); @@ -4607,6 +4605,10 @@ log_formatter (struct app_context *ctx, struct buffer *buffer, && buffer == ctx->current_buffer->server->buffer)) can_leak = true; + relay_prepare_buffer_line + (ctx, buffer, line, can_leak && !ctx->isolate_buffers); + relay_broadcast (ctx); + bool displayed = true; if (ctx->terminal_suspended > 0) // Another process is using the terminal @@ -5011,7 +5013,7 @@ buffer_merge (struct app_context *ctx, // And since there is no log_*() call, send them to relays manually LIST_FOR_EACH (struct buffer_line, line, start) { - relay_prepare_buffer_line (ctx, buffer, line); + relay_prepare_buffer_line (ctx, buffer, line, false); relay_broadcast (ctx); } @@ -15166,7 +15168,7 @@ client_resync (struct client *c) LIST_FOR_EACH (struct buffer_line, line, buffer->lines) { - relay_prepare_buffer_line (c->ctx, buffer, line); + relay_prepare_buffer_line (c->ctx, buffer, line, false); relay_send (c); } } |