From 0dc136ec5f99f01fc12eaed1e18060d16f62b560 Mon Sep 17 00:00:00 2001 From: Aram Drevekenin Date: Thu, 28 Apr 2022 17:26:44 +0200 Subject: [PATCH] fix(compatibility): respond to bg and fg color ansi queries (#1358) * fix(compatibility): respond to background/foreground queries * style(fmt): rustfmt * style(clippy): make clippy happy * style(fmt): rustfmt * style(fmt): remove unused code --- assets/plugins/status-bar.wasm | Bin 559078 -> 559094 bytes assets/plugins/strider.wasm | Bin 592942 -> 593297 bytes assets/plugins/tab-bar.wasm | Bin 486372 -> 485429 bytes src/tests/e2e/remote_runner.rs | 2 + zellij-client/src/input_handler.rs | 40 ++-- zellij-client/src/lib.rs | 2 +- zellij-client/src/pixel_csi_parser.rs | 146 ------------- zellij-client/src/stdin_ansi_parser.rs | 199 ++++++++++++++++++ zellij-client/src/unit/input_handler_tests.rs | 22 +- zellij-server/src/panes/grid.rs | 25 ++- zellij-server/src/panes/mod.rs | 2 +- zellij-server/src/panes/terminal_pane.rs | 5 +- zellij-server/src/panes/unit/grid_tests.rs | 184 ++++++++-------- .../src/panes/unit/terminal_pane_tests.rs | 2 + zellij-server/src/route.rs | 20 ++ zellij-server/src/screen.rs | 37 ++++ zellij-server/src/tab/mod.rs | 8 + .../src/tab/unit/tab_integration_tests.rs | 6 +- zellij-server/src/tab/unit/tab_tests.rs | 4 + zellij-utils/src/errors.rs | 2 + zellij-utils/src/ipc.rs | 2 + 21 files changed, 433 insertions(+), 275 deletions(-) delete mode 100644 zellij-client/src/pixel_csi_parser.rs create mode 100644 zellij-client/src/stdin_ansi_parser.rs diff --git a/assets/plugins/status-bar.wasm b/assets/plugins/status-bar.wasm index 01424587934fc9c3e41dec5c888c1716b2bb0200..68ff8a321601cf720b36698540768df7326a0ada 100755 GIT binary patch delta 24207 zcmch`LUWxF91Bsvy-_Yj5Np53F&gc!{FB)47WXC*4^Vv*DC*87y1n6+9N4 z$yrh0y|6Zc;?RSvsNlV@6G5y0AOZt=#uiM>+REAL!2JWC zaIYR;PdHLt|iw$rdFWm=#J}@cxV4b-P-d$?w(w%vATK z*brOcw1Dx_+q&ImyF|3N=ATQ1z5HN;Z3>$y(i>5kNf^=DP#`go_wv;wyHViuR`odc zvddNVR`D2iAEX7AqI@y8$)lI=@~^Q?-i9>|(dyQXGrnE*Rppz&n05<{T>geH}7DiBQt!rhe%6l|U_ zkiozSd8oReOWt;k&pQ^lKD_}eDaf3f#8|Vy;8)*t{7N8sT7TB8VDhx84AV|df1Dq& znFDoZbmxV~0>fvdqU53(`5f(OnosTNm0uI-q51Vu!HoR-SV7UUXcm2uIzPx7pg|s; zp;@Iw;en%zY6ku#pW)Mw2mJHeL0Hzj+KlI&3%oo(w${vZ;0d)#g?cqlhg`Q`=**Dk z0{@zy%vYQX{5U_s{Vp-NA;<`Hdn3G{?VElUJ?#=`qH=Zfh+HJVk;A)>o2y4MXVx2XFZ?oQ!WOEjb8QsDbVvHaahft!oc z3LbeQfw6xFUS1Ft`PtUZjuswBfaV_uRxPNL^8wM7F~Yn-kR0ac$XrR}s+C&nwaEEI zj{(HhT?w3Bkg&23U9v}n6)zMQR!q` zGU{6Sp^%|lG8UBQhO73*S>z=SIh?8X?j_ySn6cZt{7m4Fm9gvy8kSV0-9(+e*Fm3@ zr-$WvZU#0lyB^4r5lQQ)SIJ6_nALykW?^h3iW)&>G=d6J7W-JvhRaUF!-LS2)fX#J z8Zp$bAK%Wh_BIyHVkx?vWy5VOYIJ;kJIiLpQioiAkY#bybP+tdJ?w#=3>;pPo^!T> zsDXGC1#KS9>7So(XF2b%gojwOF2vIDOHx1yr%AYp6d)AcL8DR))^CVOS)ZEz)y1Ow z6dvxj2B{jm2Z>9KNd~UnB+5pu`JjgKG2)`3+$r1zu0t0ChnD)QZkz6AK-#A%zJJacyC;UCEWg#zd_5 zQ5J#mAEgucNP#N~Bz*)>`5fcLrGW>xjt2JC)*#Lg z9uMr=rW3fl?J)v9wl@Hf)gI;51Fvq6BpsG)|JI+oYqJZRS)C_xFLq!6A#seh63fTK z4J8{Tfw?={67&8YO?lq@K+w*5>~cZE&b(S|Rbb7jc&M`LRDJAke?HaLP5L#z_=sT3 z1Jf=)NZ7HalBbPmG9^=kI6V@P)_a`Zy6Si@UQ^Y`^@Z2dl#l%I|uxu8OUuysIahRBbj4 zL`!=*uddS!*&+AzWFMfkIi(j{E7%d4(U+yN)pBTGR+_WAV6)55jhcSpz1L&RRagYD zE*@jD!m0x6>@lwV%i@dz*2!ZOE36K%jvix$!cu_U<1r>FtRAoq9^>l!R=MiH43BY2 zVP0VEv3JQ)Xf)8fJ;o;riv-rrW2~;g+IoyR6<8aOF`)v>glg-pDypH}T^?hf!s-HR z?J+)77%AEcO;Q*sn&B~St;?|rk~Zlc$M{HLq-b-G z@s`5KGR-{3j0!B(W0bD7WY$0)cEG0scBDkv|`V{BJg3^2dP*r+h7Q1=+iD)Q=ij8_y!=B|srf5(zScBi&@hSh81JY|8i+9-BcL!E7qvV_*&0g>lwVa zd5kv{MvbW9G4d2f9aG(7+<4oP5)LfVV|;F5IYvvM5gucS%B&Bp8d{++YOl{@9A0e| zYy=Ej@UIj`RbcnMPGO{II7WiPXgqm6#%zU=oje}nw^ikh2=f>}C@hCsAL=o7DwIqU z;xSBxk>0@`V~xT{Z#P<~FzUk~kMWwqLV;j{*yL*%Z8_Im^@JBkF;UIK=ud8+c1drCO;TF7>Z=={sF$6{?LVoTOG+bPK%0S zu+H%JCmbZ(@1Z79ropf@c&selgCuXS{@2}x>t2ji-favm6+7gyr�qC9`QMNz^qX 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 KMWO0V(*FbZF_KI}ZtlxLoK=9y=nd3N{m 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 M4o>6l8H)S=0V2_-Gynhq delta 69704 zcmcG12Yi&p^Y`vP&y%~$UBX=o$t8h27XpOPLQ4V&6=DGbNDCrWK`aLX5{eKA z@K7ZbA%Y+pH9=7VA|j&3j)IB>1x3V;mG?VOxm*C1pZ?z`A8u#1%$7)j?RuU^OH7hv{gGseOPon^(K~z$7eyUJqGVHe(IC;iXp1-)IL5CV(CzA;18*5I zCjXARX7l^_d_H^&-^y3>S^PP^ieGb{-#JIj72EhSu|&)hOT|L5fG-mB#RBm&|B0XD z-|`2;-ty<%;klAF<-=&@@0HEU&B}O zwR{Qh7&yV-;&1bJ_~X2kKf#aiSNN-Z=+pceem~#Mw~76HFW=Y#;{Gt0@yT#+8s98I2>Em)mG+$RV zIsQ7nu5^EVMxvM@v?2Mtj^_3Xr8KGKN{*b;r&|49(=2IS`t>yrDEw&AU40u%KiI=H ze-e)=dTm=+sqNOjf|nHCcw1gr$;=AoR*Ncb>s|$Vi|UV06q{cx>O8&yCF93uh87+e z-!v4Bny|0bH)Jp8DWxCh&Exz?(b!>K`5Q$K_uW@?|LAg_TH0aEc2Qc=cP{7kN;CTV zC0@U1(!fUeT(5r~8Q7Pnl_ux6rs(B$i<*o|*P+y+dq#CD&AV|O=jo+?-n5dq+Bc}N355-wr$e3f z&zePF4bGHSHmp@N@v&&F@|aNR!&d5^*j@1Br8i9eIE<$jwVi$|K1-%g<>^K0U6TPX zyX#J#QWSaj3FLfp_piwL@}7gdLD6IPcILjKpYHYZIz`!mtB`YhAPevg{qrP!me!i_ zx{Wt0`eyEiYHL^Ybin}Ltkg5F2Ipr=ee5uTqpY;`W zd*&GvO5KABdfp}zy4S=vJZqJx&)s6?ZFz3I31#ig0W@uI7Cv|BpQrRswSsbT_0K~3 zEIm}wk|XPneckZMpH+)S?C$~S(fw5M3;i?sd4dP(pNsX+7wNO~!t;95mM^pfGUkQH zB_v5N{n~*aEsJyTM}d~T=;E6b_)+cF`aBirlKQ+H^DetOoe#%8)pj=J&48Y0%AZfD zb@a?W<_q&P7k8?*j@bnrXYg4*n<~1=qbFNm8o)7Y?eIX}7yZ}DpXdaJBNuzlkzOgK4G#}vP&z5PE`6p6bEK`|Z&QB9e&QTc>_hZ88 zd|!LeD_Uxm^@Uva_*A};^9ReWzmwN+@eSIDIs67t+dGG+fZ8W>c#hzYl+`KVPt%M( zoX^`}eBK2-Oyb+i)I~5Y5sz{oQ-$B1pNifz9xb|PKQ6{#9@V^s{3MbKh5RFNOx9-3 zUKu&~>;ZjZv;zNjsEg3r=!-o;M?hLL<#^Oo{Bt>NRmrdjB8VL7nmDt8|)t9%?A z2919#g~hHcL*wzBS5m`2kr1tr>ThVM-a~usDG)qc#*6u$vc={6EJu3p(|jD~?`vnC z;iLJ%vg`No&I(T{TfL9hRd{My#X-0o{HwA~hhXcGe)|&d&v~7)t}pY-FrJ~sy}?(J z>VEtUlxLLXy$O@g&uDeuhLh4-t9Y9);H}H9d58Cb?a&@P&I4#$`vd+H)LmKZ$9x2B zn!7&XPe}YsS;ptQt%KLoZv6)N^|UvPB>NmZg?d`cZ{c9n(@uWN@8$K%ZuyQosGr-u zhr{u;=KldnJuT)({yhrqKk+yiR!#kxA4BrHksLiwh1!u{baID&)yp>jrYAFg*OQz7 zprkDOPk1sI&zBeYU=Hd%xMg_AC^~InY&$#7UlA7FaC02yN&l zkx}-;645G*f2yUg6p!=I%05^r;Ov|%`+60|sf}JMVzfush~4}PZOmFR1e@ojwPFcx zrQNhntm3W8eq1NkNqnVNv_XvIZOVS#AVzWCMvL5qkq0)3(>z@pvsu(aGIujP|730N zLn2XT{vT#(A3h{%YP%j1k=o5A!l}LVkcbvWb_0G~vu_cfqI$+wk*Iz1Fe=@!Rk$?A zHmiD@t*E|ij@E0dXn@(?xmB;ep#;@e5Y59SA=Q(#_szUy{)qNvi8!q$lWgsh{Jd*~ zE^AK!>;?nQeUhK~kI&Y=e^{g%Bm3}S;gLDzWo<)eN6Ln76Fp^~RkmX%$RagheqO%R#B_Z7<<@<}_|M}0qfCW^wbETp! zKdm)-LUiP+w(kj%q%C+tw1RR1JcxU~(kejig_h zsEaP|EE7%1^gdiJjtgwBvboQQXW$UHR>xER9I}pxuee&l=7tMGqT+2Q#65F*%Wg^EtTclXNM3)F|_1MC1|Emu5 zq7tp}xTqOW>oEU0F*ZdIDeDh>mh)3&P=K*Y;awu&Omt*fqBHi(A@H4YQ!_=5DiZ|u z`crSs_qFn$JEWKSqEYX($oJKSbF`o3`!bOpM4E;4Fw$(KuOe-&24w$-0NNnq6QpgC zevb4iq+cR!hx9Dc_8>Tq=cjb=+wy(EVPd!eYsex;%2AzumoZ{L>mDIgCsy4jVVIn> z1NYg<@8s@XBE{Y%BGReaRVe`cX^~)2QJsyMN|l)}29?n!MwJ`0G=Eq(l~1CA2(!6R z?S3WS|Mr1>tN~+Li~+B#LWqtp#vkEBj~E8?xt(feW5#@bHH(stYBnXE0%~hYJF9Id z>7ur!q^o)rCEe6^lyq0yQ__RzB>7rW65|V_VU6|qC>iC;pk%l&iIO3{dX(Jc^H9>) zSBsK9K82FrJ{Kju;BzDC>8lU^H)h>@aAF&?PQC_|bnvB9(%x5_l6JmiO0M#yP}0^H zjwNSVzJ`Ql`WjKv%Ga2ZmOck1O?)*dY3xg+q>)deq@gc@l5}4)VsMJDrYbk(Ilik^ zInb1M_VpyRyYCuGuJK(<$<4kxl;rv1D7nQKPswOs6H0FNMG>_YzDPzSg0 z8|fZO?U|ySt2HCIOE~=ze(p|SPRLL>&xf$u+)1iPLxU8^KLF&WaR2$|A-s%bVkx;F zTIRPZT&Oi6c+>?EsRR+>uizwVnF3ow6%C|voCOYXHO7B|PlRJ%8*E4h55h6?6dyEL zGw4g?H^O>2unLh_g2q0@iT?fBAeScKZE_VuPZOZ;zMwVoFhYC8emn45?o-*rrBjile|g2A~U%Qw4ou=0v47>?m?N&Y(xm zlFF%gkIwqH2t=QU%(Mb2a*h&{DhUGT@CjDAyG95w1B~h2g|u#($TidcbWSviCIrm9 zX=Xa5s;tn^)@hi4S-6Z-Dacpoot&sHw?`qj<$@HWuHhjrDl~g;I|clZ36xy8V4LOZrS?=ihGz6u>!@8qGy14ktNzf8zUsAV=g^FP zYMk0NG^4*7uXYQ~xL$3dcDFK`Q@;b$D7A-`Lm30rhJO1UJAAp&-jQmm&xOIIsjk>K=5xMKp*LQu5S)H*{ZQyX-CcYQ<|vOP-8o~3%05Oj=hz_6H{nQ zsfoz7BNupZvrW>sAWxixUEfHR)ayv3?6Z1PBZ(R{RwJlEL~s+PO!8xKkT;2$`tnup+-@TuHvFhw}HVKp=?=Yy7nayTB(Dg znl=2&9i%>MlJdq-^k@Yb>GqPUhTvlnX&?ApP8A9h{Xk2rHm&PPks1i6CY)Rxy|FOn z6iJ)hf!X;SPBo15S{TeSyc;{B3_4?=dUcwLA?{~r6JuAOLP`$K?Z%J1k`ivIF-N9&0u)J|ouaJ|Jws}k)Y%D2 zP1U(euahZ`Ag3eGf{sMV!jCJ^B`FgiyQnW{5%dp@iVRX2-6Pz9Fbw}^U%@~iuIs5sERQGgF}DI*bu%JkToH`R#}j)G*jv& zu-5EmCDOlJs1SN9EqbBr6lBl;wnTv|Sffjq2qW;%CJX+bmk8?*x&LQ5xnvB)yhlvl zl_34!mZZdDVZdY;$VvY<5`D=?{pd_>uErSBEc~YY8a={o`tO_QqAp=A!bmxk2xzHj zIIe(kRIura^b~d%Q%%S591j>(PvOk#goX}-SBXL#BrvWp)s~+UmMP9*H>ZKw)Sjps zR`}utxI*C#a^4W$fT3CbrS$$A!O@qanOfUej==v{?Q&V=VlIraC;{EfL3@Xd?J1KF zjrAeM8;<=sZY__ZVtp=M9qgUUuTC0H;D!mEAyVLTr-?H>B~0b$h0H1S!qsqhl74JB zV|Ih?$bCwK6-kj)RI#CoAq%Jsqh>}}~5<*KVNG7D9et@QcVY|Hi`Qe>IhJ^oIbuaxCymUHw zq=~hrxMfg?>bg-ey-#2KRqjsX<(UDI84s;zJ!f>Y>pMZmFE-Mugh z+5Zm9r;rFj8~(Qq5CIAQTLy@rg#S$gL}0@Ih5-iZ1Ag6r>CO(W3z0y`!~dEABJAPM z)H4zJ@VC+-1V8*ObqMhfe+wN#2*jVRLx@Iz4Hz~>UJyto2%!y%Ngx6Sp7?yKn~t?U z|AheDXEsswbwgar2UesYhD|Xlg@Q_mQqgHcq1ciXA>(RH)?H>ycq|-oG^Mt@8ysq4 zV~Rv=0U^jBfxJZRYIKQ!uB)L&s&3-6QPHmJA;~Y_k%b@;2WcwiV^j1xDTs)&lsa7^ zpo{1jKqvxU6fE_n>fusfqW0}M#AMxC__tzwzz!Sf#vvyI@rxQX$~!Pa$%jx{4O}-M z+=0Z7rbuKELc)A?Fs2&t?cs>K$GYLiVs*zlaSLpxQOD6CA+BTb6U#q6xMTH`DxLlX zE>v+IjDuhx4kC2(nMP8EUDqhZ20_Cx^jMw^TMvwsCK^#be_%59mS5@-tU(oFw-x{0 z6UXXjK^&4AG3MVJxSBY`^Ft63ibz2OhhSn3d;&*+nB>4w0yZC;L&`w}F-T6Yhm!|X zH8EJytJMaY48@y*;8-|faP<+DOT!tY0rpNhj6oCQ$draE4NxT=RcfP3GODDYN;su{+lSKv@lbaZs{6+J(dBZw`V1UXGvZ?T z!9Y(FQR~R!#9>ow`Mq$HB0->tfmQovkUgFP?Iu6KtH3_%!H?cK0d>mo6IwVeQSfkKG|Ft)6(YYMpr+r(i-@28o{R- zn8Ujeq_I|t6crC3_!5#8RMaz4DX8dBYX=~k$&k$y$YwYcpDDuik)5VXbrM7w0Ts|# zD|{X>CSJ80jEV1=s5*K?zy??{tp4w^8_?r;`q~@E!;n?~E8(?P+!iXLNrs4$U>oA> zx*`z`{N1_yBB=m>Nkmm>=zkDV)U7Iolk0H`%Mk)(v z8wO2x0n`mGVWFTv5DYgqkYTt}piWgV+6Ao&`K|ICNS&tOq+cjB@6QO)c*uWHb^jp_ zpU~ql7>F>D!87$Yr@$2G-$6|!zipz=hS)CmpJS#9S0gC07UBOLcR<`!=92$B>>-Cj zm!urBQWOYsk2O-&Of$y9SWrO@?LMTH%q%%!0p|?Bo^L+70-s@Oa686BF(ZzyVXff3 zVK$Iu+gM$}yYltUY4WN)A1x(VIMm{3K)%bh5iHc*F-I0q zDKw9eC~4ouurmlBRz()$b(`#K47vLOyrl~}x?fAB`?XqNbQ1p60egk&)}v$fd^Y4z zM71IQIcR3apX!!#ux4(5;j4@$=_E^q&@h4$OeN~@-l4#uH1oSAfX@?ElT+I&Wp)MFbgW4da`wzP3(5(x!@(EfR1dH@Do6c3! z;=r#sN@Z4blp>R++fnVBBY;J#Kp9H)dm;Uv1J;LX>-QXy*c{;U-`#VN20@i-*BrP? z$IS#c8vo^O2Ui2wqYi5QnV|K>>0J04QhEZXWk{Kd5X~u&F|Lr+FkOtpE*4{Q{uaWb zns>aq6c+*iXDQb8bch)L{_n*25-BF1AykUt_|U695LGDb5D^aOtdpt0Y05D9p$cT! zV;OD3?^Gbe9^KEpScb7y|5}6tbn|F#T$r{3$d`JhGHhHgny#ehFI~yM72&}DfeinX z2uJ;m2nX;sLY1ISxU491H6q{V`3F%pL{_)P5ak%v19PG}$RbDer1O9-*^Qt%p_m)t zUkq-nBB1|MJgNg#&3Xw=e*h*l0F4EWt)CIq$b7#{R*{03kbmP4$91y>g8~JvD*5zw zhw8*FkQ44c!=(!EnrL`)$ixVcpQP65HHnNmnn=_{m(M^C+*YX$w84SXY9mpbYa^g7 zopkWS*x_fwwIE+HMKVGNO%JJO7cy{0 zkdZ)1(?Do?`ap1x8Ad(gKADk=R|Cce!+`u#wHgfsEJkm0ZE+TFj5U;}m}hZg0dzIF zR#XiOS7;{t!6N-CjgLhniK|KZ@c4C(VP%7EVQ;c|iZRTfQ)u=NQpPZ$b7LT55xPSd z<^*e8Ky5mTK&rXM$Tr5L3&lc_qK^$;sAPs<;ii(1nZsL%;ZcJ^OG2{KJ z=+g{s9+y^it(qLiu0t%uMO&Wc=b{(G{fM|2FQHJt4x^^}b#%)AaU6jRbEw!+2*l_l z1(|L*RQi>M6)4cd1cnbzJRsd;^WTfvNBB6ode-YACk|K+7v8csKn5IcseX?KL8J>e zzcBn2-I8YpL>}Z!KTifNK2AO6m7nougL%rl^g4v>3)-I256Ona!izc~;N;MWL2k@+ z}y*$Jt#vV zJ;dwi@)GpZ4cC~0fi~(9Q9gViCWz~FWWxAR1dl?4_&_kx$c7rF7$H7h4+Qhb#Mxl# zzzr29k65L`T{=PBp(qCq@->G*Df$Ae%;#XMpbzd#G2J6Ko&dNspz#10W< z)2|v$cVQ;?jfKD#F&s(rkWBa2}adec7cZO!@eN$6w z@r~6s7h8AfD)eDABgfkuCav?kSOnS6+OTP~GcUUTQou_^>&>NRP2rR3JB+r8p%oDJ z7Wl>jy<$NpQM|I{Kl0)}=Fh??c4;3fQUc$l{h~;v>k1 zcvH*lwyoNZOS~zgXE;i%{0YO{%m#ca(lDfYz2rcBM-~YCbx_jcKfIyV{RKceoqY7 ztDqu(eLH7KtPAyprx+ML8S@wu%RKlviVsQ8!-wr_9bEtUeTh&E-xq*ISRF*5|)s>@-!{0OX+v&U%2n%b6Wt|Xkg8-BrB+1XCVF;8Cy+A2Ox9L8-p2x!N}jQV{9UoEWyaSHsoyoS|B%r zXVzTD&|G(dRr1hjjJ2R~yv0$TH-)jo5sZ!b5an$J*!McHuzK*UJI1Pqi~vt^hh)s+(e^GO8Pgt;6~~VC ztYxsyG)ZzWR=w5i%eT@VoF%1*$LDMNXGyKYoZ!jFV>Lco%Dv@|ok4nR@ZFL2!tGVK z=T08s>={xaym^FkT1bUJgJ{>f5InqQ1atj5zluVjk;656yY}pCDKk(jB!A3nTrq|6 z5_xOFk@L4XeYrr+4?>hDa5lInnm6)uc0ZMj=JLY82F6-J`l&=-hfRB{ zi6}=(8JkAc?!rh<0uVpoLq6Zm*gEb!!DX8%x$d{o`nuM}=5eP0{YZk+r)B#$=yMCvv64yMzdNVL}_Gxj!SGtq+*J9Z!K--%m*jLS9l<;2cX zfXi!Z8bg>!L)cfr*j6I z2&zI^+uKkjDbq;mYdXk^tJk7`U5g1&ssX2w1uIwj#;9=nvWlh{Sh zogv70AWTfBspM^CYzq-PLj0w@EI$MtHV0jgkEYqxACK{Yn(2S6lRaL{5?s4XaRH$*cBYYGDik`6P_FA@qsH_rlmp#@kfMf%y(LWZSpnr0- zo*Kv+9^p93M{DwY>7l4wc2<>$fsu}B+qESR$Z^^m^QEYql6h5y()EIr)@s_Jy=aFH zxQDS?SkfUdRhMu`#qPT>MoV1)59@YG^IRj>(xxwv(xb+O^f!1+qyzf#+ajr^WM5pY zy|zH=7u{uBRi8uJ+g*;c+q6~-rDlKCG9XUSvfCm!8%?9Z_W+rA5;Ww}9~kRJS^h9& z?SxvBH}u3VpsbBHWDTZn6zd9bZElWBiPbdJxDvu%P;$kn5B)mOxoOBy=Wv6XQ13gNreTv%8Z>=suwi z^<6XMKE?vKa5iT@SJt-VY&W(#V3X2^iy7;Pk<2LrCGidoU9HdA!T{wpr5UcKypw$y zTS!@%&@$Rr@OZFO34vav@)AhGkL!??BWOTBW93YhQpQ+aY_h`lkG~*hx;3o|5h7Cr+&K8V)N-$c8K@dNA$w!PmKpou$F31PKfIvE- zlc5<7!>sHDB6pOylA8(Fj}Xv*@pmjSMkIp_=JFfOS)b6C(Z;Z&zJe1s#HbXNFSsJ# zY_wLt;!6KFjgbPDWiXURs!}C;0*w?N8I^>`aeb(I$#SeDbxw5mw6CIz3H0mA*!w7| zIRPWy1p~3}cFy7xpyhtXW_t{>8BZk%-8h>v+(h1og`ru--zDQ~oKaAzKlMOEXyvPK z;{hi3fgJUwatUnugS>$-Cn~)Mk8|o46jji|Z^QiBjWs$}hR$Z}+dF~m;qta&5W6CC zL|F-(O~Qz1cuMoD7`v@NucgF6{C>me&_byh&)LxX4R}}pYs5zy$Z9`y&S(Q3`~ghq zY#o;OJ`5*;x+AKa&cS>@w29J)YZ=>RQgS~J#XHx?U(uhj7fiUue#TyzV&q?!%Ge(h z4R|=V_uIp8^dv%uK4t8grAEP0EM97%0jE9A*edKbs?)3+V@Kd+=x{Rlt5p*_i z>&eAmKlG^(@!WnLHt#I-x&wYveXzbAAtauYa55Q4!h{m#oz9Fcg~x&kT{3XV$JlUf z@G|i24wz``K~?+K5PZRD_}ce9VHGnrFGaNvrXz*<+<00j_SY&b6hzB;n0-iytr*^b zyBzlIRW(L@s9=M__Mgye4K+&U)roL44Xw3~!`R!O-d)vj!Iv0JMM#~YH#?j$o2x3^ zoaC_ELh!s{ICuDqwG-KLJviF)jxzR@zScMmu3_w|Wjb$^b#*yAI>vyn!`xPw8}RlL z#s-nR5}S9zy(wG_gxEYdowFG;&61opoSm9smNbM5Hw&sqZ?kC&PBix#B?09iG-HG5 zz#v~u4lvf#+(+MGalSV9TEzgI?u;!WCuQ;~QenSVky0{ZIeXzgoswMs87P^3$oHhf zdnJUHKei@khiQ=LuW8+eIB*(G6oE^?&y0O?iClD!hepsgt&j>XE22eGd_cgNilTi_ zY#9%&cL!|_umz@>Y-UqCK3d{Kc@~?C3}?hZuDpIHR1kEb?|QB{0Fx`7f&BY$>WkfA zz@I>)cL7Xw#&*Y{WQzfJgaH0A%&0Rr&=jg3M#Bf)CZIK#QWp;4JanVn&y`0o&u>85 z2Y3zGG-{&(pMj0*JKTVy$1zr$y1Adr@!vzC5!?fQf(#$%p?*Lzfov>h>=&p2p9j`DOf9^}S+>)8C zECeDjx@LsD`z@q@8jwa9>WZrnHNsA8HXO))*rU{`dI|Wy17}bf^J|75d6A#G3C0j( zYIYd)K8HceB7{n6uV!p9Aw+vEHs-yA>_oN0FkPdune~oRU>?Hz0C^6l)7sC%@ZAK& z<>2!5(=ldq2neF0)4a~`D~D6L2SO(wJHps^)_{Az%Gi5^(17D$WwS7Ez3~8YqS@sWii|+Jb7MHINht_y%l(Mq435XBpcL&Qt!i6^vDaACw>U z31cG&M*hS`oHfVxLOv6Knf!;$StrOrqmCGGw-Gqhu7-2dh(vi@d$TejuYQBj2DYAF zZ^1nVavwEnSqdQl&HHqT*FC&3gBe@%04hgvr3;i^v>D$G>Mq9G zW5uZc6DsNb;$FLLF<#@v`2>Lk7ozwA6s6pdTgGN*P7?3zUEI@7@H zG6geFd(7;!7LW}P5WQ0>+0?=8l}cuC&UA`Y;_YPig%We)J%2r8Im8JsSBCdxY-n?u zF%b6)aKue`u8p%V7wP#INzsWE7;Y_com3}~)ts{%Np9N7+crbn!QZ(rOrW3lZD5_+ zA6^E4PU+mpIGg~1gKTxe{Kd>jRGEC(%<0G#K7+B&REiCuOg+t5L)7S0hb!x{Im;qA zj>A3}kM414yVgnZ(O=KEGU0K}lcMbREz}(3YmDZ&T~1Q^)^q`U^Fe85V9*AuC5=d7aX(^2H0Dk%cyMM@(s|rK_yKRwEc3Xa zRJjNCMW5yET>0=Fb52XJm?Fu6k4Au$_VpS26EfTdk)6@c8}K;T3gf`iAj*Z}Ovo&zb1;t%2n1;R4#Qy2zt(Eb1x{>7%8P1w$veM|`A z4Mp^l3(yJA;;3Z*gyf?iEy^=z-~+w|@w4x)Vz?gIXq8OCngvyy@otK@?+d}ZJ|NN^ zPb|9+Wa~>UMt=xMGx)^&3p=HEO4~?V7=HjH^F=QmxDd^8T`mu z`d}kUW>pQgLfdeU9RF{|8kt<40vRZVQ}rS-aW_|fzkxAR93Y@t@6A$-l6M<4D}K#I zDiGg|)}GrUbro;U*V;ZLr6>yEz+cmsfYc19SufnvQ?^A>#IT7k|b0W)tNdQKG7rE#H~`zI#(jB+qUA` zI}!VGfcDx}ss4b$GjMDs$-0Q_)$f_ocfd(fYd!WC99JS}+BGHUrp{PMtv0bls_#18 z5z3xeT;Y6LQ@2S|BF=}1n_JtkP5R$gaPPyCr}o|k2s;tw1J(KBe2Sz{JNvLyFCr7R z$wPuy;XL)3=G!Js)|TBP*ZrSGhB{Q1mP3lQKHH_}u-G3-aJ2mGQXOSf8j+aU?7 zLe_UYNy4iOv?JRg387nmJW0Z3_P#d#5h*t*ejW}T4J3!X2DF~_j7i3M@WwIP*+-K~2{IiGa+S%KT^xaKxTE%Rr%(!hwuM-med5%qdm!;v9V^E1E}D8fbP85Py>qAo({4OgyxPEg04dUvqHygk`7dJ{E@hN6`Vm%nxi7O47 zaAqqu;Fos53g2PCjc-H{%Y^%=oXvzKrTPxcWvdCl4G;Ou1|xrVcX*6&YEj3yFo^r3 z34FrqU{Vutsun5@<(&y3LupAl4~%0~b>NS)xE+~Qvw3MZw6P^a$Ep6*q!0?*DJQRa zNDeYWr6quSge@45&cfZUwXLb#coLtEaXlQ0?@4stj#aUq#J#bOuP&Aij{_&&6D=^M zXJS30P z@#JsPMm#3n7)V5C6Nu=uv7X7GQ9!WSS@ETv>3zNTKlg<@eWEoY#^!_gRRYee#U1Wf zyjuImC4WG%__v7UZ4pKq7v3SbLJYsC1%WycZLR^;=})WpsMq8=3EeN$YE9>moHr=v zjVU232dQRpxAh3gxe2lzLlUe%x>pi;zfr!Z`dTi!Xe}4*Np#T;vz|qJV?A{BSB?%B zVdXS1sS+?T^K-1+DT1+bYN#4A7Va90#${J7Jai@Xl|%L0tGF2t*yJXn+_!5v`=xe) zDHut26fDBBZo)|NsDU|>X#`(pB>%Lmmm5eS(K45{1h6>}Xv2!zS3EDZZ^6V_xZ2*A zm*TjFZR-6ojC&8-IU61cq=}7tOA}$*JV3hRvh~Tw7`t9O`vk&Gv8@rEb0R-haSXr? zupV!c673isn&DHt_EF2May)Gdcb<#bO zbM{EB;7O@n+uF((nfE#+)xK(U)wsM*DpB@3Lo({UC>)O5keyp^9A4zIQ8pq`351%5x1{!`2t!-@BcasCi`uRWp&5H?5?T8z>$SsANj~xZdhKhZt!Tj3 zVgVs8gNp;#pA7m_^R(G;uYp?;QS?o9O?TRZr2}mxG#%&OevL`RM=%e^vrH(yn zxmH{z4Ge4#SvI}k!H|rUF5IEdd;$oi#ByWi1wj6Sads_aiBf7JtUMip*oLi^*yZmCs(_D6SE{Hpx{ z1pC87`{R%fCwXXZoCl13;ob%~4H}|h^Hghy%wA2#Rx4>&yfIAWZSD*k?TlOy_pVi9 z4cQ>X+7*RB^j$%lVizG-x+!3hP8%;ec+YU}hPN5JAJg$(XA5v|zlU*oKv-Ysv(7!Z z{=S2^AvE0={cyr1wRaavWWWNp-_kzuipP~LdM!jf&;CT%Eci3_7N z?OCbqc&cqZUS}B25hD@6*-iFrH9~P>Py`Myqg!%zEoB`>6jgLbeL==7(Q0V<-d_)A z>{=3?bOdn^V~yqS5dEBw>3L7V@nzzO=6_C#39M>^fZs%jOMQFQ)aebD4)EXJg`156 zTLcV!4mGWBZ~u>eC>>0!hy2h>&M2OCAeRer@I!^Cm-fzcQg3l=l$N$vYTmpd%Fa_+ zpENhQo^Bh#Np5mG({$M59*aGeL$Kj)F5D~KT4yypA?tw;f{4S$tx*-?hw=!hJY?mBFAl&8Z+N7D#4I(oZ8x;1b~M;C9ZnLD7e5Sk;#HEPD#(e_u! zI69G84>9hN!`I9rib?bISEIxM@AcMDb1$ z(K5ZS-hhK{;ApMGeyM$+H|8~i>c9(JfN`uO*c`_$f-#PN^7^i19EXUOIgS&6E$9CC z{ZhZc*`MHI-+mdBLlJQZ?mYJ7ob*r$bTJ3XUDmD|j`Yiy2c zO>%s66t{nIHCDoU^j4=sRA0_`o@iIDw#xB7&q1lC-5ZjTGl5@K&DqSE&K<0JPZN1; z^^D0J4i6qIbt{|bYVR>Vq6-<&<`DHAZHyq zasXSdelEdq^@m*M)L~J*;zP#-B4(~~0pOst73WtSI?7RC9Xcwhfpz>L`2Xn8!Nyh% zBpz_pp(A4~9XjF+&SQd>nmyVJk^8yY?gLU<e#l5G5;-knS5eC zV@X=%3sPcspDvKfA)guNLhlcV7Rg(;@|1?Xez=7@~9Zj7C`rVuc7j1+?+kE z4Shk1Z9U{9bbKTV#>_csI(ij)|ce<#J6{y~-xpiz-_9L1}nS1F%Jz-W7%t1}A3-*Iz(O zvZ%q+kk)TJWxTAJlkDsQ%V|A1b(8JV3T?+hX}&0XP;337)UqL&*^&$pYU>K@;}REybLKdo4Al_#$Js}8x5frlLK?!kHkgA3bKS1c(`e534(2B1 zbrf$~>RayAjR_m=-9IXCpc{H_kb!>fq37Squkr! z-{V@6N+yE5~QThlhCQ#3D!k zx&bh}OB3GL4+m98o>>dLtzkF^nt z3#qg#H+Wp4b5iFqs{kBi@d>@ahyIC*R(e?S1fC4Ty*)8&98GmR{0{lO0!R-{YYuMk z4)-zVxQ5E<5>Zf@yrND}WGQblKY25@*==13$Xg2@3K3pXWWTjrDY;Tdu)dk(_|;cM&WC3PrHNOpSK?GHE4Em2GiWHN^#j= zTxEn>y?rm@Pd~fEMsb!2Bt6&L<2)2&DFA}_isz|i+K^ZA@?o{eNAoDxG1Rf1)Fy5{ z#6rtwgbys4v zqGi@rR^pY9*<;K_ooTmI=*@b(_u(ae3cp#85rVs@itjR2s$J2}u}5F-g#wExj73-d znm(K+SwVxFrHkAa=)D-L7F55yJ_$nnL@{UmYkBgZNDKUo^-qhn_XBJ_Z3l@|&wY^6 zT__yTp_Yqnvx@NI>)sgVTokgs2Kc?Mh(KtKR~&dBhrTj(2<_Vr7VhxrKu!^IuSl@n zfwPvqBak_wwr9~?#(D#ZTcOxy0$vHY-Fe{*ccP05LQe9C@YS_>THJN0Wl*-!BVJ9Tb7Gyn$; zz%@kCqW1o$36GPU>Kmef`+jI=7Fd^h*l%R@3!K6E;4UyQ=^&>-bc zXQJmi%;QiuZRRm4HpA0<14IlZSM_m(cLL11Bi#Lg0#U@l6s@c$g}LIL*NxVCeITjb zsURK|QyeaXTn3O)m*%#iC zZn)`5FgC9T=JQjEAu85DvT}HWE<3@Dju&Ti<_We3tYb1!E=)$xkcH{pGh|^Vpu}Qj0pKfI zm|`MlElfEOYhfxwsGSO-_E!s&_|{nP_!_XNKlgY@`c)v=pXt*7@_SOgc;!|t>wPIx z=Vko0s5sE%Wd@KSFS`TzPrQ8jeW_)$D--ex^koXUmT^on4+z1wewlET(Gz zNr{vb1xtxk0?E{VJ$@xhz?KZ>0XCVhtE6ev$Wlp#A&p8x z8dX#^vR{VBIKO>*Op4Zp^(d-l-E4CC91xSsNgqo2V@Xw01U|^+av)hlOfFXf33B-q zRr?QI*1rAlN_PL>b2Ja9*q{JT17dNs5U|D362PGxt)NC0M~{XyIv3K&-Y?kbpE#=VX_edoAxkjYvMa14X3F1Hri`cI^`V$WRd_$Sisfmh~QMvpOHdmPW4bfs=RZCBU4 zl8gE3Z8ly}8)j<_mqV-k6hBHZbQr#|MxJn{b8dmvH@xAF7kR_C@>C~z!`5?U9`R)z z;u0{a?KtkX-&bh5tVFc!1H86tO$bZi3?n<#Z*E(;y)yo*MQ|FQbY zMhlH;Jh}sa+2K~waCaNSwQ94ruU%%ewhaYZzmw7^WmbL8x@vn*N=fm7IO9mv|A^<^ z5!g$);O#3O*8uJNlQ{RatY@BR^Qy(uym@G4e!a;P2IvMGK8E2#KB9q(c*|P}2SAOA@KaATU zz{vCxDZRl*Cm4GTd}*a}rOg?<&bZQm_uY%{FfB6RA&=slUaJiFvAXzX9_XMxNT@Vd zipk0NFQ(ZMv`8u-6n2)`~XP#eFnk_c<=Bk4Br^V(LeAdSiGTl z6@&}5KA`zfRhiCK5^lTd-HIJK9x-9h)z(gel`gBTXEKekY7mtTED?q6k$22w`DrsRsaRZQH9H& zjc4q4LY@dAM;$SdOHz0rE*x^X0i)wGU6@*A1Q@rM3D}YD4M7FQxce`@q>;7i#zC=}d21K-dVL zP6v-IUm8u1e<_WiCY`=Ang+g-;N$?S8=L0oQ9O zUG&PgrYaJ@*0G^{je+Dc>4hrsSDN!6>IU@)CHpcz^p!U08<~~ z^ae{FAqIWCO!qF@&`c(99{2J_NFHQ8n_i71!Hi2u!W&{(tL$tZcM}xIVJv5M4v)J7 z-Mve229JBJ3unuzPIt7@FI%uw_(HquVa8h9k&kanVzn1xfZkPm87qd^XFo^#=OxNo z0EdOXIg<@3G2S)yepwEyL0S0v9a^3ScSWRxkB^aw5gCtlO}Bq2V++9PtU4a@RP3me zRZrGWuA{z|)+Leybc(3K0n%$^V6a&Y^a{ymrF8+S;3giR0#g?L0%Jksx>vjHk=CDT z%h^rPC|M(%)uJ)eE)$G#9xJehi3WE@I9?6G>;H;yjf=uH`U4fpvgXEAWe{EvTOFSl zHB5%QRX!BiNE~PRj31{-zr`o`NkN3aR7($=YcD*Dl~&=dQ#}*N-aY=ql*V9jy^^ zNI#Df%LjBrM*rz_sUMfpP%-G-=K!%h%3Qz}wFx2AE_?E^xD8`lhhXP4u-STuF(X3o zx=uODzWG6xVO3yt`$7#Y!4|cix{dU2zw1(4fX=hF=u+F~JLv{ptVfgHvBY{8kgTnG zg%_*}g;31F3P*utmFN{(e=psj%YAvYQK7o9JW{hdzVjk{S541bw_%X*AhPz>^ib#~ zjo{u!m@Nlz@a&cggwAd@61fS4AjC!@m&gjJo)zFLCPWYLA-1M9`r(R04Dqo+Nzj)3 zV1^iSkr`Yz!2cu!dI+t6C|Qx3Vjz|fl!s8O454-zA)pXiOtMoC)tJke)yJVnYfho1 zd0e~wM>EVYqbBljT+?~D3rJRfgNKIz2YGmcYW;`vFRTnvu%ZlZ_@r9@2s#!M} zOfCRyGFkh@WU`tV!sOmSvTin*JQ{G2$up?df0E&qM8RV6E+Am?j9>pdlh1=xkjZZN z7Z$(L09*XZ0UXNYT;M_bGa;l=K}e(Gsz#R!CWJD%996Rh8BDGOY%;m{Hz~gh+1b%} z511s`FtjUyWqs<_b!s`4m^zhJ0tu?rQ-lOnYOmj~*tq85ybzq+jM^c_wHPH9OUeOT zBJ@{R6S{G&By!fCKLx~MFiWnY77y5>c3FY6jG|>+tDC6L;&uNf15~mAldDw{_~2hT81yU1X}G2 zrpBFsOpE&kfGvLgE%%FwlEwXUAQty4L#Uk!p>{>w_vo$--%mSzqhrtIhJ<)R1!e>5#0mx+4?G zWy6t~h7&sxsP1xMtuE(sS)%mU9v8VZ6(E`QL%e<&brf(=m7Sx$s#IAsgWUgcb*RM& z`ATo2M%N1p0?woLLiS<_N-Sxp0Q^tVp!+ySiJT=3=YUw!V8=PsqNW12s9i=HG_t>1 zM@gO&gW#7UbhtaghdeH^Wwtg^!EbSw&DI`P^9dSPQ}1>1cixOXAGq(CR> zcK8(@oa)D7>Eb3Mw&(}Y8gEy{-Q5k@II_20&IP3kM;uNQ$Ur0$#?g4JsYbqsAFKrf z+CJs!0{0}oDZr0gX+PQI>jJy&XnkF6&fYD?4*;~sJGKwKiJt%};jC>hjAR9lL^7nM zEq-jqTUj50K|;PkyebnBuhCmk4L^P)kBZ>zG$C72?IUz|fVz`0di`4(a(xeeO$9Pm zpTb^!zcRvJ^%2kr$b;r%Dij{0$XUm7J&sy#M>bh=v6FzG|KIJj37(Ds}Y_R0p!Qw zzn@_Z(YRkt^mPgcYiS*(F2unyT8WS6}1LFhxitph&Tja1|C7b zsPHHCqoAr>@C<&?XcT@d^)p2NG|0Yv2xlD+;3v--HpFkjB9PrNK-f8K)F%)G)r&k` z@#g7GCUVlv*^@V#$T&3GHyY$>Auc%=VfFQdGzW6(F$AVZnjO7zkg?r8f%FCG3FEQe zAfO{-&`(QhLnUAQiQhe5c^xnp*5rMJEPD?!JF2@9gCAp-v>e3PREzeOU!mnqgkm7Z z16`r4zuU`MA8k>%oDjI93u7B;-ud|QX+7-YPpDHMV9a(bsNDKAzKOn$vuGJ{{I|Pt z9jQ&olr+ZrOvP_#{R~93F-r7m`*S#Z3nA_3VRkIhR}fpViD-2!LC6c*E_P5D*MB}n z4*YzhnRN|#WX0ni@JuE(13#_u_%GiVh6`H+s0TO469oa zawu-?9guJ4aN1BL*gN-6u*3kNF#&1(J z$M$}Elh)fMr`7)DX7sQbs^n9y?3>Nl>`hShfQvz8|7Pva2)SnF9_+^bs5ARh&+3Kv z&dVLB_Nn3txHwyB!1lW~T0(#q_j7of{rO^T+d{d;tpzC9g-VoZYZt@WAqz1%3|&6NV!E|BMJ&pNuOqK%&f#hMqy?ZK$c9!i(=n@2ZIKrXuD|R`2xr}Aj@%N zd>>P`-wAkJEsqn6rvhF!*=Hjqk_~v`J9sCRX55>Qp&~|~@@ODqW;>ihD~OPr{>99_ zwU{Hmm}YA{OQs{jk4I_wWpIhxKNClMpe1%rU2IlFf@OBr4*8uC;PyQi^WcMGt;b^U z;H8TT27wROLyU3MEw)hb!x~2Ht9UE(AzkVa*)kqz68wDhDyzWNmKNB2Fb2qScQ8hI z{}?#F1;V?6E13bT*$mJDg7P;ZHlhrW+&3GW9<^J-yfV=TROJ4!2US^EUnYOt2EXp!Q>LU>c3G}fs%xt z3MzSxO7s(VV*QAfumqTN!p*L`muiI`{HWKmG|pbu9`nd*t=ry(d4-)%m>WtvY<(-3 zv+K089=VZ{+JLc}wd5#S4HPAC_TpI1hRubAGah{;X$#;KLq`vr%f!nb40b#znK}4S z=C{Triw)Yh5f8$n8u7R-kfo!jkaQ1^Tl@%y7zr50P`9Q@A=JhCIlmdV$w`6xt6dl; z&2>~`YSO$2XALMT>q(kl-~LLGh2clLTjML@`$990yIfa=G^q7F2E?k}*8BdOpvjkPYiqFP!V-ZX=`tZfN>W4xlnH<0ok3M_z|Ef;FvGh6)yP8xTxH z|J`i;7fAJ=8Ejq;!-Q}(%rI`Dl?Pu#ga*>v5ciVG{U;5R)DYU*_?5R|f0#K7h}bmP zBV~DGY?v^terh~^7r8Bz+#1eOQ}HuzI0na4zK6@KC58mDsrcz1<*rX~vya`7>g3Aq z8{k=j^{F$svKUKSj{T52jmuZRgfEd397)rnvC0MT5}KpOCc9v@w}D?P2sw>kay=1v z6ko?eohApktaQe2fMR$}hGO>jfZZ?W14)zrUwK~w9aXWdUFY=aQ{9=H%!H6YAS6IY z!WbZiAcA2YWrj}E-ANiU*-0Rv5GG|*f&q%_6$pcff(nR&UYQ)OI3YOCgr|rD_g=&a z6y^W+IekJ$!Ke4#_5Ss*zt$quK2=@g-n;hRwW|unXkH0-V;arf!4S$oyy-u~(Ex0M zZk9~f?h~Zt*_<&5!XL^=?}JPH(D_^M(&H-*;gTfmo#Q+B779|{L_5pOlkw|*sIKG= z{aXHXdg`RIi^S|rookI*fZy~C3;9z5&ST~U^!g=~o9zy33LZX%CwV#LfG`pSbzbcv_OAX|4z52)4h80qm}rYqZpG$o?(#JTdzYh-3bwNY~Wcx zA|E+E5LX&vG<~7X+wFqB@k?*h&^qXfKfIARqx=TYL*q>{Nn+-$?HQYnT1SC?T2KZp z7*+2`0-B4=7-g`0WsR5@qpX)>*Nd1~B_sR*x?_Y<*&!?t36rjuu zOz~*P4GZTKk`52kd^#)WFsg^}=Ik!MnATUtqYmjeX^ zK*jVzN;$m+zyOSm^4KCcSWr?mlJa^;dPQykeW&V;sz#%fhhuz|Zd0%@$Xg%_DIr+- z4}uY<;Ee$#Z~(-8rw+(%FdK3v{wUTr^gGnM`~%$Ue(3kDW=L#l1v*vsC1Vrr0YE8X z&}+ih`haCGLRwz!11>|!`sZBzHz@Dp^%(zwC}R>;`g&Kae6s=E1>o#+jO~Lqq@`5f z5APfdnFi4QSS4kn-&ls>QHaI9-%MJEwdD>Uu=+GO<|1FVjp-8mdX*12iQmkCR;krf z^YTi(;j+M&^guftvc-^SWv9g9!eIk=Eg$S)o-gG=0CiY@C((R1Ji^$c1fV@kei(Bl z@53KuNjT1LqtR(?k!kFcSOW>@31Dg`#$I*-_(g^>sp|W3vn$inP*px~DCt(|zI1&IguH|xQ3EKeBZ(^~~ zr^A3T#e$aJfyN!103Z%!&x}B`u}W$MjC&IzF9E60d}rJVqugWwRN5;$X%sNNT5+%b z0PDyc0QVtjJ1V+_0h$83Rkpkh_2@PL&!E=#wn4=tfLhuM^20||9A#Tq3Ht&8lw!RE zyU;DZl(cY(Z6ttFI#=O#T6BEMqxemS-YoTMzFz&I78v=4%)&jJqkScu&&BkLk6SA- zHG?lgt8;3FDQ`UuxtV&6Az+XX^Z?GwHti{6tRI&4G?yy7iIcpX4ihs?1-;avt@ZLk zNH~gl8jM{uKJ7s?K%E?vBSQ#a%6ZIj&?fj!wE#)I{t^7}wt^rDV)|=Et&(tWI=*#p zhYXvnzzE6>040Qr4M|FD%_86?*}(d&mM#7(K%aZ$xIeH2pr8~;6v|)^%nTsY{94qs z7Bkv~01}^4Vs*;YQqDdFA50**mhvL_Ne$7dmh>GY+&lv4N3ZU~Wuu@*E#=?_Shxu2 z2nHw*Lt~ZNIQ@R0{J9ttIfhzbO@x;qNIU;H(Blk5-jf9E0g!{=w^-;)SqQ}}kpN0L z_8p*}(|k$&9|zkd07)=D(wyvj6&5{^YJMe+y=($=mHT1kGfxKHtioUp=_$#Hm?iUZ zFrYc~VSr>d_mP;J;-eq{cm5iP1}St%S4ge%U_A;z9HR0*loiV2eJEi_4Z{xOmPRZT zL%K`+yKQ1bTcxI(ilU8xJJFK@Z(ePH$T(m`P**>AST7rn-{DM>lB{IZB>4Sw$WUuw zGN#E0Lq=Jxv3{`TUuB!M8Pm`W<&LuQX83hJ;%UQ7@j)H@iyGAtt3NqyS5wxpA)1q2 zJ>to94H~)29U~wMcMR#($!~;UkX)Vcm=(SZSFSpV89mP&2-hlP8s5(K%69QpvhtXm zUnJ_=DOqh-qfJK0PO(}S`@#Btiw#+SM%M2Ceb%6je!m{xJcUtpGg9>G5>x+hb#sxm z=HI9e9g&?ofnb_KvULa?Jt5iLGSno+s&3t8d`mA`LN4vOsgsyalz zXAua_-2;U_NQJ)A!!L8e=deFfG2erADS`Pw1*FwD~FybTihOgj#SQHz;=}UG@!vu{Ime&{M-o~ow`*8VAM#M#R))jlnc9| zJb?#mfC)l;drCoV%8ys@um;sl4XIJ@fsN)tJ)ay05m(s^-0MJJJ^~TbSdSu_eauXM zfO-0Bn3~>Nn~PNgLla<;%-vv7r}z2-QlVa723k`b$ZCE_;JFn7#$v__iSy3KA9FnT zSVa&-lgUw%dCLdzGeFssF-tHhQ7!ZE$9xhC0a0T?xMV)D3+3QrK~Kt4g&8-010MDh z3Y)Q4GCzm-U^H|_H!1pkFw7B{r5TCXrSb($R;R7Tj+mzzse#k<&SBaSW@N@#%OCdT z#DCKtP@-AbRIHHmD=5`!y9G6`_r-UCS?)%>_JdCRFNhyQeC8mNm9GTQK*0MjF3tgP zk$?+0%vb^-42$Q?-Buf!AX6y*Ni4q)oRH-LXf#2NuM|f+D$PU6@zL{Sn(bZmZ)v62 z47>5Q?2)!KC0YJ)x#*duw5qB7fQpm1qwCQjFW~Z7;8ih@C(7uV!6{OKHfPYJIkzPI zIw|}^>@i>*=k%7xq8!aC9(``6ekaWQu~PKS{qa-^R^9m%F`r}?iO$H?Q)}k;kfOgY z!K;&$+?%H96roNYX3#tpOBG!!vk0~TOsp4^jpFAxCHXBdYxyJm`Au7#Z6!7ycy||d zK?NGqU|YxKEihJjg`X>~n#PTp z(1U>lZLx1ea?6CFQWLpl!Z2Lmac$LArxsu=>8>buD^_@U8m3OU2)!a60_}t?U|2sN zg2y@myEHjz5XM>V1w2-6?C#6;la|npzKtA%(;(ny6PDqZ_rAi|Yyv6(j4TFn87UqJ zm~k~m(&f+afX;2cAEmc~%@o3tR>CJKU=akM1XSAxW1y^hP?vQk{tHAeXW^69eCmRR z3~BpdLQLHYsveJq_g1>{<>2hc2>8wvYukshZ2;hikFeVKHjp)d$~|l^G6FED>Dy4L!GHK|DABcx((FH1+M`{RA=lw3 zku|ZYZ~BI;mm6}V zTG?z%1YjuwinKP{e%b>zO7RFQ|LGt^F2pCS!Wr+in4uy{h-zn9intN-_u`KCD*q3! znL;gj{vQ^rHcM}OXrvYGZLX?%ky)p-DY1t6@dhf51zz%-^x4r#)*v*{2vY*!Lv72! zm-*D1IGe2yc($J6t>bwV=yEsW6T2#AOV&fikDyOynq#cV4~Zk)l<1p|QSKJOHX5!5 z#DPDy57EGjdc0}tXQ@`L^+s8KjZZBJaBRU6F|MK>mfjOK{DXk*;Bf#VJh_48gf;F1h4Zty^nMM-F5I0Do!6Wu`hiUVdO+s3( zgx6S{D8&dXf}~&z9=MEQ=2ce8X>~m!(>*k^X#h z0o}rf5O&jY46)wrKpGq)ENLBTr2#U6Hb{ZReqWY!h_kl#FEd;f|LB21`2XVlx_0t- zv#|D5a+|)x+F#Y)VNG1AMAXPztYFKU95@H;-~15xI^;m+XaNTDEzrW8H$m4J9qsU? zgz~uUFz-{I!FX0_K8&RlpM<<}U(ki205)Eq_wrW8jz1(Z*AjDYtlF}IW2%3ZWcuG+ zQxmCgt+@6=HvP1NUb)LAna}oxmQ7is@$$L@niR!TB=dkg>}pWFt0dDmP3vf3V1T}U z{HR+1Txo&rA=Vnf)hR0QTV2f5KDl}%2Fj*gqP&+RDk;0v0MTu@8QIOZs)5T@5&{>c(aAT$Z0lb&VN-M5awGAXE%;AvIXm#;8$VHLA$T!3a`@ z7P4gwn7I+0t>u=M`|1f4fqj(O*Fr6*2@&GRR3$_l=!5-$wrP^~#F{gehV^M+b?oR} z(Alu8J8{5N9sxe6TuO)eAJX@P1V~acr76#h)5pyjfKRb!3ZQ)Ax6W45)#co1?FL}N z4;V!!1nfwNRy(F4o&&wevX_lwM*vNj1?ci&nED8~TT0}Q?E%{*pa%}>+yx*8bTC1Z zqXS;w468E%4@kH(@?InvVS-7Hw@kw8&o|@sOr`q|xbzV7?@U1h&GL=7YK_{kUy|v6 z^P<;%?SEM^pZXL=N*Rf-;(|P*G|YsuX~^GT#HFA0kolKrUlACRGh0sNv`o(@z=|uC zk^$5MaKDX(lD~;29dT1yfE3JM0Q5P4#x90U1YmSAg8+2VLR~Zhb<;}SG{Wz8HK{!h zJ%UA>N`lP8J8c7Q0B{CLHr@)rQUJ96^P+n3U0)?3^bv?iCn(2gIm-6#PLXt@(mKgs z_$i1AzMk~Zrn7bFJx04w#9%pIQ<_Fh0x(1lzNXUjXeXsgbm{l!p8he^q+sz`KV{)H z+0}L4#G+@wTWPJ@O|825_gXct|G(R+%mIJCRW+86FjYoyPL*we@%|s4YGL`OA0jwg zL;X7K_kobeLUdvTLL>{(iV=PvnY8uscd@Bm!RJpJWnt_N;@v4Aw-Hw87=Z&%ZZvv= zv3o4c@`9g$P`%I`YnWI?7m;;*lZF{4^g`JZ&K9b(f@;@M9I)=<27EIi>>(! zP5x9g_i1y$1Bk~U?!E}+ChQz~n?Wgi;#gpdHCKD)d^XZ@rtT_SN=`%X`G0`Z&_KT* zls*ft%>q;XJ~^L{w)~8rBpAhLg?#;+Ld1b#a9$uiF&|BFzSK-p6RQz7)Wlkf`_#l8 zh&QT)2pF-Iu|xvE8~9RC`Yl;{ zQUVO=a2*FQJ=)Zr`9fGP{J01o(JN~Xev78_?Fj2WKiK^g zYz^A1)zeVD6MxNFD;uxe`zI$LS}dQSENh~qIW;A%%|vD7b=7il-$W&(_Yug5Y?^Lm z`V{MU4C3W!!GTT0#9r4mGPM-}laz#-2W;rj3fZzDLNaEHIq#OOLA8D#Zfgh4LV5d= zZV-fkE;Y*Fh6Yg!-M$tIne&ijUE?o)p2wZ*_5L5ehWa5>R=I@@<{oA9_qy@Y`8=%1 zFI|Av6^LS91U}8>vOp(!Z5%uB#vH^`Q2p;)%&hb{hqi8DSDLnFHQ|g=059kzss#;r&yTW__1qZ;d=7ou?!VwaW<31{m$AZANHpA6@3!*gibpjP|8V z-)i?Xo8wjp{;$FnNMMAPGkugO3*CY{* z;J4cU9Kl0bh^Y|?@STP_UKEZ4F7(ooW@KnoyEP2?b|w6dD9>7zk7q*EGYHQIFj;fhJi_sdlUR&5Au^8`!p#{HdlbB7-eGJ>-19uP z7b)coNL6$BG3WoHJ0H%2%}3kd6jR(vNVC2->Dy)VK9U2-Qg+@e=DL-R%`Fu=!^{Kn zChGBk9TuDQao(gRuAcKIMgOnBHI1$MU#jp|^)=Sd{*zGysSSH#-))%|O$a;D)0);zie;^j_4Gs7MT?lM~KSKkq*#o1FUv(e_^YMpzKz{kLH7(#MBOkTk&&&8@ zzS0$<7Z$dArU0Gf0Q#Ol-_QMoBbxaVTjOow&m?V1#fmZ2frPoXxe#;9=fEFpd$MgL zgqZadzpELa(i~C?;f~5|0re^&lElhoX&8SA*w= zNWPg*b?r$A8;iJHf15Z{qD%}qf{!3B9s=3y-P`^hmzzlONhxHW2QG;3OO^6`zQU*& zFJR8|?HdLy!^jz7&FZ?d*UVRg3!$U1aJE>j6Fi}Cn1Eihe1QZRIkBJgP1KnXdd|Ug(FZ#Q46(|hJ{6n z+^I;cCk=Q6Emn6UL0NDGix_>n51*JEL6n$El=#$Xof6j;OXkke7+B2b+Ht<(&F)q3 zg~rd;VoM2!#{=+(sx|kAU5CDlACU7-d^SJR8U7p&>{p7ml6iIo2A7h_n~v#jcNfu7 z<=i=4kF4t^;fFmz2FiiHy2^?J&%RotZT5Nwc3&NQNczxC# zl+3$RaCQ|=orufZPz}Znp%DKxq+8M(wkG;riHSeD4MPvSt}BJV%oYGf_!AB^jX%K_ zlwlanvCi=02Acm2H)C?=`|7gA1E>eE_PEt{3Z{r7h>MG%wkx32&u_SWw)~bTYtCWOv|I=*!V$96u0ZYuMOsmbdUZC%4#5;ys175@T+IeDJ6|BxX zs7O?8ZPC)`vab#xT5mth6+hbo)BWMJ(4eX3ul`0PgA+cw1)WBT0*PVhpb-GGz`yyi zCGm?5ya5@%LCc9N)K@G0re2dPG@v|BowX1&s$_u%L3p8(Gj&00s-Hr}%YP&;g`1vY`IH zq4|?6=mb@4u%ORt#OXQ8u<`!}53(Ni!(@{lbb-d&u0)A9+Ro!zQ>;3NUC{s-&=pQ{BhDbGYK zQVaS)YIYM?g1Bq8(%k+^Gar>#DEvhfm9h|XQVDnWrvVt@e@Nvu)@r}8(W(5NOOPgf zb=k%=z*B;NJyDt!r5y1_E6P#;h83lr;@7dF96(wlGWc4q<3iRWMn?=Q%2l}OdUS#+ zZbXKK8Zxx~L&zY;+=i1O*P1B?V@Kmm#Smc3R0aXYOyvRapQ+g1uoMx0uiF8e#CY)d z71O}0;bAF%31%J3s`an30&k?Cgb*aI~VyPJSqID#r?z|RSoh-K+oUfN^{3~4|PLuR}Pqe(v{`kEG)>v$1h zzcZ!=FIs_{huwj?_9&pH*q^;P8ww*)-BFx)%0xTdFbQh2gW6c^j2^z(u|ty3-|U<5 zo$phBd}=y5o9{J6^Rpk;9W#Y-6(91DUz?pv zn4NqAe6v$cabtFB0W?m|4giglQ|LDr*PNV)>(90Qjto9O?efc|x)Ef7b&zgKf zSnT0Eh+Np3n7$Cg6h8KZ#Hf4%{eAE45}Q5?_iJ6inV!#(e|jAR^iL{qF+c!-MNNE_ zE$|eZp9`l_k+VP<(srnaCQA>V^-{Ps*YAUsZf~>RyhS{^0J8hu<@--Az|CFP>hY%w zm89g~`s^7cLm`_jp}EZ3ez{0n1V^VRV52gp07oqlnND7=`hES)=jj6O^Z;TMWQ$S$ zfPFWb9|&y|C3&w%=BrYbj$!8h+JDTK0rE(TkMJ|<^P;Kr#L@#_UPJ-ZD z3{o-JdN7Q}KjGxnt@y>A$GGqGR^y2wrA;Nq0V3=Qt3*dnrh%-Ky%Er_cHrA+9QEM6x#+W1FW`70UT>cbwDV=)$9z<9=8?)*$`0Hs#x6l-Q?pJ+DW6>R%{27n3 zY1%W8Wij8Y7D`Pie36s{{%bVI$13=Y8Z(&94CLPl`36q;tek+uQX9=DzZO8FPd;5K zZ#Y|=pt#T3;ymJw&K6^oL!4v-UIieJ0Qll-vQ9n$@Wbc5Ymih;kgXCn*QhXlyVI_$BJn}OTCy#t`^{Zhc0FgVs z=Id7kK=bv(K-q#ZwDakAKHvQHh?5~P)=_$O-50^t4zzK*`Y$(4QtKCXI43JV}V z`fAESKJ;3X>M6-+(g6TQlTP^J)TGaSacU9+SE4-Bq!`3&2%t7)=m{KcVtI%+HYp!~ zf0LLdm{jBIs$Eh$O)jaWEFZ&HNgKf(lysNWK^ws%ltiZ-cxw#WyOgvYH@3_L+Ft|^ zbt6nqK$B!)2Fx5s_by;d@xyA28ewu8xJXkNTELFPJlx{)0 zsSwK5fD(Sw(7oQ_hB;NAc>&&Pn)@+rS0+jt>xw;I4iyJBs6(qLNXuTL8I4s5JP z_9c}e+JTJ&w_?w`@x;anq!=eQK1bYeB4S?u6B`jVbYLR}LJu9*;B;6cg8&@Vuq{N} z@&GJrk<6!lfOaB2@eA3^UpsgkgnmQ-3ThnpD?i0Cd;OyK|cs6~y1dSiq?-lIVO z$z7Hd{M)%@mZzRH%EgF&DFrt@4mR0J$H5XCvrKMbwfOtT5c}{s$Rvw*S14i9D)Ge% zrOovmJECePrAX`oC~8$HgqoKj``KVzUWHpnl^ZAF9NbtR@WG<1fKPO4j$bL0AQKf& zMy6ayE=IGA)tW9Wyw**HMm}&{@%Tz5MZ2_c=`1uN*LP`Qy#dgrg$DpMURrp90OQia z&jB=ET1ZNeacN-;;*FOUW&kiQEzGO_-AfDe0_(3fPQSEJ`TIH;(Qmm<7wNLX-@m1B z{%l{r=$69u20*tI?gr3!OW`p9jkgpw05EPTyhw51ErnroU=Q%!Qka5x<1K}`1Q@pz zjtB7H-%>c}TDKG`FHZlR&eF|<|KaNh<@UfLNP2pJb}DZQ%>)}Ajqz3`%iCa$MgW{@ z`Lf;sfjntutMzs8W-W-HR$<4abG;A5e^H0%ie47*2?`m1CuRW!@L8CJavxxOo#7fB z0P7uA3u(4SsC!$E4#$uUTT89 zR3xreB03zNS*aU!Gu)#xseh;3TG z0GAj*%3uAQWEtwO(Z2cz%?(CrS0_?AjHB{@U5hdgOOknNU#vE3V4+|Aw50UA1X&Cl z*Q*P`H=`FqWLoXZcHdgYIun3gLlYU>KTOXBj|~~3`VElKm4w!~0UC@JYz>0>;b467 zti)w6)cjZJ6Fm~8+?WqD{t$eci8^`%r8yNf91xl+FHrD@)Liq?)vz+6Y`V?}-)2z4 zUK)Q zGG9FUn9{Jn?3iMa#o?n$o;X#HkNA`IK&WDtDEZ=k{7I3-rk9iv`wyQ`vLumyT&dq* zW;W-g$Cp->bn;d(^tr6m>85CBT=G!qrC1yBW>;KWv3CF9Zst3r{qJ`-yJPk*8E!6! z6mK0dcivy%Hg74=q9NV0+*z)SuG2DH)4I5NJn@S8r8oD#S+9PXn|XPK9NNj{o>o<8 zFRz+b>L_tnd=8@nMgxI5Rj~~IrEX{Eg5pZ{jvE7&J4KC2$S&yKHHY;(gOlOjvJ$)3 zG0R?7VRw7IWnQ+h9@^GZY7a5xzf_xyR~XCxOYLqtTgb#Kud0Kx51zxOdR4(Fx5MT3 zvgja;s;8v9IH^mQxvVWJEOb}e%e;0^si%@HfXL z52$hC%}>+{`LlCk;HPT4SUPKkE>Cl;T|={oWo$W7RxuP zNhUm=Df)h>I>n|>RGT<;Mx88=xkudanc7nRWQ&;cnc6#P3FNW9m1QL!=fDcj95<67 zt4(t_XHT%i~)5^S+49}#C6Yr{><>W8KhA-67 za&dog;S04*NDdS)6y&IM7tUsHiZ)-W9p#6Yi&0;ycZR)i7<*#w%Isuh$YCE8iqlhh zYZ363+QD>uH4_bQsj(4s{Lyarx{B>CH+op+WT|I_`ztj?PG2oneWhl|b>E1iU#U^b zeB>1I3(PSJ!yUh3!3wokb2~&^w3wM7bd;Fc6YVIS;>Zr^MO20Y}lm+ic$Z-4DMLQ#JwBTmYr?{H}D}rX69U$eLrKxWo0v} z%2^4Px6!jpox?E${oKXH3`Tx&TBscY=>4LKs%h-@wQF1P1Yv&$r6&DTjW)saU6ij< zN5=eIKsicS{1Bt`Za}fs1>%>Ue2GZ=muiju_DSGlRYj%!Dpt5lXR`ZDV)(z*fhrx- z@KgxfgKCTkE0s99PHiRL|CbsezrRGB|CgE+*~No89F?U6elB! ztUEN~w$q?yS7qg}?;pfSbnnU_V2S$2)Eh%rUhNBbU70BTR*jdxTPp7QR?Uqdoy6cq z)5^+YpZ5wk!Y6h^lRfM8~1r=;evjRj0> z{EON?d{8Icm`?5YI7c~Lo@zFFt(gA3nkIj(;oA-3NS(^XN8hVGy1UTu3T&7E0%qu_ z0EW6X&YP__f!@t5r~=a|sVcTRTrTz`>cg~%lYMxS{N^4}_JcY}{^=p{$`9%kd8bC* zEybymYOM9kZZwT9mM3b{LGgE=2VW$vDW15f<^{^=twus|yM*NS(lh`N!<|n<5JvKR?bRCqG1^6N;U@{MC}xFgvk6+y{Q9vv11LZa1^>( zAbwj>UhKhoQc%Fw`qcnbdT5QP|51%F!ICI;uTlGp8|u{7v2Kv*K;SOs(#z;_31@Lx zshhpAQ}p;r?U6vLCarZ%&jf3nsQH^ZqT>gk5qGJx z%;mOMRTgB?D#><%J%bU=a(G=R#aZNb&TzZfGt0#A%j)=cp}X)4ueY>}O@nFGSowe~ zUSOrO*zG6<8^YtJV4^KWqMdWO%^C6CWi{Od4_+~Qvl=H4TPkk)Ssft%W4T!QvpPp= zF8D9%Bol5v7sKzt@`Shw~ai=CIrFJK&?;Syoa~R?6s|OTxS2mfFCxzK^Uu%{{VQ zC{`=HjVPCRdGl=tkv2=4kO$BpXIbe?w-+nnqE)CQL$sH~1Y~N@;DDE}$6izR(J4?#N$ye2AapDzque@=YSflbqa^zkj;T(|>!Q0BFS zRC#*AI&5f$KZtqJQDD@#Aw({{w+XM6rzmvtS!^ydM>J;}ugWFFGLK-;yzUbA`eyNp zmA96+9unuRyqA2kP;?C7J3I9}gpT;8ud)cN*Tp`ALh97yn9?9^@-c`c{e9GviB-$h z>{Plmr`%iS1XEyS$8veg$~AWR*f|`{sVXRNdqIIXU?#3Spth0Q9}%^I9F9x(i|v7Y zptOPng&sn zsd@~pOl&1qLI`O3qJvA&#IB8M2Z1XJC&&j1_U{Sdy`-G>$m4K1%7IuFZ0^GVNa_MN z#)nczFl#hJf> zSKuhL*t`c)Y;7`cFRZ(80D|5eCgCYtoP17AG<^pa*7q&sxWmR%V#Bax0w1z95$>&l z*x!O2$#A!_&Nu^`@v+_LXdRZ-X|pTc74}&`dwXeBF{2GQU9!VmX_DPoG#>OptzKak z>zeVD)CY|PpV4OMED|{EsE*OaA9hVf(7^Q%i?hwJ>a^Y?g2H(_Q$MVMxog!Mf?73p z8n>NdvXYZYH%Z0}6nNalE=HF`LW3bTT<&!jc&Z^8m9X~9#LMBll?j(8G!8}wjSj-; z4oPh=d{l&OVKMY&b?mxUJVLx4!IR~XtNf>x=o88FQ=;i9YEAmpB^iC%XZ>oq@1_ZwCYUNkLw~H8 zCu4YWAG-LW(lNtri0D`}%d0Ai7(LRWEn5X1FA1fXS#}=11EbW&(&eahu*F2`31avY zs##2o<)tQUu!|E5)o~cBX5!dlb%>bXoJW}Os)(4sPE8d1oAdbKXi)v|@=6alVvEh< zbaOsJ?q4XD=I~@HX`py5nR9VIhxdx23(vJikgN&3a)F=z*CBB!j>orp4U+6_Sf4AZ zyzV6EbEh^MOJ-+C5HNc+>T71vXCG9>susMD3402D->*Ec+Jebl6{`jbKTKTJ3(`p( ze0RIXR5dhoOam$3j~2~z6noHpw7-J2Z>jNC_R+^;Xgr@9zH|>`LmYEv4|dNUSPBu0 z-Lz61is$13JHdqnf^ji>c#}wM$pJPhY%QeA$|3OW%ohNqlb5t!VOqQmm^iY`NH-#Aln}6DCftQB>4o)*a<>ywB-omdk_)b)2qgKNXi!PMb1@tm z7VkZvwhLYN3z&{u*G%v*5XnqEf?oj=Xrs@@GysqPsrA+x zq>+sX*}Fodw&Pu7JVh|I9q-fr9f%z?T+6#?Lb1lw3%y|KOBd79I@8{{ylhrx2K%Qb zQQx5Pjt^@&zFpwUE+&UZ0Rx@y-xV%737`AYC7Gc4@6B>%`-lGj07T z^?;L($Nnb~t0r~im56Pf_~_Q;6YnD3qWNWGnPahN7I=WxEZkQYo6e`m&F&Y~>3p#1 z92Oxk)&{XXgI9;9f|=-p3C1V3inL7L&GbB0#I{LWm7v5f;^N`rw zh4%@)v9WrL4xV-RR~NK&o<|Jp$}3IqgB44K+E#qom4}&r_*A2qwi97e%3-k}xjCM4 zwjI&Z}4Q8AlUYuuuR$SCAi@zFm(74LTAE#=ZJ;v)VJ&HUK-IoR(0t2%3t z7~Y+Sw>Sn3q|pMydcw8^(`RRl3LCaj%r4YQ2TFTs8fIHCGTTf|X_lqf5Gt z1&9nwTGsDf zpg|e5G^p^ih@a7tcKLH-TEHxZqYN1JuqF)h#md-M7)77(!S*f}FZIGYwQ!ke*_%6q z+JHysR?6HUaaV8d4r#Sgqa{)W*%KGmW%G`SHJZ%Aa|3uZxtPLcv^ZAq!?|n)|crsX~rnPz(sCk zI%WEVv!0riw1?C6YlZG?k$EEz7v+7pMNI0$69T@2)==PL{3ukPzUC-#Zy!D}>b{;t z(`4YsV7tBcBD8+sP7#pHrz>&2ftah8m?J|O-9OfEbR{Ocklj`&?#tz4q-Vs}xqOnm z?UESQm$x0954t03AQlTRJJ6`PVF}MprXg4f^!2lMFgIW*q`$&+ibH+*Ald$i z2)L0?>_RtbY0BKlL)0(LaK+YPwtQ=Wy#gGe7^jnA?1E^;-roe#|1YqNAG(o;m@Y%p z>)YELnf4-Bs?HZM=*O4SR8fB_JkAP6x2bCMb8{6;FKkAGu=V3*Qn^^rkGE-VX`HVt z>@!Tku+va5JQ+wf<`$X-z8BqF@6#h-@GOKRx_E<8Ar=BU{G$<*eWu$<>bZ*rVu7Mh zV&vAPPXx8vbwDPO9qG$kb5xE26mOgx$gthF@^f{J=G6-DF zQ__uEvoMHT(XvtQ3P=TPtEM}tB!pwv7UG}A(EE#;`(VXdm&fmtR~L%51G$io*NQ^} z!Ce+C5tj$@g4k6MtVuIw)j$YrHR)5neKG8WeatcP+zVpuAf9Hzop&PWIhe|DA9e6x zXqJH*O(%=-gSjoH7x+g3x~pj^bm@v_VCu14EEvp7nssSp9=B+Q7mM3Qf%Mz$ z5igA58Pne^y-MX(<*<=tc4u@ZR_9n)wW^$znjx4@@;J-NJ#O8&zBC5IRza2?-E3ch zsV*pn-fD+QhusOp)VI4di2+F7YoBn8=3V8pYlIjLTNiwY4~^!Nn>|HT=%_Xt+FloW zJ>vXmu86c+H8W@m6f@#_4EMu{*PaFPeLIF{n#N&2bNNcOw&P$TvkGioL8)i-c7^}K zMoT4myj9GC#pKc*;?rArJNd#+5j>U`%5CvMQKs z4GK!ej1311j}4(JOUceu%u2v7vCtPl(x&}U_7Tvb7&3^)K)oyx$v)NwDKi?4C5dAU z_(YYZRAUuc4~cP8`0^k+s;4U(_7ahi$MZzDseHHzXFiBrly=bw^?!doUZXjPWL{m~j+1;qwS&V%aPr+<&>h~=ZSr`DaZ+kS!n$f*UhMf?Ysc~-w+Joakm}rjY^U&ZQfoP_Oyd~WahIM|r68N^=L4s4c?QT=DdhD2ZJ^JdbPenZNmCPC% z&a!94Ko=h@wzzmV88[14t => get text area size in pixels, [16t => get character cell size in pixels - let get_cell_pixel_info = "\u{1b}[14t\u{1b}[16t"; + // [14t => get text area size in pixels, + // [16t => get character cell size in pixels + // ]11;?\ => get background color + // ]10;?\ => get foreground color + let get_cell_pixel_info = + "\u{1b}[14t\u{1b}[16t\u{1b}]11;?\u{1b}\u{5c}\u{1b}]10;?\u{1b}\u{5c}"; let _ = self .os_input .get_stdout_writer() .write(get_cell_pixel_info.as_bytes()) .unwrap(); - let mut pixel_csi_parser = PixelCsiParser::new(); - pixel_csi_parser.increment_expected_csi_instructions(2); + let mut ansi_stdin_parser = StdinAnsiParser::new(); + ansi_stdin_parser.increment_expected_ansi_instructions(4); loop { if self.should_exit { break; @@ -89,9 +93,9 @@ impl InputHandler { match input_event { InputEvent::Key(key_event) => { let key = cast_termwiz_key(key_event, &raw_bytes); - if pixel_csi_parser.expected_instructions() > 0 { + if ansi_stdin_parser.expected_instructions() > 0 { self.handle_possible_pixel_instruction( - pixel_csi_parser.parse(key, raw_bytes), + ansi_stdin_parser.parse(key, raw_bytes), ); } else { self.handle_key(&key, raw_bytes); @@ -123,7 +127,7 @@ impl InputHandler { .get_stdout_writer() .write(get_cell_pixel_info.as_bytes()) .unwrap(); - pixel_csi_parser.increment_expected_csi_instructions(2); + ansi_stdin_parser.increment_expected_ansi_instructions(4); } Err(err) => panic!("Encountered read error: {:?}", err), } @@ -140,14 +144,26 @@ impl InputHandler { } fn handle_possible_pixel_instruction( &mut self, - pixel_instruction_or_keys: Option, + pixel_instruction_or_keys: Option, ) { match pixel_instruction_or_keys { - Some(PixelDimensionsOrKeys::PixelDimensions(pixel_dimensions)) => { + Some(AnsiStdinInstructionOrKeys::PixelDimensions(pixel_dimensions)) => { self.os_input .send_to_server(ClientToServerMsg::TerminalPixelDimensions(pixel_dimensions)); } - Some(PixelDimensionsOrKeys::Keys(keys)) => { + Some(AnsiStdinInstructionOrKeys::BackgroundColor(background_color_instruction)) => { + self.os_input + .send_to_server(ClientToServerMsg::BackgroundColor( + background_color_instruction, + )); + } + Some(AnsiStdinInstructionOrKeys::ForegroundColor(foreground_color_instruction)) => { + self.os_input + .send_to_server(ClientToServerMsg::ForegroundColor( + foreground_color_instruction, + )); + } + Some(AnsiStdinInstructionOrKeys::Keys(keys)) => { for (key, raw_bytes) in keys { self.handle_key(&key, raw_bytes); } @@ -281,4 +297,4 @@ pub(crate) fn input_loop( #[cfg(test)] #[path = "./unit/input_handler_tests.rs"] -mod grid_tests; +mod input_handler_tests; diff --git a/zellij-client/src/lib.rs b/zellij-client/src/lib.rs index 1f05a9eb..bd5b04f5 100644 --- a/zellij-client/src/lib.rs +++ b/zellij-client/src/lib.rs @@ -2,7 +2,7 @@ pub mod os_input_output; mod command_is_executing; mod input_handler; -mod pixel_csi_parser; +mod stdin_ansi_parser; mod stdin_handler; use log::info; diff --git a/zellij-client/src/pixel_csi_parser.rs b/zellij-client/src/pixel_csi_parser.rs deleted file mode 100644 index fc2df627..00000000 --- a/zellij-client/src/pixel_csi_parser.rs +++ /dev/null @@ -1,146 +0,0 @@ -use zellij_utils::pane_size::SizeInPixels; - -use zellij_utils::{ipc::PixelDimensions, lazy_static::lazy_static, regex::Regex}; - -use zellij_tile::data::Key; - -pub struct PixelCsiParser { - expected_pixel_csi_instructions: usize, - current_buffer: Vec<(Key, Vec)>, -} - -impl PixelCsiParser { - pub fn new() -> Self { - PixelCsiParser { - expected_pixel_csi_instructions: 0, - current_buffer: vec![], - } - } - pub fn increment_expected_csi_instructions(&mut self, by: usize) { - self.expected_pixel_csi_instructions += by; - } - pub fn decrement_expected_csi_instructions(&mut self, by: usize) { - self.expected_pixel_csi_instructions = - self.expected_pixel_csi_instructions.saturating_sub(by); - } - pub fn expected_instructions(&self) -> usize { - self.expected_pixel_csi_instructions - } - pub fn parse(&mut self, key: Key, raw_bytes: Vec) -> Option { - if let Key::Char('t') = key { - self.current_buffer.push((key, raw_bytes)); - match PixelDimensionsOrKeys::pixel_dimensions_from_keys(&self.current_buffer) { - Ok(pixel_instruction) => { - self.decrement_expected_csi_instructions(1); - self.current_buffer.clear(); - Some(pixel_instruction) - } - Err(_) => { - self.expected_pixel_csi_instructions = 0; - Some(PixelDimensionsOrKeys::Keys( - self.current_buffer.drain(..).collect(), - )) - } - } - } else if self.key_is_valid(key) { - self.current_buffer.push((key, raw_bytes)); - None - } else { - self.current_buffer.push((key, raw_bytes)); - self.expected_pixel_csi_instructions = 0; - Some(PixelDimensionsOrKeys::Keys( - self.current_buffer.drain(..).collect(), - )) - } - } - fn key_is_valid(&self, key: Key) -> bool { - match key { - Key::Esc => { - // this is a UX improvement - // in case the user's terminal doesn't support one or more of these signals, - // if they spam ESC they need to be able to get back to normal mode and not "us - // waiting for pixel instructions" mode - if self - .current_buffer - .iter() - .find(|(key, _)| *key == Key::Esc) - .is_none() - { - true - } else { - false - } - } - Key::Char(';') | Key::Char('[') => true, - Key::Char(c) => { - if let '0'..='9' = c { - true - } else { - false - } - } - _ => false, - } - } -} - -#[derive(Debug)] -pub enum PixelDimensionsOrKeys { - // TODO: rename to PixelDimensionsOrKeys - PixelDimensions(PixelDimensions), - Keys(Vec<(Key, Vec)>), -} - -impl PixelDimensionsOrKeys { - pub fn pixel_dimensions_from_keys(keys: &Vec<(Key, Vec)>) -> Result { - lazy_static! { - static ref RE: Regex = Regex::new(r"^\u{1b}\[(\d+);(\d+);(\d+)t$").unwrap(); - } - let key_sequence: Vec> = keys - .iter() - .map(|(key, _)| match key { - Key::Char(c) => Some(*c), - Key::Esc => Some('\u{1b}'), - _ => None, - }) - .collect(); - if key_sequence.iter().all(|k| k.is_some()) { - let key_string: String = key_sequence.iter().map(|k| k.unwrap()).collect(); - let captures = RE - .captures_iter(&key_string) - .next() - .ok_or("invalid_instruction")?; - let csi_index = captures[1].parse::(); - let first_field = captures[2].parse::(); - let second_field = captures[3].parse::(); - if csi_index.is_err() || first_field.is_err() || second_field.is_err() { - return Err("invalid_instruction"); - } - match csi_index { - Ok(4) => { - // text area size - Ok(PixelDimensionsOrKeys::PixelDimensions(PixelDimensions { - character_cell_size: None, - text_area_size: Some(SizeInPixels { - height: first_field.unwrap(), - width: second_field.unwrap(), - }), - })) - } - Ok(6) => { - // character cell size - Ok(PixelDimensionsOrKeys::PixelDimensions(PixelDimensions { - character_cell_size: Some(SizeInPixels { - height: first_field.unwrap(), - width: second_field.unwrap(), - }), - text_area_size: None, - })) - } - _ => Err("invalid sequence"), - } - } else { - Err("invalid sequence") - } - } -} diff --git a/zellij-client/src/stdin_ansi_parser.rs b/zellij-client/src/stdin_ansi_parser.rs new file mode 100644 index 00000000..efffffc8 --- /dev/null +++ b/zellij-client/src/stdin_ansi_parser.rs @@ -0,0 +1,199 @@ +use zellij_utils::pane_size::SizeInPixels; + +use zellij_utils::{ipc::PixelDimensions, lazy_static::lazy_static, regex::Regex}; + +use zellij_tile::data::{CharOrArrow, Key}; + +pub struct StdinAnsiParser { + expected_ansi_instructions: usize, + current_buffer: Vec<(Key, Vec)>, +} + +impl StdinAnsiParser { + pub fn new() -> Self { + StdinAnsiParser { + expected_ansi_instructions: 0, + current_buffer: vec![], + } + } + pub fn increment_expected_ansi_instructions(&mut self, to: usize) { + self.expected_ansi_instructions = to; + } + pub fn decrement_expected_ansi_instructions(&mut self, by: usize) { + self.expected_ansi_instructions = self.expected_ansi_instructions.saturating_sub(by); + } + pub fn expected_instructions(&self) -> usize { + self.expected_ansi_instructions + } + pub fn parse(&mut self, key: Key, raw_bytes: Vec) -> Option { + if let Key::Char('t') = key { + self.current_buffer.push((key, raw_bytes)); + match AnsiStdinInstructionOrKeys::pixel_dimensions_from_keys(&self.current_buffer) { + Ok(pixel_instruction) => { + self.decrement_expected_ansi_instructions(1); + self.current_buffer.clear(); + Some(pixel_instruction) + } + Err(_) => { + self.expected_ansi_instructions = 0; + Some(AnsiStdinInstructionOrKeys::Keys( + self.current_buffer.drain(..).collect(), + )) + } + } + } else if let Key::Alt(CharOrArrow::Char('\\')) = key { + match AnsiStdinInstructionOrKeys::color_sequence_from_keys(&self.current_buffer) { + Ok(color_instruction) => { + self.decrement_expected_ansi_instructions(1); + self.current_buffer.clear(); + Some(color_instruction) + } + Err(_) => { + self.expected_ansi_instructions = 0; + Some(AnsiStdinInstructionOrKeys::Keys( + self.current_buffer.drain(..).collect(), + )) + } + } + } else if self.key_is_valid(key) { + self.current_buffer.push((key, raw_bytes)); + None + } else { + self.current_buffer.push((key, raw_bytes)); + self.expected_ansi_instructions = 0; + Some(AnsiStdinInstructionOrKeys::Keys( + self.current_buffer.drain(..).collect(), + )) + } + } + fn key_is_valid(&self, key: Key) -> bool { + if self.current_buffer.is_empty() + && (key != Key::Esc && key != Key::Alt(CharOrArrow::Char(']'))) + { + // the first key of a sequence is always Esc, but termwiz interprets esc + ] as Alt+] + return false; + } + match key { + Key::Esc => { + // this is a UX improvement + // in case the user's terminal doesn't support one or more of these signals, + // if they spam ESC they need to be able to get back to normal mode and not "us + // waiting for ansi instructions" mode + !self.current_buffer.iter().any(|(key, _)| *key == Key::Esc) + } + Key::Char(';') + | Key::Char('[') + | Key::Char(']') + | Key::Char('r') + | Key::Char('g') + | Key::Char('b') + | Key::Char('\\') + | Key::Char(':') + | Key::Char('/') => true, + Key::Alt(CharOrArrow::Char(']')) => true, + Key::Alt(CharOrArrow::Char('\\')) => true, + Key::Char(c) => { + if let '0'..='9' | 'a'..='f' = c { + true + } else { + false + } + } + _ => false, + } + } +} + +#[derive(Debug)] +pub enum AnsiStdinInstructionOrKeys { + PixelDimensions(PixelDimensions), + BackgroundColor(String), + ForegroundColor(String), + Keys(Vec<(Key, Vec)>), +} + +impl AnsiStdinInstructionOrKeys { + pub fn pixel_dimensions_from_keys(keys: &Vec<(Key, Vec)>) -> Result { + lazy_static! { + static ref RE: Regex = Regex::new(r"^\u{1b}\[(\d+);(\d+);(\d+)t$").unwrap(); + } + let key_sequence: Vec> = keys + .iter() + .map(|(key, _)| match key { + Key::Char(c) => Some(*c), + Key::Esc => Some('\u{1b}'), + _ => None, + }) + .collect(); + if key_sequence.iter().all(|k| k.is_some()) { + let key_string: String = key_sequence.iter().map(|k| k.unwrap()).collect(); + let captures = RE + .captures_iter(&key_string) + .next() + .ok_or("invalid_instruction")?; + let csi_index = captures[1].parse::(); + let first_field = captures[2].parse::(); + let second_field = captures[3].parse::(); + if csi_index.is_err() || first_field.is_err() || second_field.is_err() { + return Err("invalid_instruction"); + } + match csi_index { + Ok(4) => { + // text area size + Ok(AnsiStdinInstructionOrKeys::PixelDimensions( + PixelDimensions { + character_cell_size: None, + text_area_size: Some(SizeInPixels { + height: first_field.unwrap(), + width: second_field.unwrap(), + }), + }, + )) + } + Ok(6) => { + // character cell size + Ok(AnsiStdinInstructionOrKeys::PixelDimensions( + PixelDimensions { + character_cell_size: Some(SizeInPixels { + height: first_field.unwrap(), + width: second_field.unwrap(), + }), + text_area_size: None, + }, + )) + } + _ => Err("invalid sequence"), + } + } else { + Err("invalid sequence") + } + } + pub fn color_sequence_from_keys(keys: &Vec<(Key, Vec)>) -> Result { + lazy_static! { + static ref BACKGROUND_RE: Regex = Regex::new(r"11;(.*)$").unwrap(); + } + lazy_static! { + static ref FOREGROUND_RE: Regex = Regex::new(r"10;(.*)$").unwrap(); + } + let key_string = keys.iter().fold(String::new(), |mut acc, (key, _)| { + match key { + Key::Char(c) => acc.push(*c), + _ => {} + }; + acc + }); + if let Some(captures) = BACKGROUND_RE.captures_iter(&key_string).next() { + let background_query_response = captures[1].parse::(); + Ok(AnsiStdinInstructionOrKeys::BackgroundColor( + background_query_response.unwrap(), + )) + } else if let Some(captures) = FOREGROUND_RE.captures_iter(&key_string).next() { + let foreground_query_response = captures[1].parse::(); + Ok(AnsiStdinInstructionOrKeys::ForegroundColor( + foreground_query_response.unwrap(), + )) + } else { + Err("invalid_instruction") + } + } +} diff --git a/zellij-client/src/unit/input_handler_tests.rs b/zellij-client/src/unit/input_handler_tests.rs index a8b99713..4b830656 100644 --- a/zellij-client/src/unit/input_handler_tests.rs +++ b/zellij-client/src/unit/input_handler_tests.rs @@ -81,8 +81,8 @@ impl FakeStdoutWriter { } } impl io::Write for FakeStdoutWriter { - fn write(&mut self, mut buf: &[u8]) -> Result { - self.buffer.lock().unwrap().extend_from_slice(&mut buf); + fn write(&mut self, buf: &[u8]) -> Result { + self.buffer.lock().unwrap().extend_from_slice(buf); Ok(buf.len()) } fn flush(&mut self) -> Result<(), io::Error> { @@ -188,7 +188,7 @@ fn extract_pixel_events_sent_to_server( let events_sent_to_server = events_sent_to_server.lock().unwrap(); events_sent_to_server.iter().fold(vec![], |mut acc, event| { if let ClientToServerMsg::TerminalPixelDimensions(pixel_dimensions) = event { - acc.push(pixel_dimensions.clone()); + acc.push(*pixel_dimensions); } acc }) @@ -319,8 +319,7 @@ pub fn pixel_info_queried_from_terminal_emulator() { let events_sent_to_server = Arc::new(Mutex::new(vec![])); let command_is_executing = CommandIsExecuting::new(); - let client_os_api = - FakeClientOsApi::new(events_sent_to_server.clone(), command_is_executing.clone()); + let client_os_api = FakeClientOsApi::new(events_sent_to_server, command_is_executing.clone()); let config = Config::from_default_assets().unwrap(); let options = Options::default(); @@ -353,7 +352,9 @@ pub fn pixel_info_queried_from_terminal_emulator() { let extracted_stdout_buffer = client_os_api_clone.stdout_buffer(); assert_eq!( String::from_utf8(extracted_stdout_buffer), - Ok(String::from("\u{1b}[14t\u{1b}[16t")), + Ok(String::from( + "\u{1b}[14t\u{1b}[16t\u{1b}]11;?\u{1b}\\\u{1b}]10;?\u{1b}\\" + )), ); } @@ -465,8 +466,7 @@ pub fn pixel_info_sent_to_server() { receive_input_instructions, ); let actions_sent_to_server = extract_actions_sent_to_server(events_sent_to_server.clone()); - let pixel_events_sent_to_server = - extract_pixel_events_sent_to_server(events_sent_to_server.clone()); + let pixel_events_sent_to_server = extract_pixel_events_sent_to_server(events_sent_to_server); assert_eq!(actions_sent_to_server, vec![Action::Quit]); assert_eq!( pixel_events_sent_to_server, @@ -588,8 +588,7 @@ pub fn corrupted_pixel_info_sent_as_key_events() { receive_input_instructions, ); let actions_sent_to_server = extract_actions_sent_to_server(events_sent_to_server.clone()); - let pixel_events_sent_to_server = - extract_pixel_events_sent_to_server(events_sent_to_server.clone()); + let pixel_events_sent_to_server = extract_pixel_events_sent_to_server(events_sent_to_server); assert_eq!( actions_sent_to_server, vec![ @@ -716,8 +715,7 @@ pub fn esc_in_the_middle_of_pixelinfo_breaks_out_of_it() { receive_input_instructions, ); let actions_sent_to_server = extract_actions_sent_to_server(events_sent_to_server.clone()); - let pixel_events_sent_to_server = - extract_pixel_events_sent_to_server(events_sent_to_server.clone()); + let pixel_events_sent_to_server = extract_pixel_events_sent_to_server(events_sent_to_server); assert_eq!( actions_sent_to_server, vec![ diff --git a/zellij-server/src/panes/grid.rs b/zellij-server/src/panes/grid.rs index 4a569bb1..f34ad143 100644 --- a/zellij-server/src/panes/grid.rs +++ b/zellij-server/src/panes/grid.rs @@ -287,7 +287,7 @@ pub struct Grid { scroll_region: Option<(usize, usize)>, active_charset: CharsetIndex, preceding_char: Option, - colors: Palette, + terminal_emulator_colors: Rc>, output_buffer: OutputBuffer, title_stack: Vec, character_cell_size: Rc>>, @@ -328,7 +328,7 @@ impl Grid { pub fn new( rows: usize, columns: usize, - colors: Palette, + terminal_emulator_colors: Rc>, link_handler: Rc>, character_cell_size: Rc>>, ) -> Self { @@ -357,7 +357,7 @@ impl Grid { clear_viewport_before_rendering: false, active_charset: Default::default(), pending_messages_to_pty: vec![], - colors, + terminal_emulator_colors, output_buffer: Default::default(), selection: Default::default(), title_stack: vec![], @@ -1553,16 +1553,23 @@ impl Perform for Grid { self.link_handler.borrow_mut().dispatch_osc8(params); } - // Get/set Foreground, Background, Cursor colors. - b"10" | b"11" | b"12" => { + // Get/set Foreground (b"10") or background (b"11") colors + b"10" | b"11" => { if params.len() >= 2 { if let Some(mut dynamic_code) = parse_number(params[0]) { for param in ¶ms[1..] { // currently only getting the color sequence is supported, // setting still isn't if param == b"?" { - let color_response_message = match self.colors.bg { - PaletteColor::Rgb((r, g, b)) => { + let saved_terminal_color = if dynamic_code == 10 { + Some(self.terminal_emulator_colors.borrow().fg) + } else if dynamic_code == 11 { + Some(self.terminal_emulator_colors.borrow().bg) + } else { + None + }; + let color_response_message = match saved_terminal_color { + Some(PaletteColor::Rgb((r, g, b))) => { format!( "\u{1b}]{};rgb:{1:02x}{1:02x}/{2:02x}{2:02x}/{3:02x}{3:02x}{4}", // dynamic_code, color.r, color.g, color.b, terminator @@ -1586,6 +1593,10 @@ impl Perform for Grid { } } + b"12" => { + // get/set cursor color currently unimplemented + } + // Set cursor style. b"50" => { if params.len() >= 2 diff --git a/zellij-server/src/panes/mod.rs b/zellij-server/src/panes/mod.rs index b9e7d8d0..c1fb31d1 100644 --- a/zellij-server/src/panes/mod.rs +++ b/zellij-server/src/panes/mod.rs @@ -1,4 +1,4 @@ -mod alacritty_functions; +pub mod alacritty_functions; mod floating_panes; pub mod grid; pub mod link_handler; diff --git a/zellij-server/src/panes/terminal_pane.rs b/zellij-server/src/panes/terminal_pane.rs index 26b4ac30..2b68ea33 100644 --- a/zellij-server/src/panes/terminal_pane.rs +++ b/zellij-server/src/panes/terminal_pane.rs @@ -21,7 +21,7 @@ use zellij_utils::{ position::Position, shared::make_terminal_title, vte, - zellij_tile::data::{InputMode, PaletteColor}, + zellij_tile::data::{InputMode, Palette, PaletteColor}, }; pub const SELECTION_SCROLL_INTERVAL_MS: u64 = 10; @@ -489,12 +489,13 @@ impl TerminalPane { pane_name: String, link_handler: Rc>, character_cell_size: Rc>>, + terminal_emulator_colors: Rc>, ) -> TerminalPane { let initial_pane_title = format!("Pane #{}", pane_index); let grid = Grid::new( position_and_size.rows.as_usize(), position_and_size.cols.as_usize(), - style.colors, + terminal_emulator_colors, link_handler, character_cell_size, ); diff --git a/zellij-server/src/panes/unit/grid_tests.rs b/zellij-server/src/panes/unit/grid_tests.rs index eac87284..42c4e329 100644 --- a/zellij-server/src/panes/unit/grid_tests.rs +++ b/zellij-server/src/panes/unit/grid_tests.rs @@ -21,7 +21,7 @@ fn vttest1_0() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -39,7 +39,7 @@ fn vttest1_1() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -57,7 +57,7 @@ fn vttest1_2() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -75,7 +75,7 @@ fn vttest1_3() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -93,7 +93,7 @@ fn vttest1_4() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -111,7 +111,7 @@ fn vttest1_5() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -129,7 +129,7 @@ fn vttest2_0() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -147,7 +147,7 @@ fn vttest2_1() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -165,7 +165,7 @@ fn vttest2_2() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -183,7 +183,7 @@ fn vttest2_3() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -201,7 +201,7 @@ fn vttest2_4() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -219,7 +219,7 @@ fn vttest2_5() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -237,7 +237,7 @@ fn vttest2_6() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -255,7 +255,7 @@ fn vttest2_7() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -273,7 +273,7 @@ fn vttest2_8() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -291,7 +291,7 @@ fn vttest2_9() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -309,7 +309,7 @@ fn vttest2_10() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -327,7 +327,7 @@ fn vttest2_11() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -345,7 +345,7 @@ fn vttest2_12() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -363,7 +363,7 @@ fn vttest2_13() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -381,7 +381,7 @@ fn vttest2_14() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -399,7 +399,7 @@ fn vttest3_0() { let mut grid = Grid::new( 41, 110, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -417,7 +417,7 @@ fn vttest8_0() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -435,7 +435,7 @@ fn vttest8_1() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -453,7 +453,7 @@ fn vttest8_2() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -471,7 +471,7 @@ fn vttest8_3() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -489,7 +489,7 @@ fn vttest8_4() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -507,7 +507,7 @@ fn vttest8_5() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -525,7 +525,7 @@ fn csi_b() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -543,7 +543,7 @@ fn csi_capital_i() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -561,7 +561,7 @@ fn csi_capital_z() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -579,7 +579,7 @@ fn terminal_reports() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -597,7 +597,7 @@ fn wide_characters() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -615,7 +615,7 @@ fn wide_characters_line_wrap() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -633,7 +633,7 @@ fn insert_character_in_line_with_wide_character() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -651,7 +651,7 @@ fn delete_char_in_middle_of_line_with_widechar() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -669,7 +669,7 @@ fn delete_char_in_middle_of_line_with_multiple_widechars() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -687,7 +687,7 @@ fn fish_wide_characters_override_clock() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -705,7 +705,7 @@ fn bash_delete_wide_characters() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -723,7 +723,7 @@ fn delete_wide_characters_before_cursor() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -741,7 +741,7 @@ fn delete_wide_characters_before_cursor_when_cursor_is_on_wide_character() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -759,7 +759,7 @@ fn delete_wide_character_under_cursor() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -777,7 +777,7 @@ fn replace_wide_character_under_cursor() { let mut grid = Grid::new( 21, 104, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -795,7 +795,7 @@ fn wrap_wide_characters() { let mut grid = Grid::new( 21, 90, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -813,7 +813,7 @@ fn wrap_wide_characters_on_size_change() { let mut grid = Grid::new( 21, 93, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -832,7 +832,7 @@ fn unwrap_wide_characters_on_size_change() { let mut grid = Grid::new( 21, 93, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -852,7 +852,7 @@ fn wrap_wide_characters_in_the_middle_of_the_line() { let mut grid = Grid::new( 21, 91, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -870,7 +870,7 @@ fn wrap_wide_characters_at_the_end_of_the_line() { let mut grid = Grid::new( 21, 90, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -888,7 +888,7 @@ fn copy_selected_text_from_viewport() { let mut grid = Grid::new( 27, 125, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -914,7 +914,7 @@ fn copy_wrapped_selected_text_from_viewport() { let mut grid = Grid::new( 22, 73, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -939,7 +939,7 @@ fn copy_selected_text_from_lines_above() { let mut grid = Grid::new( 27, 125, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -965,7 +965,7 @@ fn copy_selected_text_from_lines_below() { let mut grid = Grid::new( 27, 125, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -999,7 +999,7 @@ fn run_bandwhich_from_fish_shell() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1017,7 +1017,7 @@ fn fish_tab_completion_options() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1040,7 +1040,7 @@ pub fn fish_select_tab_completion_options() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1066,7 +1066,7 @@ pub fn vim_scroll_region_down() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1090,7 +1090,7 @@ pub fn vim_ctrl_d() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1113,7 +1113,7 @@ pub fn vim_ctrl_u() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1131,7 +1131,7 @@ pub fn htop() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1149,7 +1149,7 @@ pub fn htop_scrolling() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1167,7 +1167,7 @@ pub fn htop_right_scrolling() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1193,7 +1193,7 @@ pub fn vim_overwrite() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1213,7 +1213,7 @@ pub fn clear_scroll_region() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1231,7 +1231,7 @@ pub fn display_tab_characters_properly() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1249,7 +1249,7 @@ pub fn neovim_insert_mode() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1267,7 +1267,7 @@ pub fn bash_cursor_linewrap() { let mut grid = Grid::new( 28, 116, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1287,7 +1287,7 @@ pub fn fish_paste_multiline() { let mut grid = Grid::new( 28, 149, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1305,7 +1305,7 @@ pub fn git_log() { let mut grid = Grid::new( 28, 149, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1325,7 +1325,7 @@ pub fn git_diff_scrollup() { let mut grid = Grid::new( 28, 149, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1343,7 +1343,7 @@ pub fn emacs_longbuf() { let mut grid = Grid::new( 60, 284, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1361,7 +1361,7 @@ pub fn top_and_quit() { let mut grid = Grid::new( 56, 235, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1385,7 +1385,7 @@ pub fn exa_plus_omf_theme() { let mut grid = Grid::new( 56, 235, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1403,7 +1403,7 @@ pub fn scroll_up() { let mut grid = Grid::new( 10, 50, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1422,7 +1422,7 @@ pub fn scroll_down() { let mut grid = Grid::new( 10, 50, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1442,7 +1442,7 @@ pub fn scroll_up_with_line_wraps() { let mut grid = Grid::new( 10, 25, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1461,7 +1461,7 @@ pub fn scroll_down_with_line_wraps() { let mut grid = Grid::new( 10, 25, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1481,7 +1481,7 @@ pub fn scroll_up_decrease_width_and_scroll_down() { let mut grid = Grid::new( 10, 50, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1506,7 +1506,7 @@ pub fn scroll_up_increase_width_and_scroll_down() { let mut grid = Grid::new( 10, 25, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1531,7 +1531,7 @@ pub fn move_cursor_below_scroll_region() { let mut grid = Grid::new( 34, 114, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1549,7 +1549,7 @@ pub fn insert_wide_characters_in_existing_line() { let mut grid = Grid::new( 21, 86, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1572,7 +1572,7 @@ pub fn full_screen_scroll_region_and_scroll_up() { let mut grid = Grid::new( 54, 80, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1593,7 +1593,7 @@ pub fn ring_bell() { let mut grid = Grid::new( 134, 64, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1611,7 +1611,7 @@ pub fn alternate_screen_change_size() { let mut grid = Grid::new( 20, 20, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1633,7 +1633,7 @@ pub fn fzf_fullscreen() { let mut grid = Grid::new( 51, 112, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1655,7 +1655,7 @@ pub fn replace_multiple_wide_characters_under_cursor() { let mut grid = Grid::new( 51, 112, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1677,7 +1677,7 @@ pub fn replace_non_wide_characters_with_wide_characters() { let mut grid = Grid::new( 51, 112, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1695,7 +1695,7 @@ pub fn scroll_down_ansi() { let mut grid = Grid::new( 51, 112, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1713,7 +1713,7 @@ pub fn ansi_capital_t() { let mut grid = Grid::new( 51, 112, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1730,7 +1730,7 @@ pub fn ansi_capital_s() { let mut grid = Grid::new( 51, 112, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -1747,7 +1747,7 @@ fn terminal_pixel_size_reports() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(Some(SizeInPixels { height: 21, @@ -1774,7 +1774,7 @@ fn terminal_pixel_size_reports_in_unsupported_terminals() { let mut grid = Grid::new( 51, 97, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), // in an unsupported terminal, we don't have this info ); @@ -1799,7 +1799,7 @@ pub fn ansi_csi_at_sign() { let mut grid = Grid::new( 51, 112, - Palette::default(), + Rc::new(RefCell::new(Palette::default())), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); diff --git a/zellij-server/src/panes/unit/terminal_pane_tests.rs b/zellij-server/src/panes/unit/terminal_pane_tests.rs index f03f170c..efb83db9 100644 --- a/zellij-server/src/panes/unit/terminal_pane_tests.rs +++ b/zellij-server/src/panes/unit/terminal_pane_tests.rs @@ -4,6 +4,7 @@ use crate::tab::Pane; use ::insta::assert_snapshot; use std::cell::RefCell; use std::rc::Rc; +use zellij_tile::data::Palette; use zellij_tile::prelude::Style; use zellij_utils::pane_size::PaneGeom; @@ -26,6 +27,7 @@ pub fn scrolling_inside_a_pane() { String::new(), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), + Rc::new(RefCell::new(Palette::default())), ); // 0 is the pane index let mut text_to_fill_pane = String::new(); for i in 0..30 { diff --git a/zellij-server/src/route.rs b/zellij-server/src/route.rs index af31523a..a6315447 100644 --- a/zellij-server/src/route.rs +++ b/zellij-server/src/route.rs @@ -449,6 +449,26 @@ pub(crate) fn route_thread_main( )) .unwrap(); } + ClientToServerMsg::BackgroundColor(background_color_instruction) => { + rlocked_sessions + .as_ref() + .unwrap() + .senders + .send_to_screen(ScreenInstruction::TerminalBackgroundColor( + background_color_instruction, + )) + .unwrap(); + } + ClientToServerMsg::ForegroundColor(foreground_color_instruction) => { + rlocked_sessions + .as_ref() + .unwrap() + .senders + .send_to_screen(ScreenInstruction::TerminalForegroundColor( + foreground_color_instruction, + )) + .unwrap(); + } ClientToServerMsg::NewClient( client_attributes, cli_args, diff --git a/zellij-server/src/screen.rs b/zellij-server/src/screen.rs index aa8b9c82..52b4af87 100644 --- a/zellij-server/src/screen.rs +++ b/zellij-server/src/screen.rs @@ -6,6 +6,7 @@ use std::os::unix::io::RawFd; use std::rc::Rc; use std::str; +use zellij_tile::data::{Palette, PaletteColor}; use zellij_tile::prelude::Style; use zellij_utils::input::options::Clipboard; use zellij_utils::pane_size::{Size, SizeInPixels}; @@ -13,6 +14,9 @@ use zellij_utils::{ input::command::TerminalAction, input::layout::Layout, position::Position, zellij_tile, }; +use crate::panes::alacritty_functions::xparse_color; +use crate::panes::terminal_character::AnsiCode; + use crate::{ output::Output, panes::PaneId, @@ -88,6 +92,8 @@ pub enum ScreenInstruction { UpdateTabName(Vec, ClientId), TerminalResize(Size), TerminalPixelDimensions(PixelDimensions), + TerminalBackgroundColor(String), + TerminalForegroundColor(String), ChangeMode(ModeInfo, ClientId), LeftClick(Position, ClientId), RightClick(Position, ClientId), @@ -166,6 +172,12 @@ impl From<&ScreenInstruction> for ScreenContext { ScreenInstruction::TerminalPixelDimensions(..) => { ScreenContext::TerminalPixelDimensions } + ScreenInstruction::TerminalBackgroundColor(..) => { + ScreenContext::TerminalBackgroundColor + } + ScreenInstruction::TerminalForegroundColor(..) => { + ScreenContext::TerminalForegroundColor + } ScreenInstruction::ChangeMode(..) => ScreenContext::ChangeMode, ScreenInstruction::ToggleActiveSyncTab(..) => ScreenContext::ToggleActiveSyncTab, ScreenInstruction::ScrollUpAt(..) => ScreenContext::ScrollUpAt, @@ -231,6 +243,7 @@ pub(crate) struct Screen { character_cell_size: Rc>>, /// The overlay that is drawn on top of [`Pane`]'s', [`Tab`]'s and the [`Screen`] overlay: OverlayWindow, + terminal_emulator_colors: Rc>, connected_clients: Rc>>, /// The indices of this [`Screen`]'s active [`Tab`]s. active_tab_indices: BTreeMap, @@ -265,6 +278,7 @@ impl Screen { active_tab_indices: BTreeMap::new(), tabs: BTreeMap::new(), overlay: OverlayWindow::default(), + terminal_emulator_colors: Rc::new(RefCell::new(Palette::default())), tab_history: BTreeMap::new(), mode_info: BTreeMap::new(), default_mode_info: mode_info, @@ -482,6 +496,22 @@ impl Screen { *self.character_cell_size.borrow_mut() = Some(character_cell_size); } } + pub fn update_terminal_background_color(&mut self, background_color_instruction: String) { + if let Some(AnsiCode::RgbCode((r, g, b))) = + xparse_color(background_color_instruction.as_bytes()) + { + let bg_palette_color = PaletteColor::Rgb((r, g, b)); + self.terminal_emulator_colors.borrow_mut().bg = bg_palette_color; + } + } + pub fn update_terminal_foreground_color(&mut self, foreground_color_instruction: String) { + if let Some(AnsiCode::RgbCode((r, g, b))) = + xparse_color(foreground_color_instruction.as_bytes()) + { + let fg_palette_color = PaletteColor::Rgb((r, g, b)); + self.terminal_emulator_colors.borrow_mut().fg = fg_palette_color; + } + } /// Renders this [`Screen`], which amounts to rendering its active [`Tab`]. pub fn render(&mut self) { @@ -573,6 +603,7 @@ impl Screen { self.session_is_mirrored, client_id, self.copy_options.clone(), + self.terminal_emulator_colors.clone(), ); tab.apply_layout(layout, new_pids, tab_index, client_id); if self.session_is_mirrored { @@ -1309,6 +1340,12 @@ pub(crate) fn screen_thread_main( ScreenInstruction::TerminalPixelDimensions(pixel_dimensions) => { screen.update_pixel_dimensions(pixel_dimensions); } + ScreenInstruction::TerminalBackgroundColor(background_color_instruction) => { + screen.update_terminal_background_color(background_color_instruction); + } + ScreenInstruction::TerminalForegroundColor(background_color_instruction) => { + screen.update_terminal_foreground_color(background_color_instruction); + } ScreenInstruction::ChangeMode(mode_info, client_id) => { screen.change_mode(mode_info, client_id); diff --git a/zellij-server/src/tab/mod.rs b/zellij-server/src/tab/mod.rs index 8a9fb0ea..a32964de 100644 --- a/zellij-server/src/tab/mod.rs +++ b/zellij-server/src/tab/mod.rs @@ -90,6 +90,7 @@ pub(crate) struct Tab { // it seems that optimization is possible using `active_panes` focus_pane_id: Option, copy_on_select: bool, + terminal_emulator_colors: Rc>, } #[derive(Clone, Debug, Default, Serialize, Deserialize)] @@ -283,6 +284,7 @@ impl Tab { session_is_mirrored: bool, client_id: ClientId, copy_options: CopyOptions, + terminal_emulator_colors: Rc>, ) -> Self { let name = if name.is_empty() { format!("Tab #{}", index + 1) @@ -352,6 +354,7 @@ impl Tab { clipboard_provider, focus_pane_id: None, copy_on_select: copy_options.copy_on_select, + terminal_emulator_colors, } } @@ -419,6 +422,7 @@ impl Tab { layout.pane_name.clone().unwrap_or_default(), self.link_handler.clone(), self.character_cell_size.clone(), + self.terminal_emulator_colors.clone(), ); new_pane.set_borderless(layout.borderless); self.tiled_panes @@ -647,6 +651,7 @@ impl Tab { String::new(), self.link_handler.clone(), self.character_cell_size.clone(), + self.terminal_emulator_colors.clone(), ); new_pane.set_content_offset(Offset::frame(1)); // floating panes always have a frame resize_pty!(new_pane, self.os_api); @@ -669,6 +674,7 @@ impl Tab { String::new(), self.link_handler.clone(), self.character_cell_size.clone(), + self.terminal_emulator_colors.clone(), ); self.tiled_panes.insert_pane(pid, Box::new(new_terminal)); self.should_clear_display_before_rendering = true; @@ -698,6 +704,7 @@ impl Tab { String::new(), self.link_handler.clone(), self.character_cell_size.clone(), + self.terminal_emulator_colors.clone(), ); self.tiled_panes .split_pane_horizontally(pid, Box::new(new_terminal), client_id); @@ -725,6 +732,7 @@ impl Tab { String::new(), self.link_handler.clone(), self.character_cell_size.clone(), + self.terminal_emulator_colors.clone(), ); self.tiled_panes .split_pane_vertically(pid, Box::new(new_terminal), client_id); diff --git a/zellij-server/src/tab/unit/tab_integration_tests.rs b/zellij-server/src/tab/unit/tab_integration_tests.rs index ba6fc8f2..c9f3fcf7 100644 --- a/zellij-server/src/tab/unit/tab_integration_tests.rs +++ b/zellij-server/src/tab/unit/tab_integration_tests.rs @@ -103,6 +103,7 @@ fn create_new_tab(size: Size) -> Tab { connected_clients.insert(client_id); let connected_clients = Rc::new(RefCell::new(connected_clients)); let character_cell_info = Rc::new(RefCell::new(None)); + let terminal_emulator_colors = Rc::new(RefCell::new(Palette::default())); let copy_options = CopyOptions::default(); let mut tab = Tab::new( index, @@ -120,6 +121,7 @@ fn create_new_tab(size: Size) -> Tab { session_is_mirrored, client_id, copy_options, + terminal_emulator_colors, ); tab.apply_layout( LayoutTemplate::default().try_into().unwrap(), @@ -149,7 +151,7 @@ fn take_snapshot(ansi_instructions: &str, rows: usize, columns: usize, palette: let mut grid = Grid::new( rows, columns, - palette, + Rc::new(RefCell::new(palette)), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); @@ -170,7 +172,7 @@ fn take_snapshot_and_cursor_position( let mut grid = Grid::new( rows, columns, - palette, + Rc::new(RefCell::new(palette)), Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), ); diff --git a/zellij-server/src/tab/unit/tab_tests.rs b/zellij-server/src/tab/unit/tab_tests.rs index 62dfdc01..c68d77bf 100644 --- a/zellij-server/src/tab/unit/tab_tests.rs +++ b/zellij-server/src/tab/unit/tab_tests.rs @@ -99,6 +99,7 @@ fn create_new_tab(size: Size) -> Tab { let character_cell_info = Rc::new(RefCell::new(None)); connected_clients.insert(client_id); let connected_clients = Rc::new(RefCell::new(connected_clients)); + let terminal_emulator_colors = Rc::new(RefCell::new(Palette::default())); let copy_options = CopyOptions::default(); let mut tab = Tab::new( index, @@ -116,6 +117,7 @@ fn create_new_tab(size: Size) -> Tab { session_is_mirrored, client_id, copy_options, + terminal_emulator_colors, ); tab.apply_layout( LayoutTemplate::default().try_into().unwrap(), @@ -144,6 +146,7 @@ fn create_new_tab_with_cell_size( let mut connected_clients = HashSet::new(); connected_clients.insert(client_id); let connected_clients = Rc::new(RefCell::new(connected_clients)); + let terminal_emulator_colors = Rc::new(RefCell::new(Palette::default())); let copy_options = CopyOptions::default(); let mut tab = Tab::new( index, @@ -161,6 +164,7 @@ fn create_new_tab_with_cell_size( session_is_mirrored, client_id, copy_options, + terminal_emulator_colors, ); tab.apply_layout( LayoutTemplate::default().try_into().unwrap(), diff --git a/zellij-utils/src/errors.rs b/zellij-utils/src/errors.rs index 4dca51fd..396fc9c5 100644 --- a/zellij-utils/src/errors.rs +++ b/zellij-utils/src/errors.rs @@ -268,6 +268,8 @@ pub enum ScreenContext { UpdateTabName, TerminalResize, TerminalPixelDimensions, + TerminalBackgroundColor, + TerminalForegroundColor, ChangeMode, LeftClick, RightClick, diff --git a/zellij-utils/src/ipc.rs b/zellij-utils/src/ipc.rs index 8a3dafd3..4d76c088 100644 --- a/zellij-utils/src/ipc.rs +++ b/zellij-utils/src/ipc.rs @@ -75,6 +75,8 @@ pub enum ClientToServerMsg { // Disconnect from the session we're connected to DisconnectFromSession,*/ TerminalPixelDimensions(PixelDimensions), + BackgroundColor(String), + ForegroundColor(String), TerminalResize(Size), NewClient( ClientAttributes,