diff --git a/Tutoriel.org b/Tutoriel.org index a07d05c82903259afb632f0d4f7120e78e3f1660..2c524c0be90d2a743945c8ce0c7824e8296da914 100644 --- a/Tutoriel.org +++ b/Tutoriel.org @@ -962,32 +962,137 @@ Cet exemple simple illustre bien l'efficacité de l'approche. ** Org-mode Une fois encore, il est inenvisageable de faire un tour complet de ce -mode dans un tel document. On va donc seulement tracer les grandes -lignes certaines des fonctionnalités d'~Org-mode~. Pour vraiment en +mode dans un tel document. On va donc seulement en tracer les grandes +lignes et décrire certaines de ses fonctionnalités. Pour vraiment en appréhender les possibilités, il faut consulter les multiples ressources disponibles sur le net, et en particulier des vidéos de -démonstration. +démonstrations. Initialement, ~Org-mode~ est un outil conçu pour la gestion, le suivi et -l'archivage de tâches personnelles. La gestion d'agenda n'étant -finalement devenu qu'un aspect mineur. En fait, son intégration à -Emacs est extrêmement poussée et tire profit de l'interopérabilité des -différents modes d'Emacs. - -Ce document (et ce n'est qu'un exemple très simple) est rédigé en -~org-mode~, de même qu'en particulier le fichier de configuration -[[Configuration.org]] (ce qui est devenu un standard de nos jours). -La raison pour laquelle on préfère écrire une configuration en -~Org-mode~ plutôt que directement en ~Elisp~ est qu'il donne une véritable -à la fois une véritable structure au document. - -En fait, l'un des avantages d'~Org-mode~ est qu'il permet d'insérer des -blocs de code (dans de nombreux langages) qu'il est possible d'évaluer -soit localement, soit globalement. Dans le cas de l'~ELisp~, -l'évaluation de ces blocs n'est autre que la configuration. Mais il -est aussi possible de récupérer le résultat de l'exécution et de -l'insérer automatiquement au document. De ce fait, le document est -extrêmement dynamique. +l'archivage de tâches personnelles. La gestion d'agenda n'en est plus +aujourd'hui qu'un aspect mineur. Son intégration à Emacs est +extrêmement poussée[fn:1] et tire profit de l'interopérabilité des +différents modes d'Emacs. Il bénéficie donc d'une extensibilité assez +spectaculaire. En fait, ~Org-mode~ définit en fait un véritable langage +de (méta-)programmation et utilise son propre format de fichier ~.org~. + +Même si un document ~Org-mode~ est *lisible* avec n'importe quel éditeur +de texte, de nombreux rendus sont possibles : ~Markdown~, texte (ASCII +ou UTF-8), ~PDF~ (générés en LaTeX), ~HTML~, ~OpenDocument~,... On peut +publier des /blogs/, générer des présentations (~Beamer~ ou autres). Et +~Org-mode~ permet beaucoup d'autres choses encore. + +L'une des forces d'~Org-mode~ est la possibilité d'insérer des blocs de +code (dans de nombreux langages) directement dans le +document. ~Org-mode~ peut alors les évaluer en les compilant ou en les +exécutant par exemple. Dans un même document, on peut par exemple +utiliser des programmes ~C++~ ou ~Python~, des script ~shell~, des commandes +LaTeX, des instructions ~gnuplot~, tracer des graphes ou des diagrammes +avec ~dot~,... ~Org-mode~ permet en plus de faire communiquer ces +différents programmes. Dans un document ~Org-mode~, il est possible +d'afficher des images en ligne. On peut aussi créer des tableaux +dynamiques (provenant d'évaluations de blocs de code par exemple) ou +statiques. On peut écrire des formules mathématiques en ligne, c'est à +dire sans définir des zones de code source, en utilisant directement +des formules LaTeX (~$(a+b)^2 = a^2+2ab+b^2$~ est interprété directement +$(a+b)^2 = a^2+2ab+b^2$),... + +Ce document (et ce n'est qu'un exemple *très* simple) est rédigé en +~Org-mode.~ C'est aussi le cas du fichier de configuration +[[file:Configuration.org][(Configuration.org]]). Cette pratique est devenue un standard de nos +jours. On préfère écrire une configuration en ~Org-mode~ plutôt que +directement en ~Elisp~. Cela donne une véritable structure au document +et donc, en améliore beaucoup la lisibilité. Au delà, on peut même +exporter le contenu (en ~HTML~ par exemple) pour obtenir une véritable +documentation de la configuration. Notons aussi que ~Gitlab~ et ~Github~ +affichent raisonnablement le contenu des fichiers ~.org~ (sans toute +fois interpréter les zones de code ou les équations LaTeX). C'est +commode pour partager une configuration. + +Dans le cas d'un fichier de configuration, ces blocs sont +principalement des morceaux de codes ~ELisp~ dont l'évaluation modifie +le comportement d'Emacs. Mais, en général, il est aussi possible de +récupérer le résultat de l'exécution et de l'insérer automatiquement +dans le document. De ce fait, le document est extrêmement +dynamique. La rédaction de documentations ou de tutoriels par exemple +est donc grandement facilité, puisqu'Emacs vérifie par l'évaluation du +document ~Org-mode~ que tous les morceaux de code sont valides et met à +jour les résultats. + +Par certains aspects, ~Org-mode~ est similaire à certains langages de +description de contenus comme par exemple ~Markdown~, puisqu'il est très +simple de définir des hiérarchies de sections, des listes, des +hyperliens, de créer des tableaux,... + +Par exemple pour créer une section de niveau $n$, on débute une ligne +avec $n$ étoiles ($\star$) consécutives suivies d'un espace et du +titre. La création d'une liste est tout aussi simple, il suffit par +exemple de commencer les lignes par un tiret ($-$), l'indentation +définit le niveau de l'item. + +On termine cette très brève introduction par un rappel de quelques +raccourcis basiques. + +Les raccourcis suivants fonctionnent pour les sections et les +listes. Les mêmes raccourcis ont des effets voisins dans les tableaux, +voir plus bas. +| Raccourci | Description | +|-------------------+---------------------------------------------------------------| +| ~M-up~ | Échange l'élément avec l'élément précédent (de même niveau) | +| ~M-down~ | Échange l'élément avec l'élément suivant (de même niveau ) | +| ~M-left~ | Diminue le niveau de l'élément (plus haut dans la hiérarchie) | +| ~M-right~ | Augmente le niveau de l'élément (plus bas dans la hiérarchie) | +| ~TAB~ | Plie ou déplie le contenu | +| ~S-left~ ou ~S-right~ | Modifie le statut de l'élément (~TODO~, ~DONE~,...) | +| ~M-RET~ | Crée un élément de même niveau que l'élément courant | +Dans le cas des listes, ~S-left~ et ~S-right~ modifient le type d'élément +de la liste (et des éléments de même niveau), on peut ainsi obtenir +une numérotation par exemple. + +Enfin, si on utilise ~M-RET~ au milieu d'un élément, il est décomposé en +deux éléments, le contenu reste associé à la seconde partie de l'élément. + +Insistons sur le fait qu'en cas de déplacement d'un élément, son +contenu (les sous items en particulier) lui restent attachés. Dans le +cas des listes numérotées, la numérotation est maintenue à jour par +toutes les opérations. + +Dans le cas des tableaux, comme on l'a dit, ces raccourcis sont +réutilisés avec des effets très voisins +| Raccourci | Description | +|------------------+--------------------------------------------------------------------------------| +| ~M-up~ | Échange la ligne avec la ligne précédente | +| ~M-down~ | Échange la ligne avec la ligne suivante | +| ~M-left~ | Échange la colonne avec la colonne précédente | +| ~M-right~ | Échange la colonne avec la colonne suivante | +| ~TAB~ | Positionne le curseur sur la cellule suivante (ajoute une ligne si nécessaire) | +| ~S-TAB~ ou ~backtab~ | Positionne le curseur sur la cellule précédente | +En fin de ligne (après le dernier ~|~), si on presse ~TAB~, alors le +tableau est réaligné. Il existe de nombreux autres raccourcis pour les +tableaux, (suppression/ajout de lignes ou de colonnes) mais comme +certains sont dangereux nous ne les rappelons pas ici. Ces raccourcis +sont rappelés dans le menu ~Tbl~. + +Nous terminons cette description des tableaux en donnant *un* moyen de +les créer. Il est extrêmement simple. Il suffit de commencer une ligne +par un ~|~ puis de séparer les colonnes par d'autres ~|~. Pour ajouter une +ligne de séparation, il suffit de commencer une ligne par la séquence +~|-~ puis de presser ~TAB~ n'importe où dans la zone du tableau. + +Finalement, on donne quelques raccourcis plus généraux pour +~Org-mode~. On ne décris pas ici comment générer des zones de code, ni +autres comportements dynamiques. Les fonctionnalités basiques sont +accessibles dans le menu, mais il est préférable pour cela de +consulter de vraies documentations. +| Raccourci | Description | +|-------------+-----------------------------------------------------| +| ~C-c C-c~ | Évalue une zone de code et met à jour le résultat | +| ~C-c C-v C-b~ | Évalue tout le document et met à jour les résultats | +| ~C-c C-e~ | Lance le menu ~Hydra~ pour déclencher les exports | +| ~C-c '~ | Édite une zone de code dans le mode approprié | +Ce dernier raccourci : ~C-c '~ est *extrêmement* important pour la +modification des blocs de codes. Il faut éviter de modifier +directement ces éléments avec le mode ~Org~. ** Pliage et dépliage avec ~narrow-or-widen-dwim~ Emacs propose des fonctions de (dé)-pliage de zones. La dénomination @@ -1021,6 +1126,12 @@ c'est cette région qui sera considérée, mais sinon, c'est le paragraphe, la section ou la fonction courante (dans un mode de programmation) même qui occupera tout le /buffer/. +* Footnotes + +[fn:1] ~Org-mode~ n'existe que dans Emacs. Il n'y a pas d'application +autonome qui offre les mêmes fonctionnalités. Cela n'aurait pas +vraiment de sens. + # Local Variables: # ispell-local-dictionary: "francais" # End: