degesch: defer prompt refreshing
Now that we do it each time we receive a message from the server.
This commit is contained in:
		
							
								
								
									
										20
									
								
								degesch.c
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								degesch.c
									
									
									
									
									
								
							@@ -1977,6 +1977,7 @@ struct app_context
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	struct input *input;                ///< User interface
 | 
						struct input *input;                ///< User interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						struct poller_idle prompt_event;    ///< Deferred prompt refresh
 | 
				
			||||||
	struct poller_idle input_event;     ///< Pending input event
 | 
						struct poller_idle input_event;     ///< Pending input event
 | 
				
			||||||
	struct str_vector pending_input;    ///< Pending input lines
 | 
						struct str_vector pending_input;    ///< Pending input lines
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2107,7 +2108,14 @@ app_context_free (struct app_context *self)
 | 
				
			|||||||
	free (self->editor_filename);
 | 
						free (self->editor_filename);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void refresh_prompt (struct app_context *ctx);
 | 
					static void
 | 
				
			||||||
 | 
					refresh_prompt (struct app_context *ctx)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						// XXX: the need for this conditional could probably be resolved
 | 
				
			||||||
 | 
						//   by some clever reordering
 | 
				
			||||||
 | 
						if (ctx->prompt_event.poller)
 | 
				
			||||||
 | 
							poller_idle_set (&ctx->prompt_event);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// --- Configuration -----------------------------------------------------------
 | 
					// --- Configuration -----------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -5860,10 +5868,10 @@ input_maybe_set_prompt (struct input *self, char *new_prompt)
 | 
				
			|||||||
		CALL_ (self, set_prompt, new_prompt);
 | 
							CALL_ (self, set_prompt, new_prompt);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TODO: do this in an idle task so as to not call this unnecessarily
 | 
					 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
refresh_prompt (struct app_context *ctx)
 | 
					on_refresh_prompt (struct app_context *ctx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						poller_idle_reset (&ctx->prompt_event);
 | 
				
			||||||
	bool have_attributes = !!get_attribute_printer (stdout);
 | 
						bool have_attributes = !!get_attribute_printer (stdout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct str prompt;
 | 
						struct str prompt;
 | 
				
			||||||
@@ -13290,6 +13298,10 @@ init_poller_events (struct app_context *ctx)
 | 
				
			|||||||
	ctx->autoaway_tmr.dispatcher = (poller_timer_fn) on_autoaway_timer;
 | 
						ctx->autoaway_tmr.dispatcher = (poller_timer_fn) on_autoaway_timer;
 | 
				
			||||||
	ctx->autoaway_tmr.user_data = ctx;
 | 
						ctx->autoaway_tmr.user_data = ctx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						poller_idle_init (&ctx->prompt_event, &ctx->poller);
 | 
				
			||||||
 | 
						ctx->prompt_event.dispatcher = (poller_idle_fn) on_refresh_prompt;
 | 
				
			||||||
 | 
						ctx->prompt_event.user_data = ctx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	poller_idle_init (&ctx->input_event, &ctx->poller);
 | 
						poller_idle_init (&ctx->input_event, &ctx->poller);
 | 
				
			||||||
	ctx->input_event.dispatcher = (poller_idle_fn) on_pending_input;
 | 
						ctx->input_event.dispatcher = (poller_idle_fn) on_pending_input;
 | 
				
			||||||
	ctx->input_event.user_data = ctx;
 | 
						ctx->input_event.user_data = ctx;
 | 
				
			||||||
@@ -13528,7 +13540,7 @@ main (int argc, char *argv[])
 | 
				
			|||||||
	config_schema_call_changed (ctx.config.root);
 | 
						config_schema_call_changed (ctx.config.root);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Initialize input so that we can switch to new buffers
 | 
						// Initialize input so that we can switch to new buffers
 | 
				
			||||||
	refresh_prompt (&ctx);
 | 
						on_refresh_prompt (&ctx);
 | 
				
			||||||
	ctx.input->add_functions = input_add_functions;
 | 
						ctx.input->add_functions = input_add_functions;
 | 
				
			||||||
	CALL_ (ctx.input, start, argv[0]);
 | 
						CALL_ (ctx.input, start, argv[0]);
 | 
				
			||||||
	toggle_bracketed_paste (true);
 | 
						toggle_bracketed_paste (true);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user