From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from gatech.edu (gatech.edu [130.207.244.244]) by werple.mira.net.au (8.6.12/8.6.9) with SMTP id BAA26298 for ; Fri, 7 Jul 1995 01:15:27 +1000 Received: from math (math.skiles.gatech.edu) by gatech.edu with SMTP id AA09214 (5.65c/Gatech-10.0-IDA for ); Thu, 6 Jul 1995 11:15:13 -0400 Received: by math (5.x/SMI-SVR4) id AA06183; Thu, 6 Jul 1995 11:11:27 -0400 Resent-Date: Thu, 06 Jul 95 16:11:49 +0100 Old-Return-Path: Message-Id: <21468.9507061511@pyro.swan.ac.uk> To: zsh-workers@math.gatech.edu (Zsh hackers list) Subject: Re: Small display bug In-Reply-To: "heading_anthony@jpmorgan.com"'s message of "04 Jul 95 17:12:00 +0800." Date: Thu, 06 Jul 95 16:11:49 +0100 From: P.Stephenson@swansea.ac.uk X-Mts: smtp Resent-Message-Id: <"8xpUL.0.SW1.Tq_-l"@math> Resent-From: zsh-workers@math.gatech.edu X-Mailing-List: archive/latest/158 X-Loop: zsh-workers@math.gatech.edu Precedence: list Resent-Sender: zsh-workers-request@math.gatech.edu heading_anthony@jpmorgan.com wrote: > > A little display problem I've encountered: > > Let _ be the cursor > > % bindkey -e_ > > Then hit -t to transpose words > > % -e bindkey_ -e The problem is that refreshline() is clever enough to insert a new '-e ' before the bindkey, but doesn't hang around long enough to delete the final -e. I think I've seen similar behaviour a number of times, but this is the first reproducible one. This fixes it by 1) if it's possible to clear to end of line, do so if the old line hasn't been used up when the new line is done (this should fix your problem) 2) otherwise, output some extra spaces (this may be overkill since 1) should cover most times there's a problem). Very likely this depends on Zefram's recent zle patches. *** Src/zle_refresh.c.ceol Wed Jul 5 14:27:13 1995 --- Src/zle_refresh.c Thu Jul 6 15:59:29 1995 *************** *** 486,491 **** --- 486,493 ---- if ((j > i + tclen[TCCLEAREOL]) || /* new buf's spaces early enough */ (nllen == winw && nl[winw - 1] == ' ')) col_cleareol = i; + else + col_cleareol = nllen; } /* 3: set character for first column, in case automargin stuff needs doing */ *************** *** 497,503 **** /* skip past all matching characters */ for (; *nl && (*nl == *ol); nl++, ol++, ccs++) ; ! if (!*nl) /* we've finished writing the new line */ return; moveto(ln, ccs); /* move to where we do all output from */ --- 499,505 ---- /* skip past all matching characters */ for (; *nl && (*nl == *ol); nl++, ol++, ccs++) ; ! if (!*nl && !*ol) /* we've finished writing the new line */ return; moveto(ln, ccs); /* move to where we do all output from */ *************** *** 506,511 **** --- 508,522 ---- if ((col_cleareol != -1) && (ccs >= col_cleareol)) { tcout(TCCLEAREOL); SELECT_ADD_COST(tclen[TCCLEAREOL]); + return; + } + /* otherwise, if we've finished the new buffer, dump out enough spaces */ + if (!*nl) { + j = strlen(ol); + for (i = 0; i < j; i++) + putc(' ', shout); + vcs += j; + moveto(ln, ccs); return; } -- Peter Stephenson Tel: +44 1792 205678 extn. 4461 WWW: http://python.swan.ac.uk/~pypeters/ Fax: +44 1792 295324 Department of Physics, University of Wales, Swansea, Singleton Park, Swansea, SA2 8PP, U.K.