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 ignorons 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.
Si Edbrowse n'est pas fourni par votre distribution, il existe une version en Perl, avec des fonctionnalités moindres, que vous pouvez utiliser sur n'importe quel ordinateur : Linux, Unix, Mac, Windows, etc. Essayez Edbrowse.pl, et si vous l'appréciez, vous pourrez récupérer le package git et compiler les sources pour construire la version C complète.
Si vous êtes un utilisateur de Linux, et que votre distribution de fournisse pas Edbrowse, vous pouvez - bien sûr - utiliser la version Perl mentionnée ci-dessus, mais vous pouvez égalemnt utiliser la version complète en C, en évitant les tracas de la compilation. Des versions liées statiquement pour les architectures 32 bits et 64 bits sont maintenues sur la home page d'Edbrowse.
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.
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. En fait, chaque lettre tient sur 7 bits; le huitième bit, non utilisé, est mis à 0. Ce système est appelé ASCII et, comme vous pouvez le voir, il est spécifique à l'anglais.
Les langues 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. Sélectionnez votre page de codes, et toutes les lettres de vore langue tiennent sur un octet. C'est le standard iso8859, rétro-compatible avec l'ASCII. En d'autres termes, z est 122 en ASCII et dans toutes les pages de codes iso8859-x, mais les codes plus élevés, au-dessus de 127, peuvent représenter des lettres différentes dans des langues différentes.
Ceci a fonctionné pendant longtemps, mais que se passe-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 au milieu du 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 caractères sur un seul octet, est connu sous le terme utf8, lequel est devenu le nouveau standard dans l'industrie informatique. Les logiciels n'ont plus à sélectionner une page iso8859 et assigner des nombres aux lettres dans un synthétiseur vocal. Ainsi, dans votre ordinateur, ñ est représenté par deux octets, et non un seul. 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 iso8859 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". Positionnez la variable d'environnement LANG pour interagir avec Edbrowse dans votre langue. Les langues acceptées sont listées ci-dessous. Si vous pouvez traduire Edbrowse dans d'autres 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 Casarin Uliana
Polonais: LANG=pl_pl par Wojciech Gac
Allemand: LANG=de par Sebastian Humenda
Lorsqu'un message d'erreur est affiché, les lettres accentuées sont affichées sur un octet, c'est-à-dire en iso8859, à 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. 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 à $LANG. Gardez à l'esprit que utf8 est devenu le standard, et Edbrowse ne pourra plus afficher de texte ou des messages d'erreur en iso8859 dans quelque temps. En d'autres termes, iso8859 est obsolète.
Si Edbrowse lit un ancien fichier, c'est-à-dire qu'il le charge dans un tampon vide, et qu'il soit codé en iso8859, alors que votre ordinateur est configuré en UTF-8, ce fichier est alors 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 iso8859. 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ées, sous un nouveau nom de fichier, il restera 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", alors que le fichier n'est pas du texte internationalisé, 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. La recherche de ni.o fonctionnera de nouveau. Pour désactiver temporairement l'utf8 dans la recherche/remplacement, 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
Quitter le programme
q : quitte la session couranteEntrées
rl : utilise readline() en entrée (bascule)Affichage des lignes dans le tampon
p : affiche la ligne couranteMessages d'aide
h : aide, explique le dernier point d'interrogation H : affiche tous les messages d'erreur (bascule)Recherche et remplacement
s/x/y/ : remplace x par y dans la ligne couranteFichiers et sessions
f : affiche le nom du fichier courantEdition de texte, très semblable à ed
u : annuler la dernière commandeParcours de répertoire
dr : le répertoire est en lecture seuleParcourir un fichier html ou une page web
b : navigue dans le fichier courant, considéré comme étant du HTMLTéléchargements FTP ou HTTP
pdd : indicateur d'avancement du téléchargement indiqué par des pointsInteragir avec une page Web
g : suit le lien sur la ligne couranteClient Mail
sm : envoie le courrier [le numéro de compte]Plugins
pb : joue le tampon (typiquement de l'audio)Accès aux bases de données
ds=source,login,password : définit la source de donnéesFonctions Edbrowse
<foo arg1 arg2 ... appel de la fonction foo, définie dans votre fichier .ebrcDeboguage
db3 : niveau de déboguage (de 0 à 7)Si vous découvrez ed, vous pouvez trouver ce programme malcommode. Il semble vous obliger à utiliser des numéros de ligne, lesquels se modifient toujours en cours d'édition de texte. Cependant, les numéros de lignes sont rarement nécessaires en pratique. Voici quelques astuces pour s'en passer.
Pour lire le document entier, tapez ',p'.
Evidemment, un long document débordera de l'écran, 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.
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. Par exemple, utilisez '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.
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 importante fonctionnalité de Edbrowse.
Super ! Vous avez lu la page de man 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.
A la différence de bash, Edbrowse ne revient pas en arrière par des liens symboliques. Ainsi «..» est toujours le répertoire parent physique.
Si une chaîne contient $ [] * ? ou est précédée d'un ~, les variables d'environnement et les caractères méta sont expansés. Ainsi, «cd ~/documents» vous amène dans le répertoire «documents» de votre répertoire personnel.
Cette commande ne change aucun nom de fichier actif. Vous pouvez éditer le fichier foo, faire « cd.. » , et sauvegarder : foo sera enregistré dans le répertoire parent. Cela n'est probablement pas ce que vous vouliez, c'est pourquoi faites bien attention.
Les caractères meta du Shell sont également expansés, le résultat étant un nom de fichier. Vous pouvez lire ou sauvegarder un fichier en ne tapant qu'une partie de son nom. Ni $variables ni le caractère étoile ne sont expansés par Edbrowse, puisque cette expansion est effectuée par le shell d'Unix. Les utilisateurs de Windows devraient compiler Edbrowse en utilisant « setargv.obj, » qui permet l'expansion sur la ligne de commande . Ainsi vous devriez pouvoir éditer *.c sur n'importe quel système d'exploitation et obtenir tous les fichiers source C dans le tampon courant.
La substitution de variable et l'expansion de noms de fichiers peuvent être totalement supprimées en faisant précéder l'expression par l'apostrophe arrière. Si vous voulez réellement lire un fichier appelé *a?, tapez r `*a?. Vous pouvez échapper un caractère isolé meta du shell avec un slash arrière, comme dans jolie\*maison.
s/bonjour/bon-\njour ».
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.
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. Sur la première ligne, B se déplace à la deuxième ligne, qui équilibre la parenthèse ouverte. La deuxième ligne équilibre {, 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) », laquelle revient de la ligne 2 à la ligne 1.
La commande B sur la ligne du "else" 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 dans le commentaire */
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.
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 soyez un développeur, vous n'irez probablement pas plus haut que « -d3 ». 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.
« 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 t