From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1222 invoked from network); 23 Apr 1999 00:07:59 -0000 Received: from ns2.primenet.com.au (HELO primenet.com.au) (?Qf7Gkbz+nGBYjCMtFyumKJjGUyRR38pv?@203.24.36.3) by ns1.primenet.com.au with SMTP; 23 Apr 1999 00:07:59 -0000 Received: (qmail 24099 invoked from network); 22 Apr 1999 15:46:01 -0000 Received: from sunsite.auc.dk (130.225.51.30) by 203.24.36.3 with SMTP; 22 Apr 1999 15:46:01 -0000 Received: (qmail 25191 invoked by alias); 22 Apr 1999 15:43:22 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 6073 Received: (qmail 25183 invoked from network); 22 Apr 1999 15:43:15 -0000 Message-Id: <199904221543.AAA09973@pop1.ngy.3web.ne.jp> From: Tatsuo Furukawa To: schaefer@brasslantern.com CC: zsh-workers@sunsite.auc.dk In-reply-to: <990421090539.ZM11007@candle.brasslantern.com> (schaefer@brasslantern.com) Subject: Re: Patch available for 3.0.6-pre-0 Mime-Version: 1.0 (generated by tm-edit 7.52) Content-Type: text/plain; charset=US-ASCII Date: Fri, 23 Apr 1999 00:07:13 +0900 X-Dispatcher: impost version 0.99i (Apr. 6, 1997) Hello, Bart, Thank you for quick response. Bart> There are other programs than zsh that would be confused by this Bart> behavior. Yes. (But I didn't know yesterday.) According "termcap & terminfo" book, UNIX assumes that tab stop are assigned to 8, 16, 24, 32, .... So, I don't have to think that TAB stop is valiable. Bart> Am I wrong in thinking the fix for this is `stty -tabs` ? I tried it. And this works completely well! So, `stty -tabs` are good solution. But it is not a perfect solution for perfomance. Bart> but as a frequent ssh-over-28.8-PPP-link user, I'm sensitive to Bart> issues with speed of screen refresh and I'd rather not be Bart> needlessly penalized. I think that most of users is NOT affected by this patch. Because NORMAL terminal has RI= entry. If the terminal has RI= entry, zsh will use it. If it doesn't, zsh will use another method (TAB will be used). So, maybe, I think you will not affect any more. But, I am begining to think that it is not interesting to apply degrade patch. So, I wrote a new patch. :-) Hpterm does not have RI= entry. (RI is relative horizontal cursor move). But hpterm has ch= entry. (ch is absolute horizontal cursor move). I added the code that zsh supports 'ch=' entry. And I found that zle_refresh.c has two similar function. (tc_rightcurs() and singmoveto()). I modified tc_rightcurs(). tc_rightcurs() is originally absolute cursor move. Now, tc_rightcurs() is relative cursor move. Because tc_leftcurs() is relative, they are a couple now. (If you want to move absolutely, use singmoveto()). Here is the patch: diff -ur zsh-3.0.6-pre0/Src/globals.h zsh-3.0.6-pre0-new/Src/globals.h --- zsh-3.0.6-pre0/Src/globals.h Wed Apr 21 18:53:47 1999 +++ zsh-3.0.6-pre0-new/Src/globals.h Thu Apr 22 10:57:01 1999 @@ -614,7 +614,7 @@ { "cl", "le", "LE", "nd", "RI", "up", "UP", "do", "DO", "dc", "DC", "ic", "IC", "cd", "ce", "al", "dl", "ta", - "md", "so", "us", "me", "se", "ue" + "md", "so", "us", "me", "se", "ue", "ch" }; #else extern char *tccapnams[TC_COUNT]; diff -ur zsh-3.0.6-pre0/Src/zle_refresh.c zsh-3.0.6-pre0-new/Src/zle_refresh.c --- zsh-3.0.6-pre0/Src/zle_refresh.c Fri Sep 26 10:42:19 1997 +++ zsh-3.0.6-pre0-new/Src/zle_refresh.c Thu Apr 22 20:47:04 1999 @@ -808,20 +808,8 @@ } } - if (cl == vcs) - return; - -/* choose cheapest movements for ttys without multiple movement capabilities - - do this now because it's easier (to code) */ - if (cl <= vcs / 2) { - zputc('\r', shout); - vcs = 0; - } - if (vcs < cl) - tc_rightcurs(cl); - else if (vcs > cl) - tc_leftcurs(vcs - cl); - vcs = cl; + if (cl != vcs) + singmoveto(cl); } /**/ @@ -841,14 +829,16 @@ /**/ void -tc_rightcurs(int cl) +tc_rightcurs(int ct) { - int ct, /* number of characters to move across */ - i = vcs, /* cursor position after initial movements */ +/* ct: number of characters to move across */ +/* cursor position after initial movements */ + int cl, + i = vcs, j; char *t; - ct = cl - vcs; + cl = ct + vcs; /* do a multright if we can - it's the most reliable */ if (tccan(TCMULTRIGHT)) { @@ -1060,23 +1050,29 @@ { if (pos == vcs) return; + +/* do a horizontal position if we can */ + if (tccan(TCHORIZPOS)) { + tcoutarg(TCHORIZPOS, pos); + vcs = pos; + return; + } + + +/* choose cheapest movements for ttys without multiple movement capabilities - + do this now because it's easier (to code) */ + if (pos <= vcs / 2) { zputc('\r', shout); vcs = 0; } - if (pos < vcs) { - tc_leftcurs(vcs - pos); + + if (pos < vcs) + tc_leftcurs(vcs - pos); + else if (pos > vcs) + tc_rightcurs(pos - vcs); + vcs = pos; - } - if (pos > vcs) { - if (tcmultout(TCRIGHT, TCMULTRIGHT, pos - vcs)) - vcs = pos; - else - while (pos > vcs) { - zputc(nbuf[0][vcs], shout); - vcs++; - } - } } /* generate left and right prompts */ diff -ur zsh-3.0.6-pre0/Src/zsh.h zsh-3.0.6-pre0-new/Src/zsh.h --- zsh-3.0.6-pre0/Src/zsh.h Wed Apr 21 18:53:49 1999 +++ zsh-3.0.6-pre0-new/Src/zsh.h Thu Apr 22 11:07:22 1999 @@ -1249,7 +1249,8 @@ #define TCALLATTRSOFF 21 #define TCSTANDOUTEND 22 #define TCUNDERLINEEND 23 -#define TC_COUNT 24 +#define TCHORIZPOS 24 +#define TC_COUNT 25 #define tccan(X) (tclen[X]) -- Tatsuo Furukawa (frkwtto@osk3.3web.ne.jp)