Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
experimental new style completion
- X-seq: zsh-workers 4850
- From: Sven Wischnowsky <wischnow@xxxxxxxxxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxxxxxxx
- Subject: experimental new style completion
- Date: Fri, 18 Dec 1998 16:59:21 +0100 (MET)
Hello
Below is a first implementation of the new style completion stuff we
were discussing. This is *very* experimental, it may change
completely, in some places it may be not working, it may be slow,
wrong, not powerful enough or too powerful, it may be... This is just
to give you something to play with over the next two weeks ;-)
Comments:
The thing below contains a patch and a file called `example' which
will be created in the Src directory. This file contains a first
implementation of the main loop for completion and everything else you
need to start. There should be more examples for completion functions
for commands, though...
The patch will apply on top of 3.1.5-pws3 plus all recent patches or
on top of 3.1.5-pws4.
To use all this new stuff you define a completion widget (since this
name is already used for Peter's `zle -c' stuff I need a different
name, but during this mail I will use it...), e.g.:
zle -c my-comp expand-or-complete main-complete
`my-comp' is the name of the widget to be defined, `main-complete' is
the name of a shell function that will be called from the completion
code to generate the matches. The `expand-or-complete' can be the name
of any the well known names of widgets that call the completion
code. The newly defined widget will behave like the widget thus named,
except for generating the matches (for which it uses the shell
function, not the compctl's).
[Peter, would this be interesting to use for your `zle -C' stuff?]
In fact the behaviour is inherited by using most of the existing code
(this is one of the reasons why the patch is so relatively small). The
shell function will generate the matches, anything else, including
displaying the matches, inserting them into the command line, deciding
to use RECEXACT, AUTOMENU, and whatever else is still done by the
shell itself.
To use the above widget you then use:
bindkey `\C-i' my-comp
(Or whichever key you like.)
Inside the shell function the completion code sets some variables to
report context information and it makes available two new builtins to
produce the matches and a couple of condition codes.
The variables are:
PREFIX the prefix of the current word from the command line
IPREFIX an ignored prefix (see below)
SUFFIX the suffix of the current word
COMMAND the name of the command we are currently completing for
CONTEXT the context we are currently completing in, this can be
any of:
`cmd' we are completing in command position
`arg' we are completing in argument position
`redir' ... after a redirection operator
`math' ... in a math environment
`subscr' ... in a subscript
`value' ... in the value of an variable assignment
`cond' ... inside `[[...]]'
argv the positional parameters are set to the *arguments* of the
command we are completing for (*not* including the command
name)
CURRENT this is the index into `argv' pointing to the current word
NMATCHES this is the number of matches produced (and accepted) so far
These variables are settable, the example file contains two convenient
aliases to save and restore them. The completion code uses a wrapper
function to rest them to their old values at the end of each function
executed from the completion widget.
The conditions work on the contents of these variables, probably
changing them, they are modelled directly after the `compctl -x'
condition code:
-prefix str
is true if PREFIX starts with str
-iprefix str
like `-prefix', but makes the matched portion be
ignored; this is done by appending the matched
portion to IPREFIX and removing it from PREFIX
-position beg [end]
is true if we are currently in position `beg' (or between `beg'
and `end' if that is given); if `end' is given COMMAND, CONTEXT,
CURRENT, and argv are changed so that they contain only the range
of words between these positions
(as always when one of these condition takes an integer argument
an expression may be given, like `-position a+1')
-word index str
is true if the `index'th argument is `str'
-mword index pat
like `-word' but with pattern matching
-current index str
-mcurrent index pat
like `-word' and `-mword' but the `index' is take relative to the
current position
-string str
-string index str
true if the current word contains `str'; anything up to the
`index'th occurrence of `str' is ignored (or anything up to the
last occurrence if no `index' is given, again this sets IPREFIX
and PREFIX)
-class str
-class index str
like `-string' but the `str' is taken as a character class
-words min [max]
true if we have at least `min' arguments (and less than or equal
to `max' arguments if that is given)
-between s1 s2
true if we are between an argument equal to `s1' and before an
argument equal to `s2' (if there is such an argument)
-mbetween p1 p2
like `-between' but with pattern matching
-after str
true if we are after an argument equal to `str'
-mafter pat
like `-after' but with pattern matching
-nmatches num
true if we have generated `num' matches
Of course, tests can also be done by using the normal condition stuff
and the above variables (probably changing them), but these condition
codes may be faster and/or easier to use.
The builtins are:
complist ...
This gets almost the same arguments as compctl, except the more
complicated ones (like xor'ed completions, `-x', `-l', ...).
When using this builtin the completion code uses the current values
of the variables above, so that the combination of this builtin and
the condition codes make life really simple...
compadd [options] matches...
This allows access to the structure used internally used for storing
matches. When using this builtin the variables are not used and the
completion code does not check if the strings added match what is
one the command line, so you should know what you are doing.
Supported options are:
-q, -Q, -U, -P str, -S str, -J name, -V name
these are used like the options with the same names in compctl and
complist
-f
if this option is given the strings are treated like filenames
(showing files types with LISTTYPES)
-n
this keeps the strings from appearing in the list of matches
-i str
this gives an ignored previous to use when inserting the match;
such a string is not listed and inserted before a prefix given
with the `-p' option
-p str
this gives another prefix that is not listed; but it is inserted
and used for testing file types
-s str
like `-p' but giving a suffix
Note that this builtin is the most experimental part. Here, almost
everything may change and many things may still be not working.
I suggest to have a look at the example file to see how all this can
be used.
Mixed comments:
- I have put the whole thing into the compctl module for now.
- I haven't used an associative array for the variables since I would
then like to put [LR]BUFFER and so on into it and I didn't want to
change to many parts of the shell for this first version.
Also: using separate variables makes handling them so easy...
- When using `complist' the completion code still does normal completion
after `~', `=', and `$' (unless that is in IPREFIX, of course).
- Also, when using `complist' the global matches defined by `compctl -M'
are used, this at least should be changed one day.
- Later we may add a way to access the matches produced and to control
what is done with the collected data (inserting, listing, ...)
- With `complist' you can make functions be called with `-K' and `-y'
put they can't use `read' to get at the comamnd line data. This is
because the new style completion uses a different way to store them
(the above parameters).
- When using conditions that change the parameter values the behavior
may be irritating since following tests use the changed values. To
avoid this you have to put the test into a separte function so that
the previous state is automatically restored by the completion code
or you have to restore the state by hand. Since I expect that many
users will want to put all their tests for a command in one function
(making things better readable) restoring by hand and forgetting to
do so in the right places will become inconvenient.
- The condition codes behave a bit different from their `compctl -x'
counterparts since they can only access the arguments (not the
command name).
- The attentive reader of the patch will notice some hunks in zsh.h
and in mem.c. This implement a way to re-use older heaps. In fact
there are functions that allow one to temporarily switch to another
heap, go back to an older heap, and to temporarily switch to another
heap. The patch for zsh.h implements some macros like HEAPALLOC that
make it easy to use this mechanism.
Whew.
Ok. Have a look at it, if you like. Play with it if you like. And then
I would be glad about all comments, suggestions, and criticisms I get.
Like Peter I will now leave for the next two weeks, so...
fröhliche Weihnachten und einen guten Rutsch ins neue Jahr!
Bye
Sven
begin 600 newcomp.tar.gz
M'XL("-YT>C8"`VYE=V-O;7`N=&%R`.P]_7?;.([]U?TKF-S;1([EU/)G$D^[
M+YNF<[E-TUR3SLQNKR\KRW*B5UER)3ENT^9_/P#\$"E+;II^S.S<Y75LBP)!
M$@!!``0Y,S?SKIJ1OVAZ\73VX+O\.:U6O]5B#QAC@T&??_>[],V8XPR<EL-8
MO]_I=P?M3KL%99U^O_V`M1[\@+]YFKD)8P\60>I=1?&B$BX*WJ?Q)'OPY_H;
M!Y,):WH)V]Y^=#/^\"A.'_TS]!^A,#C;'CM+//WYX=;65CED[?QJSI[Z'G,&
MS&GOM5M['8<YN[L[#YO-9A%-`;C5V6L/./"6^4?M#=KV8,#H$7'!XVZ7P:_F
M0\8>;6T]@J\@RN`_Q.YEX60>>4,H?-B`UVSM,6NQ8,(6/G,3'Z"8RT#<69I]
M"'V&54(_"^*(837Z`1@;O#+]RG%SQ.(=NPSCD1NR:S<)W%'HIVP2)RR]\L.0
MS=S$G?J9GZ387FEKA4;".+JDU]X\2?PHLZ&,_K`LFN(D]=.A4<6[`KG=HCIQ
ME/GO\SJB<#IUH[%9.$O\2?#>+$OGDZ6R@`,2%9'([/PJ2-50&>!EV96O2):R
MQ)^.TM!-KZPZO7TWCS,_`B+`LP=?;)+$4X[_(7ZPF]"_R)+`>_MAV[/9:)X1
M=V#^L7GJCY%L@xxxxxxx;5;U!\0HDYINMV-WNSNYW'3[+;O;'TC)(>)Z%Y,@
M2;-M&*W''C-05*W6L/ARZJ9OX67YBS:\.3BX.#@X>'%R/A1$U)@"KS5NB"=.
M7?'`Z<\>0]V:1GMX>_+J^%@VFOC9/(EX)VZ1+:5C[N_:W4%7&_/.CMW=W=''
M//9!`OTK8%6&O+0$F>&A+MNZF20^O`@7<3).;08_TN#&!Z;A5SRQN.35%;Q`
MD?CN>)8ET/&)&X8CUWM[H;V1M+E).?:<1/725T2OLE></&5O@NI7G,CU2FJN
M4(,D@X8&HY(*54CO[JX,.?BS).#@.\SI[[5V]CJ=:G78&73LSF"7,UG,3U*"
ML)!E@8?ZZN$:N_0S27W!+YR-MM`:6UONM<T.^'L0:)NT'$DU_QFD8W]2!Z0?
M!<5`!YRZ2>K3O!^Y*30T"=U+KO5RO;;W4,Y*C@T0@;Y%2*CH9E(+1S'J5`;,
M]Z,Q3/<<@4TDDF,4<OL=Q\A_>N'O,]92_NYV[6ZK+?E;"R:6FUQ>OVZ]81L;
M3/S$I\>/V69S$SM>PU[@FT8#);H&(X=9B`5#(%,-9X&BDU?',E`U7ABDJ)X.
M7CP_O7AY^/S%+X<$K<\-_+OE#,"_J3]-_<RRKN-@#`I@P_.`E"U;Z04O0Z5`
M#*1!]"4#O\$@8`FWD$UK'%#TTJ%W?@C,^BA?E0RWQO5VQ8A-C0`%M_<=>AD_
M>ZV>W7-:N5+NM7:A0"GE6NTC?5(727)GPGKA96+@,#XLJ=WX20)B;G%17P_"
MT+\$,R2>D5G1_(NW;M/"84.#2#S2AE`O)YA$?*N:Q28L#OW:>5-GO$.U&=!*
M%+,&UJ12*H`WZ^NLB85E8^YW>W:_YR@9KO&V1K`0O!U*7GLN<&TSW-Q#DM?*
M^\#YEFVG\Y$W'9?UAR9@H4O4(B.I0+1K)&\<*3*@W^O8X&#D#+A;[S@3UD2;
M]^"#K&K(KM[1'S#^4@,;N#7H:1(ZZ/7M0;^7$ZBL@3)R'0"Y&@:Y&O<G5V.)
M7`W%*VR`*UU0)VM7[TUZT3S_)"8Z?#S?/WEJ4*6"#KTNT&%7HP/84X/!SET$
MY>D?8>2THJ$=.ZPBQM/#9_NOCL_+9RTXY3#<5N6LU<=[3A/#_"OO6GE'GAV]
M/#OG2'.F*.";A9M$&M&F03H+70]63XY?<Z2LYGF=%MUU;CH,=CKV8+=3R;/E
M07S?V:T:^%TI4\IN,+)0NG-QW^W;.RTU[07M*@3^^$<*_!H?W*=/S!3X(C5D
M6^!#LA@,^F,Q?M%>JYY/C+RI4MKLM.S!3B^GS4YK8.\XN4%3*W#M^(@SK9Q8
M[^]*K!(KD0Q(<*CBA3\V1O)9HFEJOXI@X(*-`VK%?S_SO0Q:=B>9G^ALXLL^
MK3.27V4DVW$<HE!.LF[;W@$C(#?BJ5M;C0:M)C`3K#7T##\@7_D/L`;;=7@C
MJ;<E%AXP$AN;-'>DZ<B'U6`E)E*!I._C9-,DJ)"2)6(:A%06DO`(SJ_\Q-\$
M"S\"9@"%(G!$KGUF->JZ2P`6;)H&EY&L"+[!0O@"5RZ`IS$XQPD;^>!*^&P:
M7P?1)8,N93'Y#-MYO?*HAM/:Z=I.:S=7TM96A#YT\PFR$G3_E$1/LZ.A[X?P
M!J8#NC.*X4-TGW@4AWP;<EDN8[8(LBL69-O8`V%VZWX6)^H&XH?YBTV3&<S]
M167&YY1D@NM<&I'3:\*"0?Z+2;3!Y]#9Z>'!T?XQH5%T![SN/(16A.?&73`*
MINC!NR`*TBM@,_0:9<]QG%W;<=JY#?,'HA-*W!^#5*4B!KZ)[?3:725B6C?A
M2UJ`#\F)1)-4^-AU=N.AGO(LX11M@?=5'WZ6.NB:.T03KJA*?;@2:H&J(U;W
MP)R'#Q4M^%']O5^72TG>=UHV?/0ER35G5?CAZ56\T`.19'Q]"5GY7TDGC8A8
M'G(4Q$5/SNGG6OQ;]NQK.E=.QDX;.MO1+'BGWQ_8;4T/*&2>IX)_*J2N19<:
M;!1$U'T<;5EX28R%'N)9*L)+\\BK0^6/(@29AY]D4!*A4"J)6A3/ERO86K[+
M():RPDKFP=H31^$'6#X82BX:?1A6+]G$**YM^M+&"2@BU7>9$!(TYSLO,3EO
MC.4.O'?J==$S[K'PRLII%:JOE`Y"J>%C6K6:%_!R2QI?3-VWON0K#I>+FNK]
MDA`VF*E/L.36V(DI%1MW/+ZWU(@P$!K(*7[Z0^,%QKG%]@"\G)E/Z7RBM@X,
M;#I4#@0/ETD\GQ7J4*^0KS9[Q[^F_"M*_R"2B[%8:RA"'[!`YJ8B!A2'(I(H
MND/`.$8.A,$3#+.QF8(@>=:IP$M@E?>N0!AG&A@WZ=\)DWY"+L#S9RJ@V,A]
M`*/"?XL*[Z18EH--BGB?'1VOP!H5P4]><%>DJL(K46&ZNANG`HQHL@'"PT%1
MAM;3+$&SM<1CJ,9W9N`#^?M*?/]EX",1UC!RD4;A^S*LOVA^VAHAJ2LWBR1?
M4.S;MAH88PF^GM@SDWE?CS`U$7X-^X21NE?FJHW<L0@3[)EQ@EFUAZ:Y@*F<
MI=S/S!]+'.UQ/!^A&EK97)EW+='/<A>4NZI$FQD/S,K"F18S;9A!6<TY-U$(
M__BS2*J&YM]U&(I^MP752M*_8OV=!N#CBGP%KKW3NVIM6!5%,H.%<FZS&?\$
MB8)/_$F_:":!'P.K#ZP\N.K83(6*S.T:M1C_!TA6$/GLE_V7UF]UIK9JF+4!
MSV1LB(4:!';N\5`996H4UET<I;X.9A]FZIGCO'83:CA'D;Y^`UR2>#ZR]8-7
M+U\>GIP#74Z?7QR=G!_^?/C2IKYI61YU=FMK55X`V&^BRMG!_O&^7D/LE1=J
M4&B[J@;?0C=JG+X\?';T6WD%L7MNP)^]>E8)+_;4#?BC50T$92V</-\_/_C/
MP[,*2LG<%Z.2$#4N<\3_6S,WAM@D#3W.(!('W<A:DH(M;Z;;@6@R>#.9L4$X
MALR;-9^0?,`O93N<4O49KJ@>Z+K,)VA+PMI4"Z6(?2*R"-^=)@K-M=FT+B<D
M8;$(8YWG$67NJ/D$[.DH'ON6++%53SB:IZ>OSL\0$4Q//AJ,&J8^;3V;A%B7
MUFYM-FT^"?UK/X0FP>I'NPP>AO+5?'OL9BX."IH2(E_C%I$%PSC_Q^FA)4=6
M%Z2@Y4*Q?B\?5?,)=";=]B81(`327^,&>S:)ACK(91'DT@#)%Q+9C!"7Y78"
M0@*SM[H=':2JG5M%BXBP"&D03[IR*_4(4.0P4RNO8DE9X88_K)FZ2*(PB*):
MFHUE'83&XL]X'MC,Q2)Q9S,_L8[15T,7QV;/P++^%8K9PM8T7+%=W88OT^#Y
MFB.<%R_#F!9\3\?X1<I[*R;UO14K(X82VV+0=S8X`%,I>5@@,Z.X*B1@@!"E
M>LI;C9J"%^/YC-L:2]E#M9COCA8A\B2B6LP=(!-"2QBJQ=PI,@%4WA`"!&4H
M]*0CHAMP[0JI:''J`]'5-)4I7F+,@`L),93%<M!8SFE5J\B6JID99C=9`IVR
MB$[UY7H:%<Q<-%5O.EZJII/&R%F3E:!@J9).+CVW356"@J5*0;&I8*FM0#:F
M26;KKM,ON(SBQ+_@2"V<=N&RLQV#Y4$))_E87X=OM/7`*`>XS?]I;<H>Q**>
M2IO,J^1CP6Q'-[.@(2T3$PR[8KI:7!]6-`D=++:XW.`2[<`B#<O;^)PN`5GT
MWBZMF]4.OZ5M)^D>OY[1>3=OOU6T&W5MM(K7B8]3T\LN$C>Z](G9(Z%JC3%@
M^A?0R`>K>F3&2;8HZT7\SB-B5H"6?7TY"1*#-._P8[9D/:"G/T,3%[_YX@M(
M1CS\$,"_9A,,W$8#0<"8P/%OO<LY!QCODAI9.J6E53IZH^`0@9LD[@?Y4KV1
M?8->WB%+D[8H="W6?,S'Q.-YI9II'9;87-!E)*X<%)31^N?%,QK+"2T#:R*I
M;TE6-5&NZRL;",IL`M41%?RV7!1"?7*N<C8J.Q7<IU?ZNIK2S-;[)/4>N;B\
MTZG13WTGU-!U`!WZD97R(.ZR'WA;/LON--!9G-),O\](:5K*<5Z[H:0]KJZ6
M"UXQ^ZOQ#N;='AL)@QGU-R4&TMBD+-L,LSI-FT*ZS))X(_8$FE%67K.I+'#?
M>.-K;T;L)[T.:X"IK%737_KY2Y1G;`[/'FQL,$02X@]?%?FR*,"B$?_U$VHD
M#@^_#,93Y@B2IIYSTE!UH.9\0X=FPZ_@+J9^WY>SN#:!OARS#=S,_ZO!D3V@
M%VL4&+^*KT-M9NCTB`W2QXKT9*AI_",XW$N-D<YAO3`/9"2[EN8Z^G7\1J>C
M&(I3ET))5AJ))=@,*)EKP`AO.N.S,I^YH!#K7\,#Q!I^A2)19`UTPKEFZD11
MW3BYJ@B69BA7&IHK4(:A96)HYJJFAL_@:GDSL(.HWUB%K__X"9,X`)+:.$K%
MP`!/\#2=2AT7?`?=1@<??IAB:SJ?G0&Z.(9*882YFKCO2+GNN+^,D>&3"YI=
MH9KYWM&(?R$Q0A7.Q+U'YBD)+=?@0A+$5`Y63V6"%5/6D%+W=>M-OK4##EPZ
M'UD;:2Y`N!DZPX!!XE]:J2[NJX5=;3&116>:>VCGD=8?LAF^!9!"YI*N8,8Q
MURZX^><A>DV]8!DLY3)BC-0,\G!S5K6?<YM//[F.2.6L=P0#G?JNM.J>0<H:
MIZ/S1NR#%(A8*Z.@N?U:*]<X$I"3D6SB93+"DDE[=D!%%7RK?04)^:J-9&SJ
M4?M,HZ49#RH$SB6)LDRLW[KLUA5;6D.#!;CTCY3TY@"$Z<<L[S+2<&_CV0Q7
ME*T3I5UBA1#\:!Z$&7B&(VC='8D8.L_Y^-NKH^/SHQ/T*6DS?IT"OG)W'0KH
MN>FH.+!<0T3;1GT,Q9@(>'#&N3,&=SPV$4#!BOHR'EW<<8C&F*'MQ?EH19[(
MBY.G3P^?6>M\5>--:5X.-479/':Q1K!4)?AL'6F\Z^V((JK2+JV%RZ)6`Q\)
MM!QZN@+<6087LZ:B0KL$_^H:G>4:/&JGP9.%M6+`7NBF:16\4TZ@M-"?=`7^
MD9\M?%_G`DWV58/^3)624=-V[#)\I6Q,5U8H&;74`UH5660V4SXI,!2TH/`T
M#UT;\^+7E_NGV(@>VZYC1O+M4#L76)X,UL.<NI[*J4/U![H\CO/,I.?Q>![Z
M;,H/_ZT)K6>MP=P6FBFUIK3-8@L5I0Y\\<?Z(YDI)9YY7J>1T[ETW!3STMI.
MIV^WG:XZR/X%O;.^HGOL$QUX`PQ"%^482"GE!]IBHSY_E-610'*C`6I*OMQE
M\.6LZF/>7E\[Y-]V@'OPH8YK>Z'O1O-9!7'TH\WW)8U<M#B6>Y''1%%"H2\]
M?WP3^MM7ZL`P/96<.Z;RNYTYYJ"_^F,.VF=.=Z^]N]=UJL\;=P=V7YTVK@&2
MHRC#+24VB8:8-#V+@8!^@BGL]"-RP_`#"S#4.P7U#$TM@C'F4-,!7N$X3/`0
M`E6G=!F1=,UO3U`7,:`M.`=3LLEW]DU$\D_+L)2'=T4]GJ+MLE^/GOY\>([G
MP$Z7,-RR^5#3)C*'0%0Y.CFO6<Y//X$-R3&+ZD%:-51"7,""#1,:IUXC+&<S
MWPO<4(^'Y_U:4]7_>7QX\?SPY-6!J-Z6O7CZXF3S''H`]E8P=C/C7@G*T5Q"
M\X_]D[\3CDZ]\.;XZ(3RUNAM5[8@X\ETHCD$V&:<!'R$T_B:!KO<R/'^V?G!
MBV.B*V+K%;%-79QJ,#49K*N9%R,%8`D'[GU8QO;WH^-CZE2_KI&4WAP>GO*\
M!'J_:Y(E\;&'J.&@LV+_R>`*HGAU=HB4Y5PA[F+]&!'5271@A'-COP)$BBWC
M.7F1HW$4FF@S`S2"IS8/ER!2D?I4VIV?CU_\C>-IEW0'[QJY4W=R-)W[=^?D
MQ;G(+.&,=+IU0_S3JW@>CL6Y))SZQ,[IF#.17QB278&I%8!S0-@?JG0+*O\@
M#N*":AGD)S3^-*J%=N]IM,J]-L>&F.2`9#W5-1@L[CD)1/G&%,"I;LB1B;I5
M5>C"FD*5`B',JCRC:?AOH!Q%]1,BO5`X2D&6WKAS%Q7;^08JMKM2Q?:^J8KM
M?QL5._A_%?MOI6)U3$=G<@H(3#V!:9[274TXCJH;J.ZFJ:MMTPL4-^URG+RH
MW$H5+TM,U7:IJ5H.WVKM=5O5]FJOW[-[\L(P6!7HE$IZ:<%__%"6V-M6SQ/?
MGUG\5A05J41'RUK@54:@*)M/.%?JS2?\#.`&LW(E^$G39/(\&`;3%ASV,5N(
M:D-U"!9\N(7$9$XW_5P@3C(^NRS>T>6*0G>!7_9)7&1BY0!ZOS`^B;P7XK4&
MO=+/KH$8'*DKTL8Q)O>Z+%W2Q+:Z^8OCT4ZY@AI#8<5W,4BFB,W@`A#13*#+
MT981ZN=D>>MX'5_&.X!BF\-N\\M3B+OYE0S?@[OR3AA6Q6;VR5A__E!<M[1^
M?BKT\L\@!*53?J=O]W8=[8J=G0$4]+3KAUC%O%"CUP@#=!GJQ>C,BVY;QAYH
M&=H3B;=1CK=AXJ43:)S18H]$-+S`!-Q)I(2`%:4@7T)`?$H/Y/=Z]DY?7<+S
MY9%W>#=^ZW_(X]ZB0(^\K_O7[O-P_'3_9)JDQR_750R\@.L:V(K18"9Q40$^
M`QXVT&+H^I_`M6;B@I5AG<,)7%"@GF6_0NC2P?'T^>7/`E;URP@=TD4%O5T@
ME)*6_[.$\CAP.:%66`'<4BC8`;*PPA*0K^]N"Z@:9O2JT]WKKK@MK]WMV^V>
MNDU-LHXV#1?Y>EY<*VGV>1[I9?U$J"R7ZXE<3=9*D,&BP16[6)+$C`9'K'#3
MXD*%%;<6_%9%$22FOBNY_$Y]9R6XE!);,WN/J+87E)Y1]H;R09>7VF].G-)K
M\SH#N]-MYVM`I]N"@OS&EH]L<W]338,+<+G>TI8):^/1$@YPH@'`PF/S2:<!
M'&@`:A^2=@'I>`J">`40U/(VZ\`_A::%\TS!P`H@%`4'(.))(@@M%,]PSS5"
MQS.>4;K];%AQ>V#/[K:TN[PZN[M0L&LNA17"HQ9#.N"6@,838\1K/0N252N\
M%WD\`L1FIR^!Q70M3C%SZ#,B)Q,!9O/,LS894#/-QO$\RY,)Z'+9\0T`I*98
M+H-^,18480V6:;VV1!)!)G8$-)'5KX$H:9%5M$B5-;C2\'L+&*I?']AUNG:W
MW35NNY@0SG76/%A?;O:;,1-/_-R?F=0_CZTO<R(*//]KN5F&XYOP$KMME5"U
MT.!=6-EK@9F:7_)1>JNIJ1<J;A!(C1L$Z"<_MY,O$N?<>\_4C1Q\[Q`0NQY=
M7(1Y5/J-V6+8A:.>W')-6<D!_L65'Z$A2A$LPKFN+'GCNJU\0Y!,\W;+[O5V
M5E[MVEA2H%]*B#R+)2>$V%'FMCB>A5IH"?MHG2?<Q,"CN2EF2:H,>W05,^DG
MRM)YE/@34</,CE^S/&U*Y$&:>OEQ6A%EE*&??_TEW5RGXZ[8B<^>J,6^W9BW
M=BSRG4C5C\?&U/RDN9&?3%]4KTF7KID70VBSBT[#">%??@VCR9/ZBQ0UYV@!
MKOW&H";:TIPT:`L8/&J]4;E<:"M(*''"J$R2>1@<28QB.TM`(>.9=4GOUN?I
M?:<TJ]]M%N<%/VI.K_(+Q/WNIADO"JO\`O&ZQ"_H5/@%LH9^BS8X!:T]I[W"
M+P!SL:V;BU1@W%8G^+D_#:))S%S\M-F$OO/_O0!=C(^'6"CHCI$/?==I:9LE
MP'+<(>&72?/P!MM"V=I:"M%NJ_]+@.A*?N6_F#9R9LJ^8%1]^K_M77ES&[>2
MS[_BIX!E54A:'(67[E4215$2;_SLE*V\I,I2R3R&XCR1,UP.:4F6N)]]^\(U
M,U1B6\GNVQ*K$H\PF$8#:#2`1O</R?1&#</.!`O55I=""_!%&(?33F%)/^'W
MF!4)[;/K'I3P0X0(:?.97*A`D'9T.)>&TQG4!G;(J@)_S<(.(ZE-;]"*@[47
M15[=,';FI:X[S>UVK;GMH#@U=UJUYNYV?LYP`FR-,24;K^8TE[7%>/K'C:3*
MOHXK7J!5IMT7N:CSDC7M4`P%<V-'-'0('7P<@`@@H#0I8=#(+XY/CI>M`%NP
M@F^[J/Z;V[7VUFY>5$4^QGU8W61$=)B,^CGQ-!<ZB-D-.+YD0,(EH@<?:'2$
MY;=KI/-NVIM&DUF6!M^DP:_MU1)'Z%W*`R-4%Z!R*#0+V8C\`=6Q]VJ0"5*/
M);E1PKZ$-#0_0FUF0PR<ALQ`;OD-$O=?)+';;M5VW8LD=K=V:KO;=F,).\EI
MV(^F%$U.3ZXAFGN#M28_NR!#DDG:E6<>^</-IEM-8ZRM@.(C-VL#]ML;74V2
M5.(MD*GP.H7165DB4XWZUFZM4=?HK]8"_!OJBSFT+O0CG=U*9\BP-4[P,F'+
M)1%ON?BSS"I;569U]`X^?OG/-R>PA?C1MS:CONK-IRGHIZL.GAJG43_TNYG`
M-/$LU"V??,21B=EL7T7P33RK/$NK^RI=7_>W/>EEA"[D89Q6GL?=::<'6_Y7
M\YD\?9E6,>X+Y\P4'F8SC$Q*5:"NNH0S3Z[J/.U%,<%X'JCG+\__<7CRDRG%
MXI61'W3YH*SA5E/!E5RYHJ@QI`O\,BI=?7>[UF@TFMXF[F]I?=<_@.*)__+N
MT)$3%%TM44F,=N-$4:\X0:?>8"#0%3,@I-XS9^-'9-R:_*7]7E/.4&Q\NA04
MCLD&HD`VFBT[)M'A)'E[KJZF"*-0B6&YJN)$K<$LZIS5^%JW!K-N"#Q',[EM
M!\E`?W9#TJD(!S(;_J$RS*E&,1U)@SPQ+5*U%R_HJ.KZOB<:%$Z1[JOU=7CZ
M#Y7:UMZO&G3L9Y@+B')O52VD.;8?9C)-'!':&V?7?>KDQ]B_)T[T"K\J'+^+
M3*4.O$HYIV+<9N$89['."*>4:0A#`<_"KLR**G0&"B,35D*<S`2(LM%N0^<Z
M[D[_KIU;4\.8._F)ZVL4=^EV`I+_-SQ_?T-]W5![.KKO66QG-7(4^S0A8?(N
M7+O#$1MGNJ2..#HJ<\E"1M)<^'PM:UIXXB[CM<>ZK!4J2&BN4&UP-#\Q-VID
MROI8615F\M)*@4Z>YM&A3\`1E,&<QJ$;V:1U/*K=.+3A3-P+1O,N5;W%NC?N
M5K.D!)?"BX[Z&X=7\?8._>M;[8:[P=O9@1U>O>W>AJ5A/?-8L+*U<`#++/BF
MWKA/W&="OC%8F_K12650,VDB`MA$RPQ'7I%IF!]Q>\!/<0)S\<R##LT#EV`(
M)N+P3*8"N:,'ZV@RJJE1"O^+=++9RF(0'^]C)9:#ZJAZXPRP)VU5,+2-]BJ'
MOYZ0,Q9'@MF=C+&1O/GM^<G13S\='_[RIJ(WCR*1F'CXXL6K(S_VD8!=6):S
MX#H&\\4:L3%%!'R2S3XQV5>@YHP@Q5&H+ADG#I%SU?T2$)]&EY#%`YH8\)H5
M:%:G!).>+2$M*$'7-\=_MK9(E0,F,WQXQ=%A(/4]A4M.#1*7C<VDM\+X/)XE
MEV$<?0@K3G(NH)&A+X50&/=[8TJA8P&AU`TO=*J@];&X5JUJD@2C+3B[MD@B
M7NF/B%?ZYM7K$X\-I9RE7"<*OC;0=#;BT[0CH0K:/&\G@VOL%">)@`6K9Y[.
M,WV4_;Q^EEV5.AWJ9,SV'4QV^/\]#>CCQ;/N\_I8;D_PH6E7="7)VCIV%3CU
M+8Y5ITZ<*_@:2J905I@KB:MIB`&CW"0K3@IN2O?S%-,_I`A2!CD<@IQ@Z2U,
M?&MJNWSB]0N!=MW$"'O$JM*5#AKP.#U&SK#6W1%KL*VZSSR^BWHP<K]&_>9P
M1XD'F%CT04H?I/X'-#HAL>"#C@B<D[V3ER^=AO4ZRTVI1FJ\[SVYF54+RO9E
M7:.^X&$53SUN)F%0MYH%FUI==>[YRK)2P(D'L)7MN\CK.X?<\G)U;3)=I3_(
M=);)[?>3R>WWE,[M=9+.6]!-2WLI5X_[^F@<S\>X/M1ZH`?[]!DG<.0[`3?R
M1%I50^]$1H?_\DL=*C]F92)ZVTEDA6]1=BE1J_BIR4M'3;1PL$V`:L;>O9JZ
M<<GB<&1)LBG*F5><=S+Z\'$JSY'/I'#C)#';'M?Z[$D\(75R=TK]C_^XB2DG
MZGZ&I1<Z:1#NI8DG[8VMF`I<HB,M^!>4ZO2-O@K'*EBOQSF-:IH!3%#H:T\K
M%@LAS^N;[PZ/?J8U#EN`O2MR@6?TY^?E%%WJ$G*\0#)04H<-1986L7%"'O@&
M399L^C07Y,)>#JJ+WQ-RJ/[>YH0,9#'UKR%&:K3:1@LIW[=;;&)O[M::VZU-
M;6O0%>@G(5M=*>C?W'B)83#!M7H7EXGPNY=E6([/,,HCS1CTG_CG8`;NA1>K
M.,?0A9N0%L7]\%JO;C%!W\7925/79)Y9Y^[+D<!NLP;_V[$W03]8!?XZS@L]
M=NJ;C1K\SWJL]WJ$F'>`IS8X`N@&"K$@]Z!U>Y=%[W`GZ=YMP()1H0T&872.
M4G9?0#KY-1VDD[M0L]&NM5J.:?+3N=$`$OHH4K:Z!IITW[4MC'"?BE$.[SLC
ML@XX&^.*W#R!QY:,K6G(5M%:\65_/A[?G&,NO5-_`=Q007C0FF<0LVB\/^P>
M#'HB*P-PTL$!288.J'A'[_?IM:N2Y`17,V+R%$+GY5YH##]BQ$/PPRE4&SQ&
MU'558V#P$?,(*B]C'=.'$4N_H;?.5R:?ONN`=^NN=870=F'K?OSRGWQ?7@:Y
M;Q6Z;!X*S4QMS(D1O9,&%4N-!JK)EH,F`BF(S0=L]S!&F():<0[-0AX649LQ
MOC%/>Z:A]8IF&6TT3JQ^5`40&J&XI3"L?+7X8P.,;RHN1T?W5!MA%9?669\#
M.G6\AY37A_92-3Y@J)^Q/&5[U[[7Q?`_,H0:6=-8(>)C?J3`</36,>Y]]D4K
MFB?^SA8^+QQ9^O3`O,8J4H_2773$]-V=4ZFJ'47F!A%YJ]9)3WC7B%#5F7>[
MJGJF"ROFL$"EV)>VX8J`>3/I!GO7U`SAHROZ</GYR]]>O?Z^ZH[K;#.G2QN7
M_9T*V%^&.IO/D84"IGWR$Y613&?6I',=:.9D,$AK;&,4#;N$]R_3=`GK^NPI
MM4E,G_<"#U!#89>9S%%+TS]H#),AU]N1U]V%Z,BF)7UH:9;L;V@0X]$P6N(#
M$EI$Q&HXWSBXT[C+T3.AX^\@`YG"<AB2JY=,0CV19H#V)?7E\6]Y2Z!1=DEF
M(J\)6#D/@7K-,+A0KUY\+\OM)VR-RG.@HR,/U&X!]_:H8J$?9*&!2P[N,CL'
MD*7JL]91Q:N\G2:L\G8<C),6N:RW[%VUV=OB?(,T#PN-S8S@:;A8>1:AF9>>
M)@6PUI/[(,^=P78?\+E[\=2]\.<.O=G4-T5CJV$7NQC)UA+I`(:!`(Y0!IQ$
M.XR*\J7Y?%$A02=UE%KKK?U^1-639#>WDVQ3>?<L^WS\=!TSKB/M=<&TDVR]
MR4V%MP_>UVA9H>3BU+2:L<5'LM'%'D>YC2:NEZ1^*885YUL+=[S$8VE=Y:Y$
ML\@'KDA]I'D?H6!1>2.</>EP8+DFO*UXLB*N62347U*N+T<3SXPJ='0[6Q*]
MX&L0P)YL]CDIB6>>W=VM7C*M],@I?(K\R(#&$AW84LTT_NL%[.44Y4<9"M9=
M0X'Q#"173+YQE-J<'0.M+Y1>OB!$`&U=Q3[`EH:1&TAI/AWK+6VA)FIO[=1:
M[>U=QP_=MML=@I]#H^*]?DT,)STZ.C\ZPJMIU)V"Y^^/?[!__')X@G]4JYY_
M*EYU'?=I02,;1+SVSP6'VK>ENLL?-W>&(E04WNHX6[<(?L,EV&/%.0Y\CR99
M>MRD:O:*3C8LM+:W80.,=S];][H';AX'/1]7G@_?6ID"_I[&*W1=;-2W:^U&
MH^6YF8G-S/H=X7@8=2[XENL4MMW:=15OA5;!B.0^Z.F[=EF[N%[/KB]..K`[
MC#<_')WK!;#KZG2$`\=UT'7]F>S:!#IZZ=J$'#';C5:MW6[6/3^N!ZE>]D86
MNZCY7ZQS81>CMVZ[N5._KXM?)C!33L?DS(*-@)9/O_(*K]>&O4^2/$PG>Q6Z
MX;H4U*B`7)+VI'<W=QHU^-_.?;W[J35[X/[]S.H6./&/819ASWUZRKCK4YKG
MH[^Y5]_::]9]'WW.Y@?LUB'G/7!SC>9NK;'9LC<AFQ7,:#XTJ^(`VQ[7'Y-Y
M.L1]ES;ZRO:'_-_1$(TX+&1GQU'(YS"@WNB:<*0B)S.8G4V9MY#HQ%W:%W2'
M-\-*8<.A@W$D6$`\ZZ*3-99*I!EA^D-X/J/;3T"@,*0S$,8/U0?@&G-O%'%2
MQ(0NWV/@S[AVY7DA&MV;69CRS2QT$RLV'I5S#XU<DZ03:A"BTKU1V!?XME)%
M!9=2<`!YF8_F<@D,T=+H->B?V:G\7EVIZ,M4%%[<MZ[\4S-:959-`]*HTT<J
MNAD=[!H;OD",6C]SXH=$(G4_U;@WY*2'LK>]6[`?<V7OHSG0SO*_@LK'0`PN
MEIH]3J[(VYXF"2Z+!1G=]3%?@`59;WQ9MR-U^`>(G1.Q7-`#%X\;%(<%\I2C
MLKW($:>:0V^+H%Z'`09SZ(E#\P3KSHM.%-?H2AD>7%PQD,DTQZOL,>!CX95X
M@S_S_-94G+U#Q]8!F*,:Q;+E0%>$8?`U#0M[!1ZDX)7)J]_]^N.>4V:5$=M0
M0D.IQ*J$B9&I96BCS(?Y6QMTHP$]OX%.PO$DF7:FT>A&V\]!\A-HCZE\5(%*
M='&P4)-5E_4D?^PV$+3G1W4HY%_:GW]R"!3,`I!%`$CI*3,+4%K!+)!!<"C,
MMKW7:-\S"[3JF[5&RXU[EJ2F";R`3=`_.-H)-DB="X%,HQ=%OZ],0,SGS1L2
MT9*;-]8_?]Y8S\\;[M66V7DCRTD1$Y\\;ZP_P+RQ_H#SQOHGSANZ`95Z&@UB
M1%___AB4`_ZMA*`Q7JST$W4KKI<QW8AY#L53]0[DH)V&*!M]JONP[%JVRP;9
MW4%I;;D"W&I#DH6D,`P8"\+YZ^.37U^_5*?D!LQ7&^18^::`%;6GOZ$FEPR3
M<#J6#%6Z">%V7ZSMK!_DXES-AK'8#JN\IH3&T,I:JYDAJQJM5JD)'!+:5BLR
M<#6,1J&JU"&?U<6:&B0NG!P99EQC$_)3R(VG-H<Y;C)F&)<=[\M[.()>$E2F
M!Q`7Z2+Z^YS&PF1]G9@N%J%6"^2EM>.*T.86)&TW_W(1*I(@E^\@J-6K($X/
M+$VGHC.*?@7-]J<DSV?[_C+^'BF]CX,_J.8](OTQ]?PH^8]A86`<9+*3ZA>/
MOW_G'Z[/PNL.FI#_LC(:]?I6O:Z^`+';WM[B?[?:]"_"FC4W6YM*;6VUMMI;
M[>WM-B2UFLW-+U3][VB`.1YJ*O7%593VAK`=6YHOCJ[39##[?];_3V%-SJLJ
MVL$)2D8W'';>X_)W%%V&ZAW'4`?)--#!.&75G<\(TD#V?Z6G]DCC'<*V.EEA
M42=0`Z%Q@BR5/H"6"7IJ?$,Y5;X,Y9$IE0143Y5/CX*HK#\LE:#H[\(1;*0)
M2GDR328)KAGQ:S5*DHG!JR3HD!1CY^(P[",/3]4KK'J:)KVH0X`:=$,J0R8D
M./5YQRM("-?/^-IX#Y9*Z*")5ZT'AWRXC^_H@7@[@>IB7>Q5N-`>HLT=,(8A
M$!^%4Z0'+_%%A4WR,(._?:O6GJH@_"_54&=G6)>X9%P)WJXUS@Y6S\_7&JLE
MI2$DO7=K37PSB$H+HBW<"7G-J\VZ<-A&C!"'[;"3TE87E^C8&!AAD$QYN<Z[
M)@VWSG"90$<[IJ9FN:\/NZ3BO:0?0J4[HZB3,M=`_:!,"Q9U3M=VGW,TP'E"
MSGSG=&DVO0&&?WE]_,/SWU?W.0\D/+<IF/V@HE;7OEU5U7WZ#C(<_?KZ]?'+
MD]6R4^84._"@S)]"'J*^NO_<28@H!6,WB"13?_OM&9(6DI0/"@'2U((,]`%-
M".UVHZY`!&@HS+(XT^F\&\@Y7^HWQ;Q[4.XG=DA05>[NC)M`N61*TD,LM8[&
MZ&?,(#[`ZYSVQ[B;3<8A#06,KKM(9KR1`[D&2M)]N1$!M>@F[\,-4RD8KH2<
M@S4"`0DCLGEHN`:FU+%>R3`485V!(6;H(G?%Z-C1+)5-'E17<Y@:M!`T7R.A
M*8[8'!:$T38YTCVV5[F'K&C\`5)4-5..V;_Z1ZPI\66R07\@0=,%,FQ8/*%^
M)1QT[_GY].!T[?3V='VM<;HP(W=U#=ZL8O1CW1N\V)7N@"4BNN(*":W=-A:G
M;T^_/3TC<CR`GS+,BU%NTF/XH3.>3#^1+SA"U#@`/R>'WT$24*(XR[#/@I(9
MDG3\S(=5=CP[HUF4*E#YPQ:=:F+0MOJ:,:!EXCFQC3U=+VT<CN<CU"G!:[1[
MF$8GK0\KV'"63&:<!@^DH./Y:$1`[M,>SR=4!FUF^LDL+:%7EGPW[DPO^S`V
MZ"6ZCR+H.KGV00?@CHYREFB/=0@C.)Y->5YX%P0TIH*@K*5R&DY&G1X;H"B+
M\3@_*1,!;-]W[K#%+UFI#J?)_&*8S&=[*"^.7,-$UI_W<)C*>"9*L)4+/H33
MQ,`(T5T+T)$X%J%]W\$.A#"8IZ1LF`C("VIIH<,L532!^RLP*U<W2@)J`^J-
MIPK3`F<HP2#CP0?%[U91Q-&'TATRYEU6>W'K_H!`2$:&1#<@5^\<S5>V#=.E
MR5X$^GW4(3%$0KTD?A_&41A#A5F'OA,E6J8ZR$R*9_+'OY_@B(1BD1\W"=W(
M<G/LO.N.U*?J13@K@R(-0Q<(J0@LFR?ZR&AZ,J.CJA1",!S2J$NP3'0@EQ*C
MTMSELOR!BLWP&#%?[.6=ZQA*QH[99P11=%ZNJEPV3'9R:0?K3"Y.=O*1MLX7
M2LE.-O1R+B@4DYU<8=KIE:0=G@]0:FNZ]_6]"2[J.(Z.^$;:)R=S`FWNE"8T
M1$@_2TQ=W:M#3#)3>,?HO$IDG7:TMB-M*?WO:DP<6XZ0>W,+K8I!&AOXOR8/
ME2,IE+$>LJ5\(\V(K8CKT?D$!@`0D)`7)`./K$=F5XF$(*5&@-.P,\4(HSB[
M1'.$6%8#E7#C8H,((3X,WH4C:VQTK.04FJJ1"*PLXEEUR0@L&FZ>R%`5'Z83
M+7@?C68]/0N*^MO&V:J`MW@<\;P,S7AZH+,RI]"<!_;K9BUHG*T6$2:JS[YZ
MYM<3"-JO5UV*MY*X-UOX*_J"3S1SS8.U"L[MH/F"B=)YJBRYU$]O6%FA[N$I
M&083SP@H3;*;<7<[U&&RTT&9`,8JEU6S7?CV;+$J!G"[TD$6J;IK_XU?0?-3
M6M-)<QM!Y?K.[D;@Z6Q)+T*5T-(&"U:JV4N8#6`I=(GR3ML\$&U&B!!)SNWD
M6(K=>>U62L4*G.T%:_;/)M13KP+Z=A\[&YKY%./+DRZLBF[DS"BOO:BHC]99
MGR'LI*R^3_3.PM54L%8(S'5!23\:1-ZN4P7J'"^=A:J;I#BA155!NMPNE'\5
M7H>]?*HN-_="H^R;%_I!5*((-#05[7+3833`&+U*1<G6*P@4^<RQ)$HB;9G]
M5;>HG@,LPQE;.ADT<TD$3$_\U)1O&(U+]RS60=<EJR?I,C'0?V:I[+:M[6&H
MJCR7S!-L+(.!JKKYC0*$_/)<,D^8OX?Y03@U8%A^)-?4O^:X!>2=*-OZ-EQ+
M@"H_^^KW1N.K9V4HY/I<%M,EYUEZP>Q.@O]4>LD=7*IR)>A'L&R&_6U`6C^X
MGHZK96ZY0UBO(4>ZY+WLS/D.O1'+3B/AWU`X_N.4BU8!.X4$^B)<%522RSN4
MMJHZ/3W=7[IVD^]T]$20R\@52U6Y#Q,<!CJHVW'GNC:.XMJB'TZ@1P<)>GB!
MU(_"SD"]AV&#=;CNA^_5:6GEME/KU19Q>`5UI>?QXA8_GD7C<`%[F<D,]@\=
M"G49I+7KVH+B>B^B/JBI^1BW2I<IT8EJB]L14,*6O(T3^`MOJJM1E,&"YU8\
MEH'!?A%>TZ$GK/;QI!1(T9X"B-#PNQW4%@3L#0_UVD*!BIQ,Y[`C&]$>0%G+
MA]M"9LW26-)$%ZJ\H38VRBKXROU.W\>,./9!I=*YZ]U5J37N!L1$Y:Y^-ZA6
MEQ`=N*1<2H.4VJGX*Y2]^2!5[8TF_-=2,3QC9-`8_GVSV?@9_M?\N5I>1IN:
M=&DMZ6VZ[%OLDR6?SO6"\?%XX?'W^'O\/?X>?X^_Q]_C[_'W^'O\/?X>?_]'
+?O\#D`GKB0#(``"?
`
end
--
Sven Wischnowsky wischnow@xxxxxxxxxxxxxxxxxxxxxxx
Messages sorted by:
Reverse Date,
Date,
Thread,
Author