Premiers pas avec Emacs et Ada : Différence entre versions

De Ensiwiki
Aller à : navigation, rechercher
(Un peu d'aide pour le jeu de piste)
(Un peu d'aide pour le jeu de piste : cheat code :-))
Ligne 184 : Ligne 184 :
  
 
Une fois le programme compilé et exécuté, on peut faire un copier-coller « à la Unix » : sélectionner le texte à la souris (c'est tout !), puis clic du milieu pour coller.
 
Une fois le programme compilé et exécuté, on peut faire un copier-coller « à la Unix » : sélectionner le texte à la souris (c'est tout !), puis clic du milieu pour coller.
 +
 +
=== Si ça ne suffit pas ===
 +
 +
Si vous entrez la chaine « moretime » dans le champ qui attend la réponse, la page vous laissera plus de temps (le temps supplémentaire est mémorisé d'une fois sur l'autre).
  
 
[[Catégorie:Emacs]]
 
[[Catégorie:Emacs]]
 
[[Catégorie:Débutant]]
 
[[Catégorie:Débutant]]
 
[[Catégorie:Ada]]
 
[[Catégorie:Ada]]

Version du 24 juillet 2015 à 10:55

Emacs ... un éditeur de texte

Emacs est un éditeur de texte, très puissant, extensible, même s'il n'est pas toujours très intuitif. Il est très puissant, certains disent qu'il peut tout faire sauf le café, ils se trompent.

D'abord, qu'est-ce que ça veut dire, un « Éditeur de texte » ? Vous avez sûrement déjà utilisé un « Traitement de texte », qui permet de taper du texte, de le mettre en forme (gras, italique, taille et choix des polices, …). Un éditeur de texte édite du texte brut : pas de mise en forme, pas de dessins, juste du texte. Une suite de caractères, quoi. Mais en informatique, on trouve du texte brut partout : langage de programmation, fichiers de configuration de beaucoup de logiciels, …

On pourrait essayer d'éditer le texte d'un programme Ada avec un traitement de texte classique, mais on aurait énormément de fonctionnalités inutiles, et par contre, il manquerait énormément de choses.

Ouvrir un fichier

Commencez par télécharger le fichier hello.adb, et sauvegardez-le sur votre compte.

Un moyen simple d'ouvrir ce fichier dans Emacs est de lancer, en ligne de commande :

emacs hello.adb

Un autre moyen, c'est de lancer Emacs, puis dans le menu File, choisir Open File…, et choisir le fichier à ouvrir.

Emacs open.png

Quand on a plusieurs fichiers sur lesquels on veut travailler en même temps, il faut ouvrir chaque fichier depuis une fenêtre Emacs déjà ouverte, sinon, on lance beaucoup de processus Emacs, c'est moins pratique, et ça consomme beaucoup plus de ressources de l'ordinateur.

Créer un fichier

Quand on lance la commande emacs sans argument, une fenêtre s'ouvre, mais elle ne correspond à aucun fichier. Si on veut travailler sur un nouveau fichier, il faut créer ce fichier avant d'entrer son contenu (ce qui permet à Emacs de savoir à quel langage de programmation il doit s'adapter) :

telesun> emacs

Emacs-visit-new-file.png

Une autre solution est de lancer la commande emacs avec le nom du fichier a créer :

telesun> emacs nouveau_fichier.adb

Emacs et l'Ada

Revenons à notre fichier hello.adb. Vous avez maintenant une fenêtre Emacs ouverte, avec le contenu de ce fichier affiché.

Coloration syntaxique

Premier constat : les mots clés (begin, end, …) sont en couleur. Ah, mais on avait pourtant dit qu'il n'y avait pas de mise en forme dans un fichier texte ?!? Et non, il n'y a pas de couleurs dans le fichier, mais Emacs nous l'affiche quand même avec des couleurs. Vérifiez si vous voulez en faisant « less hello.adb » dans un terminal, il n'y a pas de couleur.

Emacs coloring.png

Indentation

Deuxième constat : le code est affreux. C'est indenté n'importe comment. Ne vous avisez pas de rendre un code comme celui-là à vos enseignants !!! Bon, pas de panique, Emacs sait faire l'indentation très bien. Dans le menu « Edit », faites « Select All », puis dans le menu « Ada », sous-menu « Edit », faites « Indent lines in selection ». Et hop, magie ! On peut aussi simplement appuyer sur la touche TAB après avoir sélectionné une portion de code, et Emacs appliquera l'indentation automatique sur cette portion.

Plus simple, pour indenter une ligne, il suffit d'appuyer sur la touche TAB. Au final, on a toujours du code parfaitement indenté, et sans grand effort.

Compilation

Le programme Ada que vous avez sous les yeux est un programme « source », c'est à dire lisible par un humain, mais pas exécutable directement par la machine. Pour l'exécuter, il faut d'abord le compiler.

Essayons d'abord en dehors d'Emacs. Dans un terminal, faites :

telesun> gnatmake hello.adb

Emacs-compilation-term.png

Ah, pas de chance, il y a une erreur de syntaxe dans le fichier. gnatmake vous dit que c'est à la ligne 6. On peut donc ouvrir le fichier, aller à la ligne 6, et corriger l'erreur.

Quand vous travaillerez sur des fichiers plus gros, aller à la N-ième ligne peut être long. Heureusement, Emacs vous fournit une fonction pour vous rendre à une ligne donnée d'un fichier : menu « Edit → Go To → Goto Line... » :

Emacs-goto-line.png

Pour aller plus vite, on peut utiliser le raccourci clavier donné à droite dans le menu, « M-g g » : Appuyez sur la touche Alt (qu'Emacs appèle touche « Meta », d'où le M dans la notation) et sur la touche « g », puis relâchez l'ensemble, puis appuyez sur la touche « g » seule. Emacs demande alors le numéro de ligne en bas de la fenêtre.

Il existe d'autre façons de compiler et corriger les erreurs depuis Emacs, que vous apprendrez plus tard (les plus curieux pourront consulter la page Compiler un programme Ada depuis Emacs par exemple).

Sauver

On ajoute donc le « ; » manquant à la ligne 6. L'erreur de syntaxe est corrigée à l'écran, mais ce n'est pas le fichier hello.adb qu'on a édité, c'est une image en mémoire de ce fichier (ce qu'Emacs appelle un « buffer »). Il nous reste à sauver pour pouvoir recompiler : menu File, Save.

Recompilez le programme comme précédemment, et exécutez-le en ligne de commande :

  telesun> ./hello

Emacs execution.png

Édition basique

On va ajouter la ligne suivante au programme :

Put_Line("L'ENSIMAG, c'est super!");

Placez votre curseur à la fin de la ligne

Put_Line("Bienvenue à l'ENSIMAG!!");

et appuyez sur la touche Entrée. On parlait d'indentation tout à l'heure, justement, Emacs place le curseur à l'endroit où il faut pour que ce soit correctement indenté.

Tapez Put, puis, pour ne pas trop se fatiguer, faites M-/, c'est à dire, appuyez sur la touche Alt, puis sur la touche « / », puis relâchez. Hop, Emacs complète avec les autres mots qui commencent pareil et que vous avez déjà tapés. Là, ça tombe pile : Put_Line, et on peut continuer. Si la complétion n'avait pas été la bonne, on aurait pu refaire M-/ autant de fois que nécessaire pour tomber sur la bonne.

Rechercher une chaine

La recherche de chaine dans Emacs est un peu différente de ce dont vous avez sans doute l'habitude, mais très pratique :

  • C-s (control-s): Emacs n'ouvre pas de nouvelle fenêtre, mais demande la chaine à rechercher dans le « minibuffer » (en bas de la fenêtre)
  • On commence à entrer la chaine, Emacs cherche au fur et à mesure qu'on tape.
  • Pour aller à l'occurence suivante, C-s à nouveau.

Emacs-search.png

Exploration du menu Options

Les fonctionnalités les plus courantes d'Emacs sont disponibles dans le menu. Regardons le menu Options.

Par exemple, sélectionnez Paren Match Highlighting. Cette option active la correspondance visuelle des parenthèses. Essayez de taper, par exemple, « X : Integer := 4 * (3 - (2 + 1)); ». Quand le curseur est sur une parenthèse ouvrante, ou derrière une parenthèse fermante, la parenthèse correspondante se met en couleur.

Emacs paren-match.png

Il y en a d'autres. On peux noter en particulier :

  • « Active region highlighting » (mise en évidence de la sélection quand on sélectionne du texte au clavier, avec Ctrl-espace) et « C-x/C-c/C-v Cut and Paste » (raccourcis claviers usuels sous Windows pour le copier/coller) pour être moins dépaysés si vous avez l'habitude de Windows, voire Mac OS X.
  • Show/Hide → Speedbar, pour naviguer dans vos fichiers et vos fonctions.
  • Options → Customize Emacs → Specific Option → “inhibit-splash-screen” : toggle pour mettre a on, puis State → Save for future sessions : Désactiver l'écran d'accueil.

Notez que les options ne s'appliquent qu'au processus Emacs courant. Pour les sauvegarder pour la prochaine fois, faites Save options dans le même menu.

Le fichier .emacs

Nous allons maintenant aller un peu plus loin dans la configuration d'Emacs. Ouvrez le fichier .emacs.el (il peut s'appeler au choix .emacs ou .emacs.el, c'est comme on veut), à la racine de votre compte (menu File, Open File, ou bien C-x C-f ~/.emacs.el RET, c'est à dire Control-x, puis Control-f, le nom du fichier .emacs.el, puis Entrée).

Le début du fichier est votre configuration, telle qu'elle vous est proposée par l'équipe pédagogique. Nous avons changé le moins de choses possibles pour que vous ne soyez pas dépaysés si vous avez à utiliser Emacs sur d'autres machines, mais n'hésitez pas à jouer avec votre configuration.

À la fin du fichier, vous devriez trouver ce que « Save Options » a fait si vous avez suivi les instructions quelques lignes plus haut.

Raccourcis utiles

La refcard Emacs contient un tas de raccourcis utiles. Elle est disponible ici (C-x veut dire « Ctrl-x », M-y veut dire « Alt-y », C-x h C-M-\ veut dire « Ctrl-x, puis relâcher, puis h, puis relâcher, puis Ctrl-Alt-backslash (donc, sur un clavier azerty, Ctrl-Alt-AltGr-8) » par exemple) emacs23-refcard.pdf.

Avec de l'expérience, vous n'aurez plus besoin de votre souris, le clavier va beaucoup plus vite pour la plupart des tâches : en utilisation courante, on a les deux mains sur le clavier, les raccourcis clavier sont à une fraction de seconde de vos doigts …

Par ailleurs savoir utiliser son éditeur de texte entièrement au clavier est particulièrement utile, quand on se connecte avec ssh : En mode graphique (ssh -X), l'interface est souvent trop lente pour être utilisable, et quand on ne dispose pas de l'option graphique (-X ou -Y), comme avec Putty, on ne dispose plus que des commandes du clavier.

Aller plus loin

Nous n'avons vu que le strict minimum pour commencer avec Emacs, mais apprendre vraiment à se servir de cet éditeur prend des années. Il est vivement conseillé de lire une documentation plus complète, comme l'une proposée dans la page d'accueil. Vous allez passer énormément de temps devant votre éditeur de texte au cours de votre scolarité, vous gagnerez un temps énorme si vous êtes efficaces avec cet outil.

Un peu d'aide pour le jeu de piste

Dans l'étape D3 du jeu de piste, on vous demande de faire rapidement plusieurs corrections sur un fichier pour le compiler. Voici quelques conseils pour aller vite.

Décommenter une portion de code

Pour décommenter une portion de code, on peut utiliser M-x uncomment-region RET, c'est à dire faire Alt-x (dans le jargon Emacs, M veut en général dire Alt), relacher, puis entrer uncomment-region (la complétion marche, vous pouvez écrire juste unc puis appuyer sur la touche tabulation), puis appuyer sur la touche Entrée.

Pour sélectionner tout le texte, on peut utiliser Menu « Edit » -> « Select all », mais le temps presse, on ira beaucoup plus vite au clavier : C-x h (c'est à dire Control-x, relacher, puis 'h').

En résumé : C-x h M-x unc TAB RET (10 touches).

(On aurait aussi pu utiliser les opérations sur les rectangles pour effacer les -- en début de ligne)

Rechercher-remplacer

Pour remplacer toutes les instances d'une chaine par une autre chaine, Emacs permet comme tout bon éditeur de texte de faire un rechercher/remplacer. On peut le trouver dans Menu « Edit » -> « Replace » -> « Replace string », mais là encore, le temps presse et nous irons beaucoup plus vite au clavier : M-% [ RET ( RET (sur un clavier azerty, vous aurez bien sûr besoin de la touche shift pour obtenir le %). Emacs positionne le curseur sur la première occurrence de texte à remplacer, l'utilisateur peut accepter (touche Espace), aller à l'occurrence suivante (touche 'n'), mais ce qui nous intéresse ici, c'est de tout remplacer d'un coup : touche '!'.

Emacs parcourt tout le texte de haut en bas, il faut donc démarrer d'en haut. Pour placer le curseur au début du texte, faites M-<.

En résumé : M-< M-% [ RET ( RET ! M-< ] RET ) RET ! (19 touches sur un clavier azerty, une petite dizaine de secondes)

Compiler rapidement

Si vous compilez dans un terminal, vous devriez avoir une commande comme

gnatmake text_editor

dans l'historique de votre shell. Pour compiler, il suffit donc de faire « flèche haut » (remonter dans l'historique), « Entrée » (2 touches).

On peut faire un tout petit peu mieux en exécutant la commande

gnatmake text_editor && ./text_editor

Si (et seulement si) la commande gnatmake réussit, alors la commande ./text_editor sera exécutée.

En cas d'erreur de compilation, nous avons déjà vu la commande M-g g pour se positionner sur une ligne en particulier.

L'autre option est d'utiliser M-x compile RET gnatmake text_editor RET. Un peu plus compliqué à comprendre, mais vraiment très efficace.

Copier-coller rapide

Une fois le programme compilé et exécuté, on peut faire un copier-coller « à la Unix » : sélectionner le texte à la souris (c'est tout !), puis clic du milieu pour coller.

Si ça ne suffit pas

Si vous entrez la chaine « moretime » dans le champ qui attend la réponse, la page vous laissera plus de temps (le temps supplémentaire est mémorisé d'une fois sur l'autre).