Olivier Web Garden

Tout faire avec linux...

Accueil > Articles > Linux > Emacs > Dompter Emacs #3 Les tableaux

Dompter Emacs #3 Les tableaux

samedi 2 mars 2019, par Olivier K.

Après la hiérarchisation d’un document, passons aujourd’hui à l’ajout de tableaux. Depuis la version 22 d’Emacs, le mode table est intégré par défaut dans l’application.

Créer un tableau

À partir de données : table-capture

Chaque champ est séparé par 2 caractères espaces, chaque ligne est
définie par un retour à la ligne :

Pays  Superficie (km²) % du total
Russie  17 125 191  11,5 %
Canada  9 984 670  6,7 %
États-Unis  9 629 091  6,7 %
Chine  9 596 961  6,4 %

Sélectionner les lignes : soit à la souris, soit en plaçant le curseur au début du futur tableau, marquer à l’aide de la commande C-SPC (CTRL+barre espace) et sélectionner les lignes avec un C-n

Quand le texte est sélectionné, taper la commande M-x table-capture ((penser à la complétion avec la touche TAB)) et répondre à quelques questions :

  • column delimiter regexp : délimiteur de colonne, dans notre cas, deux caractères espace donc taper deux fois sur la touche espace et valider.
  • row delimiter : pour passer à la ligne suivante, on a choisit le retour à la ligne. Taper C-o ou bien C-q C-j et valider
  • justification : par défaut à gauche (left), si cela convient alors valider
  • minimum cell width : largeur minimale de la cellule, par défaut 5, on peut définir à 10 et valider.
+----------+----------+----------+
|Pays      |Superficie|% du total|
|          |(km²)     |          |
+----------+----------+----------+
|Russie    |17 125 191|11,5 %    |
+----------+----------+----------+
|Canada    |9 984 670 |6,7 %     |
+----------+----------+----------+
|États-Unis|9 629 091 |6,7 %     |
+----------+----------+----------+
|Chine     |9 596 961 |6,4 %     |
+----------+----------+----------+

Attention, la commande table-capture retient vos réglages.

Source emacs :

https://www.emacswiki.org/emacs/Tab...

Source données pays :

https://fr.wikipedia.org/wiki/Liste...

Passer du mode tableau en mode texte : table-release

Pour inverser le processus précédent :

+----------+----------+----------+
|Pays      |Superficie|% du total|
|          |(km²)     |          |
+----------+----------+----------+
|Russie    |17 125 191|11,5 %    |
+----------+----------+----------+
|Canada    |9 984 670 |6,7 %     |
+----------+----------+----------+
|États-Unis|9 629 091 |6,7 %     |
+----------+----------+----------+
|Chine     |9 596 961 |6,4 %     |
+----------+----------+----------+

Placer le curseur n’importe où dans le tableau et taper la commande M-x table-release

Pays       Superficie % du total
           (km²)

Russie 17 125 191 11,5 %

Canada 9 984 670 6,7 %

États-Unis 9 629 091 6,7 %

Chine 9 596 961 6,4 %

Précisions sur table-capture

Il est possible d’utiliser la commande M-x table-capture comme M-x table-release dans le résultat ci-dessous : j’avais fait deux copies des données de départ pour montrer le résultat. j’ai placé le curseur entre le 6 et la , de la ligne Canada.

La commande a agit sur tout ce qui était avant le curseur. Comme les délimiteurs sont définie par deux caractères espace pour une colonne et un retour à la ligne pour une ligne. Le processus m’a embarqué le jeu de données illustrant la situation "avant" et même le titre du paragraphe... Ces derniers n’étaient séparés que d’une ligne.

Par contre les données après le curseur restent inchangées.

+-------------+----------+-----+
|** Précision |          |     |
|sur          |          |     |
|table-capture|          |     |
+-------------+----------+-----+
|Pays         |Superficie|% du |
|             |(km²)     |total|
+-------------+----------+-----+
|Russie       |17 125 191|11,5 |
|             |          |%    |
+-------------+----------+-----+
|Canada       |9 984 670 |6,7 %|
+-------------+----------+-----+
|États-Unis   |9 629 091 |6,7 %|
+-------------+----------+-----+
|Chine        |9 596 961 |6,4 %|
+-------------+----------+-----+
|Pays         |Superficie|% du |
|             |(km²)     |total|
+-------------+----------+-----+
|Russie       |17 125 191|11,5 |
|             |          |%    |
+-------------+----------+-----+
|Canada       |9 984 670 |6    |
+-------------+----------+-----+
,7 %
États-Unis  9 629 091  6,7 %
Chine  9 596 961  6,4 %

Pour que cela fonctionne bien, j’ai passé deux lignes avant de coller une nouvelle fois les données et j’ai placé le curseur après le caractère % de la ligne Chine (la dernière). Le curseur peut même être placé sur la ligne ne dessous de la dernière ligne.

+----------+----------+----------+
|Pays      |Superficie|% du total|
|          |(km²)     |          |
+----------+----------+----------+
|Russie    |17 125 191|11,5 %    |
+----------+----------+----------+
|Canada    |9 984 670 |6,7 %     |
+----------+----------+----------+
|États-Unis|9 629 091 |6,7 %     |
+----------+----------+----------+
|Chine     |9 596 961 |6,4 %     |
+----------+----------+----------+

Cela fonctionne.

table-recognize / table-unrecognize

Lorsque l’on ouvre un document au format Text, si on tape la commande M-x table-recognize, tous les tableaux du document ont leurs lignes surlignées en bleu.

À l’inverse M-x table-unrecognize remet les tableaux du document en mode texte.

Si on utilise le mode outline alors la coloration disparaît.

Créer un tableau à partir de rien : table-insert

  • nombre de lignes : 3 (valeur par défaut)
  • nombre de colonne : 3 (valeur par défaut)
  • largeur des cellules : 10 (par défaut 5)
  • hauteur des cellules : 5 (par défaut 1)

On obtient un joli tableau vide

+----------+----------+----------+
|          |          |          |
|          |          |          |
|          |          |          |
|          |          |          |
|          |          |          |
+----------+----------+----------+
|          |          |          |
|          |          |          |
|          |          |          |
|          |          |          |
|          |          |          |
+----------+----------+----------+
|          |          |          |
|          |          |          |
|          |          |          |
|          |          |          |
|          |          |          |
+----------+----------+----------+

On peut y mettre des données :

+----------+----------+----------+
|          |          |          |
|          |          |          |
| colone 1 | data 1   | result 1 |
|          |          |          |
|          |          |          |
+----------+----------+----------+
|          |          |          |
| chat     | miaule   | miaou !  |
|          |          |          |
|          |          |          |
|          |          |          |
+----------+----------+----------+
|          |          |          |
| chien    | aboie    | ouha ouha|
|          |          |ouha ouha |
|          |          |ouha ouha |
|          |          |ouha ouha |
|          |          |ouha      |
|          |          |          |
+----------+----------+----------+

Le remplissage du tableau se fait en mode réécriture. La structure ne bouge pas quand le bord d’une cellule est atteint, il y a un retour à la ligne. Quand le bord inférieur de la cellule est atteint alors la cellule s’agrandit.

Insérer une ligne : table-insert-row

Mettre le curseur dans une ligne du tableau (ex. ligne chat) et taper la commande M-x table-insert-row

+----------+----------+----------+
|          |          |          |
|          |          |          |
| colone 1 | data 1   | result 1 |
|          |          |          |
|          |          |          |
+----------+----------+----------+
|          |          |          |
|          |          |          |
| canari   | chante   | cui cui !|
|          |          |          |
|          |          |          |
+----------+----------+----------+
|          |          |          |
| chat     | miaule   | miaou !  |
|          |          |          |
|          |          |          |
|          |          |          |
+----------+----------+----------+
|          |          |          |
| chien    | aboie    | ouha ouha|
|          |          |ouha ouha |
|          |          |ouha ouha |
|          |          |ouha ouha |
|          |          |ouha      |
|          |          |          |
+----------+----------+----------+

La ligne s’insère au dessus du curseur (ligne canari).

Insérer une colonne : table-insert-column

Mettre le curseur dans une colonne du tableau (ex. colonne data 1) et taper la commande M-x table-insert-column

+----------+----------+----------+----------+
|          |          |          |          |
|          |          |          |          |
| colonne 1| colonne 2| data 1   | result 1 |
|          |          |          |          |
|          |          |          |          |
+----------+----------+----------+----------+
|          |          |          |          |
|          |          |          |          |
| canari   |          | chante   | cui cui !|
|          |          |          |          |
|          |          |          |          |
+----------+----------+----------+----------+
|          |          |          |          |
| chat     |          | miaule   | miaou !  |
|          |          |          |          |
|          |          |          |          |
|          |          |          |          |
+----------+----------+----------+----------+
|          |          |          |          |
| chien    |          | aboie    | ouha ouha|
|          |          |          |ouha ouha |
|          |          |          |ouha ouha |
|          |          |          |ouha ouha |
|          |          |          |ouha      |
|          |          |          |          |
+----------+----------+----------+----------+

La colonne s’ajoute à gauche du curseur (colonne 2).

Combo : table-insert-row-column

Cette commande donne le choix pour insérer une ligne ou une colonne mais pas les deux.

Cela doit correspondre à un certain type de productivité dans la réutilisation des commandes.

Supprimer ligne / colonne

  • table-delete-column : supprime la colonne sous le curseur ;
  • table-delete-row : supprime la ligne sous le curseur.

Remplir un tableau : table-insert-sequence

La commande M-x table-insert-sequence permet d’insérer une séquence dans les différentes case du tableau.
A partir d’un tableau vierge, j’ai positionné le curseur dans la case contenant le zéro et j’ai validé les questions aux valeurs par défaut.

+----------+----------+----------+
|6         |7         |8         |
|          |          |          |
|          |          |          |
|          |          |          |
|          |          |          |
+----------+----------+----------+
|0         |1         |2         |
|          |          |          |
|          |          |          |
|          |          |          |
|          |          |          |
+----------+----------+----------+
|3         |4         |5         |
|          |          |          |
|          |          |          |
|          |          |          |
|          |          |          |
+----------+----------+----------+

Je recommence avec le curseur dans la première case.

  • sequence base string : 10 (0 par défaut)
  • Combien d’élements : 2 (0 maximum par défaut)
  • élément d’incrément : 2 (par défaut 1)
  • sens de propagation dans cellules : 0 vertical (par défaut 1
    horizontal)
  • justification : center / centré (left / gauche par défaut)
+----------+----------+----------+
|    10    |    A     |   104    |
|          |          |          |
|          |          |          |
|          |          |          |
|          |          |          |
+----------+----------+----------+
|    12    |    C     |   102    |
|          |          |          |
|          |          |          |
|          |          |          |
|          |          |          |
+----------+----------+----------+
|          |    E     |   100    |
|          |          |          |
|          |          |          |
|          |          |          |
|          |          |          |
+----------+----------+----------+

Sur la deuxième colonne, même exercice mais avec la lettre A au départ et sur 3 cases.

Troisième test : je suis partie sur la case qui contient 100 et j’ai mis -3 éléments en colonne avec un incrément de 2. Si je l’avais mis ne haut, j’aurai eu la séquence 100 104 102 avec les mêmes options.

Exporter un tableau : table-generate-source

Cela se fait à l’aide de la commande M-x table-generate-source, les tableaux doivent être reconnus.

Comme on peut voir avec le code source dans le second buffer, le code généré n’est pas très propre. Plein de caractère espace ( ) sont ajoutés dans les cellules.

Après quelque texte, si je mets le curseur dans un tableau, j’arrive à générer le code source que le tableau soit activé ou pas. Peut-être une fonction devenue obsolète ?

Pour aller un peu plus loin avec les tableaux

  • table-narrow-cell / table-shorten-cell : réduit largeur de la colonne ou hauteur de ligne au niveau de la cellule contenant le curseur.
  • table-span-cell / table-split-cell : fusionner (par défaut à droite) / scinder cellules (par défaut horizontalement)
  • table-query-dimension : retourne des infos sur les dimensions d’un tableau : ex. Cell : (10w, 5h), Table : (34w, 27h), Dim : (3c, 4r), Total Cells : 12

Astuces commande M-x

Si vous tapez M-x et utilisez les flèches haut et bas alors vous naviguez dans les dernières commandes tapées dans Emacs.

La complétion des noms avec la touche tab permet de découvrir et sélectionner la bonne commande sans faire de fautes.

Enfin, un C-h a permet d’avoir une définition sommaire d’une commande. Ne pas oublier le copier/coller (M-w / C-y) pour éviter les erreurs de saisie.

Emacs en 2019 ?

Je me suis rendu compte que beaucoup d’articles / doc sur Emacs commençait à dater. Je me suis donc demandé "is Emacs alive ?"

La réponse est ... oui

Un site pour trouver des tas d’infos récentes sur Emacs :

http://sachachua.com/blog/category/...

Une vraie mine d’or..

Emacwiki :

https://www.emacswiki.org/