Skip to content
Snippets Groups Projects
Commit bd1b0f5d authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Fin (?) de la description Org-mode

parent 293c8d44
Branches
No related tags found
No related merge requests found
...@@ -962,32 +962,137 @@ Cet exemple simple illustre bien l'efficacité de l'approche. ...@@ -962,32 +962,137 @@ Cet exemple simple illustre bien l'efficacité de l'approche.
** Org-mode ** Org-mode
Une fois encore, il est inenvisageable de faire un tour complet de ce 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 mode dans un tel document. On va donc seulement en tracer les grandes
lignes certaines des fonctionnalités d'~Org-mode~. Pour vraiment en lignes et décrire certaines de ses fonctionnalités. Pour vraiment en
appréhender les possibilités, il faut consulter les multiples appréhender les possibilités, il faut consulter les multiples
ressources disponibles sur le net, et en particulier des vidéos de 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 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 l'archivage de tâches personnelles. La gestion d'agenda n'en est plus
finalement devenu qu'un aspect mineur. En fait, son intégration à aujourd'hui qu'un aspect mineur. Son intégration à Emacs est
Emacs est extrêmement poussée et tire profit de l'interopérabilité des extrêmement poussée[fn:1] et tire profit de l'interopérabilité des
différents modes d'Emacs. 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
Ce document (et ce n'est qu'un exemple très simple) est rédigé en de (méta-)programmation et utilise son propre format de fichier ~.org~.
~org-mode~, de même qu'en particulier le fichier de configuration
[[Configuration.org]] (ce qui est devenu un standard de nos jours). Même si un document ~Org-mode~ est *lisible* avec n'importe quel éditeur
La raison pour laquelle on préfère écrire une configuration en de texte, de nombreux rendus sont possibles : ~Markdown~, texte (ASCII
~Org-mode~ plutôt que directement en ~Elisp~ est qu'il donne une véritable ou UTF-8), ~PDF~ (générés en LaTeX), ~HTML~, ~OpenDocument~,... On peut
à la fois une véritable structure au document. publier des /blogs/, générer des présentations (~Beamer~ ou autres). Et
~Org-mode~ permet beaucoup d'autres choses encore.
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 L'une des forces d'~Org-mode~ est la possibilité d'insérer des blocs de
soit localement, soit globalement. Dans le cas de l'~ELisp~, code (dans de nombreux langages) directement dans le
l'évaluation de ces blocs n'est autre que la configuration. Mais il document. ~Org-mode~ peut alors les évaluer en les compilant ou en les
est aussi possible de récupérer le résultat de l'exécution et de exécutant par exemple. Dans un même document, on peut par exemple
l'insérer automatiquement au document. De ce fait, le document est utiliser des programmes ~C++~ ou ~Python~, des script ~shell~, des commandes
extrêmement dynamique. 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~ ** Pliage et dépliage avec ~narrow-or-widen-dwim~
Emacs propose des fonctions de (dé)-pliage de zones. La dénomination 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 ...@@ -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 paragraphe, la section ou la fonction courante (dans un mode de
programmation) même qui occupera tout le /buffer/. 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: # Local Variables:
# ispell-local-dictionary: "francais" # ispell-local-dictionary: "francais"
# End: # End:
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment