LinuxPedia

Wiki libre et indépendant dédié à GNU-Linux et BSD.

Outils pour utilisateurs

Outils du site


commande:joe

Éditeur de texte "JOE"

Maîtriser l'utilisation d'un éditeur de texte en console est très utile, on se trouve moins démuni lorsqu'on doit éditer un fichier de configuration pour retrouver une interface graphique (xorg.conf…), dépanner un ami par "ssh". Un éditeur comme “joe” est disponible instantanément, pas besoin de patienter pour que “OpenOffice” démarre si on souhaite retoucher trois lignes dans un fichier de configuration, “joe” peut également servir d'éditeur hexadécimal ou même éditer de manière non destructive un fichier binaire.
Dans ce domaine des éditeurs de texte en console règnent "vi" (ou "vim") et "Emacs" très complets, adaptables à tous les besoins, mais complexes à prendre en main pour un néophyte. À l'opposé on trouve des outils très légers mais limités en fonctions comme “nano” ou “pico”. Entre les deux “JOE” tente le pari d'être aussi facile d'utilisation que “nano”, mais en offrant une grande partie de la souplesse des ténors du domaine. Pari tenu ?

<note>Un signe $ précède les commandes qui ne nécessitent pas de droits administrateur ; un signe # précède celles qui nécessitent des droits administrateur (ces signes ne font <color red>PAS</color> partie des commandes). Les lignes qui ne commencent pas par un signe $ ou # correspondent au résultat de la commande précédente.
Les touches utilisées sont indiquées entre crochets, exemple [ctrl] pour la touche “contrôle”.
Le programme “joe” symbolise la touche contrôle [ctrl] par le caractère ^ (accent circonflexe), cette notation sera utilisée. “Joe” utilise également dans ses raccourcis les crochets [ et ].</note>

Installation et lancement

Dans la plupart des cas “joe” sera installable directement avec le gestionnaire de paquets de votre distribution. Pour pouvoir utiliser la correction d'orthographe vous devrez également installer les dictionnaires “Aspell” des langages désirés.

Si aucun paquet “joe” n'est disponible, vous pouvez encore envisager de compiler le programme depuis ses sources, disponibles ici.
La compilation ne devrait pas poser de problème ni nécessiter l'installation de dépendances particulières (autre qu'un compilateur comme “gcc”, et “make” bien sur). Décompactez l'archive des sources que vous avez téléchargé, placez-vous dans celles-ci et configurez les sources :

  • Pour une installation “standard” (exécutable dans /usr/bin, config dans /etc) utilisez :
$ ./configure --prefix=/usr --sysconfdir=/etc
  • Pour une installation dans votre répertoire personnel (si pas de droits root) :
$ ./configure --prefix=$HOME
  • Enfin un simple “./configure” vous donnera une installation dans /local.

Une fois choisie une de ces trois options de configuration, utilisez “make” pour compiler le programme :

$ make

Et enfin installez le, avec des droits root sauf si vous avez configuré “joe” pour s'installer dans votre répertoire utilisateur :

# make install

Si vous avez déjà installé précédemment une version plus ancienne, il peut être nécessaire d'effacer les répertoires de préférences pour éviter les conflits (~/.joerc, ~/.jmacsrc, ~/.rjoerc, ~/.jstarrc, ~/.jpicorc, ~/.joe).

Le lancement du programme se fera depuis une console, vous avez plusieurs possibilité car “joe” peut prendre plusieurs apparences pour mieux s'adapter à vos habitudes et vos goûts. L'exécutable de base se nomme joe, taper ceci dans une console lancera l'éditeur dans son mode natif. En plus sont disponibles d'autres variantes :

  • jpico s'inspire de “pico”, un éditeur de texte historiquement fourni avec le client de courriel “pine”, décliné ensuite en version libre sou sle nom de “nano”.
  • jmacs vise à satisfaire les accros de GNU-Emacs, il en reprends les principales commandes et raccourcis, mais sans nécessiter l'installation d'“emacs” dont ses détracteurs disent qu'il est un système d'exploitation à lui tout seul.
  • jstar n'aura d'intérêt que pour ceux qui connaissent (ont connu ?) “WordStar”. “jstar” en est une copie augmentée de nombreuses additions propre à “joe”.
  • rjoe est d'un usage particulier, c'est une version bridée de “joe” qui ne permet d'éditer que le(s) fichier(s) spécifiés lors du lancement, et rien d'autre. Ça peut être très pratique pour permettre à des utilisateurs d'éditer certains fichiers de configuration qui nécessitent des droits administrateurs (couplé avec un alias dans /etc/sudoers, voir “sudo”).

Chaque “parfum” possède son propre fichier de configuration, ce qui permet de personnaliser “joe” de façon extrêmement fine, soit globalement dans /etc/joe/ ou par utilisateur avec des fichiers de préférences ~/.joe, ~/.jmacs, etc…

<note> Un mot sur les “alternatives”, c'est à dire la liste des programmes par défaut du système lorsque plusieurs du même type sont disponibles. Souvent le dernier programme installé est considéré comme le choix par défaut, mais ce comportement ne s'applique pas si on installe depuis les sources. Pour gérer ces priorités entre programmes on peut utiliser sur de nombreuses distributions les “alternatives”. Sur Debian ou Ubuntu la commande :

# update-alternatives --display editor

vous renseignera sur l'éditeur en mode console par défaut, et vous pourrez modifier ce réglage avec :

# update-alternatives --config editor

Libre à vous de choisir “joe”, “nano” ou “vi” par défaut, quelques soient les autres éditeurs installés.</note>

Apparence et navigation

L'apparence de “joe” au lancement est classique des éditeurs de texte en console : spartiate. La première chose que vous ferez sans doute est afficher le bandeau d'aide ou “mémo” en haut de l'écran, avec la combinaison de touches [ctrl][K] puis [H] . Pour passer aux écrans suivant de l'aide utilisez [esc][.], [esc][,] pour revenir aux écrans précédent.
N'importe quand [ctrl][T] ouvrira le bandeau des options supplémentaires en bas de la fenêtre en cours.

JOE avec un script ouvert en édition (notez le soulignage coloré de syntaxe), et le bandeau d'aide visible en haut de l'écran :


Le bandeau d'options, normalement situé en bas de fenêtre :


La touche “contrôle” ou [ctrl] est symbolisée par le caractère “^” (accent circonflexe). Dans les menus de “joe”, si deux touches sont reliées par un tiret “-” elles doivent être tapées simultanément, si elles sont espacées elles peuvent être tapées successivement. De même les minuscules ou majuscules ont le même effet. Enfin la combinaison “^[” est équivalente à la touche [esc] (“Échap”). Des exemples concrets :

  • ctrl-K H aura le même effet que ctrl-k h, et signifie “touches [ctrl][k] pressées en même temps, puis touche [H]”.(appel de l'aide)
  • ^KF aura le même effet que ^kf, cette notation signifie “touches [ctrl][K][F] pressées en même temps”, ou “touches [ctrl][k] puis [F]”.(recherche dans l'ensemble du texte)
  • ^[L est équivalent à esc-L, c'est à dire les touches [esc][L] pressées simultanément ou successivement.(lancement de la vérification d'orthographe globale)

Utilisé en mode fenêtre unique la navigation à l'intérieur du texte est intuitive, les flèches du clavier peuvent être simplement utilisées pour se déplacer, la touche [backspace] sert à effacer ce qui se trouve avant le curseur, la touche [Suppr] efface se qui se trouve après celui-ci. Joe peut également s'utiliser en mode fenêtres multiples, pour le moment l'écran ne peut être divisé que selon l'axe horizontal, l'axe vertical est en projet pour les prochaines versions. On divise la fenêtre en cours avec ^KO, on passe respectivement à la fenêtre du bas et du haut avec ^KN et ^KP.


Pour charger un document dans la fenêtre en cours, on utilise ^KE. Pour fermer la fenêtre active on utilise ^C (pas de sauvegarde des modifications) ou ^KX (sauvegarde des modifications). On peut également n'afficher qu'une fenêtre/toutes les fenêtres avec ^KI.

Joe utilise des “buffers” (espaces de mémoire tampon temporaires) pour charger tous les documents, tous les “buffers” ouverts sont conservés jusqu'à la fermeture des documents, ou celle de l'application. Clairement cela signifie que lorsque vous chargez un nouveau document, le précédent est conservé intacte en mémoire. Pour circuler parmis les “buffers” ouverts on utilise ^[U (ou [esc][U]) pour accéder au “buffer” précédent, ^[V (ou [esc][V]) pour le buffer suivant.

Sélectionner, copier/coller, passer une commande

Lorsqu'on a comme unique référence de traitement de texte que les outils comme OpenOffice, Koffice ou Abiword la plus élémentaire opération avec un éditeur comme “joe” provoque un choc culturel !

Oubliez le [ctrl][c] et [ctrl][v] qui a été érigé en norme du copier/coller par un système d'exploitation propriétaire bien connu. Dans le contexte de la ligne de commande [ctrl][c] signifie généralement l'interruption brutale de l'opération en cours, pour “joe” cela signifie qu'on désire quitter “joe” sans enregistrer les modifications.

Pour copier/coller un passage (on parle de “bloque” de texte) vous devrez d'abord le délimiter (l'équivalent de la sélection à la souris). Placez-vous sur le premier caractère que vous désirez copier et marquez le comme début du bloque à copier avec ^KB, puis déplacez-vous sur le caractère suivant le dernier caractère de la sélection et marquez la fin du bloque de texte avec ^KK. Attention, vous avez bien lu, la fin de la sélection se situe sur le dernier caractère AVANT le curseur. C'est à dire que si vous désirez sélectionner uniquement un seul caractère, vous utiliserez ^KB sur celui-ci, puis ^KK sur celui immédiatement après (même s'il s'agit d'un espace). Vous remarquerez également que le curseur se déplace en fin de ligne d'un espace au-delà de la fin effective, pour permettre la sélection du dernier caractère ou son effacement.
Le bloque sélectionné passera en surbrillance, il est dors et déjà copié, vous pouvez désormais vous placez là où vous désirez coller (ou déplacer) se bloque. Vous pouvez vous déplacez vers une autre fenêtre de “joe”, rappeler un “buffer”, ou simplement vous déplacez à l'intérieur du même document. Lorsque le curseur est correctement placé (le premier caractère de la sélection sera collé à l'emplacement du curseur) utilisez ^KC pour coller, ou ^KM pour déplacer le bloque en sélection.

Vous pouvez également écrire le bloque sélectionné dans un nouveau fichier avec ^KW, et si au prompt d'enregistrement vous faites précéder le nom d'un fichier existant de » le block sélectionné sera ajouté en fin du fichier indiqué. Toujours lors du prompt de sauvegarde de la sélection, vous pouvez passer la sélection à un autre programme avec !programme . Par exemple avec !tee -a fichier vous enverrez le texte sélectionné à travers la commande “tee”, et l'ajouterez à la suite du contenu actuel du fichier fichier indiqué (même effet qu'une redirection avec »). Autre usage avec !mail user@localhost vous enverrez le passage sélectionné vers la boite de courriel locale du compte indiqué (par exemple “root” pour l'administrateur, etc…), utile dans le cas d'un fichier de configuration ou un extrait de journal (log) problématique.

Vous pouvez aussi effacer le bloc en sélection avec ^KY, mais bien plus intéressant vous pouvez le filtrer au travers d'une commande unix avec ^K/. De cette manière il est facile d'effectuer par exemple une substitution de caractères avec "sed" sur le bloque de texte sélectionné.

Si vous désirez effectuer des sélections rectangulaire plutôt que linéaires (pour des tableaux par exemple), activez le mode “sélection rectangulaire” dans les options avec ^TX, répéter la même commande annulera le mode de sélection rectangulaire.

Enfin pour annuler la sélection, utilisez simplement ^KB puis ^KK sans déplacer le curseur, n'importe où dans le texte.

Recherche et correction orthographique

“joe” permet d'utiliser des expressions régulières comme motifs de recherche, il suffit d'appeler le dialogue de recherche avec ^KF … et de lire le manuel pour se familiariser avec les expression valides ! ;-)
Quelques exemples, truc\$ signifie “truc” à la fin d'une ligne, \^truc signifie “truc” au début d'une ligne, et truc\* signifie “truc” suivit de zéro ou plus caractères (par exemple “truc”, “trucs”, “trucage”, etc…). Les expressions régulières utilisées par “joe” ne lui sont pas propres, elles sont communes à de nombreux programmes Unix.
Après avoir validé un motif de recherche, des options supplémentaires vous seront proposées parmi lesquelles le mode “Ignore” ou “i”. Cette option de recherche permet d'ignorer la casse à la manière d'un “grep -i”.

La fonction de recherche possède une option de substitution directe, c'est à dire substituer à un motif de recherche un autre motif de remplacement. Pour effectuer ce type de remplacement lancez une recherche avec ^KF, et après avoir validé votre motif de recherche choisissez l'option “R”, le motif de remplacement vous sera alors demandé.
Pour répéter une recherche utilisez ^L .

Pour ce qui est de l'orthographe, “joe” utilise les dictionnaires “Aspell” installés, ce qui permet de vérifier un mot ou l'ensemble du texte dans différentes langues rapidement. La vérification instantanée pendant la frappe n'est pas encore au programme, pour lancer une vérification globale on utilise ^[L (ou [esc][L]), et pour vérifier un mot sélectionné ^[N (ou [esc][N]). Pour changer la langue de vérification à la volée on passe par le menu d'option (^T) et on ouvre la sélection de la langue avec la touche [V]. Les codes à utilisé sont ceux des dictionnaires installés, “fr” pour le Français, “no” pour le Norvégien ou “pt-br” pour le Portugais Brésilien par exemple.

Interaction avec le shell

En plus de pouvoir lancer des commandes sur le texte, il est également possible d'obtenir un prompt et de l'inclure, ainsi que le résultat des commandes exécutées, dans le corps du texte. C'est pratique pour récupérer des informations renvoyées par une commande, illustrer un tutoriel, etc… Dans la fenêtre en cours tapez ^K' (le dernier caractère est un guillemet simple) pour obtenir une invite de commande fusionnée avec le texte. Vous pouvez passer de l'invite de commande au texte avec les flèches de navigation, modifier le résultat des commandes comme de simples éléments du texte principal. Tapez “exit” pour quitter le shell.

Il est également possible d'envoyer “joe” en second plan (en pause) pour libérer la ligne de commande, vous ramènerez “joe” au premier plan en tapant “fg” (sans guillemets) dans votre console (voir l'article "Contrôle des processus").

À tout moment lorsque “joe” vous propose un “prompt” (une invite), vous pouvez utiliser la touche [tab] pour compléter un chemin ou une commande de la même manière que dans une console classique. Si plusieurs choix sont possibles utiliser deux fois [tab] successivement listera tous les choix possibles.
Comme pour un shell classique les “prompts” de “joe” enregistrent un historique, vous pouvez circuler dans cette historique de la même manière que dans une console classique (touches flèches haut/bas), vous pouvez également utiliser la fonction de recherche de “joe” depuis un “prompt”.
Tous les “prompts” sont traités par “joe” comme des fenêtres indépendantes, la plupart des options liées à celles-ci sont donc utilisables. Par exemple si vous ouvrez une dialogue d'enregistrement avec ^KD, taper ensuite ^KP vous fera sortir de ce dialogue pour passer dans la fenêtre supérieure (pour une retouche de dernière minute…), et ensuite ^KN vous permettra de redescendre dans l'invite d'enregistrement.

Les fichiers de configuration

Par défaut (au moins sur Debian) “joe” centralise ses fichiers de configuration dans /etc/joe/. Si vous copiez un fichier de configuration dans votre répertoire personnel (par exemple copier /etc/joe/joerc comme ~/.joerc), vous obtiendrez une configuration par utilisateur au lieu de la configuration globale. À partir de là toute les fantaisies sont permises, le fichier de configuration étant hautement personnalisable, et très bien annoté pour faciliter la compréhension des différentes options. Vous pourrez définir vos propres raccourcis, réassigner ceux par défaut, ajuster les couleurs de texte, de l'aide, enregistrer des macros, etc… Les possibilités sont à la mesure de votre imagination et de vos besoins.

Annuler, enregistrer, quitter, astuces

À tout moment ^C terminera la fenêtre en cours sans enregistrer les modifications, un dialogue de sécurité vous sera proposé si le document dans une fenêtre principale a été modifié. Pour enregistrer un document et quitter “joe” simultanément utilisez ^KX, pour enregistrer/enregistrer-sous sans quitter “joe” ni fermer le document en cours utilisez ^KD .
Par défaut “joe” crée une copie de sauvegarde de tout document modifié, il s'agit d'un fichier caché dans le même répertoire que le document édité, et portant le même nom plus le suffixe “~”. Il est possible de désactiver cette fonction (qui peut présenter des risques de sécurité/confidentialité dans certains contextes) via l'option “-nobackups” dans le fichier de configuration “/etc/joe/joerc” ou “~/.joerc”.
Si vous avez une sélection active ^KW enregistrera-sous le contenu de la sélection, si vous ajoutez une redirection » devant le nom d'un fichier existant, le contenu de la sélection sera ajouté au fichier indiqué.

Partout ^K_ (le dernier caractère est un tiret bas “underscore”) permet d'annuler la (les) dernière(s) action(s), au contraire ^^ (double contrôle) renouvelle une action.

Pour importer un document dans celui qui est en cours d'édition, utilisez ^KR. Pour le moment “joe” ne supporte pas l'import ou l'ouverture de documents compressés (.tar.gz, .bz2, etc…), pour contourner cette limitation on peut utiliser la commande “zcat” (ou “tar”, “gunzip”, etc…) :

$ zcat /usr/share/man/man1/joe.1.gz | joe

Ici on charge dans “joe” un exemplaire décompressé de sa page de manuel. Au moment de la sauvegarde il faudra créer un nouveau document car on ne pourra pas enregistrer au format compressé.

“Joe” sais en revanche éditer des fichiers binaires de manière non destructive, et également servir d'éditeur hexadécimal. Il est également possible d'enregistrer des macros pour des actions répétitives, il suffit de déclencher l'enregistrement d'une macro avec ^K[ suivi d'une chiffre de 0 à 9 (numéro attribué à la macro), et pour terminer l'enregistrement de la macro on utilise ^K] . Il est possible “d'emboîter” les macros en appelant l'une pendant l'enregistrement d'une seconde, ou pour simplement exécuter une macro on utilisera ^K suivi de son numéro.

Enfin “joe” dispose d'un mode “image” adapté à l'ASCII art (même mauvais), la preuve :



Amusez-vous bien.

Liens

commande/joe.txt · Dernière modification : 2018/11/17 12:52 de 127.0.0.1