xC: fix some corner cases around terminal handling
This commit is contained in:
parent
91db8e6e54
commit
313a65180e
16
xC.c
16
xC.c
@ -789,7 +789,7 @@ input_el__redisplay (void *input)
|
|||||||
static char *
|
static char *
|
||||||
input_el__make_prompt (EditLine *editline)
|
input_el__make_prompt (EditLine *editline)
|
||||||
{
|
{
|
||||||
struct input_el *self;
|
struct input_el *self = NULL;
|
||||||
el_get (editline, EL_CLIENTDATA, &self);
|
el_get (editline, EL_CLIENTDATA, &self);
|
||||||
if (!self->prompt)
|
if (!self->prompt)
|
||||||
return "";
|
return "";
|
||||||
@ -1058,8 +1058,13 @@ input_el_buffer_switch (void *input, input_buffer_t input_buffer)
|
|||||||
static void
|
static void
|
||||||
input_el_buffer_destroy (void *input, input_buffer_t input_buffer)
|
input_el_buffer_destroy (void *input, input_buffer_t input_buffer)
|
||||||
{
|
{
|
||||||
(void) input;
|
struct input_el *self = input;
|
||||||
struct input_el_buffer *buffer = input_buffer;
|
struct input_el_buffer *buffer = input_buffer;
|
||||||
|
if (self->active && self->current == buffer)
|
||||||
|
{
|
||||||
|
el_wset (self->editline, EL_HIST, history, NULL);
|
||||||
|
self->current = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
history_wend (buffer->history);
|
history_wend (buffer->history);
|
||||||
free (buffer->saved_line);
|
free (buffer->saved_line);
|
||||||
@ -4349,6 +4354,10 @@ buffer_print_read_marker (struct app_context *ctx, FILE *stream, int flush_opts)
|
|||||||
static void
|
static void
|
||||||
buffer_print_backlog (struct app_context *ctx, struct buffer *buffer)
|
buffer_print_backlog (struct app_context *ctx, struct buffer *buffer)
|
||||||
{
|
{
|
||||||
|
// Buffers can be activated, or their lines modified, as automatic actions.
|
||||||
|
if (ctx->terminal_suspended)
|
||||||
|
return;
|
||||||
|
|
||||||
// The prompt can take considerable time to redraw
|
// The prompt can take considerable time to redraw
|
||||||
CALL (ctx->input, hide);
|
CALL (ctx->input, hide);
|
||||||
|
|
||||||
@ -11269,7 +11278,8 @@ handle_command_buffer (struct handler_args *a)
|
|||||||
else if (!strcasecmp_ascii (action, "clear"))
|
else if (!strcasecmp_ascii (action, "clear"))
|
||||||
{
|
{
|
||||||
buffer_clear (a->buffer);
|
buffer_clear (a->buffer);
|
||||||
buffer_print_backlog (ctx, a->buffer);
|
if (a->buffer == ctx->current_buffer)
|
||||||
|
buffer_print_backlog (ctx, a->buffer);
|
||||||
}
|
}
|
||||||
else if (!strcasecmp_ascii (action, "move"))
|
else if (!strcasecmp_ascii (action, "move"))
|
||||||
result = handle_buffer_move (ctx, a);
|
result = handle_buffer_move (ctx, a);
|
||||||
|
Loading…
Reference in New Issue
Block a user