TECO-kurs av Pell Pell Pell HŠr Šr fjŠrde delen av den Šlskade TECO-kursen! Vad dŒ? €r det inga kvar som har fšljt serien Šnda frŒn bšrjan i CARB maj -87??? Leta pŒ lopp- marknader, antikvariat eller liknande sŒ kanske ni hittar tidigare nummer. I Lysators lokal finns det ocksŒ nŒgra referensnummer som ni kan lŒna och kopiera. RŠttelse Som vanligt fanns det (minst) ett fel i fšrra delen. I tredje exemplet hšgst upp pŒ sidan 9 ska det stŒ: . A A I C-Ta~ Observera alltsŒ punkten fšre! Inledning Till att bšrja med ska jag ta upp en specialavdelning av TECO, nŠmligen FS-flaggor- na. DŠrefter skriver jag lite om hur man konf~gurerar sin Emacsmiljš, genom att anvŠnda bibliotek, Et~ACS . INIT, mm. Vi fŒr se om jag fŒr plats med nagot mer roligt... Ii'S~ ggor FS-flaggor finns i alla storlekar, modeller och utfšranden! En del kan anropas som funktioner, en del kan nŠrmast ses som variabler och mŒnga andra avarter existerar. SŒ fon nŒgon har kommit pŒ nŒgot roligt som kanske inte riktigt passar som ett TECO-kom- mando verkar vederbšrande ha skapat en FS-flagga fšr ŠndamŒlet i stŠllet. Gemensamt fšr FS-flaggorna Šr att de har namn som bšrjar med FS och avslutas med ett escape. Namnen fŒr fšrkortas sŒ langt att de fortfarande Šr unika och endast de sex fšrsta (icke-blanka) tecknen Šr signifikanta. Exempel Šr t.ex.: FS H POSITIONS Retumerar cursoms horisontella position pŒ raden. Det Šr ocksŒ ganska vanligt att man "pushar" FS-flaggor pŒ stacken, om man vill sŠt- ta temporŠra vŠrden pŒ dem, som fšrsvinner nŠr den aktuella funktionen returnerar. DŒ gšr man F [ i stŠllet fšr FS. F[ D FILES !* Spara default filnamn pa stacken *! ER HEJ.HOPP$ @Y !* Las in filen HEJ.HOPP *! F] D FILE$ !* terstŠll default filnamn *! En del FS-flaggor har kopplingar till Emacs-variabler. Man kan knyta TECO-kod till en vari3bel, som exekveras nŠr variabeln Šndras. Det har man anvŠnt till att automatiskt satta motsvarande FS-flagga nŠr variabeln Šndras. Det gŠller bl.a. fšljande variabler, med motsvar;lnde FS-flagga: Auto Save Interval FS AR MDLY$ Bottom Display Margin FS %BOTTOM$ Case Search FS BOTHCASE$ Cursor Centering Point FS %CENTER$ Display Mode Line Inverse FS INVMOD$ Display Overprinting FS AH PRINT$ och FS AM PRINT$ Echo Area Height FS ECHO LINES$ End of Buffer Display Margin FS %END$ Error Messages in Echo Area FS ECHO ERRORS$ Fill Column FS ADLINE$ Overwrite Mode FS AR REPLACE$ SAIL Character Mode FS sAIL$ System Output Holding FS TT PAGE$ Top Display Margin FS %ToP$ S;itter man nŒgon av dessa vanabler sŠtts alltsŒ motsvarande FS-flagga, men inte tvŠrtom. Vill man Šndra nŒgon av dessa FS-flaggor bšr man alltsŒ sŠtta motsvarande variabel i stŠllet! ' Jag ska bara ge nŒgra fŒ exempel pŒ anvŠndning. Det Šr nog sŒ att man mŒste titta igenom alla FS-flaggorna fšr att se vad det finns fšr roligt att gšra. Variationen Šr helt en- kelt fšr stor fšr att jag ska kunna ge nŒgon fomm av sammanfattning. Q-vektorer Ett Q-register kan endast lagra ett objekt. Ibland vill man kunna skapa en Q-vektor av lŠmplig storlek fšr att kunna lagra fler objekt. Som ni kommer ihŒg Šr varje tangent ett Q-register, men prefixtangenter som C-X Šr inget Q-register utan i stŠllet en Q-vektor! Varje element i Q-vektorn indexeras med tangenten som trycks efter C-X. Man skapar en Q-vektor med ett anrop till FS-flaggan FS Q VECTOR$. Argumentet Šr storlel;en pŒ vektom, i 7-bitars tecken. DŠrfšr anger man normalt storleken som en mullipel av 5, fšr att fŒ hela ord. 50*5 FS Q VECTOR$ Uv !* Skapa Q-vektor i Qv, 50 ord *! 17 U:v(0) !* Fšrsta elementet tilldelas 17 *! 12 U:v(49) !* Sista tilldelas 12 *! Man kan ocksŒ skapa ett eget prefix-tecken, typ C-X. Det Šr dock lite mer komplicer- at, fšr man mŒste sŠga Œt Emacs att Q-vektom i sjŠlva verket Šr en tangentprefixvektor! Thta t.cx. i VT100.EMACS hur man har gjort fšr att definiera prcfixtecknet M-O,som an- v;ulds vid h~kll;lpplling frŒn det numeriska tangentbordet. Det finns ocksŒ ett enklare sŠtt, genon1 att anvŠlld;l funktionen Make Prefix Character (kŠllkod i SUPPRT.EMACS~ Fšr exempel, se t.ex. INTER.EMACS, dŠr de definierar C-T som ett prefix m.h.a. denna filllktion. SŒhŠrlŠggermanenfunktionpŒc-x DiEMACS.VARS: .X (AA~) M.m Dired$ !* AA fŒs med C-Q C-A ~ ! TyvŠrr gŒr det bara fšr C-x eftersom dess dispatch-vektor alltid ligger i Q-registret " . x". Gšr man ett eget prefix-tecken fŒr man hantera det sjŠlv. Titta t.ex. i Emacs INFO- trŠd, meny "Init". Skapa burfert Med flaggan FS B CONS$ (eller FS B CREATE$) skapar man en ny buffert. Det Šr nog emellertid vanligast att man bara vill ha en temporŠr buffert att gšra saker i och dŒr- fšr finns F[ B BINDS. Den skapar en temporŠr buffert och sparar samtidigt den gamla bufferten pŒ stacken. NŠr F] B BINDS utfšrs dšdas den temporŠra bufferten oc-h den gamla poppas frŒn stacken. Det kan vara bra att skapa en temporŠr buffert om man t.ex. vill Šndra pŒ information i ett Q-register eller gšra andra omfattande redigeringar. F[ B BINDS HK !* Ny buffert, rensa den *! Ga -lD HXa !* HŠmta Qa, radera tecken, skriv tillbaka *! F] B BINDS !* terstŠll till den gamla bufferten *! INIT-filer Man kan gšra ganska mycket i den vanliga EMACS.VARS-filen och den rŠcker normalt fšr de flesta ŠndamŒl. Men vill man gšra nŒgot mer avancerat vid start sŒ kan man skapa en EMACS.INIT-fil. Allt som stŒr i den filen exekveras direkt som TECO-kod, sŒ man kan gšra precis allt man vill, t.ex. IŠsa inmatning frŒn anvŠndare. Det Šr bara en sak man mŒste tŠnka pŒ och det Šr att EMACS.INIT exekveras i stŠl- let fšr den norrnala init-filen! Fšr sŠkerhets skull bšr man alltid exekvera den normala init-filen, fšr det Šr den som t.ex. behandlar EMACSAvARS. LŠgg dessa tvŒ rader sist i EMACS.INIT sŒ fixar det sig: EREMACS.INITS @Y !* LŠs in normala init-filen. *~ :M(HFX*) !* Exekvera den och radera samtidigt.*! Bibliotek Bibliotek (libranes) Šr ett pntktiskt sŠtt att klumpa samman mŒnga smŒ TECO-snul- tar till en enhet. De flesta av er vet nog att man laddar bibliotek (dvs hela samlingen av TECO-kod pŒ en gŒng) med Load Library. Om man t.ex. gšr "M-X Load Library$PICTURE" sŒ definieras alla funktioner SOIll finns i det biblioteket och man k~n sen exekvera godtycklig funktion, t.ex. "M-X Edit Picture". K;illkoden till bibliotek har suffixet " . EMACS". Fšr att kunna ladda in det maste man tšrst komprimera det till en fil med suffix " .: EJ". Det gšr man med hj ilp av antingen bib- lioteket PURIFY eller IVORY. Det vanligaste Šr PURIFY, Šven om IVORY Šr nyare och kallske b ittre. Jag t inker framfšrallt beskriva PURIFY. (Anledningen till det konstiga suffixet " .: EJ" kanske ni kan lista ut sjŠlva.) KŠllkod till bibliotek innehŒller en TECO-funktion per "sida", dvs funktioner avgrŠn- sas alltid med "CRLF A L CRLF". Varje funktion har ett namn, dokumentation samt kod. Funklionsnamnet Funktionsdefinitionen bšrjar med ett " ! " + funktionsnamnet + ": ! ". Det Šr mycket viktigt att man inte har ": ! " nŒgon annanstans i filen! Det finns nŒgra namnkonventioner: ¥ Funktioner som Šr att betrakta som lokala till biblioteket (subrutiner) bšr ha namn som bšrjar med " & " . ¥ Funktioner som Šr tŠnkta att lŠggas pa nŒgon tangent bšr bšrja med ~AR~ (inte kontrolltecknet, utan de tvŒ tecknen A fšljt av R). Anledningen till dessa konventioner Šr att den automatiska igenkŠnningen av funk- tioner vid M-X ska fungera bra. Funktionsdokumentationen Efter funktionsnamnet ska det vara ett mellanslag, sedan ett till " ! " och dŠrefter ett (eller tvŒ) tecken som beskriver funktionsklassen. Det kan vara "C" om funktionen Šr t;inkt att anropas med M-X, ett "S" om det Šr en subrutin eller I~AR~ om den ska lŠggas pŒ en tangent. Funktionsklassen betyder inget fšr anvŠndningen, men anvŠnds bl.a. av vissa dokumentationsfullktioner fšr att sortera funktioner beroende pŒ funktionsklass. Resten av raden Šr en kort dokumentation. Antingen har man bara den och dŒ avslu- tar man raden med ett " ! ". Annars kan man skriva fler rader dokumentation, fram till fšrs- ta "!". Funktionsderlnitionen Nu Šr det bar,l att knacka ner TECO sŒ gott det gŒr. Saker man mŒste tŠnka pŒ Šr fšl- jande: ¥ PŒ grund av att kŠllkoden komprimeras kommer bl.a. alla mellanslag och tabbar att fšrsvinna (om man hlte sŠtter AQ framfšr). DŠrfšr konverteras alla "_" till mellan- slag, sŒ att man ska kunna sŠtta dit mellanslag pŒ ett enkelt sŠtt. ¥ " ! ~ " bšrjar en kommentar, som avslutas med " ! ". ¥ Koden kommer att fŒ argument och liknande precis som ett vanligt makro. o riu~ Varje bibliotek ska ha en "filnktion" kallad " FILENAME ". Defillitionen av den filnk- tionell lir det man ska skriva 50111 ,urgument till Load Library. Biblioteket PICTURE har allts~ en filllkAtioll i sig som heter " FILENAME-" och vars dethlitioll Šr "PICTURE". Exempel ! FILENAME: ! !Pells specialbibliotek. ! PELL AL !Radera Tecken Till Hšger: ! !C Raderar t€n Œt hoger, default ett. ! FAX FAY & 1 "N Ay D' ! * Postkomma-argument? Ja => radera * ! "# 1 D' ! * Nej, ta bara ett tecken. * ! AL !Min Return: ! !C Gšr bara Down Real Line. ! M(M.m AR Down_Real_Line$) ! * OBSERVERA "_" * ! AL Som ni kommer ihŒg bdr man retumera det omrŒde av bufferten man har pŒverkat. SŠtter man in tio tecken returnerar man "., .+10" (eller kanske ".-10, .", beroende pŒ var point befinner sig). Raderar man tecken behšver man bara retumera " ., . ". Komprimering Funktionema fdr att komprimera kŠllkoden till ett laddbart bibliotek finns i biblioteket PURIFY, som laddas automatiskt nŠr man editerar nŠgon fil med suffix " . EMACS". Man anvŠnder Generate Library och med det hŠr exemplet skulle anropet bli: M-X Generate Library$PELLSPELL$$ Sedan kan man gšra "M-X Load Library$PELL" och prova funktionerna. Fšr enkelhets skull kan man lŠgga en Local Mode-lista sist i programfilen. Den kan t.ex. se ut sŒ hŠr: ! * Following should be kept as long comments: * Local Modes: * Compile Command:M(M.mGenerate Library$)PELL$PELLS$ * Comment Column: 36 * Comment END: * ! * END: * *! Den gšr sŒ att man kan anvŠnda "M-X Compile" fšr att "kompilera" filen. Dessutom sŠtter den kommentarkolumn till 36 och kommentarslut till " * ! ". Automllisk iniliering Om det finns en funktion i hiblioteket som heter "~ Set~p PELL Library" (dŠr L" fšrstŒs ska vara namnet pŒ biblioteket) sŒ kommer den att kšras automatiskt n~r ¥ bit~lio~eket PELL l tddas. I den funktionen kan man t.ex. IŠgga ommappning av tangenter eller tnnan smšrja. Lastips I';- O: CONV . INFO konventioner gŠllande TECO-programmering i Emacs. Slut! Vi t~r se om det blir en femte del. Efter lite pŒtryckningar (att tvinga mig sitta framfšr en PC i ft~m minuter, t.ex.) k tnske jag kan tŠnka om...