;ELC ;;; compiled by cthomp@willow on Mon Aug 9 12:17:31 1993 ;;; from file /era/era-0.80/editor/lisp/emulators/teco.el ;;; emacs version 19.8 (beta6) Lucid. ;;; bytecomp version 2.15; 14-jul-93. ;;; optimization is on. ;;; this file uses opcodes which do not exist in Emacs 18. (if (and (boundp 'emacs-version) (or (and (boundp 'epoch::version) epoch::version) (string-lessp emacs-version "19"))) (error "This file was compiled for Emacs 19.")) (byte-code "!MM" [require backquote teco-set-elements #[(array start end value) "\nX I Tq)" [start i end array value] 4] teco-set-elements-index #[(array start end offset) "\nX \\I To)" [start i end array offset] 5]] 2) (defvar teco-command-string "" "\ The current command string being executed.") (defvar teco-command-pointer nil "\ Pointer into teco-command-string showing next character to be executed.") (defvar teco-ctrl-r 10 "\ Current number radix.") (defvar teco-digit-switch nil "\ Set if we have just executed a digit.") (defvar teco-exp-exp nil "\ Expression value preceeding operator.") (defvar teco-exp-val1 nil "\ Current argument value.") (defvar teco-exp-val2 nil "\ Argument before comma.") (defvar teco-exp-flag1 nil "\ t if argument is present.") (defvar teco-exp-flag2 nil "\ t if argument before comma is present.") (defvar teco-exp-op nil "\ Pending arithmetic operation on argument.") (defvar teco-exp-stack nil "\ Stack for parenthesized expressions.") (defvar teco-macro-stack nil "\ Stack for macro invocations.") (defvar teco-mapch-l nil "\ Translation table to lower-case letters.") (byte-code "\" $ $" [make-vector 256 0 teco-mapch-l teco-set-elements-index 255 65 90 32] 5) (defvar teco-trace nil "\ t if tracing is on.") (defvar teco-at-flag nil "\ t if an @ flag is pending.") (defvar teco-colon-flag nil "\ 1 if a : flag is pending, 2 if a :: flag is pending.") (defvar teco-qspec-valid nil "\ Flags describing whether a character is a vaid q-register name. 3 means yes, 2 means yes but only for file and search operations.") (byte-code "\" $ $ I I I I" [make-vector 256 0 teco-qspec-valid teco-set-elements 97 122 3 48 57 95 2 42 37 35] 5) (defvar teco-exec-flags 0 "\ Flags for iteration in process, ei macro, etc.") (defvar teco-iteration-stack nil "\ Iteration list.") (defvar teco-cond-stack nil "\ Conditional stack.") (defvar teco-qreg-text (make-vector 256 "") "\ The text contents of the q-registers.") (defvar teco-qreg-number (make-vector 256 0) "\ The number contents of the q-registers.") (defvar teco-qreg-stack nil "\ The stack of saved q-registers.") (defconst teco-prompt "*" "\ *Prompt to be used when inputting Teco command.") (defconst teco-exec-1 (make-vector 256 nil) "\ Names of routines handling type 1 characters (characters that are part of expression processing).") (defconst teco-exec-2 (make-vector 256 nil) "\ Names of routines handling type 2 characters (characters that are not part of expression processing).") (defvar teco-last-search-string "" "\ Last string searched for.") (defvar teco-last-search-regexp "" "\ Regexp version of teco-last-search-string.") (fset 'teco-define-type-1 '(macro . #[(char &rest body) " !P! C $ DFE)" [intern "teco-type-1-" char-to-string char s progn append (defun) (nil) body aset teco-exec-1 quote] 7 "\ Define the code to process a type 1 character. Transforms (teco-define-type-1 ?x code ...) into (defun teco-type-1-x () code ...) and does (aset teco-exec-1 ?x 'teco-type-1-x)"])) (fset 'teco-define-type-2 '(macro . #[(char &rest body) " !P! C $ DFE)" [intern "teco-type-2-" char-to-string char s progn append (defun) (nil) body aset teco-exec-2 quote] 7 "\ Define the code to process a type 2 character. Transforms (teco-define-type-2 ?x code ...) into (defun teco-type-2-x () code ...) and does (aset teco-exec-2 ?x 'teco-type-2-x)"])) (defconst teco-char-types (make-vector 256 0) "\ Define the characteristics of characters, as tested by \": 1 alphabetic 2 alphabetic, $, or . 4 digit 8 alphabetic or digit 16 lower-case alphabetic 32 upper-case alphabetic") (byte-code " $ $ $ I I" [teco-set-elements teco-char-types 48 57 12 65 90 43 97 122 27 36 2 46 (("BNI" . "> not in iteration") ("CPQ" . "Can't pop Q register") ("COF" . "Can't open output file ") ("FNF" . "File not found ") ("IEC" . "Invalid E character") ("IFC" . "Invalid F character") ("IIA" . "Invalid insert arg") ("ILL" . "Invalid command") ("ILN" . "Invalid number") ("IPA" . "Invalid P arg") ("IQC" . "Invalid \" character") ("IQN" . "Invalid Q-reg name") ("IRA" . "Invalid radix arg") ("ISA" . "Invalid search arg") ("ISS" . "Invalid search string") ("IUC" . "Invalid ^ character") ("LNF" . "Label not found") ("MEM" . "Insufficient memory available") ("MRP" . "Missing )") ("NAB" . "No arg before ^_") ("NAC" . "No arg before ,") ("NAE" . "No arg before =") ("NAP" . "No arg before )") ("NAQ" . "No arg before \"") ("NAS" . "No arg before ;") ("NAU" . "No arg before U") ("NFI" . "No file for input") ("NFO" . "No file for output") ("NYA" . "Numeric arg with Y") ("OFO" . "Output file already open") ("PDO" . "Pushdown list overflow") ("POP" . "Pointer off page") ("SNI" . "; not in iteration") ("SRH" . "Search failure ") ("STL" . "String too long") ("UTC" . "Unterminated command") ("UTM" . "Unterminated macro") ("XAB" . "Execution interrupted") ("YCA" . "Y command suppressed") ("IWA" . "Invalid W arg") ("NFR" . "Numeric arg with FR") ("INT" . "Internal error") ("EFI" . "EOF read from std input") ("IAA" . "Invalid A arg")) teco-error-texts] 5) (defconst teco-spec-chars [0 1 0 0 0 64 0 0 0 2 128 128 128 0 64 0 0 64 64 64 0 34 0 0 64 0 0 0 0 0 1 0 0 1 16 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 16 0 1 0 12 0 0 1 1 32 0 6 0 0 0 32 10 2 0 32 4 10 0 32 0 4 32 0 0 32 0 32 1 6 0 0 12 0 0 1 1 32 0 6 0 0 0 32 10 2 0 32 4 10 0 32 0 4 32 0 0 0 16 0 0 0] "\ The special properties of characters: 1 skipto() special character 2 command with std text argument 4 E takes a text argument 8 F takes a text argument 16 char causes skipto() to exit 32 command with q-register argument 64 special char in search string 128 character is a line separator") (fset 'teco-execute-command #[(string) "‰‰‰ \n    ؍." [string 0 nil start teco-qreg-stack teco-macro-stack teco-exp-stack teco-cond-stack teco-iteration-stack teco-exec-flags teco-colon-flag teco-at-flag teco-trace teco-exp-op teco-exp-flag2 teco-exp-flag1 teco-exp-val2 teco-exp-val1 teco-exp-exp teco-digit-switch teco-command-pointer teco-command-string teco-out-init teco-exit (byte-code " != !\"\nX\nX\nZ Y!   _\n\\ \n   \nH\nH == \\ = Z = _ = U  = \" = \" \nH !)))" [teco-get-command0 teco-trace cmdc 94 logand teco-get-command 31 48 57 teco-ctrl-r teco-error "ILN" teco-digit-switch teco-exp-val1 t teco-exp-flag1 nil teco-mapch-l teco-exec-1 r teco-exp-op start add teco-exp-exp sub mult div 0 and or logior teco-exec-2 "ILL"] 4)] 18 "\ Execute teco command string."]) (byte-code "M\nIM\nIM\nIM\nIM\nIM\nIM\nIM\nIM\nIM\nIM\nIM\nIM\nIM\nIM\nIM\nIM\nIM\nIM\nIM #[nil "!!lj" [teco-iteration-stack teco-error "BNI" teco-pop-iter-stack nil teco-exp-flag1 teco-exp-flag2 start teco-exp-op] 2] 62 teco-type-2-\; #[nil "! Y? !̉ " [teco-iteration-stack teco-error "SNI" teco-exp-flag1 teco-exp-val1 teco-search-result 0 teco-colon-flag teco-find-enditer teco-pop-iter-stack t nil start teco-exp-op] 2] 59 teco-type-2-\" #[nil "!!H =  H\"U? =  H\"U? =  H\"U? = = = = U = = V = = = = W = U? =  H\"U? =  H\"U? =  H\"U?!&? ''V  Uq Uk Ue U'T'^ U'S'Q'UK F**" [teco-exp-flag1 teco-error "NAQ" nil start teco-exp-op teco-mapch-l teco-get-command teco-trace c 97 logand teco-char-types teco-exp-val1 1 0 99 2 100 4 101 102 117 61 103 62 108 115 116 60 110 114 8 118 16 119 32 "IQC" test ll teco-skipto 34 124 39 break] 4] 34 teco-type-2-\' (lambda nil t) 39 teco-type-2-| #[nil "V U\nUs\nU Td S^*" [1 nil c ll 0 teco-skipto 34 39] 3] 124 teco-type-2-u #[nil "! !\"I \n ̉ " [teco-exp-flag1 teco-error "NAU" teco-qreg-number teco-get-qspec 0 teco-get-command teco-trace teco-exp-val1 teco-exp-flag2 teco-exp-val2 nil start teco-exp-op] 5] 117 teco-type-2-q #[nil " \n !\"\n  HG H H\n͏)ˉ)" [teco-get-qspec teco-colon-flag teco-exp-flag1 teco-get-command teco-trace mm teco-qreg-text teco-qreg-number teco-exp-val1 t v nil (aref v teco-exp-val1) ((error -1)) start teco-exp-op] 4] 113 teco-type-2-% #[nil " !\" H!\\ I ʉ *" [teco-get-qspec nil teco-get-command teco-trace mm teco-qreg-number teco-get-value 1 v teco-exp-val1 t teco-exp-flag1] 4] 37 teco-type-2-c #[nil "`!\\eW\ndV!\nbʼn)" [teco-get-value 1 p teco-error "POP" nil teco-exp-flag2] 4] 99 teco-type-2-r #[nil "`!ZeW\ndV!\nbʼn)" [teco-get-value 1 p teco-error "POP" nil teco-exp-flag2] 4] 114 teco-type-2-j #[nil "e!eW dV! bĉ)" [teco-get-value p teco-error "POP" nil teco-exp-flag2] 3] 106 teco-type-2-l #[nil "!!u" [teco-lines teco-get-value 1] 3] 108 teco-type-2-\ #[nil "!!ĉ" [teco-lines teco-get-value 1 teco-exp-val1 t teco-exp-flag1] 3] 17 teco-type-2-= #[nil "!!!!!ɪʪ \"! ! щ" [teco-exp-flag1 teco-error "NAE" teco-output format teco-peek-command 61 teco-get-command teco-trace "%x" "%o" "%d" teco-exp-val1 teco-colon-flag 10 nil teco-exp-flag2 start teco-exp-op] 4] 61 teco-type-2-\ #[nil "!   GT) lj\n" [exp-flag1 teco-error "IIA" teco-get-text-arg text 9 teco-ctrl-s nil teco-colon-flag teco-exp-flag1 teco-exp-flag2] 2] 9 teco-type-2-i #[nil " \n Ø!c\n c G ˉ )" [teco-get-text-arg text teco-exp-flag1 "" teco-error "IIA" teco-exp-val1 1 teco-ctrl-s start teco-exp-op nil teco-colon-flag teco-exp-flag2] 2] 105 teco-type-2-t #[nil "!\n@\nA{!)" [teco-line-args nil args teco-output] 3] 116 teco-type-2-v #[nil "!`\nZ!\\`\n!\\{!)" [teco-get-value 1 ll teco-output teco-lines] 5] 118 teco-type-2-\ #[nil "\"!ȉ " [teco-output teco-get-text-arg nil 1 teco-at-flag teco-colon-flag teco-exp-flag1 teco-exp-flag2 start teco-exp-op] 4] 1 teco-type-2-d #[nil "!!!@ A|)" [teco-exp-flag2 delete-char teco-get-value 1 teco-line-args ll] 4] 100 teco-type-2-k #[nil "!@\nA|)" [teco-line-args 1 ll] 3] 107 teco-type-2-\ #[nil " !\" Ș\n!!   H P I+" [teco-get-qspec nil teco-get-command teco-trace mm teco-get-text-arg text-arg teco-exp-flag1 "" char-to-string teco-exp-val1 teco-error "IIA" text teco-qreg-text teco-colon-flag teco-at-flag] 4] 21 teco-type-2-x #[nil " !\"!@A{ \n HPI  \n +" [teco-get-qspec nil teco-get-command teco-trace mm teco-line-args 0 args text teco-qreg-text teco-colon-flag teco-exp-flag1 teco-at-flag] 5] 120 teco-type-2-g #[nil " !\"  H! Hcȉ)" [teco-get-qspec t teco-get-command teco-trace mm teco-colon-flag teco-output teco-qreg-text nil] 4] 103 teco-type-2-\[ #[nil " !\" H HBB)" [teco-get-qspec t teco-get-command teco-trace mm teco-qreg-text teco-qreg-number teco-qreg-stack] 4] 91 teco-type-2-\] #[nil " !\" Ȫ\n@   @I  AIA)!Љ)" [teco-get-qspec t teco-get-command teco-trace mm teco-colon-flag teco-exp-flag1 teco-qreg-stack -1 0 teco-exp-val1 pop teco-qreg-text teco-qreg-number teco-error "CPQ" nil] 4] 93 teco-type-2-\\ #[nil "`f UT UT Uf Y XT _\\\\_ Uf Y XT _\\\\`f Y X Y X Y XT V֪ Vת _\\\\< _`Z, Uݪ Uު\"c!" [teco-exp-flag1 1 0 nil c n sign p 43 45 -1 teco-ctrl-r 8 48 55 -48 10 57 97 102 65 70 -87 -55 16 teco-exp-val1 t teco-ctrl-s format "%o" "%d" "%x" start teco-exp-op] 5] 92 teco-type-2-\ #[nil "\n!É !ȉ*" [teco-exp-flag1 teco-output teco-exp-val1 nil 0 echo-keystrokes read-char c t] 2] 20 teco-type-2-s #[nil " \nȘ!\n  \n`V $W $=b U!ܪ̉ĉ-" [teco-get-text-arg teco-exp-flag1 teco-expr-val1 1 nil regexp count arg "" teco-parse-search-string teco-last-search-string teco-last-search-regexp 0 re-search-forward t re-search-backward result p teco-colon-flag 2 teco-peekcmdc 34 teco-error "SRH" teco-exp-flag2 teco-at-flag start teco-exp-op -1 teco-exp-val1] 7] 115 teco-parse-search-string #[(s) " GW Pr ," [0 s "" nil c r l i teco-parse-search-string-1] 4] teco-parse-search-string-1 #[nil " Y! HT = = = =͇ =χ !" [i l teco-error "ISS" s c 5 teco-parse-search-string-e 14 teco-parse-search-string-n 17 teco-parse-search-string-q 19 "[^A-Za-z0-9]" 24 "[-]" teco-parse-search-string-char] 2] teco-parse-search-string-char #[(c) "\n!!" [regexp-quote char-to-string c] 3] teco-parse-search-string-q #[nil " Y! HT !" [i l teco-error "ISS" s c teco-parse-search-string-char] 2] teco-parse-search-string-e #[nil " Y! HT = =ȇ = =ˇ = =· = = =Ӈ = =ׇ =ه =ۇ =݇ =߇!" [i l teco-error "ISS" s c 97 65 "[A-Za-z]" 99 67 "[A-Za-z.$]" 100 68 "[0-9]" 103 teco-parse-search-string-e-g 108 76 "[\n ]" 113 teco-parse-search-string-e-q 114 "[A-Za-z0-9]" 115 "[ ]+" 118 "[a-z]" 119 "[A-Z]" 120 "[-]"] 2] teco-parse-search-string-e-q #[nil " Y! HT H!" [i l teco-error "ISS" s c regexp-quote reco:q-reg-text] 3] teco-parse-search-string-e-g #[nil " Y! HT HGU\nU \"\"\"\n֪ !!OTOPfҪ۪ܪڰ." [i l teco-error "ISS" s c teco-qreg-text q len 0 null 1 one-char string-match "-" dash-present "\\^" caret-present "]" outbracket-present nil p "[^-]" teco-parse-search-string-char "^]\\^" "[" "" "---" "^"] 6] teco-parse-search-string-n #[nil " HU HU GU H! OP OP HU OQ ΘϪ Q)" [teco-parse-search-string-1 p 0 91 1 94 4 teco-parse-search-string-char 2 "[" nil "[^" 92 "]" "-" "[^---]"] 5]] 3) (byte-code "M\nIM\nIMMMMMMMMMMM" [teco-type-2-o #[nil " \n W P V  #  T Sc  #   O)  @H ΍*" [teco-get-text-arg teco-exp-flag1 teco-exp-val1 index label nil 0 "" "," p string-match q teco-iteration-stack teco-command-pointer (byte-code "!U Tr U U!b S] UX#M OB T\"7" [0 nil l p c level teco-skipto t 60 62 teco-pop-iter-stack 33 string-match "!" teco-command-string teco-command-pointer label throw] 5)] 5] teco-exec-2 111 teco-type-2-a #[nil " `\n\\eY dW fʼn)!" [teco-exp-flag1 teco-colon-flag teco-exp-val1 char -1 nil teco-error "ILL"] 3] 97 teco-get-command0 #[(trace) "Ïz T ! )" [nil char (byte-code " H" [teco-command-string teco-command-pointer char] 2) ((error (teco-pop-macro-stack) nil)) teco-command-pointer trace teco-trace-type] 3] teco-get-command #[(trace) " T ! )" [nil (aref teco-command-string teco-command-pointer) ((error (byte-code " ª!" [teco-error teco-macro-stack "UTM" "UTC"] 2))) char teco-command-pointer trace teco-trace-type] 3] teco-peek-command #[(arg) "" [nil (byte-code " \nHH H=" [teco-mapch-l teco-command-string teco-command-pointer arg] 3) ((error))] 3] teco-get-text-arg #[(&optional term-char default-term-char) " ! \n !\nU \n!P j *" [term-char teco-at-flag teco-get-command teco-trace default-term-char 27 teco-term-char nil teco-at_flag "" c s char-to-string] 4] teco-pop-macro-stack #[nil "@A H H H H H )\"" [teco-macro-stack frame 0 teco-command-string 1 teco-command-pointer 2 teco-exec-flags 3 teco-iteration-stack 4 teco-cond-stack throw teco-exit nil] 3] teco-push-macro-stack #[nil " \n %B" [vector teco-command-string teco-command-pointer teco-exec-flags teco-iteration-stack teco-cond-stack teco-macro-stack] 6] teco-pop-exp-stack #[nil "@A H H H H H H )" [teco-exp-stack frame 0 teco-exp-val1 1 teco-exp-flag1 2 teco-exp-val2 3 teco-exp-flag2 4 teco-exp-exp 5 teco-exp-op] 2] teco-push-exp-stack #[nil " \n &B" [vector teco-exp-val1 teco-exp-flag1 teco-exp-val2 teco-exp-flag2 teco-exp-exp teco-exp-op teco-exp-stack] 7] teco-pop-iter-stack #[(arg) "@\n H HXA HSI H)" [teco-iteration-stack frame arg 1 2 0 teco-command-pointer] 4] teco-push-iter-stack #[(pointer flag count) " \n # B" [vector pointer flag count teco-iteration-stack] 4] teco-find-enditer #[nil " V Us\nUn\nU Ti Sd*" [1 nil c icnt 0 teco-skipto 60 62] 3]] 3) (defvar teco-output-buffer (get-buffer-create "*Teco Output*") "\ The buffer into which Teco output is written.") (byte-code "MMMMMMMMMMM" [teco-out-init #[nil "!\nqdbc`ŋ\n! \" \"*" [get-buffer-create "*Teco Output*" teco-output-buffer 10 teco-output-start ((byte-code " ! " [select-window minibuffer-window erase-buffer] 2)) get-buffer-window w set-window-start set-window-point] 4] teco-output #[(s) " !p  qdbc` q \" q! #)ϋ !b  \" \" !)ԋ," [get-buffer-window teco-output-buffer selected-window sw b w s p set-window-point backward-char 1 search-backward "\n" teco-output-start t ((byte-code " ! " [select-window minibuffer-window erase-buffer] 2)) pop-up-windows pop-to-buffer set-window-start select-window ((byte-code " !db\nc" [select-window minibuffer-window s] 2))] 4] teco-trace-type #[(c) " Uê !" [teco-output c 27 36] 3] teco-error #[(code) " \n\"AĊ q`U)Ǫ !  #\")" [assoc code teco-error-texts text teco-output teco-output-buffer teco-output-start "\n" "" "? " " " beep debug-on-error debug nil throw teco-exit] 6] teco-moveuntil #[(string pointer terminate trace) "ď )" [0 count nil (byte-code " H\nU  H! Hc T Tcć" [string pointer terminate teco-trace teco-trace-type count] 3) ((error (byte-code " ª!" [teco-error teco-macro-stack "UTM" "UTC"] 2)))] 3] teco-get-qspec #[(file-or-search char) " H H Ū\"U! " [teco-mapch-l char logand teco-qspec-valid file-or-search 2 1 0 teco-error "IQN"] 3] teco-set-var #[(var) " \n\nJ!\"\"L\nLȉ\nJɉ" [teco-exp-flag1 teco-exp-flag2 var logior logand lognot teco-exp-val2 teco-exp-val1 nil t] 6] teco-get-value #[(default) " \n= [ " [teco-exp-flag1 teco-exp-val1 teco-exp-op sub default nil start] 2] teco-lines #[(r) "V$`dZ$`Te)`Z" [r 0 search-forward "\n" nil t search-backward 1] 6] teco-line-args #[(arg) " \nB`` !\\B" [teco-exp-flag2 teco-exp-val1 teco-exp-val2 teco-lines teco-exp-flag1 1] 4] teco-skipto #[(&optional arg) "" [teco-skip (byte-code "! H =!\" H \"U^ \"U! \"U U! \" \"U = =! = !!\nUy = \"!Uy \"U !!\nUy" [nil skipc term ta atsw teco-get-command teco-spec-chars 94 logand 31 51 0 32 16 34 throw teco-skip 1 64 t 30 33 arg 2 27] 4)] 2]] 2) (defvar teco-command-keymap (byte-code " \nY \nW\n\\D\n#\nSd *" [make-keymap 127 n map 0 define-key 32 control teco-command-self-insert] 6) "\ Keymap used while reading teco commands.") (byte-code " # # # # #" [define-key teco-command-keymap "" teco-command-ctrl-g " " teco-command-return "" teco-command-ctrl-u "" teco-command-escape "" teco-command-delete] 4) (defvar teco-command-escapes nil "\ Records where ESCs are, since they are represented in the command buffer by $.") (fset 'teco-command #[nil "Í @I At!qdb ) !*" [nil teco-command-escapes teco-command-quit (read-from-minibuffer teco-prompt nil teco-command-keymap) command 27 get-buffer-create "*Teco Output*" teco-output-buffer teco-prompt teco-execute-command] 4 "\ Read and execute a Teco command string." nil]) (fset 'teco-read-command #[nil " \"\" Ar *" [teco-command-quit (read-from-minibuffer teco-prompt nil teco-command-keymap) nil teco-command-escapes command aset car 27] 6 "\ Read a teco command string from the user."]) (byte-code "MMMMMM!" [teco-command-self-insert #[nil "c ?!" [last-command-char pos-visible-in-window-p enlarge-window 1] 2 nil nil] teco-command-ctrl-g #[nil " \"" [beep throw teco-command-quit nil] 3 nil nil] teco-command-return #[nil " " [10 last-command-char teco-command-self-insert] 1 nil nil] teco-command-escape #[nil "= \"`S B " [last-command teco-command-escape throw teco-command-quit buffer-string teco-command-escapes 36 last-command-char teco-command-self-insert] 3 nil nil] teco-command-ctrl-u #[nil "!\n`\n@X\nAtc ! +!h" [kill-line 0 teco-command-escapes 10 pos-visible-in-window-p backward-delete-char 1 c b a shrink-window] 5 nil nil] teco-command-delete #[nil "!\n`\n@U\nAc !!" [backward-delete-char 1 teco-command-escapes 10 pos-visible-in-window-p shrink-window] 3 nil nil] provide teco] 2)