Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: TTY output mangling when userdirs populated by tab expansion



On Mon, 21 Jul 2008 17:09:41 -0700
Phil Pennock <zsh-workers+phil.pennock@xxxxxxxxxxxx> wrote:
> Confirmed with a fairly recent CVS-built zsh binary:
> 
> ...% ./dbg/bin/zsh -f 
> redoubt% PS1='%?[%y]%~%# '
> 0[ttyp4]~% cd /var/home/docs
> 0[ttyp4]/var/home/docs%     <hit enter to get a preserved line>
> [type: cd ~<tab>]
> 0[ttyp4]/var/hocd ~
> [hit ^C]
> 1[ttyp4]~docs% 
> 
> It looks as though the line-length gets recalculated and the post-prompt
> stuff redrawn without the prompt being redrawn, so the text overlays the
> prompt and everything is confusing and ugly.

The obvious thing to do is not to recalculate the prompt length if
you're not going to redisplay it.  This is part of the hackery
associated with ALWAYS_LAST_PROMPT.  This may be OK---I think the case
where we do need to redisplay the prompt at this point in the code is
where the existing prompt is not kept, i.e. quite specifically not this
case.

Index: Src/Zle/zle_refresh.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Zle/zle_refresh.c,v
retrieving revision 1.70
diff -u -r1.70 zle_refresh.c
--- Src/Zle/zle_refresh.c	12 May 2008 13:50:43 -0000	1.70
+++ Src/Zle/zle_refresh.c	22 Jul 2008 19:43:28 -0000
@@ -1118,7 +1118,7 @@
 	/* cheat on attribute unset */
 	txtunset(TXTBOLDFACE|TXTSTANDOUT|TXTUNDERLINE);
 
-	if (trashedzle)
+	if (trashedzle && !clearflag)
 	    reexpandprompt(); 
 	resetvideo();
 	resetneeded = 0;	/* unset */


-- 
Peter Stephenson <p.w.stephenson@xxxxxxxxxxxx>
Web page now at http://homepage.ntlworld.com/p.w.stephenson/



Messages sorted by: Reverse Date, Date, Thread, Author