Programmeermodi

C Modus

Als je Emacs gebruikt voor programmeren in de taal C , dan kun je het alle inspringingen automatisch voor je laten verzorgen. Bestanden waarvan de naam eindigt op een ".c" of ".h" worden automatisch geopend in c-mode. Dit betekent dat bepaalde speciale bewerkingsopdrachten, handig voor het schrijven van C-programma's beschikbaar zijn. In C-mode is Tab gekoppeld aan c-indent-command. Dit betekent dat het indrukken van de Tab-toets niet daadwerkelijk een tab-teken invoegt. In plaats daarvan zorgt Emacs dat de regel waarbij je op Tab drukte, deze regel automatisch in laat springen voor de lokatie in het programma. Dit impliceert dat Emacs enigszins bekend is met de C-syntax, wat zo is (alhoewel geheel niet met de semantiek. Het kan niet garanderen dat je programma geen fouten bevat!)

Hiervoor veronderstelt het dat de voorgaande regels correct zijn ingesprongen. Dit betekent dat Emacs de huidige regel onjuist zal inspringen als in de voorgaande regel een haakje, puntkomma, accolade of iets dergelijks ontbreekt. Wanneer je dat ziet gebeuren, weet je dat je in de erboven liggende regel op zoek moet gaan naar een fout in de punctuatie.

Je kunt deze feature gebruiken ter controle van een correcte punctuatie in je programma's. In plaats van het gehele programma door te nemen op zoek naar problemen, start je met Tab vanaf het begin tot het einde het inspringen van de regels, en wanneer er ergens op vreemde wijze wordt ingesprongen, controleer je de regels er direct voor. Met andere woorden: laat Emacs het werk voor je doen!

Scheme modus

Dit is een major modus waarmee je niets kunt, tenzij je een compiler of interpreter voor de programmeertaal Scheme op je systeem hebt. De beschikking over een dergelijke compiler is niet zo gewoon als bijvoorbeeld een C-compiler, maar het wordt steeds gebruikelijker, dus behandel ik dit ook. Veel van wat van toepassing is op de Scheme modus geldt tevens voor de Lisp-modus, als je de voorkeur geeft aan het schrijven in Lisp .

Om het nog wat lastiger te maken, wordt Emacs met twee verschillende Scheme-modi geleverd, omdat men niet kon besluiten hoe ze wilden dat ze zouden werken. Degene die ik ga beschrijven, wordt cmuscheme genoemd, en verderop in de sectie over het aanpassen van Emacs, zal ik bespreken hoe twee verschillende Scheme modi te hebben en hoe ermee om te gaan. Maak je er niet druk om mocht wat ik hier bespreek niet geheel overeenkomen met jouw Emacs. Een aanpasbare editor betekent een onvoorspelbare editor, en daar doe je niets aan!

Met de opdracht M-x run-scheme kun je een interactief Scheme-proces in Emacs draaien. Als gevolg van deze opdracht wordt een buffer met de naam "*scheme*" aangemaakt met de gebruikelijke Scheme-prompt. Achter de prompt kun je de Scheme expressies intikken. Druk vervolgens op Return en Scheme zal ze evalueren en het antwoord tonen. Dus voor een wisselwerking met het Scheme-proces, typ je al je functiedefinities en toepassingen in achter de prompt. De kans bestaat dat je reeds eerder geschreven Scheme broncode ergens in een bestand hebt, en het is makkelijker je werk in dat bestand weg te schrijven, om dan de definities van het Scheme-proces als het nodig is in de buffer te laden.

Als de naam van dat bronbestand eindigt op ".ss" of ".scm", dan zal het automatisch in de Scheme modus worden geladen, wanneer je het opzoekt met C-x C-f. Wordt het om wat voor reden dan ook niet in Scheme-modus geladen, dan kun je dit met de hand doen met de opdracht M-x scheme-mode. Deze scheme-mode is niet hetzelfde als de buffer die het Scheme-proces draait; in plaats daarvan is de betekenis van een broncode buffer in scheme-mode dat er speciale opdrachten zijn voor het communiceren met de buffer van het proces.

Plaats je jezelf binnen een functiedefinitie in de Scheme broncodebuffer en typt C-c C-e, dan zal die definitie naar de procesbuffer worden "gestuurd"; precies zoals je het zelf zou hebben ingevoerd. C-c M-e verstuurt de definitie en brengt je dan terug naar de procesbuffer voor interactief werk. C-c C-l laadt een bestand met Scheme-code (dit werkt zowel vanuit de procesbuffer als vanuit de broncodebuffer). En net als bij andere programmeertaalmodi, zal het indrukken van de Tab-toets ergens op een regel code die regel correct laten inspringen.

Met M-p en M-n kun je achter de prompt in de procesbuffer, door eerdere opdrachten bladeren (ook bekend als de invoerhistory). Dus als je fouten aan het opsporen bent in de functie `rotate', en er reeds argumenten in de procesbuffer op hebt toegepast, zoals in:


> (rotate '(a b c d e))

dan kun je die opdracht later terughalen met M-p. Het is niet nodig lange expressies achter de Scheme prompt opnieuw in te tikken. Leer de gewoonte aan gebruik te maken van de invoerhistorie waarmee je een hoop werk bespaart.

Emacs is bekend met aardig wat programmeertalen: C, C++, Lisp, en Scheme om er maar een paar te noemen. Over het algemeen weet het intiutief hoe in te springen.

Mailmodus

In Emacs kun je ook je mail bewerken en verzenden. Typ C-x m voor het verkrijgen van een mailbuffer. Je moet de velden To: en Subject: invullen en dan C-n toepassen om onder de scheidingslijn te komen in het berichtenveld van het bericht (wat leeg is wanneer je het voor het eerst start). De scheidingslijn mag je niet wijzigen of verwijderen want dan zal Emacs je mail niet kunnen versturen. Het gebruikt deze lijn om onderscheid te kunnen maken tussen de headers van de mail, die aangeven waar de mail naar toe te sturen, en de feitelijke inhoud van het bericht.

Onder de scheidingslijn kun je typen wat je wilt. Zodra je klaar bent voor het verzenden van het bericht, typ je C-c C-c. Emacs zal het dan versturen en de mailbuffer laten verdwijnen.