x [0+8+FQ(+4)[1 0FO10F"G+Q1' +FQ()+4U1 FQ1"L0' ,Q1:M(Q1+4(]1]0)) (Q%w &#6? j,#TkvB"@M T r ;q#=h(y17>6k66b+q6D+Q'*v#5j_)9?5M3s-!-+F~21*.5M0m,$C1O._) i) p8m& Check Window Sizes& Deselect Window& Kill MWIND Library& Multiple Window Refresh& Restore Old Definition& Save Old Definition& Select Window& Setup MWIND Library& Window SeparatorCompare Windows^R Goto Window^R Grow Window^R Kill Windows^R One Window^R Other Window^R Redistribute Windows^R Scroll Other Window^R Split Window^R Two Windows^R Visit in New Window~DIRECTORY~~DOC~ & Check Window Sizes~DOC~ & Deselect Window~DOC~ & Kill MWIND Library~DOC~ & Multiple Window Refresh~DOC~ & Restore Old Definition~DOC~ & Save Old Definition~DOC~ & Select Window~DOC~ & Setup MWIND Library~DOC~ & Window Separator~DOC~ Compare Windows~DOC~ ^R Goto Window~DOC~ ^R Grow Window~DOC~ ^R Kill Windows~DOC~ ^R One Window~DOC~ ^R Other Window~DOC~ ^R Redistribute Windows~DOC~ ^R Scroll Other Window~DOC~ ^R Split Window~DOC~ ^R Two Windows~DOC~ ^R Visit in New Window~DOC~ ~Filename~~Filename~~INVERT~-1fo..qMWIND Load Count+1f"guMWIND Load Count :i*MWIND library already loadedfg0' "#m.vMWIND Load Count' 8*5fsQVec qWm.vWindow Vector 7u:W(0) qBuffer Nameu:W(5) fsHeight-(fsEchoLines)-1u:W(3) 0u:W(4) 1m.vCurrent Window 0m.vIn MWIND Deselect m.mKill Variable mKMM & Check Window Sizes m.m& Save Old Definition mS^R Other Window mS^R Two Windows mS^R One Window mS^R Grow Window mS^R Scroll Other Window 0fo..QWindow 2 Size"n fsTop Line( m(m(m.m& Get Library Pointer)EMACSm.m^R One Window) )"e1,'m(m.m^R Two Windows)' m.m& Multiple Window RefreshfsRefresh fsTTYMacro[0 f[BBindfq0"gg0' j:s& Check Window Sizes"e ji(m(m.m& Check Window Sizes) ) hfx*fsTTYMacro' f]BBind 0fo..qMWIND Setup Hookf"nu0m0' m.m^R Kill Windowsu:.x(1) m.m^R Split Windowu:.x(2) m.m^R Redistribute Windowsu:.x(3) m.m^R Visit in New Windowu:.x(4) m.m^R Grow Windowu:.x(^) m.m^R Goto Windowu:.x(O) m.m^R Scroll Other Windowu...V [0[1 :i1 0fo..qMM 1u0 mKMM 1 q0f"nm.vMWIND Old 1'qMWIND Load Count-1:f"luMWIND Load Count0' 1,m(m.m^R Kill Windows) m.mKill Variable mKMWIND Load Count :i*m.vMM & Check Window Sizes 0fsRefresh m.m& Restore Old Definition mR^R Other Window mR^R Two Windows mR^R One Window mR^R Grow Window mR^R Scroll Other Window m.m& Macro Name m(m.m& Get Library Pointer)EMACS q:.x(1)mN[0f~0^R Kill Windows"eqEm.m^R One Windowu:.x(1)' q:.x(2)mNu0f~0^R Split Window"eqEm.m^R Two Windowsu:.x(2)' q:.x(3)mNu0f~0^R Redistribute Windows"e qEm.m^R View Two Windowsu:.x(3)' q:.x(4)mNu0f~0^R Visit in New Window"e qEm.m^R Visit in Other Windowu:.x(4)' q:.x(^)mNu0f~0^R Grow Window"eqEm.m^R Grow Windowu:.x(^)' q:.x(O)mNu0f~0^R Goto Window"eqEm.m^R Other Windowu:.x(O)' q...VmNu0f~0^R Scroll Other Window"e qEm.m^R Scroll Other Windowu...V' [0[1 :i1 0fo..qMWIND Old 1u0 mKMWIND Old 1 q0f"nm.vMM 1'm(m.m& Check Top Level)windows qWindow Vector qCurrent Window ((fqW/5)-1)/q:W(0)[N "eqN-2"l :i*O1B Only One WindowfsErr'' ff*"e qW[..o 5,(((qC-1)*q:W(0)+1)*5)k (q:W(0)+1)*5,zk ]..o 1uCurrent Window :f .[0fnq0j fsWindow+bj 1:<-q:W(4),0@fm> .-bfsWindow 0u:W(4)0fsTopLine fsHeight-(fsEchoLines)-1u:W(3) 0fsLines 0m.vWindow 2 Size ' qN-2"l' [0 qC-qN"e1u0' qC-1"e-1u0' q0"g(qC-1)*q:W(0)u0 q:W(q0-q:W(0)+3)+q:W(q0+3)+1u:W(q0-q:W(0)+3) qW[..o q0*5+5jq:W(0)*5d ]..o qC-1f(uCurrent Window ):m(m.m& Select Window)' (qC-1)*q:W(0)u0 m.m& Select Window 1,qC+1mS fsWindow+bj 1:<-q:W(q0+3)-1,0@fm> .-bu:W(q0+q:W(0)+2) q:W(q0+4)u:W(q0+q:W(0)+4) q:W(q0+3)+1+q:W(q0+q:W(0)+3)u:W(q0+q:W(0)+3) qW[..o q0*5+5jq:W(0)*5d ]..o qC:mSm(m.m& Check Top Level)windows qWindow Vector qCurrent Window-1*q:W(0)[0 q:W(q0+3)f([1)-3"l :i*WTS Window Too Small To SplitfsErr' m(m.m& Deselect Window) qW[..o(q0+q:W(0)+1)*5j q:W(0)*5,0i]..o 0[3q:W(0)< q:W(q0+(%3))u:W(q0+q:W(0)+q3)> u3q1-q3-2"lq1/2u3'q3:"gq1/2u3' fs^RVPos-q:W(q0+4)-q3[2 q2:f"l-1,q3*(fs%Center)/100fu2 q2@:f' q3u:W(q0+3) q1-q3-1u:W(q0+q:W(0)+3) q:W(q0+4)+q3+1u:W(q0+q:W(0)+4) q:W(q0+4)+q3m(m.m& Window Separator) m(m.m^R Goto Window) ff&1"e:m(m.m& Deselect Window)' -1f[DForce@v qCurrent Window-1:m(m.m^R Goto Window)m(m.m& Check Top Level)windows qWindow Vector ((fqW/5)-1)/q:W(0)[0 q0-2"l :i*O1B Only One WindowfsErr' ff"e qCurrent Window+1[1 q1-q0"g1u1'' "#fs^RArgP&2"e qCurrent Window-1[1 q1"eq0u1'' "#"g[1 -q0"g:i*WOR Window Out Of RangefsErr'' "#"lq0+1+[1 q1:"g:i*WOR Window Out Of RangefsErr'' "#qCurrent Window[1'''' m(m.m& Deselect Window) q1uCurrent Window q1:m(m.m& Select Window) qWindow Vector qCurrent Window (qC-1)*q:W(0)[0 q..f-q.f"nfsLines"e@fg0' fsLines-q:W(q0+3)"e :i*Not in minibuffer or at top level@fg0' fsLines+f(-q:W(q0+3):"l @fg0' )fsLines 0fo..qMini Outer Refresh"n :i*[Mini Outer Refresh' m(fsRefreshf"e:i*')w' ((fqW/5)-1)/q:W(0)[1 q1-2"l:i*O1B Only One WindowfsErr' f"l+q:W(q0+3):f"g :i*WTS Window Too Small To ShrinkfsErr' "#u:W(q0+3)' fsRefresh[..n q1-qC"e q:W(q0-q:W(0)+3)-u:W(q0-q:W(0)+3) q:W(q0+4)-f(u:W(q0+4))fsTopLine 0fsLines .[2fnq2jfsWindow+bj 1:<-,0:fm> .-bfsWindow ' q:W(q0+q:W(0)+3)-u:W(q0+q:W(0)+3) q:W(q0+q:W(0)+4)+u:W(q0+q:W(0)+4) m(m.m& Deselect Window) m.m& Select Window fnqCmSqC+1mS fsWindow+bj 1:<,0@fm> .-bu:W(q0+q:W(0)+2) ' 0[20[3 qC-q1"l,q:W(q0+q:W(0)+3)-1fu2u2' qC-1"g-q2,q:W(q0-q:W(0)+3)-1fu3u3' -q2-q3"n:i*CGW Not Enough Lines To Grow WindowfsErr' fsRefresh[..nf[Window fs^RVPos-q:W(q0+4)-q3@:f q2f"g+q:W(q0+3)u:W(q0+3) q:W(q0+q:W(0)+4)+q2u:W(q0+q:W(0)+4) q:W(q0+q:W(0)+3)-q2u:W(q0+q:W(0)+3) m.m& Select Window fnqCmSqC+1mS fsWindow+bj 1: .-bu:W(q0+q:W(0)+2)' q3f"g+q:W(q0+3)u:W(q0+3) q:W(q0+4)-q3f(u:W(q0+4))fsTopLine q:W(q0-q:W(0)+3)-q3u:W(q0-q:W(0)+3)' qC-q1f"nwq:W(q0+3)'fsLines qWindow Vector ((fqW/5)-1)/q:W(0)[1 fsHeight-(fsEchoLines)-1[2 q1*2-q2:"l :m(m.m^R Kill Windows)' (q2-q1+1)/q1[4 (q4*q1)-(q2-q1+2)[3 0[0 fsRefresh[..n (qCurrent Window-1)*q:W(0)[5 fsTopLine-q:W(q5+4)[6 fsLines-q:W(q5+3)[7 q1 q:W(q5+4)+q6fsTopLine fsLines"n q:W(q5+3)+q7fsLines' 1fsTypeout m.ifi:fc[0 -1fsTypeout m.m^R Split Window q0f*B"gmSf:m(m.mSelect Buffer)' q0f*F"gmSf:m(m.mFind File)' q0f*T."gmSf:m(m.m^R Find Tag)' @fg0qCurrent Window[1 @fn|q1m(m.m^R Goto Window)| ff&2"n'm(m.m^R Goto Window) -1f[DForce fs^RArgP-5"e @m(m.m^R Previous Screen)' "#ff&1"n'@m(m.m^R Next Screen)' 0u..h@v qCurrent Window-1"n 1:m(m.m^R Goto Window)' qWindow Vector ((fqW/5)-1)/q:W(0)-1"g 2:m(m.m^R Goto Window)' m(m.m& Check Top Level)windows 0fo..qWindow 2 Buffer"e :i*O1B Only One WindowfsErr' .( qBuffer Name( fsWindow( qWindow 2 Bufferm(m.mSelect Buffer) qWindow 2 Pointer:j qWindow 2 WindowfsWindow )uWindow 2 Window )uWindow 2 Buffer )uWindow 2 Pointer qWindow Vector ((fqW/5)-1)/q:W(0)-1"g :i*A2W Already Two WindowsfsErr' 0fo..qWindow 2 Buffer0"e .m.vWindow 2 Pointer fsWindowm.vWindow 2 Window 0fo..qTags Find File"e-1"e 0uWindow 2 Pointer 0uWindow 2 Window :i0W2''' 0fo..qWindow 1 Size,m(m.m^R Split Window) [Previous Buffer q0f"nm(m.mSelect Buffer)' qWindow 2 Pointer:j qWindow 2 WindowfsWindow "e' -1f[DForce 0u..H@v 1:m(m.m^R Goto Window)ff"e1m(m.m^R Goto Window)' "#qCurrent Window-1"e 2m(m.m^R Goto Window)'' :m(m.m^R Kill Windows)qWindow Vector ((fqW/5)-1)/q:W(0)-2"l :i*O1B Only One WindowfsErr' m(m.m& Deselect Windowf([X)) m.m& Select Window qCurrent Window q..o[DfnqCmS fsLines"e1'"#qC+1'f(mS)[Current Window 0fo..qCollapse in Comparison qA"e:iA  ' -1[B 1:<-1f[NoQuit qD,qAm(m.aAUX& Compare String with Buffer)uB f]NoQuit> 0@VmX qD[..o.(]..oqCmS)j0u..n qB"e@ft (Windows are different)' qB"g@ft (No differences encountered)' 0fsEchoActive 0[9 f[TopLine 1f[Lines fsWidth-(-1fo..qMWIND Old Width)"n fsWidthm.vMWIND Old Width f[BBind fsWidth-8,-i hfx*m.vWindow Separator Text f]BBind' qWindow Separator Text[0 0fo..qMWIND Inverse Separatoru9 q9"n 1:'w :ft0 q9"n1:<0fsScrInv>' 0u..H-1*q:W(0)[0 ((fqW/5)-1)/q:W(0)[1 q:W(q0+4)fsTopLine -q1f"nwq:W(q0+3)'fsLines "e[Previous Buffer q:W(q0+5)m(m.mSelect Buffer)' "#1,q:W(q0+5)m(m.m& Find Buffer)[1 q1+1"e0,0fsBound' q:.B(q1+4)u..o' -fsWindow m(m.m^R Widen Bounds) q:W(q0+7)"l -fsWindow q:W(q0+6)f"gm(m.m^R Goto Page)'' "#1:' q:W(q0+1)+b:j"ezj' q:W(q0+2)fsWindow qIn MWIND Deselect"n0' 1[In MWIND Deselect qCurrent Window-1*q:W(0)[0 qBuffer Nameu:W(q0+5) .-bu:W(q0+1) fsWindowu:W(q0+2) 0fo..qCurrent Pagef"nu:W(q0+6) -1u:W(q0+7)' "#b+(fsVZ)"n fsBoundu:W(q0+7)u:W(q0+6)' "#-1u:W(q0+6) -1u:W(q0+7)'' qCurrent Window-3"l qCurrent Window:\[1 qBuffer Namem.vWindow 1 Buffer .m.vWindow 1 Pointer fsWindowm.vWindow 1 Window q:W(q0+3)m.vWindow 1 Size ' m(m.m& Check Window Sizes) fsQPPtr qWindow Vector ((fqW/5)-1)/q:W(0)[0 0u..h q0-1"g [..of[TopLinef[Lines 0f[Refresh-1f[DForce m(m.m& Deselect Window) @fn|1,qCurrent Windowm(m.m& Select Window)| m.m& Window Separator 1[N q0' qPfsQPUnwindqWindow Vector ((fqW/5)-1)/q:W(0)[1 (q1-1)*q:W(0)[0 q:W(q0+4)+q:W(q0+3)-(fsHeight-(fsEchoLines)-1)f"e ' "#[2' q:W(q0+3)-q2f"gu:W(q0+3)' :m(m.m^R Redistribute Windows)MWINDMore than two windows on a screenS Set environment for windowing. If the variable MWIND Setup Hook exists, it is macroed. Otherwise, several keys are set: c-X 1 gets ^R Kill Windows c-X 2 gets ^R Split Window c-X 3 gets ^R Redistribute Windows c-X 4 gets ^R Visit in New Window c-X ^ gets ^R Grow Window c-X O gets ^R Goto Window c-m-V gets ^R Scroll Other Window All of the old two-window commands are shadowed.S Find MM-var and rename. Assumes Kill Variable is in qK.S Undo definitions and key settingsS Restore saved macro. Assumes Kill Variable is in qK.^R Kill all windows except current one. A positive arg means kill current window, merging up (down for a neg arg). A pre-comma arg means not to worry if there is only one window now.^R Divide current window into two. The same buffer will always be used for both windows. An argument keeps the cursor in the top window. A pre-comma argument is the number of lines to leave in the top window.^R Go to the next window on the screen. A c-U as arg means to go to the previous window. A numarg means go to that window, numbered from the top of the screen (a negative arg counts from the bottom of the screen).^R Make this window (or minibuffer) use more lines. Argument is number of extra lines (can be negative).^R Make all windows the same size. If the screen has changed and there are too many windows, all windows except the current one are killed.^R Find buffer, tag or file in new window. Follow this command by B or c-B and a buffer name; F or c-F and a file name; or T, c-T, or . and a tag name. We find the buffer, tag or file in a new window. An argument is passed on to Select Buffer, Find File, or Find Tag.^R Scroll next window up several lines. If at last window, scrolls first window of screen. A pre-comma argument is taken as argument to ^R Goto Window. Specify the number as a numeric argument, negative for down. The default is a whole screenful up. Just Meta-Minus as argument means scroll a whole screenful down.^R Switch to another window. Goes to the top window, unless there already; in that case, goes to the (perhaps invisible) second window.^R Show two windows and select window two. An argument > 1 means give window 2 the same buffer as in window 1. A pre-comma argument means keep the cursor in window 1.^R Display only one window. Normally displays what used to be in the top window. With a numeric argument displays what was in the current one, unless already in the top window, in which case the second window is displayed.C Compare text in two windows. Compares the text in the current window with that in the next window down (the one ^R Goto Window would pick), starting at the cursor in each window, leaving point in each window at the first discrepancy, if any, or at the end of the buffer. Quitting leaves point at place comparison had reached. The variable Collapse in Comparison should be a string of "insignificant" chatacters. Any sequence of those characters matches any other such sequence. If the variable is not defined, the default is CR, LF, TAB, and SPACE.S Display horiz line at numarg row.S Go to NUMARG window. Pre-comma arg means TECO-select the buffer. Assumes Window Vector is in qW.S Save current window in window vector. Assumes Window vector is in qW.S FS Refresh for MWIND library.S Make sure screen size hasn't changed.& Setup MWIND Library & Save Old Definition & Kill MWIND Library & Restore Old Definition ^R Kill Windows ^R Split Window ^R Goto Window ^R Grow Window ^R Redistribute Windows ^R Visit in New Window ^R Scroll Other Window ^R Other Window ^R Two Windows ^R One Window Compare Windows & Window Separator & Select Window & Deselect Window & Multiple Window Refresh & Check Window Sizes +8+fq(+4)[20[3 <%3,-q2f2u3q3&1@;q3"l0'> f[BBindq3-1*5,q3*5g2q:..o(0)+q2