edbrowse documentation

Documentation edbrowse, guide de l'utilisateur

Table des matières

Chapitre 1, préface

Chapitre 2, guide de référence rapide

Chapitre 3, l'éditeur

Chapitre 4, navigateur web

Chapitre 5, Javascript

Chapitre 6, scripts d'Edbrowse et le fichier de configuration

Chapitre 7, client de courrier

Chapitre 8, Accéder aux bases de données


Mainteneur

Chris Brannon chris@the-brannons.com

Auteur

Karl Dahlke eklhad@gmail.com wikipedia

Copyright

Ce programme est copyright (c) (c) Karl Dahlke, 2000-2014. Il est mis à disposition par l'auteur sous la licence publique générale GNU (GPL), définie par la Free Software Fondation. Il peut être utilisé dans n'importe quel but, et redistribué, à condition d'y adjoindre le présent copyright.

Remerciements

Ce programme emprunte du code et des concepts de construction au projet Links, lequel est également librement disponible sous les termes de la GPL. Merci aux auteurs pour tout leur travail difficile.

Leur écriture technique est bien meilleure que la mienne. Regardez svp certaines de ces pages Web ; vous ne le regretterez pas.

Écrire en HTML
Un tutoriel de code HTML
Ainsi vous voulez écrire un peu d'HTML…
Javascript pour Webmasters
Javascript, le guide définitif

Ce paquet exige le Spider Monkey Javascript, licencié par Mozilla sous MPL.  Disponible ici.  Les programmeurs et les mainteneurs de ce paquet devraient tirer profit de la documentation en ligne.

Chris Brannon a écrit ou modifié au moins 20% du code, et a fourni de bonnes idées pour l'architecture générale. Im maintient désormais edbrowse.

Jeremy O'Brien a porté le programme sur Mac OS X.

Plusieurs personnes ont traduit les sorties et messages d'erreur en d'autres langues, et elles sont créditées de leur travail dans la section "Langages" ci-dessous.

Vue d'ensemble

Ce programme est, à première vue, un ré-implémentation de /bin/ed.  En fait vous pourriez utiliser quelques commandes d'Ed sans vous rendre compte que vous exécutez réellement mon programme. Mais à mesure que vous l'utiliserez, vous découvrirez quelques différences, secteurs où mon programme diffère de Ed. (Ceux-ci sont discutés ci-dessous.)

Réinventer ed semble être une perte de temps, jusqu'à ce que vous vous rendiez compte que ce programme fonctionne également comme un navigateur - un navigateur inclus dans ed.  Vous pouvez éditer une URL aussi facilement qu'un fichier local, et activer le mode navigation pour afficher le HTML d'une façon appropriée pour un programme en ligne de commande.  En d'autres termes, nous rejetons la majeure partie des informations de formatage, maintenons les liens et remplissons les formulaires.  Ceci permet aux utilisateurs aveugles d'accéder à l'Internet par l'intermédiaire d'une application qui est entièrement compatible avec la nature linéaire de la parole ou du braille. 

Je trouve cette approche supérieure au procédé de collage d'un adaptateur sur un navigateur de type écran (lynx) ou un navigateur graphique (Netscape). Naturellement, ce n'est que mon avis.  Pour être juste, beaucoup d'utilisateurs aveugles, même totalement aveugles, sont satisfaits de leurs balayeurs d'écran.  Je suis heureux que cela fonctionne pour eux, mais cette approche est pour moi une perpétuelle source de frustration.  Si vous aussi, vous préférez des applications linéaires, essayez ce navigateur. 

Cette documentation suppose que vous connaissez ed.  En fait, elle aide si vous êtes à l'aise dans ed.  Une expérience des navigateurs d'Internet et de la terminologie associée est également utile. 

Autres langues

D'abord, quelques mots sur les jeux de caractères. L'anglais est facilement géré par un flot d'octets, une lettre par octet. De plus, chaque lettre tient sur 7 bits; le huitième bit, non utilisé, est mis à 0. Cependant, les langages indo-européens comportent plus de caractères, comme ñ (espagnol), è (français), et ö (allemand). Ceux-ci peuvent tenir sur un octet, en mettant le 8ème bit à 1, selon le standard ISO8859-1. D'autres langues, comme le tchèque et le hongrois, se conforment au standard iso8859-2, qui assigne d'autres caractères aux octets supérieurs à 127. Et ensuite il y a l'iso8859-3, et ainsi de suite. Mais que se pass-t-il si vous désirez écrire un paragraphe en français et un autre en tchèque ? Vous pouvez passer de l'iso8859-1 à l'iso8859-2 dans le document, ou bien utiliser un nouveau standard qui représente toutes les lettres dans toutes les langues simultanément. Ce jeu de caractères, qui ne code plus les carctères sur un seul octet, est connu sous le terme utf8, lequel gagne en popularité. Ainsi, dans votre ordinateur, ñ est représenté par un ou deux octets. C'est transparent pour vous; vous voyez la même lettre sur l'écran, et vous entendez le même son (si votre lecteur d'écran envoie ces lettres à votre synthétiseur). Une façon simple de savoir sur quel système vous êtes est de faire "echo $LANG". Si la réponse contient la chaîne utf8, ou utf-8, en minuscules ou majuscules, votre console utilise utf8, et attend des séquences de 2 octets. Vos fichiers contiendront ces séquences, sans que vous en soyez (probablement) informé. Des systèmes plus anciens (pré utf-8) codent chaque caractère sur un seul octet, et utilisent une page de codes iso-8859-x pour les traduire.

Il y aurait beaucoup plus à dire sur les jeux de caractères : ceci est juste une brève introduction au sujet. Je n'ai pas besoin d'aller plus loin, parce que Edbrowse ne supporte actuellement que iso8859 ⇔ utf8 . Le chinois, par exemple, requiert des séquences de 3 ou 4 octets, intégrées dans unicode. Edbrowse, pour l'heure, ne peut gérer ce niveau de complexité.

Les sorties et messages d'erreur ont été "internationalisés", comme "chaîne recherchée non trouvée" : ainsi Edbrowse peut accepter la plupart des langues européennes.  Positionnez la variable d'environnement LANG pour interagir avec Edbrowse dans votrelangue.  Les langues acceptées sont listées ci-dessous.  Si vous pouvez traduire edbrowse dans d'auttres langues, prière de me le faire savoir.

Anglais: LANG=en (c'est la langue par défaut)

Français: LANG=fr par Erwin Bliesenick avec la documentation

Portuguais brésilien: LANG=pt_br par Cleverson

Tchèque: LANG=cs_cz par Jan Mura (travail en cours)

Lorsqu'un message d'erreur est affiché, les lettres accentuées sont affichées comme des octets de 8 bits, c'est-à-dire en ISO8859-x, à moins que la chaîne utf8 ou utf-8 soit présente dans $LANG, auquel cas les caractères non-ascii sont générés en utf8. LANG=fr_FR.UTF-8 est un réglage usuel en France. Seuls ces jeux de caractères sont actuellement supportés. De même, le contenu d'un tampon, qu'il soit un fichier local ou un site internet, est affiché en séquences de 8 bits ou en séquences de 2 octets, conformément à votre environnement local. Si Edbrowse lit un fichier, c'est-à-dire qu'il le charge dans un tampon vide, et qu'il soit codé dans "l'autre" jeu de caractères, il est converti à la volée, bien avant que vous vous en aperceviez. Ainsi, il aura l'air normal. Si j'ai tout fait correctement, vous ne verrez aucune différence. (Utilisez la commande iu pour désactiver cette fonctionnalité.

Quand vous sauvegardez vos données dans le même fichier, c'est-à-dire si vous avez fait quelques ajouts ou modifications, je reconvertis le fichier dans son jeu de caractères original. Ainsi, vous pouvez renvoyer le fichier modifié à votre correspondant, et ce fichier sera dans son jeu de caractères, comme il l'escompte. Cependant, si vous sauvegardez vos données, ou une partie de vos donnés, sous un nouveau nom de fichier, je les laisserai dans le jeu de caractères utilisé par votre ordinateur.

Ces conversions ne devraient jamais intervenir sur des fichiers zip, ou des exécutables, ou d'autres types de données binaires. Si vous voyez les mots "conversion en iso8859" ou "conversion en utf8", il y a un problème. N'essayez pas de lancer l'exécutable converti; cela ne marchera pas.

Si votre environnement est en utf8, la fonction de recherche peut amener à quelques confusions. Considérons le mot espagnol niño (petit garçon). Si vous recherchez ni.o, vous ne trouverez pas la ligne contenant ce texte. Le point remplace un caractère, et devrait correspondre à ñ, mais cette lettre accentuée tient sur deux octets. Ironiquement, vous devrez chercher ni..o, et vous trouverez ce que vous cherchez. Nul besoin de dire que ceci est vraiment déroutant.

La recherche/remplacement est effectuée par la librairie pcre et, heureusement pour nous, la dernière version supporte l'utf8. En d'autres termes, je peux passer à pcre l'option qui lui dira de rechercher certaine séquence sur deux octets comme un caractère unique, et pcre se comportera comme attendu. Malheureusement, quelques anciens packages pcre ne possèdent pas cette fonctionnalité. Si vous êtes dans ce cas, vous recevrez un message d'avertissement, et pcre reviendra à son comportement original une lettre par octet. Pour désactiver l'utf8 en permanence, et supprimer ce message d'avertissement, mettez la variable d'environnement PCREUTF8=off. Si vous désirez désactiver l'utf8 dans la recherche/remplacement de façon provisoire, utilisez la commande su8.

Quelques pages internet peuvent s'afficher en plusieurs langues. Par exemple, twitter.com a une version anglaise, une version française, et ainsi de suite. Il est possible de sélectionner la langue à l'appel d'une page. Edbrowse l'implémente via le mot-clé localizeweb dans son fichier de configuration. Par exemple, la ligne qui suit dans .ebrc indique que vous désirez la version française, si elle est disponible.

localizeweb = fr

Guide de référence rapide

Liste de toutes les commandes d'ed et d'edbrowse, toutes regroupées.  C'est un guide de référence rapide.  La plupart de ces commandes n'auront pas de sens si vous ne lisez pas le reste de la documentation. 

q : quitte la session courante 
qt : quitte le programme complètement, que vous ayez sauvegardé vos fichiers ou non 
!commande : commande shell 
p : afficher la ligne courante 
4,7p : afficher les lignes 4 à 7 
+3p : avancer de 3 lignes et affiche
3 : idem +3p, print est la commande par défaut
-0 : ligne précédente
--- : reculer de 3 lignes
a,'bp : afficher les lignes repérées par les étiquettes a et b 
kb : marquer la ligne courante avec l'étiquette b 
l : lister la ligne courante, affichant les caractères invisibles et les marqueurs de fin de ligne
eo : marqueurs de fin désactivés
el : afficher les marqueurs de fin ^$ quand une ligne est listée
ep : afficher les marqueurs de fin quand une ligne est listée ou affichée
lna : afficher les caractères nonascii en hexadécimal uand une ligne est listée (bascule)
n : afficher la ligne courante avec son numéro de ligne 
z22 : afficher les 22 prochaines lignes 
z : afficher encore 22 lignes 
= : afficher le nombre de lignes du fichier en cours
X : faire de cette ligne la ligne courante 
s/x/y/ : remplacer x par y dans la ligne courante 
s/x/y : remplacer x par y dans la ligne courante et afficher le résultat
s//y/ : utiliser la dernière chaîne de substitution, dans ce cas x
s/x/%/ : utiliser la dernière chaîne de substitution
s : répéter la dernière opération de substitution
s/x/y/2 : remplacer la deuxième occurrence de x par y dans la ligne courante 
4,7s/x/y/g : remplacer toutes les occurrences de x par y, dans la ligne courante
/x/ : rechercher la ligne contenant x 
/x: idem que /x/
/x/i: cherche la ligne contenant x ou X
?x? : recherche x en arrière
ci : les recherches et les substitutions sont insensibles à la casse
cs : les recherches et les substitutions sont sensibles à la casse
sg : les chaînes de substitution sont globales pour toutes les sessions 
sl : les chaînes de substitution sont locales à leurs sessions 
su8: Utiliser utf-8 dans recherche et remplacement (bascule)
lc : conversion de la ligne courante en minuscules
mc : majuscules en début de mot dans la ligne courante
uc : conversion de la ligne courante en majuscules 
s/x/uc: conversion de x en X dans la ligne courante
h : aide, expliquant le dernier point d'interrogation 
f : afficher le nom du fichier courant 
f foo : renommer le fichier courant en 'foo' 
f/ : ne conserveur que la dernière partie du nom de fichier courant 
e : afficher le numéro de la session courante 
e3 : aller à la session numéro 3 
e foo : éditer le fichier 'foo' 
r foo : lire le contenu du fichier 'foo' dans le tampon courant 
w foo: sauvegarder le tampon courant sous le nom 'foo'
w+ foo : ajouter au fichier 'foo' le contenu du tampon courant
w/ : sauvegarder sous le nom de la dernière partie du nom de fichier courant 
d : supprimer la ligne courante 
1, $d : supprimer toutes les lignes, de 1 à la fin du fichier 
d : supprimer la ligne courante et afficher la prochaine ligne
dr : le répertoire est en lecture seule 
dw : on peut écrire dans le répertoire, et d déplace les fichiers dans la corbeille
dx : on peut écrire dans le répertoire, et d supprime le fichier
hf : basculer entre montrer/cacher les fichiers cachés du répertoire
u : annuler la dernière commande 
i : insérer le texte, suivi d'une virgule, avant la ligne courante
c : remplacer la ligne courante par un nouveau bloc du texte, terminé par une virgule 
a : ajouter le texte après la ligne courante, terminé par une virgule 
a+ : inclure la ligne que vous vous venez de taper, si vous pensiez être en mode ajout
4,7m11 : déplacer les lignes 4 à 7 à la ligne 11 
4,7t11 : copier les lignes 4 à 7 à la ligne 11 
3,4j : fusionner les lignes 3 et 4
3,4J : fusionner les lignes 3 et 4, séparées par un espace
g/x/ p : afficher les lignes contenant 'x' 
v/x/ p : afficher les lignes qne contenant pas 'x' 
B : trouver la ligne contenant la parenthèse correspondante 
b : naviguer dans le fichier courant courant, si c'est du HTML 
b foo.html : éditer et naviguer dans le fichier foo.html
b URL : se connecter à URL et naviguer
ub : quitte le mode navigation du fichier courant 
ft : afficher le titre de la page Web courante 
fd : afficher la description de la page Web courante
fk : afficher les mots-clés de la page Web courante
hr : redirection HTTP (bascule)
js : activation javascript (bascule)
sr : envoyer le référent  (bascule)
fma : mode FTP actif
fmp : mode FTP passif
rf : rafraichir la page WEB ou la liste des fichiers
et : éditer cette page Web en mode texte pur 
vs : vérifier les connexions SSL (sécurisées)
g : suivre le lien sur la ligne courante 
g2 : suivre le deuxième lien sur la ligne courante 
^ : retourner à la page à la page Web précédente
i=xyz : remplir le formulaire sur ligne courante avec 'xyz'
i2=xyz : placer le deuxième formulaire de la ligne courante avec 'xyz' 
i2* : appuyer sur le 2ème bouton de la ligne courante, habituellement envoyer ou remettre à zéro
i3 ? : afficher la description du troisième formulaire de la ligne courante 
db : niveau de déboguage (de 0 à 7)
cd : changer de répertoire 
bl : découper la ligne courante en phrases
bd : basculer entre détection/non détection des fichiers binaires du répertoire
rl: activation javascript (bascule)
pb : joue le tampon 
iu : convertir automatiquement entre iso8859 et utf8 (bascule)
ds=source,login,password : définit la source de données
sht : montrer les tables
shc : montrer les colonnes (et la clé primaire) de la table courante
shf : montrer clés de la table courante
fbc : chercher colonnes blob
sm : envoyer le courrier [le numéro de compte] 
re : répondre à un courriel
rea : répondre à tous
ip : afficher numéro IP, souvent des courriels sauvegardés

Trucs pour éviter les numéros de ligne

Si vous découvrez ed, vous pouvez trouver ce programme malcommode.  Je reçois souvent des plaintes au sujet des numéros de ligne.  Les gens haïssent les numéros de ligne.  Ils ne veulent pas lire la page ligne par ligne par ligne, en tapant 1p 2p 3p 4p 5p etc.  Pour tout dire, je hais également les numéros de ligne, et ne les utilise jamais.  Pas depuis des années. 

Pour lire le document entier, tapez 'p'.  Ceci fonctionne, si vous utilisez un synthétiseur de parole en ligne de commande.  Le document entier est dans le tampon et vous pouvez le lire en employant les touches de fonction de votre synthétiseur. Comme la plupart des personnes utilisent toutefois des lecteurs d'écran, ceci ne fonctionnera pas.  Cependant, il y a une manière facile de sauter d'écran en écran.  Commencer par 0z24 pour obtenir les 24 premières lignes.  Ensuite, la commande 'z' donnera les 24 prochaines, et les 24 prochaines, et ainsi de suite.  Vous pouvez employer 22, ou 23, ou ce qui semble approprié à votre écran. 

Une autre approche est de simplement taper la touche entrée, à plusieurs reprises, pour aller de ligne en ligne.  Il faudra peut-être taper une touche de fonction pour « lire » chaque ligne, après avoir tapé la touche entrée, ou peut-être pas, si votre synthétiseur possède un dispositif de lecture automatique. 

Une fois habitué aux expressions régulières, vous pouvez sauter à n'importe quelle partie du document, même un grand document, dans un temps record, simplement en recherchant un fragment unique de texte.  Ceci vient avec la pratique.  Parfois je devine mal, et ma chaîne de recherche ne donne pas un résultat unique.  Je reviens quelque part au début du document et je dois recommencer la recherche.  Ceci ne se produit pas très souvent.  J'arrive habituellement au bon endroit en un ou deux essais. 

Pour marquer certaines lignes de texte, n'essayez pas de vous rappeler les numéros de ligne.  Employez la commande 'k' pour les marquer.  J'emploie habituellement 'ka' et 'kb' pour marquer le début et la fin d'un bloc de texte, alors que 'kc' marque cette zone.  La commande pour aller à cette zone est alors 'a,'bm'c – sans numéro de ligne.  C'est le standard de ed, bien que la plupart des personnes n'en tirent jamais profit.

Pour rechercher des liens sur une page Web, rechercher l'accolade droite.  Certes, vous pouvez tomber sur une accolade littérale dans le texte, mais ceci ne se produit pas très souvent.  Vous pouvez accéder à un lien particulier en tapant « /{Next}/g ».  De même, vous pouvez rechercher des champs de saisie en recherchant le signe plus grand que (« > ».  (Ceci s'explique si vous connaissez le codage particulier des pages web.) Et naturellement, des opérations multiples peuvent être codées dans un script, une particularité de ce navigateur. 

Ce sont juste quelques trucs qui vous rendront aussi rapide et efficace que quiconque employant un éditeur ou un navigateur écran, à condition de connaître la page sur laquelle vous travaillez.  (Vous ne serez jamais plus rapide que votre collègue voyant en naviguant dans un territoire peu familier, quel que soit le système employé).  Mon épouse est toujours stupéfaite de la rapidité avec laquelle je dialogue avec des sites Web, ou quand je travaille sur des documents communs à nous deux. 

Liste de discussion

Il existe une liste de diffusion pour les utilisateurs d'edbrowse et d'autres utilitaires en ligne de commande.  Vous pouvez vous y abonner en envoyant un courrier à commandline-subscribe@yahoogroups.com.

Différences importantes par rapport à /bin/ed

Certaines recherches/commandes de remplacement se comportent différemment sous cet éditeur.  C'est parce que les expressions régulières sont interprétées par la bibliothèque compatible avec Perl (pcre), plutôt que par la bibliothèque traditionnelle de regexp.  Par conséquent les expressions régulières ont plus de possibilités, et plus de puissance, que les expressions régulières utilisées par /bin/ed.  La syntaxe est également quelque peu différente.  Par exemple, Perl emploie des parenthèses nues là où Ed emploie des accolades échappées - pour délimiter les sections de texte satisfaisant aux conditions.  Et Perl utilise $1… $9 pour référencer les sous-chaînes trouvées, tandis que Ed utilise \1… \9.  En outre, le Perl emploie le suffixe « i » pour la recherche insensible à la casse, avec le suffixe traditionnel « g » pour indiquer le remplacement global sur tout le texte.  Il n'y a aucune raison de décrire toutes les nuances ici.  Veuillez lire la page de manuel de perlre « man perlre  » pour une description complète des expressions régulières sous Perl.  Une fois accoutumés à leur puissance et flexibilité, vous ne reviendrez jamais à Ed. 

Super ! Vous avez lu la page du manuel de perlre, et vous voilà de retour.  Voici quelques changements par rapport aux expressions régulières de Perl.  J'ai constaté que « (and) » est presque toujours considéré comme un littéral, comme en recherchant maFunction (), aussi j'ai inversé la signification des parenthèses échappées dans Perl.  C'est-à-dire, « (and) » maintenant matche les caractères littéraux, et « \ (and \) marque les sous-chaînes correspondant à l'expression.  Ces sous-chaînes sont alors référencées, dans le texte de remplacement, de $1 à $9.  De même, « | signifie le littéral |, » alors que « \| » signifie l'alternative.  Je change également la signification de « & » du côté droit, pour reprendre ce qu'il signifie dans Ed.  Je garde ^ $ .[] + * ? et {m, n} comme interprété par Perl, suivant la description de la page du manuel de perlre.  Cependant, si * est le premier caractère, il est traité comme le caractère étoile.  Ceci s'explique, par le fait qu'il n'y a aucun caractère précédent à modifier.  Certaines versions de ed font ainsi, mais pas toutes.  Mais je le trouve commode ; quand je veux remplacer * + ou ? , je n'ai pas besoin de les échapper, juste parce que ce sont des modificateurs.  De même, une parenthèse ouvrante est traitée comme un littéral.  Ces changements à regexp, pour ressembler à ed, peuvent vous gêner si vous êtes expert de Perl.  Désolé pour cela, mais je pense que ces changements facilitent l'utilisation de l'éditeur, surtout pour les utilisateurs de ed expérimentés.  Ci-dessous quelques différences supplémentaires entre ce programme et /bin/ed. 

Les sections suivantes décrivent de nouveaux dispositifs, totalement étrangers à ed.  Ceux-ci incluent l'édition simultanée de fichiers comme dans emacs et vi, la navigation dans un document HTML et « l'édition» des formulaires de saisie.  C'est la raison pour laquelle j'ai développé ce programme. 

Equilibrage des parenthèses

La commande B majuscule intéresse les programmeurs, et ne sera pas probablement pas employée par les autres utilisateurs.  Elle localise la ligne avec une parenthèse, une accolade, ou un crochet.  Exemple:

  
if(x == 3 &&
  y == 7) {
    printf("bonjour\n");
  } else {
      printf("monde\n");
      exit(1);
  }

La commande B majuscule, sur la deuxième ou dernière ligne, se déplace à la ligne du milieu « } else { », laquelle équilibre l'accolade ouvrante de la ligne 2 ou l'accolade fermante de la dernière ligne.  Sur la première ligne, B se déplace à la deuxième ligne, équilibre la parenthèse ouverte.  La deuxième ligne équilibres {, plutôt que ), parce que les accolades ont la priorité sur les parenthèses, qui ont la priorité sur les crochets.  Vous pouvez forcer un match de parenthèses par « B) ». 

La commande B sur la ligne du milieu est ambiguë - je ne sais pas s'il faut regarder en arrière ou vers l'avant.  Tapez plutôt « B{« ou « B} ». 

Vous pouvez explicitement équilibrer le <>, pour les tags multilignes de HTML, ou «`», utilisé dans des certains préprocesseurs tels que m4. 

Des commentaires ou des chaînes littérales contenant des ponctuations ouvrantes/fermantes vont faire sortir edbrowse de ses gonds. si vous êtes l'auteur du source, essayez d'éviter des parenthèses dans les commentaires, ou bien équilibrez les parenthèses dans un commentaire.

static char openstring[] = "{block"; /* parenthèse } fermante ici en commentaire */

Changement de contexte

Ce programme permet l'édition simultanée de fichiers multiples, et autorise le transfert de texte entre eux. C'est semblable aux terminaux virtuels (Linux), où vous changez de session par l'intermédiaire d'alt-f1, alt-f2, jusqu'à alt-f6.  Ici, vous basculez sur une session d'édition différente par l'intermédiaire des commandes « e1 », « e2 », jusqu'à « e6 ».  Notez que « e 2 » (avec un espace entre e et 2) édite le fichier dont le nom est « 2 », tandis que « e2 » (sans espace) bascule sur la session 2.  De même, vous pouvez lire le contenu de la session 3 dans le tampon courant en tapant « r3 », et vous pouvez sauvegarder le tampon courant dans la session 5 par l'intermédiaire de « w5 ».  La dernière commande vous avertira si la session 5 existe déjà, et vous avez modifié son contenu sans l'avoir sauvegardé.  En d'autres termes, vous êtes sur le point de perdre votre travail en session 5.  Taper « h » vous expliquera : « 'w' attendu sur la session 5 ». 

Si vous quittez une session, vous allez à la prochaine session d'édition valide, revenant à la session 1 si besoin.  La sortie du programme s'effectue lorsqu'on quitte la dernière session. 

Attention, le programme contient un bogue concernant la commande « undo » (annuler).  Si vous changez de session, puis revenez en arrière, vous ne pourrez pas annuler vos derniers changements.  On peut penser qu'il est facile de corriger cette bogue, mais c'est plus subtil qu'il n'y paraît, je n'y ai donc pas touché.  J'ai simplement voulu vous en avertir.  Assurez-vous que tout est correct avant de changer de session. 

Voyons un exemple de copier/coller.  Vous éditez le fichier « essai » en session 1, et vous vous rendez compte qu'un paragraphe du fichier « toto » s'adapterait parfaitement bien ici.  Voici comment cela pourrait se présenter.  Les lignes commençant par « < » sont l'entrée de l'utilisateur, et des lignes commençant par « > » sont les réponses du programme.  Le signe « # » représente mes commentaires, qui normalement n'apparaîtront pas au milieu d'une ligne. 


< e2 # bascule sur la session 2
> new session # nouvelle session
# contrairement à ed, la commande « r » ne crée pas un nouveau fichier, 
# même si le tampon est vide. 
# ainsi, « r toto» est plus sûr que « e toto ». 
# après tout, nous ne voulons pas modifier toto, 
# nous voulons juste y voler quelque chose. 
< r toto
> 28719 
< /start/ 
> ceci est le début du joli paragraphe que vous voulez copier. 
< 1,-d # on n'a pas besoin de ce qu'il y a avant 
< /end/ 
> ceci est la fin du joli paragraphe que vous voulez copier. 
< +,$d # on n'a pas besoin de ce qu'il y a après 
< e1 
> essai 
< r2 
> 3279 # taille du texte lu de la session 2 
< q2 #, on fait le ménage, en se débarrassant de la session 2 
< W # sauvegarde de essai, avec le nouveau paragraphe inclus 
> 62121 

Ci-dessous, comment transférer une portion de texte d'un fichier à un autre


< e2 
> new session # nouvelle session
< e toto # cette fois je vais modifier le fichier
> 28719 
< /start/ 
> c'est le début du joli paragraphe frais que vous voulez déplacer. 
< ka # marque le paragraphe 
< /end/ > ceci est la fin du joli paragraphe que vous voulez déplacer 
< kb 
< 'a,'bw3 
> 3279 
< 'a, 'bd 
< w # sauvegarde toto sans le joli paragraphe
> 25440 
< q 
> no file # aucun fichier, on est maintenant en session 3 
< e1 
> essai # de retour en session 1 
< r3 
> 3279 
< q3 on arrête la session 3, bien qu'étant toujours en session 1 
< w # sauvegarde de essai, avec le nouveau paragraphe inclus 
> 62121 

La commande « e », indique la session courante, au cas où vous l'oublieriez.  Elle ressemble à la commande « f, » ,qui indique le fichier courant. 

Utilisation

Tapez « edbrowse -h » pour lire les conseils d'utilisation.  Vous verrez les options « -f », « -fm », et « -m »,utilisées de différentes manières.  Ignorez-les pour l'instant.  Ces trois options lancent edbrowse en tant que client interactif de courrier.  Nous y reviendrons. 

L'option « -dx » place le niveau de déboguage à x, où x est entre 0 et 9.  Le défaut est « -d1 », qui affiche les tailles des fichiers lorsqu'ils sont lus ou sauvegardés.  Certains préfèrent « -d2 », qui affiche l'URL lorsque vous allez à de nouvelles pages Web ou remplissez des formulaires en ligne.  À moins que vous vouliez déboguer le programme, vous n'irez probablement pas plus haut que « -d3 ».  A de rares occasions, vous pourriez employer « -d4 », pour afficher les en-têtes HTTP entrantes et sortantes.  Rappelez-vous, le niveau de déboguage peut être modifié en cours en employant la commande « dbx » (x entre 0 et 9). 

L'option « -e » force edbrowse à quitter en cas d'erreur.  Ceci est habituellement employé par des scripts de traitements par lots.  S'il y a un problème, vous ne voudriez pas continuer ainsi en exécutant le reste des commandes de edbrowse. 

Utilisez « -c » pour désactiver et éditer, le fichier de configuration « .ebrc ».  (Ce fichier de config sera décrit plus tard).  Pourquoi le faire? Supposez que vous avez modifié ce fichier, avec une erreur de syntaxe, de telle sorte que edbrowse ne puisse même pas démarrer.  Vous ne pourriez plus employer edbrowse pour fixer votre fichier de configuration.  Naturellement vous pourriez renommer le fichier de configuration, fixer l'erreur, et revenir en arrière ; mais alors vous pourriez découvrir une autre erreur de syntaxe, et ainsi de suite.  Au lieu de cela, l'option « -c » permet d'éditer le fichier de configuration directement.  Il est automatiquement chargé dans le tampon 1.  Noter que « -c » doit être la première option. 

Les arguments sont les fichiers à éditer.  Edbrowse lit ces fichiers dans les sessions correspondantes, et vous commencerez en session 1.  S'il n'y a aucun argument, vous commencez en session 1, mais il n'y a aucun texte et aucun fichier associé. 

Si vous aimez ce programme, et vous voulez qu'il soit votre éditeur principal, vous pouvez placer l'alias Unix suivant :

alias e= " /usr/bin/edbrowse "

Si vous le faites, vous pouvez employer «e nom_de_fichier», pour éditer un nouveau fichier, que vous soyez dans edbrowse ou dans le shell Unix.  Très commode. 

Caractères binaires

À tout moment, même lorsqu'on tape un nom de fichier, le programme balaye l'entrée à la recherche de codes binaires.  Désolé, mais je préfère l'hexadécimal à l'octal.  Je sais que ce n'est pas standard, mais c'est comme çà.  Employez la séquence triple « ~bd » pour écrire le caractère non-ASCII 0xbd, code de « 1/2 ».  De même, si vous listez une ligne, avec la commande « l », le caractère « 1/2 » est affiché « ~bd ».  Tout ce qui non ASCCI et la plupart des caractères de contrôle sont tapés et affichés de cette manière.  La tabulation et le retour-chariot doivent être tapés directement au clavier.  Tabulation et retour arrière sont affichés respectivement « > » et « < ».  Si la ligne suivante est tapée,

« Hello~07 ~x is ~bd of y »

Et ensuite listée, vous verrez ce texte, mais il y a un bip sonore et « 1/2 » à l'intérieur.  Le ~x n'est pas codé , parce que x n'est pas un caractère hexadécimal.  Si vous voulez forcer un ~, même s'il y a des caractères hexadécimaux qui suivent, employez deux tildes, « ~~ ». 

Quand vous tapez une expression régulière, vous avez le choix, hexadécimal ou octal.  Ce programme convertit « ~xx » en hexadécimal, et la machinerie regexp de Perl convertit « \nnn » en octal.  Ainsi, les commandes qui suivent annuleront les fins de lignes DOS d'un fichier.  La première est traduite par mon programme, la deuxième et troisième par le regexp de Perl. 


,s/~0d$//
,s/\15$//
,s/\r$//

Les caractères échappés sont toujours affichés en hexadécimal, que la ligne soit listée ou non.  La plupart des terminaux et des émulateurs de terminal, y compris la console Linux et mon adaptateur de parole, interprètent les séquences d'échappement comme des commandes .  Ainsi une séquence d'échappement présente dans un fichier binaire peut mettre votre terminal ou votre adaptateur de la parole dans un état inattendu, rendant le rétablissement difficile.  Il semble prudent d'afficher en permanence les caractères échappés comme caractères visibles.  Si vous n'avez aucune idée d'où ce « ~1b » est venu, c'est probablement un caractère littéral échappé. 

Les retours-chariots et les caractères nuls sont également convertis en hexadécimal.  Ainsi une ligne contenant un retour-chariot n'apparaîtra pas comme deux lignes.  Vous le verrez en important un fichier texte de DOS.  Chaque ligne finit par « ~0d ».  Tapez une des trois commandes ci-dessus pour effacer ces fins de lignes DOS. 

fichiers binaires

Un fichier est considéré comme binaire s'il dépasse 50 octets et s'il contient une proportion significative de caractères non-ASCII ou nuls (plus de 25%).  Les fichiers texte internationaux peuvent contenir des codes binaires dispersés, pour les lettres accentuées etc., mais la plupart des caractères devraient être en ASCII.  Par conséquent les fichiers binaires ne sont pas des fichiers texte internationaux.  En fait vous ne pourrez pas probablement afficher ou éditer des données binaires efficacement, au moins par ce programme. Mais ne vous laissez pas arrêter.  A titre d'exercice, créer un programme exécutable affichant « bonjour monde», puis éditez l'exécutable en utilisant ce éditeur.  Rechercher la chaîne « bonjour » et remplacer « monde » par « tonte ».  Sauvegardez le fichier et relancez l'exécutable.  Vous devriez maintenant voir « bonjour tonte ». 

Quand des données binaires sont lues dans le tampon, vous verrez les mots « données binaires ».  Le tampon reste « binaire », même si vous supprimez toutes les données pour les remplacer par de l'ASCII.  Vous devez employer la commande « e » pour obtenir un nouveau tampon ASCII. 

Pour la plupart d'entre nous, il n'importe pas vraiment si les données sont considérées binaires ou ASCII.  Dans l'un ou l'autre cas, vous pouvez afficher et éditer les données, et les sauvegarder dans un fichier. 

Ce programme essaie « de se comporter correctement » sous DOS/Windows.  C'est-à-dire, il convertit les crlf et retours-chariots s'il pense que le fichier est un fichier texte ; et il laisse des données binaires intactes.  Ces distinctions sont sans objet sur Unix/Linux. 

Bien que cette approche soit satisfaisante pour l'anglais et la plupart des langues européennes, elle échoue misérablement pour les langues asiatiques, très semblables aux données binaires.  Vous pouvez neutraliser la détection binaire en tapant la commande « bd ».  Si vous parlez une langue asiatique, mettez cette commande dans votre script d'init, ainsi edbrowse est lancé de la manière que vous voulez - traiter vos fichiers internationaux comme fichiers textes. 

Si vous parlez une langue asiatique, employez Windows, et si la détection binaire est désactivée, n'employez pas ce programme pour travailler sur des fichiers binaires, car ils seront corrompus!

Listing de répertoire, gestionnaire de fichiers

Si vous parcourez un répertoire, vous verrez une liste de tous les fichiers non cachés de ce répertoire, dans l'ordre alphabétique.  (Employer l'option «hf» si vous voulez également voir les fichiers cachés).  Tapez « g » pour aller à un de ces fichiers ou sous-répertoires.  Tapez « ^ » pour revenir au répertoire parent.  (Notez, g est la commande «go», et « ^ « est la touche retour arrière ; nous y reviendrons).  Vous pouvez traverser ainsi un arbre entier de répertoire comme si vous étiez à l'intérieur d'un gestionnaire de fichiers. 

Comme « ls -F », un sous-répertoire est indiqué par un slash de fin.  Ce slash ne fait pas partie du nom de fichier.  De même, le caractère appelé pipe est indiqué par « | », le lien symbolique par « @ », fichier bloc par « * », le caractère spécial par « < », et un socket par « ^ ».  Si le nom d'un fichier finit par un de ces caractères, il peut vous induire en erreur, mais pas le programme.  Edbrowse sait si « | » fait partie du nom de fichier ou si c'est un indicateur de pipe.  Puisque chaque fichier est représenté par une seule ligne du texte, edbrowse ne peut accéder à des fichiers contenant des caractères retour-chariot dans leur nom. 

Si vous lisez un répertoire dans un fichier préexistant, c'est juste du texte.  Vous ne pouvez pas visiter ces fichiers, parce que ce sont juste des mots.  Vous devez afficher un répertoire dans une session propre ou lire un répertoire dans une session vide si vous voulez accéder aux fichiers.  Noter que vous pouvez sauvegarder le tampon dans une autre session d'édition, et de ce fait, dans cette session les mots seront juste des mots.  Cette distinction est importante dès que l'on commence à éditer du texte. 

Par défaut, les répertoires sont en lecture seule.  Si vous essayez de supprimer une ligne, et par conséquent le fichier associé, on vous indiquera que vous êtes toujours en mode lecture de répertoire.  J'essaye de vous sauver de vous-même ! Tapez « dw » pour permettre l'écriture dans un répertoire, et « dr » pour rendre le répertoire à nouveau en lecture seule. 

Quand un répertoire est en lecture/écriture, on peut supprimer des fichiers en utilisant la commande « d ».  Par exemple, « g/\.o$/d » supprime tous les fichiers objets.  Puisque ces manipulations ont des effets en dehors de ce programme, il n'est pas possible de revenir en arrière.  Quand vous faites un changement, c'est fait.  Ayant cela à l'esprit, j'ai emprunté une bonne idée de Microsoft / Apple.  Le fichier supprimé n'est pas supprimé réellement ; il est déplacé dans votre corbeille, située dans « $home/.Trash ».   (Ceci est consistant avec le Mac et beaucoup de versions de Linux.)  Ainsi si vous tapez accidentellement « ,d » et enlevez tous vos fichiers, vous pourrez les récupérer dans la corbeille.  Il est possible de programmer « cron » pour supprimer tous les fichiers de la corbeille une fois par semaine.  Ce répertoire est créé avec le mode 700, ainsi personne d'autre que vous ne peut regarder ce qu'il contient.  Si vous créez ce répertoire vous-même, mettez-le en mode 700.  Après tout, certains de vos fichiers peuvent être privés. 

Puisque cette opération est un mouvement, plutôt qu'un effacement vrai, il y a quelques restrictions provenant de votre système d'exploitation.  Si votre OS peut déplacer des répertoires, ce programme pourra supprimer un sous-répertoire aussi facilement qu'un fichier.  Le sous-arbre entier est déplacé dans la corbeille.  Assurez-vous que le cron de nettoyage est capable d'enlever des répertoires, et pas seulement des fichiers. 

Si la corbeille est sur un autre système de fichiers, le fichier est copié, plutôt que déplacé. Pratiquement, c'est la même chose; ainsi, le fichier aura les mêmes permissions, et l'heure courante de création. Les répertoires ne peuvent être copiés par ce moyen. Vous devrez copier un répertoire par vous-même, puis le supprimer, en utilisant cp -r et rm - r.

Notez que la commande dx, qui supprime réellement des fichiers, est le seul moyen de faire de la place sur le disque. Les liens symboliques et les fichiers spéciaux sont toujours supprimés : il n'y a pas beaucoup de sens à déplacer un lien symbolique dans la corbeille. 

« Pourquoi tout ceci ? » pourriez-vous demander.  « Qu'est-ce qui ne va pas avec le shell? »

Rien, tant que les noms de fichier sont petits et familiers.  Mais parfois les noms de fichier sont longs et incompréhensibles, et il est presque impossible de taper ces noms dans le shell, caractère par caractère, majuscule et minuscule, sans erreurs.  Les méta-caractères tels que * peuvent aider, mais seulement quand le fichier qui vous intéresse a un nom radicalement différent des autres fichiers du répertoire.  Ce n'est pas toujours le cas.  Supposez qu'une application produit des fichiers de log comme suit :

ProgramFooBar.-04-04-1998.06:31:59.log
ProgramFooBar.-04-11-1998.11:37:14.log
ProgramFooBar.-04-18-1998.16:22:51.log

Comment supprimer les vieux fichiers pour ne garder que le plus récent, ou les renommer sous un nom plus explicite ? Le caractère « * » est un peu risqué ; vous risquez de modifier tous les fichiers sans le réaliser.  Et ne parlons pas de ces fichiers embêtants avec les espaces ou qui ont des caractères de contrôle invisibles dans leurs noms.  Notre ami voyant appelle son gestionnaire de fichiers et clique simplement sur le fichier qu'il veut regarder ou éditer ou supprimer.  Parfois je veux/j'ai besoin de ce genre de puissance. 

Quand la commande de remplacement modifie le contenu, elle renomme le fichier original.  Ce dernier ne sera donc pas écrasé.  Vous ne perdrez aucune donnée.  Encore une fois, je vous protège de vous-même. 

Les commandes de recherche et de remplacement ignorent le caractère « / » de fin.  Si vous voulez renommer le répertoire « mont/ » en « montagne/ », tapez « s/$/agne/ ».  « agne » sera ajouté à « mont » parce que le caractère « / » n'est pas vraiment là. 

Supposons maintenant que vous voulez exécuter un programme quelconque sur certains de ces fichiers.  Ceci pourrait être un utilitaire d'impression, un compilateur, etc.  Parfois vous voulez renommer les fichiers à votre convenance, pour travailler dans le shell.  Mais parfois vous n'êtes pas propriétaire de ces fichiers, et parfois ils doivent garder leurs noms originaux.  Par exemple, plusieurs documents de HTML reliés entre par des hyperliens, en utilisant leurs noms de fichier existants.  Ici, vous ne pouvez pas renommer les fichiers, pourtant vous voulez toujours exécuter votre programme sur un ou deux d'entre eux. 

Vous pouvez exécuter n'importe quel programme sur n'importe quel fichier sans retaper ce nom de fichier en appelant un shell.  Utilisez « kx » pour affecter l'étiquette X au fichier qui vous intéresse.  (c'est la syntaxe ed standard).  Lancez ensuite « !programme 'x » pour appeler ce programme sur ce fichier.  Ceci semble compliqué, mais c'est en fait une simple macro de substitution, programmée en quelques lignes de code.  Si 'x est présent dans une commande shell, et n'est pas suivi ou précédé de chiffres ou lettres, il est remplacé par le texte présent sur la ligne étiquetée x.  Si votre nom de fichier contient les espaces, tapez '!programme « 'x », pour assurer que le nom de fichier entier est l'argument du programme appelé. 

Le token « '. » est remplacé par le contenu de la ligne courante, et le token « '_ » est remplacé par le nom de fichier courant.  Si vous essayez de sauvegarder un fichier en lecture seule, vous pouvez autoriser l'écriture en tapant « !chmod +w '_ », puis sauvegarder votre texte. 

Vous pouvez expanser des tokens multiples dans une commande shell.  Employez « kx » et « ky » pour étiqueter deux fichiers que vous voulez comparer, et lancez alors « !diff 'x 'y ». 

Ce dispositif n'est pas limité aux parcours de répertoire.  Vous pouvez éditer un fichier simple, mais vous pouvez encore coller le contenu d'une ligne dans votre commande shell.  Je ne sais pas pourquoi vous voudriez faire ceci, mais c'est possible. 

Majuscules et minuscules

La commande « lc » convertit une ligne en minuscules, et « uc » en majuscules.  Les utilisateurs de Perl reconnaîtront ces commandes.  Par extension, « mc » convertit en casse mélangée, mettant en majuscule la première lettre de chaque mot, et le « d » de « mcdonald. 

C'est particulièrement utile dans un parcours de répertoire.  La dernière chose qui doit préoccuper une personne aveugle est de se demander si certaines des lettres dans un nom de fichier sont majuscules.  Si on peut écrire dans le répertoire, taper « lc » convertira tous les noms de fichier en minuscules. C'est tout simple. 

Si vous voulez mettre en majuscules un mot particulier, tapez « s/mot/uc/ ».  Ceci convertit le mot en majuscules.  Tous les autres suffixes de substitution s'appliquent.  Pour changer foo, Foo, FOo, FOO en FOO, partout, tapez « ,s/\ bfoo\b/uc/ig ». 

Fin de ligne

La commande « bl » découpe la ligne courante en phrases et expressions, chacune d'environ 70 caractères de long.  Elle comprime les espaces et supprime les espaces en fin de ligne.  Si la ligne contient les caractères retour-chariot, ceux-ci sont transformés en séparateurs de ligne - endroits où la ligne sera certainement coupée.  Les seuls espaces préservés sont les étiquettes ou les espaces en début de ligne, ou après chaque caractère retour-chariot.  C'est une modeste tentative pour maintenir le texte indenté, à supposer que ce soit raisonnable.

J'utilise ce dispositif de deux manières différentes.  Si je connais bien le document, (je l'ai probablement écrit), je peux employer la commande bl sur une ligne du texte qui semble plutôt longue.  Je l'ai tapée rapidement, sans m'interrompre, et maintenant je veux la découper.  Mais je ne veux pas compter les signes de ponctuation et me dire, « j'ai besoin d'une coupure après la troisième virgule et le point suivant 'cela' et puis à la prochaine virgule », utilisant sans cesse la commande de ponctuation « s ».  Oh j'aime bien la commande « s » - qui me donne le contrôle complet - mais il est plus facile de taper « bl » - et « bl » fait habituellement la bonne chose.  En outre, le bl comprime les doubles espaces accidentels, une faute de typographie que je n'entendrai jamais si je lis simplement la ligne en entier. 

Quand le document est importé, habituellement d'un traitement de texte tel que Word, « bl » remplit une fonction complètement différente.  Les paragraphes sont souvent stockés sur une ligne physique simple.  Parfois le document entier ne comporte qu'une seule ligne, avec le caractère de retour « \r » séparant les paragraphes.  Les traitements de textes « wysiwyg » ne s'occupent pas de séparer les phrases et expressions - le retour automatique à la ligne s'en chargeant.  Bien, « bl » est notre version de retour automatique à la ligne.  Il n'essaie pas de se conformer à un écran ; il coupe simplement le texte en morceaux maniables, chaque morceau étant une unité sémantique séparée.  Quand « bl » est lancé, les lignes physiques contiendront des phrases ou des expressions, délimitées par la ponctuation, ou par le caractère retour-ligne/retour-chariot. 

Si l'une des lignes originales, délimitée par un retour-ligne ou chariot, est longue, c'est-à-dire plus de 120 caractères, on suppose que c'est un paragraphe d'un seul tenant, et on ajoute un interligne avant et après. Ainsi un paragraphe découpé contenant 20 phrases n'est pas fusionné au prochain paragraphe contenant 18 phrases supplémentaires. Une ligne vide sépare les deux paragraphes. Ceci est seulement applicable si « bl » est appliqué à un ensemble de lignes, ou le document entier. 

Ne pas appliquer la commande « bl » à une section préformatée, telle qu'une table ou de l'ASCII art. Si vous n'êtes pas sûr du résultat, ne sauvegardez pas le fichier, parcourez-le, et appliquez « bl » aux seules lignes de texte.  Souvent c'est le document entier (,bl). Les commandes suivantes font un très bon travail de nettoyage d'un document typique de Microsoft Word. 

e fichier.doc ou fichier.wps
# changez le nom de fichier, pour ne pas écraser l'original
f _
,s[~80-~ff~00-~0c~0e-~1f]//g # supprime les codes de formatage ou de contrôle
g/^\s*$/d # lignes vides contenant habituellement des codes non ASCII
bl, séparer les lignes et paragraphes
1,20p # premières souvent inutiles, mais ensuite le texte commence. 

Naturellement le programme « catdoc » fait un meilleur travail de conversion des documents Word.  Il est souvent couplé avec « xls2cvs ».  Ces programmes sont un must pour les personnes qui veulent un environnement en ligne de commande. 

Comportement

Supposez que vous sauvegardiez un fichier, et edbrowse tronque le fichier existant, puis l'ordinateur plante avant que edbrowse puisse écrire les nouvelles données.  Quand vous rallumez l'ordinateur, votre fichier est vide, zéro octets, et tout votre travail est perdu. 

C'est une fenêtre étroite : l'ordinateur plante précisément à la milliseconde où il ne faut pas.  Pour se garder de cette improbable calamité, quelques éditeurs écrivent vos donné