@[0 +8+fq(+4)[1 0fo10f"g+q1' +fq()+4u1 fq1"l 0' ,q1:m(q1+4(]1]0))/oAm0$';KWO@s?@KgqH}DH1E'JkK DHQRJ`@Q#}~2j5I7y14Cw('\>Ah8m##<-9GmC7c) (T*&#){#-2+ @"o _cma po X X U 8 M5 `L8 pc }W !d ? 1c ]  _ d ~ w /W -^2 wq; IP uw ky} sI aU _c (~' {y MZ ZZ b| xzSrT93U&DSo geeV jU iE?m)cl\Y_RV0dL/n{u*& Add Word Abbrev& Attach Word Abbrev Hook& Check And Make Word Abbrev& Expand& Global Expand& Global or Local& Make Non-Usage Abbrev Variable& Make Usage Abbrev Variable& Setup WORDAB Library& Shorten String& WRDAB Mode or Global Expand& WRDAB Off PO Check& WRDAB Old Char Describe& WRDAB On PO Check& WRDAB Process Options Hook& WRDAB Turn Off Ins Char& WRDAB Turn Off Old Char& WRDAB Turn On Ins Char& WRDAB Turn On Old CharAttach Word Abbrev Keyboard MacroDefine Word AbbrevsEdit Word AbbrevsExpand Word Abbrevs in RegionInsert Word AbbrevsKill All Word AbbrevsList Word AbbrevsMake These Characters ExpandMake Word AbbrevRead Incremental Word Abbrev FileRead Word Abbrev FileWord Abbrev ModeWORDABWrite Incremental Word Abbrev FileWrite Word Abbrev File^R Abbrev Expand And Call Old Char^R Abbrev Expand And Self-Insert^R Abbrev Expand for Tab^R Abbrev Expand Only^R Add Global Word Abbrev^R Add Mode Word Abbrev^R Inverse Add Global Word Abbrev^R Inverse Add Mode Word Abbrev^R Kill Global Word Abbrev^R Kill Mode Word Abbrev^R Unexpand Last Word^R Word Abbrev Prefix Mark~DIRECTORY~~DOC~ & Add Word Abbrev~DOC~ & Attach Word Abbrev Hook~DOC~ & Check And Make Word Abbrev~DOC~ & Expand~DOC~ & Global Expand~DOC~ & Global or Local~DOC~ & Make Non-Usage Abbrev Variable~DOC~ & Make Usage Abbrev Variable~DOC~ & Setup WORDAB Library~DOC~ & Shorten String~DOC~ & WRDAB Mode or Global Expand~DOC~ & WRDAB Off PO Check~DOC~ & WRDAB Old Char Describe~DOC~ & WRDAB On PO Check~DOC~ & WRDAB Process Options Hook~DOC~ & WRDAB Turn Off Ins Char~DOC~ & WRDAB Turn Off Old Char~DOC~ & WRDAB Turn On Ins Char~DOC~ & WRDAB Turn On Old Char~DOC~ Attach Word Abbrev Keyboard Macro~DOC~ Define Word Abbrevs~DOC~ Edit Word Abbrevs~DOC~ Expand Word Abbrevs in Region~DOC~ Insert Word Abbrevs~DOC~ Kill All Word Abbrevs~DOC~ List Word Abbrevs~DOC~ Make These Characters Expand~DOC~ Make Word Abbrev~DOC~ Read Incremental Word Abbrev File~DOC~ Read Word Abbrev File~DOC~ Word Abbrev Mode~DOC~ WORDAB~DOC~ Write Incremental Word Abbrev File~DOC~ Write Word Abbrev File~DOC~ ^R Abbrev Expand And Call Old Char~DOC~ ^R Abbrev Expand And Self-Insert~DOC~ ^R Abbrev Expand for Tab~DOC~ ^R Abbrev Expand Only~DOC~ ^R Add Global Word Abbrev~DOC~ ^R Add Mode Word Abbrev~DOC~ ^R Inverse Add Global Word Abbrev~DOC~ ^R Inverse Add Mode Word Abbrev~DOC~ ^R Kill Global Word Abbrev~DOC~ ^R Kill Mode Word Abbrev~DOC~ ^R Unexpand Last Word~DOC~ ^R Word Abbrev Prefix Mark~DOC~ ~FILENAME~~FILENAME~~INVERT~WORDAB}0fo..qWORDAB Loaded-11965012492"n 0m.CWord Abbrevs ModifiedNon0 means definitions have changed 0m.CSave Word Abbrevs* 1 => save all abbrevs on exit, -1 => just save incrementals 0m.CAdditional Abbrev Expanders 0m.COnly Global Abbrevs 0m.CWord Abbrev Mode 0m.CWORDAB Setup HookIf non0 is Teco code to run when WORDAB loaded (it must set keys) @:i*!~@#;$%^&*-_=+[]()\|:`"'{},<.>/? m.CWORDAB Ins CharsSelf-inserting expanders @:i*||m.CWORDAB Old CharsHairy expanders 0m.CWord Abbrev Prefix MarkPoint of prefix mark 0m.CWORDAB All Caps* Controls whether all-caps abbrev expands to all-caps. 1 - all-caps expands to all-caps; if 0 - only 1st letters are caps 0m.CLast Word Abbrev DefinedVariable name 0m.CReadable Word Abbrev Files* Non-0 means write human-readable kind 11965012492m.vWORDAB Loaded' [1[2 6*5fsQVectoru.e qOnly Global Abbrevs"e m.m& WRDAB Mode or Global Expandu:.e(0)' "# m.m& Global Expandu:.e(0)' m.m& Expandu:.e(1) 0u:.e(2) 0u:.e(3) 0u:.e(4) @:i1|( m(m.m& WRDAB Process Options Hook) 0fo..qWord Abbrev Mode"n i Abbrev' )| 0fo..qSet Mode Line Hooku2 q2"e q1'"# :i*21'm.vSet Mode Line Hookw 0fo..qExit Hookf"ew :i*'u1 @:i*|1 qWord Abbrevs Modified"n qSave Word Abbrevsf"gw m(m.mWrite Word Abbrev File)' "#"l m(m.mWrite Incremental Word Abbrev File)''' |m.vExit Hookw :fo..qWord Abbrev Modeu1 @:i:..q(q1+2)|!* 1 => turn on Word Abbrev Mode, 0 => turn it off! 1fsModeChangew  | :fo..qOnly Global Abbrevsu1 @:i:..q(q1+2)|!* 1=> use only global word abbrevs, 0 => both kinds! qWORDAB Setup Hook[1 "n m.m& Global Expandu:.e(0) q1"e m.m^R Add Global Word Abbrevu:.x() m.m^R Inverse Add Global Word Abbrevu:.x()'' "# m.m& WRDAB Mode or Global Expandu:.e(0) q1"e m.m^R Add Mode Word Abbrevu:.x() m.m^R Inverse Add Mode Word Abbrevu:.x()''  | :fo..qAdditional Abbrev Expandersu1 q:..q(q1+1)f"n,m(m.mMake These Characters Expand)'w @:i:..q(q1+2)|!Non-standard characters that should cause expansion.! ,:m(m.mMake These Characters Expand) | 0fo..qWORDAB Setup Hooku1 q1"n m1' "# m.m^R Unexpand Last Wordu:.x(U) m.m^R Abbrev Expand Onlyu... w m.m^R Word Abbrev Prefix Mark!"!u..' m.m^R Add Global Word Abbrevu:.x(+) m.m^R Inverse Add Global Word Abbrevu:.x(-) qOnly Global Abbrevs"n m.m^R Add Global Word Abbrevu:.x() m.m^R Inverse Add Global Word Abbrevu:.x()' "# m.m^R Add Mode Word Abbrevu:.x() m.m^R Inverse Add Mode Word Abbrevu:.x()'' 1fsModeChangew [0[1[2[3[4[5 0[6 0[..f :,.f-zu0j [.1[.2 0[Auto Fill Mode 0u..h qModeu2 qWORDAB Ins Charsu1 qWORDAB Old Charsu4 :i114 :i*Expanding abbrevs[..j fr f"e q3,q4x.1 :fo..qX .1 2 Abbrevf"gu.2 oEXP'w :fo..qX .1 * Abbrevf"lw :c !'u.2 !EXP! 1u5 < q6"e 2,m.i fi:fcu4' "# 32u4' q4-!"e 1u6 32u4' q4-32"e q5"n m:.e(1)' 1;' q4-,"e q5"n m:.e(1) 0u5'"# fg' !' q4-."e q5"n m:.e(1)' f;DONE' q4--"e q5"n -:@f-*0,0-1uWord Abbrev Prefix Mark m:.e(1) 0u5' "# fg' !' q4-"e  0u5 !' q4-F"e fsVZ-q0f[VZ m(m.m^R Fill Paragraph)w f]VZ @v 0u5 !' q4-"e f;DONE' q4-14."e f+ !' q4-e 1;' q4-?"e 4110.fsRereadw !' fg q4m(m.m& Charprint) ft is meaningless here.  4110.fsRereadw > ' @f1l > !^R Abbrev Expand ! .( 1f )-."e ff"g fg'' 1!^R Abbrev Expand ! 1f 1!^R Abbrev Expand ! 1f 1!^R Abbrev Expand ! [1[2[3[4 qWRDAB Old 11[5 [6 1f 1!^R Abbrev Expand ! ff"E 0,0a"c m:.e(0)'' . m.vWord Abbrev Prefix Markw .,(i-). -fwx*[.1 fq.1-86"g' qMode[.2 :fo..qX .1 .2 Abbrevf"lw :fo..qX .1 * Abbrevf"lw''u.2 :m:.e(1)-fwx*[.1 fq.1-86"g ' :fo..qX .1 * Abbrevf"lw'[.2 :m:.e(1)[..0 q:..q(q.2+2)[.3 q.3fp-101"N :i:..q(q.2+2)1' "# .(g.3)j .(1a-#"n \+1:\u:..q(q.2+2)')j fq.3d' 0ff(x:.e(2)):[.6w -fq.1d 0,0a--"E qWord Abbrev Prefix Mark+1-."E :i.1-.1 -d'' .[.4 g:..q(q.2+1) .[.5 -1[.7 fq.1[.8 <%.7-q.8; q.7 :g.1"a0;'> q.7-q.8"l q.7:g.1"u q.4j :fwl 1 @fc q.8-1 :g.1"u qWordab All Caps"e 0u.3 :< 2:fwl .-q.5; %.3w 1 @fc >w q.3"e q.4,q.5 @fc'' "# q.4,q.5 @fc'' '' q.5j q.4,q.5 f ff-1"G oUPDATE ' qAuto Fill Mode"e oUPDATE' m.m^R Auto-Fill Space 0f/2< .-(0mSf ).@; > !UPDATE! q.6,.x:.e(3) .u:.e(4) 0:g:..q(q.2+2)-#"e q:..q(q.2)u.4 fq.1+3,fq.4-7:g.4u.4 mX .1 .4-WABMAC Abbrev' [0[1[2[3[4[5 .-(q:.e(4)-(fq:.e(3)-fq:.e(2)f"lw 0'))"l .u4 fnq4j' "# q:.e(4)-.f"g+.'"#w .'-zu4 fnq4+zj' q:.e(4):j"e oNONE' q:.e(3)u0 fq0u1 q1:"g oNONE' .-q1f"l oNONE'u2 q:.e(2)u3 q3fp"l oNONE' q2,.f~0"n !NONE! fg @ft No last expansion 0fsEchoActivew 1 ' q2,.k g3 q2+(f=03,0f)-1,.f q0u:.e(2) q3u:.e(3) .u:.e(4) 0{[0 ff&2"n uOnly Global Abbrevs' ff&1"n "'gu0' "# qWord Abbrev Mode"'eu0' q0,0fuWord Abbrev Mode 0[.1[.2[.4[E q..o[B g(q..o(f[BBindw)) bj 0s <:s;ric> zj i  bj < @f l .-z; fwfx.1 0,1a-:"n :iENo : ending abbrev .1 oERR' d @f  k 0,1a-("E d .u.2 :fb)"e :iENo ) after mode name for abbrev .1 oERR' -d q.2,.fx.2 d' "# :i.2*' @f  k @f#0123456789 fx.4 fq.4"E :i.40' @f  k 0,1a-34"N :iENo quote to start expansion for .1 oERR' d i:i* 0s" !'! <:s"e :iENo quote to end expansion for .1 oERR' 0,1a-":@; c> !'! 15.,1a-15."n :iEPossible unquoted " in expansion for .1 -- final " not at end of line oERR !''!' -d iM.VX .1 .2 Abbrevw i M.CX .1 .2 Abbrev.4 > j 0s"" <:s; -d> !''! ff&2"n m(m.mKill All Word Abbrevs)' m(hx*) 1uWord Abbrevs Modified j g( 0fo..qLately Changed Abbrevsf"ew :i*' ) i  hx*m.vLately Changed Abbrevsw  !ERR! 0l .fsVBw 0u.2 zj <-l b-.; %.2w> qb[..o zj qe fsERR r:i*( :i*( :i*[.3)[.2)[.1 fq.3"E qMODEu.3' q.1,q.2 m(m.m& Check And Make Word Abbrev).3 w 1 ~[0[1 ff&2"n u0' "# :i0' qWORDAB Ins Charsu1 :iWORDAB Ins Chars10 :m(m.m& WRDAB Process Options Hook)n"L f @:m(m.m^R Kill Mode Word Abbrev) ' qMode[.1 f @m(m.m& Add Word Abbrev).1.1 Abbrev w 1 "L f @:m(m.m^R Kill Global Word Abbrev) ' f @m(m.m& Add Word Abbrev)*Global Abbrev w 1 qMode[.4 .-z[.0 -:fwl -fwx*[.1 1,m(m.m& Read Line)Expansion for .4 abbrev ".1": [.2 !''! q.2"e 1' fq.2"e 1' m(m.mMake Word Abbrev).1.2 @m(m.m^R Abbrev Expand Only)f q.0+zj 1.-z[.0 -:fwl -fwx*[.1 1,m(m.m& Read Line)Expansion for global abbrev ".1": [.2 !''! q.2"e 1' fq.2"e 1' m(m.mMake Word Abbrev).1.2* @m(m.m^R Abbrev Expand Only)f q.0+zj 1}:i*Fundamental fo..qMODE[.2 1, m(m.m& Read Line)Kill .2 Abbrev: [.1 q.1"E ' 0fo..qX .1 .2 Abbrev"E 0fo..qX .1 * Abbrev"E FG @ft".1" is neither .2 mode nor global abbrev. !''! 0fsEchoActivew 1 ' "# FG @ft".1" is not a .2 mode abbrev, but is a global abbrev. Kill it? !''! 1m(m.m& Yes Or No)"E @ft Not killed. 0fsEchoActivew 1 ' :i.2*'' m(m.mKill Variable)X .1 .2 Abbrev m(m.mKill Variable)X .1 .2-WABMAC Abbrev 1uWord Abbrevs Modified 0fo..qLately Changed Abbrevsf"ew :i*'u.4 @:i*|.4 mkX .1 .2-WABMAC Abbrev mkX .1 .2 Abbrev| m.vLately Changed Abbrevsw w 1 1, m(m.m& Read Line)Kill Global Abbrev: [.1 q.1"E ' 0fo..qX .1 * Abbrev"E FG @ft".1" is not a global abbrev. 0fsEchoActivew 1  !''! ' m(m.mKill Variable)X .1 * Abbrev m(m.mKill Variable)X .1 *-WABMAC Abbrev 1uWord Abbrevs Modified 0fo..qLately Changed Abbrevsf"ew :i*'u.4 @:i*|.4 mkX .1 *-WABMAC Abbrev mkX .1 * Abbrev| m.vLately Changed Abbrevsw w 1 :i* [.2 [.3[.4[.5.[.6 fnq.6j 1:"N FG F*w 1 ' Q.3,. fx.3 m.m& Shorten String m.m& Read Line q.3mSu.4 1,mR for ".4": [.1 !''! q.1"E 1 ' q.1,q.3 m(m.m& Check And Make Word Abbrev).2 1 :i*[2 [1 [3 :iLast Word Abbrev DefinedX 1 2 Abbrev q1[4 [5 fq1< 0,1:g4u5 5"b fg @ft Break chars not allowed in abbrev 0fsEchoActivew 1 ' 1,fq4:g4u4> m.m& Shorten String 0fo..qX 1 2 Abbrevu4 q4"N f=34"N FG q4mSu4 @ftRedefine "1" from "4"?  !''''! 1m(m.m& Yes or No)"E @ftNot redefined. 0fsEchoActivew 1 '' "# @ftAlready so defined. 0fsEchoActivew 1 '' q3m.vX 1 2 Abbrevw m.cX 1 2 Abbrev0 1uWord Abbrevs Modified f[BBind 0fo..qLately Changed Abbrevsf"ew :i*'u4 g4 @i| mvX 1 2 Abbrev| .(g3)j 0s <:s; r i c> zj @i|0| hx*m.vLately Changed Abbrevsw fq(:i*)"g :i*C fsEchoDisplayw @ftWarning: M-X Edit Word Abbrevs ignores its string argument -- it does not filter. All abbrevs are being edited. 0fsEchoActivew' 0[..f f[BBind m(m.mInsert Word Abbrevs) bj :i*Edit Word Abbrevs[..J fw > fsEchoDisplayw CfsEchoDisplayw @ftWord abbrevs redefined. 0fsEchoActivew 1f[BBind :ftabbrev: (mode) count "expansion"  1,(f)m(m.mInsert Word Abbrevs) fsListen"e ftDone. '"# ftFlushed. ' 1[1[2[3[4[5[6[7 [9 1,f Insert abbrevs matching: f"e'[0 fq0"g 0s0'"# 0u0' f"n&7'"#w 7'u1 .f[VB fsZ-.f[VZ "n m.m& Maybe Flush Output' :fo..qX u9 q9"l -q9u9' fq..q/5-q9/(q:..q(0))( q9-1u9 )< q:..q(%9)u2 q:..q(%9)u3 q:..q(%9)u4 .u5 q3fp"l oNEXT' g2 -7f~ Abbrev"n oNEXT' -7d q5j 2f~X "n oNEXT' 2d @:f l d .u6 zj .u7 g3 q0"n q1&1"n q5,q6:fb"l oINS'' q1&2"n q7,z:fb"l oINS'' q1&4"n q6,q7:fb"l oINS'' oNEXT' !INS! q6j .,q7f=*"e d i: ' "# q7-zu7 i: ( q7+zj i) ' g4 i " <@:f"l .-z; i" c> i"  !''''! "n q5,.t' .u5 !NEXT! q5,zk "n ma1;' > ht[.1[.2[.3 q..q[..o zj :f > 0uWord Abbrevs Modified :i*m.vLately Changed Abbrevsw f[DFile 1f[FnamSyntax 0fo..qLast Word Abbrev Filef"n fsDFilew' "#w etDSK:WORDAB DEFNS fsHSnamefsDSnamew' 4,4f Word Abbrev Filef"ew'fsDFilew fsDFilem.vLast Word Abbrev Filew e?"n ' f[BBind er @y 10f~m.m& Make "n :m(m.mDefine Word Abbrevs)' m(hx*) [.0[.1[.2[.3[.4[.5 f[DFile 1f[FnamSyntax 0fo..qLast Word Abbrev Filef"n fsDFilew' "#w etDSK:WORDAB DEFNS fsHSnamefsDSnamew' 4,1f Word Abbrev Filef"ew'u.0 et.0 fsDFileu.0 q.0m.vLast Word Abbrev Filew f[BBind qReadable Word Abbrev Files"n m(m.mInsert Word Abbrevs) oWRITE' :fo..qX u.2 q.2"L -q.2u.2' ff&1"E @i|m.m& Make Usage Abbrev Variable |'"# @i|m.m& Make Non-Usage Abbrev Variable |' iq..q[..o  0s fq..q/5-q.2/3( q.2-1u.2 )< q:..Q(%.2)u.3 q:..Q(%.2)u.4 q:..Q(%.2)u.5 q.4fp"L oNEXT' f~(0,2:g.3)X "N oNEXT' f~(fq.3-7,fq.3:g.3) Abbrev"N oNEXT' iMV.3 .(g.4)j <:s; r i c> zj i ff&1"E g.5 i' i  !NEXT! > !WRITE! eihpef.0 er fsIFileu.0 ec @ft Written: .0  0uWord Abbrevs Modified 0fsEchoActivew 1 [1 e[e\ fne^e] f[DFile 1f[FNamSyntax etDSK: fsHSNamefsDSNamew etINCABS > 4,1f Incremental Filef"e w'u1 f[BBind g(0fo..qLately Changed Abbrevsf"ew :i*') z"e :i*No incremental abbrevs to write fsErr' j @i|m.m& Make Non-Usage Abbrev Variable q..q[..o m.mKill Variable | eihpef1 er fsIFileu1 ec @ft Written: 1  0uWord Abbrevs Modified 0fsEchoActivew 1[1 f[DFile e[ fne] f[DFile 1f[FNamSyntax etDSK: fsHSNamefsDSNamew etINCABS > 4,4f Incremental word abbrev filef"e w'u1 et1 e?"e f[BBindw er @y j @:i1|m.m& Make Non-Usage Abbrev Variable q..q[..o m.mKill Variable | fq1f=1"e fq1c'"# g1' .,zx*m.vLately Changed Abbrevsw m(hx*)' :i*[.1 :i*[.2 :i*[.0 :FO..Q.1[.3 Q.3"L -Q.3*5J 15,0I 15R q.1,.FSWORDW 0,.+10FSWORDW -Q.3U.3' q.3+1*5j q.2,.fswordw 5c q.0,.fswordw :i*[.1 :i*[.2 :FO..Q.1[.3 Q.3"L -Q.3*5J 15,0I 15R q.1,.FSWORDW 0,.+10FSWORDW -Q.3U.3' q.3+1*5j q.2,.fswordw [1[2[3[4 qModeu2 1,f Abbrev: u1 1,f Mode (2): u3 fq3"n q3u2' :fo..qLast Kbd Macro"e :i*No last keyboard macrofsErr' qLast Kbd Macrou4 m(m.m& Attach Word Abbrev Hook)124 |[1[2[3[4[5 :i*( :i*( :i3 )u2 )u1 f[BBind fq1"e qLast Word Abbrev Definedf"ew :i*No last word abbrevfsErr'u1 2,32f1u2 2,q2:g1( q2+1,fq1-7:g1u2 )u1' :fo..qX 1 2 Abbrevu4 q4"l :i*CfsEchoDisplayw q2u5 f=5*"e :i5global' "# :fo..qX 1 * Abbrev"g @ft1 is not a 2 abbrev. Did you mean global?  1m(m.m& Yes or No)"n :i2* oOK''' @ft1 is not a 5 abbrev. Want to define it?  1m(m.m& Yes or No)"e ' 1,m(m.m& Read Line)Expansion for 5 abbrev 1: f"e'u5 q5m.cX 1 2 Abbrev0w i mvX 1 2 Abbrev .(g5)j <:s;ric> zj i0' !OK! q3m.vX 1 2-WABMAC Abbrevw m.cX 1 2-WABMAC Abbrev0w m.cX 1 2 Abbrev#0w i mvX 1 2-WABMAC Abbrev .(g3)j <:s;ric> zj i0 m.cX 1 2 Abbrev#0w j g(0fo..qLately Changed Abbrevsf"ew :i*') hx*m.vLately Changed Abbrevsw 1uWord Abbrevs Modified [0[1[P ff&2"e ' u0 fp:"l 1:"n '' "e Afs^RInitu1' -1"e 8[..e q0:\u1 ]..e qWRDAB Old 1u1' -2"e qWRDAB Old 11u1' ftAfter possibly expanding, it  q1,q0f[^RCMacro q0,q1:m(m.m^R Describe)[.0[.1[.6[.7[.8 Afs^RInit[.2 m.m^R Abbrev Expand for Tabu.0 0fo..qWord Abbrev Mode"n 0:g..j-["e :i.0' "# qI-q.0"n f~I!^R Abbrev Expand -19"n qIm(m(m.m& Global or Local)I)WRDAB Old 11 q.0uI'' m.m& WRDAB On PO Checku.0' m.m& WRDAB Turn On Ins Charu.7 m.m& WRDAB Turn On Old Charu.8' "# qI-q.0"E qWRDAB Old 11uI' m.m& WRDAB Off PO Checku.0 m.m& WRDAB Turn Off Ins Charu.7 m.m& WRDAB Turn Off Old Charu.8 ' qWORDAB Ins Charsu.1 m.m^R Abbrev Expand And Self-Insertu.6 m.0 qWORDAB Old Charsu.1 m.m^R Abbrev Expand And Call Old Charu.6 q.8u.7 m.0 -1[.4[.5 < %.4-fq.1; q.4:g.1u.5 q.5-q.6"E q.5m.7' > -1[.4[.5 < %.4-fq.1; q.4:g.1u.5 q.5-q.6"N q.5m.7' > [.0 q.0[.4 q.4-q.2"e m.m^R Abbrev Expand And Self-Insertu.0 ' q.4fp"g f~.4!^R Abbrev Expand -19"e '' qWORDAB Ins Chars[.1 f.1[.2 0,q.2:g.1[.3 q.2+1,fq.1:g.1u.1 :iWORDAB Ins Chars.3.1 qWORDAB Old Charsu.1 :i.2 :iWORDAB Old Chars.1.2 m.m^R Abbrev Expand And Call Old Charu.0 [.6 8[..e :\u.6 ]..e q.4m(m(m.m& Global or Local).0)WRDAB Old .6 [.0 q.0[.1 q.1fp"G f~.1!^R Abbrev Expand -19"E '' m.m^R Abbrev Expand And Call Old Charu.0 [.6 8[..e :\u.6 ]..e q.1m(m(m.m& Global or Local).0)WRDAB Old .6 [.0 @fs^RInitu.0 [.6 8[..e :\u.6 ]..e 0fo..qWRDAB Old .6[.1 [.2 q.1u.2 v[1[2[3[9 [ -1:fsQPHome(]*w)u3 qBuffer Indexu9 q9+8u2 q:.b(q9)-9/2u1 q1< q:.b(%2)-q3"e q.L ' %2w > q.V [.3[.4[.5 fq.3-40"G 0,16:g.3u.4 fq.3-16,fq.3:g.3u.5 :i.4.4.....5' "# q.3u.4' q.4 Word Abbrev Mode package. Documentation in INFO under EMACS.S Run when WORDAB is loaded. If you do non-trivial hacking of Word Abbrev mode, you should be on the WORDAB@MIT-AI mailing list. Calls variable WORDAB Setup Hook, if it exists. That can do things like auto-loading a file of abbreviations. It must also connect keys. If the hook does not exist (or is 0), we will connect the standard Word Abbrev mode keys: C-X C-A runs ^R Add Mode Word Abbrev, C-X C-H runs ^R Inverse Add Mode Word Abbrev, C-X + runs ^R Add Global Word Abbrev, C-X - runs ^R Inverse Add Global Word Abbrev, M-' runs ^R Word Abbrev Prefix Mark, C-M-Space runs ^R Abbrev Expand Only, and C-X U runs ^R Unexpand Last Word. Appends to variables Set Mode Line Hook and Exit Hook. This object file was compressed on 4:36pm Friday, 4 November 1983 by ECC on MIT-OZ from the following source libraries: PS:WORDAB.EMACS.622, 11/04/83 16:36:02C Finds abbrevs in region; offers to expand each. Searches region for word abbrevs. When one is found, the buffer is displayed with the cursor just after the abbrev. The character you then type determines what action is taken: Space expands the abbrev and goes on to the next one. Rubout goes on to the next one without expanding. Altmode exits this command without expanding. Period expands and then exit. Comma expands and stays so you can look it over. Then type one of these characters again. Exclamation mark expands this and each remaining abbrev without asking. Hyphen expands and glues to a prefix and stays. The prefix and abbrev should be separated by a "-". F causes this paragraph to be filled. C-R enters a recursive edit level, so you can move point or do minor editing. C-L clears and redisplays the screen and stays.u^R Expand abbrev before point, but insert nothing. If given an argument, will feep if last word isn't an abbrev.^R Expand abbrev before point, then old action. Explicit numeric argument inhibits expanding.  f*0+1m(m.m& WRDAB Old Char Describe)S Expand last word if an abbrev, then self-insert. Giving an explicit numeric argument inhibits expansion, just inserting that many copies of character that ran this.  f*0m(m.m& WRDAB Old Char Describe)^R Expand abbrev at point if old Tab action inserts. If Tab will not insert at point, no expansion is attempted. (E.g. the Tab is reindenting the line, but point is mid-line.) Explicit numeric argument inhibits expanding.  f*0+2m(m.m& WRDAB Old Char Describe)^R Remember point as end of an abbrev prefix. Expansion of the prefix may occur unless an numeric argument is given. Remembers this point as a prefix-end, and inserts a hyphen (which will disappear if an abbrev expands just after that hyphen). E.g. you might type "inter", mark that as a prefix (you see "inter-"), and then type an abbrev ("inter-comm " which becomes "intercommittee").S Maybe expand previous word. Expand previous word if mode or global abbrev. This goes on Q:.E(0) if user wants both modals and globals.S Expand previous word if global abbrev. This goes on Q:.E(0) if user wants only globals.S .1 is abbrev, .2 is ..Q offset This is the abbrev-expander, goes on Q:.E(1). A pre-comma numeric argument inhibits auto-filling. (Since ^^M, e.g., is called by some to insert CRLF but not auto-fill.)^R Undo last expansion, leaving the abbrev. Another ^R Unexpand Last Word will redo the expansion. An effort is made to keep point unchanged, but if unexpanding causes a change in the text around point, point may move.C Turn Word Abbrev mode on or off. Given no argument, the mode is toggled (turned on if it was off, and turned off if it was on). Given positive argument, the mode is always turned on. Given 0 or negative argument, the mode is turned off. Giving this command 1 as a pre-comma argument means that you only use global abbrevs, and things are set up to be faster (e.g. faster expansion checking since it doesn't have to check both global and local abbrevs). Each of the following chars: ~@#;$%^&*()-_=+[]\|:'`"{},<.>/?!, Space, Return, and Tab, will cause expansion of abbrevs followed by their normal action. If you wish to supply additional characters that should expand, see the description of Make These Characters Expand. If you wish to completely replace this list of expanding characters, set the variable WORDAB Ins Chars in your init or EVARS file to the string of characters that should expand.C Define abbrevs from a definition list in the buffer. Buffer should contain the word abbrev definition list. If given a pre-comma numeric argument, all abbrevs will be killed before defining the new ones from the buffer. (The old abbrevs are not killed until we are sure that the syntax of the buffer's definition list is correct.)C Define one word abbrev, global or for any mode. After doing M-X Make Word Abbrevfoofind outer otter, typing "foo" will automatically expand to "find outer otter". 3rd string argument, if any, is the mode for the abbrev. No 3rd string argument means use the current mode. 3rd string argument = "*" means this make a global abbrev. This command defines just one abbrev, as compared to Define Word Abbrevs which defines several abbrevs from a list in the buffer.C Add characters to the list of abbrev expanders. E.g. M-X Make These Characters Expand1234567890 will cause the digits to expand any abbrev before them, just like #$%.,/? etc. Note, though, that this will not necessarily make digits be word-delimiters. If your keyboard has Top-characters (e.g. Top-Z is alpha), you can have them be expanders too, though some of them can't be typed to ^R Extended Command (namely Top-Q and Top-M). Also: if you put this command into an init file, be careful to double any use of Top-S (namely C-]). You can have an EVARS file (as opposed to an init file) declare additional expanders too in a simple way -- just put the characters into the variable Additional Abbrev Expanders. E.g. to make the digits expand, put the following line into your EVARS file (you need the "*" to force it to be a string): Additional Abbrev Expanders:*1234567890 (Top-character users: in an EVARS file you would not need to double Top-S.)^R Define an abbrev for word(s) before point. Negative numeric argument means to delete the word abbrev. (If there is no such mode abbrev, but there is a global, it asks if it should kill the global.) Positive numeric argument (>0) means expansion is that many last words. Zero numeric argument means expansion is between point and MARK. (Extension writers: If Teco's fs^RMark set, that means expansion is between . and fs^RMark.) The abbrev is only effective when in the current mode (e.g. LISP).^R Define an abbrev for word(s) before point. Negative numeric argument means to delete the word abbrev. Positive numeric argument (>0) means expansion is that many last words. Zero numeric argument means expansion is between point and MARK. (Extension writers: if fs^RMark set, that means expansion is between . and fs^RMark.) The abbrev is effective in all major modes.^R Define the expansion for abbrev before point. Numeric argument n means nth word before point is to be an abbrev (e.g. you thought it already was, and you are now n words beyond). No numeric argument means the word just before point, same as argument of 1. Reads a one-line expansion for the abbrev, defines it, and expands it.^R Define the expansion for abbrev before point. Numeric argument n means nth word before point is to be an abbrev (e.g. you thought it already was, and you are now n words beyond). No numeric argument means the word just before point, same as argument of 1. Reads the expansion in the echo area. (This command cannot define multi-line expansions.) Defines that abbrev, and then expands the abbrev before point. Aborts if you abort the line-reading with Rubout, or if the expansion is null.q^R Remove the definition for one abbrev. Same as ^R Add Mode Word Abbrev with a negative numeric argument.x^R Remove the definition for one abbrev. Same as ^R Add Global Word Abbrev with a negative numeric argument.S Reads an abbrev for words before point. Stringarg1 is "*" for global abbrev, and space-modename for a mode abbrev, e.g. " TECO". Stringarg2 is & Read Line prompt. Calls & Read Line to read the abbrev. ARG non-0 means expansion is last ARG words. (Includes breaks in between words, but not those before first or after last word.) ARG 0 means expansion is between point and MARK. If fs^RMark set, then for any ARG expansion between . and fs^RMark. If the abbrev is already defined, user is asked if redefinition wanted. The abbrev must not contain any break characters. Abbrev variable is constructed: X abbreviation Abbrev. Its value is a string which is the expansion.S Basic definer subroutine. Pre-comma numeric argument is abbrev. Post-comma numeric argument is expansion. String argument is "*" or modename. Checks for break characters in abbrev (not allowed).C Allow user to edit the list of defined word abbrevs. Note that any '"'s are doubled so that the syntax is unambiguous. E.g. if the abbrev 'xsay' is to expand to 'He said "Hello".', then it will be: xsay: 1 "He said ""Hello""." A recursive edit level is entered. When exited by ^R Exit the buffer will be considered as new definitions of all word abbrevs. Any abbrevs missing from the list will be killed. Abort Recursive Edit will abort M-X Edit Word Abbrevs, leaving word abbrevs untouched.C Print some or all word abbrev definitions. Lists a table of word abbrev definitions for currently defined abbrevs. If string argument is null, all abbrevs are listed. If there is a string argument, it filters which abbrevs' definitions are listed. (Actually, it is a TECO search string.) If the abbrev, its mode, or its expansion contains the filter that definition is listed. Giving a numeric argument will control what the filter applies to: 0 or 7 (same as no argument): abbrev, mode, or expansion 1: abbrev only 2: expansion only 4: mode only Combinations by summing the above -- e.g. 3 means abbrev or expansion, but not mode.C Insert a list of some or all word abbrev definitions. Inserts a table of word abbrev definitions for some or all of the currently defined abbrevs. Format is that used by M-X List Word Abbrevs and M-X Edit Word Abbrevs. If string argument is null, all abbrevs are inserted. If there is a string argument, it filters which abbrevs' definitions are inserted. (Actually, it is a TECO search string.) If the abbrev, its mode, or its expansion contains the filter, that definition is inserted. Giving a numeric argument will control what the filter applies to: 0 or 7 (same as no argument): abbrev, mode, or expansion 1: abbrev only 2: expansion only 4: mode only Combinations by summing the above -- e.g. 3 means abbrev or expansion, but not mode. Extension writers: giving a 1 pre-comma argument causes the definitions to be listed as they are inserted.tC Kill all abbrev definitions, leaving a blank slate. It is as if you had not read or defined any word abbrevs.C Define word abbrevs from an abbrev definition file. Stringarg is word abbrev definition file. Default is ;WORDAB DEFNS. File may be in default fast-loading foramt or human-readable format. This will not complain if the file does not exist.C Write all the current abbrev definitions to a file. Stringarg filename. Default is WORDAB DEFNS. Argument present means do not write out usage counts. Normally writes a fast-loading format file, but if you have the Readable Word Abbrev Files option variable set to 1, it will write a human-readable format file (like that used by List Word Abbrevs). Default filenames come from last definition filename used.C Write abbrevs defined/changed since dumping this environment. Writes to file named by string argument. Defaults to home directory, INCABS > (INCABS..0 on Twenex.). This command is used by people with a large number of abbrevs, and who dump their environments. The init file should generally use M-X Write Word Abbrev File, and the & Startup... should use M-X Read Incremental Word Abbrev File.C Define abbrevs changed since dumping. String argument is filename that contains incremental abbrev definitions, written by M-X Write Incremental Word Abbrev File. Default is home directory, INCABS >. This command is used by people with a large number of abbrevs, and who dump their environments. The init file should generally use M-X Write Word Abbrev File, and the & Startup... should use this function. This will not complain if the file does not exist.S Like .V and .C combined, for speed. STRARG1 is abbrev variable name. STRARG2 is abbrev expansion with altmodes, ^]s quoted with ^]s. STRARG3 is usage-count string. Assumes ..Q is selected as buffer (..O).S Like .V and .C combined, but faster. STRARG1 is abbrev variable name string. STRARG2 is abbrev expansion string. Assumes ..Q is selected as buffer (..O).C Abbrev will run a macro after expanding. The last keyboard macro defined is attached to a word abbrev as its word abbrev hook. Just after that abbrev expands, this hook is executed. BE CAREFUL!! -- keyboard macro attachment is not always well-defined, due to some strange Teco effects. Not everything works that "ought to". First string argument is abbrev to attach it to. If null, the last one defined is used. Second string argument is mode (null means use current mode). Use "*" if you mean to attach it to a global abbrev. If you are attaching to the last defined abbrev, you can use anything for this string argument. Note that word abbrev hooks will be saved by M-X Write Word Abbrev File and M-X Write Incremental Word Abbrev File, just like normal abbrevs. Also, they appear in definition listings (e.g. by M-X List Word Abbrevs or M-X Edit Word Abbrevs) in pairs, such as the following: textmode: #0 "-*-Text-*-" textmode: (*-WABMAC) 0 "m(m.mText Mode)"S Put some Teco code on a word abbrev. The first string argument is the abbrev, second is mode name (or "*" for global abbrev). Given null abbrev, we use the last defined. The third string argument is a hook to call after expanding that abbrev. Note that word abbrev hooks get saved in incremental and full files, just like normal abbrevs.S Tell what a character does after expanding.S Check for characters to change. Calls a subroutine to see-if/do any expand characters need updating.S Check list of chars for expanders, fix. q.1: List of characters. q.6: ^R Macro to check against. q.7: Subroutine to call if char runs .6.S Check list of expand characters for changes q.1: List of characters. q.6: ^R Macro to check against. q.7: Subroutine to call if change.{S Make a self-inserter expander. Caller has .2 bound to self-inserter builtin. Numeric argument: 9-bit of key to use.S Make a call-old expander. Numeric argument: 9-bit of key to use.S Reset char ARG to @fs^RInit.S Reset char ARG to what was before.S Return Q.L or Q.V... Returns Q.L if argument is a local q-register, Q.V otherwise.S Produce a short string, showing beginning/end. Numeric argument is a string pointer. & Setup WORDAB Library Expand Word Abbrevs in Region ^R Abbrev Expand Only ^R Abbrev Expand And Call Old Char ^R Abbrev Expand And Self-Insert ^R Abbrev Expand for Tab ^R Word Abbrev Prefix Mark & WRDAB Mode or Global Expand & Global Expand & Expand ^R Unexpand Last Word WORDAB Word Abbrev Mode Define Word Abbrevs Make Word Abbrev Make These Characters Expand ^R Add Mode Word Abbrev ^R Add Global Word Abbrev ^R Inverse Add Mode Word Abbrev ^R Inverse Add Global Word Abbrev ^R Kill Mode Word Abbrev ^R Kill Global Word Abbrev & Add Word Abbrev & Check And Make Word Abbrev Edit Word Abbrevs List Word Abbrevs Insert Word Abbrevs Kill All Word Abbrevs Read Word Abbrev File Write Word Abbrev File Write Incremental Word Abbrev File Read Incremental Word Abbrev File & Make Usage Abbrev Variable & Make Non-Usage Abbrev Variable Attach Word Abbrev Keyboard Macro & Attach Word Abbrev Hook & WRDAB Old Char Describe & WRDAB Process Options Hook & WRDAB Off PO Check & WRDAB On PO Check & WRDAB Turn On Ins Char & WRDAB Turn On Old Char & WRDAB Turn Off Ins Char & WRDAB Turn Off Old Char & Global or Local & Shorten String +8+fq(+4)[2 0[3 < %3,-q2f2u3 q3&1@; q3"l 0' > f[BBind q3-1*5,q3*5g2 q:..o(0)+q2