From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20381 invoked from network); 26 Mar 1997 17:57:33 -0000 Received: from euclid.skiles.gatech.edu (list@130.207.146.50) by coral.primenet.com.au with SMTP; 26 Mar 1997 17:57:33 -0000 Received: (from list@localhost) by euclid.skiles.gatech.edu (8.7.3/8.7.3) id MAA17724; Wed, 26 Mar 1997 12:43:52 -0500 (EST) Resent-Date: Wed, 26 Mar 1997 12:43:52 -0500 (EST) Date: Wed, 26 Mar 1997 17:46:28 GMT From: Zefram Message-Id: <11734.199703261746@stone.dcs.warwick.ac.uk> Subject: prompt generation X-Patch: 233 Resent-Message-ID: <"bz38g.0.qK4.M1MEp"@euclid> To: zsh-workers@math.gatech.edu Resent-From: zsh-workers@math.gatech.edu X-Mailing-List: archive/latest/3034 X-Loop: zsh-workers@math.gatech.edu Precedence: list Resent-Sender: zsh-workers-request@math.gatech.edu -----BEGIN PGP SIGNED MESSAGE----- A while ago, someone sent a patch concerning prompts: > Bug fix: regenerate prompts more often - necessary when term size changes. >Previously if you set the terminal width less than pptw (prompt width on >line) there would be a multitude of illegal read and writes. >Now the prompt stuff is synchronous with the text buffers. However, that reverses something I did to prompts a long time ago, reintroducing the problem I fixed. Regenerating the prompt like this makes it possible for the text, or even the length, of the prompt to change while editing a command line, and zle tends to assume that this doesn't happen. The solution is to generate the text only once, and have its widths calculated separately. This patch does that. There is now one interface promptexpand() to perform prompt expansion (and nothing else), and another interface countprompt() that examines that expanded text and calculates the height and width taking into account the current window width. This bugfix should really be applied to 3.0 as well as 3.1. Some manual merging will be required. -zefram begin 644 prompt_patch.gz M'XL("/?E.#,"`W!R;VUP=%]P871C:`#S*SC."`!BEB#``8`K=B.]K=O'7T!!&5+D;-OQ\^/(AM]5%57 M5=?5:+5:XB*=[DR609@'T?:TUCLXV-OI#G;ZNZ([/!SN'PX'M=[V[OYWG4[G MEJY[A_W^X7#ONU;Q'_X6_>[N7KO?W>\*:A*B)N"?FUYE;Z*WXDA<^?E[_V.6 MIT%TU9#-;?$H]"/\@OWA'PZ9+:.IJ!^)'T[/WIT\>?92/'HDZG&2O=GRMW!$ M%(7-,?;?:8G.*Q$G>1!'`N`.HMQ/D]3/A9L)5R1IO$ARD?G_6OK1U!>MG>_J MHA;,&C37JZVW3?$96W#-Z=Q-10N@`D"39/W_>%EV`LEZF0H-7:KIA&$\;/$`XHF?Z+OS%-+$6 MA2]JY94)WW`[3MS5SV:I[^-P[GVC*/5T/:6\(/6G>9Q^A-4B3RPS7_P/DDL8 MCA`R-8K]/Y?\$.J[NUC"0+\&#_ MMP3HLXXMB`^*K"&ZBAGPLZGQ,P#_B;O2DEK@*HPG;IAMSXUH#V"[#N'_H`M: M8'"@M4!%5]("`U08E5I@,!BU!\.>T@$G_[@\.3^3XI4Q%1'W\J/K./7P6P;, M4WR2,HNT1>N0*HB"WU6"!5L.1IE6Y'ZO+P>&P7TFH_?Y!>W\P4H0R2BA)\LER-I9MP!," M6H!M"+TZ-7*7@JH*$V`N[JA8KM=4DURG0>XW^FW1^.G\]/+DW?'YW][UWUTV M>9ZV7$!W)P7"SW0;<.4RC41C&67!5>1[$MAF-H\+#7J^21 MWL$`3U3%(T`Q^H1)"(0/<>`UH>6S)%X)7()UBCW;ZD<"I`R!NDQ`JS&5C5*& MI)RBH4:@ MT@ZRS,\;%\].SRXNGYZ>-9NLR42C'F2S`.0\C+0*+H*[LA&\6)^TJ!^"8OQ\ MIX%CI3%Q]93;:.E:D2(KPU-K_(V%9OU61+'MXMGEY3_Q&.OT3)?7%R?_]?RD MV90Z?*=%G*)V73 M\Q]>7IP8Z1,O03*D;KJ>QZ$O:#RB);)8S-QT6]K[GZ!;5N([UII9[OEIRH2= MS<)E-F]838Q,70-B@XE:0?]Z`U8J[%K%$DT!NOTM(?5SM&5@_\G?^N"+*+YF M>%U0OXLD]'-&0NK8&GZ/8L<9*T5:H;=>G_UX\L\?7AZ?/WUV_.3'YAJ-IMBI MI-C68P1`PZB"$OXRIGW&]-WS@X_SD].FI;A*%5_%YOD M22MAM-R_;P3CW6!3WEH8QTFELW:`SEI/.VOE?NS/CP[[U?Y\;[C7[HU&!5MO M121NM26)#7!8QLY'Z7AF0V-@1Q?5,L9,KK);K#F-`:EGJS`:U9@9&R@9F@"J M5Z^HBXQ=`KWLIA4=98,Q@WW+&I\X!@HZ%HPC^$2C(Y$Q!*;FL&"N_1]14U+. M-O/TX**)9RC'"IP(]ZVII=B:8;(8MKKUV;U\S-OS_2Q!-PR6XB!N?LOGV?(-;L]S-@ZE4AI-D7&[*TV4TS5!)UM4# M9%0OCO)IO(QRBJ-FD[:@CB8L!/H!1KF>UV@*^,3(*`<"A=05C!#2`QZU4%&T MQ(<@"R8A'JY)ZF=^A.O%P+Y>3`-Q!6K9EDX`K4-:!MUK@I"69-`]]"B5OPWP M>``=L!NM/EN&(4)^E<_5<2'!NX9CW@4,`4R8RM9A.<]P)*)@ZLL#RR/VL8Z3 M#'SVQ,./*7SD8VLTB^+"_4V*.`6M/0_\@BR9-CQV&C2TEZA949NA^#/0N&Z) M-B7@M2:68?.6G`]H"\O,?+!5Q&DN%L'5/!<37RQB+Y@%<(*&;DX/SV*P%?(Y M'*:3!&@5;;$ZO_*];>EZ\81P3C:2[`@03;PC8!O$'`[&#,]%$"=Z/#U"@)$N MC8O+EZ^?P$&9-9O8=0I=I[(K39MXCH,&&CS1!E&CKEA*_/X[D_[[(\UF,@L$ MA#J++<[`_8U\W_,!,K#.EHD'B"$N&(OGDZ5-5*D!24+?_4",I1A"4]&BX;85 MA):&'DSG'!%$I#MX6@7XC=G"GWR"A3B>(01[1("6!W;&+>6MLH"7ZX/(7\\# M.&\!&6L'@RCSTQPW*T!M&E)\)\CG&-ZI8`U<2G)\`*O)66PX MH+U^_F4&9"K2CG:XL)EW_:>9'\U#I1(.WRO,1!_ M-5\[_/"0,X)%U9#;J@$$0RMELCH?;QE9@!]BX;M1IAE.V<4IBCR@#SSYW\L, M5$`,CD+B9OR4##PM%Q)>E%PXL_TT*VH99AFR,LH[H#819]$\`T?W]OV(+27- MJ,P:R$7H`P&:)K2SS*?0`-I$2Z`PM@`J4@.>I$7HS_)#4%8D&E&0!VX89%). M"4LWU>ROL$FLMC72("4@F98$W**)Y9WP)-#_()`0?>?L^^P,T/$+MZK!^[MA;!72PGGW5[LD. M,.OW0$9S/$P2>3QDZ+0:/7M3L`$PY%ZGTS)/&W1>YA0UL3>VW/"Z MMFT(`#)OS++&.[&6QZRDE:MFRBL+I6AA8800ENWA9PB&:&NV0&.!@MP%"VL" MLN)V8QK^/?Z[,>SES]Q[!Z#U.`3G)[!D^,GEZ=_QY#]=X;W4&;?X0P< M+)58*(()]"S4=LT6:(H#:JJ!ME/AID!$3T/O.ORH(X%`.Z-_`"IYME"=)X@[ M[!M^4D!9VO>\1?`;#7W3N6>G;*29"$9'"OX"N@U!9/N]^BB0U"7@U+:2%05, ML_5S=XL64!PLMPH`ZPB*@ILMA4V3^WEMN@#L'2:"WERB0!V3+9B%,8D;'+9Y M!.HC7"ZB3,=-*.2!,^I'&(R2XVIE,:O5-,/0#REQ%'O#!LBEG(-,1- M048Y$UC<27:A$M`3.4LD'`SX8"5#"#,.WKPZOGSV[L7Q/]Z"IL@R.Q.?=V6E M40X."5B\?J*>@A):@K^=+\`)6:C&/%CX[W+ZDZLV77X2><2,G5)`]-7YRQ>O M+B]>_W!Q24'1#N8CX)0)T>L%4L`G"C)*/CY[=G+\BLIHN*N605`0LFIHMB`U M8?853JT,_2E\TL0GM0SZ9R.>'U]"`?C8!& MD]JCI_X'3`BQRCWUPY:70;."ENM@BU%R\R;F_2.+438/PHYC[ MH5R"U>-6(;BGVE MKR8].32;B9+6"(EW/`6&R=C#(,N6JNDDWTBG.)>]MN^TZVL"6>K4;2M@T#DP M,2R%6PA;&J)I'8&F0M3@Z^9GL2,V;W1MHBJL6!,I,Y->$'7(/\#R0*)X2BAO MGHL&_B0#/O&!'V$I61XAX^EEB[*RTH[7.9T1FW[RT[@M3B/0LVW*9KF\V-DR M1(4V!>97`B8*#%^)#\R8)=("P22`GR(#*?VD^4:@NZ69"DZ_7$5:4C];AGDA M[I>`+>=&0.?P8T>+B?&0$`]RU@PVE'=0AC9/LG!!2%SP:OW%Q"=D"&5"E;%6 M`AQ$7L"^,>![=15:DTS\_-H'@<2T(3;C8%Q5_48/2[O#R@_#3B9^T9*$5:LU M"%-[$L4P30T)AD<+09"6^!7@`F-ABT"YLTKGC:OP$^R`N*SO9`LD@K^*H]2W M\ZSH)C3JU%!E]W]S\WZ]15)?9Y'0V()%(BV^K&"09,V";6OLD:S)-4G:')$] M"]9(_4[62+W*&JEK:P25()J3DK/!)L_&LNU/K@]N&(!^-LH>[&Y?"2P?_V#( MP#F=O0^2!!8"8R!M2_V1SV4H)LN!2[YDQJCCZR'\!_`7,`VQ8":PM_@;N0\/ M:E%7Y;6&W7Y[V-WCQ!:9W*-N>V`J/LK_J(BJFM`6EP,")*=<7!DBL^R M%3`N54!SZ^V6_(6\#K^_WS*Y018USK-Q"X6\&/'"'))`M0)9?OZ9YIXMWO3> M5M<:#/L'[>%@OY#0GKI@90`8A\6&Q]R`UQ(:15*HZI<2R"I/NNIT%Z)TB+AI MKL0/K="O0)`>XR2.,ULPR4H>/S'`WGY[L+]7R#K?#V6UO20Z5.\@D:G>=^RQ M=G]OQ7\Z?Q#L*QE@-&P/=_R7M3%$-D^@QDJLOJ M%A,.E0F[6BG89H>>JJ>[L:?K=$RD#7#5$U%!0-/*X'.DSCD2#;4"U@2I_N,J M4#H]QNG&QJS``#F`@CPS[`[:PYZNUKXOE4!'W_"IOD(K1([.9QNGVR6'[%5N MOEE'S)W6Y]9.D:0%>I;I>T<0U,G\92I6\M[^?GO4'1C>J^6+V0)%96-SL;/I M[6Q^W)",;*:UYGTJL;*&?>QL+CJ;W@:#2OB2>)"\?%:IKYHIWLHRBO@*1_3; MPO/8`!J,\20D`]]W(U;I31Q_&]7+I-8<.P;,E0XA@:LDLKZ7*:B[16:B MIL)#F332KLTP"$W1PGO#I;?M;I#A+O.YQZ'9XAZ2;!'@71LT9@,`N=[2W&#J MO>594R$#]V*(*DD==4?M4<_4O=64!R+71A,/J0Q_&[)*2C]#X-%'#^GI(^K; MK+(.]KO-,5="['N:",Q MLAK+GL+7$*Z2O\`,'0W-I?):]:Y4'2Z;N!)5)*+4 M\.;6^M7_4CF<>&-_KST\,!>C[XC2'8%L*9/OZX&LW(?=07MW,#3[L/Y03RV3 M0F6^Y-U?VQV0)78R1-&T[3#-@B4F.;_3S.=WF!F.5J:$G98O:L5BEK!?YH5- M>3;+2@0Z0E8IQ"E"KBMADXM\;RM9NK*35GD#6_*?O=9)Z;AD)LY'=0FZV9/+(G5]LVU1/( M9'Q2FM%^LT(YJVSJ]2RRF[2GAM8DN"DKJ:<1H@3*FMTQ+$'Q5=^7%T!5:*%A M.38.5PH^EHDUB3*'<.+08Z6L;KG!4.K]2/1'HZ;B46H";XG^_DZ/N#@-GO-X MF8-J4!&*C`2"!B/(QK+23>\*3!U$Z(:_.4`%X9,^8;/J+??WNU;MNW7J#2MKV[78U63&.VE5=/M M*JMJDO6*BIZC;N!5.-YPNP8JOO]D*B-0ZU6,S-9H22]JKXI#2.J5IE4B\=4Z MBF*U-(&J^S;)W%(ZE>]BZBJXU!>+9:9SP&Z()?\?,3=U]Q1(*8;Z17W90&O- ME77*TZ;**R@A1\(2,:;BER.@Z[AT1695&1`97KCO`?@E)[CA$_/`<;P@U^17 M%+LML<"T@55I6CS\W@Q8C1.Q*M>Z>CK"LX7KRLXJ]<56DEFJ5-Y><%QDJSY"^G4==<9G(KK#,Y77V=P[GV= MP;G_=0:G>)W!,=<9'"DKSL->9W`>]CJ#\[#7&9R'O<[@/.QU!N>!KS,X%1<- M,*8F+S!8UQR:6M;O>IE!\[^5.Y'&_`*5X+J'C^Y2F5+-SHLB=EI@+`P&%8$H2'O*!<+U90`"_P'0E7 M8#$#=%U1>[>?\K?8P56N_NZPW][=+;['+Z<;C3GNX!N8XBW=!,4VE#)S>=*8 MFF2-]@X+]1!E1Y(.?W+8^-XT>9:('JC,RR<7E\=G3U^^OOSAY&_D2);;3\Z> MFC02.8KYE9]'RT5C([O:D-ZW<0+5\-=G3T_.GY^>G93GU0]NF7A)$]?EQ,5. M,BY+F=XNR&.W6=4V^&=+Y!6W1$M$I;L#71?=@>[M$UVMO)AMVDE[;,^ MRF0R3H5RZ]MQ^[I%D4FXA$DE^/\@K^C)O@6_K$YN>`9TEWS\ORG4\A5HV+(]DRYPL4<]/_`C,^3@J5"&C(@XB-P1#PU/&0NY.,E/"9^IY M(O\:7U*`I;O_6@8IOE8C`B`^!#`])/ ME)W+ZW"X4HW0UU:LWOQ0KG\C\;X6CTV@SX!RK1''7W-KD&T6XWC:*WG-Y=HR M>.;RP1P?S(NOLUCF09A5OM'WH/A&WZJ.>X>C@\-^]?M\>_WA?KO7'YD*H!M5 M6^5F[ZT7J13?G55?^^XL4XLX\3/S]A13CGBU]+/LMK>>9W,7JAB<;(VCT0*QG%#]'%'"(,6O MDU`X_7%$*E\ML[\_;/?W#[KVRV6D?I6O.O/\SF/O';XPM2TZ/?D:9#AA+T^? M-'6XBFJY7\NWHY$VC/FU1ZXNPRZ5%.,Q0"^.V=_O`02F_NK;02`NX_=@DE'E MI2RS_-_RKJRW;2,(/[N_@GFQ)9M*=%"69!<-BL)(@K9(X1A]2!H(M+2JB*PH M@:2DRK^^<^Q%Y.YR=F9WC6^^P_(0:]$U!>2;H63I3E01/0`NQ&"A\4<=0!\=6U\+J5 MQPBS!!_SPQ`#)PU/K=D"OXX,]A]PQ^LXGX.VEH(W\\`3"19=!!D6=4H\[>,&Y\0U>Z%HL!9W).MVT M96DA]1(_SK3@,/4U6-,4%\"_UVO*\I^A&WR:Y"L9[VQM1[5?@Y.&,:`3808E`';,%@?066BTU?!LA1;325M:U# M_@0$8J:JELR@B>*R@[G'SX44DZ)*5-0C.`1T MXV[%U.+=O)<">6*,;AB?^NNC^NOU#/]\YOG!671ZUHG\X#=1%/;Z=B]<`XJL MP1@?W`>=^>`^&)`U27\/4&8]#ZVU[C./AV$Q/\G4O)]LT`Y[@X$KGI,T7R"F M+_GEQ^>[J\LVO%R:(*)8S]!"6ZP?@67::NG7>4A5ZRY4IY5=W,I/U M[K`LFFRQOO_'Q>7ONH0$9HF/*31.V%C@;SH1&:=0PE#[PE/P&B)V9F0Q5:"M M=`2<1`=N#MU5)G7Z_9GFX?34M_6G,WC/I.VC_G.79E!E4ZT0PZ9F MT6@[<*U.45!5W(&0AF\Z]P'21U$)Y^LS+4AY1MVS[FA/2E]X.G3POGCI':]:1#MJ%6=9O+-APN/CI9,51ITLY?3.G;3* M!8MU=4D18][F%JACK\4,KPUT2SZ!3YB^ MM+V0ZQJ;BW0*C4WKO(`W*KVLT%F\;94V8",'^#C>3/`SL#/T3XVUU<%B:H6J/WO=R:[B3+-:+&EE+[;9) MNL5`43J'Z=!_U`-<39=;G@"\C]U(![6F6#G`KT3GC13X`EAN9_2FH[Q4IJZZ M=#FX;IB16P;[*^YFZCG?N"0_V[RN;NTETZ'2%_74&T9';J'^*40$=_2B6! MU?+F=Z_?7EXU*^V!UJ[UYK@L@\8SP@&B.N##0RWMF\Z3Y$!B6]PH3.GWBU'< M0W?G^+)N:`-_]%=V5/,^F:&1/Z(_`!)$O@+*IR4!3/)#^V.-"N1&DQX_VF,F M[MV"#/MA;]1Q;"A,PQ$<-$#T;Z$BO`HXK65`#\"VY!@"1GUGB%#!<0>UFDOG M;3RSPH\B03#8L36VZ0M3E3QFZ*F@>*HH$YR@)`E^I.6$J$MF#\&1;1HPYU4$ M/SV''QP'8_N11.8\.1HW&^ M!LVH$)/@A#/#1U0-!P290FF#^G#R(*&)2/22J;JD#9]UUE2F*=1+!OMT!`%_@&5'&\W"RM# MZ6R_$Y\7H4M=4F:XZ76211TKB-(E$*,&'KC>V3P>UQ;BP+7>A2J,+N4OXY*X M/I"LY'/]ZB0CR9;MB1`\.96\'ME>)QQ&P[)(I$27;0*+83R)8:.ZEG(W=@!! MT=8Z(629C(7#`-:$3%@%+%O%#')$7\25Y^MG*CT MUZRPO7;-G`2)T=/PV9(2^UMO/>C/"0RFV M6N;:4]GI0SO,=E