diff --git a/Tutoriel.org b/Tutoriel.org index ce7a36e082a52bce55f0f16ae21f70db0ea52e34..b7c93666688260fc6f663396632c24199a223b42 100644 --- a/Tutoriel.org +++ b/Tutoriel.org @@ -708,13 +708,11 @@ la région, sinon, le curseur est positionné entre les accolades. Enfin, si on préfixe les raccourcis précédents par ~C-u~ alors, le style est remplacé par le style demandé. Par exemple, si on avait le texte suivant -#+header: :exports code -#+BEGIN_SRC latex +#+BEGIN_SRC latex :exports code \emph{Un texte} #+END_SRC si on utilise la commande ~C-u C-c C-f C-b~, il sera transformé en -#+header: :exports code -#+BEGIN_SRC latex +#+BEGIN_SRC latex :exports code \textbf{Un texte} #+END_SRC @@ -888,6 +886,79 @@ conseillé d'utiliser les raccourcis de navigation classiques : | ~C-x left~ | Retourne au /buffer/ précédent | | ~C-x right~ | Retourne au /buffer/ suivant | +*** YASnippet +Il n'est pas envisageable d'écrire un tutoriel Emacs sans évoquer les +~snippets~. Commençons donc par rappeler de quoi il s'agit. Les +~snippets~ (littéralement *fragments* en français) sont des patrons +(/template/) de code qui évitent de taper toujours et encore des +motifs de code qui se répètent. Emacs offre depuis très longtemps des +~snippets~ qui permettent souvent de n'écrire que les zones du code +faisant sens. ~YASnippet~ s'est imposé comme la version la plus +aboutie et est maintenant la plus utilisée. + +Il faut bien intégrer le fait que les ~snippets~ ne sont pas des +morceaux de code simplement insérés mais de véritables modèles. Quand +on les utilise, Emacs invite l'utilisateur à renseigner certains +champs (en ligne) ce qui permet d'obtenir directement le code +correspondant au patron sans autre modification. + +Notons également que ~YASnippet~ est livré avec une collection +impressionnante de modèles. Ces patrons sont accessibles selon le +contexte d'édition : les patrons utiles au ~Python~, à la rédaction +LaTeX ou au ~C++~, par exemple ne sont proposés que dans leur mode. Au +vu de leur nombre, il serait impensable d'en faire une quelconque +liste ici, mais on peut en avoir la liste dans le menu ~YASnippet~ ou +en tapant la commande ~M-x yas-describe-tables~ qui ouvre un buffer +contenant tous les ~snippets~ disponibles. + +Un autre avantage de ~YASnippet~ est qu'il est très facile d'ajouter +de nouveaux modèles, mais nous ne décrivons pas la procédure ici (voir +[[http://joaotavora.github.io/yasnippet]] pour les détails). + +| Raccourci | Description | +|-----------+---------------------| +| ~C-RET~ | Développe le modèle | +Dans cette configuration, on a désactivé le raccourci usuel +~TAB~+, +qui pouvait avoir des effets inattendus et désagréables, au profit de +~C RET~. En effet, l'effet principal de ~TAB~ est l'indentation du +code, mais si le /mini-mode/ de ~YASnippet~ interceptait un +développement de modèle possible, il prenait la main et remplaçait +l'indentation demandée par une expansion de modèle. Le nouveau +raccourci reste simple et n'interfère plus avec les fonctions +usuelles. + +On termine cette courte introduction en donnant un exemple +d'utilisation en ~C++~. Si on écrit ~cls~ et si on utilise +immédiatement le raccourci ~C-RET~, le modèle (simple) de *classe* est +utilisé. On obtient alors +#+BEGIN_SRC c++ :exports code + class Name + { + public: + Name(); + virtual ~Name(); + }; +#+END_SRC +Le curseur est alors positionné sur le premier ~Name~ qui est en fait +éditable. On est toujours en train d'appliquer le modèle et il suffit +maintenant (sans autre action) d'entrer le nom de la classe. Par +exemple, si on écrit ~Tableau~ (une seule fois), on obtient +#+BEGIN_SRC c++ :exports code + class Tableau + { + public: + Tableau(); + virtual ~Tableau(); + }; +#+END_SRC +On n'a modifié qu'un champ pour obtenir ce résultat. ~TAB~ permet de +passer au champ suivant s'il y en a d'autres et ~S-TAB~ (ou ~backtab~) +permet de revenir à l'édition d'un champ précédent. Pour obtenir ce +résultat, on a simplement pressé la suite de touches suivantes. +#+BEGIN_EXAMPLE + c l s C-RET T a b l e a u +#+END_EXAMPLE +Cet exemple simple illustre bien l'efficacité de l'approche. * Pour aller plus loin