aboutsummaryrefslogtreecommitdiff
path: root/xC.c
diff options
context:
space:
mode:
authorPřemysl Eric Janouch <p@janouch.name>2022-09-07 15:33:38 +0200
committerPřemysl Eric Janouch <p@janouch.name>2022-09-07 15:34:52 +0200
commit2341228efd02bcd4c99214885a5214826bfffa5c (patch)
treeedab812d3e72c6b6e689db704c4ffb4dfbdbae0d /xC.c
parent2e3005d88b6ee65689f5cf71905b014a56523160 (diff)
downloadxK-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.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/xC.c b/xC.c
index e7325e1..54031be 100644
--- a/xC.c
+++ b/xC.c
@@ -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);
}
}