degesch: work around a libedit attribute issue
This commit is contained in:
		
							
								
								
									
										19
									
								
								degesch.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								degesch.c
									
									
									
									
									
								
							@@ -1089,7 +1089,6 @@ input_el_show (void *input)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	input_el__restore (self);
 | 
			
		||||
	// XXX: the ignore doesn't quite work, see https://gnats.netbsd.org/47539
 | 
			
		||||
	el_set (self->editline,
 | 
			
		||||
		EL_PROMPT_ESC, input_el__make_prompt, INPUT_START_IGNORE);
 | 
			
		||||
	input_el__redisplay (self);
 | 
			
		||||
@@ -5939,18 +5938,32 @@ on_refresh_prompt (struct app_context *ctx)
 | 
			
		||||
 | 
			
		||||
	struct str prompt = str_make ();
 | 
			
		||||
	make_prompt (ctx, &prompt);
 | 
			
		||||
 | 
			
		||||
	// libedit has a weird bug where it misapplies ignores when they're not
 | 
			
		||||
	// followed by anything else, so let's try to move a trailing space,
 | 
			
		||||
	// which will at least fix the default prompt.
 | 
			
		||||
	const char *attributed_suffix = "";
 | 
			
		||||
#ifdef HAVE_EDITLINE
 | 
			
		||||
	if (have_attributes && prompt.len && prompt.str[prompt.len - 1] == ' ')
 | 
			
		||||
	{
 | 
			
		||||
		prompt.str[--prompt.len] = 0;
 | 
			
		||||
		attributed_suffix = " ";
 | 
			
		||||
	}
 | 
			
		||||
#endif // HAVE_EDITLINE
 | 
			
		||||
 | 
			
		||||
	char *localized = iconv_xstrdup (ctx->term_from_utf8, prompt.str, -1, NULL);
 | 
			
		||||
	str_free (&prompt);
 | 
			
		||||
 | 
			
		||||
	if (have_attributes)
 | 
			
		||||
	{
 | 
			
		||||
		// XXX: to be completely correct, we should use tputs, but we cannot
 | 
			
		||||
		input_maybe_set_prompt (ctx->input, xstrdup_printf ("%c%s%c%s%c%s%c",
 | 
			
		||||
		input_maybe_set_prompt (ctx->input, xstrdup_printf ("%c%s%c%s%c%s%c%s",
 | 
			
		||||
			INPUT_START_IGNORE, ctx->attrs[ATTR_PROMPT],
 | 
			
		||||
			INPUT_END_IGNORE,
 | 
			
		||||
			localized,
 | 
			
		||||
			INPUT_START_IGNORE, ctx->attrs[ATTR_RESET],
 | 
			
		||||
			INPUT_END_IGNORE));
 | 
			
		||||
			INPUT_END_IGNORE,
 | 
			
		||||
			attributed_suffix));
 | 
			
		||||
		free (localized);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user