Documentation Edbrowse
Description: documentation Edbrowse, un éditeur orienté texte, un navigateur, et un client de courrier électronique.
Keywords: orienté texte, ligne de commande, interactif, éditeur, navigateur, client mail, client irc, portable, C, Javascript, securité, ssl, aveugle, script, accessible, accessibilité

# Documentation Edbrowse, guide de l'utilisateur

Disponible aussi en anglais.

# Table des matières

- Préface
- Guide de référence rapide
- l'Editeur
- Navigateur Web
- Javascript
- Scripts d'Edbrowse et le fichier de configuration
- Client de courrier
- Client IRC
- Accès aux bases de données

# Chapitre 1, Préface

- Mainteneur
- Auteur
- Copyright
- Avertissement
- Remerciements
- Vue d'ensemble
- Autres langues

## Mainteneurs

Le site de Edbrowse est Edbrowse.org. Le projet est maintenu par un ensemble de personnes de l'organisation edbrowse à github.com. , Vous pouvez contacter les mainteneurs ici.

## Auteur

Karl Dahlke a écrit la première version de Edbrowse en perl, en 2001, et reste le principal développeur du projet. Consultez le répertoire des fichiers pour un aprçu de l'historique du projet.

## Copyright

Ce programme est copyright © Karl Dahlke (et d'autres auteurs et contributeurs), 2001-2025. Il est mis à disposition par les auteurs 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.

## Avertissement

Edbrowse est fourni tel quel, sans garantie de fonctionnement dans tous les cas. Il peut effacer vos précieux fichiers. Il peut envoyer des données erronées sur l'Internet, provoquant l'achat d'un éléphant à 37000 dollars au lieu de fournitures d'impression à 37 dollars. Il peut effacer toutes les lignes de votre table mysql clients. C'est un projet développé par des bénévoles sur leur temps libre, qui (en principe) ne peut atteindre la qualité et la rigueur des logiciels institutionnels ou gouvernementaux. En utilisant ce programme, vous l'acceptez en l'état.

## Remerciements

Chris Brannon a fourni orientation, conseils et programmation dès le tout début, y compris le premier prototype en perl. Il a intégré curl dans edbrowse, et l'a connecté au cache web et au réceptacle à cookies. Adam Thompson a porté l'interface Javascript de C à C++, portage requis par les versions 2 de Mozilla JS, et il continue à superviser l'architecture générale du projet. Kevin Carhart a déchiffré les mystères de jquery, et mis à jour le DOM pour l'implémenter. 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 e 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.

Les fonctionnalités de Edbrowse:

- Edbrowse peut éditer de multiples fichiers ou naviguer dans de multiples sites web simultanément, et transférer des portions de texte entre eux à la manière d'un copier-coller. Par exemple, `edbrowse *.c` accède à tous les fichiers sources C du répertoire courant.

- Les expressions régulières de ed ont été remplacées par les expressions régulières compatibles Perl, plus puissantes et plus flexibles. Ceci facilite les opérations de recherche/remplacement de texte dans un document long. Vous pouvez, par exemple, remplacer chaque instance du mot foo, mais pas food ou foot, seulement foo, en majuscles ou en minuscules, avec le mot bar, tant que foo n'est pas suivi d'un point d'exclamation ou d'interrogation, en utilisant la fonctionnalité "lookahead" de Perl.

  ,s/\bfoo\b(?![!?])/bar/ig

  Ces modifications dans les expressions régulières indiquent que Edbrowse n'est pas à 100% compatible avec ed, bien que très proche.

- Edbrowse peut récupérer une page web de l'Internet aussi facilement qu'il ouvre un fichier de l'ordinateur local, en utilisant hht, hhtps, ftp ou gopher. Dès que la page est chargée dans le tampon courant, elle peut être naviguée ou affichée en texte brut, par la commande b. Ceci ajoute une autre commande aux commandes en une lettre déjà présentes dans ed. Si la page est en mode navigation, on peut suivre les hyperliens, remplir ou soumettre des formulaires.

- L'option -fm lance edbrowse en client mail interactif. Elle récupère le courrier d'un ou plusieurs comptes pop3 et les présente un par un à l'utilisateur, où ils peuvent être lus, effacés ou sauvegardés pour usage futur. Des filtres peuvent enregistrer certains courriels dans certains fichiers, selon le sujet, l'expéditeur ou l'adresse de destination. D'autres options permettent à edbrowse d'expédier des courriers en utilisant smtp. Imap est également supporté.

- En mode base de données, Edbrowse peut accéder à des lignes et colonnes sélectionnées à travers odbc. Les commandes d'insertion, de substitution, d'effacement de Edbrowse correspondent alors aux opérations d'insertion, substitution, d'effacement d'une base de données. Cette fonction a été très bien testée sur certaines bases de données, et pas du tout sur d'autres. Parce qu'édition de texte ici a des conséquences en dehors du contexte du tampon courant, il n'y a pas de commande undo. Lorsqu'une ligne est effacée, elle disparaît, sans aucune chance de la retrouver. Par bonheur, l'intégrité référentielle évite souvent ces effacements intempestifs.

- En mode édition de répertoire, chaque ligne de texte correspond à un fichier. Ici aussi, la commande de substitution renomme un fichier, la commande d'effacement l'efface ou le déplace dans la corbeille, selon la configuration de Edbrowse. Il n'y a pas de commande undo, c'est pourquoi le déplacement d'un fichier dans la corbeille est plus sûr. Mais cette commande ne libère pas d'espace disque.

- Le fichier de configuration de Edbrowse peut contenir des fonctions, un peu comme le fichier .bashrc de Linux. Ces fonctions peuvent appeler d'autres commandes edbrowse, avec indirections et boucles basées sur le succès de ces commandes. Cet exemple simple convertit chaque x en y. Si un changement a été effectué, le fichier est sauvegardé sur disque. Le caractère * dans l'instruction if est vrai si la commande précédente est réussie.

    function+xy {
            ,s/x/y/g
            if(*) {
                    w
            }
    }

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.

## 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. En fait, chaque lettre tient sur 7 bits; le huitième bit, non utilisé, est mis à 0. Ce système est appelé ASCII, et 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 votre 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 en fonction du pays dans lequel vous vivez. Ainsi, ñ 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 se termine par utf8, et ce sera probablement le cas, alors votre console utilise utf8, et attend des séquences de 2 octets. Vos fichiers contiendront probablement ces séquences, 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. Je n'ai pas besoin d'aller plus loin, parce que Edbrowse ne supporte actuellement que iso8859 ⇔ utf8 . Les autres pages iso8859 ne sont pas supportés, et même iso8859-1 pourrait être abandonné demain, parce que utf8 est pratiquement universel.

Les sorties et messages d'erreur comme "chaîne recherchée non trouvée", ont été "internationalisés", 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 contacter les développeurs.

- Anglais: LANG=en (c'est la langue par défaut)
- documentation
- Portugais (Brésil): LANG=pt_br by Cleverson Casarin Uliana
- Polonais: LANG=pl by Wojciech Gac
- Russe: LANG=ru by Wojciech Gac
- Allemand: LANG=de by Sebastian Humenda
- Italien: LANG=it by Enrico Mioso
- Espagnol: LANG=es by Oriol Prieto

Certains messages d'edbrowse incluent la sortie de strerror, par exemple lors de l'ouverture, de la lecture ou de l'écriture de fichiers. Ces fragments de texte sont également internationalisés, si vous avez installé le module de configuration libc approprié pour votre langue. Celui-ci est probablement installé automatiquement si vous avez spécifié une langue préférée lors de la configuration du système d'exploitation. Cependant, d'autres modules de langue peuvent ne pas être présents. LANG=es_ES.UTF8 edbrowse fait que tous les messages d'edbrowse s'affichent en espagnol, toutefois, si le module espagnol de libc n'est pas installé, parce que votre langue native est l'allemand, alors la portion strerror pourrait apparaître en anglais, car c'est la langue par défaut pour strerror quand le module correspondant à LANG n'est pas présent. Cela pourrait effectivement être déroutant. Ceci dit, la plupart des utilisateurs utiliseront edbrowse de manière cohérente avec la langue de leur système d'exploitation, et ce problème ne se posera pas.

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. 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, avant que vous vous en aperceviez. Ainsi, il aura l'air normal. 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, edbrowse reconvertit le fichier dans son jeu de caractères original iso8859 et restaure les retours-chariots DOS si le fichier d'origine était un fichier DOS texte. 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. Edbrowse passe à pcre l'option qui lui dira de rechercher certaine séquence sur deux octets comme un caractère unique, et nous avons le comportement 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

Si non précisé, Edbrowse se réfère à la variable d'environnement $LANG, laquelle est positionnée sur pratiquement tous les systèmes. Ainsi vous n'aurez que rarement besoin de préciser localizeweb dans votre fichier de configuration. Si $LANG n'est pas défini, c'est de l'anglais par défaut. Edbrowse envoie toujours une désignation de langage aux serveurs web, parce que certains sites, comme amazon.com, ne fonctionnent pas correctement sans. Si vous définissez localizeweb, assurez-vous de définir avec le code de langue le code pays.

# Chapitre 2, Guide de référence rapide

- Guide de référence rapide
- Trucs pour éviter les numéros de ligne
- Liste de diffusion
- Wiki Edbrowse

## 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. Les commandes désignées "bascule" comme js pour activer ou désactiver Javascript, admettent également en suffixe un + ou un - pour activer ou désactiver explicitement la fonctionnalité. Ainsi js bascule Javascript, js+ active Javascript, et js- désactive Javascript. Les variantes + et - ne sont pas listées. Toggle affiche l'état de la fonctionnalité, activée ou désactivée, si les messages d'aide sont activés ou si le niveau de débogage est au moins à 1. Définir ou effacer un mode n'affiche le message que si les messages d'aide sont activés.

Sortir du programme

q : quitte la session courante
qt : quitte le programme complètement, que vous ayez sauvegardé vos fichiers ou non
q7 : quitte la session 7
q/foo : quitte la session dont le nom de fichier contient la chaîne foo
bw : tampon sauvegardé; vous pouvez quitter n'importe quand
bw7 : tampon écrit en session 7
bw/foo : tampon écrit en session dont le nom de fichier contient la chaîne foo
!commande : commande shell
!! : commande shell précédente
!! donnée : commande shell précédente avec donnée ajoutée
! programme "$EB_DOT" : lance programme sur le contenu de la ligne courante
! program '. : idem à ci-dessus
! program "$EB_PLUS" : lance programme sur le contenu de la prochaine ligne
! program '+ : idem ci-dessus
! program "$EB_MINUS" : lance programme sur le contenu de la ligne précédente
! program '- : idem ci-dessus
! programme "$EB_LNx" : lance programme sur le contenu de la ligne marquée par kx
! program 'x : idem ci-dessus
!program $EB_LN : accès au n° de la ligne courante
!program $EB_LINES : accès au nombre de lignes de lignes du tampon
!program $EB_SESSION : accès au numéro de session courante
! programme "$EB_FILE" : lance programme sur le nom de fichier br>! program '_ : idem ci-dessus
! programme "$EB_BASE" : utilise le fichier sans le suffixe .browse
!programme $EB_DIR : va au répertoire contenant le fichier
! : lance un shell interactif
cd répertoire : change de répertoire
pwd : affiche le répertoire de travail
config : relit le fichier de configuration

Entrées

~c2~b1 : saisir des octets en hexadécimal, dans ce cas utf8 pour plus-moins
~u1f600 : saisir un unicode en hexadécimal, dans ce cas le symbole pour sourire
~jfood.carrot : saisir l'emoji carotte du groupe alimentaire
~~ : saisir un tilde littéral, nécessaire seulement quand le caractère suivant est hex ou u ou j
P : afficher l'invite (bascule)
P=foo : définir l'invite à foo
P=*\$(:EB_SESSION) : définir l'invite pour inclure le numéro de session actuel
rl : utilise readline() sur l'entrée (bascule), respecte $HISTCONTROL

Affichage des lignes dans le tampon

p : affiche la ligne courante
4,7p : affiche les lignes 4 à 7
+3p : avance de 3 lignes et affiche
+3 : idem +3p, print est la commande par défaut
- : ligne précédente
--- : recule de 3 lignes
'a,'bp : affiche les lignes repérées par les étiquettes a et b
kb : marque la ligne courante avec l'étiquette b
0ks : désactive l'étiquette de ligne s
l : liste la ligne courante, affichant les caractères invisibles et les marqueurs de fin de ligne
endm : afficher les marqueurs de début et fin de lignes ^$ des lignes listées (bascule)
lna : affiche les caractères nonascii en hexadécimal quand une ligne est listée (bascule)
n : affiche la ligne courante avec son numéro de ligne
ll=1000 : longueur de ligne 1000, affiche les 1000 premiers caractères de chaque ligne
ll : affiche la longueur de ligne actuelle
fll=80 : format line length 80, coupe les lignes à 80 caractères, peut-être pour correspondre au terminal
fll 80+ : coupe les lignes à 80 caractères, mais autorise un dépassement d'un ou deux mots.
fll : affiche le format de la ligne (la largeur)
z22 : affiche les 22 prochaines lignes
z : affiche encore 22 lignes
= : affiche le nombre de lignes du fichier en cours
.= : affiche le numéro de ligne courante
B : trouve la ligne contenant l'accolade ouvrante ou fermante correspondante
B[ : trouve la ligne contenant le crochet fermant correspondant
B( : trouve la ligne contenant la parenthèse fermante correspondante
B{2 : trouve la ligne contenant la seconde (depuis l'intérieur) accolade non équilibrée

Messages d'aide

h : aide, explique le dernier point d'interrogation
H : affiche tous les messages d'erreur (bascule)
help : charge ce guide de référence dans un tampon pour consultation

Recherche et remplacement

s/x/y/ : remplace x par y dans la ligne courante
s/x/y : remplace x par y dans la ligne courante et affiche le résultat
s//y/ : utilise la dernière chaîne de substitution, dans ce cas x
s/x/%/ : utilise la dernière chaîne de substitution, dans ce cas y
s/x : remplace x par rien et affiche le résultat
s : répète la dernière opération de substitution
s/x/y/2p : remplace la deuxième occurrence de x par y dans la ligne courante
s2 : comme ci-dessus
s$ : s//%/$p
4,7s/x/y/g : remplace toutes les occurrences de x par y, dans les lignes de 4 à 7
s/x/y/3g : remplace x par y en commançant par la troisième instance en direction du bas
s/chien/chat/gfip : remplace chien ou CHIEN par chat dans la ligne, oublie chien et chat comme chaînes à remplacer et de remplacement, et affiche le résultat
s/a\(.\)c/a$1$1c/ : répète la lettre entre a and c
/\([ab]\)\1/ : Recherche aa ou bb, ne correspondra pas à ab ou ba
s, : remplace virgule espace par un retour-chariot, divise la ligne en deux
s. : replace point espace par un retour-chariot, divise la ligne en deux
s?2 : divise la ligne à l'emplacement du 2ème point d'interrogation
s.$ : divise la ligne à la dernière virgule
bl : découpe une très longue ligne en phrases
/x/ : recherche la ligne contenant x
/x: idem que /x/
/x/i: cherche la ligne contenant x ou X
/x/f : cherche x, mais oublie x comme chaîne de recherche
?x? : recherche x en arrière
/x/! : cherche la première ligne qui ne contient pas x
?x?i! : cherche la première ligne qui ne contient pas x ou X
ci : les recherches et les substitutions sont insensibles à la casse (bascule)
sg : les chaînes de substitution sont globales pour toutes les sessions (bascule)
su8: Utiliser utf-8 dans recherche et remplacement (bascule)
ebre : expressions régulières modifiées à la ed (bascule)
sss : rechercher des sessions similaires (sessions avec le même mode) (bascule)
sw : rechercher cyclique (bascule)
g/x/ p : affiche toutes les lignes contenant x
g/x : comme ci-dessus
v/x/ p : affiche toutes les lignes ne contenant pas x
v/x/i l : liste toutes les lignes ne contenant ni x ni X
g/x/f p : affiche chaque ligne contenant x, mais oublie x comme chaîne de recherche
g/x/ -r foo : lit le fichier foo jusqu'à une ligne contenant x
g/x/ -,.w !commande : exécute les lignes courante et précédente en'commande', pour toutes les lignes contenant x
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/foo/uc: conversion de foo en FOO dans la ligne courante
s/\bfoo\b/mc/g : convertit foo en Foo, mais pas foobar
,s/$/ %line/ : ajoute le numéro de ligne à la fin de chaque ligne

Fichiers et sessions

f : affiche le nom du fichier courant
f foo : renomme le fichier courant en 'foo'
f/ : ne conserve que la dernière partie du nom de fichier courant
f clear : efface le nom de fichier
e : affiche le numéro de la session courante
e3 : va à la session numéro 3
e+ : va à la session d'édition suivante
e- : va à la session d'édition précédente
enum : va à la session indiquée par le nombre sur la ligne courante
eret : revient à la session où vous étiez précédemment
e/foo : va à la session dont le nom de fichier contient foo
e?foo : revient en arrière à la session dont le nom de fichier contient foo
enew : crée un nouveau tampon vide dans la ssion courante
etmp : comme enew, mais sans vérifier que le fichier a été sauvegardé
e foo : édite le fichier 'foo'
^ e foo : modifie foo mais ne pousse pas la pile, remplace le fichier actuel. ^ peut aussi être ajouté en préfixe aux commandes e suivantes.
e ~/projects/edbrowse/src/buf*.c : développer les jokers s'il y a exactement une correspondance
e $EBSRC/buf*.c : expansion de variable
e !command : crée un nouveau tampon avec la sortie de la commande shell
e http://this.that.com : téléchargement http or https
e ftp://login:password@example.com/file téléchargement ftp
e scp://login:password@example.com/absolute-path téléchargement scp
r foo : lit le contenu du fichier 'foo' dans le tampon courant
r7 : lit le contenu de la session 7 dans le tampon courant
r7@3,8 : lit les lignes 3 à 8 de la session 7 dans le tampon courant
r7@-,+ : lit 3 lignes autour de . dans le tampon courant
r7@'a,'b : lit le bloc désigné dans le tampon courant
r7@100, : idem à r7@100,$
r7@, : idem à r7
r/foo : cherche la session dont le nom de fichier contient foo et l'insère dans le tampon courant
r/foo@6 : insère la ligne 6 de la session foo dans le tampon courant
r/foo@'a,'b : insère une plage de lignes de la session foo dans le tampon courant
r+1@'a,'b : lit un bloc de texte du tampon en remontant d'un niveau dans la pile
r-2@$ : lire la dernière ligne de texte du tampon en descendant de 2 niveaux dans la pile
r-2@, : lire l'intégralité dutampon à partir du bas
r-2 : raccourci pour r-2@,
11r !commande : insère la sortie de la commande shell après la ligne 11
w : sauvegarde le tampon dans le fichier actuel
wq : sauvegarde et quitte
w foo: sauvegarde le tampon courant sous le nom 'foo'
w+ foo : ajoute au fichier 'foo' le contenu du tampon courant
w/ : sauvegarde sous le nom de la dernière partie du nom de fichier courant
w+/ : ajouter au dernier composant du nom de fichier
8,20w7 : écrit les lignes 8 à 20 dans la session 7, effaçant ce qui était présent
'a,'bw7@'c : écrit ce bloc de texte en session 7, à la ligne marquée c
.w7@0 : écrit cette ligne au début de la session 7
9w7@- : écrit la ligne 9 en session 7 avant la ligne courante
w7@$ : ajoute ce fichier à la session 7
w/foo : recherche la session dont le nom de fichier contient foo et l'écrase avec le tampon actuel
3w/foo@6 : insère la ligne 3 en session foo après la ligne 6
'a,'bw+1@'c : écrit un bloc de texte dans le tampon en remontant d'un niveau dans la pile
.w-2@0 : écrit la ligne actuelle au début du tampon en descendant de 2 niveaux dans la pile
.w-2 : erreur de syntaxe, @ est nécessaire pour l'écriture sur la pile, pour définir l'emplacement
5,7w !commande : envoie les lignes 5 à 7 à une commande shell
'a,'bW !commande : exécute une série de lignes par le biais d'une commande shell et les remplacer
W !sort : trie les lignes dans le tampon
w ftp://login:password@example.com/file : téléchargement ftp
w scp://login:password@example.com/absolute-path : téléversement scp
bflist : liste des buffers, des sessions edbrowse et leurs noms de fichiers
bflist/foo : liste les sessions edbrowse dont le nom de fichier ou de session contiennent foo
bflist?foo : liste en sens inverseles sessions edbrowse dont le nom de fichier ou de session contiennent foo
hist : affiche l'historique des tampons pour la session courante
hist/foo : liste les tampons dans l'historique dont le nom de fichier ou le titre contient la sous-chaîne foo
hist?foo : liste en sens inverse les tampons dans l'historique dont le nom de fichier ou le titre contient la sous-chaîne foo
up : remonte dans l'historique des tampons
down : descend dans l'historique des tampons
up3 : go up 3 buffers in the history
down4 : descent de 4 tampons dans l'historique
up/foo : remonte dans l'historique jusqu'à un tampon dont le nom de fichier ou le titre contient la sous-chaîne foo
down/foo : descend dans l'historique jusqu'à un tampon dont le nom de fichier ou le titre contient la sous-chaîne foo
bd : bascule entre détection/non détection des fichiers binaires du répertoire
iu : convertit automatiquement entre iso8859 et utf8 (bascule)

Edition de texte, très semblable à ed

u : annuler la dernière commande
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
j : fusionne cette ligne avec la suivante
2,5j : fusionne les lignes 2 à 5
2,5J : fusionne les lignes 2 à 5 en les séparant par un espace
2,5Jhello : fusionne les lignes 2 à 5 en les séparant par hello
i : insérer le texte, suivi d'un point, avant la ligne courante
c : remplacer la ligne courante par un nouveau bloc du texte, terminer par un point
a : ajouter le texte après la ligne courante, terminer par un point
a+ : inclure la longue ligne tapée auparavant, alors qu'on pensait être en mode ajout
a:text : ajouter une ligne de texte
a: : ajouter une ligne vide
i:text : insérer une ligne de texte
c:text : remplace une ou plusieurs lignes par cette seule ligne de texte
4,7m11 : déplacer les lignes 4 à 7 à la ligne 11
4,7t11 : copier les lignes 4 à 7 à la ligne 11

Analyse de répertoire

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
dno : seuls les noms sont du répertoire affichés (bascule)
lsl : affiche la taille du fichier sur la ligne courante du répertoire, ou la taille du fichier
lss : affiche la taille approximative du fichier, en ko, mo etc. .
lst : affiche la date de modification du fichiers binaires
lsp : affiche le propriétaire, le groupe et les les permissions
lsi : affiche l'inode
lsk : affiche le nombre de liens en dur
lsm : affiche les nombres majeur et mineur
lsy : affiche le chemin d'un lien symbolique
lsX : vérifie le mode répertoire, principalement pour scripting
ls : idem à lsst
lst : Affiche la date de modification du fichier courant si on n'est pas en mode répertoire, et idem pour les autres commandes ls
ls=lt : affiche la longueur et la date de tous les fichiers du répertoire parcouru
ls= : affiche uniquement la liste des fichiers du répertoire parcouru
sort=a : tri des fichiers par ordre alpahabétique
sort=t : tri des fichiers par date de modification
sort=s : tri des fichiers par taille
sort+a : comme sort=a
sort-a : tri par ordre alphabetique inverse
sort-t : tri par ordre inverse des dates de modification
sort-s : tri par ordre inverse
rf : réactualise l'affichage du répertoire, utile si vous avez modifié les paramètres de ls ou de tri
M : déplace le répertoire dans une nouvelle session et sauvegarde
g : va au fichier ou sous-répertoire, active le plugin si approprié
g- : va au fichier sans plugin
g.pdf : va au fichier en utlisant le plugin pdf
d : efface le fichier ou le met dans la corbeille; il n'y a pas d'annulation
g/\.o$/d : efface tous les fichiers .o
s/x/y : renomme le fichier
.m3 : déplace le fichier dans le répertoire de la session 3. Vous n'avez pas besoin du signe @ ici car le fichier est toujours placé à la fin de la liste. Utilisez e3 et actualisez si vous le voulez dans l'ordre trié.
.m/foo : déplace le fichier dans la session contient la chaîne foo
.t3 : copie ce fichier dans le répertoire de la session 3
.t/foo : copie le fichier dans la session contient la chaîne foo
displace : remplace les fichiers existants lors du déplacement ou de la copie (bascule)
.l3 : crée un lien entre le fichier et le répertoire de la session 3
.L3 : créer un lien symbolique de ce fichier vers le répertoire de la session 3, non recommandé sauf si le répertoire courant est un chemin absolu
.m+2 : remonte ce fichier de 2 niveaux dans votre historique d'édition.La destination doit être un répertoire. Vous n'avez pas besoin du signe @ ici car le fichier est toujours placé à la fin de la liste. Remontez de 2 et rafraîchissez si vous voulez que la liste soit triée.
.t-3 : copie ce fichier à 3 niveaux plus bas dans votre historique d'édition

Parcourir un fichier html ou une page web

b : navigue dans le fichier courant, considéré comme étant du HTML
b.pdf : parcourir le fichier actuel à l'aide du plugin pdf
b foo.html : édite et navigue dans le fichier foo.html
b URL : se connecte à URL et navigue
nostack b url : ne pas empiler une nouvelle fenêtre, remplece la fenêtre courante avec la nouvelle url
^ b url : idem à nostack
attimg : affiche toutes les images même celles sans attributs alt (bascule)
ub : quitte le mode navigation du fichier courant
ft : affiche le titre de la page Web courante (titre du fichier)
fa : affiche l'auteur de la page web courante
fd : affiche la description de la page Web courante
fg : affiche le générateur de la page Web courante
fk : affiche les mots-clés de la page Web courante
fu : affiche le fichier de l'URL sous-jacente
rf : rafraîchit la page WEB ou la liste des fichiers
et : édite cette page Web en mode texte pur
hr : redirection HTTP (bascule)
vs : vérifie les connexions SSL (sécurisées)
sr : envoie le référent (bascule)
local : récupérer des pages dans le cache (bascule)
ua3 : se présente comme le troisième agent utilisateur dans votre fichier de configuration
ua : affiche l'agent utilisateur courant
can : (curl auth negotiate) bascule l'authentification type SPNEGO, requise pour kerberos (krb5/gss)
crs : (curl restart) to recover pour corriger certains bugs de curl ou ssl

Téléchargements FTP ou HTTP

pdd : indicateur d'avancement du téléchargement indiqué par des points
pdc : indicateur d'avancement du téléchargement indiqué par un nombre
pdq : pas d'indicateur d'avancement du téléchargement
dld=foo : prédéfinir le nom du prochain fichier à télécharger
dld=% : accepte le nom du fichier de téléchargement défini par le serveur
ftpa : mode ftp actif ou passif (bascule)
bg : télécharge les fichiers en tâche de fond (bascule)
bglist : liste les téléchargements en tâche de fond, terminés ou en cours
jsbg : télécharge les fichiers Javascript et css en arrière-plan (bascule)

Interagir avec une page Web

g : suit le lien sur la ligne courante
g- : va au lien, sans l'afficher ni le jouer
g2 : suit le deuxième lien sur la ligne courante
g$ : suit le dernier lien sur la ligne courante
g? : va à l'url du lien situé sur la ligne courante
g2? : va à l'url du second lien
g$? : va à l'url du dernier lien
A : crée un tampon de tags pour les liens sur la ligne courante
4,7A : crée un tampon de tags pour les liens sur les lignes 4 à 7
exp : affiche (déploie) un cadre, g fonctionne aussi
,exp : affiche (déploie) tous les cadres
ctr : contracte un cadre
^ : la touche de retour, retourne à la page Web précédente
& : touche de retour pour lien internes à une page Web, retourne à la source du lien
img : charge l' image sur la ligne courante
img2 : charge la 2ème image sur la ligne courante
img$ : charge la dernière image sur la ligne courante
img? : affiche l'url de l'image sur la ligne courante
i=xyz : remplit le formulaire sur ligne courante avec 'xyz'
i=rouge, vert, bleu : selectionne les choix rouge, vert et bleu d'une liste à sélections multiples
s/$/,orange : ajoute le choix orange à la liste de sélection
i=`ambre : insérez votre couleur si elle est dans la liste des choix suggérés
s/,rouge/ : enlève rouge de la liste de sélection
selsep=| : change le séparateur entre items dans la liste de sélection
selsep= : affiche le séparateur
i<5 : insère le texte de la session 5 dans le champ de saisie, une ligne de texte
i<5@3 : insère la ligne 3 de la session 5 dans le champ de saisie
i<5@'c : insère la ligne marquée c de la session 5 dans le champ de saisie
i<-1@'c : lit l'étiquette de la ligne c du tampon de dessous dans le champ de saisie de texte
i<foo : insère le fichier foo dans le champ de saisie, une ligne de texte
i2=xyz : place le deuxième formulaire de la ligne courante avec 'xyz'
i2* : appuie sur le 2ème bouton de la ligne courante, habituellement envoyer ou remettre à zéro
i$* : appuie sur le dernier bouton de la ligne courante
i3? : affiche la description du troisième formulaire de la ligne courante
ipass2 : prompt pour saisie du second formulaire, sans echo
ib : alloue un tampon d'entrée pour cette zone de texte
ib7 : utilisez la session 7 pour remplir le champ de saisie
/<session/ ib : notez l'espace entre / et i
shc : affiche les en-têtes des colonnes d'une table html
ur : déploie une ligne d'une table html
M4 : déplace cette page web en session 4 et revient à la page précédente
M : déplace cette page web dans une session vide et sauvegarde
js : activation Javascript (bascule)
rr : rafraîchit l'écran, afin de refléter les modifications Javascript asynchrones
rr 75 : rafraîchit l'écran toutes les 75 secondes
showall : affiche le texte survolé (bascule)
colors : montre les couleurs sur la page

Client Mail

sm : envoie le courrier [le numéro de compte]
re : répond à ce courriel
rea : répond à tous
fwd : fait suivre ce courriel
flow : expédier le courriel avec le format=flux (bascule)
attimg : affiche les images attchées (bascule)
imap n : établit une connexion imap
imap 0 : stoppe la connexion imap
rf : rafraichit les répertoires et le nombre des messages
l=40 : récupère 40 enveloppes
e=rfs : lit indicator, from, subject
a : ajoute des répertoires, comme le mode ajout, .pour terminer
s/x/y/ : renomme un répertoire, mais pas un répertoire système !
d : supprime un répertoire, mais pas un répertoire système !! Tous les courriels de ce répertoire sont perdus..
g : va dans un répertoire, comme en mode répertoire

Enveloppes

rf : actualiser les enveloppes dans ce tampon
d : supprimer cet email
m abc : déplacer l'email vers le dossier ab
t abc : copier l'email vers le dossier ab
r : marquer comme lu
r- : marquer comme non lu
lsf : lister le champ expéditeur de cette enveloppe, nom si présent et adresse email
lst : lister le champ destinataire, nom si présent et adresse email
lsd : lister le champ date
lsl : lister la longueur
lsz or lss : lister la taille en nombres arrondis
lsy : lister l'objet, bien que je m'attende à ce qu'il soit déjà sur la ligne affichée
lsu : lister l'uid
lsr : lister si cet email est lu ou non lu
u filename : enregistrer cet email non formaté dans un fichier
U filename : comme ci-dessus mais supprimer l'email
w filename : enregistrer cet email formaté dans un fichier, et une copie non formatée dans ~/.trash/rawmail
W filename : comme ci-dessus mais supprimer l'email
g : ouvrir cet email pour lecture
t : ouvrir cet email mais présenter le composant mime en texte brut
g- : aller à cet email mais ne pas naviguer

Lire un email sous IMAP

rf : réaffiche le mail en cours de lecture
d : efface le mail en cours de lecture
m abc : déplace le mail en cours de lecture
t abc : copie le mail en cours de lecture
u filename : enregistre le mail en cours de lecture, non formaté
w filename : enregistre le mail en cours de lecture, formaté
^ : revenir aux enveloppes
^^ : revenir aux répertoires

client IRC

irc m n domaine pseudo : lance le chat irc en utilisant les sessions m and n avec le domaine spécifié et le pseudo
irc m n domaine pseudo groupe : lance le chat irc et rejoint le groupe spécifié
irc m n domaine:port pseudo:mot de passe groupe : specifie un port et un mot de passe
irc m n domaine+:port* pseudo:mot de passe groupe : affiche ce channel in the dans le tampon, et utilise des sockets sécurisés.
showchan : afficher les canaux lors de l'affichage des messages (basculer)
lst : afficher la date et l'heure de réception de cette ligne dans le buffer de sortie
lsc : afficher le canal de ce message

Plugins

pb : joue le tampon (typiquement de l'audio)
pb.mp3 : joue le tampon courant comme un fichier mp3
pg : plugins activés (bascule)

Accès aux bases de données

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

Fonctions Edbrowse

<foo arg1 arg2 ... appel de la fonction foo, définie dans votre fichier .ebrc
<7 : lance les commandes en session 7
<*7 : lance les commandes en session 7 mais stoppe si erreur
<7@22,29 : lance les commandes en session 7 des lignes 22 à 29
</foo : lance les commandes dans la session dont le nom de fichier contient foo
<*/foo : lance les commandes mais stoppe si erreur
</foo@22,29 : lance les commandes des lignes 22 à 29
X : fait de cette ligne la ligne courante, souvent employé dans un script
<7 : passer les commandes de la session 7 à jdb si en mode jdb
<-1 : exécuter les commandes dans le tampon descendu d'un niveau dans votre pile
<+2 : runn the commands in the buffer up two on your stack
sleep n : exécuter les commandes dans le tampon monté de deux niveaux dans votre pile
var x=7 : assigner la valeur 7 à la variable x
var x=clear : effacer la variable x
var x:=7 : définir x dans l'environnement
var x:=clear : supprimer x de l'environnement
$(x) : développer la variable x
$(:LANG) : développer la variable d'environnement LANG
p text : imprimer le texte
p $(x) : imprimer la variable x
$(x+3*y-7) : effectuer une arithmétique de base
[ $(x) = $(y) ] : tester l'égalité
[ $(x) != $(y) and friends ] : tester l'inégalité

Deboguage

db3 : niveau de déboguage (de 0 à 7)
db : affiche le niveau de déboguage
db>/tmp/edbrowse.out : redirige la sortie du debbugger dans un fichier
demin : décommandlineminimise Javascript (bascule)
timers : active les timers Javascript (bascule)
speed=7 : les timers Javascript timers tournent 7 fois plus lentement
tmlist : montre tous les timers de cette fenêtre
dbcn : active debugging cloneNode (bascule)
dbev : active debugging event (bascule)
dberr : active debugging erreurs js (bascule)
dbcss : active debugging css (bascule)
dbtags : debug le scanner html (bascule)
dblay : debug le layout de la page html (bascule)
trace : injecte des points de traçage dans le Javascript (bascule)
jdb : débugger Javascript : bye pour le quitter
ok(o) : affiche tous les membres d'un objet, certains pouvant être non énumérables
showscripts() : montre tous les scripts de l'arbre
searchscripts(string) : recherche de chaîne dans les scripts
showframes() : montre les frames partout dans l'arbre
snapshot() : instantané de Javascript et css pour déboguage local
aloop(array, string_on[i]) : exécute la chaîne pour chaque membre du tableau
uptrace(node) : remonte dans l'arbre à partir du noeud fourni
dumptree(node) : montre l'arbre sous le noeud fourni
by_esn(n) : trouver l'étiquette avec le numéro n de séquence edbrowse
bp@(label) : inject ce code dans un fichier js pour un point d'arrêt
step$stack() : affiche la pile, usuellement après un point d'arrêt
step$l = 0|1|2 : définit le niveau de trace pour chaque pas
step$go = label : met step$l à 2 pour ce point, stoppe ensuite à chaque pas
step$exp = expression : met step$l à 2 si l'expression est vraie, stoppe ensuite à chaque pas
arg$ : affiche les arguments à ce point d'arrêt

## Trucs pour éviter les numéros de ligne

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 cas d'ajout ou d'effacement 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 de page en page. 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. Si votre chaîne de recherche n'est pas unique, vous devrez peut-être effectuer la recherche en deux ou trois fois pour trouver le paragraphe désiré.

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 gauche. Certes, vous pouvez tomber sur une accolade littérale dans le texte, mais ceci est rare. 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 scriptées, une importante fonctionnalité de Edbrowse.

## 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@lists.the-brannons.com

## Wiki Edbrowse

Il existe un wiki dévolu à Edbrowse, incluant des trucs et astuces, et des exemples de fonctions edbrowse pour accomplir certaines tâches. Voyez edbrowse.org pour plus d'informations.

# Chapitre 3, l'Editeur

- Différences importantes par rapport à /bin/ed
- Performances de l'éditeur
- Equilibrage des parenthèses
- Commutateur de contexte
- Usage
- Caractères binaires
- Emojis
- Fichiers binaires
- Parcours de répertoire, gestionnaire de fichiers
- Mjuscules et minuscules
- Fin de ligne
- Comportement

## 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, ou visitez pcre page. Une fois accoutumés à leur puissance et flexibilité, vous ne reviendrez jamais à Ed.

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 ( et ) sont presque toujours considérés comme des littéraux, comme en recherchant maFunction (), aussi j'ai inversé la signification des parenthèses échappées dans Perl. C'est-à-dire, ( et ) maintenant matchent les caractères littéraux, et «\( et \) marquent 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, cad la chaîne matchée entière. $0 signifie également la chaîne matchée; c'est une caractéristique de perl. 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 c'est commode ; si vous voulez remplacer * + ou ? , vous n'avez pas besoin de les échapper, juste parce que ce sont des modificateurs. De même, une parenthèse ouvrante sans parenthèse fermante est traitée comme un littéral. et {m,n} au début est un littéral. Ces changements aux expressions régulières, pour ressembler à ed, peuvent vous gêner si vous êtes expert de Perl. Cependant, ces changements facilitent l'utilisation de l'éditeur, surtout pour les utilisateurs de ed expérimentés. Les utilisateurs de Perl peuvent souhaiter désactiver les expressions régulières modifiées edbrowse via ebre-. Ainsi edbrowse passe les expressions régulières à Perl quasiment sans changements. Si un script utilise des expressions régulières complexes avec beaucoup de parenthèses, le script pourrait commencer par ebre-, ainsi les parenthèses n'auront pas besoin d'être échappées. Vous pouvez utiliser look ahead, look behind, back references et toutes les caractéristiques intéressantes de perl dans un format reconnaissable. Le paramètre ebre est restauré en fin de script.

Ci-dessous quelques différences supplémentaires entre ce programme et /bin/ed.

- Les lignes commençant par # sont ignorées, pour faciliter les commentaires dans vos scripts Edbrowse. Le caractère # n'a aucune signification spéciale au milieu d'une ligne.

- Les lignes commençant par ! appellent un shell. le caractère ! n'a aucune signification spéciale au milieu d'une ligne, à moins que ce soit le débur d'une commande shell dans uns expression régulière ou une partie d'une commande de lecture ou écriture. ! seul appelle un shell interactif – dans ce shell, taper «exit» pour revenir à Edbrowse. Le mot «ok» est affiché lorsque vous quittez le shell - ainsi vous êtes prévenu à l'achèvement d'une commande sans sorties. Utilisez db0 pour supprimer ce ok de confirmation.

  Attention - certaines versions de system() renvoient /bin/sh, en regard de votre variable d'environnement $SHELL. Nous n'avons pas de pouvoir sur cela. Votre commande shell, ou les commandes de plugins pourraient ne pas fonctionner correctement si vous utilisez les fonctionnalités de bash et que edbrowse utilise sh. C'est pareil pour ed. Vous pouvez tester cela avec !echo$RANDOM, qui est une fonctionnalité bash. Si vous n'obtenez rien, edbrowse utilise sh. Vérifiez-le en tapant :

  !/bin/bash -c 'echo $RANDOM'

- Taper «cd répertoire » pour changer de répertoire. Le nouveau répertoire est toujours affiché. Tapez «cd» seul pour savoir dans quel répertoire vous vous trouvez.

  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. Ceci est effectué par le shell, et est distinct des variables d'edbrowse, qui seront décrites plus tard.

  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.

Dans edbrowse, r opère sur la ligne courante par défaut, tout comme la plupart des autres commandes. C'est mon effort pour être cohérent. Dans /bin/ed, r opère sur la dernière ligne par défaut. Utilisez
$r foo.txt
pour charger le fichier foo.txt à la fin du tampon.

- Pour edbrowse et /bin/ed:
  r foo.txt
  chargent le fichier foo.txt dans le tampon et
  w foo.txt
  écrit le tampon sou le nom foo.txt

  Si le tampon n'a pas de nom de fichier, edbrowse conserve le tampon sans nom de fichier, mais /bin/ed définit le nom de fichier du tampon comme foo.txt.

- Dans /bin/ed, la commande r sans nom de fichier utilise le nom de fichier courant, mais edbrowse traite cela comme une erreur.

- La commande «w+» ajoute au fichier. Quelques versions de ed utilisent W pour cette opération. Quelques versions de ed utilisent «w>» pour cette opération, mais pendant 40 ans «>» a été le standard pour écrire avec troncature. Donc utiliser «>» pour ajouter présente un risque de confusion. Et «w>>» est trop maladroit, ainsi j'emploie «w+».

- «w/» écrit les données dans un fichier dont le nom est le dernier composant du nom de fichier courant. C'est utile quand vous avez téléchargé un fichier appelé «this.that.com/foo/package-2.7.7-22.tar.gz», et vous voulez le sauvegarder sans avoir à retaper le dernier élément, c'est-à-dire le nom du fichier. Alternativement, f/ change le nom du fichier, ne conservant que le dernier élément.

- Chaque fois qu'un fichier est lu ou écrit sur disque, $var, dans un nom de fichier, est remplacé par la variable d'environnement correspondante. Ainsi vous pouvez éditer votre carnet d'adresses en tapant «e $adbook», si $adbook a été placé dans votre environnement. Des constructions comme ${foo}bar sont supportées. En outre, un «~/» en en-tête est remplacé par $HOME/, facilitant ainsi l'édition de fichiers dans votre répertoire personnel, comme ~/. profile. Ou bien utilisez ~utilisateur pour e répertoire d'un autre utilisateur. Encore une fois, ceci est distinct des variables d'edbrowse.

  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. Ainsi vous devriez pouvoir éditer *.c 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 meta caractère isolé du shell avec un slash arrière, comme dans jolie\*maison.

- p text affichera le texte, essentiellement un écho. p seul affiche la ligne comme d'habitude.

- Beaucoup de versions de ed placent un «$» à la fin d'une ligne listée, mais ce n'est pas le cas ici, au moins pas par défaut. Employez la commande «endm» pour délimiter les lignes listées. Les lignes présentes dans le tampon débutent par ^ et se terminent par $.

- Q majuscule ne quitte pas l'éditeur. C'est parce que je frappe souvent la touche de blocage majuscule par erreur, ou parfois «shift q», et si j'ai oublié quelques modifications importantes que j'ai effectuées, ces modifications sont perdues ! Je sais, ceci semble artificiel, parce que cela ne devrait jamais arriver, mais le fait est que cela arrive, j'ai donc neutralisé Q majuscule. Tapez «qt» pour quitter complètement.

- J majuscule fusionne les lignes avec un espace entre elles. J: fusionne 2 lignes avec le séparateur : (deux-points) Toute chaîne est utilisable ici. L'espacement est significatif ici, comme en J : .

- 0kx désactive l'étiquette x. Cette fonction est utile dans les scripts qui veulent définir des étiquettes pour un travail temporaire ; ils peuvent désactiver ces étiquettes lorsqu'ils ont terminé.

- on assume que le numéro de ligne absent avant ou après la virgule est 1 et $. C'est conforme à «,p --» pour afficher le fichier entier. Edbrowse ne reconnait pas 3;5p, comme certaines versions de ed. La virgule est le séparteur d'intervalle et ;p signifie .,$p.

- g continue l'opération pour toutes les lignes marquées. La plupart des versions de ed ne le font pas. Exemple : un fichier de 10 lignes, de 1 à 10, on lance g/[89];p La ligne 8 correspond, et les lignes 8 à 10 sont déplacées au début. Arrivé à ce point, ed s'arrêtre, mais moi je continue, et découvre la 2ème ligne, qui contient 9, et je déplace le bloc au début. L'une ou l'autre des implémentations est particulièrement juste ou fausse, d'après ce que je peux en dire.

- Vous ne pouvez pas taper une commande sur deux lignes en mettant un antislash en fin de première ligne. Et c'est inutile de toute façon, puisque Perl traduit «\n». Pour dédoubler une ligne au milieu du mot «bonjour», tapez :

  s/bonjour/bon-\njour».

- %line à droite d'une commande de substitution devient le numéro de ligne.
  s/^/%line. /
  Cela peut être très pratique

  Il y a un cas limite ici qui est assez rare. Regardez s/z/a\nb%line/
  Sous cette commande, %line est remplacé par le numéro de ligne avant que les substitutions soient effectuées, pas après. Si vous voulez ce dernier comportement, alors faites ceci.
  ,s/z/a\nb@@@/
  ,s/@@@/%line/

- Seuls les 500 premiers caractères d'une ligne sont affichés. Le reste de la ligne est dans le tampon, et peut être modifié par l'intermédiaire d'une commande remplacement, mais si vous voulez la voir, vous devrez la dédoubler, comme dans l'exemple «bonjour» ci-dessus. Vous pouvez modifier le nombre de caractères affichés en définissant le paramètre par la commande ll.

- a+ ajoute du texte, comme a, mais ajoute aussi la ligne que vous avez tapée en dernier, qui faisait plus de dix caractères, pendant que vous étiez en mode commande - quand vous pensiez être en mode ajout mais que vous n'y étiez pas. Un utilisateur expérimenté d'ed appréciera ce gain de temps.

  Un autre raccourci est a:text, qui ajoute une ligne au tampon. Il n'est pas nécessaire de taper un point pour quitter le mode ajout. Notez que a: ajoute une ligne vide, et a:. ajoute une ligne avec un seul point, ce qui autrement demande un peu d'effort. c:texte remplace un bloc de lignes par une seule ligne de texte, et i:texte insère une ligne de texte.

- Ce programme est moins tolérant vis-à-vis des espaces que /bin/ed.
  57, 63 p ne fonctionnera pas.

- Dans une recherche avec expression régulière, aussi bien ed que edbrowse effectuent une recherche circulaire, du début à la fin puis retour au début. Ainsi /./ sur la dernière ligne affiche la première ligne. Ce comportement peut être activé ou désactivé par la commande sw (search with wrap) Certains préfèrent stopper la recherche en fin de tampon, sans revenir au début.

- Un seul «%» en fin de substitution est remplacé par la dernière partie droite. Quelques versions de ed fonctionnent ainsi, d'autres non.

- \1 est la première référence arrière, le premier regroupement par parenthèses. C'est identique à ed ou sed. Retenez la convention des parenthèses. Avec ebre+, /\([ab]\)\1/ correspondra à aa ou bb, pas à ab ou ba ; avec ebre- utilisez /([ab])\1/. Un 0 en tête indique un code octal. /\07/ recherche le caractère de contrôle g (sonnerie).

- s est un raccourci pour «s/, +,\n». C'est utilisé pour découper les lignes en phrases. tapez «s. » pour dédoubler une ligne après le premier point jusqu'à une fin de phrase. «s; s: s) s"» peuvent s'employer. «s,3» découpe la ligne après la troisième virgule. Il faudra taper «s.2» si la phrase commence par M. Untel. Utilisez s.$ pour le dernier point.

- Taper s pour «s//% ».

- /xyz/! cherche la première ligne qui ne contient pas xyz. ed ne le fait pas, mais sed le fait, et c'est bien pratique. Notez que xyz est dans le tampon mémorisé, et donc c'est !. tapez / pour la prochaine ligne qui ne contient pas xyz tapez ? pour la ligne précédente qui ne contient pas xyz Notez que g/xyz/! est inutile vu que c'est la même chose que v/xyz/

- Comme mentionné auparavant, le suffixe i rend les recherches et remplacements insensibles à la casse. C'est compatible avec perl. Le suffixe signifie oublie (forget); ces châines se sont pas mémorisées en vue de recherches/remplacements futurs Si vous cherchez dans le tampon le mot foo, et que vous tapez /foo/ une seule fois, vous pouvez continuer à taper / pour trouver la prochaine instance de foo. En entrant /bar/f, vous recherchez bar mais mais bar est oublié, donc le prochian / recherche de nouveau foo. Le suffixe $ effectue la dernière substitution sur la ligne. 5g remplace la cinquième instance de l'expression régulière et toutes les instances subséquentes. Certaines versions de sed le font. Au total, les suffixes poissbles pour une commande de remplacement sont i f g $ nombre p, dans n'importe quel ordre, mais $ ne peut apparaître avec g ou un nombre.

- La commande sg rend globales les chaînes de recherche et de subtitution, pour toutes les sessions d'édition. C'est une bascule, ainsi retaper sg rend les chaînes de recherche locales à leurs sessions. Comme pour toutes les bascules, vous pouvez tapet sg+ ou sg-. Si vous voulez chercher tous les «foo» dans tous les fichiers du répertoire courant, et remplacer certains d'entre eux par «toto» : taper *, (éditer tous les fichiers), puis «sg» pour rendre globales les chaînes de substitution dans toutes les session d'édition. Dans la première session, chercher «foo», et remplacer certains d'entre eux par «toto». Taper «e2» pour ouvrir une deuxième session, où vous pouvez rechercher en utilisant seulement le caractère «/», parce que la chaîne «foo» est globale à toutes les sessions. De même, vous pouvez utiliser «%» pour se référer à «toto». La commande sg-revient au comportement local de l'éditeur, où chaque fichier possède ses propres chaînes de recherche et de remplacement.

- Les erreurs de lectures et d'écriture de fichiers, ou les erreurs de changement de session sont toujours affichées. D'autres erreurs affichent le point d'interrogation habituel, dans ce cas vous devrez taper «h» pour obtenir l'explication. Tapez H majuscule pour avoir en permanence les messages d'erreur. C'est consistant avec ed ed. La plupart des nouvelles commandes, introduites par edbrowse, font apparaître un point d'interrogation en cas d'erreur, mais certaines affichent le message d'erreur. C'est une question de goût, et c'est en grande partie à la discrétion des développeurs de logiciels.

- Dans la plupart des versions de ed, la commande «z7» signifie «.,+6p», faisant de la ligne courante +7 la nouvelle ligne courante. Je pense que c'est inconsistent, ed vous laissant quelque part ailleurs que sur la dernière ligne affichée. La confusion est totale avec «z» qui affiche les dernières lignes du fichier : ici la ligne courante devient réellement la dernière ligne affichée. Dans ce programme z7 signifie «+,+7p», et la ligne courante devient la dernière ligne affichée, comme les autres commandes. Sans nombre, «z» affiche le nombre de lignes précédentes. Ainsi vous pouvez lire votre fichier par bloc ou écran par écran.

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, et la navigation dans un document HTML et «l'édition» des formulaires de saisie.

## Performances de l'éditeur

Certaines commandes g ont été optimisées pour plus de performance. Par exemple, considérez r !seq 100000, suivie de g/[678]$/d. La ligne 6 est effacée, puis les lignes restantes sont remontées pour remplir l'espace vide. La ligne suivante 7 est effacée, puis la ligne 8, puis 16, et ainsi de suite. Cet algorithme direct est quadratique, et devient intenable sur de gros fichiers. C'est pourquoi edbrowse utilise un algorithme linéaire lorsque la commande efface ou fusionne un nombre défini de lignes contenant la ligne marquée, par exemple g/re/ -,+3J. Dans ce cas, edbrowse affiche "effacement de masse" ou "fusion de masse" en niveau de déboguage 3 ou supérieur.

Ces commandes ne sont pas optimisées en mode navigation, sql ou répertoire - avec une exception. g/re/d, où d efface les lignes marquées, est optimisée en mode répertoire. Vous ne voudriez pas supprimer d'autres lignes en mode répertoire. g/\.o$/d a du sens, g/\.o$/-d, ou qtout autre chose, est risquée et imprévisible.

La lecture d'un tampon est également optimisée. g/re/ r7 ceci affiche "lecture en masse" au niveau de débogage 3. Vous devez lire le contenu d'un tampon, ou une partie du tampon en utilisant la syntaxe @. Si vous voulez injecter le contenu d'un fichier plusieurs fois, lisez d'abord ce fichier dans un tampon dans une autre session, puis utilisez la construction ci-dessus. C'est de toute façon plus efficace ; vous ne voulez pas ouvrir ce fichier encore et encore.

Pour implémenter g/xyz/ 1,3t. efficacement:
1,3w7
g/xyz/r7
bw7
q7

Si vous écrivez cela dans un script et que vous n'êtes pas sûr que la session 7 est disponible, tout peut être fait sur la pile.
etmp
r+1@1,3
up
g/xyz/r-1
down
^

Pour implémenter g/xyz/+r5 efficacement:
g/xyz/+s/$/uvw/
g/uvw$/r5
,s/uvw$//.

La commande s (substitute) dans une plage est optimisée lorsqu'elle découpe une ligne en plusieurs, par exemple ,s/doghouse/dog\nhouse/. Cependant, elle n'est pas optimisée lorsqu'elle est utilisée avec la commande g. Si vous voulez découper doghouse sur les lignes qui commencent par xyz, au lieu de g/^xyz/ s/doghouse/dog\nhouse/ essayez ,s/\(^xyz.*dog\)house/$1\nhouse/

La commande a: n'est pas optimisée pour de gros fichiers. Au lieu de
g/^cat$/ a:dog
vous devriez taper
,s/^cat$/&\ndog/

Certaines commandes g sont optimisées en mode imap. Supposons que vous êtes dans un dossier avec des milliers d'emails, et vous voulez supprimer tous les emails contenant la chaîne xyz. Dans l'implémentation la plus simple, g/xyz/d émet une commande de suppression pour chaque email dont l'enveloppe contient xyz. Cela pourrait représenter des centaines de messages vers et depuis le serveur imap. C'est à la fois lent et sujet aux erreurs. Une connexion perdue pourrait vous laisser dans un état incertain, avec certains emails supprimés et d'autres non. À la place, edbrowse rassemble tous les uid des emails à supprimer, et les envoie au serveur imap dans une liste, en une seule commande. C'est une transaction unique, et elle s'exécute rapidement. Supprimer 100 emails est presque aussi rapide que d'en supprimer 1. La même optimisation s'applique pour déplacer ou copier, en utilisant encore une fois une liste d'uid. La même optimisation s'applique pour une plage, comme 'a,'bd.

Contactez les développeurs si vous pensez que d'autres commandes devraient être optimisées.

## 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 {», parce qu'elle é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ë - on ne sait pas s'il faut regarder en arrière ou vers l'avant. Tapez «B{«ou «B}».

Vous pouvez explicitement équilibrer le <>, pour les tags multilignes de HTML

B peut être utilisé sur une ligne sans accolades, ou avec des accolades non équilibrées. B} sur la quatrième ligne déplace à la troisième ligne, le début du bloc qui contient cette ligne. B{ sur la quatrième ligne permet de passer à la dernière ligne.

Si une ligne contient plusieurs accolades, comme }}}, B}1 équilibre la première accolade déséquilibrée, de l'intérieur vers l'extérieur. Dans cet exemple, B est identique à B} est identique à B}3.

Edbrowse ignore les chaînes de caractères, de sorte que c = '{', ou s = "abc}def", ne devrait pas faire dérailler cette fonction. Cependant, les commentaires, ou les expressions régulières nues, (comme vu en perl ou javascript), qui contiennent des signes de ponctuation, feront sortir edbrowse de ses gonds.

## Changement de contexte

Ce programme permet l'édition simultanée de fichiers multiples, et 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» jusqu'à «e6». Notez que «e 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 via «r3», et vous pouvez sauvegarder le tampon courant dans la session 5 via «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».

e+ et e- permettent de passer à la session d'édition suivante et précédente, comme le bouton de changement de chaîne sur votre télécommande de télévision.

eret revient à la session d'édition précédente, comme le bouton de votre télécommande de télévision qui revient à la chaîne que vous étiez en train de regarder.

e/foo passe à la session dont le nom de fichier, ou le titre html, contient la chaîne foo. La recherche est insensible à la casse. Cette recherche se fera en boucle si l'option sw (search with wrap) est activée. e?foo revient à la session dont le nom de fichier, ou le titre html, contient la chaîne foo. Ceci est utile lorsque vous avez plusieurs fichiers ouverts en parallèle. Imaginez que vous éditez des fichiers *.c pour effectuer des changements systémiques dans plusieurs fichiers source d'un grand projet. Vous voulez aller à format.c mais ne vous souvenez plus quelle session le contient. Vous pouvez utiliser bflist pour trouver le numéro de session, mais il est plus facile de taper e/format

Si sss (search similar sessions) est activé, la recherche se limite aux sessions du même mode : répertoire, navigation, imap, etc.

enum passe à la session indiquée par le numéro sur la ligne actuelle. Une nouvelle session est créée si aucune n'était présente auparavant. Le premier numéro de la ligne est choisi. Par exemple, enum sur la ligne jj3jj7jj passe à la session 3.

enew crée un nouveau tampon sur la pile. etmp est identique à enew, mais bw est implicite. C'est un tampon temporaire et edbrowse ne se soucie pas de savoir s'il est écrit quelque part.

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 une limitation 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.

Utilisez la commande bflist (buffer list) pour lister toutes les sessions d'édition ouvertes. Edbrowse affiche le numéro de session, le titre si la session est une page web, ou le nom du fichier. Utilisez bflist/foo pour dresser la liste de toutes les sessions dont le nom de fichier ou le titre contient la chaîne de caractères foo. La recherche est insensible à la casse. Utilisez bflist?foo pour afficher cette liste en sens inverse.

Utilisez la commande hist pour afficher un historique des fichiers ou des pages Web ouverts dans la session courante. C'est fréquent lors de la navigation, où chaque nouvelle page web pousse la page précédente sur une pile, et la commande ^ ouvre la pile. C'est moins fréquent lors de l'édition de fichiers locaux. Utilisez hist/foo pour dresser la liste de tous les tampons dont le nom de fichier ou le titre contient la sous-chaîne foo. La recherche est insensible à la casse. Utilisez hist?foo pour afficher cette liste en sens inverse.

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

Voici une méthode plus rapide et plus simple pour faire la même chose, sans utiliser de tampon de transfert supplémentaire. Elle utilise la notation spéciale 'a,'bw1@'c, qui injecte le texte prescrit de a à b, dans la session 1, à l'étiquette de ligne c, plutôt que d'écraser le fichier. Le signe @ fait toute la différence. Cela veut dire : mettez le texte à cette ligne dans le tampon préexistant. Cela s'appelle la syntaxe at. Un libellé ou un numéro de ligne ou $ ou . ou + ou - doit suivre @, et il ne peut y avoir d'espace. Les expressions complexes comme @/xyz/-3 ne sont pas autorisées ici. Un seul espace peut en changer la signification. 'a,'bw 1@'c écrit le bloc de texte dans un fichier nommé 1@'c, ce qui n'est pas ce que vous voulez.

    kc # marque l'endroit où vous êtes, là où vous voulez mettre le paragraphe
    < e2
    > nouvelle session
    < e bar
    > 28719
    < /start/
    > début du paragraphe que vous voulez déplacer.
    < ka
    < /end/
    > fin du paragraphe que vous voulez déplacer.
    < kb
    < 'a,'bw1@'c
    > 3279
    < 'a,'bd
    < w  # écrit bar, sans le paragraphe
    > 25440
    < e1
    > foo  # retour en session 1
    < w  # ecrit foo, avec le nouveau paragraphe
    > 62121

Voici une autre méthode, qui lit au lieu d'écrire. Elle utilise la notation spéciale r2@'a,'b, qui lit le texte prescrit de a à b, dans la session 1, à l'emplacement actuel. Le signe @ fait toute la différence. Cela veut dire : lisez le texte commençant à cette ligne dans l'autre session. Il s'agit à nouveau de la syntaxe at. Une étiquette ou un numéro de ligne ou $ ou . ou + ou - ou ; ou , doit suivre @, et il ne peut y avoir d'espace blanc. Notez que r3@, est identique à r3. Les expressions complexes telles que @/xyz/-3 ne sont pas autorisées ici. Si un second numéro de ligne n'est pas donné, seule la ligne est lue.

    kc # marque l'endroit où vous êtes, là où vous voulez mettre le paragraphe
    < e2
    > nouvelle session
    < e bar
    > 28719
    < /start/
    > début du paragraphe que vous voulez déplacer.
    < ka
    < /end/
    > fin du paragraphe que vous voulez déplacer.
    < kb
    < e1
    > foo  # retour en session 1
    < r2@'a,'b
    > 3279
    < 'c+   # juste pour vérifier que c'est lu
    > début du paragraphe que vous voulez déplacer.
    < w  # ecrit foo, avec le nouveau paragraphe
    > 62121
    # ici, retour en session 2, si nous voulons effacer le paragraphe de bar
    < e2
    > bar
    < 'a,'bd
    < w  # écrit bar, sans le paragraphe
    > 25440

Si vous voulez faire cette opération couper/coller dans un script, et que vous n'êtes pas sûr d'être dans la session 1, et que vous n'êtes pas sûr que la session 2 est disponible, vous pouvez le faire sur la pile, comme ceci.

    kc # marque ton emplacement actuel, là où tu veux que le paragraphe soit
    < e bar # empile le fichier bar sur la pile d'édition
    > 28719
    < /start/
    > C'est le début du paragraphe que vous souhaitez déplacer.
    < ka
    < /end/
    > C'est la fin du paragraphe que vous souhaitez déplacer.
    < kb
    < up # remonte d'un niveau dans la pile, comme gdb
    > foo  # retour au premier fichier
    < r-1@'a,'b
    > 3279
    < 'c+   # on vérifie qu'on l'a lu
    > C'est le début du paragraphe que vous souhaitez déplacer.
    < w  # écrit foo, avec le nouveau paragraphe inclus
    > 62121
    #  maintenant nous devons descendre si nous voulons le supprimer de bar
    < down
    > bar
    < 'a,'bd
    < w  # écrit bar, sans le paragraphe
    > 25440

La commande qui rend tout cela possible est r-1@'a,'b. -1 est un nombre relatif. + ou - n ne fait pas référence à une session edbrowse, mais plutôt à un tampon sur la pile actuelle. Dans ce cas, il s'agit du tampon qui se trouve 1 en bas de la position actuelle. Il s'agit du fichier bar, sous le fichier foo. Tapez hist pour voir l'historique des modifications dans la session en cours. C'est comme l'historique d'un navigateur, et c'est en fait l'historique du navigateur si vous êtes sur Internet. Dans cet exemple, il affiche foo puis bar.

Il est parfois plus facile de travailler au sein d'une même pile ; il est parfois plus facile de travailler dans des sessions edbrowse distinctes. Des sessions séparées sont plus intuitives dans un environnement interactif, à mon avis, mais un script peut ne pas savoir dans quelle session vous vous trouvez, ou quelles sessions sont disponibles, c'est pourquoi il est plus facile de travailler dans la pile en cours.

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

r/foo lit le contenu de la session dont le nom de fichier contient la sous-chaîne foo, ou dont le titre HTML contient la sous-chaîne foo, s'il s'agit d'une page web. La commande bflist vous montre les noms de fichiers ou titres des sessions. r?foo recherche en arrière dans les sessions pour trouver le tampon à lire. Cela fonctionne exactement comme e/foo et e?foo, qui ont été décrits précédemment. Et w/foo et w?foo fonctionnent de la même manière.

Contrairement à la commande e/, r/ et w/ respectent la syntaxe at. r/foo@3 lit la ligne 3 dans la mémoire tampon actuelle, à partir de la prochaine session dont le nom de fichier ou le titre contient la chaîne de caractères foo. 'a,'bw/foo@7 écrit une série de lignes du tampon actuel dans la session suivante dont le nom de fichier ou le titre contient la chaîne de caractères foo. Cette notation peut être énigmatique, mais elle peut être puissante.

## Utilisation

Tapez «Edbrowse -h» pour afficher le massage d'aide ci-dessous. 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.

    edbrowse  -v   (affiche la version)
    edbrowse -h (ce message)
    edbrowse -c (édition du fichier de configuration)
    edbrowse [-d#] -f[#] (récupération mail)
    edbrowse  [-d#] -[p]m    (lecture mail restant)
    edbrowse  [-d#] -[p]fm[#]    (récupération et lecture mail restant)
    edbrowse  [-d#] -m[#] addresse1 addresse2 ... fichier [+apièces_jointes]
    edbrowse  [-c configfile] [-b] [-e] [-dn] file1 file2 ...
    Tapez help à partir d'une session edbrowse pour obtenir un résumé des commandes courantes d'edbrowse.

L'option «-dn» place le niveau de déboguage à n, où n 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 ne voudrez probablement pas aller plus haut. Rappelez-vous, le niveau de déboguage peut être modifié interactivement en employant la commande dbn (n entre 0 et 9) Vous pouvez rediriger la sortie du debugger vers un fichier avec `db>fichier', et vous le ferez probablement pour db5 et au-dessus. Il y a beaucoup de production.

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. Notez que -e a le même effet dans un script bash.

Utilisez «-c» seul pour désactiver et éditer le fichier de configuration «.ebrc». (Ce fichier de config sera décrit plus tard). Vous devrez le faire si votre fichier de configuration comporte des erreurs des erreurs de syntaxe, lesquelles sont affichées au démarrage de Edbrowse. Votre fichier de configuration est automatiquement chargé dans la session 1. Faites les modifications, sauvegardez, et tapez "config" pour recharger le fichier. S'il y une autre erreur, vous devrez refaire un changement, sauvegarder, et réappliquer. Poursuivez jusqu'à ce qu'il n'y ait plus d'erreurs. La lecture du fichier de configuration s'arrête à la première erreur, pour avoir un système propre.

Pour Edbrowse, le nom de fichier -c est traité comme le fichier de configuration. Vous pouvez changer de session, afficher, éditer, sauvegarder et manipuler le fichier de configuration sans jamais quitter Edbrowse.

Si les premiers arguments sont -c nom-de-fichier, Edbrowse utilise nom-de-fichier comme fichier de configuration, au lieu du fichier de config standard dans votre répertoire personnel. Tant que le processus Edbrowse court, -c se réfère au fichier donné en ligne de commande, comme le fait la commande config, laquelle ré-exécute le fichier de configuration.

l'option -b analyse chaque fichier ou url sur la ligne de commaande, ou le joue si un plugin le nécessite. Sans -b, les url sont parcourues. edbrowse cet.exemple.com lit la page web, affiche sa taille brute en octets, parcourt la page et affiche la taille de la page décodée. L'option -b fait la même chose sur un fichier local, si vous avez des fichiers html sur votre ordinateur. Elle active également le ou les plugins qui pourraient afficher le fichier (pdf), le jouer (mp3). Les plugins seront décrits plus tard.

Les arguments de edbrowse sont les fichiers à éditer. Edbrowse charge ces fichiers dans des sessions correspondantes et démarre en session 1. S'il n'y a pas d'arguments, edbrowse démarre en session 1 sans texte ni fichier associé. Si le fichier est une chaîne vide, "", edbrowse crée un tampon vide pour cette session. Si le fichier est une url, cette page web est récupérée sur Internet et parcourue. Enfin, si l'argument commence par un signe plus, comme edbrowse fichier "+37", alors cette commande est exécutée sur le fichier actuel. Cet exemple affiche la ligne 37. Utilisez '+<func' pour exécuter une fonction edbrowse en ligne. Les fichiers, les urls et les +commandes peuvent être mélangés sur la ligne de commande. Ils sont traités dans l'ordre. Les commandes avec en-tête + sont appliquées au premier fichier, plutôt qu'au fichier précédent, puisqu'il n'y a pas de fichier précédent.

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.

## 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. Employez la séquence triple «~bd» pour écrire le caractère non-ASCII 0xbd, valeur unicode de «1/2». En utf8, vous devrez entrer ~c2~bd pour obtenir 1/2. De même, si vous listez une ligne, avec la commande «lna», le caractère «1/2» est affiché ~c2~bd. Tout ce qui non ASCCI et la plupart des caractères de contrôle sont entré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 ci-dessous 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, «~~».

Pour des langues étrangères, il y des moyens commodes de taper des lettres accentuées dans vore document, en admettant que ces lettres font partie de la langue de votre système et que votre clavier ait été correctement configuré. En d'autres termes, il y a des raccourcis clavier pour vos lettres accentuées, ainsi vous n'avez pas à vous soucier de UTF-8.

Utilisez ~u pour entrer un caractère Unicode extérieur à votre langue et non disponible avec un raccourci clavier. L'unicode est en hexa. Ainsi, ~u3b3; est la lettre grecque gamma. Le point-virgule est optionnel. Il n'est nécessaire que si un autre caractère hexa suit, comme dans ~u3b3;4 pour gamma4. hello~u1f600monde met un emoji "sourire" entre hello et monde, parce que m ne peut confondu avec un caractère hexa.

Les expressions régulières peuvent être entrées en hexadécimal ou en 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 Edbrowse, la deuxième et troisième par les expressions régulières 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 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 dans un état inattendu, rendant le rétablissement difficile. Utilisez /usr/bin/reset pour remettre le terminal dans son état normal. Il semble prudent d'afficher en permanence les caractères échappés comme caractères ascii. Si vous n'avez aucune idée d'où ce «~1B» est venu, c'est probablement un caractère littéral échappé dans votre fichier. Contrôle n et contrôle o sont tous affichés en hexa, ~0E and ~0F,parce qu'elles peuvent faire dérailler beaucoup de terminaux.

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 ou de Windows. Chaque ligne finit par «~0d». Tapez une des trois commandes ci-dessus pour effacer ces fins de lignes DOS. Cependant, Edbrowse convertit usuellement ces fichiers DOS à votre place, sauf si vous avez désactivé cette possibilite par la commande iu.

## Emojis

Un emoji est une petite image qui est représentée par un caractère unicode supérieur. Par exemple, l'unicode 1f34f affiche l'image d'une pomme verte 🍏. Dans le cadre de ce document, je désignerai tout code supérieur unicode élevé comme un emoji. Ainsi, un emoji pourrait être une lettre de l'alphabet cyrilique, un symbole chinois traditionnel, un opérateur mathématique, ou l'image d'une pomme verte. Ils sont tous identiques pour edbrowse.

Pour décrire une forêt, ou un panier de fruits, vous pouvez saisir l'emoji pomme verte sous la forme ~u1f34f. Cela fonctionne bien, si vous connaissez l'unicode de l'emoji pomme. Sinon, vous devez trouver et consulter une bibliothèque d'emojis, rechercher la pomme verte, vous souvenir de l'unicode et la saisir, chiffre par chiffre. Heureusement, edbrowse propose une approche plus rationnelle.

Il démarre avec une bibliothèque d'emojis, dans un format texte simple. Un fichier d'emojis courants est disponible dans le projet edbrowse. Commencez par ce fichier si vous le souhaitez, puis modifiez-le pour le personnaliser. Ce fichier est ensuite référencé dans votre fichier de configuration edbrowse .ebrc, comme votre carnet d'adresses, votre boîte à cookies, et vos certificats ssl.

emoji = /home/monlogin/.ebsys/Emojis.txt

comme exemple, un extrait de ce fichier

    #  fruits, et plantes semblables aux fruits, comme melons
    fruit {
        1f347 raisins
        1f34c banane
        1f34e pomme rouge
        1f34f pomme verte
        1f351 pêche
    }

La définition du groupe doit être un mot unique composé de lettres et de chiffres ascii, suivi d'une accolade gauche. Actuellement, le nom du groupe ne peut pas contenir de lettres accentuées. Chaque emoji est un unicode suivi d'une série de mots, sans ponctuation. Les lettres accentuées sont autorisées ici. Ainsi, vous pouvez écrire un fichier emoji dans votre propre langue. L'accolade droite ferme le groupe.

À n'importe quel moment de la saisie edbrowse, ~jfruit.pommeverte est traduit en l'emoji pomme verte. Il n'y a pas d'espace entre pomme et verte, car un espace mettrait fin à la description de l'emoji. Omettez tout espace lorsque vous tapez la description de l'emoji.

Pourquoi utilise-t-on ~j pour indiquer un emoji, plutôt que ~e ? Parce que e est un chiffre hexadécimal, et nous avons déjà des instructions pour surveiller les ~ suivis de chiffres hexadécimaux. Il fallait faire autre chose, et j semble être une lettre raisonnable pour indiquer un emoji.

Comme d'habitude dans edbrowse, les raccourcis non ambigus sont autorisés. Dans cet exemple, ~jfr.ban fonctionnera tout aussi bien. Il n'y a qu'un seul groupe d'emojis qui commence par fr, c'est-à-dire fruit, et un emoji dans ce groupe qui commence par ban, c'est-à-dire banane. Si la chaîne de groupe ne produit pas de correspondance unique, edbrowse affiche tous les groupes d'emoji de votre bibliothèque, puis le mot stop. La chaîne emoji est remplacée par @@, et la saisie continue. Si vous saisissez du texte, vous devrez revenir en arrière plus tard et remplacer @@ par l'emoji que vous voulez, ou autre chose. Il se peut que vous ayez tapé une très longue ligne, des centaines de caractères, ou que vous ayez inséré une longue ligne par couper/coller, et je ne veux pas tout gâcher juste parce que l'emoji ne correspondait pas.

L'approche est différente si un groupe est sélectionné, mais que la chaîne d'emoji ne produit pas une correspondance unique. Edbrowse présente un menu d'emojis qui commencent par la chaîne de caractères que vous avez entrée, ou tous les emojis du groupe s'il n'y a pas de correspondance. Ainsi ~jfruit.xx, ou ~jfruit seul, produit un menu d'emojis dans le groupe des fruits.

    1: raisins
    2: banane
    3: pomme rouge
    4: pomme verte
    5: pêche

Sélectionnez une entrée par son numéro, ou par une sous-chaîne unique. Ainsi 4, ou vert, sélectionnera la pomme verte. po ne fonctionnera pas, car la pomme rouge et la pomme verte commencent tous deux par po. Dans ce contexte, les espaces peuvent et doivent être saisis. pommeverte ne correspondra à rien, mais verte pom fonctionnera. Sélectionnez par numéro pour éviter toute confusion. Entrez une ligne vide pour ne pas faire de sélection. De nouveau, cela affiche le mot stop, et la chaîne emoji est réduite à @@.

Vous pouvez sélectionner de nombreux émojis dans le menu. Si vous écrivez un article sur les fruits, tapez ~jfruit, et sélectionnez, dans le menu, 5,3,4 -. et votre texte contiendra les images d'une pêche, d'une pomme rouge et d'une pomme verte, dans cet ordre. 🍑🍎🍏

Cela se présente plus souvent dans un email ou un post de soutien, où vous pourriez vouloir présenter plusieurs cœurs. Tapez ~jheart, et sélectionnez le cœur bleu, le cœur vert, le cœur orange, le cœur violet ... autant que vous le souhaitez, et peut-être des éléments du groupe de la fête. Joyeux anniversaire 💛🧡💙💚 🎂

Peut-être que quelque chose est extrêmement drôle, et vous voulez l'indiquer avec trois émojis qui se roulent par terre en riant. Tapez ~jmisc, ou n'importe quel groupe ayant cet emoji, puis roll, roll, roll pour en produire trois.

Les combinaisons d'emoji sont autorisées. Il peut s'agir de simples concaténations, comme les drapeaux. Deux emojis combinés, le U régional et le S régional, produisent le drapeau des États-Unis, stars & ; stripes. La ligne dans votre fichier de configuration, dans le groupe flags, ressemble à ceci.

1f1fa+1f1f8 états-unis

Lors de la saisie du texte, ~jflag.united produit le U régional et le S régional, qui est le code pour le drapeau. Sauf si vous avez également les Émirats arabes unis dans votre fichier de configuration, auquel cas vous verrez un menu des deux pays.

Il existe un moyen détourné d'assembler deux emojis pour produire un symbole lié aux deux. Cette méthode utilise le combinateur de jointure. Le combinateur de baseball, par exemple, est une balle de baseball associée à une paire de gants. Dans le groupe des sports, la ligne pourrait ressembler à ceci. Le ^ indique l'opérateur de jonction, les emojis ne sont pas simplement l'un à côté de l'autre, ils sont joints par l'unicode 8205.

26be^1f9e4 gant de baseball

Reportez-vous au fichier d'exemple Emojis.txt dans le wiki pour plus d'exemples de ces combinaisons.

## fichiers binaires

Un fichier est considéré comme binaire s'il est suffisamment grand (plus de 50 octets ) et s'il contient une proportion significative de caractères non-ASCII ou nuls (plus de 25%). Un texte international peuvt contenir des codes binaires dispersés pour les lettres accentuées, 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 cet éditeur. Rechercher la chaîne «bonjour monde» et remplacer «monde» par «tonde». Sauvegardez le fichier et relancez l'exécutable. Vous devriez maintenant voir «bonjour tonde».

Quand des données binaires sont lues dans le tampon, vous verrez les mots «données binaires». Ensuite, 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 de texte.

La plupart du temps, il n'importe pas vraiment si les données sont 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» pour les fichiers texte de type DOS. 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. C'est automatique sous DOS; cela peut être supprimé par la commande iu sous unix, si vous désirez réllement voir les retours-chariot.

Bien que cette approche soit satisfaisante pour l'utf8, elle peut échouer pour de gros fichiers iso8859-1 avec beaucoup de lettres accentuées. Ce genre de fichier ressemble à un ficheir binaire, même si c'est de l'ascii. Vous pouvez neutraliser la détection binaire en tapant la commande «bd», pour traiter ce fichier comme ascii. C'est un cas rare, depuis que utf8 est devenu quasi-universel. C'est pourquoi cette commande bd est obsolète, et pourrait diparaître dans une future version de edbrowse.

Si vous voulez trouver des lignes dans votre fichier qui contiennent des caractères binaires qui ne font pas partie d'une séquence utf8 valide, faites ceci. C'est destructif, donc ne sauvegardez pas le fichier.

su8+
,s/^/@@/
su8-
v/^@@/ n

## 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, selon votre locale. Ce classement est le même qu'avec /bin/ls -lF, et il est déterminé par la variable d'environnement LC_COLLATE. mettez LC_COLLATE=C pour un classement ascii traditionnel. Note: le Raspberry Pi (raspbian) semble avoir un bug, où LC_ALL l'emporte sur LC_COLLATE. Cela ne devrait pas se produire. Donc, désactivez LC_ALL et activez les autres variables LC_ individuellement, selon vos préférences. Assurez-vous d'avoir activé LC_MESSAGES, pour interagir avec linux dans votre langue.

Utilisez l'option "hf" pour voir les fichiers cachés. (Ceci inclut le répertoire parent... ) Tapez «g» pour aller à un de ces fichiers ou sous-répertoires. Tapez «^» pour revenir où vous étiez. Ceci est conforme avec le navigateur, où g est la commande go et ^ la commande de retour en arrière. On en saura davantage plus tard. Vous pouvez traverser ainsi un arbre entier de répertoire comme si vous étiez à l'intérieur d'un gestionnaire de fichiers.

Comme le navigateur, et comme d'autres gestionnaires de fichiers, la commande go invoquera un plugin en fonction de l'extension du fichier. Un fichier mp3 est joué, et un fichier pdf est converti en texte lisible. Utilisez la commande à bascule «pg» pour désactiver les plugins si vous ne voulez pas de ce comportement automatique. Nous reviendrons sur les plugins plus tard.

La commande M majuscule (move) déplace ce répertoire dans une autre session et le sauvegarde. Encore une fois, nous retrouvons la même commande dans le navigateur. Si vous étiez dans le répertoire foo, et descendu dans le répertoire bar, et que vous souhaitez les consulter tous les deux en parallèle, tapez M et bar est déplacé dans une nouvelle session, vous revenez dans foo, à la ligne contenant bar. Vous pouvez désormais basculer entre les 2 répertoires; foo n'est pas caché sur la pile. Utilisez M6 pour déplacer le répertoire en session 6; ceci effacera la session 6. En cas doute, tapez M. Note : cette commande fonctionne aussi bien avec les fichiers.

Comme «ls -lF», 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. 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. Vous pourriez vouloir configurer une tâche cron qui supprime tous les fichiers de votre corbeille une fois par semaine. Ajoutez un script shell "emptytrash" dans /etc/cron.weekly.

Le répertoire .trash est créé avec les permissions 700, ainsi personne d'autre ne peut voir vos fichiers supprimés. Si vous créez ce répertoire vous-même, veuillez lui attribuer les permissions 700. Après tout, certains de vos fichiers supprimés pourraient ê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 la même heure de création.

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.

Il existe un contexte dans lequel la commande u est disponible. Si vous avez renommé un seul fichier par substitution, pas avec g//, la commande u le remet en place. Elle ressuscite l'ancien texte, et renomme le fichier tel qu'il était. Certains noms de fichiers sont longs, et une commande de substitution ne fait pas toujours ce que vous attendez, alors la commande undo est pratique.

Si les sessions 1 et 5 contiennent toutes deux des répertoires, vous pouvez déplacer le fichier courant du premier répertoire dans le second par la commande .m5. Ceci ne déplace pas les lignes; ceci déplace le fichier de la session courante à l'autre. La fonction de renommage du noyau est utilisée si c'est possible, afin de préserver l'arborescence, le propriétaire, les permissions ou les attributs spéciaux. Ceci ne peut être garanti si le fichier est déplacé sur un autre système de fichiers. Le fichier doit être copié, puis effacé, pour que vous en soyez propriétaire et qu'il soit à date courante. Dans certains cas, edbrowse peut appeler /bin/mv pour effectuer cette opération. Vous pouvez déplacer un ensemble de fichiers par 'a,'bm5, ou bien avec une expression régulière par g/re/ .m5.

Si le fichier de destination existe déjà, edbrowse s'arrête et affiche une erreur. Cependant, si le drapeau de déplacement est activé, par exemple displace+, alors le fichier de destination est d'abord supprimé, ou déplacé vers votre corbeille; puis le fichier désigné est déplacé vers le second répertoire.

Utilisez .t5 pour copier le fichier en session 5. Comme pour le déplacement, cela n'écrasera pas un fichier existant, sauf si l'option de remplacement est activée. Ces opérations de déplacement et de copie ne peuvent pas être annulées.

Utilisez .m+2 pour déplacer un fichier vers un répertoire qui se trouve deux niveaux plus haut dans la pile. Rappelez-vous que la commande hist imprime votre historique d'édition, de sorte que vous pouvez voir quels répertoires se trouvent à quels endroits sur la pile. De même, .t-3 copie un fichier dans un répertoire situé 3 niveaux plus bas.

.l3 lie le fichier au répertoire de la session 3. C'est un lien dur. Si vous voulez un nom différent pour le second lien, basculez vers la session 3 et utilisez la commande s pour renommer ce fichier. De même, .l+2 lie ce fichier dans le répertoire situé deux niveaux plus haut dans l'historique d'edbrowse.

.L3 crée un lien symbolique. Encore une fois, vous pouvez basculer vers la session 3 et la renommer si vous le souhaitez. Pour de meilleurs résultats, le répertoire courant devrait avoir un chemin absolu. S'il ne l'a pas, les résultats peuvent être inattendus. Si vous êtes situé dans le répertoire foo, et que vous éditez . dans la session 1, et le répertoire parallèle ../bar dans la session 2, .L2 ne fera pas ce que vous voulez. Un fichier j dans foo aura un homologue j dans ../bar qui est un lien symbolique vers ./j, car c'est ainsi qu'il est vu depuis foo. j est lié symboliquement à j. Accéder à j dans bar conduit à une récursion infinie. Si vous voulez que vos fichiers dans foo soient liés symboliquement au répertoire parallèle bar, en utilisant des liens relatifs, faites ceci. cd bar ; edbrowse ../foo . Maintenant .L2 voit le fichier j, qui est ../foo/j, le lie dans le répertoire courant, qui est bar, ainsi bar a un fichier j qui est un lien symbolique vers ../foo/j. C'est la stratégie correcte pour construire des liens symboliques relatifs dans edbrowse.

«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 substantiellement 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. Un gestionnaire de fichiers affiche la liste des fichiers, d'où vous pouvez cliquer sur le fichier que vous souhaitez visualiser, éditer ou supprimer. Edbrowse vous donne ce type de puissance dans un environnement en ligne de commande.

Quand la commande de remplacement modifie le contenu, elle renomme le fichier original. Ce dernier ne sera donc pas écrasé. Vous ne perdrez ainsi aucune donnée.

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 ertains 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. Ceci arrive quand plusieurs documents HTML sont 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 via l'échappement shell. Utilisez «kx» pour affecter l'étiquette x au fichier qui vous intéresse. C'est la syntaxe ed standard. Ensuite, exécutez !programme $EB_LNx pour exécuter votre programme sur le contenu de la ligne marquée par x. Cela semble compliqué, mais il s'agit simplement d'une substitution de variable par le shell. Si le nom de votre fichier contient des espaces, exécutez !programme "$EB_LNx". pour assurer que le nom de fichier entier est l'argument du programme appelé.

EB_DOT contient le texte de la ligne en cours, EB_PLUS contient le texte de la ligne suivante, EB_MINUS contient le texte de la ligne précédente, et EB_FILE contient le nom du fichier en cours. Si vous essayez d'écrire un fichier, et si vous l'avez laissé en lecture seule, vous pouvez le rendre accessible en écriture via !chmod +w "$EB_FILE", puis sauvegarder le fichier.

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 "$EB_LNx" "$EB_LNy".

Cette possibilité n'est pas réservée au parcours de répertoire. Vous pouvez éditer un simple fichier, mais vous pouvez également coller le contenu d'une ligne dans votre commande shell.

Ces affectations EB_ se produisent également lors de l'expansion de variables d'environnement directement dans une commande edbrowse, par exemple p $(:EB_SESSION)

Retour à l'échappement shell, '. est l'abréviation de "$EB_DOT". '- devient "$EB_MINUS", '+ devient "$EB_PLUS", 't devient "$EB_LNt", et '_ devient "$EB_FILE". Ces remplacements ne sont effectués que s'il n'y a pas de lettres ou de chiffres de part et d'autre des signes de ponctuation. Après tout, vous ne voudriez pas remplacer 't dans le mot wouldn't.

Le remplacement est entre guillemets, et constitue donc un argument unique pour l'interpréteur de commandes. Comme le raccourci fait référence à la variable d'environnement, et non à la ligne elle-même, il est entre guillemets en toute sécurité. Par exemple, créez une ligne qui ne contient que ", alors !echo '. fonctionne. Si vous ne voulez pas que le contenu de votre ligne soit entre guillemets de cette manière, utilisez directement la variable $EB_DOT.

En mode répertoire, la commande ls affiche différents attributs du fichier sur la ligne courante. Tapez lsl pour la longueur, lss pour la taille approximative, lst pour la date de modification, lsp pour les permissions, lsi pour l'inode, lsk pour le nombre de liens durs, lsy pour le chemin associé à ce lien symbolique, ou lsm pour les nombres majeurs et mineurs. Ceux-ci peuvent être combinés : par ex. lspk affiche les permissions et le nombre de liens en dur. ls est identique à lsst, taille et date de modification. Edbrowe affiche ~, si les attributs ne sont pas accessibles, par ex. la demande de la taille d'un lien symbolique. Le symbole original était un point d'interrogation, mais cela pouvait entraîner une confusion avec le résultat d'une commande invalide.

Cette fonctionnalité n'est pas limitée à la lecture des répertoires. Tapez lst en visualisant un fichier pour obtenir la date de modification de ce fichier.

Si vous voulez afficher la longueur et la date pour chaque fichier dans un listing de répertoire, alors tapez ls=lt. Le signe égal applique la directive ls à tous les parcours de répertoire. Tapez ls= pour désactiver ceci. Ci-dessous, voici comment le répertoire racine s'affichera avec ls=lt.

    bin@/ 36864 Aug 31 2015 16:20
    boot/ 4096 Dec  4 2014 07:54
    cd/ 4096 Nov 30 2014 09:38
    dev/ 3560 Sep  3 2015 05:00
    etc/ 4096 Sep  3 2015 05:00
    home/ 4096 Mar 10 2015 07:52
    lib@/ 53248 Aug 31 2015 16:20
    lost+found/ 16384 Dec 10 2014 15:32
    opt/ 4096 Jan 12 2015 04:36
    proc/ 0 Sep  3 2015 04:59
    root/ 4096 Mar 10 2015 07:37
    run/ 740 Sep  3 2015 05:00
    sbin@/ 12288 Jul 14 2015 10:43
    sys/ 0 Sep  3 2015 04:59
    tmp/ 260 Sep 24 2015 11:05
    usr/ 4096 Jan 12 2015 04:47
    var/ 4096 Sep  3 2015 04:59

Toutes les entrées dans le répertoire racine sont des répertoires, ainsi se terminent-elles toutes par /. La première entrée est bin@/ parce que bin est un lien symbolique vers /usr/bin (la plupar des sytèmes sont ainsi configurés) et /usr/bin est un répertoire. La taille de /proc est 0, parce que /proc est un système de fichier virtuel. Idem pour sys.

Si vous recherchez l'année 2014, vous ne trouverez rien, parce que la date et l'heure sont des infos supplémentaires ne faisant pas partie du nom de fichier. Les recherches et substitutions s'appliquent uniquement aux noms de fichiers. Si vous voulez voir ce répertoire comme du texte, sauvegardez-le dans un fichier, ou dans une autre session.

La directive dno (directory names only) supprime les informations supplémentaires sur le type de fichier, le nom, l'heure, etc. C'est utile lorsque le répertoire se trouve sur un serveur de fichiers distant, et que vous ne voulez pas lancer un appel stat() sur chaque fichier. Les noms des fichiers sont suffisants. Les différentes commandes ls fonctionnent toujours, ainsi que g pour aller à ce fichier, même si ce fichier est un répertoire.

Les fichiers sont triés par ordre alphabétique, selon votre locale. Utilisez la commande sort+a pour un tri alpha standard, sort-a pour un tri alpha inversé. sort+r trie par date de modif. du plus ancien au plus récent, et sort-t inverse cela. sort+s et sort-s trient par taille de fichier.

Avec la directive dno activée, le tri par date ou par taille ne fonctionne plus. La liste revient à l'ordre alphabétique.

## 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. 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».

En supposant que le document soit en utf8, ces directives respectent les caractères internationaux, jusqu'à l'unicode 0xff. Cela n'englobe évidemment pas toutes les langues, mais cela gère le français, l'allemand, l'espagnol, etc. ainsi "el niño is in the café , hen3ry 'n' isn't" devient "El Niño Is In The Café , Hen3Ry 'N' Isn't".

## Fin de ligne

La commande «bl» découpe la ligne courante en phrases et expressions, chacune pas plus de 80 caractères de long. Vous pouvez modifier cette longuer par défaut avvec la commande "fll" (format line length). Certains terminaux acceptent plus de 80 caractères. Utiliser "ffl 80+" pour permettre un léger dépassement, pour un ou deux mots.

La commande "bl" 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 définitivement 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 cela ait du sens. Une fois bl exécuté, les lignes physiques contiendront des phrases ou énoncés, délimités par la ponctuation, ou par le saut de ligne/retour-chariot présent dans le texte original. Une ligne longue sans espaces ne peut être découpée, et restera longue.

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, ce qui arrive quand on rend lisible un document importé.

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, c'est-à-dire si vous n'avez pas sauvegarder pas le fichier, parcourez-le, et appliquez «bl» aux seules lignes de texte.

Vous pourriez être tenté d'utiliser bl pour rendre un document Word lisible : utilisez plutôt catdoc, il fait un meilleur travail. Ce programme est un must pour les personnes qui veulent un environnement en ligne de commande.

Cette fonction est également utilisée pour formater de l'html en phrases, produisant des lignes ne dépassant pas 80 caractères, ou 80 caractères utf8. Ici aussi, la commande "fll" change la longueur de ligne par défaut. Chaque caractère compte pour une colonne. Ainsi, des caractères larges, comme plusieurs émojis, peuvent dépasser la largeur de votre terminal. Essayez fll78 pour vous donner de l'air.

## Conditions de concurrence

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 mauvaise milliseconde. Pour se garder de cette improbable calamité, quelques éditeurs écrivent vos données dans un fichier temporaire, effacent l'original, et renomment le fichier temporaire sous son vrai nom. De cette façon vos données ne peuvent être perdues. Le nouveau ou l'ancien fichier survivra.

Alors les liens sont apparus, d'abord les liens durs, et puis les liens symboliques. Les auteurs de ed, et d'autres éditeurs, ont dû se débrouiller. Vous ne pouvez pas enlever le lien, écrire un fichier temporaire, et remplacer le lien par le fichier temporaire. Ce n'est plus un lien, c'est un fichier régulier, et votre système de fichiers n'est pas prévu pour cela. Le vrai fichier, pointé par le lien (symbolique), n'a pas été modifié du tout. Ce n'est pas ce ce que vous vouliez ! Ainsi on a récrit ces éditeurs pour neutraliser ce dispositif si le fichier appelé est un lien vers un autre fichier. Ils ont dû retourner de nouveau au vieux paradigme troncature/réécriture, espérant que rien de mauvais ne se produira dans l'intervalle. Et ça marche, ça n'arrive jamais. La fenêtre est trop étroite, tout simplement. Dans cette optique, Edbrowse ne s'encombre pas avec des fichiers temporaires. Il tronque le fichier et écrit les données, et espère que rien ne tournera mal pendant la milliseconde critique.

Une autre situation de concurrence est plus subtile. Supposez que vous éditez un fichier et votre ami, ou un programme système, édite le même fichier. Votre fichier a en fait été modifié à votre insu pendant qu'il était en mémoire en mémoire. Quand vous allez sauvegarder vos changements, ils écraseront tous les changements faits par votre ami, ou l'utilitaire système. La plupart des éditeurs de texte se gardent de ceci en observant l'heure. Quand vous commencez à éditer le fichier «foo», l'éditeur mémorise l'heure de foo. puis, quand vous êtes prêt à sauvegarder vos changements, il vérifie l'heure, et si «foo» a été mis à jour dans l'intervalle, il vous avertit. Le «fichier a été mis à jour par quelqu'un d'autre – voulez-vous vraiment l'enregistrer ?» C'est un bon dispositif, mais Edbrowse ne l'a pas, simplement parce que je n'ai pas jugé bon de l'implémenter. Ce dispositif n'est pas très demandé.

# Chapitre 4, Navigateur Web

- Accès à une URL
- Mode navigation
- Tables HTML
- Technique, maths
- Titre, description, mots-clés
- La commande de réaffichage
- Hyperliens
- Liens internes
- La touche retour arrière
- La commande M
- Historique de navigation
- Musique de fond
- Titres
- Texte mis en relief
- Zones de saisie
- Saisie de données
- Zones de texte
- Appuyez sur le bouton
- Texte au survol
- Couleurs dans la page
- Web et adresses mail
- Cookies
- Connexions sécurisées
- Téléchargements Ftp
- Support de Gopher
- Serveurs proxy
- Cadres
- Détails

## Accès à une URL

Au lieu de lancer «e nom de fichier», vous pouvez lancer «e http://this.that.com/file.html», et l'éditeur recherchera le fichier appelé en utilisant le protocole HTTP. Le source (c'est-à-dire l'HTML brut) est disponible pour édition. Vous pouvez le modifier et le sauver sur votre machine locale. Puisque le texte est importé d'une autre machine, il ne peut pas être sauvegardé sur cette machine, par conséquent la commande «w» ne fonctionnera pas. Vous devrez indiquer un fichier local «w monfichier.html», ou une session d'édition différente «w3».

De nombreux protocoles courants sont acceptés. Vous pouvez aller chercher un fichier sur un serveur ftp via `e ftp://this.that.com/fichier'. Edbrowse vous donne toujours l'option de télécharger, puisque ftp a été développé à l'origine dans ce but, et que le fichier peut être trop gros pour la mémoire ou pour que edbrowse le gère. Vous pouvez utiliser le nom de fichier actuel, taper un nouveau nom de fichier, taper espace pour le lire en mémoire, ou taper x pour abandonner. Ce sont les options disponibles chaque fois qu'edbrowse propose de télécharger un fichier. Si vous avez chargé le fichier en mémoire, vous pouvez l'éditer, puis le réécrire sur le serveur, comme un téléversement ftp, en supposant que vous avez la permission de téléverser sur ce serveur. C'est comme éditer un fichier local sur votre ordinateur. Cela fonctionne également avec scp, bien que les chemins soient absolus, plutôt que relatifs à votre répertoire personnel, comme c'est le cas avec ftp. ftps, sftp, et tftp sont également supportés. Bien sûr, edbrowse est principalement utilisé comme un navigateur, alors revenons à http et https.

Notez que la récupération initiale via la commande e n'est pas une navigation, nous récupérons simplement du texte à partir d'une autre machine et le visualisons localement. Le texte n'est pas obligatoirement du HTML, il pourrait être (par exemple) un document ASCII. Beaucoup de gens ont mis divers types de fichiers, même des exécutables, sur leurs sites Web pour téléchargement. Vous ne pourrez pas éditer un fichier binaire, mais vous pouvez encore employer Edbrowse pour rechercher le fichier et le sauvegarder localement, mettant en application un téléchargement HTTP.

A l'intérieur de l'éditeur, vous pouvez taper «e URL», empiler le tampon courant et rechercher le texte d'une machine distante. Ou vous pouvez taper «r URL » pour rechercher le texte à distance et l'ajouter au tampon courant. Il n'y a aucune commande «w URL », parce que le protocole de HTTP ne vous permet pas d'écrire du source HTML sur une machine distante. Cependant, vous pouvez écrire sur une url ftp, à condition d'avoir la permission de téléverser sur ce serveur.

Pour simplifier, n'importe quel nom de fichier avec deux ou plusieurs points incorporés et un suffixe standard (tel que .com ou .net) est traité comme une URL. Vous pouvez habituellement omettre le préfixe http://. Essayez d'appeler «e www.space.com». comme exemple. Mais encore une fois, vous regardez le source HTML, ce qui n'est probablement pas ce que vous voulez. La navigation sera examinée plus loin.

Chaque fois que vous récupérez des données d'une URL, l'éditeur, contrôlé par le protocole HTTP, peut changer à votre insu le nom du fichier appelé. C'est parce que la ressource s'est déplacée, et l'ordinateur original était assez aimable pour donner la nouvelle adresse. Si le niveau de déboguage est placé à 2 ou plus, vous pourriez voir une série de trois ou de quatre URLs différentes pendant que l'éditeur est redirigé à travers l'Internet. Enfin il récupère votre document, et le nom de fichier courant contient la dernière et correcte URL correct. Vous pouvez mettre à jour votre fichier de signets en conséquence. D'un autre côté, vous ne devriez pas. Parfois l'URL initial est l'endroit «public» de la page Web, et les redirections suivantes se produisent à l'intérieur de la compagnie. Dans ce cas, il faudra garder l'URL public original, qui fonctionnera toujours, même si la compagnie déplace son serveur Internet. Jugez-en par vous-même.

Lors de la récupération par https, ou imaps ou pop3s ou ftps ou tout autre protocole se terminant par s, une couche de socket sécurisée (ssl) est utilisée pour chiffrer les données. edbrowse peut utiliser l'un de plusieurs moteurs ssl pour effectuer le chiffrement et le déchiffrement. Les moteurs les plus courants sont openssl et gnutls. Cela dépend de curl, une bibliothèque qu'edbrowse utilise pour communiquer sur internet. En d'autres termes, edbrowse ne sélectionne pas le moteur ssl. La plupart du temps, cela n'a pas d'importance. Cependant, de temps en temps, un moteur ssl peut rencontrer un problème, là où un autre n'aurait aucune difficulté. Ainsi edbrowse peut fonctionner parfaitement sur un site web donné, sur une machine, mais pas sur une autre. Il faut un peu de travail de détective pour identifier le problème - ne serait-ce que pour savoir quel moteur vous utilisez.

Un problème qui survient occasionnellement est : "dh key too short" (clé dh trop courte). Cela vient d'openssl, et peut être causé par un paramètre de sécurité faible dans /etc/ssl/openssl.cnf. Vous pourriez mettre à jour ce fichier, mais si vous n'avez pas les permissions pour le faire, edbrowse répond à la variable d'environnement EBCIPHERS. Définissez-la avec la liste des chiffrements que vous voulez que le moteur ssl utilise. Cette chaîne est opaque pour edbrowse et pour curl ; elle est simplement transmise à ssl. Cependant, il y a un raccourci. EBCIPHERS=1 devient DEFAULT@SECLEVEL=1, ce dont openssl a besoin pour générer les clés plus grandes, afin de résoudre le problème de "clé courte". Mais ne définissez pas cette variable sur une autre machine, car cela perturbe complètement les autres moteurs ssl. Ils peuvent avoir besoin d'un paramètre différent pour EBCIPHERS, ou plus probablement, ils fonctionneront très bien tels quels.

Nous pourrons ajouter d'autres raccourcis, EBCIPHERS=2 etc., au fur et à mesure que nous découvrons d'autres problèmes de configuration dans d'autres moteurs SSL.

Définissez la variable d'environnement EBIPV à 4 ou 6, pour forcer l'utilisation des adresses ipv4 ou ipv6. Ceci est destiné au débogage et aux tests ; les utilisateurs ne devraient pas avoir besoin de le faire

## Mode navigation

Si l'éditeur contient du HTML, de n'importe quelle origine, y compris de l'html que vous écrit vous-même, vous pouvez taper «b» pour activer le mode navigation. La commande sera refusée s'il n'y a pas dans le tampon les tags communs HTML, ou si l'éditeur est déjà dans le mode navigation. Vous pouvez forcer la navigation en ajoutant <html> au début du tampon, ou n'importe quelle autre tag identifiable – Edbrowse essayera toujours de convertir un tel fichier. Maintenant le texte transformé est lisible, sans tags HTML visibles. En d'autres termes, le <p> a été transformé en coupure de paragraphe, <ol> est devenu une liste numérotée, et ainsi de suite. Le nom de fichier est également modifié ; le suffixe «.browse» a été ajouté. Si vous sauvegardez les données transformées, délibérément ou accidentellement, le texte restructuré sera archivé dans un nouveau fichier, quelquechose.html.browse, sans toucher au fichier HTML original. Ceci vous protège si vous développez vos propres pages Web.

Tapez «ub» pour désactiver le mode navigation. C'est la commande d'arrêt de navigation. Vous revenez au texte brut HTML sous son nom de fichier original.

Si vous essayez de quitter, et que l'éditeur vous dit «w attendu », rappelez-vous que vous devez revenir dans l'éditeur HTML brut avant de lancer la commande de sauvegarde. Vous pourriez modifier le texte dans lequel vous naviguez sous le nom fichier.browse, pour satisfaire au critère de sauvegarde, mais ce n'est pas vraiment ce que vous voulez.

A titre d'exercice, appelez «e www.edbrowse.org», et employez les commandes «b» et «ub» pour commuter entre le HTML brut et la page navigable.

La mise en page dans le mode navigation est relativement simple. La plupart des tags est ignorée, à l'exception des en-têtes, paragraphes, et listes. Les sous-sections et les items de liste ne sont pas indentés. L'effet visuel n'est pas important, et parfois les espaces supplémentaires disparaissent.

Puisque la ligne physique est, pour nous, l'unité de base, c'est-à-dire la construction atomique modifiable, déplaçable ou copiable, les lignes sont tronquées à environ 80 caractères, habituellement en fin de phrase ou d'expression. Ainsi, la lecture ligne par ligne révèle souvent une séquence de phrases, ou au moins des expressions autonomes au sein d'une phrase plus large. Si vous lisez ce manuel brut, sans faire de navigation dans le fichier, vous verrez ce que je veux dire.

La disposition d'une section préformatée, <pre>, est conservée, bien que des séquences d'interlignes soient comprimés vers le bas à un interligne, et l'espace à la fin des lignes est enlevé. Ceci préserve la structure des adresses de rue, f ragments de code, poèmes et d'autres blocs préformatés.

Notez que le texte navigable est en lecture seule. Après tout, il ne s'agit pas de la " source " -- pourquoi devriez-vous le modifier ? Il existe des moyens de saisir et de modifier les champs de saisie d'un formulaire en ligne, mais nous y reviendrons plus tard. Pour l'instant, vous pouvez considérer que le texte est en lecture seule. Lancez une commande de copie, d'insertion ou de substitution, et vous obtiendrez une erreur.

Si vous voulez éditer le texte comme du texte pur, entrez la commande `et' (edit as text). Vous ne pourrez pas revenir au html qui a produit cette page, vous ne pourrez pas non plus suivre un lien hypertexte ou soumettre un formulaire à remplir. Le texte navigable est devenu du texte pur, sans sémantique Internet.

La commande `b fichier.html' est un raccourci pour `e fichier.html', suivi de `b'. Rappelez-vous que la commande ub inverse la conversion de navigation, et reproduit le html original, comme si vous aviez entré `e fichier.html' seul.

Si une url est ouverte à partir de la ligne de commande, comme dans `e www.google.com', il est automatiquement parcouru. Tapez `ub' pour revenir au html brut.

## Tables HTML

Les tables sont formatées comme une exportation ASCII d'un tableur ou d'une base de données SQL. Le caractère «pipe» (barre verticale) sépare les champs sur chaque ligne. Il n'y a pas d'espaces autour des pipes, et les champs d'une ligne donnée ne seront probablement pas alignés avec les champs de la ligne suivante. Ce n'est pas joli, mais on ne peut pas vraiment suivre une colonne en utilisant un éditeur de lignes comme celui-ci de toute façon. Il vaut mieux écrire le tableau dans un fichier local et utiliser cut, sort, join, etc. Voici un exemple de table.

    numéro de pièce|quantité|prix
    2635|2|34.80
    1398|1|67.50
    8118|5|125.00

Les champs vides en fin de ligne sont ignorés. Ce sont presque toujours des images -- parfois une ligne entière d'images -- parfois une table entière d'images. Les tableaux sont utilisés pour la présentation, plus souvent que pour des données. Par exemple, un tableau comportant deux lignes, et deux cellules dans chaque ligne, peut être utilisé pour diviser l'écran en quatre quadrants, où des images ou du texte peuvent être placés dans chaque quadrant, et mis à jour in situ. Il serait maladroit pour edbrowse d'insérer des pipes ici, car les cellules ne forment pas une feuille de calcul de données. Les tableaux Html peuvent être ambigus, ce qui cause de nombreux maux de tête à edbrowse. Nous faisons de notre mieux pour déterminer si un tableau contient des données, par exemple en recherchant une légende, ou des titres de colonnes, ou une section de titre spécifique dans le tableau. Les tableaux de données sont parfois traités différemment des tableaux de présentation.

La commande shc (show columns) affiche les en-têtes des colonnes, si on peut les déterminer. Dans cet exemple, vous aurez :

1 numéro de pièce
2 quantité
3 prix

La commande ur déploie une ligne, en affichant une ligne par cellule. Ceci est utile lorsqu'une ligne est longue, créant une très longue ligne, ou se découpe de manière imprévisible. Appliquez cette commande à la deuxième ligne du tableau précédent et vous obtiendrez ceci :

ligne 2
numéro de pièce : 1398
quantité : 1
prix : 67,50

Il s'agit d'une commande à bascule, c'est-à-dire que ur sur une ligne dépliée la remet sur une ligne, avec le caractère de séparation "pipe" "|". Comme pour les autres commandes à bascule, ur+ déplie la ligne, ou la laisse dépliée, et ur- la replace sur une ligne.

Vous pouvez appliquer cette commande à une plage, 17,29ur, mais ne l'appliquez pas à une page web entière, car les tableaux html sont souvent utilisés pour la mise en page de l'écran, plutôt qu'un tableau réel. Le résultat pourrait être horrible. Assurez-vous que ur n'est appliqué qu'aux lignes d'un tableau réel, avec des traditionnelles lignes et des colonnes de données.

Les tableaux de présentation fusionnent souvent les cellules entre elles, horizontalement, à l'aide de la directive colspan, ou verticalement, à l'aide de la directive rowspan. Imaginez une image large qui traverse tout l'écran. Elle est logée dans la première ligne d'un tableau, avec colspan=3. En d'autres termes, l'image couvre trois cellules. En dessous, la deuxième ligne comporte trois cellules, qui abritent trois sections distinctes du site Web. C'est ainsi que les développeurs Web mettent en place des panneaux latéraux de contrôle, etc. Si on le laisse à lui-même, edbrowse affiche ceci comme suit

[image]
Section 1
Section 2
Section 3 C'est la présentation la plus simple possible pour un programme orienté ligne. Nous ne voulons rien y changer .

Cependant, le colspan peut prêter à confusion dans un tableau de données. Heureusement, colspan est rarement utilisé dans une feuille de calcul, Vous pouvez donc utiliser edbrowse pendant dix ans sans jamais rencontrer ce problème. Au cas où vous le feriez, voici un exemple.

Nom|Date de naissance|Date de décès|Sexe

Il s'agit d'une simple feuille de calcul à quatre colonnes. Le développeur web veut attirer l'attention sur toute personne qui est mort-née, c'est-à-dire que la date de naissance et la date de décès sont les mêmes. Il peut le faire en définissant colspan=2 sur la deuxième cellule. Ainsi, la deuxième cellule couvre en fait les deuxième et troisième cellules de l'écran. La date apparaît au milieu de cette cellule plus longue, à cheval sur la date de naissance et la date de décès. Elle se détache visuellement, surtout si les cellules sont bordées - mais cela prête à confusion sous edbrowse.

Nom|Date de naissance|Date de décès|Sexe
Sally|27/01/1977|F

F pourrait être la date de décès, après tout, F est dans la troisième colonne. Mais F signifie Féminin. Elle est morte à la naissance, mais ce n'est pas clair dans ce type de format

Pour les tableaux de données uniquement, edbrowse utilise une flèche droite et un nombre pour indiquer un colspan. Ceci vous indique que la date couvre à la fois la date de naissance et la date de décès.

Nom|Date de naissance|Date de décès|Sexe
Sally|27/01/1977 →2|F

Edbrowse tient compte de colspan lorsqu'il déplie la ligne, et attribue des valeurs aux bonnes rubriques.

ligne 1
Nom: Sally
Date de naissance ⇔ Date de décès: 27/01/1977
Sexe: F

Ce sera différent, en ligne et déplié, si Sally est vivante

Nom|Date de naissance|Date de décès|Sexe
Sally|01/27/1977||F

Nom: Sally
Date de naissance: 01/27/1977
date de décès:
Sexe: F

Les cellules peuvent également fusionner verticalement, souvent à des fins de mise en page. Imaginez une image haute sur le côté gauche de l'écran, et trois paragraphes sur le côté droit. La première cellule de la première rangée du tableau a rowspan=3, et s'étend vers le bas sur trois rangées. La cellule suivante de la première rangée contient le premier paragraphe. La deuxième rangée ne contient qu'une seule cellule, abritant le deuxième paragraphe, et la troisième ligne ne contient qu'une seule cellule, qui contient le troisième paragraphe. Edbrowse affiche l'image comme [image], ou une description de l'image si elle est fournie, et ensuite les trois paragraphes en séquence. C'est l'idéal, et il ne faut pas le modifier.

Cependant,rowspan est rarement utilisé dans un tableau de données. Prenons l'exemple suivant . Le webmaster a décidé d'écrire une seule cellule, avec Stephen King, et un lien vers sa biographie. Cette cellule s'étend sur cinq lignes, pour les cinq livres du tableau. C'est plus facile que de taper ses informations cinq fois de suite.

Auteur|livre
{Stephen King} ↓5|The Stand
Stephen King|The Shining
Stephen King|It
Stephen King|Under the Dome
Stephen King|Nightshift

Puisqu'il s'agit d'une table de données, edbrowse indique la portée des rangées avec ↓5, et reproduit ensuite les données dans les lignes suivantes. Seul le texte est copié ; les balises html ne le sont pas. La première ligne, avec le html original, contient un lien vers une biographie de Stephen King ; les lignes suivantes n'en contiennent pas. Une fois de plus, les valeurs sont affectées à leurs titres de colonne corrects lorsque les enregistrements sont dépliés.

ligne 1
Auteur: {Stephen King}
Livre: The Stand
ligne 2
Auteur: Stephen King
Livre: The Shining

Nous sommes conscients, en tant que développeurs et utilisateurs aveugles, que ces conventions d'affichage sont imparfaites. Transformer un tableau en un flux de lignes, tout en préservant la sémantique sous-jacente, est un sacré défi. Nous pensons que les conventions edbrowse sont un bon compromis, supportant les différents tableaux html qui existent dans la nature. Vous retrouverez ces concepts, y compris les enregistrements dépliés, lorsque vous accéderez à une base de données sql. Bien sûr, il n'y a pas de problèmes de colspan ou de rowspan dans une table sql. S'il y a des problèmes de rowspan, c'est que votre base de données n'a probablement pas une forme normale.

## Technique, maths

La plupart des personnes ne lisent jamais sur l'Internet les pages techniques, mais si cela vous arrive…

Un indice inférieur, repéré par un tag HTML, est mis entre crochets. Ainsi x<span class=sub>n</span> devient x[n]. (sub devrait traduire la propriété subscript correctement dans votre fichier css - en fonte basse et réduite). Cette transformation n'est pas effectuée si l'indice est un nombre à un ou deux chiffres. Ainsi x indice 1 est affiché x1, comme votre professeur le dirait. Ce n'est pas ambigu, comme vous pourriez d'abord penser; seuls les programmeurs emploient x1 comme nom de variable, pas les mathématiciens. Si vous voyez x1 dans une formule, elle signifie x indice 1. Même 17a3b3 n'est pas ambigu ; c'est une traduction de 17 fois a[3] fois b[3].

Les indices supérieurs, indiqués par <span class=sup> sont mis entre parenthèses, précédés d'une flèche. Les parenthèses sont ignorées si l'indice supérieur est un nombre. Ainsi x au cube donne x^3, alors que x à la puissance n-1 donne x^(n-1). Ici encore, votre fichier css devrait définir sup. mais même si ce n'est pas le cas, la plupart des navigateurs feront ce qu'il faut, en plaçant le texte au-dessus et dans une police plus petite.

Les balises sup et sub sont reconnues par les autres navigateurs et lecteurs d'écran, il est donc préférable d'utiliser ces balises plutôt que des spans avec du CSS qui place visuellement le texte au-dessus ou en-dessous de la ligne. Les balises sup et sub préservent la sémantique de la relation, permettant ainsi à edbrowse et aux autres navigateurs de lire le texte de manière utile.

Edbrowse supporte la traduction de certains &mots; clés en html, comme &lt; pour le signe inférieur, et les &#code: ou &#xcode pour inclusion directe d'unicodes en html. La lettre grecque thêta peut être codée comme &theta; ou &#952;, ou &#x3b8;. Dans chaque cas c'est traduit en séquence utf8 pour theta. Votre lecteur d'écran devrait être capable de le restituer dans le terme theta, peut-être selon les directives d'un fichier de configuration. Ce type de traductions est laissé à l'adaptateur, Edbrowe le traduit simplement le html dans les bonnes séquences utf8.

Ces traductions sont conçues pour fonctionner avec les pages du Math Reference Project, des archives de mathématiques avancées qui essaient simultanément d'être accessibles aux aveugles et voyants.

## Titre, description, mots-clés

En mode navigation, les commandes ft, fa, fd, fg et fk produisent respectivement le titre, l'auteur, la description, le générateur et les mots-clés du fichier web actuel. Normalement, ces données sont cachées à l'utilisateur. Le titre décrit la page Web en 80 caractères ou moins. La description est une explication plus complète, affichée par un moteur de recherche tel que yahoo ou altavista. L'utilisateur lit la description affichée par le moteur de recherche et décide alors de lire cette page Web. L'auteur est le nom de l'auteur de la page. Le générateur est le nom et la version du logiciel qui a généré la page. Enfin, les mots-clés sont employés par des moteurs de recherche pour faciliter des recherches par mot-clé. Comme le reste de la page, ces cinq attributs sont en lecture seule. Si c'est votre page Web, vous pouvez les modifier en revenant au mode HTML brut. Les concepteurs Web devraient prêter une attention particulière à la description et les mots-clés, sinon vos pages risquent de ne pas être bien classées dans les moteurs de recherche standard.

La commande "fu" affiche l'URL du fichier. Ce peut être encodé, avec beaucoup de signes pourentage. L'URL ne peut être modifiée, même si vous changez le nom du fichier. C'est la même chaîne qui est enregistrée dans le marque-pages si vous employez la commande "A" sur une ligne sans liens. Voyez WEB et Adresses Mail plus bas.

## La commande de réaffichage

Tapez «rf» pour réafficher la page courante. Ceci relit le fichier ou l'URL dans le tampon courant. Il ne provoque pas de nouvelle session d'édition sur la pile. C'est analogue au bouton de réaffichage de n'importe quel navigateur.

Si une page Web est mise à jour chaque minute, par exemple avec les derniers cours des actions de vos compagnies préférées, vous pouvez taper «rf» pour récupérer la dernière version de cette page Web. Ceci suppose que les serveurs Internet ne mettent pas en cache la page Web et ne vous redonnent pas la même copie démodée à plusieurs reprises.

Sur votre machine locale, vous pouvez employer ce dispositif pour lire la dernière version d'un fichier dynamique, tel qu'un fichier de log. Ou vous pouvez relire un répertoire, pour lister les nouveaux fichiers qui ont été placés dans ce répertoire. Par exemple, vous pourriez lancer un shell pour exécuter «cat x y >z», z n'apparaîtra pas dans votre listing du répertoire tant que vous n'aurez pas tapé «rf».

rf ne perd pas l'historique. Supposons que naviguez de haut en bas dans une chaîne de répertoires. Il y a un fichier abc que vous voulez remonter. .m+1 fait l'affaire. Il remonte, et quand vous remontes à nouveau il est là mais pas en position. rf retrie les fichiers. Parce que le fichier est fermé et rouvert, il avait l'habitude de couper tout ce qui était en dessous dans l'historique d'édition. De la même façon qu'actualiser une page web ferait perdre tout ce qui est en dessous. J'ai corrigé cela, pour que les fichiers en dessous soient conservés si l'action est désignée nostack - et refresh est toujours nostack. En fait on peut faire n'importe quel remplacement. Peut-être que vous êtes dans le fichier foo et vous voulez bar à la place. ^ e bar fait l'affaire. Puisque edbrowse ne pousse pas sur la pile, vous ne perdrez aucun fichier en dessous, et hist vous montrera la même chaîne de tampons - sauf bar au lieu de foo.

Le remplacement d'une page web par une autre peut être quelque peu trompeur. La page ci-dessous est toujours là, mais vous n'y êtes pas arrivé en activant un lien hypertexte sur la page actuelle. vous l'avez appelé en activant un hyperlein sur une autre page.

## Hyperliens

Un lien vers une autre page Web est mis entre accolades, comme ceci :

{Des rapports récents} suggèrent un lien entre la santé et les bactéries intestinales.

En coulisses, «Des rapports récents» est lié à http://www.sciam.com/article. cfm?id=jeremy-nicholsons-gut-instincts, mais vous ne le voyez pas, à moins d'activer le lien ou d'afficher le source HTML.

Naturellement le texte navigable pourrait également contenir des mots entre accolades, particulièrement si la page Web est de nature technique. Il y a une certaine ambiguïté. mais c'est souvent clair d'après le contexte. {Plus d'information} est probablement un lien, tandis que ${HOME}/.profile ne l'est probablement pas.

Certaines pages Web présentent une série d'icônes qui sont des liens vers d'autres pages. C'est-à-dire, vous cliquez sur une icône, plutôt que sur une expression, pour aller ailleurs. Ces icônes sont supposées être intuitives. Parfois elles le sont -- parfois non. Parfois le concepteur Web est assez aimable pour fournir un texte décrivant l'image. Dans ce cas, l'expression est employée comme lien. S'il n'y a pas d'expression alternative, on utilise le nom de la cible de l'hyperlien. Ce nom peut être étonnamment utile, ou tout à fait inutile, comme dans «index.html». Si on ne peut déterminer un nom, le lien générique {image} est employé. Dans ce cas, vous devrez aller à la page Web pour découvrir ce qu'il contient.

Notez qu'une image ne faisant pas partie d'un hyperlien voit sa composante texte "alt" affichée entre crochets comme dans [fille avec une longue tresse rouge]. Les images sans texte alternatif sont omises, sauf si vous avez activé les images jointes via "attimg+".

Pour suivre un lien, tapez la commande «g» (go). Oui, «g» lance également une commande de remplacement globale, mais seulement s'il est suivi d'une expression régulière. De lui-même, «g» suit le lien sur la ligne courante, «g2» suit le deuxième lien sur la ligne courante, et «4g» suit le lien sur la ligne 4. g$ active le dernier lien de la ligne. Si un lien s'affiche sur plusieurs lignes, vous devez être sur la première ligne, celle qui contient l'accolade gauche. Utilisez g? pour afficher l'url - l'endroit où vous voulez aller en tapant g. g- va au lien mais sans navigation, ou sans traitement (ex. un fichier pdf), or sans le jouer (ex un fichier mp3). Ceci contourne les plugins et récupère le fichier brut.

La commande g peut également agir sur un lien affiché en mode texte brut, s'il «semble» être une URL valide. Si un ami vous envoie une URL intéressante par mail, et que vous ayez sauvegardé ce mail, vous pouvez «aller» à ce lien, même si le fichier n'est pas en HTML, et si vous n'avez pas activé le mode navigation.

g va également à un fichier local, si la ligne de texte est exactement le nom de ce fichier. C'est comme Mode répertoire , où vous modifiez un répertoire et accédez à des fichiers dans ce répertoire, mais il existe d'importantes différences. C'est toujours un fichier texte. La suppression de la ligne ne supprime pas le fichier, la substitution dans la ligne ne renomme pas le fichier, et le chemin n'est pas ajusté par rapport au nom de fichier actuel. Si votre fichier texte contient des noms de fichiers auxquels vous souhaitez vous rendre, vous devez être dans le répertoire qui contient ces fichiers, (sauf si ce sont des noms de chemin absolus). Cet aspect de g peut parfois être pratique, mais ne le confondez pas avec le mode répertoire.

## Liens internes

Bien que la plupart des liens mènent à d'autres pages Web, quelques liens pointent sur d'autres sections dans le document courant. Cette fois encore, le contexte peut vous aider. Les liens dans une table des matières sont habituellement des renvois aux chapitres dans le document courant. Même chose pour les liens qui ressemblent à : «voir {annexe I}», ou «voir la section {configuration de matériel}».

La commande «g» suit un lien interne ou un lien externe. Dans l'un et l'autre cas, vous vous trouverez dans un endroit différent. Cependant, si le lien est interne, vous êtes toujours dans le même fichier. En fait, la seule chose qui a changé est la ligne courante. La nouvelle ligne est affichée, et devrait correspondre au lien que vous avez activé. Souvent les mots sont identiques. «Activer {appendice I}», et vous verrez probablement le titre «appendice I» de la section. Tapez z10 pour lire les premières lignes de l'appendice.

## La touche retour arrière

Si vous éditez un nouveau fichier par l'intermédiaire des commandes «e», «b», ou «g», et que vous avez déjà du texte dans le tampon, Ce texte est regroupé et poussé sur une pile. Vous pouvez «dépiler» le texte par la commande «^». C'est supposé être intuitif -- la flèche haute se dirigeant à la page précédemment affichée à l'écran.

Ce dispositif semble plutôt idiot lorsqu'on est en mode édition, mais il se comprend en surfant sur l'Internet. Souvent nous descendons en suivant deux ou trois liens, pour finir par nous trouver dans un cul-de-sac. «Je n'ai pas voulu aller ici. » En tapant la touche retour arrière à plusieurs reprises, jusqu'à revenir en terrain familier. Nous pouvons maintenant partir dans une nouvelle direction. La commande «^3» ou le «^^^» revient trois pages en arrière. N'employez pas ce dispositif itératif à moins que vous sachiez exactement où vous voulez revenir.

Notez que l'état entier d'une session d'édition est mémorisé et reproductible, y compris le nom de fichier, la dernière recherche/remplacement, les chaînes de substitution, les hyperliens et des formulaires, le Javascript compilé, tout !

La pile ne doit pas être confondue avec l'édition simultanée de plusieurs fichiers, décrite dans la première section. En fait chaque session d'édition, e1 e2 e3…, a sa propre pile. Les sessions simultanées sont appropriées quand vous devez se déplacer dans les deux sens entre deux fichiers, ou copier/coller entre eux. Cependant, une session, avec sa pile interne, est habituellement suffisante pour surfer sur le net.

Si une commande de navigation échoue, vous donnant un tampon vide sans intérêt, on dépile automatiquement, vous faisant revenir à la page Web précédente. Maintenant vous pouvez réessayer le lien par «g», ou suivre un lien différent de la page. Noter qu'une commande de navigation peut échouer, et afficher la cause de l'échec, si le serveur à distance est bien conçu. Dans ce cas, vous pouvez avoir le message d'erreur «fichier non trouvé» et vous trouver sur une nouvelle page Web, laquelle explique le problème. Après avoir lu l'explication, suivez ses indications, ou tapez «^» pour revenir et essayez de nouveau.

Si un nombre est affiché, même égal à 0, le texte précédent a été mis sur la pile, et vous êtes dans un nouveau fichier ou url. Le nombre affiché est la taille du nouveau fichier. Employer la commande «^» pour revenir en arrière. S'il n'y a pas de nombre, simplement un message d'erreur, alors Edbrowse n'a pas créé de nouveau tampon. Il n'est probablement pas allé aussi loin. Taper «.» réaffichera la ligne affichée auparavant.

Utilisez le préfixe nostack pour remplacer la page web courante, au lieu de l'empiler. Par exemple, "nostack b www.ibm.com" remplace votre page web courante par ibm.com, et ^ ne vous fera pas revenir où vous étiez, parce que cette page a disparu. `^ b www.ibm.com' fait la même chose. Le préfixe ^ indique que nous avons dépilé la pile, et vous ne pouvez plus aller en arrière. Cette possibilité préserve des ressources, si vous pensez ne plus avoir besoin de cette page.

Suivre un lien interne à une autre section dans le document courant ne pousse rien sur la pile. En d'autres termes, «^» ne vous renverra pas où vous étiez. En fait, il vous renverra à la page Web précédente, ce qui n'est pas ce que vous vouliez. À la place, un historique des pages est accessible avec la touche &. Vous pouvez utiliser &3 ou &&&, comme ^, mais seulement si vous savez jusqu'où vous voulez revenir. Alternativement, si vous retournez souvent à la table des matières par exemple, vous pouvez marquer la position actuelle avec «kr» puis, quand vous voulez y revenir, employer l'étiquette «'r». Même avec ce label défini, & est plus pratique, parce qu'il vous ramène à la dernière en-tête visitée, et vous pourrez descendre dans la table des matières vers la section suivante qui vous intéresse.

## La commande M

Si vous voulez lire et/ou agir simultanément sur plusieurs pages Web en parallèle, lesquelles sont normalement placées sur la pile, vous pouvez les déplacer une à une dans une autre session en utilisant la commande «M» majuscule. Les étiquettes et les liens sont transférés également. Une fois que la page Web a été transférée sur une autre session, Edbrowse lance automatiquement la commande «^». Vous êtes de nouveau à la page précédente.

Il est généralement peu sûr de faire une copie d'une page Web courante, avec ses objets Javascript etc. , aussi la commande M déplace la page et la met à l'écart, puis vous renvoie la page précédente. Notez, cette commande fonctionne aussi bien avec des fichiers.

Supposons qu'une page Web affiche

{avions}
{trains}
{automobiles}

Si les trois rubriques vous intéressent, tapez ces commandes dans l'ordre :

    1g
    M2
    2g
    M3
    3g
    M4

Maintenant les sessions 2 3 et 4 sont les sous-pages traitant respectivement des avions, trains et automobiles. Vous pouvez remplir des formulaires ou suivre des hyperliens dans n'importe laquelle d'entre elles, ou rester en session 1 et faire autre chose.

Edbrowse écrase la session de destination, à moins qu'il y ait eu des modifications non enregistrées. Vous pouvez utiliser la commande M sans destination si vous ne savez pas quelles sessions sont disponibles. Edbrowse créera une session et vous affichera quelque chose du genre "déplacé en session 15".

M0 est identique à M, mais n'imprime pas la nouvelle session au niveau de débogage 0. Tout comme M3 n'imprime pas la session 3 au niveau de débogage 0.

## Historique de navigation

Edbrowse maintient une pile de tampons pour chaque session. Chaque fois que vous éditez un nouveau fichier, ou que vous allez sur un lien hypertexte sur une page web, le tampon existant est poussé sur la pile et un nouveau tampon est alloué, pour contenir le nouveau fichier ou la nouvelle page web. Tapez hist pour voir un historique de vos fichiers et/ou pages web. Ceci est similaire à l'historique d'un navigateur, cependant, il est transitoire, et ne reflète que les pages web que vous avez visitées depuis que vous avez lancé edbrowse. Edbrowse ne maintient pas un fichier permanent des sites que vous avez visités. Avec ceci en tête, il est important de maintenir un fichier de signets avec vos favoris, afin que vous puissiez appeler ces sites rapidement.

La commande hist affiche les tampons de la pile, en commençant par le premier fichier auquel vous avez accédé, jusqu'au dernier. Elle affiche le titre s'il s'agit d'une page Web, ou le nom du fichier, ou rien s'il n'y a pas de nom de fichier. Une étoile indique le tampon que vous êtes en train de consulter. Il s'agit généralement du dernier tampon de la pile.

hist
+2: 1er fichier de la session
+1: fichier intermédiare
*0 fichier que je viens d'appeler

Les commandes up et down permettent de se déplacer de haut en bas dans l'historique, c'est-à-dire de haut en bas dans cette liste. Ceci est similaire à gdb, où les commandes haut et bas traversent les cadres empilés.

up3 est l'abréviation de up 3 times. up/foo va jusqu'à un tampon dont le nom de fichier ou le titre contient la sous-chaîne foo. Vous pouvez ajouter ces modificateurs à down.

Notez que les déplacements vers le haut et vers le bas ne produisent pas d'erreurs si le tampon n'est pas écrit. Vous pouvez passer à une autre session edbrowse en toute impunité et, pour être cohérent, vous pouvez également vous déplacer vers le haut ou vers le bas de la pile. Il y a cependant une différence. Si vous êtes dans la session 1 et que vous passez à la session 2, puis tapez q1, edbrowse dit que la session 1 n'a pas été sauvegardée. Mais si vous vous rendez dans un tampon antérieur et que vous quittez, edbrowse vous laissera quitter sans écrire, parce que le tampon actuel n'a pas le drapeau de changement activé. Edbrowse ne regarde pas tout le long de la pile pour voir s'il y a un tampon non écrit. De la même manière, vous pouvez monter, puis passer à la session 2, puis à q1, et edbrowse quittera joyeusement la session 1. Soyez donc prudent lorsque vous quittez un tampon non écrit en montant ou en descendant.

Si vous suivez un hyperlien, puis remontez, puis suivez un autre hyperlien, la page recherchée par le premier hyperlien est libérée. Edbrowse conserve une ligne de pages extraites, pas un arbre. C'est ainsi que les autres navigateurs se comportent. Si vous voulez conserver les deux pages, pointées par les deux hyperliens, suivez le premier lien, utilisez la commande M (décrite dans la section précédente), puis allez au second lien.

Ne confondez pas up et ^. ^ annule la page sur laquelle vous vous trouvez et retourne à la page précédente. Vous ne pouvez plus descendre après cela. Cependant, up ne fait que remonter la pile ; la page sur laquelle vous vous trouviez est toujours là, et accessible par down.

## Musique de fond

Si vous essayez d'écouter un synthétiseur de parole, la dernière chose dont vous avez besoin est une musique de fond. Au lieu de jouer la chanson, je la rends disponible par un hyperlien.

{Background Music}

Ce lien apparaît toujours en début de page ou près du début. Cliquez sur ce lien pour entendre la musique. Elle devrait être jouée automatiquement si vous avez le bon plugin configuré. S'il n'existe pas de plugin pour ce type particulier de fichier, ou si les plugins sont désactivés, alors Edbrowse téléchargera le fichier audio dans le tampon courant. Vous pouvez l'enregistrer dans un fichier, ou le faire jouer d'une autre façon. Essayez la commande «pb» (play buffer). Normalement, «pb» prend le nom du fichier pour reconnaître le format audio. Si le nom de fichier finit par .wav, c'est un fichier son, et on continue. Si cela échoue, Edbrowse cherche à inférer le type de fichier par l'attribut "Content-Type" de l'en-tête http. Si le nom de fichier n'est pas particulièrement parlant, et que les en-têtes HTTP ne fournissent pas un type de contenu connu, et que vous connaissez son format audio, vous pouvez le spécifier en tapant «pb.wav» pour un fichier de wav, «pb.mp3» pour un fichier mp3, et ainsi de suite. Le fichier de configuration (décrit plus loin) inclut le type des descripteurs de fichiers, qui indique à Edbrowse comment jouer les fichiers audio. . Ceux-ci doivent être configurés, sans quoi la commande «pb» ne fonctionnera pas. Elle affichera quelque chose comme «je ne sais pas traiter un fichier mp3». C'est conforme à d'autres navigateurs, qui emploient des extensions pour jouer les fichiers multimedia en provenance de l'Internet.

## Titres

La plupart des pages contiennent des titres, du niveau 1 au niveau 6. Ces titres sont référencés de h1 à h6. Comme les accolades indiquent un lien, h2 indique un titre de second niveau. H2 ne fait pas partie du texte; c'est une balise. Vous pouvez sauter à un titre différent en utilisant les commandes ed classiques : /h2 pour le titre de niveau 2 suivant, ?h1 pour le titre de niveau 1 précédent et /h\d pour le titre suivant de n'importe quel niveau.

## Texte mis en relief

Certains sites web utilisent des balises pour mettre l'accent sur certains mots ou phrases. Par exemple, <em> indique un texte mis en relief. À l'écran, ceci est présenté dans une police différente, mais cela ne nous aide pas. Edbrowse met une * avant et après le texte. Ainsi <em>critique</em> devient *critique*.

Comme les marqueurs h1 ci-dessus, les étoiles ne font pas partie du texte. Elles fournissent des informations de présentation, qui sont aussi sémantiques.

Les marqueurs à caractère unique sont :
* emphase
@ italique, parfois utilisé pour un titre ou un nom
~ supprimé, comme le système ~attachEvent~ en javascript qui est obsolète
_ souligné, ce mot littéral est important

Une citation bloc, <blockquote>, est indiquée par les marques d'ouverture et de fermeture `` et ''. Elle est placée dans son propre paragraphe, ce qui correspond généralement à l'intention de l'auteur. Certains serveurs de messagerie placent l'email original en blockquote, en bas, lors de la formulation d'une réponse. Quand votre ami répond à votre email, vous pourrez voir votre texte d'email original en bas, encadré par `` et ''.

## Zones de saisie

Les zones de saisie d'un formulaire en ligne sont indiqués par les signes «<» et «>». Par exemple, un moteur de recherche pourrait présenter le formulaire suivant :

    Mots-clés : <>
    Recherche avancée : <->
    Langue : <en>
    Rechercher maintenant : <GO>
    Effacer : <RESET>

La première ligne de cet exemple de formulaire est une zone de texte, initialement vide. Vous y entrez les mots-clés recherchés. On verra plus tard comment écrire et éditer des zones de saisie.

La deuxième ligne est une boîte à cocher. Ce champ indique au moteur de recherche qu'il faut employer des dispositifs booléens avancés, comme ce mot-clé et ceci, ou cela, mais pas ceci, etc. Le bouton est désactivé, indiqué par -. (La plupart des personnes ne savent pas employer la recherche avancée de toute façon). Un + signifie que le bouton est activé.

La troisième ligne détermine la langue des mots-clés, ici anglaise par défaut. Ce n'est pas une zone de texte à remplir, vous ne pouvez y entrer n'importe quoi. C'est une liste déroulante de langues. Nous décrirons comment regarder les options plus tard.

La quatrième ligne est le bouton de soumission, qui envoie le formulaire au moteur de recherche et renvoie les résultats. Ce «champ» ne peut pas être édité ; ced n'est qu'un bouton à pousser.

La cinquième ligne est également un bouton à pousser. Il efface toutes les données que vous avez saisies, pour recommencer une recherche. Les valeurs par défaut seront reconstituées. Ainsi la troisième ligne revient à <en>, plutôt qu'à <>.

## Saisie de données

Compléter un formulaire est relativement facile, une fois que vous connaissez la commande (surchargée) «i». Oui, «i» par lui-même est la commande d'insertion de texte, mais dans le mode navigation, «i» se rapporte aux zones de saisie.

S'il y a une seule zone de saisie sur la ligne courante, «i?» donne des informations sur cette zone de saisie. Si la ligne contient plusieurs zones de saisie, vous devrez employer un nombre, comme «i3?» pour le troisième champ. Le type de zone de saisie est affiché, puis sa taille, puis le nom de la zone. Si la zone de saisie est un choix multiple, issu d'une liste de choix le type est select et la liste d'options est affichée en-dessous, avec leur numéro d'ordre au début. Pour choisir une option, vous pouvez soit taper une sous-chaîne qui détermine cette option de manière unique, comme «mich» pour le Michigan, soit taper son numéro. Un signe d'arrêt 🛑 signifie que cette option est désactivée et que vous ne pourrez pas la choisir. Rappelez-vous le formulaire exemple dans la section précédente. Si vous tapez «i?» au troisième champ, vous pourriez voir ce qui suit

    choisir[7] la langue
    1: anglais
    2: français
    3: allemand
    4: italien
    5: espagnol

Si une liste contient des centaines d'options, tapez «i?chaîne» pour ne voir que les options qui contiennent la chaîne indiquée. Tapez «i?ma» dans une zone de saisie des départements et vous obtiendrez la Marne, la Manche, la Mayenne etc. Alors vous pourrez choisir l'option que vous voulez par son nom ou son numéro.

Si le type est selection suggérée, alors vous n'êtes pas obligé de choisir l'une de ces options ; vous pouvez taper autre chose. Un ` en tête indique cela. Saisissez "japonais", au lieu de l'une des langues proposées.

Maintenant un peu de saisie de données. Tapez «i=xyz» pour entrer «xyz» dans la zone de saisie. Tapez «i3=xyz» pour mettre l'information dans la troisième zone de saisie sur la ligne courante. Si vous obtenez une erreur, c'est probablement parce que le champ a un ensemble fixe d'options, et vous n'avez pas sélectionné une de ces options. Vous pouvez saisir une des options ou son numéro. Vous pouvez également saisir un fragment du texte de l'option désirée, et Edbrowse complétera le reste. C'est possible à chaque fois qu'une et seulement une option contient une copie (insensible à la casse) de la chaîne que vous avez tapée. Ainsi vous pourriez dans l'exemple ci-dessus taper «tali» et obtenir l'italien, puisque c'est la seule langue contenant ces quatre lettres. C'est utile quand on vous entrez votre adresse, et qu'on demande le pays. Tapez quelques lettres du nom de votre état, suffisamment pour qu'il soit unique, et vous tomberez sur l'option correcte dans la liste. Noter le paradigme ici: en ligne de commande, on ne veut pas patauger dans un menu à moins d'y être absolument obligé.

Il y a une certaine ambiguïté quand l'option est elle-même un nombre. Dans ce cas-ci edbrowse exécute trois comparaisons. Si vous saisissez le nombre exact, cette option est choisie. Si le nombre que vous avez tapé n'est pas une des options, il est traité comme numéro d'une entrée de menu. Si ce n'est pas un numéro valide du menu (par exemple hors de la gamme), edbrowse fait une comparaison partielle avec les options, recherchant ces chiffres comme sous-chaîne. Ceci peut sembler confus, mais c'est habituellement ce que vous voulez obtenir.

Si plusieurs options sont autorisées, utilisez une virgule pour les séparer. i=esp,tali vous donnera l'espagnol, l'italien. s/$/,3 ajoute l'allemand à la liste.

Que faire si l'une des options contient une virgule ? Utilisez selsep=| pour changer le séparateur en |. Les lignes sélectionnées seront mises à jour dans tous vos tampons, même ceux en arrière-plan ; il s'agit d'un changement global. Vous pouvez définir votre séparateur préféré dans votre fonction init. Les caractères comme | ou ` ou ^ ont peu de chances d'apparaître dans les options.

Si vous ne voulez pas que votre mot de passe soit affiché à l'écran pendant que vous le tapez, vous pouvez utiliser ipass (ou ipass2 si le mot de passe est le deuxième champ) pour obtenir une invite sans écho pour votre mot de passe. Lors de l'affichage de tout ce que vous avez saisi avec ipass, vous obtiendrez des étoiles en retour, conformément aux autres navigateurs. Cependant, si vous remplissez un formulaire, et que le niveau de debug est supérieur ou égal à 3, le mot de passe envoyé au serveur sera affiché en clair. Les utilisateurs n'utilisant que rarement le mode debug, ce n'est pas un inconvénient.

Si c'est votre ordinateur personnel, et que vous n'êtes pas inquiet que quelqu'un voie l'écran, entrez simplement le mot de passe comme n'importe quel autre champ.
i2=secret
Ou si vous découvrez que vous devez inclure un signe de ponctuation :
s2/$/!/
Parce qu'il a été saisi en texte brut, ou modifié au clavier, il sera visible lorsque vous examinerez les lignes dans le tampon. L'utilisation d'ipass le rend à nouveau invisible.

Vous pouvez employer i<7 pour amener le contenu de la session 7 dans la zone de saisie courante. La session 7 ne doit avoir qu'une seule ligne de texte. Utilisez i<7@39 pour lire la ligne 39, ou i<7@'c pour lire la ligne étiquetée c. + - . et $ sont également autorisés. De même, «i<nom de fichier» lit le contenu du fichier dans la zone de saisie courante. Seule la première ligne du fichier est lue. Le nom de fichier est expansé de la manière habituelle. Ceci inclut l'expansion de caractères «joker», tant que l'expansion mène à un seul fichier. Mettre suffisamment de caractères autour du «*» pour indiquer un fichier unique. Ceci ne change pas le statut d'un champ de mot de passe, masqué ou visible.

Les zones de texte multiligne sont souvent utilisées pour taper un paragraphe, un commentaire complexe. Mais certains sites s'attendent à ce que vous composiez votre commentaire sur une seule ligne d'édition. Dans ca cas, changez de session et utilisez la puissance de l'éditeur. Composez votre commentaire, tapez ,J pour le convertir en monoligne, revenez en arrière et tapez i<7 pour l'insérer dans la zone de saisie. Vous pouvez également taper etmp pour créer une zone temporaire sur la pile actuelle. Composez votre message comme précédemment, montez, tapez i<-1, puis descendez et ^ pour vous débarrasser du tampon temporaire.

Supposez maintenant que vous tapiez votre numéro de carte bancaire, chacun des 16 chiffres, dans la zone de saisie de texte. Si vous avez fait une erreur de frappe, vous ne voulez pas retaper la chaîne entière. Aucun problème -- employez la commande remplacement. Vous pouvez le faire en tapant «i/x/y/» ou «s/x/y/» -- comme vous préférez. Rappelez-vous, il vous faudra peut-être indiquer la zone de saisie, comme «s3/x/y/». La syntaxe habituelle de substitution fonctionne. Evitez une excessive généralisation du suffixe «g» . «s3/x/y/g» remplace chaque «x» par «y» dans la troisième zone de saisie, mais n'affecte pas les autres champs de la ligne courante.

Si le bouton de soumission est le troisième champ sur la ligne courante, vous pouvez l'activer par «i3*». Cependant, «i*» est suffisant lorsqu'il y a un seul bouton sur la ligne. De même, vous pouvez remplir une zone de texte en tapant «i=kangourou», plutôt que «i1=kangourou», si le deuxième champ sur la ligne courante est un bouton de soumission. Vous devez seulement indiquer un numéro de champ de saisie quand il y a plusieurs champs de saisie de texte, ou plusieurs boutons, sur la ligne courante.

## Zones de texte

Quelques formulaires Internet vous permettent de taper quelque chose librement, comme «écrivez svp vos commentaires ici ». Ceci se fait dans une fenêtre à l'écran, ayant un nombre fixe de lignes et de colonnes, bien que ce soit habituellement une contrainte artificielle. L'utilisateur voyant peut généralement taper plus de lignes que la fenêtre peut contenir, et le texte défilera dans la fenêtre. Par chance, l'utilisateur aveugle peut ignorer cette fenêtre artificielle et taper en toute liberté. Comme d'habitude, la commande «i?» indique la taille qu'aurait cette fenêtre dans un navigateur visuel. Vous verrez quelque chose comme « area [7x40]», qui indique une fenêtre de 7 lignes par 40 colonnes.

L'implémentation dans lynx des zones de texte est particulièrement restrictive. Ce qui n'est pas étonnant, puisque lynx n'est pas un éditeur. Vous pouvez corriger les fautes de frappe, mais vous ne pouvez pas réellement «éditer» le texte sur lequel vous travaillez. Une fois tapée la touche entrée, cette ligne est terminée, et vous êtes sur la prochaine ligne. Vous ne pouvez pas déplacer des lignes ou insérer les lignes, ni non plus préparer vos commentaires à l'avance et les insérer dans la zone de texte à partir d'un fichier. Dans Edbrowse, la zone de texte est gérée à partir d'une autre session d'édition. Ceci permet d'utiliser toutes les ressources de l'éditeur. Vous pouvez déplacer du texte, faire des substitutions globales, ou insérer des commentaires à partir d'un fichier. La session d'édition est choisie pour vous, et apparaît dans la zone de saisie. Voyez le formulaire suivant :

    Donnez votre adresse email: <>
    Tapez vos commentaires: <session ?>

Si vous désirez taper un commentaire, vous devez allouer un tampon avec la commande "ib". Ici, <session ?> devient <session 2> (ou quelque chose de ce genre). La session 2 n'était pas active quand la navigation a commencé, mais maintenant elle l'est. Tapez «e2» pour aller à la session 2, préparer vos commentaires, et tapez «e1» pour revenir au formulaire.

Vous pouvez également utiliser ib100 pour associer la session 100 à cette zone de saisie. Cela peut être utile dans les scripts, dès lors que vous savez où se trouvent vos tampons et que vous pouvez les remplir de texte.

Sur la plupart des pages Web, les zones de texte sont initialement vides, donc la session 2 sera vide, mais ce n'est pas toujours le cas. Vérifiez la présence d'un texte pré-existant avant de commencer à taper vos commentaires. Un site web particulièrement arrogant pourrait pré-remplir la zone de texte avec : «J'aime votre site Web parce que : ». Un texte préexistant est indiqué par <session text> plutôt que <session ?>.

Quand vous enverrez le formulaire, comme on va le voir dans la prochaine section, le texte de la session 2 remplacera les mots «session 2» dans la zone de saisie. et vos commentaires soigneusement rédigés sont en route.

Si vos commentaires tiennent sur une seule ligne, éventuellement une longue ligne, vous pouvez taper i=comments, et sauter la session annexe. À ce stade, la zone de texte se comporte comme un simple champ de saisie de texte. Vous ne pouvez plus changer d'avis ; vos commentaires sont maintenant insérés dans la ligne.

## Pousser le bouton

Si la troisième zone de saisie sur la ligne courante est un bouton de validation ou d'annulation, vous pouvez l'enfoncer en tapant «i3*». Le bouton d'annulation réinitialise toutes les zones du formulaire, telles qu'elles étaient au premier chargement de la page web. Le bouton de soumission envoie le formulaire au serveur à distance et attend une réponse. C'est comme suivre un lien Internet, mais ici vous envoyez quelques données avec la demande. Tapez «kangourou» dans un moteur de recherche et vous lirez bientôt une page Web au sujet des kangourous. Comme avec n'importe quel autre lien, vous pouvez employer la touche retour arrière «^» pour revenir. Dans ce cas, vous reviendrez au formulaire en ligne. Vous pouvez modifier les données et soumettre de nouveau le formulaire, avec des questions sur un autre animal.

Edbrowse supporte les méthodes «GET» et «POST», les protocoles HTTP les plus communs, et elles semblent fonctionner pour la plupart des sites web.

Une fois que vous avez soumis votre formulaire, et vous regardez les résultats, vous pouvez remarquer quelques caractères étranges à la fin du nom de fichier. Si vous avez recherché l'information sur des kangourous, le nom de fichier pourrait ressembler à : www.recherche.com?keywords=kangourou. Le texte qui suit le point d'interrogation est une version codée des données que vous entrées dans le formulaire. Il devient une partie de l'URL virtuelle. Ceci ne s'applique que pour la méthode get; la méthode post envoie les données par un autre canal.

Souvenez-vous que des boutons peuvent lancer du Javascript, sans être du type submit ou reset. Tous ces boutons peuvent être enfoncés par la commande i*. Si plus d'un bouton est présent sur la ligne courante, n'importe quel style de bouton, alors i* n'est pas suffisant; vous devez spécifier quel bouton, comme dans i3*.

## Infobulle

Certains sites web laissent apparaître un texte lorqu'on passe sur un lien ou une icône; puis il disparaît quand on éloigne la souris. Edbrowse n'a rien de comparable à une souris survolant une icône, donc il faut penser à quelque chose de semblable.

Une infobulle est souvent explicative, et rarement essentielle. Comme le but de Edbrowse est de limiter les sorties, edbrowse n'affiche pas ce texte par défaut. Cependant, vous pouvez l'activer avec la commande showall. Toutes les infobulles apparaissent, sur toute la page. Il serait agréable de survoler une ligne particulière, mais aller jusque-là est difficile à envisager. Ce ne serait pas très lisible si un pour un élément que vous pouvez survoler affiche quelque chose ailleurs sur l'écran, par exemple 20 lignes plus bas dans le tampon. Pour l'heure, l'approche est d'afficher toutes les infobulles à l'endroit où elles apparaissent et, si vous le désirez, vous pouvez sauvegarder deux tampons et faire un diff pour lire les lignes qui ont été modifiées. Vous n'aurez besoin de ceci qu'une seule fois sur un site web que vous consulterez plus tard régulièrement. Une fois que vous aurez lu les bulles explicatives vous ne voudrez probablement plus les lire à l'avenir, et vous pourrez consulter ce site avec la commande showall désactivée.

Dans de rares cas, le survol d'une icône affiche des liens ou des boutons. Parce que ce sont des éléments actifs, ils sont affichés en permanence. Vous avez besoin de savoir que ces liens ou boutons sont disponibles. Dans d'autres termes, edbrowse ne cache que les infobulles.

Les feuilles de style en cascade (css) injectent également du texte dans la page, mais ceci tend à se fonder sur le type d'élémént ou la classe. Mettre une étoile avant chaque paragraphe qui a class=footnote. Mettre une flèche droite après chaque lien avec class=external, vous envoyant sur une autre site. Mettr un cercle vert devant chaque champ de saisie avec class=required, un champ obligatoire. Ces petits symboles sont surtout visuels,et de presque aucune valeur pour les utilisateurs d'edbrowse. Encore une fois, ils sont cachés par défaut. Ces textes ne sont pas strictement des infobulles, mais ils sont également révélés par la commande showall. Comme évoqué précédemment, les caractères injectés ou emojis sont des rappels visuels utiles des noeuds qu'ils décorent, et sont rarement indispensables; cependant, il y a de rares sites ou le texte injecté est explicatif, et devrait être lu en premier.

Finalement, la commande showall affiche les sections rendues invisibles par css ou Javascript. Elles sont entre doubles crochets, par ex. [[hello world]]. Elles peuvent être cachées parce non pertinentes pour vous, ou dans la situation actuelle. Pourquoi afficher le lien de commande si votre panier d'achats est vide ? Cependant, edbrowse est un travail en cours, et parfois une bogue laisse une section invisible, alors qu'elle devrait être affichée. C'est pourquoi vous pouvez souhaiter de voir ce que vous manquez.

La commande showall est rarement nécessaire lorsque le javascript est désactivé. Sans Javascript et css, tout le texte survolé et toutes les sections invisibles sont affichés.

## Couleurs dans la page

Dans un monde accessible, les couleurs ne devraient pas être significatives, sémantiquement;mais parfois elles le sont. Vous avez enfoncé le bouton de soumission d'un formulaire de saisie, et vous recevez un message du genre: "Entrée invalide : revenez sur les zones marquées en rouge". Comment pouvez-vous savoir quelles sont les zones en rouge ? Tapez la commande "colors" pour les trouver. C'est une bascule, ainsi les commandes colors+ et colors- fonctionneront. Les mots, phrases, ou des sections entières seront précédés d'un indicateur de couleur. Dans l'exemple suivant, la date de naissance est en rouge, parce qu'en 1983, Février n'a pas 29 jours. Le reste des zones de saisie est en noir.

:black≪Prénom <Johhn>
Nom <Smith>
:red≪Date de naissance <02/29/1983>
Envoyer <send>≫

Les sites web spécifient souvent les couleurs sous forme de valeurs rgb, ce qui est inutile pour nous. Savez-vous réellement que #e8180f est rouge ? Donc, Edbrowse convertit ces valeurs dans la couleur standard la plus proche. Ces couleurs sont définies par convention css, et sont donc nécessairement en anglais. Si vous utilisez Edbrowse en allemand, avec tous ses messages traduits, vous aurez pour une section noire :black, et non : schwartz.

Les délimiteurs sont des opérateurs mathématiques non-ascii comme << and >>. Il m'arrive d'utiliser des unicodes plus élevés, parce qu'il nous faut dépasser les limites de l'ascii. Vous pouvez configurer votre adaptateur pour afficher ces unicodes comme vous voulez, par exemple, "couleur début" et "couleur fin".

Les couleurs provenant de css, et le css ne fonctionnant pas sans Javascript, cette fonctionnalité n'est possible qu'avec Javascript activé.

## Web et adresses mail

La commande «A» majuscule montre les adresses Web sous les liens sur la ligne courante, ou sur un intervalle de lignes, comme 4,7A.. Chaque adresse sera entourée par les tags <a> et </a>, prête à être collée dans un fichier de signets, si c'est ce que vous souhaitez. Ces adresses existent dans une nouvelle session ; la session précédente a été empilée. Ajoutez ces dernières à votre fichier de signets par «w+ $bookmarks», si vous avez renseigné la variable d'environnement $bookmarks. Ils seront placés à la fin ; vous pouvez les déplacer dans le fichier plus tard, une fois «hors ligne». En conclusion, employez la commande ^ pour retourner à la page Web que vous regardiez. Voici à quoi elle pourrait ressembler :

    < b this.that.com/whatever # navigation dans une page Web
    > 16834 # taille du code HTML brut
    > 7855 # taille du texte navigable
    < /kangourou/i # recherche de kangourou dans la page
    > cliquez ici pour {plus d'informations sur des kangourous}, ou {nous écrire}.
    < A # capture des URLs
    > 144 # taille des URLs
    < ,p # affichons-les
    > <br><;
    > plus d'informations sur des kangourous
    > </a>
    > nous écrire:info@kangaroo.org
    < 4d # nous n'avons pas besoin de l'adresse mail
    < w+ $bookmarks # ajoute cette URL au fichier de signets
    > 336
    < ^ # retour à la navigation
    > cliquer ici pour {plus d'informations sur des kangourous}, ou {nous écrire}.

Je suppose que je pourrais interroger la variable d'environnement $bookmarks moi-même, et ajouter l'URL à ce fichier automatiquement, mais comme cet exemple le montre, vous pourriez ne pas vouloir ajouter tous les liens. En fait l'adresse électronique n'a rien à faire dans un fichier de signets. En outre, vous pouvez vouloir changer la description du lien, bien que dans cet exemple la description soit raisonnable.

Alternativement, vous pourriez ignorer l'URL et conserver l'adresse électronique, pour l'ajouter à votre carnet d'adresses. Là encore, vous voudrez changer l'expression générique «nous écrire» pour quelque chose de plus parlant, comme adresse-kangourou. C'est un alias, qu'il est possible d'utiliser pour envoyer du courrier à ce destinataire. Les sections suivantes décrivent l'utilisation de Edbrowse en tant que client de courrier.

si A est appliqué sur une seule ligne, et s'il n'y a aucun lien sur la ligne courante, ou si vous n'êtes pas dans le mode navigation, le nom de fichier courant est employé. C'est utile quand vous voulez ajouter à votre fichier de signets l'adresse URL de la page courante, plutôt qu'un autre page pointée par un lien.

Si la page courante est le résultat d'un envoi de formulaire, le nom de fichier peut inclure vos zones de saisie après le point d'interrogation. S'il le fait, c'est une fonctionnalité, pas une bogue. Cette URL exacte, avec les données à la fin, peut être stockée comme signet et être activée à plusieurs reprises, comme si vous aviez complété le formulaire à chaque fois. Chaque semaine, vous pouvez appeler cette URL virtuelle pour voir s'il y a de nouvelles informations sur des kangourous. Un exemple plus pratique pourrait être un formulaire qui consulte la météo pour une certaine ville ou le cours des actions d'actions de compagnies dans votre portefeuille. Vous pouvez également écrire des scripts concis qui rempliront le formulaire virtuel, simplement en modifiant les données après le point d'interrogation. Ceci fournit une commande simple pour consulter la météo de n'importe quelle ville ou le cours actuel de n'importe quelle action.

Avec la commande A, le texte du nouveau lien hypertexte créé est le titre de la page courante. S'il n'y a pas de titre, le texte du lien est repris de l'URL, lequel est vraiment sous-optimal. Dans ce cas, vous pourriez changer le texte du lien. Heureusement, la majorité des pages Internet ont un titre.

Un dernier avertissement au sujet des ajouts à votre fichier de signets. Disons que vous avez lancé votre commande «A», et avez modifié un peu la description. Maintenant le lien est correctement écrit, et vous voulez le sauvegarder. Vous tapez accidentellement «w $bookmarks», oubliant le signe plus. Au lieu d'ajouter le lien à la fin, vous avez écrasé complètement votre fichier de signets. Des années des liens accumulés sont parties en fumée. Pour éviter cet accident désastreux, créez une macro pour l'ajout à votre fichier de signets. Je sais, nous n'avons pas encore parlé des macros définies par l'utilisateur, mais nous le ferons. Et quand nous le ferons, vous écrirez une macro «ajout signet» semblable à ceci :.

    function+bma {
      w+ $bookmarks
    }

Maintenant vous pouvez tapez <bma pour ajouter un lien à vos favoris, sans vous soucier des fautes de frappe. C'est plus court que «w+ $bookmarks» de toute façon.

## Cookies

La plupart des sites Web envoient des «cookies», qu'on s'attend à ce que votre navigateur sauvegarde et récupère ensuite pour des échanges futurs. En fait beaucoup de sites Web simplement ne fonctionnent pas sans support des cookies. Par conséquent Edbrowse accepte toujours les cookies.

Les cookies persistants sont stockés dans un fichier, ainsi défini dans .ebrc : "jar = fichier", et sont ainsi disponibles pour des sessions suivantes d'Edbrowse. Ces cookies sont employés pour stocker des informations à long terme sur vous, tel que votre nom d'utilisateur et mot de passe dans amazon.com. Par conséquent votre fichier de cookies devrait être en mode 0600. En fait le fichier est créé en mode 0600 s'il n'existe pas.

Vous n'aurez pas probablement jamais besoin de regarder votre fichier de cookies, mais si c'est le cas, c'est du texte directement éditable. Ne le modifiez pas si vous avez des pages web actives : vous risquez des comportements contradictoires.

Pour parler de comportements contradictoires, ne surfez pas dans des instances différentes de Edbrowse dans différentes consoles virtuelles. Au lieu de cela, ne lancez qu'une seule instance de Edbrowse avec des pages différentes dans des sessions différentes. Des instances parallèles de Edbrowse peuvent chacune écrire dans le fichier des cookies, indépendamment, et donc la seconde instance peut détruire des cookies enregistrés par la première. Ce n'est qu'une nuisance mineure, que vous vous pouvez ignorer. Mais une prochaine version de Edbrowse pourrait utiliser un serveur http global pour contourner ce problème.

## Connexions sécurisées

Edbrowse emploie la méthode la plus commune de chiffrement du trafic Web, "HTTP over SSL/TLS", familièrement connue sous le nom de HTTP sécurisé. Les sites Web sous HTTP sécurisé ont une URL de la forme : https://secure.server.com. Noter que le protocole est https:// plutôt que http://. Le «s» supplémentaire représente «sécurisé». Le trafic est chiffré, c'est-à-dire mathématiquement brouillé, et ne peut pas être intercepté par un tiers scélérat.

Edbrowse vérifiera les connexions SSL, fondées sur un fichier de certificats fourni par le système. C'est une mesure antispoofing (anti usurpation d'identité), pour s'assurer qu'un intrus ne se fait pas passer pour votre banque, essayant de voler vos numéros et mots de passe de compte. Vous pouvez fournir votre propre fichier de certificats, ou pointer vers un fichier différent, en utilisant la directive certfile, mais cela n'est pas recommandé. Le fichier système est probablement le meilleur choix. En général, c'est une bonne idée de vérifier les connexions sécurisées, sauf si cela vous empêche d'accéder à un site web dont vous acceptez l'authenticité sans vérification. Dans ce cas, vous pouvez utiliser la commande vs pour désactiver cette fonctionnalité. C'est une commande à bascule ; tapez vs à nouveau pour activer la fonctionnalité. Pour une autre méthode de désactivation de la vérification site par site, voir la directive novs dans la section du fichier de configuration ci-dessous.

Ne jamais envoyer d'information sensible, telle que le numéro de sécurité sociale ou des numéros de carte bancaire, sur un canal peu sûr. S'assurer que le formulaire utilise SSL. Comment le savoir ? i? donne une URL qui utilise le protocole https://. Les voleurs peuvent aussi utiliser SSL, donc vérifiez que le domaine de l'URL est correct. Les voleurs peuvent utiliser un domaine similaire au domaine authentique

Noter que les boutons génériques (sans compter le bouton de soumission) peuvent également soumettre votre formulaire, par Javascript. Je ne sais pas si ce bouton envoie le formulaire ou non, et il pourrait l'envoyer par un canal non sécurisé. À un moment donné, nous devons faire confiance au site web sur lequel nous sommes, après avoir vérifié l'URL, qu'il s'agit bien de l'authentique.

Si vous avez des comptes sur des serveurs sécurisés, tels que PayPal.com, vous devez avoir un mot de passe absolument sûr. Ne jamais envoyer ce mot de passe sur une connexion non sécurisée. Il a la même valeur que vos numéros de cartes bancaires. Utilisez un mot de passe spécial pour vos connexions sécurisées, et seulement pour ces connexions. Utilisez des mots de passe jetables quand la connexion n'est pas sécurisée.

S'il vous plaît, ne tombez pas dans le piège du «phishing» d'emails qui vous indiquent que votre compte a expiré, mais qui vous ouvre pour cette fois encore une session en utilisant ce formulaire commode. Le courrier électronique est falsifié pour paraître légitime, et le formulaire envoie réellement votre mot de passe secret à un voleur, qui aura accès à votre compte. Une compagnie réputée ne demandera jamais de vous connecter par un formulaire email. Elle vous indiquera toujours de revenir à son site Web et de vous y connecter.

La sécurité d'Internet est complexe, c'est le moins qu'on puisse dire, et dépasse la portée de ce document. En règle générale, le HTTP sécurisé est vraiment tout à fait sûr, et vous pouvez l'utiliser pour envoyer des informations sensibles à travers l'Internet. Il est probablement plus sûr que de donner votre numéro de carte bancaire par téléphone, pratique courante avant l'e-commerce. Ainsi il faut rester un peu paranoïnaque, en fait c'est probablement une bonne idée, mais que cela ne vous empêche pas d'effectuer vos achats en ligne.

## Téléchargements FTP

Ce navigateur supporte la récupération des fichiers et des répertoires en ftp. Vous pouvez fournir un URL ftp comme : ftp://ftp.random.com/tarball.tar.gz et le fichier sera récupéré. Peu importe que vous tapiez l'URL vous-même, ou si c'est un hyperlien sur une page Web. Le fichier est récupéré, et placé dans un nouveau tampon. Tapez w/ pour le sauvegarder localement, ce qu'un client ftp traditionnel fait normalement. Bien sûr, le téléchargement peut échouer, auquel cas vous recevrez un message d'erreur. C'est une simple interruption, due à une quelconque erreur sur l'Internet, vous pourrez toujours retaper la commande et espérer avoir plus de chance.

Par défaut, Edbrowse emploie le nom d'utilisateur «anonymous» et le mot de passe «ftp@example.com» pour les connexions ftp. Cependant, vous pouvez modifier ceci dans l'URL, et quelques pages Web tirent profit de ce dispositif. Par exemple, disons que vous voulez accéder au fichier /opt/foobar sur une machine appelée quelque.part. Ce fichier n'est pas lisible par les utilisateurs anonymes. Vous devez ouvrir une session en tant que personne réelle. Dans Edbrowse, utilisez la commande :

e ftp://chris:xxx@quelque.part/opt/foobar

La connexion ftp sera établie sous le nom d'utilisateur «Chris», avec le mot de passe «XXX».

Certaines URLs ftp pointent sur des répertoires, pas sur des fichiers. Si vous visitez une de ces URLs, et si c'est un serveur type Unix, vous recevrez la liste des fichiers du répertoire sous forme de page HTML avec des hyperliens. Vous pourrez visiter les membres de ce répertoire comme si vous exploriez un site Web. Si le serveur n'est pas de type Unix, vous recevrez le listing de répertoire en texte plat.

Le mode ftp, c'est-à-dire le modèle de connexion, peut être actif ou passif. L'un fonctionne bien quand le client est derrière un routeur, et l'autre quand le serveur est derrière un routeur. Vous pouvez indiquer le mode de ftp actif par la commande «ftpa+», ou passif par «ftpa-».

## Support de Gopher

Gopher est similiaire à FTP, permettant de télécharger facilement des fichiers d'un site public. Edbrowse supporte ceci via le protocole gopher://. Encore une fois, les listings de répertoire sont convertis en html, de sorte que vous pouvez activer un hyperlien et entrer dans un sous-menu ou télécharger un fichier. Edbrowse prend également en charge le protocole gopher sur SSL/TLS via le protocole gophers://. Notez que l'implémentation gophers ne prend pas en charge le basculement vers le gopher simple (non chiffré) en cas d'échec de la connexion sécurisée. De plus, les URL gophers:// utilisent par défaut le port 70 (le même que les URL gopher://), vous pourriez donc avoir besoin de spécifier un port différent car (au moment de la rédaction) il n'y a pas de standard pour un port différent pour les URL gophers.

## Serveurs proxy

Un serveur proxy est un serveur web intercalé entre votre navigateur et les sites Web distants. Il intercepte vos demandes de pages Web et les transmet au système qui héberge le site que vous parcourez. Des serveurs proxy sont utilisés pour beaucoup de raisons. Voici justes quelques-unes d'entre elles :

1. Efficacité. Le serveur proxy peut pouvoir stocker des pages Web précédemment appelées (système connu sous le nom de cache). Si votre connexion au proxy est plus rapide que votre connexion au reste du réseau, le cache vous envoie alors les pages Web précédemment appelées plus rapidement.

Politiques. Quelques administrateurs de pare-feu exigent d'employer un serveur proxy .

2. Anonymat. Il existe des serveurs appelés serveurs proxy d'anonymeurs qui cachent votre adresse IP aux sites Web que vous passez en revue.

Si vous souhaitez employer un serveur proxy pour le trafic HTTP, activez simplement l'option proxy dans votre fichier de configuration. Fournir le nom d'hôte et le port du proxy, séparés par des deux points. Par exemple :

proxy = http * proxy.campus.edu:3128

Tout le trafic HTTP, pour tout domaine (défini par *) transite à travers proxy. campus. edu sur le port 3128. Notez que les proxy écoutent souvent sur des ports autres que le port 80. «Squid» est un serveur proxy fourni avec quelques distributions Linux, et il emploie le port 3128 par défaut.

Le protole et le domaine peuvent être spécifiés, ou bien chacun peut être remplacé par * pour tout protocole et pour tout domaine. L'absence de domaine est considérée comme * (tout domaine) et l'absence de protocole et de domaine est considérée valide pour tout. Une telle directive doit être la dernière dans la liste des proxies dans votre fichier de configuration, parce que des proxies définis ensuite sont sans signification.

Le mot "DIRECT" en troisième position est une connexion directe, sans serveur proxy. Cette directive est habituellement placée en début de liste, pour accéder à certains domaines internes; ensuite le serveur proxy est spécifié pour tous les autres.

proxy = http|https hr.mycompany.com DIRECT
proxy = http|https|ftp * proxy.mycompany.com

Comme dans cet exemple, les protocoles différents peuvent être séparés par des "pipes". Attention, mettre une * dans le champ protocole inclut tous les protocoles, ftp, pop3 et smtp inclus. Le courrier électronique passera par ce proxy, comme du trafic web.

## Cadres

Les cadres sont un mécanisme par lequel une page Web puisse récupérer et afficher plusieurs autres pages Web sur l'écran simultanément. Chaque sous-page s'appelle un cadre, et vit dans son propre espace sur l'écran. Parfois les cadres sont en haut, au milieu et en bas ; parfois ils sont à gauche, au milieu et à droite. Edbrowse présente ces cadres comme des hyperliens, que vous pouvez développer à tour de rôle, en utilisant la commande "exp" ou bien les développper tous. Tapez 1,$exp pour les développer tous ou, de façon équivalente, ,exp. La commande ctr (contract) replie les cadres et en refait un hyperlien. Tapez ,ctr pour replier tous les cadres. Parfois vous pouvez laisser un cadre replié si vous avez visité le site auparavant et si vous savez que le contenu ne vous intéresse pas. A de rares occasions, je l'ai vu une seule fois, vous devez ouvrir le cadre supérieur, que vous soyez intéressé ou pas, parce que le code HTML de cette page particulière place quelques cookies indispensables à la visite du site Web.

Ci-dessous une page de cadres, et ensuite la même page après développement du cadre du milieu.

Frame {navigation}
Frame {principal}
Frame {pied}

Frame {navigation}
`--
Ceci est la page d'accueil de bla bla bla. A propos de bla bla bla. Nous avons les prix les plus bas.
--`
Frame {bottom}

## Détails

Certaines pages web présentent un résumé d'informations, juste une phrase, puis vous permettent de cliquer dessus si vous voulez plus de détails.

Détails {L'interprétation des mondes multiples de la mécanique quantique}

Ceci est similaire à un cadre. Tapez exp, ou g, pour l'étendre ; tapez ctr pour le contracter. Tapez ,exp pour étendre tous les détails de la page, et ,ctr pour contracter toute la page. Les détails sont enclos dans `-- et --`, comme un cadre.

# Chapitre 5, Javascript

- Introduction à Javascript
- Validation et modification de formulaires
- fenêtres Popups et Popunders
- Onchange et annuler
- Debugger Javascript

## Introduction à Javascript

Javascript est un logiciel, inclus dans la page Web, qui fonctionne sur votre ordinateur. Ces fonctions ne sont pas lancées sur le serveur web, elles tournent sur votre ordinateur. Par conséquent on l'appelle parfois Javascript côté client. Et Javascript peut faire presque n'importe quoi. Vous pourriez, par exemple, télécharger une page Web qui inclut une fonction de Javascript pour calculer les décimales de pi, directement sur votre ordinateur, bien que ce soit plutôt idiot. La majeure partie de Javascript est employée pour valider et/ou modifier des formulaires, ou créer des effets visuels de fantaisie.

La première version de Edbrowse, écrite en Perl, ignorait Javascript complètement, et cela a fonctionné un temps, mais de plus en plus sites emploient Javascript, et ces sites Web étaient simplement inaccessibles. La plupart des emplacements d'e-commerce entrent dans cette catégorie. Si vous voulez faire des achats, ou contrôler votre compte bancaire en ligne, vous aurez besoin d'un navigateur autorisant Javascript.

La deuxième version de Edbrowse, écrite en C, et portant un numéro de version commençant par 2, incluait un compilateur et un moteur Javascript écrits par moi-même. Cela fonctionnait plutôt bien, pour un projet réalisé pendant mon temps libre, mais Javascript évolue, comme n'importe quelle autre langue ou standard, et je ne pouvais plus suivre.

La troisième version utilise un moteur Javascript open source, d'abord Mozilla js, ensuite Duktape, et maintenant, depuis la version 3.8.0, Quick js. Ceci me permet de m'appuyer sur, plutôt que de réinventer, environ 70000 lignes de code - et quelqu'un d'autre maintient ce code à mesure que Javascript évolue.

Edbrowse n'offre pas toutes les fonctionnalités de Javascript côté client (DOM), et ne les offrira probablement jamais. Par exemple, beaucoup de sites Web utilisent Javascript pour changer des images à la volée au passage de la souris sur l'écran. Ceci n'a aucune signification dans Edbrowse. D'autres sites Web affichent de multiples fenêtres multiples, et vous laissent agir sur ces sous-fenêtres en utilisant des icônes dans la fenêtre principale. Il serait très difficile simuler ce comportement dans un environnement de ligne de commande, mais peut-être pas impossible.

Une partie de Javascript est implémentée, d'autres parties non. C'est encore un travail en cours. Si vous soumettez un formulaire, ou suivez un hyperlien, et que rien n'arrive, absolument rien, alors la page web essaie probablement d'utiliser des fonctionnalités Javascript non encore implémentées. Montez le niveau de débogage à 3 ou plus haut et poussez de nouveau le bouton pour voir les erreurs Javascript. Ensuite, si vous le souhaitez, désactivez Javascript avec la commande js et réessayez. Cependant, le site web peut ne pas fonctionner corectement ou comme attendu avec Javascript désactivé. Consultez l'avertissement au début du présent guide.

Vous pouvez également désactiver Javascript pour des sites Internet spécifiques. Ceci sera discuté plus tard, quand nous décrirons le fichier de configuration d'Edbrowse.

Si la navigation dans une page est lente, il est possible que beaucoup de Javascript s'exécute, ou que des fichiers soient en train de se télécharger. Dans les deux cas, vous pouvez interrompre le processus en tapant Contrôle-C. Javascript stoppe et la page est décodée avec les informations disponibles. Cela va bien si vous consultez un article de journal et que vous ne voulez pas attendre l'affichage de toutes les publicités. Mais vous ne devriez jamais faire cela sur un site de e-commerce, ou un site bancaire, ou un site avec des opérations critiques. Si Javascript ne va pas à son terme, nous ne pouvons garantir la bonne marche des opérations sur ce site web. Vous risquez d'envoyer une commande pour un éléphant à 37000 Euros au lieu de consommables d'impression à 37 Euros.

Si vous avez tapé Contrôle-C sans réaction après 45 secondes, Edbrowse arrête en force Javascript avec ce message :

Pas de réaction depuis 45 secondes, opérations annulées, résultats imprévisibles !

C'est drastique, mais certains sites web tombent dans une boucle infinie, et c'est mieux que d'être bloqué dans edbrowse pour toujours. A ce moment, Javascript est désactivé. Vous pouvez le réactiver - à vos risques et périls. Le moteur Javascript a été interrompu en cours d'opération, et son comportement est imprévisible si il redémarre à un autre endroit. Cependant, j'ai essayé quelquefois, et cela a semblé fonctionner.

## Valider des formulaires

Quand une page Web demande des données à l'utilisateur, elle inclut souvent une fonction de «valider&soumettre». Cette fonction contrôle vos entrées : vous avez complété tous les champs obligatoires - il y a le signe @ dans votre adresse électronique – il y a 5 chiffres dans votre code postal - et ainsi de suite. S'il n'y a aucune erreur, il envoie le formulaire. Ces fonctions se comportent habituellement bien sous Edbrowse. Quand vous poussez le bouton, vous verrez le message d'erreur, ou bien le formulaire sera envoyé, et une page de confirmation apparaîtra sous peu.

Dans certains cas la fonction de Javascript reformate vos données. Elle peut compléter certains des champs «cachés» pour vous, ou elle peut calculer la TVA et le prix d'achat en conséquence. C'est plus que la validation de formulaire, c'est du Javascript actif, et les données ne seront pas exactes si Javascript ne fonctionne pas correctement sur votre ordinateur. De plus en plus de sites emploient du Javascript actif, ainsi un navigateur supportant Javascript est un must.

Quelques fonctions de Javascript contrôlent des menus dynamiques. On fait un premier choix, et Javascript crée un deuxième menu avec des options correspondant à votre premier choix. Vous pouvez maintenant faire un deuxième choix, qui affine votre recherche. Si le premier menu présente des «viandes», des «légumes», des «fruits», et des «céréales», et vous choisissez des fruits, le deuxième menu pourrait contenir des «pommes», des «oranges», des «citrons» etc. Javascript rend tout ceci possible. Ces menus dynamiques sont supportés par Edbrowse. Vous verrez un message du genre "La ligne 352 a été modifiée", où 352 contient le sous-menu. Tapez 352I? pour consulter les options du menu nouvellement créé.

## Fenêtres Popups et Popunders

Un popup est une fenêtre qui apparaît soudainement devant la fenêtre affichée à l'écran. Elle annonce habituellement quelque chose, et c'est souvent agaçant, bien que dans de rares cas, ce soit un aspect nécessaire du site Web.

Vous avez un avantage certain sur tous les autres surfeurs avec leurs navigateurs graphiques. La fenêtre popup ne s'ouvre pas automatiquement. Au lieu de cela, le popup apparaît comme hyperlien au début ou près du début de la page, et vous pouvez cliquer dessus si vous le désirez, ou l'ignorer. C'est semblable à la musique de fond, décrite dans une section précédente. Le lien automatique pourrait ressembler à ceci.

redirection: {Spring specials}

Les fenêtres Popunders ne sont pas si fréquentes. Elles apparaissent après que vous ayez fermé la fenêtre. Dans un certain sens elles sont cachées «sous» votre page Web, et quand vous fermez la page elles remontent à la surface. Dans Edbrowse, cela ne se produit pas automatiquement. Quand vous tapez «q», vous quittez, et tout est terminé. Comme vous pouvez le prévoir, la fonction popunder apparaît comme hyperlien. Elle pourrait ressembler à ceci.

On Close: {Body}

Rappelez-vous, le lien popup est un simple lien HTML vers une autre page Web, alors que le lien «Close» appelle une fonction de Javascript de la page courante. Cependant, cette fonction Javascript renvoie habituellement à une autre page Web, ainsi ne soyez pas étonné si vous vous trouvez quelque part ailleurs sur l'Internet. Dans les deux cas, popup ou popunder, vous pouvez employer la touche de retour arrière pour retourner à la page que vous consultiez. Si vous avez besoin de l'accès à une fenêtre popup et à la page principale en parallèle, employez la commande M.

## Onchange et annuler

Quand vous entrez ou modifiez la valeur d'une zone de saisie, le formulaire peut parfois appeler une routine Javascript. Ce n'est pas habituel, mais cela arrive. Un exemple précédent décrit un menu primaire et secondaire. Quand le premier choix est fait, par exemple les fruits, Javascript crée le deuxième menu correspondant à votre choix primaire, en utilisant la fonctionnalité «onchange». C'est bel et bon, mais Edbrowse a quelque chose que votre navigateur graphique n'a pas, à savoir la commande annuler (undo). Parce qu'il y a des effets de bord sous javascript, la commande undo ne fonctionne généralement pas. Il y a cependant une exception - si vous modifiez un champ de saisie par une commande de substitution, sur une seule ligne, et pas sous g//, vous pouvez l'annuler avec la commande u. Cela remet effectivement l'ancien texte en place, et exécute le code onchange, comme si vous l'aviez tapé vous-même. Parfois, le champ de saisie est long, et une substitution ne fait pas ce que vous attendez d'elle, alors la commande undo est pratique.

Si vous formulez une réponse textuelle dans une zone de texte, cela se fait dans une autre session, et vous avez toute la puissance de l'éditeur, y compris la commande undo.

## Debugger Javascript

En mode navigation, la commande "jdb" (debugger Javascript) redirige tous les saisies suivantes vers le moteur Javascript, contenant les objets associés à page web courante, spécifiquement le cadre associé à la ligne courante. Tapez bye pour revenir à edbrowse. Il est préférable d'entre la commande jdb avec un niveau de débogage à 3, pour voir ainsi toutes les erreurs Javascript de syntaxe ou de référence. Cette fonctionnalité est destinée aux développeurs, et n'est pas destinée à l'utilisateur final.

Si la sortie d'une commande est longue, vous pouvez la rediriger vers un fichier en utilisant le symbole ^>, comme dans l'expression : ^> fichier. Je ne veux pas utiliser > car c'est un opérateur Javascript valide. Une commande prédéfinie ok (object keys) liste tous les membres d'un objet. showscripts() affiche tous les scripts du document courant, y compris les scripts générés. Ils seront conservés dans $ss. Tapez dumptree(document) pour voir la structure du document. Utilisez aloop(0,5,expression) pour évaluer expression lancée de 0 à 4. Utilisez aloop(y,expression) pour lancer expression sur un tableau y

Quelques commandes de Edbrowse sont valides dans le debugger Javascript. les voici : les commandes db (niveau de debug), e nombre (pour aller dans une autre session edbrowse et consulter un autre fichier), bflist, bglist, timers, demin, et les commandes shell.

# Chapitre 6, Scripts d'Edbrowse et le fichier de configuration

- Le fichier de configuration
- Mot-clé = valeur
- Agent utilisateur
- Fonctions d'Edbrowse
- La fonction init
- Variables Edbrowse
- Comptes de courrier
- Descripteurs des plugins
- Un exemple de fichier de configuration

## Fichier de configuration

Au démarrage, Edbrowse lit et analyse un fichier de configuration. Cela fonctionne si ce fichier est absent, mais s'il est présent, il doit être syntaxiquement correct. S'il y a une erreur, éditez le fichier de configuration, corrigez l'erreur, et tapez "config" pour l'appliquer à nouveau. Recommencez jusqu'à ce qu'il n'y ait plus d'erreurs. La lecture du fichier de config s'arrête à la première erreur, ainsi vous aurez un fonctionnement impeccable. Souvenez-vous que "edbrowse -c" vous permet d'éditer le fichier de configuration directement. Egalement, pour Edbrowse, un fichier nommé -c est traité comme le fichier de configuration. Vous pouvez changer de session, modifier, afficher, éditer, sauvegarder et réappliquer le fichier de configuration sans quitter Edbrowse.

Le fichier de configuration est vérifié dans les emplacements suivants, dans l'ordre :

1. Un chemin défini par la commadce the -c argument.

2. $XDG_HOME/edbrowse/ebrc (with $XDG_CONFIG_HOME pointant par défaut sur $HOME/.config).

3. $HOME/.ebrc

Le premier fichier de configuration trouvé est utilisé, sauf si le fichier spécifié avec -c n'existe pas, aucun autre emplacement n'est vérifié et donc pas de configuration chargée. De plus, si -c n'est pas fourni et qu'aucune configuration n'est trouvée, alors un fichier par défaut sera créé dans $HOME/.ebrc pour que vous puissiez l'éditer. Le "eb" est l'abréviation d'edbrowse. La commande config, émise depuis edbrowse, accédera au fichier qui a été lu.

Ce fichier est orienté «lignes». Les lignes commençant par # sont des commentaires, et donc ignorées. Les interlignes sont également ignorés. Les autres lignes tombent dans une de ces 5 catégories.

1. Définition d'une option, en utilisant la syntaxe «mot-clé=valeur».

2. Définition d'un script Edbrowse pouvant être appelé de la ligne de commande, ou par un autre script.

3. Une commande d'Edbrowse, faisant partie d'un script Edbrowse.

4. Définir un compte de courrier électronique. Ceci sera décrit plus tard, dans la section clients de courrier électronique

5. Une règle de filtrage de courrier.

6. Description d'un plugin.

7. Description de table ou d'une vue dans une base de données SQL

## Mot-clé = valeur

La meilleure documentation étant un exemple, alors on s'y plonge.

Rappelez-vous la section sur les cookies. Vous aurez besoin d'un fichier, souvent appelé un récipient de cookies, pour stocker vos cookies. La ligne qui définit ce récipient de cookies pourrait ressembler à ceci :

jar = /home/monlogin/.ebsys/cookie-jar

C'est une syntaxe simple : mot-clé = valeur. Pas de problèmes si le nom de fichier contient des espaces, ou même le signe égal. Pas besoin de le mettre entre guillemets.

Quand Edbrowse voit cette ligne dans son fichier de configuration, il repère l'emplacement du fichier «cookie-jar», et vérifie la validité de ce fichier. Si le fichier est un répertoire (ou quelque chose de bizarre), ou bien est inaccessible, Edbrowse affiche un message d'erreur et quitte. Si cela se produit, é ditez votre fichier de configuration, et modifiez le fichier des cookies.

Voici quelques directives additionnelles de type nom=valeur. Certaines sont employées pour définir un compte de courrier électronique. Ceci deviendra plus clair quand nous parlerons du client de courrier.

certfile = /etc/pki/tls/cert.pem

Indique le fichier qui sauvegarde les certificats pour les connexions sécurisées. Ceci a été expliqué dans la section sur les connexions sécurisées. . On peut généralement s'en passer, puique Edbrowse utilise le fichier de certificats du système.

maildir = /home/monlogin/mbox

Allez dans ce répertoire lorsque vous récupérez votre courrier. Ainsi, si vous sauvegardez un message,, vous saurez toujours où il est.

cachedir = /home/monlogin/.ebcache
cachesize = 200

Edbrowse stocke certaines pages localement, dans un cache, de façon à pouvoir être rechargées à partir de votre ordinateur si vous revenez sur le même site. (tous les navigateurs modernes le font). Vous pouvez définir l'emplacement du répertoire de cache. si non défini, edbrowse sélectionne ~/.ebcache sur Unix. Sur un système multi-utilisateurs, votre cache doit être privé, car il contient littéralement les pages web que vous consultez. Des utilisateurs distincts ne doivent pas partager le même cache. Le répertoire de cache est créé avec les permissions 0700, s'il n'existe pas déjà.

La paramètre cachesize définit la taille du cache en mégaoctets. Par défaut, c'est 1000 et le maximum est 5000. S'il est mis à 0, edbrowse ne met aucun fichier en cache. Lorsque que le cache est plein, edbrowse efface les 100 fichiers les plus anciens et continue. Edbrowse ne stocke pas plus de 10000 fichiers, même si le cache peut en contenir davantage.

La commande "local" permet à edbrowse de lire les pages http ou https du cache. Elle ne se connecte pas à l'internet. Si une page ne se trouve pas dans le cache, elle affiche une erreur de connexion. Cette commande peut être utile lorsqu'il n'y a pas de connexion Internet et que vous souhaitez consulter des pages mises en cache. Elle peut également être utilisée dans une fonction qui récupère une page web statique, souvent récupérée, afin qu'elle ne sorte pas du cache. N'oubliez pas que les paramètres sont locaux à une fonction, de sorte que local+ dans une fonction ne perturbera pas votre session interactive. Ce paramètre n'affecte pas ftp, scp, gopher, etc.

imapfetch = 40

Récupère les 40 derniers emails lors de l'appel d'un dossier par imap. Le nombre d'emails récupérés doit être compris entre 1 et 1000. Dans le client imap interactif, vous pouvez spécifier -40, pour les 40 premiers messages (dans l'ordre chronologique), mais cela ne peut pas être fait à partir du fichier de configuration. Je suppose que vous commencez toujours par les emails les plus récents.

envelope = fsd

Prescrit le format d'une enveloppe imap, une lettre par champ. t = à, f = de, s = sujet, d = date, z = taille, n=nombre. La valeur par défaut est fs, from subject. Ceci peut être modifié de manière interactive avec la commande e.

Les champs "De" et "À" affichent le nom ou l'organisation si ces informations sont fournies. Nous espérons que cela vous est familier. Si aucun nom n'est fourni, l'adresse e-mail est utilisée à la place. C'est mieux que rien. Utilisez les commandes ls (décrites plus tard) pour voir à la fois le nom et l'adresse e-mail.

L'indicateur de lecture affiche une étoile si l'email n'a pas été lu. Il marque l'email comme quelque chose que vous pourriez vouloir lire.

netrc

Gardez certains ou tous vos identifiants et mots de passe dans le fichier $HOME/.netrc, plutôt que dans .ebrc. C'est légèrement plus sécurisé, mais pas de beaucoup.
chmod 600 .netrc, et vos mots de passe sont à l'abri des regards indiscrets
De même, chmod 600 .ebrc, et vos mots de passe sont à l'abri des regards indiscrets
Ce n'est pas si différent.
Cependant, .netrc est un emplacement standard pour les identifiants et mots de passe, et est reconnu par une suite de programmes de connectivité, incluant ftp, lftp, nftp, et curl. Il y a donc certains avantages à avoir vos mots de passe dans .netrc.

La variable d'environnement NETRC indique un emplacement alternatif pour le fichier netrc.

La syntaxe netrc est extrêmement simple. Elle spécifie une machine, un login et un mot de passe, comme ceci.

machine imap.gmail.com login FredFlintstone password xxxxxxxxxxxxxxxx

Les comptes mail dans .ebrc ont des logins et des mots de passe, comme nous le verrons ci-dessous. Ceux-ci deviennent optionnels si netrc est configuré. Incluez-les ici dans .ebrc si vous le souhaitez ; s'ils ne sont pas ici, alors ils devraient être dans .netrc.

S'il y a un compte pour un domaine donné, le login et le mot de passe peuvent être déduits de .netrc. Il n'y a pas besoin d'inclure login ou mot de passe ici. Cependant, s'il y a plus d'un compte, (par ex. plusieurs comptes gmail, certaines personnes en ont plusieurs), alors cela devient ambigu. Le bloc mail doit inclure au moins le login. Ensuite edbrowse peut utiliser le serveur et le login pour trouver le mot de passe. En termes de base de données, le login devient une clé secondaire.

La fonctionnalité netrc est complètement optionnelle, et comme mentionné précédemment, elle n'améliore pas vraiment la sécurité, mais c'est un standard établi, cohérent avec d'autres programmes unix. Utilisez-la si vous le souhaitez ; ou gardez vos logins et mots de passe ici dans .ebrc.

webtimer = 30
mailtimer = 180

Attend 30 secondes une réponse d'un serveur web, et 3 minutes pour une réponse du serveur mail. Une valeur 0 attend indéfiniment. Désolé, il ne semble y avoir aucune manière d'interrompre une connexion, autre que contrôle anti-slash, qui tue le programme. C'est pourquoi ces temporisateurs sont ici - ainsi vous n'attendrez pas indéfiniment. Les valeurs par défaut sont respectivement de 20 et 0.

downdir = /home/monlogin/downloads

Lorsque vous accédez à un fichier binaire sur un site web, vous avez le choix entre le télécharger directement sur disque au lieu de le charger en mémoire. Si vous le faites, le fichier est enregistré dans le répertoire de téléchargement par défaut. Si le nom de fichier téléchargé comporte un slash, ou bien s'il n'existe pas de répertoire de téléchargement, le chemin est construit relativement au répertoire courant (on assume qu'il n'est pas absolu). Dans ce cas, l'expansion des métacaractères (globbing) est effectuée. Par exemple, vous pouvez envoyer un fichier mp3 sur ~/musique/country/une-chanson.mp3. Les téléchargements s'effectuent en avant-plan, avec une échelle de progression, bloquant Edbrowse jusqu'à l'achèvement du téléchargement. Si vous préférez, vous pouvez télécharger un fichier en arrière-plan en invoquant la commande bg (background). C'est pratique surtout pour de gros fichiers. Vous êtes prévenu à la fin du téléchargement. Pendant de temps, vous pouvez continuer à utiliser Edbrowse. Aucune échelle de progression ne sera affichée, car elle pourrait interférer avec ce que vous êtes en train de faire.

Quand on vous demande un nom de fichier, tapez entrée pour garder le nom de fichier par défaut, tel que proposé par le site web, tapez x pour abandonner, tapez espace pour charger les données en mémoire, ou entrez un nom de fichier différend si vous le souhaitez. Si le fichier existe déjà, il est écrasé.

La commande dld= prédéfinit un nom de fichier de téléchargement. Elle peut être utilisée dans un cadre non interactif, comme une fonction edbrowse ou un travail par lots. dld=jkl revient à taper jkl lorsque edbrowse vous demande le nom du fichier. Un espace unique télécharge en mémoire comme d'habitude, et x interrompt le processus. dld=% accepte le nom du fichier tel qu'il est fourni par le serveur. dld= est une commande unique ; elle ne s'applique qu'au prochain téléchargement.

Tapez bglist pour lister vos téléchargements en arrière-plan, incluant les téléchargements terminés. Si edbrowse se termine, les téléchargements en arrière-plan en cours ne s'achèveront pas.

Des téléchargements au premier plan, ou n'importe quel tâche Internet de ce type, affichent une échelle de progression sous forme de points, mais vous pouvez supprimer cette échelle par la commande pdq ("progress of download quiet"). Une autre option est pdc ("progress of download by count" : progression par comptage). Ceci affiche les mégaoctets télécéhargés et le total en mégaoctets. Par exemple, 17/235 signifie 17 mégas reçus sur un total de 235. Ceci affiche des MO décimaux, et non des MO binaires (0x100000) - ce n'est qu'une légère différence.

nojs = space.com

Indique les domaines qui n'ont pas besoin de Javascript. Javascript ne sera pas lancé dans les pages de ces sites, ni même chargé sur ces sites. La directive ci-dessus désactivera également le Javascript des sous-domaines tels que www.space.com.

Vous pouvez inclure un chemin ou un chemin partiel après le nom de domaine, comme dans space.com/popups. Ceci bloquera les popups publicitaires que vous ne voulez pas voir, et qui produisent souvent des erreurs d'Edbrowse. Les sous-domaines ne sont pas pris en compte quand un chemin est précisé ; le domaine doit correspondre exactement.

Cela semble être une fonctionnalité utile, mais elle est risquée. La page popup peut définir une variable dont le reste du javascript a besoin pour fonctionner correctement. Ainsi, vous ne devriez probablement pas bloquer certaines pages de ce site, ou d'autres domaines qui sont récupérés pour le compte de ce site, comme google-analytics.com ou googlesyndication.com. La récupération de toutes ces autres pages ralentit edbrowse, et semble être une perte de temps, mais si vous avez besoin de javascript, vous avez probablement besoin de tout.

js = nasa.gov

Spécifie un site qui nécessite javascript pour fonctionner correctement, comme nasa.gov. Cette directive est utilisée sous un autre paradigme. Utilisez nojs pour bloquer .com, .net et .gov, par exemple, car js ne fonctionne pratiquement jamais. Activez ensuite les sites web qui nécessitent js. Certains utilisateurs préfèrent utiliser edbrowse de cette manière. C'est définitivement plus rapide. Cependant, si vous tombez sur un nouveau site qui nécessite javascript, vous devez modifier votre fichier de configuration, ajouter le nouveau site, exécuter la configuration et naviguer à nouveau.

novs = exemple.com

Indique les sites pour lesquels aucune vérification des certificats SSL n'est à effectuer. Cette directive est utile pour les sites utlisant des certificats auto-signés, qui ne peuvent donc être vérifiés. . Ceci ce devrait pas être utilisé pour quelque chose de sérieux, comme un site demandant votre numéro de carte bancaire. Cette directive inclut les sous-domaines, comme www.exemple.com.

inserver = pop3.un-domaine.com
inport = 110
outserver = smtp.un-domaine.com
outport = 25

Indique les machines et les ports que vous employez pour récupérer et envoyer le courrier. Vous pouvez employer les noms complets de domaine, ou des alias, s'ils sont définis dans le fichier «/etc/hosts». Les ports indiqués ici sont standard, et usuellement corrects. Ce sont les ports par défaut de Edbrowse, ainsi vous n'avez pas besoin de spécifier les ports d'entrée et de sortie, à moins qu'ils soient différents. Notez, ces mots-clés sont uniquement valides dans le contexte d'un compte de courrier électronique, indiqué par mail{}.

Une étoile devant le numéro de port, par exemple outport *465, signifie que le 'socket' doit être crypté, pour la sécurité. Lorsque le port smtp est crypté, l'authentification 'login' est de règle. Aucune autre méthode d'authentification n'est actuellement implémentée.

Une flèche devant le numéro de port, par exemple ^587, chiffre le socket, mais seulement après un échange en clair. C'est le protocole hotmail, aussi sûr que *465, seulement différent.

Utilisez +587 pour vous authentifier sans chiffrement. Cela se fait parfois quand vous êtes directement connecté au serveur de messagerie et que le trafic ne transite pas par Internet, mais que le serveur veut quand même s'assurer qu'il s'agit de vous..

secure

Les connexions de courrier entrantes et sortantes sont sécurisées. Ceci ajoute effectivement des étoiles avant les numéros de ports, si les ports sont précisés. Si les ports ne sont pas précisés, les ports par défaut changent pour prendre en compte les connections sécurisées. Le port par défaut pop3s est 995 et le port par defaut smtps est 465.

nofetch

Ne pas récupérer de mail de ce compte avec l'option -f

login = eklhad
password = secret

Indique le nom d'utilisateur et le mot de passe que Edbrowse utilisera pour récupérer votre courrier. This may not be necessary if you are using the netrc feature, as described above.

from = nom complet
reply = andre.dupont@un_domaine.com

Ces lignes sont ajoutées aux courriers électroniques que vous envoyez. Elles indiquent au destinataire qui vous êtes, et comment répondre. C'est illégal d'employer ces lignes dans un but trompeur. S'assurer qu'elles vous identifient, et que l'adresse de réponse est en effet l'un de vos comptes de courrier électronique.

to = addresse
cc = addresse
bcc = addresse

Indique un destinataire ; tous les courriels que vous envoyez par l'intermédiaire de ce compte seront envoyés à ce destinataire. cc signifie copie carbone et bcc signifie copie carbone invisible. gmail.com conserve une copie de chaque e-mail que vous envoyez, mais la plupart des serveurs de messagerie ne le font pas. Si vous voulez reproduire ce comportement, incluez cc = votre adresse dans le descripteur du courrier, de sorte que tous les messages que vous envoyez vous reviennent. Un filtre sur le serveur de messagerie peut rediriger le courrier que vous envoyez vers un dossier envoyé. C'est la seule utilisation pratique que je connaisse de cette fonctionnalité.

attach = fichier

Le fichier indiqué est envoyé, en tant que pièce jointe, dans chaque e-mail que vous envoyez via ce compte. S'il s'agit d'un compte professionnel, vous pouvez souhaiter qu'une image ou un logo fasse partie de chaque courriel. C'est la seule utilisation pratique que je connaisse de cette fonctionnalité.

imask = 3,5

Affiche les dossiers 3 et 5 lors de l'accès à ce compte. imap est supposé ici. Vous pouvez activer ou désactiver cette fonction de masquage de manière interactive à l'aide de la commande imask. Lors de la recherche d'un dossier par numéro ou par sous-chaîne, tous les dossiers sont recherchés, et pas seulement ceux qui sont présentés à l'écran. Vous pouvez donc toujours accéder aux dossiers qui ne sont pas présentés.

imask = ju,inbox

Vous pouvez utiliser des noms de dossiers ou des sous-chaînes uniques dans la directive imask. Notez qu'il y a parfois plusieurs dossiers contenant la sous-chaîne inbox, donc si vous voulez inbox, spécifiez inbox, pas seulement box, pour obtenir une correspondance exacte. Edbrowse cherche d'abord une correspondance exacte, puis une sous-chaîne.

isub = sous-chaîne

N'affiche pas cette sous-chaîne du dossier imap. N'utilise pas non plus cette sous-chaîne lors de la recherche d'un dossier. Une sous-chaîne typique est [Gmail]/, comme on le voit dans les comptes gmail.

dx = 8,2,6

Suppression définitive de ces dossiers dans imap. d dans tout autre dossier est déplacé vers la corbeille. La corbeille est supposée être le premier numéro de la ligne dx. Dans gmail, il n'est pas possible de supprimer directement un courriel de la boîte de réception. Si vous essayez, il est toujours dans all-mail. Le seul moyen de le supprimer est donc de le déplacer dans la corbeille, puis de la vider. Vous pouvez utiliser la fonction de suppression en bloc pour vider efficacement la corbeille dans imap.

Sans ligne dx, d est toujours une suppression définitive. Cela fonctionne généralement sur d'autres serveurs (pas gmail). Néanmoins, si vous voulez être sûr, vous pouvez choisir de déplacer les courriels vers la corbeille.

Vous pouvez des noms de dossiers ou des sous-chaînes uniques dans la directive dx.

adbook = /home/mon_login/.ebsys/carnet-adresses

En indiquant des destinataires, vous pouvez employer des alias au lieu des adresses électroniques complètes. Les alias sont vérifiés dans votre carnet d'adresses, un fichier texte, orienté «ligne» spécifié ici («carnet-adresses»). Si votre carnet d'adresses contient la ligne

fred : fred.flintstone@bedrock.us : 226 rue des tanneurs : 0555382705

alors vous pouvez utiliser l'alias fred, et Edbrowse substituera l'adresse électronique de Fred quand il enverra le courrier. Seuls les deux premiers champs dans le carnet d'adresses sont significatifs en ce qui concerne Edbrowse. D'autres champs pourraient contenir des numéros de fax, de téléphone, l'adresse postale, etc. C'est à vous d'en décider. Vous pouvez envoyer le nom de Fred, en tant que destinataire, en utilisant le signe supérieur à, comme ceci.

fred : fred.flintstone@bedrock.us> Fred W. Flintstone : 226 cobblestone way : 5553827

Edbrowse ignore les espaces et les tabulations entourant les deux points et le signe plus grand que. Si le préfixe de l'adresse électronique contient des caractères spéciaux, comme les deux points ou le signe plus grand que ou même le signe at, vous pouvez le citer, comme ceci. "this:>that"@gmail.com

Sur un système multi-utilisateurs, créez ce fichier avec les permissions 600, ou placez-le dans un répertoire avec les permissions 700, afin que les autres utilisateurs ne puissent pas voir tous vos contacts.

emoji = /home/mylogin/.ebsys/Emojis.txt

Spécifie une bibliothèque d'emojis pour edbrowse. Ceci a été décrit dans la section Emojis.

Vous pouvez utiliser des variables d'environnement ou la notation ~ dans ce nom, et d'autres noms de chemin, dans .ebrc.

include = ~/.ebsys/plugins

irclog = /home/mylogin/.ebsys/irclog

Spécifie un journal pour toutes vos discussions IRC. Ce journal est récupéré dans le tampon de sortie lorsque IRC est relancé. Voir la section sur le Client IRC pour plus de détails.

include = ~/.ebsys/plugins

Inclure un autre fichier, comme #include en C, ou include() en m4. Ceci peut être utilisé pour modulariser vos paramètres edbrowse : comptes de messagerie et filtres dans un fichier, plugins dans un autre, fonctions dans un autre, etc. Cependant, edbrowse -c ne fait apparaître que le fichier de configuration de base, et ne fournit pas d'accès direct à ces autres fichiers. C'est donc une question de goût ; certaines personnes utilisent cette fonctionnalité et d'autres non.

Comme en C, un chemin relatif est pris par rapport au fichier de configuration parent. Si .ebrc se trouve dans un certain répertoire, et que vous incluez le fichier "plugins", alors plugins devrait être dans ce même répertoire.

optinclude = plugins

Inclure optionnellement un fichier. Si le fichier est manquant, edbrowse continue simplement son exécution. Dans ce cas, nous incluons le fichier de plugins, s'il est présent, dans le même répertoire que le fichier de configuration d'edbrowse.

optinclude = plugins.d

Inclure un répertoire de fichiers. Dans ce cas, il pourrait s'agir de plugins dans le répertoire plugins.d. Les fichiers sont inclus par ordre alphabétique (ascii).

## Agent utilisateur

Chaque fois que vous rapatriez une page Web de l'Internet, votre navigateur s'identifie au centre serveur. Ceci est fait automatiquement. Edbrowse s'identifie en tant que «Edbrowse/3.5.1, où le nombre après le slash indique la version en cours de Edbrowse.

Tout cela est bel et bon, mais certains sites Web n'ont aucun respect pour Edbrowse, et ne se sentent pas concernés par l'accessibilité de l'Internet. Ils ne vous laissent pas entrer à moins que vous ressembliez à Internet Explorer ou à Netscape ou un des acteurs majeurs. StartPage.com, un frontal de Google, en est un exemple. Ainsi que faisons-nous ? Nous mentons, bien sûr.

agent = Lynx/2.8.4rel.1 libwww-FM/2.14
agent = Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)

Vous pouvez indiquer différents agents dans votre fichier .ebrc, et les activer avec la commande «ua» (agent utilisateur). Si les lignes précedentes sont présentes dans votre fichier «.ebrc», vous pouvez taper «ua1» pour feindre être lynx, ou «ua2» pour feindre être Mozilla. Tapez «ua0» pour restaurer l'identification standard d'Edbrowse.

agentsite = google.com 2

Prétend être utilisateur agent 2, cad Internet Explorer version 7, quand on parle à google.com ou l'un de ses sous-domaines. Cela était nécessaire à une époque, mais n'a plus aucune importance maintenant, depuis que Google est devenu complètement inaccessible à edbrowse fin 2025. 😞 Néanmoins, certains sites sont particuliers quant au type de navigateur, et aucun d'entre eux ne recherche edbrowse.

## Fonctions d'Edbrowse

Vous pouvez grouper un ensemble de commandes d'Edbrowse sous un nom, semblable à une macro. Si ce qui suit apparaît dans votre fichier de .ebrc, vous pouvez taper «<ud» pour enlever les fins de lignes DOS dans un fichier.

function:ud {
,s/\r$//f
}

La commande < est supposée vous rappeler la redirection, c'est-à-dire lire des commandes dans cette macro. Et une macro peut appeler d'autres macros, en employant la commande «<» dans le corps de la macro. Presque toutes les commandes d'Edbrowse jouent le jeu. Une macro peut récupérer des pages Web de l'Internet, compléter des formulaires, soumettre des requêtes, et envoyer du courrier.

Il est généralement judicieux d'utiliser le drapeau d'oubli, suffixe f, à l'intérieur des fonctions, afin qu'elles ne perturbent pas la recherche et la substitution que vous avez établies dans votre session interactive.

Contrairement à beaucoup de choses dans le monde Unix, les noms de macros sont insensibles à la casse. Ainsi, fairececi, faireCeci, faireCeci sont tous équivalents. Egalement, si vous définissez de multiples macros sous le même nom, c'est le premierqui l'emporte. Edbrowse ignore silencieusement les définitions suivantes.

Les noms de fonctions sont alphanumériques, mais doivent commencer par une lettre, comme dans les autres langages de programmation. Les noms sont insensibles à la casse.

Normalement, Edbrowse continue de fonctionner, qu'une commande réussisse ou pas. Cependant, vous pouvez dire à une fonction de s'arrêter en cas d'erreur en employant cette syntaxe :

function+hw {
/bonjour/f p
/monde/f p
}

Le signe plus après le mot «function» signifie que chaque commande de la fonction doit réussir. S'il n'y a aucune ligne contenant le mot bonjour, la fonction s'arrête. S'il y a une telle ligne, alors la fonction continue, et recherche une ligne contenant le mot monde.

Excepté l'indentation, le format est fixe, et impitoyable. Vous ne pouvez pas, par exemple, mettre l'accolade d'ouverture sur sa propre ligne, comme suggéré par K&R.

Si une fonction modifie les paramètres, tels que le respect de la casse, la recherche cyclique, le niveau de débogage, l'agent utilisateur, etc, ces paramètres sont restaurés lorsque la fonction se termine ; sauf si la fonction est la fonction init, ou si le nom de la fonction commence par le mot set. Il est clair que la fonction init est destinée à établir des paramètres pour la session interactive, donc les changements ne devraient pas être locaux à cette fonction.

Ces fonctions peuvent accepter des paramètres. Rendons la fonction précédente un peu plus générale. .

function+hw {
/~1/f p
/~2/f p
}

Reproduisez le comportement précédent en tapant <hw bonjour monde. Ou vous pouvez rechercher différentes lignes en appelant <hw salut ami. La dernière commande recherche une ligne contenant le mot salut et l'affiche, et si succès recherche une ligne contenant le mot ami et l'affiche. Établissons une fonction plus utile, un raccourci pour google. La variable «~0» représente la réunion de tous les arguments. Dans ce cas-ci «~0» représente les mots-clés passés à votre recherche.

function:ddg {
# recherche duckduckgo
b https://www.duckduckgo.com/
/<>/ i1=~0
i2*
g/h2 Ad/X
/h2 {/
}

Avec ceci vous tapez simplement `<gg kangourou habitat' pour découvrir où les kangourous vivent.

En conclusion, une fonction d'Edbrowse peut prendre deux directions différentes, selon le succès ou l'échec de la commande précédente. Utilisez «if(*)» pour le succès, et «if(?)» pour l'échec. ? est supposé vous rappeler le point d'interrogation affiché quand une commande d'Edbrowse échoue. Vous pouvez enchaîner avec un bloc else, en utilisant } else {, si vous le souhaitez. Ce qui suit recherche une ligne contenant le mot «salut», et s'il en trouve un, il avance à la prochaine ligne, et si cette ligne contient le mot «ami», il la supprime.

    function+silly {
     /salut/
     if(*) {
      +s/ami//
      if(*) {
       d
      }
     }
    }

J'ai délibérément employé «function+» au lieu de «function:» dans l'exemple précédent. Normalement, + fera avorter la fonction si une commande d'Edbrowse échoue. Cependant, si le résultat de cette commande est employé dans un test, l'exécution de la fonction se poursuivra. C'est identique à l'option «-e» du shell, qui fait avorter un script une commande échouée, à moins que le résultat de la commande soit employé dans une structure si ou tant que.

D'autres structures de contrôle incluent «while(*)» while(?) until(*) et until(?). L'exemple qui suit efface les lignes du fichier, à partir du début, tant que ces lignes contiennent le mot salut ou ami. Il supprime ensuite toutes les lignes vides du début.

    function+topclean {
     until(?) {
      1g/salut\|ami/d
     }
     until(?) {
      1g/^$/d
     }
    }

Vous pouvez employer la boucle loop(100){ … } pour répéter un ensemble de commandes 100 fois. Ce dispositif n'est que rarement employé.

<7 exécute les commandes edbrowse dans la session 7. Il ne s'agit pas d'une fonction, mais simplement d'une séquence de commandes. Les commandes sont exécutées dans le contexte courant. Si la session 7 a une ligne, contenant la lettre n, <7 imprimera la ligne courante, avec son numéro, dans votre session courante. Il est possible d'être dans la session 7 et de lancer <7, bien que je ne sache pas quand vous voudreiz le faire. Il peut y avoir des conséquences inattendues, si des commandes antérieures modifient les commandes qui n'ont pas encore été exécutées.

Comme il ne s'agit pas d'une fonction, elle ne prend pas d'arguments. Cependant, vous pouvez utiliser edbrowse pour construire les commandes de la session 7 comme vous le souhaitez.

<*7 exécute les commandes de la session 7, mais s'arrête en cas d'erreur. J'aurais pu utiliser +, mais cela a une autre signification, comme nous le verrons plus loin.

La syntaxe at est supportée ici. <7@22,29 exécute les commandes des lignes 22 à 29.

Si vous écrivez ceci dans un script, et que vous n'êtes pas sûr que la session 7 soit disponible, tout peut être fait sur la pile. Utilisez etmp, puis créez vos commandes dans ce tampon. Remontez et lancez <-1 qui exécute toutes les commandes qui se trouvent un tampon plus bas dans votre historique. Lorsque vous avez terminé, descendez, puis remontez pour vous débarrasser du tampon temporaire. <*-1 s'arrêtera en cas d'erreur.

Comme il ne s'agit pas d'une fonction, les modifications ne sont pas locales à cette exécution. Si vous modifiez un paramètre au début, vous devez le restaurer à la fin.

En mode jdb, <7 transmet les expressions de la session 7 à javascript, comme si vous les aviez tapées.

## La fonction init

La fonction appelée «init» est lancée au démarrage d'Edbrowse. Elle définit quelques comportements par défaut – par ex. la lecture de votre fichiers de signets, pour avoir vos «favoris» sous la main. Voici un exemple.

    function+init {
    # désactive le débogage, pour ne pas afficher les messages de ce script
    db0
    # supposent que des répertoires sont en lecture/écriture
    dw
    # pour les lignes affichées, mettre marqueurs de début et de fin
    endm+
    # utilisez la bibliothèque readline pour les entrées
    rl+
    # mettre les favoris dans la session 99 : on sera prêt à surfer.
    e99
    b $bookmarks
    # retour à la session 1, pour travailler
    e1
    }

C'est juste un exemple. Mettez quelque chose que vous aimez dans votre fonction init, ou ignorez-le si le fonctionnement d'Edbrowse vous satisfait ainsi.

L'option -d de la ligne de commande remplace tous les réglages de db effectués par le script init. Ainsi, edbrowse -d4 pourrait être très verbeuse, même si db0 est la première entrée de votre script init.

## Variables Edbrowse

Les variables peuvent être définies et utilisées, généralement à des fins de script. La commande suivante définit jj avec la chaîne "hello world".

var jj=hello world

La syntaxe pour définir et référencer les variables est assez rigide, tout comme dans le shell. Il ne peut y avoir aucun espace avant le signe égal, et tout espace qui suit est significatif. Une variable commence par une lettre et ne contient que des lettres et des chiffres. Les noms de variables sont sensibles à la casse.

$(jj) développe la variable jj en ligne, mais seulement si jj est définie, sinon elle est laissée telle quelle. Il s'agit de la syntaxe makefile, plutôt que de la syntaxe shell plus simple $jj, sur laquelle vous pourriez tomber par accident.

Les variables ne sont pas définies ou développées pendant la saisie de texte, (en mode ajout), vous pouvez donc taper a et écrire vos scripts edbrowse ou makefiles comme vous le souhaitez.

Une quantité modeste d'arithmétique est supportée, similaire à $((expression)) dans le shell. Ici une expression est une séquence de variables ou de nombres, séparés par les opérateurs +, -, *, et /. Ce qui suit s'évalue à 49.

var jj=7
p $(jj+3*4+5*6)

var jj=clear effacera la variable jj du cache. Ceci est similaire à la commande "f clear", qui efface le nom de fichier.

Le cache de variables d'edbrowse est similaire à l'environnement, mais complètement séparé de celui-ci. Utilisez : pour accéder à l'environnement. Ce qui suit produit également 49, mais la variable jj est dans l'environnement, et sera transmise à toutes les commandes shell.

var jj:=7
p $(:jj+3*4+5*6)

Une variable peut exister dans les deux mondes si vous le souhaitez.

var z=elephant
var z:=$(z)

Une expression arithmétique peut inclure des variables des deux domaines, comme dans $(jj+7-3*:kk)

Si la syntaxe est correcte, et que la variable est définie, et que l'expression serait remplacée par sa valeur, et si un antislash précède l'expression, comme dans \$(x), alors l'antislash représente un échappement. Il est supprimé, et l'expression reste. Ainsi p \$(:LANG) affiche $(:LANG).

Il y a une commande test, qui est similaire en syntaxe et en fonction à celle trouvée dans le shell. Si la ligne comprend [ expression = expression ], alors elle retourne silencieusement un succès si les expressions sont égales, et retourne une erreur si elles ne le sont pas. L'opérateur != fait l'opposé. Voici une petite fonction amusante qui compte jusqu'à 17.

    function+count17 {
        db0
        var i=0
        while(*) {
            var i=$(i+1)
            p $(i)
            [ $(i) != 17 ]
        }
        var i=clear
    }

## Comptes de courrier

Le prochain chapitre décrit Edbrowse en tant que client de courrier électronique, aussi allons-nous employer le fichier de configuration pour définir vos comptes de courrier. Vous pouvez définir plusieurs comptes, si besoin. Ils sont implicitement numérotés, dans l'ordre d'apparition dans le fichier de configuration. Ainsi le premier compte de courrier devient #1, le second devient #2, et ainsi de suite.

Nous avons vu les mots-clés définissant un compte de courrier. Enfermez-les dans {mail…}, comme suit :

    mail {
     default
     inserver = pop3.un-domaine.com
     outserver = smtp.un-domaine.com
     login= eklhad
     password = secret
     from = Karl Dahlke
    reply = karl.dahlke@un-domaine.com
    }

La directive «default» fait de ce compte le compte par défaut. Un et un seul compte doit être défini par défaut. Si vous n'indiquez pas un compte pour récupérer ou envoyer le courrier, le compte par défaut est employé. Attention : le serveur smtp par défaut est toujours utilisé pour envoyer le courrier, quelque que soit le compte spécifié. Si le compte #1 est le compte par défaut, et vous envoyez le courrier en utilisant le compte #3, l'adresse d'expéditeur et de réponse du compte #3 seront envoyées au destinataire, et s'il répond, sa réponse sera envoyée au compte #3 de courrier. Cependant, le serveur smtp de votre compte de défaut est toujours utilisé pour transmettre physiquement le message. Il y a des raisons techniques à cela, qui ont à voir avec les questions de sécurité. Cependant, si un compte a l'envoi encrypté, les questions de sécurité ne se posent plus, et nous pouvons utiliser ses paramètres pour envoyer et recevoir des courriels. Ci-dessous, une configuration typique pour le gmail de Google.

    mail {
      inserver = pop.gmail.com
      outserver = smtp.gmail.com
      secure
    #  Google accepte également outport = ^587
      login = utilisateur@gmail.com
      password = secret
      reply = utilisateur@gmail.com
      from = nom complet
    }

Le filtrage du courrier, par l'expéditeur et/ou le sujet, est contrôlé par votre fichier de configuration. Ceci sera décrit plus tard, en tant qu'élément du client «fetchmail».

## Descripteurs des plugins

Les plugins sont déterminés par l'extension dans le nom de fichier, ou dans certains cas par le protocole. Ils peuvent indiquer à Edbrowse d'utiliser /usr/bin/play pour jouer fichier.wav ou fichier. voc, et /usr/bin/mpg123 pour jouer fichier.mp3, et ainsi de suite. Regardez svp les fichiers dans le répertoire des plugins de ce projet. Voici un exemple :

    plugin {
    type = audio/mp3
    desc = audio file in mp3 format
    suffix = mp3
    content = audio/mpeg
    #  %i est replacé par le nom de fichier tmp3 ou l'url mp3
    program = mpg123 -q -C %i
    }

Cet exemple traite un fichier mp3 ou un flot de données mp3. Ceci fonctionne parce que mpg123 peut jouer un fichier local ou un flot venant de l'Internet. Si mpg123 était limité aux fichiers locaux de votre ordinateur, il faudrait ajouter le mot-clé down_url, avec lequel une URL est téléchargée vers un fichier temporaire puis lue. La lecture automatique peut être désactivée avec la commande pg qui active ou désactive les plugins.

Les cookies qui seraient transmis au serveur si vous téléchargiez le fichier directement sont disponibles dans la variable d'environnement PLUGINHEADERS. Dans certains cas, le programme du plugin peut avoir besoin de ces cookies lorsqu'il contacte le serveur en votre nom. Exemple : l'option --http-header-fields de la commande mpv. En pratique, cette option est rarement nécessaire.

Si vous avez chargé en mémoire un fichier audio, vous pouvez taper "pb" pour jouer le contenu du buffer. Les données sont mises dans un fichier temporaire /tmp/.edbrowse/ et ensuite mpg123 est lancé. Finalement, vous pouvez jouer un fichier mp3, ou n'importe quel fichier géré par un plugin, directement en mode répertoire. La commande g (go) joue le fichier présent sur la ligne de commande. C'est très efficace; nul besoin de lire le fichier en mémoire ou de créer un fichier temporaire dans /tmp.

Dans certains cas, le flot n'est pas spécifié par le protocole ou le suffixe. Une video youtube, par exemple, ressemble à n'importe quelle page html, pourtant il peut être lu par un lecteur de musique. Utilisez l'attribut urlmatch pour ceci.

urlmatch = .youtube.com/watch?

Certains plugins jouent des fichiers, d'autres effectuent des traitements sur des fichiers. L'attribut outtype détermine le type de plugin. Dans cet exemple, un fichier pdf est converti en html, qui pourra être parcouru de façon traditionnelle.

    plugin {
    type = pdf
    desc = pdf file
    suffix = pdf
    content = application/pdf
    #  le fichier doit être local
    down_url
    program = pdftohtml -i -q -noframes %i %o
    outtype = H
    }

D'autres plugins peuvent convertir du texte formaté, des docs Word, Open Office etc. . Mettez outtype à h pour avoir de l'html, ou t pour du texte. Mettez outtype à g, pour générique, s'il n'est pas connu ou déterminé. Ceci est rarement utilisé.

    plugin {
    type = Word doc
    desc = document Microsoft Word, pas docx
    suffix = doc
    content = application/msword
    down_url
    #  sans %o, la sortie est envoyée directement dans le tampon, plus efficace.
    # avec %o, la sortie est envoyée vers un fichier temporaire, puis relue dans le buffer
    # tous les programmes ne peuvent pas envoyer leur sortie vers stdout
    program = catdoc %i
    outtype = T
    }

Notez qu'il existe des convertisseurs pdf en texte qui sautent l'étape intermédiaire html, mais j'ai voulu préserver les fonctionnalités des hyperliens qui pourraient être présents dans le pdf, et donc j'ai pensé avantageux de passer par l'html, même si cela ajoute une étape supplémentaire.

Si le nom du fichier ne reflète pas le plugin correct, utilisez b.xxx pour naviguer avec le convertisseur indiqué par le suffixe .xxx. C'est la même chose que pb.xxx, pour lire la mémoire tampon actuelle à l'aide du lecteur indiqué par le suffixe .xxx.

Si le fichier pdf nécessite un mot de passe, tapez b.pdfp, et utilisez ce plugin. %p signifie paramètre, edbrowse vous demandera le paramètre. Dans ce cas, le paramètre est le mot de passe.

    plugin {
    type = pdf
    desc = fichier pdf avec mot de passe
    suffix = pdfp
    program = pdftohtml -opw %p -i -q -noframes %i %o
    outtype = H
    }

## Un exemple de fichier de configuration

La meilleure documentation étant un exemple, donc vous pouvez vouloir lire le fichier de configuration par défaut, qui est créé pour vous si vous lancez edbrowse sans fichier de configuration.

# Chapitre 7, Client de courrier

- Envoi de courrier
- Client d'envoi de courrier
- Récupération de courrier
- Client de récupération de courrier
- Courrier formaté
- Filtrage de courrier
- Réponse au courrier
- Transfert de courrier
- Client Imap
- Imap dans Edbrowse

## Envoyer le courrier

Vous pouvez envoyer par mail le contenu de votre session d'édition courante à quelqu'un d'autre par l'intermédiaire de la commande «sm». Vos comptes de courrier sont décrits dans votre fichier de configuration.

La plupart des clients mail peuvent automatiquement ajouter une signature à un courriel sortant. Edbrowse ne fait pas exception. En fait, vous pouvez avoir une signature différente pour chacun de comptes mail. Ainsi, vous pouvez utiliser une signature pour vos courriels de travail, et une autre pour les courriels personnels. A l'envoi d'un courriel à partir d'un compte N, Edbrowse cherche un fichier nommé .signatureN, dans votre répertoire personnel. Par exemple, pour l'envoi à partir du compte 2, Edbrowse cherche le fichier .signature2. Si ce fichier n'est pas trouvé, Edbrowse cherche un fichier nommé .signature dans votre répertoire personnel, et ajoute son contenu s'il le trouve.

Les destinataires, les pièces jointes, et le sujet doivent apparaître au début de votre fichier. La commande «sm» est pointilleuse, aussi regardez bien la syntaxe ci-dessous :

    To: fred.flintstone@bedrock.us
    CC: barney.rubble@bedrock.us
    account: 1
    attach: hollyrock-brochure.pdf
    Subject: Vacances à Hollyrock
    Venez visiter Hollyrock.
    Brochure jointe.
    Sincèrement,
    Rock studios incorporated.

La ligne «account» est facultative. Elle oblige Edbrowse à utiliser le premier compte de courrier indiqué dans votre fichier de configuration «.ebrc». Si vous omettez la ligne «account», Edbrowse utilisera le compte par défaut, indiqué par «default» dans votre fichier «.ebrc».

Taper «sm5» indique à Edbrowse d'utiliser le compte 5 de votre fichier de configuration. Ceci annule la ligne «account» de votre fichier à envoyer, si elle existe. Il est souvent plus facile de taper «sm5» que d'insérer «account: 5». Notez, «sm-5» est identique à «sm5», mais le fichier .signature n'est pas ajouté à votre envoi. Parfois vous voulez une fin différente sur votre mail, dans une situation particulière.

fwd: est presque identique à attach:, mais le premier s'attend à ce que la pièce jointe soit un email brut. Ceci est utilisé dans le transfert de courrier.

Lorsque le corps de votre message contient des lignes de plus de 76 caractères, edbrowse utilise soit le codage de transfert quoted-printable, pour préserver le texte exactement comme vous l'avez écrit, soit il enveloppe les lignes et envoie le message en utilisant le format=flowed, de sorte que le client de messagerie récepteur peut dérouler les paragraphes d'une manière qui a du sens sur l'appareil de l'utilisateur. Vous pouvez choisir entre ces options avec la commande flow. Avec la commande flow+, les paragraphes comportant de longues lignes, ou dont la ligne se termine par un espace, seront reformatés. Si un paragraphe ne contient que des lignes courtes, comme un poème, sans espace de fin, il est préservé, même sous flow+. flow+ est la valeur par défaut ; vous n'aurez probablement pas besoin de la désactiver.

Lorsque le corps de votre message comprend un mot de plus de 998 octets, edbrowse utilise le codage de transfert quoted-printable. C'est une exigence de l'Internet. Cela n'arrivera probablement jamais dans le monde réel.

Les différents systèmes d'exploitation utilisent traditionnellement différents caractères pour marquer la fin d'une ligne. En général, edbrowse envoie des pièces jointes textuelles avec des fins de ligne neutres. Le client de messagerie récepteur enregistrera le fichier avec les fins de ligne habituelles sur ce système d'exploitation. Utilisez flow- si vous voulez qu'edbrowse envoie des fichiers texte avec les fins de ligne exactement comme elles sont. Vous n'aurez pas besoin de faire cela très souvent.

sub: est un raccourci accepté pour subject:

Utilisez les lignes «attach:» pour attacher des pièces jointes. Chaque ligne doit indiquer le nom de fichier à joindre, et ces lignes doivent précéder la ligne «Subject». Si le nom de fichier attaché est simplement un nombre, c'est la session correspondante d'Edbrowse qui sera attachée. Revenez à l'exemple ci-dessus, où nous essayons d'attacher la brochure pour Hollyrock. Une autre manière de faire est de commuter à la session 2 et de lire le fichier pdf. C'est un fichier binaire, aucune importance. Ne pas essayer de l'afficher, mettez-le juste en session 2. Puis commutez de nouveau à la session 1 et employez la ligne «attach:2».

Si vous employez «attach:2», au lieu de «attach:hollyrock-brochure.pdf», et si le buffer de la session 2 n'a pas de nom de fichier, le destinataire Fred notera une différence. La pièce jointe n'a pas de nom. S'il veut sauvegarder la pièce jointe, il devra donner un nom de fichier lui-même. A part cela, le courrier est identique.

La directive «alt:» est presque identique à la directive «attach:». En employant «alt:» , la pièce jointe n'est pas transférée dans un fichier à part. Au lieu de cela, c'est une représentation alternative du même mail. Le client de courrier du destinataire essaiera d'employer l'affichage alternatif si possible. C'est utilisé pour envoyer un email contenant du multimédia, avec des hyperliens, des images etc. Le mail primaire est en texte pur, mais la pièce jointe «alternative» est en HTML ou en texte formaté. À moins que quelque chose n'aille de travers, le destinataire verra la présentation alternative, avec les images et les hyperliens. Comme les pièces jointes, la ligne «alt:» se rapporte à un fichier ou à une session d'Edbrowse.

Comme vous l'avez deviné, les lignes «to:» définissent les destinataires. Veuillez ne pas indiquer plus que quelques dizaines de destinataires. Quelques serveurs limitent à 100 le nombre de destinataires. Si vous dépassez ce nombre, les destinataires restants ne recevront simplement pas leur courrier. De préférence, limitez votre «to:» lignes à une ou deux douzaines de lignes.

Souvenez-vous que «CC» signifie copie carbone. Ceci indique au destinataire, ici Barney Rubble, qu'il reçoit une copie du mail pour information ; il n'a pas besoin de répondre. Employer BCC pour la copie carbone cachée, de sorte que chaque destinataire ne voie pas les autres adresses mail.

En indiquant des destinataires, vous pouvez employer des alias au lieu des adresses mail complètes. Les alias sont vérifiés dans votre carnet d'adresses, un fichier texte référencé dans votre fichier de configuration «.ebrc». Si votre carnet d'adresses contient la ligne :

fred : fred.flintstone@bedrock.us : 15 rue des tanneurs : 05555382710

alors vous pouvez simplement écrire «to: fred» en tête de votre fichier. Seuls les deux premiers champs du carnet d'adresses sont significatifs en ce qui concerne Edbrowse. D'autres champs peuvent contenir des numéros de fax, de téléphone, l'adresse postale, etc. C'est à vous de voir.

Noter que «Reply to fred» est une syntaxe alternative pour «to: fred».

Quelques pages Web incluent des liens «sendmail». Elles ressemblent à d'autres hyperliens, mais elles envoient le mail à la personne appropriée. Si vous activez un lien «sendmail», vous serez placés en nouvelle session d'édition avec les lignes «to» et de «subject» pré-remplies. Si l'URL n'indiquait pas de sujet, le sujet sera simplement «Hello». Vous voudrez probablement le remplacer par une meilleure ligne sujet. Tapez votre message puis «sm» pour l'envoyer. Puis tapez «^» pour retourner à la page Web que vous consultiez. Notez que le corps de votre mail peut également être pré-rempli avec du texte, aussi vérifiez avant d'écrire et d'envoyer.

Vous pouvez inclure des pièces jointes avec la directive «attach: » en tête du fichier, supposant que le destinataire peut récupérer ces pièces jointes. C'est utile quand le lien sendmail demande un rapport de bogue - vous pouvez attacher un programme et/ou ce qu'il a produit. C'est assez rare. La plupart des liens de sendmail n'attendent que quelques commentaires ou réactions, et rien d'autre.

Quelques formulaires de Web sont envoyés par mail, plutôt que par HTTP direct. Edbrowse les manipule correctement. Il montre l'adresse mail de destination, envoie le courrier par smtp, et vous avertit de guetter une réponse. Cette réponse pourrait être une réponse par mail, ou même un appel téléphonique si vous avez fourni votre numéro de téléphone dans le formulaire. Mais rappelez-vous, ce n'est immédiat. Vous êtes toujours sur la même page Web, immobile à regarder le bouton d'envoi. Ne poussez plus le bouton ! Le courrier a été envoyé, et vous entendrez parler de la compagnie dans les jours à venir.

## Client d'envoi de courrier

Comme décrit précédemment, Edbrowse incorpore les fonctionnalités d'un client de courrier. En plus de la commande interactive «sm», vous pouvez envoyer le courrier par lots, à partir de la ligne de commande. Si Fred et Barney sont dans votre carnet d'adresses, et vous voulez leur envoyer le courrier à partir de la ligne de commande, avec une pièce jointe, en utilisant votre compte primaire de courrier, faites ceci.

edbrowse -m1 fred ^barney hollyrock-notice +hollyrock-brochure.pdf

Le ^ précédent «barney» indique qu'il est un destinataire cc. Utilisez «?barney» pour BCC.

On assume que des fichiers suivis du signe «+» sont des pièces jointes. Un signe «-» indique un format alternatif, comme ceci :

edbrowse -m1 fred ^barney hollyrock-notice-hollyrock-graphical.html

## Récupération de courrier

Si Edbrowse est lancé avec l'argument -f, il va récupérer le courrier de tous les comptes, sauf ceux qui sont marqués "nofetch". Alternativement, vous pouvez spécifier un nombre après -f, afin de récupérer le courrier d'un seul compte. Par exemple, -f1 récupérera le courrier du premier compte, ignorant les autres. Après avoir récupéré le courrier, le programme affiche le nombre total de messages reçus. Les messages récupérés sont stockés dans un répertoire nommé unread/, relatif au répertoire courrier spécifié dans votre fichier .ebrc. Vous pourrez les consulter, comme expliqué dans la prochaine section.

Souvenez-vous, vous pouvez indiquer plusieurs comptes de courrier dans votre fichier «.ebrc». Le premier compte est indiqué par l'index 1, comme ci-dessus dans «-m1», et ainsi de suite. Vous pouvez vous faciliter la vie beaucoup avec quelques alias dans votre fichier «.bashrc».

    # mon courrier, compte à la maison
    alias moi=" e -fm1 "
    # le compte de mon épouse.
    alias elle=" e -fm2 "
    # mon compte de travail.
    alias travail=" e -fm3 "
    # le terme «mail» est obsolète
    alias mail="echo utilisez moi, elle, ou travail

## Client interactif de lecture de courrier

Si Edbrowse est lancé avec l'option «-m», et pas autres arguments, il devient client interactif de courrier, vous permettant d'examiner les courriers dans votre répertoire de courriers non lus. Si vous désirez récupérer et lire les messages en même temps, vous pouvez combiner les options -f et -m.

D'abord il vous indique combien de messages vous avez reçu. S'il n'y a aucun message il indique «Pas de message», et sort. S'il y a des messages non lus, il les montre un par un. Pour chaque message, il montre l'en-tête (sujet et l'expéditeur) et la première page du texte, et puis affiche un message de sollicitation. Un «?» signifie que le message est complet - Un «*» signifie qu'il reste du texte à lire. Vous répondez en tapant une touche. Les touches ont la signification suivante :

    ? 	résumé des commandes principales
    q 	quitte le programme
    espace	affiche plus de texte
    g	va au début
    t	lit en texte brut
    n 	lit le prochain message
    d 	efface ce message
    w	sauvegarde ce message dans un fichier, puis le supprime
    u 	sauvegarde ce message non formaté dans un fichier et le supprime

En tapant espace, vous continuez à afficher le courriel, comme /bin/more. Tapez g pour revenir au début. Tapez t pour afficher la version en texte brut de cet e-mail, mais le résultat est souvent insatisfaisant. De nombreux e-mails ne comportent qu'un composant html. Dans ce cas, edbrowse vous dit qu'il n'y a pas de composant en texte brut, puis rend l'email en html, comme il l'a fait auparavant. Dans d'autres cas, il y a un composant en texte brut, mais il est simplement indiqué, "Cet email n'a pas de version en texte brut ; veuillez activer le traitement html sur votre client de messagerie". Lorsqu'une version en texte brut est disponible, elle peut être plus simple que la version html.

Si l'email brut est dans un fichier, la commande spéciale b.plain le parcourt en utilisant le composant texte brut, comme si vous aviez tapé t dans le client email.

Les deux dernières commandes, w et u, exigent un nom de fichier, qu'il faut donner. Le nom de fichier réservé "x" ou "X" est /dev/null, où courrier est jeté. où le message de courrier est supprimé. Si le fichier est autre chose que x, et qu'edbrowse ne peut pas écrire dans le fichier spécifié, il vous demande un nouveau nom de fichier.

En pratique, vous pouvez sauvegarder un message avec w, puis réaliser plus tard qu'il vous faut quelque chose, comme un hyperlien ou une pièce attachée, uniquement accessible dans le message non formaté. Quand vous utilisez la commande w pour sauvegarder un message formaté, Edbrowse sauvegarde maintenant une copie non formatée de ce message. Ces copies sont enregistrées dans le répertoire $HOME/.Trash/rawmail, avec des noms de fichiers composées de 5 chiffres. Lorsque vous sauvegardez un message formaté, vous verrez du texte genre "Unformatted 12345" à la fin du fichier. Ceci vous indique où trouver l'original, le message non formaté : $HOME/.Trash/rawmail/12345. Comme indiqué auparavant, c'est une bonne idée de lancer un cron par semaine pour vider la corbeille; si cette tâche cron est capable d'effacer les sous-répertoires, vous êtes certain de ne pas accumuler les courriers non formatés.

## Courrier formaté

A la récupération, le courriel est sauvegardé dans le répertoire des messages non lus sans aucun formatage. En d'autres termes, c'est une copie conforme du message existant sur le serveur. Lorsque vous le lisez après avoir lancé Edbrowse avec l'option -m, Edbrowse l'affiche, après avoir appliqué quelques règles de formatage. Vous pouvez sauvegarder le message, brut ou formaté. Sélectionner "w" au prompt sauvegarde le message formaté, tandis que sélectionner "u" sauvegarde le message non formaté.

Quand un mail HTML est affiché, Javascript est désactivé. Si vous voulez «interagir» avec ce mail, vous devez le sauvegarder non formaté dans un fichier, finir votre session mail, éditer ce fichier, et taper «b» pour naviguer dedans. A ce moment l'affichage HTML sera actif, comme si vous regardiez une page Web sur un site Internet.

## Filtrage de courrier

Votre fichier de configuration supporte un filtrage modeste de courrier. Vous pouvez réorienter le courrier entrant basé sur l'expéditeur, le récepteur, ou le sujet. Ces paramètres sont établis dans votre fichier de configuration. Une règle de filtrage de courrier a la forme :

chaîne de comparaison > fichier de destination

En fait > est quelque peu trompeur. Si le fichier existe, le mail est ajouté à la fin; le fichier n'est pas tronqué. Il aurait peut-être fallu employer >>, mais je ne veux pas m'agacer avec ce signe supérieur supplémentaire.

Le fichier de destination est interprété relativement au répertoire de courrier, défini dans votre fichier de configuration. Naturellement vous pouvez définir un chemin absolu si vous le souhaitez.

Une règle de filtrage de courrier s'active toujours dans le contexte d'un bloc de filtrage. Par exemple, si vous souhaitez réorienter le courrier de certaines personnes, faites ceci :

    fromfilter {
    fred flintstone > fredmail
    fred.flintstone@bedrock.us > fredmail
    jerk@hotmail.com > x
    word@m-w.com > -wod
    }

Vous pouvez indiquer le nom de l'expéditeur, ou son adresse mail. Ce n'est pas une mauvaise idée de faire les deux, au cas où il enverrait le courrier d'un autre compte etc.

Noter que je n'ai pas mis Fred Flintstone en majuscules. Les comparaisons sont insensibles à la casse.

Le nom de fichier «x» est spécial ; il met le courrier à la poubelle. Utilisez-le pour supprimer le courrier des personnes qui vous harcèlent constamment, ou envoient des spams.

La dernière ligne envoie le courrier à «-wod». L'en-tête «-» est spéciale ; elle signifie que le courrier va être sauvegardé dans le fichier «wod» non formaté. Précisément, c'est le mot du jour de Merriam Webster. Je le sauvegarde non formaté, ainsi je peux le parcourir et cliquer sur {audio} pour entendre le mot. Si un mail contient des hyperliens, sauvegardez-le non formaté, ainsi vous pourrez le consulter plus tard.

Vous pouvez également filtrer le courrier sur le champ «to:». C'est utile si vous avez plusieurs comptes, ou des alias qui redirigent le courrier sur votre compte primaire. Voici un bloc exemple :

    tofilter {
    support@my-side-business.com > appui
    sales@my-side-business.com > ventes
    @my-side-business.com > affaires
    me@my-regular-dayjob.com > travail
    }

La troisième entrée est une adresse de capture, sauvegardant n'importe quel courrier envoyé à ce domaine. Puisque les règles sont appliquées dans l'ordre, des demandes d'appui sont stockées dans un fichier appelé «appui», les ventes sont stockées dans un fichier appelé «ventes», et tous les autres mails envoyés au travail seront stockés dans «affaires».

Vous pouvez également employer des adresses de capture dans le bloc «fromfilter». Toute chose de ce domaine va ici, etc.

Vous pouvez filtrer sur le sujet, en utilisant le bloc «subjfilter{…}». Ceci peut stopper un virus. Si un virus utilise un sujet du genre de «viens m'embrasser», envoyez «viens m'embrasser» à x, et il a disparu.

Vous pouvez également employer ce dispositif pour bloquer les avertissements d'autres fournisseurs d'accès Internet, se plaignant que vous leur avez envoyé des mails infectés par des virus. Vous non, naturellement, parce que vous êtes sous linux, avec un client non-standard. Votre adresse de réponse a été récupérée, et vous recevez donc l'avertissement de virus, mais vous n'en avez vraiment rien à faire. C'est appelé rétrodiffusion. Les lignes comme celle-ci peuvent éliminer ces faux avertissements.

subjfilter {
Viens m'embrasser > x
Net Integrator Virus Alert > x
}

Si le sujet est identique à la chaîne de filtrage (casse insensible) ou le sujet commence ou se termine par la chaîne et ne dépasse pas deux fois la longueur de la chaîne, alors le mail est redirigé.

Pour finir, l'adresse de réponse est recherchée dans votre carnet d'adresses. Si elle est trouvée, le courrier est archivé dans un fichier dont le nom est l'alias de l'adresse. Considérons une ligne de votre carnet d'adresses qui pourrait ressembler à ceci : «fred : Fred.Flintstone@SomeDomain.com». Quand vous recevez un mail de cette adresse, elle est sauvegardée dans le fichier fred. Ainsi vous n'avez pas besoin d'écrire des entrées superflues dans le filtre. Il n'y a aucun besoin d'inclure Fred.Flintstone@SomeDomain.com > fred. C'est pris en charge par votre carnet d'adresses.

Si vous voulez sauver le courrier de Fred non formaté, placer un signe moins, c'est-à-dire «-fred», dans votre carnet d'adresses. C'est la même convention que celle du filtre «from:». Si vous ne voulez pas que le courrier de Fred soit réorienté, mais que vous voulez toujours employer l'alias fred à l'envoi de courrier, placez un point d'exclamation au début, c'est-à-dire !fred.

Si un mail est redirigé sur un fichier, et qu'il possède des pièces jointes, Edbrowse demandera que faire avec ces pièces jointes, comme si vous aviez employé la commande «w» pour sauvegarder le courrier. Si votre ami vous a envoyé un programme (en pièce jointe) qu'il veut que vous regardiez, tapez simplement la touche entrée pour le sauvegarder sous le nom de fichier par défaut. Si le courrier de votre ami a un certain genre de logo, ou un fond d'image, qui ne vous intéresse pas, tapez «x» et le mail disparaîtra. Si l'image a un suffixe reconnaissable, tel que GIF, je le jette automatiquement. Si vous voulez vraiment ces images, vous devez sauvegarder le mail non formaté, et le consulter plus tard. A la consultation d'un mail dans l'éditeur, Edbrowse affiche toutes les pièces jointes, comme des hyperliens sur lesquels vous pouvez cliquer, pour un email HTML, ou de manière interactive, pour un email texte. La grande majorité des emails avec pièces jointes sont en HTML, donc vous les verrez généralement sous forme d'hyperliens. Tapez g pour mettre la pièce jointe dans un buffer, puis faites ce que vous voulez avec.

Si attimg est activé, les images jointes sont présentées comme des hyperliens, ou de manière interactive. Si ce mode est désactivé (par défaut), les images jointes sont ignorées. C'est un peu comme les fichiers cachés en mode répertoire. Si les images sont proposées de manière interactive, Vous pouvez supprimer une seule pièce jointe en saisissant x, ou toutes les pièces jointes d'images en saisissant X majuscule. Tapez e pour mettre la pièce jointe dans une autre session edbrowse. Edbrowse vous indiquera dans quelle session se trouve cette pièce jointe.

Employez l'option «-p» pour désactiver les filtres, comme dans «e -pm1». Je l'ai implémenté en regardant le courrier d'autres personnes, tel celui de mon épouse. Je ne veux pas que son courrier parte n'importe où parce qu'il correspond à l'une des règles de mon filtre.

## Réponse au courrier

La commande "re" prépare un courriel pour la réponse. La ligne"Reply to" (Répondre à) qui doit exister est déplacée vers le haut. Celle-ci contient l'adresse e-mail à laquelle vous voulez répondre, et elle est créée lorsque vous consultez votre e-mail. Si cette ligne n'est pas présente, la commande "réponse" échouera.

La ligne "Subject:" (sujet) doit également être présente. Elle aussi aussi est créée lorsque le courrier est formaté. Après que la commande "re" ait été tapée, le sujet peut être déplacé en bas de page, pour faire de la place à d'autres en-têtes de courriel, comme suit.

Si ce message vient d'être parcouru, et si des données non formatés existent encore dans l'actuelle session Edbrowse, ou si les mêmes données sont présentes dans le fichier de données maildir/.reply, alors Edbrowse re-insère le numero d'identification du message d'origine. Celui-ci doit faire partie de la réponse. La ligne pourrait ressembler à ceci.

Reply to somebody@foo.bar.com
references: <4387A55E6AF43C4F9830C74EFECE9132022D0638@foo-bar.net>
Subject: Qu'y a-t-il dans le nom ?

Vous n'aurez pas à corriger, modifier ou supprimer la ligne référence. Laissez-là telle quelle. Si vous participez à une liste de discussion, cette ligne est importante. Elle indique au serveur que votre réponse est effectivement une réponse, et qu'elle devrait être liée au message référencé. En utilisant cette information, le serveur entretient les fils de discussion. Si vous supprimez cette ligne avant d'envoyer votre réponse, vous allez créer un nouveau fil de discussion, et ce qui ne fera que désorienter et perturber les autres participants. Alors - si vous devez répondre à un message sur une liste de discussion, assurez-vous que la commande re insère la ligne References:, et laissez-la telle quelle. Editez le corps du message, ajoutez vos commentaires, et envoyez.

Parfois, la ligne références aura deux identifiants séparés par un espace. Le premier est le début du fil de discussion, le message qui a débuté ce sujet, et le second est le commentaire auquel vous répondez directement. Encore une fois, cela aide les serveurs de listes à organiser les messages en fils de discussion.

La commande "rea" signifie répondre à tous, et utilise de la même façon les donénes du mail original, stockées dans .reply. Tous les destinataires s'affichent en haut de votre fichier. Certains seront indiquées par cc, s'ils étaient en copie carbone. Vous pouvez supprimer un de ces destinataires avant d'envoyer votre réponse. Bien sûr, vous ne voudrez probablement pas supprimer la première ligne, car c'est la réponse à l'adresse.

Le fichier .reply va grossir de plus en plus, à moins que vous ne le raccourcissiez de temps en temps. Placez un script comme celui-ci dans l'une de vos tâches cron hebdomadaires.

m=/home/votre_login/mbox
if [ -r $m/.reply ]; then
tail -1000 $m/.reply >/tmp/.reply ; cp /tmp/.reply $m/.reply ; rm /tmp/.reply
fi

Si le mail n'était pas formaté, et si vous aviez tapé b pour naviguer dedans, la commande "re" sort du mode navigation, et transforme le fichier en un fichier texte simple. Ce qui permet l'édition de texte, de rédiger votre réponse dans le corps du message. Si vous voulez recommencer à partir de zéro, vous ne pouvez pas juste quitter le mode navigation, parce que vous n'êtes pas en mode navigation. Vous devez ré-éditer le message de courrier sauvegardé, le consulter en mode navigation, et y répondre. Comme tout le reste dans Edbrowse, vous vous habituerez à utiliser ce qui précède une fois que vous aurez pratiqué.

## Transfert de courrier

La commande `fwd' prépare un email formaté pour le transfert de courrier. Il ne s'agit pas d'un mélange de texte entre le texte original et vos commentaires ; vous pouvez le faire vous-même si vous le souhaitez. Au lieu de cela, cela envoie l'email original, avec tous ses en-têtes, en tant que pièce jointe. Parfois une entreprise demande cela, pour traquer l'origine du spam. Elle a besoin des en-têtes de l'email pour faire cela. Parfois votre ami veut l'email original, pour capturer toutes les pièces jointes et images qui étaient présentes.

La ligne du haut devient to:x. Vous devez remplacer x par le nouveau destinataire.

La ligne "Subject:" sera comme elle était dans l'email original. Vous pouvez la modifier pour inclure Re: si vous le souhaitez, pour plus de clarté. Après que la commande fwd soit émise, le sujet peut descendre dans la page, pour faire de la place aux autres en-têtes d'email comme suit.

Si cet email vient d'être consulté, et que les données non formatées existent encore dans la session edbrowse actuelle, ou si ces mêmes données sont disponibles dans le fichier de base de données maildir/.reply, alors fwd insère l'identifiant du message de l'email original. Ceci a été décrit dans la section précédente.

Ensuite vient la directive fwd: très importante. Si le mail est un fichier texte, précédemment formaté, alors cette ligne référence l'email brut dans le répertoire ~/.trash/rawmail. Si c'est l'email brut, consulté par la commande b, alors l'email brut existe encore à l'intérieur. Il est copié vers une autre session, et la directive pourrait ressembler à fwd:5.

Dans tous les cas, la procédure est la même. Ajoutez vos propres commentaires, expliquant pourquoi vous transférez cet email, puis tapez sm pour envoyer

## Client Imap

Un client pop3, tel que décrit ci-dessus, télécharge le courrier sur votre ordinateur, courrier dont vous êtes ensuite responsable. Vous devez archiver vos mails, si vous le souhaitez, les sauvegarder, etc. Le protocole Imap vous permet de conserver vos mails sur le serveur indéfiniment, dans le nuage si vous préférez. Vous pouvez accéder à vos mails, peut-être 20 ans après, peut-être 100000 messages, depuis n'importe quel ordinateur, tablette ou smartphone. Vous pouvez télécharger les emails localement, si vous le souhaitez, mais ce n'est pas obligatoire. C'est davantage une approche orientée serveur. La configuration initiale de gmail, pour imap, ressemble à ceci :

    mail {
      imap
      inserver = imap.gmail.com
      outserver = smtp.gmail.com
      secure
      login = quelqun@gmail.com
      password = secret
      reply = quelqun@gmail.com
      from = nom complet
    }

Si ce qui précède est la troisième entrée Mail dans votre fichier de configutration, alors vous accédez à ce compte avec "edbrowse -f3". Ceci ne rapatrie pas simplement tous les mails sur votre ordinateur local, comme c'est le cas avec un compte pop3. Edbrowse vous permet plutôt d'accéder à tous vos mails sur le serveur imap de façon interactive. Voici une capture d'écran.

    1 INBOX, 0 messages
     2 [Gmail]/Tous les mails, 7 messages
     3 [Gmail]/Brouillons, 0 messages
     4 [Gmail]/Important, 0 messages
     5 [Gmail]/Envoyés, 0 messages
     6 [Gmail]/Spam, 7 messages
     7 [Gmail]/Marqués, 0 messages
     8 [Gmail]/Corbeille, 16 messages
    Choisissez un dossier par numéro ou par sous-chaîne.  q pour quitter.
    rf pour rafraîchir. l=nombre pour changer la limite maximale de récupération. e=chaîne pour définir le format d'enveloppe

Tapez 6, ou Spam, ou simplement Spa et Edbrowse vous permet de naviquer dans le dossier Spam. Il affiche l'expéditeur, le sujet de chaque mail, ce qu'on appelle l'enveloppe, et vous demande quoi faire, comme dans l'interface du client pop3. Tapez q pour quitter, n pour le message suivant, d pour l'effacer, ou m pour le déplacer dans un autre dossier. Ici aussi, vous pouvez spécifier le dossier de destination par le numéro ou par son nom. Tapez espace pour lire le corps du mail, et continuez à taper espace, comme more ou less, pour lire la suite du mail. g a le même effet que espace; aller à ce mail, au lieu de suivre un lien dans une page ou d'ouvrir un fichier en mode répertoire. g au milieu d'un mail revient au début. Tapez w pour enregistrer le mail formaté, ou W pour le sauvegarder et l'effacer ensuite. Tapez u ou U pour enregistrer le mail non formaté. Tapez a pour enregistrer les pièces attachées. r marque l'email comme lu, et R le marque comme non lu. Tapez / pour rechercher dans les mails par sujet, expéditeur ou dans le corps Finalement tapez h pour l'aide, qui ressemble à ceci :

    h affiche ce message d'aide
    q quitte ce programme
    s arrête la lecture dans ce dossier
    n message suivant
    p message précédent
    d efface cet email
    m déplace ce mail dans un autre dossier
    v voir tout
    b déplacer ou effacer par lots
    f déplacer ou effacer par expéditeur
    espace lit et traite ce mail
    t lit le texte brut
    / recherche des mots dans le sujet, l'expéditeur ou le corps du message
    w enregistrer ce courriel dans un fichier
    W enregistrer ce courriel dans un fichier et le supprimer
    u enregistrer ce courriel non formaté dans un fichier
    U enregistrer cet e-mail non formaté dans un fichier et le supprimer
    a numériser et enregistrer les pièces jointes
    r marque l'email comme lu,
    R le marque comme non lu.
    e chaîne de formatage de l'enveloppe
    l défini la limite de récupération
    = affiche le nombre de messages dans la liste

Sur certains serveurs, comme gmail, vous ne pouvez effacer un mail dans le dossier "Tous les mails". Vous devrez déplacer ce mail dans la Corbeille et l'y effacer.

La recherche est insensible à la casse, et recherche souvent des mots, plutôt que des sous-chaînes. Ainsi, anti trouve Anti, mais pas antique. L'implémentation dépend de votre serveur imap. Par défaut, la recherche se fait dans le sujet. Tapez "f Smith" pour rechercher les mails de Smith, ou "b étoile noire" pour trouver tous les mails contenant étoile noire. S'il y des milliers sont trouvés, seuls les 100 derniers sont affichés. Vous pouvez modifier cette limite avec la commande l.

S'il ya 300 mails dans votre dossier de spams, il y a un moyen simple de les effacer tous. Tapez v pour les voir tous, juste pour vous assurer qu'aucun mail valide n'est présent. Vous ne voulez certainement pas effacer quelque chose de bien par erreur. Ensuite tapez b pour mode de traitement par lot (b pour batch), ensuite d pour effacer. pouf, ils sont partis. De la même façon, vous pouvez déplacer tous les messages dans un autre dossier. Cependant, le déplacement est plus utile avec la clause from. Si le message courant est de Fred Flinstone, tapez f, et edbrowse affichera "from Fred Flinstone". Tapez m dessins, et tous les messages de Fred Flinstone iraont dans le répertoire dessins.

Les commandes create et delete créent ou effacent des répertoires. Tapez "create foo" pour créer le nouveau répertoire foo. Vous pouvez y déplacer des messages. Attention - si vous effacez foo, tous les messages dans foo seront effacés. Ceci dépend du serveur imap. Vous pouvez renommer un dossier via "rename foo bar" Cette commande suppose que le nom du dossier ne contient pas d'espace.

## Imap dans Edbrowse

Edbrowse présente une interface de type ed dans presque tout ce qu'il fait : navigation, gestionnaire de fichiers, base de données sql, client irc, etc. En fait, cela fait partie de son attrait. Ainsi nous essayons de faire cela pour IMAP également. Cela présente une expérience utilisateur fluide, comme on le voit dans d'autres navigateurs. Lors de la lecture d'un email, vous pouvez aller à un hyperlien, envoyer une réponse, supprimer l'email, sauvegarder ses pièces jointes, etc. Le client autonome est plus rapide pour certaines choses, mais vous ne pouvez pas effectuer toutes ces opérations intégrées

Appelez un serveur avec la commande "imap n". n est le numéro du bloc de messagerie dans votre fichier de configuration. (imap 0 ferme la connexion et vide le tampon.)

Si la connexion s'établit avec succès, il y a un dossier par ligne dans le tampon. Cette ligne affichera le nombre de messages, soit tant de messages dans le dossier; sauf si ce dossier est exclu par une directive imask dans son bloc mail. Dans ce cas, le nombre est simplement un point d'interrogation. Ce comportement est similaire, bien que non identique, à celui du client mail autonome. Le client n'affiche pas du tout les dossiers exclus. Dans un tampon edbrowse, vous avez un contrôle complet, donc nous incluons tous les dossiers, avec des comptages pour ceux qui sont actifs.

La commande imask active ou désactive la fonctionnalité imask. Elle n'est disponible que dans cette fenêtre, et par compte.

La commande a ajoute de nouveaux dossiers, la commande s renomme un dossier, et la commande d supprime un dossier. Ce sont les commandes ed que vous connaissez déjà, avec les effets de bord attendus. Comme d est drastique et irréversible, edbrowse demande si vous êtes sûr de vouloir supprimer. Tapez y ou yes si vous voulez vraiment supprimer ce dossier, et tous les emails qu'il contient. Je n'ai aucune idée de ce qui arrive si vous supprimez un dossier système, comme Corbeille ou INBOX. Je ne le recommande pas ! Ne renommez ou ne supprimez que les dossiers que vous avez créés.

Tapez /expression pour trouver le dossier souhaité, puis tapez g pour y accéder, comme s'il s'agissait d'un répertoire. Vous pouvez faire cela même si le dossier est exclu par imask.

Dans un nouveau tampon, (les dossiers sont toujours un niveau au-dessus dans votre historique), vous trouverez les emails les plus récents, une enveloppe par ligne. Ils sont classés par ordre chronologique, avec l'email le plus récent en bas. Tapez g pour accéder à un email, et il apparaît dans votre tampon. À partir de là, le contenu d'un email, brut ou consulté, peut être manipulé de la manière habituelle. Si un lien vous intéresse, accédez-y ; vous ne pourriez pas le faire depuis le client imap.

^ permet de remonter à la liste des enveloppes, et ^ à nouveau permet de remonter aux dossiers.

d supprime un email, soit l'email que vous êtes en train de lire, soit l'email indiqué par l'enveloppe courante. Dans la page des enveloppes, vous pouvez supprimer une plage d'emails, ou une collection d'emails via g/re/d. Attention, il n'y a pas d'annulation possible. Cependant, la suppression pourrait ne pas réellement supprimer sur le serveur, selon le serveur - et vous pouvez utiliser la directive dx, comme décrit précédemment, pour faire en sorte que d agisse comme un déplacement vers la corbeille dans certains dossiers.

d supprime l'enveloppe sur laquelle vous êtes, mais n'ajuste pas la page au-dessus. Remontez aux dossiers et le nombre de messages est toujours ce qu'il était avant. Tapez rf pour obtenir un nouveau décompte précis des messages sur tous les dossiers.

Lors de la visualisation des dossiers ou des enveloppes, "l=nombre" changera la limite de récupération, c'est-à-dire combien d'enveloppes sont récupérées à la fois. Une limite de -n récupère les n premiers emails, plutôt que les plus récents.

"e=format" change le format de l'enveloppe. Ces formats sont les mêmes que ceux du client imap. Par exemple, "e=fstd" affiche l'expéditeur, le sujet, le destinataire et la date. L'attribut n n'a pas de sens ici, puisque edbrowse maintient déjà les numéros de ligne pour vous. Si vous êtes sur la page des enveloppes, vous pourriez vouloir actualiser, afin de les voir dans le nouveau format.

Diverses commandes ls affichent les champs d'en-tête sur demande, même s'ils ne font pas partie des lignes dans le tampon. Dans la plupart des situations, from et subject sont suffisants, mais si vous êtes curieux de savoir quand cet email particulier a été envoyé, tapez lsd pour obtenir la date. Ces commandes ls fonctionnent sur un email que vous lisez, ainsi que sur la page des enveloppes. Les lettres ls sont les suivantes :

y subject - mais subject fait probablement déjà partie de la ligne
f from (nom ou organisation si fourni, et adresse email de l'expéditeur)
t to (votre nom si fourni, et votre adresse email de réception)
d date
l longueur
z taille concise
s taille concise, comme lss dans d'autres contextes
u uid
r lu ou non lu

Ceci est étonnamment incohérent par rapport à ls dans d'autres contextes, comme le mode répertoire. lst donne habituellement l'horodatage ; en mode enveloppe il donne le champ destinataire, tandis que lsd donne la date et l'heure. Malheureusement j'ai dû faire cela pour être cohérent avec le format enveloppe et ses lettres. J'ai dû faire un compromis. C'est ce qui arrive, comme le note George Pal, "Quand les mondes se rencontrent".

edbrowse peut effectuer une recherche distante sur le serveur imap. Ce n'est pas simplement une recherche dans les emails de votre tampon ; la recherche a lieu sur le serveur, dans tous vos emails. Pour le dossier sur la ligne courante, les recherches suivantes s'appliquent.

/f fred : emails qui viennent de Fred
/t wilma : emails qui ont été envoyés à Wilma
/s paypal transfer : emails avec paypal et transfer dans la ligne de sujet
/b baseball : emails qui mentionnent baseball n'importe où dans le corps
/uf fred les emails non lus de fred ... etc

Toute autre /expression est simplement une recherche textuelle dans le tampon comme d'habitude.

Les limites d'enveloppe et de récupération s'appliquent toujours. Vous pouvez demander les 20 premiers, ou les 30 derniers, e-mails de cette recherche, en affichant l'expéditeur, le sujet et la taille, par exemple. Vous pourriez utiliser le champ destinataire dans la recherche, si vous recherchez dans les dossiers Envoyés ou Brouillons, et voulez les e-mails que vous avez envoyés à une personne particulière.

Lors de l'affichage d'une enveloppe, ou de la lecture du courrier associé, "m abc" déplacera l'e-mail vers le dossier dont le nom contient abc. Comme l'e-mail a disparu, edbrowse ferme automatiquement la fenêtre et vous remet dans les enveloppes. L'enveloppe de cet e-mail a également disparu. "t abc" copie l'e-mail vers le dossier abc. Cela vous laisse où vous êtes. Sur la page des enveloppes, vous pouvez déplacer ou copier une plage d'e-mails, ou une collection via g/re/m abc.

Les nombres sont également valides dans les commandes de déplacement et de copie. Si abc est le troisième dossier, vous pouvez taper "m 3" ou "t 3". Il est probablement plus sûr et plus facile cependant de taper le nom du dossier ou un fragment de son nom.

Si vous avez le dossier abc ouvert dans un autre tampon, et que vous déplacez un email dans ce dossier, il n'apparaîtra pas dans cette liste d'enveloppes. C'est impossible, car il acquiert un nouvel uid du serveur imap une fois qu'il est déplacé. L'uid est la façon dont edbrowse accède à cet email, pour effectuer toute opération. Vous devez rafraîchir les enveloppes abc pour voir cet email. Il sera le plus récent, même s'il a été envoyé il y a des années. En ce sens, il n'est probablement pas utile d'avoir plusieurs dossiers ouverts simultanément. Descendez dans un dossier, effectuez du travail, remontez, descendez dans un autre dossier, etc.

Lors de la lecture d'un email, il existe une commande d'écriture qui reflète le client imap. "w foo" écrit l'email formaté dans le fichier foo, et sauvegarde l'email brut dans le répertoire ~/.trash/rawmail. C'est ce que fait le client mail, bien qu'il place vos fichiers dans le répertoire de la boîte mail, tandis que cette session sauvegarde les fichiers où que vous soyez. Les pièces jointes sont également sauvegardées, une par une, avec leurs noms de fichiers par défaut, ou des noms différents si vous préférez. Tapez x pour ignorer une pièce jointe, et X pour ignorer toutes les images jointes . Si vous avez déjà travaillé avec le client imap, cela vous semblera familier.

La commande w seule, sans nom de fichier, peut sélectionner un nom de fichier par défaut basé sur votre carnet d'adresses. Si elle provient d'une adresse email associée à l'alias fred, edbrowse vous demandera si vous voulez utiliser fred. Bien sûr, vous pouvez changer le nom de fichier pour autre chose.

Si le fichier existe déjà, le nouvel email est ajouté à la fin, avec une ligne de signes égaux les séparant. Cependant, une pièce jointe ne sera pas ajoutée. Il pourrait s'agir d'un exécutable binaire ; ajouter l'un à l'autre n'aurait aucun sens. Chaque pièce jointe doit être sauvegardée dans un fichier autonome.

La commande u sauvegarde l'email sans formatage. Tapez "u nomdefichier" pour spécifier un nom de fichier, sinon edbrowse vous en demande un. Vous n'êtes pas invité à sauvegarder les pièces jointes, car vous avez l'email brut en main. Vous pouvez toujours le parcourir et sauvegarder les pièces jointes plus tard.

Les commandes W et U majuscules exécutent les fonctions de w et u, puis suppriment l'email, tout comme le client imap. Cela vous ramène nécessairement à la page des enveloppes, où l'enveloppe de cet email aura également disparu.

Ceci est une fonctionnalité spéciale d'un email qui est dans le tampon, indiquée par un w ou u en début. Tout le reste est interprété de la façon habituelle. Si vous voulez écrire le texte quelque part sans sauvegarde de l'email dans ~/.trash/rawmail, et sans pièces jointes, tapez ",w nomdefichier".

Si vous déplacez l'email avec la commande M, cette fonctionnalité spéciale est perdue. u signifie annuler comme d'habitude. Vous pouvez toujours sauvegarder l'email brut si vous le souhaitez, par ub puis w. Ou sauvegarder les pièces jointes par ub puis b. Les raccourcis du client imap sont perdus, et ce n'est pas grave, tant que vous en êtes conscient. Il vaut probablement mieux laisser l'email où il est.

Les commandes d'écriture spéciales sont aussi disponibles sur la page des enveloppes. Encore une fois, c'est un w ou u en début sans préfixe, et cela s'applique à la ligne courante, c'est-à-dire l'email sur lequel vous êtes. Edbrowse affiche un nombre d'octets quand l'email est écrit, comme pour l'écriture de tout autre fichier, puis il affiche l'enveloppe sur laquelle vous êtes. Ce sera la prochaine enveloppe si vous avez utilisé W ou U majuscule pour écrire et supprimer l'email. Le client imap fonctionne exactement de la même façon.

Sur la page des enveloppes, la commande r, sans suffixe, marque un mail comme lu, sans avoir à le lire. Ainsi ,r marque tous les emails comme lus. Si vous avez r dans votre format d'enveloppe, les étoiles disparaissent.

Utilisez r- pour marquer un email comme non lu, comme si vous ne l'aviez pas vu. Si vous avez r dans votre format d'enveloppe, les étoiles réapparaissent.

Les commandes de réponse re et rea peuvent être utilisées sur une enveloppe. C'est simplement un raccourci pour g suivi de re.

# Chapitre 8, Client IRC

- Utiliser IRC
- journalisation IRC

## Utiliser IRC

Edbrowse peut participer à des sessions de chat irc, sur plusieurs serveurs en parallèle. Un exemple est peut-être la meilleure forme de documentation. Exécutez cette commande pour rejoindre les développeurs d'edbrowse sur irc.

irc 8 9 irc.libera.chat pseudo #edbrowse

Utilisez votre pseudo ici ; le nom que vous voulez pour votre session irc. Si vous avez établi un mot de passe, utilisez pseudo:mot de passe. Ceci est cohérent avec ftp et d'autres protocoles.

Utilisez domaine:port pour un port différent ; la valeur par défaut est 6667. Placez * devant le numéro de port pour les sockets sécurisés, par exemple :*3000. Cela est cohérent avec les ports dans un bloc de courrier électronique dans le fichier de configuration. :* seul utilise le port par défaut pour irc sécurisé, 6697.

Le groupe est facultatif. Si vous ne spécifiez pas de groupe sur la ligne irc, vous devrez envoyer :j group au serveur pour rejoindre un groupe. Remarque, ces groupes sont également appelés canaux dans le monde irc. Il se peut que j'utilise ces termes de manière interchangeable.

Les sessions 8 et 9 sont créées ou réquisitionnées pour ce chat irc. et vous resterez dans la session 9. La session 9 est en lecture seule, mais vous pouvez supprimer des lignes si vous le souhaitez. Le chat IRC est ajouté à ce buffer au fur et à mesure qu'il arrive. et dans le journal si la journalisation IRC est activée. Si vous êtes à la fin du tampon, appuyez simplement sur retour pour voir si quelque chose de nouveau est arrivé. Passez à d'autres sessions, faites un peu de travail, puis revenez à la session 9 et appuyez sur retour. Vous pouvez vouloir une instance d'edbrowse fonctionnant dans sa propre console, pour gérer toutes vos sessions irc.

La session 8 est destinée à vos contribution.s Créez un texte, puis tapez w pour l'envoyer. Le texte disparaîtra au fur et à mesure qu'il sera envoyé au serveur. Passez à la session 9 et vous verrez vos commentaires, puis les réponses de vos amis. Passez à la session 8 pour envoyer d'autres textes, etc. Vous voudrez probablement une fonction pour basculer vers la session 8 à votre place, et envoyer une ligne dès que saisie. Vous pouvez toujours basculer vers la session 8 manuellement quand vous voulez composer un paragraphe, ou lire quelques lignes que vous voulez envoyer, ou bien utiliser la puissance de l'éditeur.

Si vous quittez l'une des deux sessions, le socket est fermé, et l'autre session n'est plus en mode irc. Elle est simplement en mode texte. Cependant, q n'est pas autorisé dans la session 8. Il est trop facile d'envoyer du texte puis de quitter par accident, en tapant w puis q par habitude. Je l'ai fait de nombreuses fois. Si vous souhaitez quitter la session 8 et garder la session 9, en conservant un journal de la discussion irc, tapez q8 à partir de la session 9. Cela supprime la session 8, ainsi que la connexion IRC qui lui est associée. Si c'était le seul canal IRC alimentant la session 9, alors celle-ci devient un simple buffer de texte, et vous pouvez également quitter cette session.

If you sent several lines of text to Fred, only to discover he was offf line, and you want to send them again, mark the block of text in session 9 with labels a and b, and do this.

'a,'bw8@0
e8
,s/^.*?> *//
w
e9

Quand vous écrivez du texte dans la session 8, la syntaxe "at" ajoute au tampon et ne l'efface pas. Vous pouvez alors supprimer votre pseudo au début de chaque ligne et l'envoyer à nouveau.

Les lignes dans le tampon de sortie ont le format destinataire<expéditeur> message. Le flux va de droite à gauche : message à travers l'expéditeur vers le destinataire.

destinataire ← expéditeur ← message

Le destinataire est optionnel. Le destinataire est généralement le canal, que vous pourriez ne pas vouloir voir encore et encore. La commande showchan, dans le tampon d'envoi, bascule l'affichage du destinataire.

Les lignes typiques, écrites par vous, avec ou sans affichage du canal, ressemblent à ceci :

canal<vous> message
<vous> message

Les lignes typiques, de votre ami, avec ou sans affichage du canal, ressemblent à ceci.

canal<ami> message
<ami> message

Dans ces exemples, vous et votre ami envoyez tous les deux au groupe, où tout le monde peut le lire. Le groupe est le destinataire. Si vous envoyez un message privé à votre ami, en utilisant l'option :m, vos lignes vers lui ressemblent à ceci.

ami<vous> message
<vous> message

S'il vous renvoie un message privé, les lignes ressemblent à ceci.

*vous<ami> message
*<ami> message

L'étoile sur la première ligne est redondante. Si le canal c'est vous, et non le groupe, alors le message est un message privé pour vous. Néanmoins, l'étoile est un rappel, et cohérente. Quand le canal, ou plus précisément, le destinataire, est supprimé, parce que c'est presque toujours le groupe, alors l'étoile vous indique que c'est un message privé pour vous. Sinon vous ne le sauriez pas.

Les messages système vous sont envoyés à vous seul, mais il n'y a pas de destinataire à l'intérieur, donc cela n'est pas affiché. L'expéditeur est un numéro qui indique le type de message système, suivi du contenu du message. Demandez au système qui est avec vous sur le canal edbrowse, en envoyant :names #edbrowse. La réponse pourrait ressembler à ceci.

>< 353 (vous = #edbrowse) : nom1 nom2 nom3 …
>< 366 (vous #edbrowse) : Fin de la liste /NAMES.

Vous pouvez envoyer d'autres requêtes directement au serveur IRC, comme :list pour lister tous les groupes. Vous recevrez les messages 321 (début de liste), 322 pour chaque canal, et 323 (fin de liste). Attention, un serveur peut héberger des milliers de canaux, la plupart avec des noms cryptiques et sans descriptions.

Il y a beaucoup de ces messages système, commençant par 001, à chaque fois que vous vous connectez. On s'y habitue et parfois on les ignore, bien qu'ils puissent contenir un "message du jour" intéressant ou important.

Au niveau de débogage 0 ou 1, vous verrez les conversations : vos commentaires et ceux des autres participants. Le niveau de débogage 2 affiche les notifications JOIN, QUIT et PART lorsque d'autres personnes rejoignent ou quittent le canal. Cela peut être utile pour savoir si Fred est encore en ligne - surtout si vous avez une conversation avec Fred en ce moment. Le niveau de débogage 3 affiche certaines informations de connexion, ainsi que les pings et pongs. Ceux-ci ne sont pas placés dans le buffer ou enregistrés, juste affichés. Le niveau de débogage 4 affiche tout le trafic vers et depuis le serveur. C'est comme les en-têtes http qui apparaissent au niveau 4, c'est-à-dire les métadonnées qui supportent le transport des données réelles.

IRC utilise directement les sockets et ne passe pas par curl. Les sockets sécurisées utilisent openssl, qui est également utilisé par certaines instances de curl, bien que d'autres utilisent gnutls. Nous espérons qu'IRC et curl n'entreront en conflit d'aucune manière, car ils utilisent tous les deux openssl.

Edbrowse reconnaît certaines commandes raccourcies avec deux-points lors de l'envoi au serveur. Nous avons déjà mentionné :j groupe, qui rejoint un groupe. Les noms de fichiers des sessions 8 et 9 changeront lorsque vous rejoindrez un groupe.

:l quitte un groupe. C'est l'opposé de :j.

:s groupe, bascule vers un groupe différent. Il est possible de rejoindre plusieurs groupes via la même session IRC, en supposant qu'ils soient sur le même serveur IRC. Utilisez :s pour basculer entre ces groupes, afin que vos messages sortent sur les bons canaux. Le nom de fichier reflétera le groupe actif. Tapez f pour voir vers quel groupe vous envoyez.

:m pseudo texte, envoie un message privé à une personne dans votre session de chat. Les autres ne verront pas ce message.

:me ou /me agrees, envoie l'action d'être d'accord au groupe. La plupart des clients, y compris edbrowse, transformeront ceci en "nom_utilisateur est d'accord", comme un énoncé de fait, plutôt que l'utilisateur qui parle.

Il est possible de multiplexer une partie ou la totalité de la sortie de différents serveurs IRC dans une seule fenêtre. Ceci a l'avantage de surveiller les réponses IRC en un seul endroit. Il suffit d'appuyer sur Entrée et voir si quelqu'un a commenté, depuis n'importe lequel de vos groupes. Cependant, vous devez déterminer l'origine de chaque commentaire, et vous déplacer vers le bon tampon d'envoi, pour répondre sur le serveur correspondant. Des commandes comme celles-ci multiplexeront la sortie dans le tampon 9.

irc 7 9 foo.bar.org pseudo groupe1
irc 8 9 hork.snork.net+ pseudo groupe2

La commande bflist inclura :

7: groupe1 envoi
8: groupe2 envoi
9: groupe1 groupe2 réception

Le + sur le second domaine fait que le canal soit affiché. Cela permet de distinguer quel message provient de quel canal. Chaque connexion peut afficher ses canaux ou non, selon la présence ou l'absence de + sur les domaines irc. Quand les canaux sont affichés, le format est canal<expéditeur> message, comme décrit ci-dessus. En cas de message privé, canal est remplacé par votre pseudo, précédé d'une étoile.

Rappelons que la commande lst affiche l'heure de modification du fichier sur la ligne courante, lorsque vous êtes en mode répertoire. De même, lst donne l'heure du message courant en mode IRC. Ainsi vous pouvez déterminer quand les choses ont été dites sur le canal.

lsc affiche le canal du message courant. Vous n'en aurez pas besoin si vous affichez les canaux par défaut. Cependant, si les canaux ne sont pas affichés, et si votre ami est sur deux canaux différents, avec le même pseudonyme, cette commande vous indique sur quel canal il était quand il a écrit ce message. Vous pouvez alors répondre en conséquence.

## journalisation IRC

Définissez irclog = nom_de_fichier dans votre fichier de configuration pour enregistrer vos sessions IRC. Ceci fait certaines suppositions sur la façon dont vous utilisez IRC. Il suppose que toute votre sortie IRC se fusionne en une seule session sur une instance d'edbrowse. Chaque message arrive dans le tampon et est également ajouté au fichier journal. Si vous fermez ou perdez votre session IRC et la redémarrez, le journal est rechargé dans le tampon. C'est une représentation fidèle de ce que vous venez de voir. De plus, le rechargement préserve les horodatages sur chaque ligne, donc lst fournit toujours l'heure de chaque message.

Maintenant, demandons-nous ce qui se passe si vous n'utilisez pas IRC de cette manière. Les canaux séparés ont leur sortie dans des tampons séparés, peut-être dans plusieurs instances d'edbrowse fonctionnant sur des consoles séparées. Chaque message est toujours ajouté à l'unique fichier journal. Si une session se ferme, puis que IRC redémarre, le fichier journal est chargé dans ce tampon. C'est une fusion de tous les canaux IRC que vous surveilliez, comme s'ils allaient tous dans un seul tampon. La même chose se produit si vous redémarrez IRC dans un autre processus edbrowse. Il aura lui aussi le même journal, tout votre trafic IRC fusionné ensemble.

Si vous continuez à surveiller les canaux dans des tampons séparés, chaque tampon continuera avec sa propre discussion séparée, mais le fichier de log grossira avec tous les messages fusionnés ensemble, comme c'était le cas auparavant. Ce n'est pas un comportement nuisible ou déraisonnable, et c'était le plus facile à implémenter. Cependant, la plupart des utilisateurs trouvent plus simple de surveiller tous leurs canaux IRC au même endroit, d'où le log représente fidèlement ce qu'ils voient en temps réel.

Sur un système multi-utilisateur, créez ce fichier de log en mode 600, ou placez-le dans un répertoire qui est en mode 700, afin que les autres ne puissent pas lire vos discussions IRC.

Si vous avez une ou plusieurs sessions IRC en cours, il est possible de commencer l'enregistrement sans redémarrer ces sessions. Ajoutez irclog = nomdefichier à votre fichier de configuration, puis tapez config.

# Chapitre 9, Accès aux bases de données

- Compiler Edbrowse avec l'accès aux bases de données
- Lire les tables
- Source de données
- Insertion, mise à jour, effacement
- Descripteurs de tables
- Go SQL
- Pipes dans les données
- Enregistrements dépliés

## Compiler Edbrowse avec accès aux bases de données

Edbrowse peut se connecter à des bases de données sql via odbc. Ceci suppose que vous avez installé les packages unixODBC et unixODBC-devel sur votre machine. Une autre cible, edbrowseinf, donne accès à la base de données Informix. Ceci fonctionne, mais n'est pas supporté. D'autres interfaces à des bases de données spécifiques peuvent être développées. Vous devrez mettre en application l'interface décrite dans «dbapi.h», en utilisant le kit de développement de base de données écrit en C fourni par le vendeur. Comme odbc peut se connecter à n'importe quelle base, cela devrait satisfaire vos besoins.

## Lire les tables

Quand un nom de fichier est d'un certain format, avec http:// en tête, il est considéré être une URL. Edbrowse ne cherche pas le fichier sur votre ordinateur ; il sort sur l'Internet. De même, quand le nom de fichier a un certain format, on suppose que c'est une table ou une vue dans la base de données. Si vous avez une table appelée clients, mettez-là entre crochets droits.

e ]clients]

Ceci permet de récupérer la table entière, ou des parties, une rangée par ligne, avec des champs délimités par des pipes (caractère «|»). Si le résultat ressemble à un groupe de nombres et de pipes, et que vous avez oublié la structure de la table, tapez «shc» (show colums). L'affichage pourrait ressembler à ceci:

    Table clients 536281 rows
    1 *numero int
    2 prenom string
    3 nom string
    4 date_de_naissance date
    5 sexe char
    6 email string
    7 image blob

La première colonne est un numéro unique qui indique ce client particulier. Après tout, deux clients pourraient avoir les mêmes prénom, nom, et en plus même date de naissance. Les numéros sont toujours une bonne idée, et ils constituent habituellement la clef primaire. Ceci est indiqué par le caractère «*», juste avant le nom de colonne. Si Edbrowse modifie ou supprime un enregistrement, la clef primaire est employée. Je suppose que, à tout moment, la clef détermine un enregistrement unique dans la base de données, et que chaque enregistrement apparaît au plus une seule fois en session d'édition. Vous pouvez afficher deux fois le numéro 37, en ayant deux copies dans votre tampon, mais ne le faites pas !

Noter que Edbrowse peut supporter une clef primaire sur deux ou trois colonnes, telles qu'un numéro de série et un modificateur. Edbrowse ne supporte pas plus de trois colonnes pour une clé. Si la clé primaire comporte plus de trois colonnes, ou si la table n'a pas de clé primaire, vous ne pourrez pas mettre à jour ou effacer des enregistrements. Les rangées dans la table sont en écriture seule.

La syntaxe des tables est davantage qu'un nom entre crochets. Vous pouvez faire suivre le second crochet avec la clause «where». C'est important si vous ne voulez pas afficher la table entière, surtout s'il y a des millions d'enregistrements. Voici quelques commandes de table et leurs significations.

]clients]
Établit le tampon pour la table de clients, mais sans récupération d'enregistrements.

]clients]*
Récupére tous les enregistrements de la table.

]clients]37
Chercher le client dont le numéro de série est 37. La clef primaire est assumée ; votre table doit avoir une clef primaire si vous voulez employer cette syntaxe.

]clients]1=37
Récupére l'enregistrement dont la première colonne est 37.

]clients]37-59
Récupére les clients dont les numéros de série sont compris entre 37 et 59 inclus.

]clients]3=Smith
Récupére les clients dont le nom est Smith.

clients]nom=Smith
idem à ci-dessus.

]clients]last=Smith
Idem à ci-dessus. Si la chaîne correspond à un unique nom de colonne, cela fonctionne.

]clients]nom=Barn%
Récupère les clients dont le nom commence par Barn. Ceci utilise l'opérateur like en sql, comme "Barn%". Cet opérateur est plus portable que matches ou glob. Cependant, il n'est pas sensible à la casse, donc vous obtiendrez les mêmes lignes avec nom=barn%. Malheureusement, cela rend difficile l'utilisation d'un index sur le nom de famille, s'il y en a un, pour une récupération rapide.

]clients]date_de_naissance=01/01/1960-31/12/1960
Récupère les clients qui sont nés en 1960.

Il est parfois préférable pour éditer de commencer avec une grille vide, c'est-à-dire sans clause «where». Ensuite, vous pouvez lire les enregistrements que vous voulez. Tapez un r avant n'importe laquelle des chaînes montrées ci-dessus pour lire les enregistrements dans votre buffer. Notez, vous ne pouvez pas lire des données de différentes tables dans le même tampon, mais vous pouvez commuter sur une autre session d'édition pour consulter une autre table, sans perdre les données sur lesquelles vous travaillez.

En lisant des lignes dans le tampon, vous pouvez omettre le nom de table, puisque ce doit être ]clients] à chaque fois. Ainsi, vous pouvez récupérer le client #738 en tapant «r clients]738» ou «r 738».

Si vous voulez repartir à zéro, tapez `rf' pour actualiser le tampon. Ceci vous ramène de nouveau à une grille vide pour la table, sans les lignes. AVERTISSEMENT – n'effacez pas votre tampon en supprimant toutes les lignes, cela supprimera les entrées correspondantes dans la base de données. Ce dispositif fonctionne juste comme le mode répertoire – vos modifications sont traduites en actions réelles, aussi faites attention ! L'intégrité référentielle vous sauvera habituellement de ce désastre accidentel, si vous employez d'habitude ce dispositif SQL pour relier des tables entre elles, ce qui est une bonne idée à bien des égards. Mais ne vous y fiez pas !

Maintenant, que dire à propos de la septième colonne de notre exemple, celle qui est appelée «image» ? C'est l'image du client, une image jpg qui est binaire, et ne peut pas être facilement placée dans une session d'édition. Au lieu de cela, elle est stockée dans une autre session, par exemple la session 9, et c'est indiqué par <9>. Vous pouvez commuter à la session 9 et sauvegarder le fichier, ou le jeter.

2139|Fred|Flintstone|08/21/1969|M|foo@bar.bar.com|<9>

Par défaut, les colonnes binaires ne sont pas lues. En principe, vous ne les voulez pas. Pour les récupérer, utilisez la commande fbc. Il n'est pas possible de lire plus d'une colonne à la fois, aussi soyez certain de n'en sélectionner qu'une seule.

## Sources de données

Pour travailler sur la base de données, votre fichier de configuration doit indiquer le nom de la base de données, le nom d'utilisateur, et le mot de passe. La source de données doit correspondre à l'une des entrées dans votre fichier .odbc.ini. Nom d'utilisateur et mot de passe peuvent parfois être omis, s'ils sont inférés de votre identité sur l'ordinateur ou définis dans la source de données du fichier .odbc.ini). Voici comment la ligne pourrait ressembler si vous vous connectez sur la base de données «ventes», qui contient la table «clients»

database = ventes, nom utilisateur, mot de passe

Ceci peut être modifié à la volée par la commande ds=. Assurez-vous de ne pas faire référence à d'anciennes lignes dans votre tampon après avoir sélectionné une nouvelle source de données.

Dans certains cas, vous pouvez accéder à d'autres bases de données sans changer la source de données. Par exemple, vous pouvez lire la table «pièces» dans la base de données «inventaire» par appel de «]inventaire:pièces]». C'est la syntaxe standard de SQL pour accéder aux tables d'une autre base de données.

## Insertion, mise à jour, effacement

Maintenant que nous avons fait quelques requêtes, nous allons modifier quelques données. Ces opérations sont connues sous les noms insert, update et delete dans le monde des bases de données.

Ajouter des lignes à une base de données est substantiellement différent de l'ajout de texte. Puisqu'un enregistrement peut contenir une douzaine de champs, et que vous pouvez ne pas vous rappeler qu'est-ce qui va où, Edbrowse vous interroge pour chaque champ séparément. Il vérifie également l'intégrité de chaque champ dès que vous en sortez, par exemple une date doit ressembler à jj/mm/aaaa etc. Si un enregistrement ne peut pas être ajouté en raison d'une erreur de la base de données, Edbrowse affiche l'erreur, et la saisie de données continue, vous donnant une chance de réintroduire l'enregistrement. La saisie de données s'arrête quand vous entrez un point seul, quelque soit le champ dans lequel vous êtes. Les lignes qui ont été entrées avec succès seront présentes dans votre tampon, et la ligne courante est le dernier enregistrement entré. Les données binaires (blobs) ne peuvent pas être entrées à ce stade.

Un enregistrement apparaît tel que vous l'avez entré; et peut différer des valeurs actuelles dans la base de données. Par exemple, vous pouvez entrer un null dans un champ dont la valeur par défaut est 3. Dans la base de données, la valeur est 3, mais il n'y a rien dans ce champ dans votre tampon. Un autre champ peut tronquer un nombre flottant, selon la précision de cette colonne. Un autre champ pourrait être de type serial, et transformer 0 en le prochain numéro de série. Et il a aussi les déclencheurs. Les données peuvent être modifiées de multiples façons à mesure qu'elles entrent dans la base de données. Il serait préférable de rafraîchir chaque enregistrement à chaque insertion, pour voir exactement ce qu'ilcontient, mais ce n'est pas encore implémenté. Rappelez-vous, vous pouvez à tout instant taper "rf" pour avoir un tampon vide, et ensuite relire les lignes que vous venez d'insérer.

Si la première colonne d'une clé primaire est un entier, et que entrez un 0, edbrowse sélectionne le nombre suivant. Certaines bases de données le font de façon interne, d'autres non. ainsi, c'est fait au niveau du front-end. Il y a ici une possibilité de contradiction, si vous et quelqu'un d'autre entrent le même numéro : c'est peu probable, et cela entraînera dans tous les cas une erreur "duplicate key" dans tous les cas.

Employez la commande remplacement pour mettre à jour un enregistrement. Assurez-vous que vous n'avez pas accidentellement ajouté ou effacé un caractère pipe. Des colonnes d'index ne peuvent être modifiées. Si vous mettez à jour beaucoup de lignes avec une commande, en spécifiant un intervalle ou par «g//s», et si une erreur se produit pendant la mise à jour, la substitution net. La session d'édition reflétera la base de données, avec quelques lignes modifiées et d'autres intactes. Il y a plusieurs raisons pour ces erreurs de mise à jour, notamment l'incompatibilité des types de données. par exemple, insérer un entier dans un champ de date), et les contraintes de vérification (par exemple, mettre J pour le sexe au lieu de M ou F). Si vous avez votre mot à dire dans la conception de la base de données, appliquez des contraintes de vérification partout où elles ont du sens. Elles vous protégeront des substitutions erronées qui produiraient des données incohérentes.

La suppression fonctionne exactement comme attendu ; supprimer un enregistrement, et l'entrée correspondante disparaît. Il n'y a pas de commande «annuler». Ce serait impossible, puisque vous avez pu ne sélectionner qu'une partie de l'enregistrement (voir ci-dessous), et je n'aurais pas toutes les données pour reconstituer l'enregistrement. Comme mentionné auparavant, l'intégrité référentielle devrait être utilisée partout où cela a du sens. Comme dernier contrôle, je vous autorise à ne supprimer que 100 enregistrements à la fois. Soyez prudent, et faites des sauvegardes régulières.

## Descripteurs de tables

Supposez qu'une table contient 100 champs. Afficher tous ces champs serait pénible, c'est le moins qu'on puisse dire. Parfois vous êtes intéressé par un groupe de 6 champs, et parfois vous êtes intéressé par un autre groupe de 8. Vous pourrez établir des tables virtuelles, semblables aux vues, dans votre fichier de configuration. Le nom court est un alias, et vous pouvez appeler la table en utilisant cet alias. Elle contiendra seulement les colonnes que vous indiquez. Voici deux descripteurs pour la table mentionnée ci-dessus de clients.

    table {
    tname = clients
    # cnm est mon nom de code pour la table clients
    # je le code, parce que je vais le taper souvent.
    tshort = cnm
    cols = numero, prenom, nom
    # indique la clef primaire, dans ce cas-ci, la première colonne choisie.
    keycol = 1
    }

    table {
    tname = clients
    # tout ce que je veux ici, c'est le numero de client et sa date de naissance.
    tshort = cbd
    cols = date_de_naissance, numero
    keycol = 2
    }

En insérant un enregistrement dans un de ces descripteurs, vous ne spécifiez qu'un sous-ensemble des colonnes de la table. Les autres colonnes seront nulles, ou elles prendront les valeurs par défaut définies dans le schéma de table. Si vous recevez une erreur «Not-Null», elle pourrait être due à une des autres colonnes, qui exige une valeur. Il est habituellement plus sûr d'insérer un enregistrement en utilisant la table complète.

## Go SQL

Si vous connaissez le truc, vous pouvez insérer des commandes sql directement dans la base de données, comme le programme isql livré avec odbc. Dans un tampon de texte (pas dans un tampon de table), placez un crochet fermant en début de ligne, et écrivez ensuite votre commande sql. L'instruction peut tenir sur plusieurs lignes, mais elle doit se terminer par un point-virgule à la dernière ligne, ou bien un crochet fermant au début de la ligne suivante. Tapez "g" pour envoyer l'instruction à la base de données. C'est semblable au "g" sur une page web, qui suit un hyperlien. Vous serez averti d'une erreur quelconque, ou du nombre de lignes modifiées. Dans une instruction select, les lignes récupérées apparaîtront juste à la suite de l'instruction, avec des pipes délimitant les colonnes. Tout ceci se produit dans le tampon courant. Effacez ce dont vous n'avez pas besoin (c'est juste du texte), ou bien sauvegardez les données dans un fichier et importez les dans un tableur. Pour faciliter les choses, les lignes récupérées sont délimitées par les labels 'a et 'b. A insi, vous pouvez sauvegarder les données avec la commande 'a,'bw.

Les requêtes prédéfinies peuvent être sauvegardées dans un fichier pour un usage futur. Appelez-les, modifiez quelques paramètres, et lancez-les.

] select * from clients, adresses
where numero = numero_rue and type_adresse = "personnelle"
and numero between 500 and 600;

## Pipes dans les données

Puisque | est notre séparateur réservé, que se passe-t-il si les chaînes de caractères contiennent des pipes ? Edbrowse échappe chaque pipe littéral avec un backslash. Si le prénom de Fred contient une barre verticale, il peut se présenter sous la forme Fr\|ed|Flintstone. (Le tuyau est silencieux, bien sûr). Dans tout autre contexte, un backslash est simplement un backslash. Il ne signifie rien pour edbrowse ou SQL. Si son prénom se présente comme F\r\|ed, alors il est F\r|ed dans la base de données. Souvenez-vous de cette convention lorsque vous utilisez la commande s pour mettre à jour un enregistrement. Lorsque vous insérez un pipe, là où il n'y en avait pas auparavant, vous devez insérer un \|. Si vous ne le faites pas, cela ressemblera à un séparateur de champs, et edbrowse vous indiquera que l'enregistrement a trop de champs.

Lors de la saisie d'un nouvel enregistrement champ par champ, (en mode append), il n'est pas nécessaire d'échapper le pipe. Chaque champ est ajouté un par un, et il n'y a donc pas de confusion, le pipe n'est pas ambigu. Entrez le prénom sous la forme Fr|ed, et il sera enregistré dans la base de données de cette façon, puis se présentera comme Fr\|ed dans la nouvelle ligne du tampon edbrowse.

Il ne faut pas non plus échapper un | lorsqu'on alimente le sql directement dans le moteur en utilisant la fonction go sql.

] update clients set prenom = "Fr|ed" where numero = 2139 ;
g

Cette convention de pipe supporte cependant presque tous les enregistrements dans presque toutes les bases de données, cependant elle échoue si un champ se termine par un backslash. Cela se fond naturellement dans le pipe qui est le séparateur de champs. De telles données ne peuvent pas être représentées dans edbrowse. Si vous essayez de les lire dans un tampon correspondant à cette table, edbrowse affiche une erreur, "field ends in backslash", et abandonne la lecture. Ce n'est pas une solution parfaite.

Comme l'enregistrement est représenté sur une seule ligne edbrowse, il ne peut pas contenir un retour-chariot. S'il y a des caractères non ascii, nous espérons qu'ils sont utf-8, ou bien ils s'afficheront de façon étrange.

## Enregistrements dépliés

La commande ur déplie un enregistrements, tout comme elle le fait avec un tableau html. L'enregistrement commence par le mot-clé @row :, puis chaque ligne contient un champ de cet enregistrement. Le format est nom du champ:valeur. Cette méthode est particulièrement utile pour les grandes tables, c'est-à-dire les tables comportant de nombreuses colonnes. Dépliez un enregistrement et trouvez le champ que vous recherchez. De plus, vous pouvez mettre à jour ce champ avec la commande s, et vous ne mettrez pas accidentellement à jour un autre champ, comme cela pourrait facilement se produire lorsqu'ils sont tous sur une seule ligne. Voir ci-dessous pour plus de détails.

Tapez ur à nouveau, ou ur-, pour remettre l'enregistrement sur une seule ligne edbrowse.

Lorsqu'un enregistrement est déplié, les pipes ne sont plus échappés par un backslash. Comme il n'y a qu'un seul champ par ligne, il n'y a pas d'ambiguïté.

Un enregistrement déplié ne peut pas être supprimé. Tapez ur et ensuite d pour supprimer l'enregistrement. Il se peut que je modifie ce comportement à l'avenir, mais pour l'instant, les gens pourraient penser qu'ils suppriment ce champ particulier, puis l'enregistrement entier disparaît, ce qui pourrait prêter à confusion.

Si vous ajoutez des enregistrements alors que vous êtes au milieu d'un enregistrement déplié, edbrowse se déplace à la fin de cet enregistrement. Un enregistrement déplié est un bloc de texte qui ne peut pas être fragmenté. De même, la commande m ne déplacera pas une partie d'un enregistrement déplié, ni un autre texte au milieu d'un enregistrement déplié.

L'enregistrement déplié est particulièrement utile pour mettre à jour un champ dans une grande table. Une commande de remplacement sur une longue ligne peut, par inadvertance, mettre à jour le mauvais champ, ce qui peut ensuite invoquer un déclencheur sql, lequel peut avoir des effets en cascade difficiles à annuler. Cependant, si l'enregistrement est déplié, vous ne regardez qu'un seul champ à la fois. La commande s ne peut affecter que ce champ. Elle exécute la mise à jour sql, comme elle le ferait si l'enregistrement était sur une seule ligne. Rappelez-vous que les pipes n'ont pas besoin d'être échappés ici. s/Fred/Fr|ed/ place un pipe au milieu du nom de Fred. Tapez ur, pour mettre l'enregistrement sur une seule ligne, et son nom se présente comme Fr\|ed, pour éviter toute ambiguïté par rapport aux séparateurs de champs. Tapez ur à nouveau et le champ redevient Fr|ed.

Retour au début