diff options
Diffstat (limited to 'edit.c')
| -rw-r--r-- | edit.c | 30 | 
1 files changed, 28 insertions, 2 deletions
@@ -107,6 +107,21 @@ int lookup_edit_function __P1 (function_str,funct)      return 0;  } +/* return pointer to any unterminated escape code at the end of s */ +static char *find_partial_esc __P1 (char *,s) +{ +    size_t len = strlen(s); +    char *end = s + len; +    while (end > s) { +        char c = *--end; +        if (c == '\033') +            return end; +        if (isalpha(c)) +            return NULL; +    } +    return NULL; +} +  /*   * redisplay the prompt   * assume cursor is at beginning of line @@ -114,12 +129,23 @@ int lookup_edit_function __P1 (function_str,funct)  void draw_prompt __P0 (void)  {      if (promptlen && prompt_status == 1) { +        char *esc, *pstr;  	int e = error;  	error = 0;  	marked_prompt = ptraddmarks(marked_prompt, prompt->str);  	if (MEM_ERROR) { promptzero(); errmsg("malloc(prompt)"); return; } -	tty_puts(ptrdata(marked_prompt)); -	col0 = printstrlen(promptstr); /* same as printstrlen(marked_prompt) */ + +        /* if prompt ends in unterminated escape code, do not print +         * that part */ +        pstr = ptrdata(marked_prompt); +        esc = find_partial_esc(pstr); +        if (esc) +            *esc = 0; +        tty_puts(pstr); +	col0 = printstrlen(pstr); +        if (esc) +            *esc = '\033'; +  	error = e;      }      prompt_status = 0;  | 
