###########################################################################
# 
# Cette doc est périmée !
# 
###########################################################################

###########################################################################
1 - Le lancement de l'éditeur
###########################################################################

c'est le fichier "stead" qui contient toutes les commandes de lancement de 
l'éditeur.
Lorsqu'il est fait référence à une procédure, le nom du fichier qui la contient
est  précisé entre parenthèses.
De plus, les procédures soulignées par des "^" sont exécutées alors que les
procédures soulignées par des "-" seront exécutées en réponse à un événement
ultérieur (click sur un menu ou clavier).
Conseil de lecture : suivez en même temps les scripts tcl concernés, et vous
comprendrez tout !!!

###############################################################
1.1 - La première procédure exécutée est jedit:init (stead)
                                             ^^^^^^^^^^
###############################################################


i) détermination du nom du login et du répertoire de travail
   #########################################################
   
STEAD détermine le nom de login de l'utilisateur et son répertoire
de travail.
Le lancement fonctionne même si variables d'environnemnt USER ou HOME ne
sont pas définies. En effet USER est alors calculé par la commande UNIX 
"whoami" et HOME est calculé en effectuant un "cd ~env(USER) avec csh.
variables globales affectées -------> HOME et USER. 

ii) détermination des répertoires système
    #####################################
    
 On calcule le nom de l'exécutable 
 TE_EXE <---- $argv0
 On calcule alors le répertoire ou se trouve l'exécutable stead en
 remontant éventuellement les liens de argv0 
 TE_DIR <---- répertoire de argv0 
 Répertoire des librairies 
 TE_LIB_DIR <----- $TE_LIB/tclLib
 Répertoire des fichiers modes système 
 TE_MODE_DIR <---- $TE_DIR/tclLib/jeditmodes
 Répertoire des fichiers d'exemples de scripts
 TE_SAMPLE_DIR <-- $TE_DIR/examples

iii) détermination des répertoires utilisateur 
     #########################################
       
 répertoire utilisateur
 TE_USER_DIR <------- $HOME/.tk/stead
 répertoire des préférences utilisateur
 TE_USER_PREFS_DIR <-- $HOME/.tk/stead 
 fichier de configuration utilisateur (path complet)
 TE_USER_TERC_FILE <--  $TE_USER_DIR/steadrc
 fichier de préférences utilisateur (path complet)
 TE_USER_TEPREFS_FILE <-- $TE_USER_DIR/stead-prefs
 répertoire d'abréviations statiques
 TE_ABBREV_DIR <----- $TE_USER_DIR
 
iiii) initialisation des variables globales générales suivantes
      #########################################################
      
 - index dans la chaine d'annulation 
 UNDOPTR  <---- 0 
 
       procédures jedit:init                    fichier stead
                  jedit:cmd:save_checkpoint     fichier undo.tcl
                  jedit:cmd:undo                       
                  jedit:cmd:redo
                  jedit:cmd:clear_undo
 
 - mode courant 
 MODE <----- default (signifie qu'on le calculera plus tard)
 
      procédures jedit:init                     fichier stead
                 te:mode:make_navig_menu
                 jedit:cmd:ask_mode             fichier mode.tcl
                 te:mode:set_struct
                 te:mode:create_navig_window
                 te:mode:add_edit_commands
                 electricAlias-insert           fichier electricalias.tcl
                 askalias
                 <script>                       fichiers c-mode.tcl
                                                         csh-mode.tcl
                                                         fortran-mode.tcl
                                                         help-mode.tcl
                                                         latex-mode.tcl
                                                         mail-mode.tcl
                                                         mh-mode.tcl
                                                         pascal-mode.tcl
                                                         postscript-mode.tcl
                                                         sh-mode.tcl
                                                         tcl-mode.tcl
                                                         text-mode.tcl
                                                         verilog-mode.tcl                                                              
 
 - liste des modes existants
 MODE_LIST : à modifier dans steadrc si on veut créer un mode
                 
       procédures jedit:init                    fichier stead
                  jedit:mkmain
                  
 - liste des modes en fonction du fichier
 FILE_MODES : sous la forme <extension du fichier> <mode> <description perso>
 
       procédures jedit:init                    fichier stead
                  jedit:guess_mode
                  
 - liste des modes en fonction de la première ligne du mode
 LINE_MODES : sous la forme <expression de style "glob"> <mode> 
              <description privée>
       
       procédures jedit:init                    fichier stead
                  jedit:guess_mode

 Remarque : la description privée n'est jamais utilisée dans le programme.
 
 - nombre d'espaces contenus dans une tabulation 
 TAB_SPACES <--- 8
 
       procédures jedit:init                    fichier stead
                  te:rep_tab_with_spaces        fichier prefix.tcl
                  
 buffer pour le copier couper coller
 - CUTBUFFER <--- {} 
 procédures jedit:init                  (stead)
            te:cmd:cut_rect_sel         (rect_sel.tcl)
            te:cmd:paste_rect_sel         
            te:cmd:copy_rect_sel
            te:entry:cmd:cut            (entry.tcl)
            te:entry:cmd:copy
            te:entry:cmd:paste
                   
 buffer pour la duplication de la sélection
 - OLD_SELECTION <--  {}
 procédures jedit:init                  (stead)
            te:cmd:cut_rect_sel         (rect_sel.tcl)
            te:cmd:copy_rect_sel
            te:cmd:xpaste_rect_sel
            te:entry:cmd:cut            (entry.tcl)
            te:entry:cmd:copy
            te:entry:cmd:xpaste
            te:eb:paste_selection       (tebindings.tcl)
            te:tb:paste_selection    
            te:clear_selection
            te:unset_selection
            
  - booléen indiquant si la sélection sauvegardée dans le buffer de duplication
  est rectangulaire
  IS_BUFFER_RECTANGULAR(old_sel) <--- 0
  procédures jedit:init                  (stead)
             te:rect_sel                 (rect_sel.tcl)
             te:cmd:xpaste_rect_sel
             te:pipe_rect_sel
             
  - booleen indiquant si la sélection sauvegardée dans le buffer de couper/...
  est rectangulaire
  IS_BUFFER_RECTANGULAR(cut_buf) <--- 0
  procédures jedit:init                  (stead)
             te:rect_sel                 (rect_sel.tcl)
             te:cmd:paste_rect_sel
                              
  - dernière abréviation étendue (abréviations dynamiques)
  ABBREV <---- {}
  début de la dernière abréviation dynamique
  ABBREV_POS <--- {}  
  position du dernier "match" trouvé
  MATCH < ---- {}
  position du dernier "match" trouvé
  MATCH_POS <---- {}
  procédures jedit:init                  (stead)
             dabbrev_again               (abbrev.tcl)
             jedit:cmd:dabbrev

  VARIABLES D'ALIAS ELECTRIQUES (voir Les alias électriques)

  - variable d'insertion d'une marque temporaire et d'indication
  d'extension de l'alias en debut de ligne uniquement
  EA_8bit_mark  <--- ¥
  - variables d'insertion d'une commande Tcl
  EA_8bit_begin <--- ¤Ç
  EA_8bit_end   <--- È
  - variable d'insertion d'une variable d'alias
  EA_8bit_var   <--- ¤

  procédure jedit:init (stead)
  fichiers c-mode.tcl
           csh-mode.tcl
           latex-mode.tcl
           pascal-mode.tcl
           tcl-mode.tcl
           verilog-mode.tcl
           
   TABLEAU DE PREFERENCES PAR DEFAUT
         
   EDITPREFS_DEF <-- voir sichier          
   procédures jedit:init           (stead)
              te:set_default_prefs 
              
   TABLEAU POUR LES RACCOURCIS CLAVIERS ET SOURIS
   (TE_TextEntry_Bindings)
   
   TE_TEB  <--- voir fichier
   procédures    jedit:init                  (stead)
                 te:tb:mk_save_label
                 te:tb:mark_clean
                 te:tb:emacs_bind            (editbind.tcl)
                 te:bindings:debug           (tebindings.tcl)
                 te:bindings:repeatable 
                 te:bindings:clear_count
                 te:bindings:repeat4
                 te:bindings:start_number
                 te:bindings:continue_number
                 te:eb:start_scan_or_paste   
                 te:eb:continue_scan
                 te:eb:end_scan_or_paste
                 te:tb:mark_dirty
                 te:tb:is_dirty
                 te:tb:literal_bind
                 te:tb:insert_nondigit
                 te:tb:insert_glyph
                 te:tb:insert_digit
                 te:tb:paste_selection
                 te:tb:start_scan_or_paste
                 te:tb:continue_scan
                 te:tb:end_scan_or_paste
                 te:tb:drag_sel
                 te:tb:extend_sel
                 te:tb:end_sel
                 te:tb:scroll_down
                 te:tb:scroll_up
                 te:tb:delete_right
                 te:tb:delete_left
                 te:tb:e:kill-line_again
                 te:tb:e:kill-line
                 te:tb:e:kill-region
                 te:tb:e:yank
                      
###################################################################
1.2 - La deuxième procédure exécutée est jedit:userinit (stead)
                                             ^^^^^^^^^^^^^^
###################################################################

i) initialisation des préférences utilisateur
   ##########################################
   
   - exécution de la procédure jedit:init_prefs (stead)
                               ^^^^^^^^^^^^^^^^
     qui  appelle la procédure te:set_default_prefs (stead).
                               ^^^^^^^^^^^^^^^^^^^^
     cette procédure donne aux préférences utilisateurs (tableau EDITPREFS)
     les valeurs par défaut contenues dans le tableau EDITPREFS_DEF.     
                              
 ii) - on exécute le SCRIPT UTILISATEUR contenu dans le fichier
  $TE_USER_TERC_FILE (variable déclarée dans jedit:init (stead)).
   Il peut contenir des commandes Tcl exécutées à ce moment précis et une 
   procédure jedit_user_hook exécutée plus tard.
   Il contient aussi les préférences utilisateurs sous la forme :
   set EDITPREFS(<préférence>) {<valeur>}
   Ces commandes peuvent être écrites par l'utilisateur mais aussi par la 
   commande "save" du panneau de configuration "Config/Graphic Preferences
   Editor". (commande te:save_prefs (config.tcl)
   Aussi elles sont délimitées par les chaînes de commentaires :
   # PREFERENCES UTILISATEUR
   et :
   # FIN DES PREFERENCES UTILISATEUR
   Entre ces deux chaînes, toute commande autre qu'une du style 
   "set EDITPREFS(...) " pourra être écrasée.
   
   Le fichier est chargé par la procédure te:source_config (stead)
                                          ^^^^^^^^^^^^^^^^
 iii) - L'utilisation de certaines préférences doit se faire maintenant :
 on modifie la variable globale tk_strictMotif pour qu'elle corresponde
 à $EDITPREFS(tk_strictMotif) et on impose aux champs d'entrée (Entry) d'avoir
 la même fonte que le texte ($EDITPREFS(textfont)).
 
 
######################################################### 
1.3 - exécution de la procédure jedit:mkmenus (stead)
                                    ^^^^^^^^^^^^^
#########################################################

  Il s'agit de la création des menus de stead.
  Dans l'ordre on crée les widgets suivant :
  - Le widget "frame" .menu qui contiendra les boutons de menu.
  - Les widgets boutons de menu ou "menubuttons" .menu.file, .menu.edit, 
    .menu.search, .menu.format, .menu.config, .menu.extra et .menu.help contenus
    dans .menu. 
  - Les menus .menu.file.m, .menu.edit.m, .menu.search.m, .menu.format.m, 
    .menu.config.m, .menu.extra.m et .menu.help.m attachés à leurs boutons 
    de menu respectifs.
  
  On crée ensuite les commandes de menu par une série de commandes du style
  ".menu.file.m add command ....". On se reportera à la documentation sur
  les menus pour une description détaillées des commandes Tcl invoquées par
  l'utilisateur en actionnant ces menus.  
    
  Les menus file, edit, search, format, config, extra sont disposés 
  (par la commande pack) à gauche de la barre de de menu .menu (située quand
  à elle tout en haut de la fenêtre principale "."). Le menu help est disposé à
  droite de la barre de menu ".menu".

########################################################
1.4 - exécution de la procédure jedit:mkmain (stead)
                                    ^^^^^^^^^^^^
########################################################
                                    
  Il s'agit de la création du widget texte et des autres widgets de la
  fenêtre qui lui sont associés . 
  Après le nom du widget, le nom de la commande Tk qui le crée est ici entre
  parenthèses.
  
  Liste des widgets :
  
  La sous-fenêtre principale (frame) .main (occupant l'espace laissé libre 
  par .menu)

  La fenêtre d'information (frame) .main.alert (une ligne en haut de .main)
  contenant un champ d'entrée .main.alert.label (entry) où apparaissent les
  messages d'information. Un widget  "entry" a été choisi plutôt qu'un 
  "label" pour permettre de sélectionner les résultats d'information. 
  Le champ d'entrée est toutefois désactivé (disable) pour empécher 
  l'utilisateur de modifier son contenu. 
  Remarque : la procédure qui affiche dans la fenêtre d'information s'appelle
  te:alert (telibrary.tcl).
  --------

  Le texte .main.t (text) occupant la majeure partie de l'espace. 
  il est associé à une barre de défilement .main.s (scrollbar) placée
  à gauche ou à droite du texte suivant la préférence $EDITPREFS(scrollbarside)
  Le texte n'est pas configuré pour l'instant (ou plutôt, il est configuré avec
  les valeurs par défaut de Tk).

  La fenêtre d'état .main.status (frame) (une ligne en bas de .main) contenant 
  de droite à gauche :

  - un bouton de menu .main.status.mode (menubutton) contenant la liste des 
  modes et son menu associé .menu.status.m (menu) rempli à l'aide de la liste
  des modes $MODE_LIST.

  - un champ d'entrée (entry) .main.status.name contenant "No File Yet." mais
  destiné à contenir ultérieurement le nom du fichier édité. L'entry a été 
  choisi pour les mêmes raisons que pour .main.alert.label et est aussi
  désactivé.
 
  - un indicateur de sauvegarde du fichier (rouge si le fichier n'est pas 
  sauvé) créé par la procédure te:tb:mk_save_label (stead).
                               ^^^^^^^^^^^^^^^^^^^
        
  Cette procédure crée un "checkbutton" dont la valeur est liée à la variable
  j_teb(modified,.main.t) indiquant si le texte est modifié. Elle est mise
  à vrai (1) par la procédure te:tb:mark_dirty (tebindings.tcl) invoquée par
                              ----------------
  la plupart des procédures qui modifient le texte. Elle est mise à faux (0)
  par la procédure te:tb:mark_clean (stead) invoquée lorsqu'on
                   ----------------
  sauvegarde le fichier. Au stade où on en est, la variable est initialisée à 0.
  Le nom du checkbutton, passé en argument de la procédure 
  te:tb:mk_save_label (stead) est .main.status.fmb.
 
  - un bouton d'extension .main.status.extend (button) qui étend le nom du 
  fichier contenu dans .main.status.name au path complet ou, inversement, le 
  réduit au nom simple. La commande effectuant cette opération s'appelle 
  te:extend_name (window.tcl). On lui passe en argument le nom de l'entry et 
  --------------
  son contenu.
  
  - enfin, un bouton .main.status.xy (button) affiche en permanence les 
  coordonnées du point d'insertion. La commande liée au bouton correspond
  à la commande "go to Line" du menu search, c'est à dire la commande
  te:cmd:go_to_line (cursor.tcl).
  -----------------
  Remarque : la procédure affichant les coordonnées dans le bouton 
  s'appelle te:cmd:show_position (stead).
    
   
  Le focus est ensyuite mis sur le texte (commande focus)
  
  La procédure tk_bindForTraversal (fichier menu.tcl de la librairie tk) 
               ^^^^^^^^^^^^^^^^^^^
  qui effectue les binding suivants, est exécutée :
  bind .main.t <Key-F10>  {tk_firstMenu %W}
  bind .main.t <Any-Mod2-Key>  {tk_traverseToMenu %W %A}
  
########################################################
1.5 - exécution de te:tb:mark_clean (stead)
                   ^^^^^^^^^^^^^^^^
########################################################
                       
  Cette procédure déclare "propre" le texte : 
  mise à 1 de la variable globale j_teb(modified,.main.t)
  (enlève éventuellement le ! du titre mais pas au lancement de stead
   évidemment)
  
#############################################################
1.6 - exécution de la procédure jedit:apply_prefs (stead)
                                    ^^^^^^^^^^^^^^^^^
#############################################################

   i) Lecture des raccouris clavier du texte et des entrées
      #####################################################
         
   Suivant la valeur de EDITPREFS(bindings) :
   basic => 
   exécution de te:eb:basic_bind Entry (editbind.tcl)
                ^^^^^^^^^^^^^^^^            
   définit les bindings (de base) pour les widget de type "Entry" : voir
   "Le clavier/Les raccourcis concernant exclusivement les champs d'entrée".
   exécution de te:tb:basic_bind .main.t (editbind.tcl) définit les bindings 
                ^^^^^^^^^^^^^^^^
   de base pour le widget texte .main.t. : voir "Le clavier" /
   "Les raccourcis concernant exclusivement le texte".
   
   emacs =>
   exécution de te:eb:emacs_bind Entry (editbind.tcl)
                ^^^^^^^^^^^^^^^^            
   définit les bindings emacs pour les widget de type "Entry" : voir
   "Le clavier/Les raccourcis concernant exclusivement les champs d'entrée".
   exécution de te:tb:emacs_bind .main.t (editbind.tcl) définit les bindings 
                ^^^^^^^^^^^^^^^^
   emacs pour le widget texte .main.t. : voir "Le clavier" /
   "Les raccourcis concernant exclusivement le texte".
   
   Remarque:  la procédure te:eb:emacs_bind fait d'abord appel à la
   procédure te:eb:basic_bind. De même te:tb:emacs_bind fait d'abord appel à
   te:tb:basic_bind, de sorte que les rtaccourcis "emacs" viennent écraser
   les raccourcis de base identiques.
   
   ii) exécution de la procédure jedit:set_label (stead)
                                 ^^^^^^^^^^^^^^^
       #################################################
                                     
   affiche le nom de l'interpréteur (variable globale ME) suivi du nom du 
   fichier édité (variable globale FILENAME non encore initalisée à ce stade)
   comme titre de la fenêtre principale (wm title .) et comme nom d'icône
   (wm iconname .).
   
   Affiche le nom du fichier (FILENAME chaîne vide pour l'instant) dans
   la fenêtre d'état .main.status.name.
   
   iii) exécution de la procédure te:set_colors (stead) 
                                  ^^^^^^^^^^^^^
        ####################################################

    qui posséde deux fonctionnalités :
      - provoquer la réinitialisation des couleurs de tous les widgets de 
      l'application créés autres que le widget texte en prenant les valeurs
      dans le tableau EDITPREFS. (commande Tk : <widget> configure)
      - déclarer les couleurs définies dans le tableau EDITPREFS
      comme couleurs des widgets créés ultérieurement. (commande Tk Option add)
      Au stade où nous en sommes, aucun widget n'a été créé. Seule la deuxième
      opération est donc effectuée. 

    Les couleurs concernées par l'affectation sont :
    couleur de fond des widgets autres que le texte  <--- $EDITPREFS(otherbg)
    couleur "foreground" des widgets "scrollbar" <--- idem
    couleur du "slider" des widgets "scale" <-- idem
    couleur "foreground" des widgets autres que le texte <-- $EDITPREFS(otherfg)
    couleur des widgets autres que le texte activés  <-- $EDITPREFS(otherabg)
    (lorsque la souris est dessus par exemple)
    couleur de fond des widgets "scrollbar" <-- idem
    couleur de fond des widgets "scale" <--- idem 
   
   iiii) exécution de la procédure jedit:configure_text (stead)
                                   ^^^^^^^^^^^^^^^^^^^^
         ######################################################
         
   Il s'agit d'initialiser le texte .main.t par la commande .main.t configure
   en tenant compte des préférences utilisateur suivantes :
  
     |---------------------|---------------------------------------| 
     |Préférence           |   Option correspondante de la commande| 
     |                     |  .main.t configure                    |
     |---------------------|---------------------------------------|
     |                     |                                       |
     |EDITPREFS(textbg)    |    background                         |
     |EDITPREFS(textfg)    |    foreground                         |
     |EDITPREFS(textfg)    |    insertbackground                   |
     |EDITPREFS(textsb)    |    selectbackground                   |
     |EDITPREFS(textsf)    |    selectforeground                   |
     |EDITPREFS(textsbw)   |    selectborderwidth                  |
     |EDITPREFS(textbw)    |    borderwidth                        |
     |EDITPREFS(textiw)    |    insertwidth                        |
     |EDITPREFS(textwidth) |    width                              |
     |EDITPREFS(textheight)|    heigth                             |
     |EDITPREFS(textwrap)  |    wrap                               |
     |---------------------|---------------------------------------|
   
    Ensuite la procédure te:configure_font (stead) est exécutée
                         ^^^^^^^^^^^^^^^^^
    STEAD essaie d'appliquer la fonte définie par $EDITPREFS(textfont) au
    widget .main.t. Si elle est incorrecte, la fonte par défaut
    -*-lucidatypewriter-medium-r-normal-*-12-*-*-*-*-*-iso8859-* est appliquée.
    
################################################################    
1.7 - exécution de la procédure jedit:configure_undo (stead)
                                    ^^^^^^^^^^^^^^^^^^^^
################################################################

  Suivant la préférence utilisateur $EDITPREFS(undoable) qui définit la 
  possibilité d'annuler des commandes, on inhibe ou pas les commnades
  "Undo", "Redo" et "checkpoint" du menu .menu.edit.m.
  
##############################################################################
1.8 - exécution de la procédure te:editbind {.main.t Entry} (editbind.tcl)
                                    ^^^^^^^^^^^
##############################################################################                                    
  On applique au widget .main.t et à la CLASSE "Entry", les raccourcis clavier
  généraux correspondant à des fonctionnalités accessibles par les menus,
  voir "Le clavier" / "Les raccourcis généraux de l'éditeur"
  
############################################################################
1.9 - affichage de la version de l'éditeur dans la fenêtre d'information
############################################################################

  On utilise la commande te:short_msg  (stead)
                         ^^^^^^^^^^^^

###################################################################
1.10 - exécution de la procédure jedit:userhook, si elle existe
                                     ^^^^^^^^^^^^^^
###################################################################                                     
  Cette procédure est définie par l'utilisateur, s'il le souhaite dans son
  fichier $TE_USER_TERC_FILE, qui a été sourcé dans la procédure 
  jedit:userinit (voir plus haut).
  
  Tout ce qui a été défini auparavant lors du lancement de l'éditeur
  (raccourci clavier, menu, préférence, variable globale, procédure ...)
  pourra étre détruit ou modifié par cette procédure.
  Attention , on n'a pas encore accès à ce stade au nom du fichier édité ni 
  au mode courant.
  
  Pour le nom du fichier utiliser la procédure jedit:post_read_hook.
  Pout le mode, utiliser le fichier <nom-de-mode>-mode-user.tcl

############################################
1.11 - lecture éventuelle des options
############################################
  
  Le nom de l'exécutable de stead peut être suivi de "-mode <nom-de-mode>" 
  (AVANT LE NOM DU FICHIER), auquel cas, la variable globale MODE est affectée 
  du <nom-de-mode> lu. Sinon MODE est affectée de la valeur "default"
  
  autres options : -text et -command
  
  procedure exécutée :
  te:parse_args { {mode {} } {text {} } {command {} } }

  pour rajouter une option rajouter un élément dans la liste et l'exploiter.

########################################################
1.12 - lecture éventuelle du nom de fichier à éditer
########################################################

  exécution de la procédure jedit:guess_directory (stead) appliquée à
                            ^^^^^^^^^^^^^^^^^^^^^ 
  l'argument suivant (s'il existe) de la ligne de commande (normalement
  le nom du fichier). Elle renvoie le CHEMIN COMPLET du fichier, stocké dans
  la variable globale FILENAME.
  
############################################
1.13 - auto-sélection éventuelle du mode
############################################

  Si la variable MODE vaut encore "default" (pas de déclaration explicite du 
  mode), exécution de la procédure jedit:guess_mode (stead) appliquée au
                                   ^^^^^^^^^^^^^^^^
  nom du fichier $FILENAME.
  
  Cette procédure recherche automatiquement le mode auquel appartient le 
  fichier selon plusieurs critères :
  
  S'il existe une procédure (définie par l'utilisateur dans son fichier
  $TE_USER_TERC_FILE) te:mode:set_hook. Elle est exécutée et si son résultat est
  vrai (égal à 1), alors on considère que le mode est trouvé.
  
  Sinon, on compare successivement le nom du fichier avec le premier élément 
  de chaque liste élément de la liste $FILE_MODES. Si la comparaison réussit,
  le nom du mode est le deuxième élément de la liste.
  
  Sinon, on compare successivement la première ligne du fichier avec le premier
  élément de chaque liste élément de la liste $LINE_MODES. Si la comparaison 
  réussit, le nom du mode est le deuxième élément de la liste.
  
  Sinon, on considère que le fichier n'a pas de mode et la variable MODE est
  affectée à "plain".
  
###########################################################
1.14 - exécution de la procédure jedit:set_mode (stead)
                                     ^^^^^^^^^^^^^^
###########################################################                                     
  A ce niveau et quel que soit le nombre d'arguments de la ligne de commande
  la variable MODE est affectée soit à "plain" soit au nom du mode.
  jedit:set_mode va donc exécuter toutes les commandes tcl particulières au
  mode en question, qu'elle va trouver dans plusieurs fichiers.  Cette
  procédure est exécutée à chaque changement de mode (pas seulement au 
  lancement)
  
  i) Destruction des constructions du mode précédent
     ###############################################
     
  En premier lieu, si elle existe, la procédure jedit:mode_cleanup est
                                                ^^^^^^^^^^^^^^^^^^
  exécutée.  Elle est censée "nettoyer" tout ce qui a été instauré par
  le mode précédent. Remarquez qu'au lancement, il n'y a pas de mode 
  précédent, donc pas de procédure jedit:mode_cleanup.
  
  De même, on va détruire toutes les variables éventuellement créées par le 
  mode précédent :
  
    - liste de marques de navigation du mode précédent : éléments de 
    $MODE_MARK_LIST (créé par la procédure te:mode:set_struct (mode.tcl)
    - TE_MODE_SEARCH_STRING : chaine d'expression régulière pour les
    éléments de navigation (créée par l'utilisateur pour le mode précédent)
    - TE_MODE_NAVIG_SHOW_TEXT : nom des éléments de navigation (créée par 
    l'utilisateur pour le mode précédent)
    - TE_MODE_NAVIG_RESET_TEXT : nom du bouton de réinitialisation des
    éléments de navigation (créée par  l'utilisateur pour le mode précédent)
  
  Ces variables n'existent pas au lancement de stead.
    
  Exécution de la procédure te:mode:destroy:navig_window (stead)
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  Il s'agit de la destruction de la fenêtre .navig des éléments de navigation
  et de la variable globale te_mode_nb_buttons, contenant le nombre d'éléments
  de navigation contenus dans la fenêtre .navig initialisée par la
  procédure te:mode:create_navig_window (mode.tcl) et incrémentée par la
  procédure te:mode:add_button.
  Au lancement de stead, la fenêtre .navig et la variable te_mode_nb_buttons
  n'existent pas.
  
  
  Destructions des alias électriques : exécution de la procédure 
  electricAlias-removeall (electricalias.tcl)                          
  ^^^^^^^^^^^^^^^^^^^^^^^
  Au lancement, ils n'existent pas ...
  
  ATTENTION : la destruction à ce niveau des alias électrique interdit
  de placer leur définition dans le fichier TE_USER_TERC_FILE dont la procédure
  jedit:userhook est sourcée avant jedit:set_mode.
  
  Destruction de toutes les procédures "hook" éventuellement créées par le
  mode précédent. (Une procédure "hook" est une procédure utilisateur exécutée
  à un moment précis)
  Pour information, voici la liste des procédures hook et leur moment 
  d'exécution.
  
 |-------------------------|------------------|-------------------------------|
 |   NOM DE LA PROCEDURE   |MOMENT D'EXECUTION| EXECUTION DANS ...            |
 |-------------------------|------------------|-------------------------------|
 |jedit:pre_read_hook      | avant la lecture | jedit:read (stead)         |
 |jedit:mode_read_proc     | à la place de la |                               |
 |                         | lecture          |                               |
 |jedit:post_read_hook     | après la lecture |                               |
 |                         |                  |                               |
 |jedit:pre_write_hook     | avant l'écriture | jedit:write (file.tcl)        |
 |jedit:mode_write_proc    | à la place de    |                               |
 |                         | l'écriture       |                               |
 |jedit:post_write_hook    | après l'écriture |                               |
 |                         |                  |                               |
 |jedit:pre_quit_hook      | avant de quitter | jedit:cmd:quit (file.tcl)     |
 |                         |                  |                               |
 |jedit:pre_spacebar_hook  | avant l'insertion| jedit:spacebar                |
 |                         | d'un espace      | (special_keys.tcl)            |
 |jedit:mode_spacebar_proc | à la place ...   |                               | 
 |jedit:post_spacebar_hook | après ...        |                               |
 |                         |                  |                               |
 |jedit:pre_tabkey_hook    | avant l'insertion| jedit:spacebar                |
 |                         | d'une tabulation | (special_keys.tcl)            |
 |jedit:mode_tabkey_proc   | à la place ...   |                               |
 |jedit:post_tabkey_hook   | après ...        |                               |
 |                         |                  |                               |
 |jedit:pre_returnkey_hook | avant l'insertion| jedit:returnkey               |
 |                         | d'un \n          | (special_keys.tcl)            |
 |jedit:mode_returnkey_proc| à la place ...   |                               |
 |jedit:post_returnkey_hook| après ...        |                               |
 |                         |                  |                               |
 |jedit:pre_paste_hook     | avant un "coller"| te:cmd:paste_rect_sel         |
 |jedit:post_paste_hook    | après un "coller"| (rect_sel.tcl)                |
 |                         |                  |                               |
 |jedit:pre_xpaste_hook    |avant de dupliquer| te:cmd:xpaste_rect_sel        |
 |                         | la sélection     | (rect_sel.tcl)                | 
 |jedit:post_xpaste_hook   | après ...        |                               |
 |                         |                  |                               |
 |te:mode:rescan_hook      | avant le calcul  | te:mode:create_navig_window   |
 |                         | des éléments de  | (mode.tcl)                    |
 |                         | navigation      |                                |
 |                         | (bouton "Rescan")|                               |
 |                         |                  |                               |
 |te:mode:navig_label_hook | Pendant le calcul| te:mode:set_struct  (mode.tcl)|
 |                         | (Qu'est-ce qu'on |                               |
 |                         | affiche ?)       |                               |
 |                         |                  |                               |
 |te:mode:navig_sort_hook  | après le calcul  |                               |
 |                         | (dans quel ordre |                               |
 |                         | on trie ?)       |                               |
 |-------------------------|------------------|-------------------------------|
  
  Remarque :
  
  Les deux dernières procédures ne sont pas détruites. On change simplement 
  leur corps de telle sorte qu'elle renvoient comme résultat leur unique 
  argument sans en changer la valeur.
  Cela correspond à afficher comme élément de navigation la chaine trouvée
  pour te:mode:navig_label_hook et à afficher les éléments de navigation dans
  l'ordre qu'ils apparaissent pour te:mode:navig_sort_hook.
  
  
  
  ii) Rechargement des alias "généraux", non liés au mode
      ###################################################
  
  on définit les variables globales propres aux alias électriques
  (cette partie a été sortie du fichier electricAlias.tcl pour éviter de
  charger tout le fichier au lancement de stead)
  ALIAS(active) <- 1
  ALIAS(mode)   <- "tcl" (par défaut)
  ALIAS(modes)  <- {tcl,}
  
  Vu que les alias généraux on été détruits, avec les autres, il est nécéssaire
  de les recharger =>
  Chargement des alias électriques généraux $TE_USER_DIR/alias.tcl
  
  
  iii) exécution de la procédure electricAlias-mode (stead)
                                 ^^^^^^^^^^^^^^^^^^
       ################################################################
       
  à laquelle on passe l'argument $MODE.
  initialisation de variables privées au fichier "electricAlias.tcl"
  de David C. Black : ALIAS(mode) <--- $MODE et 
                      ALIAS(modes) est augmentée de $MODE si elle ne contenait
                      pas déja $MODE)
  ==> indique aux procédures d'electric alias qu'on est en mode $MODE
  (en cas de conflit entre electric alias de modes différents, c'est celui 
  correspondant au mode courant qui est utilisé)
  
  
  iiii) Chargement des procédures liées au mode
        #######################################
  
  CHARGEMENT DU FICHIER SYSTEME $MODE-mode.tcl :
  - dans le répertoire utilisateur $TE_USER_DIR s'il y est,
  - dans le répertoire système $TE_MODE_DIR sinon.
    
  CHARGEMENT DU FICHIER UTILISATEUR $MODE-mode-user.tcl dans le répertoire 
  utilisateur $TE_MODE_DIR, s'il y est.
  
  Le premier fichier est dit "fichier de mode système", le second est dit
  "fichier de mode utilisateur". Le second fichier peut supprimer ou
  modifier des procédures, variables et widgets créés par le premier.
  
  Que contient un fichier $MODE-mode.tcl (ou $MODE-mode-user.tcl) "type" ??
  -------------------------------------------------------------------------
    
  Il s'agit de la création des variables, procédures et widgets automatiquement
  détruits par la première partie de jedit:set_mode.
  
  Définition d'une chaine de recherche $TE_MODE_SEARCH_STRING des éléments de 
  navigation.(exemple les procédures et les fonctions pour le mode pascal)
  On peut définir aussi TE_MODE_NAVIG_SHOW_TEXT qui est le texte du bouton
  affichant la fenêtre qui contient les éléments de navigation ainsi que
  TE_MODE_NAVIG_RESET_TEXT qui est le texte du bouton permettant de
  reconstruire la lise des éléments de navigation.
  
  Outre ces trois variables, on peut définir les procédures "hook" définies
  ci dessus. (voir i)
  
  On peut aussi redéfinir les préférences utilisateur EDITPREFS(...)
  celles ci écrasant celles définies dans le TE_USERPREFS_FILE !!!
  
  On peut aussi créer un menu spécifique au mode par la commande
  te:mode:make_menu <nom> (stead). Cette procédure crée un bouton 
  ^^^^^^^^^^^^^^^^^
  de menu du nom de ".menu.<nom>" (menubutton) au texte "<nom>" avec la 
  première lettre en majuscule (utilisation de la procédure te:mode:toupper  
                                                            ^^^^^^^^^^^^^^^
  (stead).                                                          
  Elle lie ensuite ce bouton de menu au menu .menu.<nom>.m, auquel on
  peut dans la suite du fichier ajouter des commandes en écrivant :
  ".menu.<nom>.m add command ..."
  
  On peut créer autant de menus <nom> qu'on veut.
  
  Il est évidemment possible de créer des variables globales et/ou des 
  procédures supplémentaires, spécifiques au mode. L'exécution
  de ces procédures sera souvent liée au(x) menu(s) créé(s) ou à des raccourcis
  clavier supplémentaires.
  
  Enfin il est nécessaire de créer la procédure jedit:mode_cleanup qui sera
  exécutée lors du prochain changement de mode (au début de jedit_mode (stead).
  
  Cette procédure devra contenir la destruction de toutes les variables, 
  procédures et raccourcis supplémentaires crées par des "unset" pour les 
  variables, des "rename proc {}" pour les procédures et des restitutions des 
  anciens bindings pour les raccourcis. Evidemment, il n'est pas utile 
  d'appliquer cette règle aux variables et procédures automatiquement détruites/
  renommées au début de jedit:set_mode (stead).
  
  La destruction du ou des menu(s) créé(s) par  te:mode:make_menu peut se faire
  par la procédure te:mode:destroy_menu <nom> (stead)
                   ^^^^^^^^^^^^^^^^^^^^                
  Nous avons vu ce que pouvait contenir les fichiers <nom-de-mode>-mode.tcl et 
  <nom-de-mode>-mode-user.tcl. Continuons maintenant l'exécution de 
  jedit:set_mode (stead) afin de voir l'utilisation des variables spéciales 
  déclarées dans ces fichiers.
  
  iiiii) exécution de la procédure jedit:configure_text (stead)
                                   ^^^^^^^^^^^^^^^^^^^^
         ######################################################
    
  Nous avons vu que les fichiers <nom-de-mode>-mode.tcl pouvaient contenir la
  redéfinition de préférences utilisateur.  Il est donc nécessaire de 
  ré-exécuter à ce moment précis cette procédure pour réinitialiser le widget 
  texte.
  (voir exécution de la procédure jedit:set_mode (stead))
  
  iiiiii) exécution de la procédure te:mode:make_navig_menu (stead)
                                    ^^^^^^^^^^^^^^^^^^^^^^^
          ############################################################
          
                                    
  C'est à ce niveau que s'utilisent les variables spéciales éventuellement
  déclarées dans les fichiers de mode.
  Si la variable TE_MODE_SEARCH_STRING existe, on crée dans la barre de
  menu un bouton .menu.navig (button) dont la commande est 
  te:mode:set:navig_window <nom> (mode.tcl). et dont le texte est le contenu
  ------------------------
  de la chaine TE_MODE_NAVIG_SHOW_TEXT si elle existe, "navig" sinon.
  L'argument <nom> passé à te:mode:set:navig_window est aussi "navig" ou
  $TE_MODE_NAVIG_SHOW_TEXT.
 
  Cette procédure déclenchera par la suite le calcul des éléments de navigation
  et l'affichage de la fenêtre de navigation (mais ceci n'est en aucun cas
  effectué au lancement de l'éditeur)
   
 iiiiiii) exécution de la procédure te:mode:add_edit_commands (mode.tcl)
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^
          ##############################################################
   
  Cette procédure teste l'existence d'un menu portant le nom du mode
  (souventent créé par les fichiers de mode) et y ajoute des commandes
  d'édition des fichiers de modes utilisateur (<nom-de-mode>-mode.tcl et
  <nom-de-mode>-mode-user.tcl dans TE_USER_DIR) et de visualisation du
  fichier système <nom-de-mode>-mode.tcl dans TE_MODE_DIR.
  
*** L'exécution de jedit:set_mode est maintenant terminée.
S'il n'y a pas de nom de fichier qui suit la commande d'exécution, le lancement
est terminé.
S'il y a un ou plusieurs noms de fichier :  
  
#########################################################
1.15 - exécution de la commande jedit:read (stead)
                                    ^^^^^^^^^^
#########################################################

Cette procédure charge le fichier passé en argument et éventuellement un
fichier d'état si la préférence utilisateur EDITPREFS(savestate) est à 1.

En premier lieu, on exécute si elle existe la procédure jedit:pre_read_hook
                                                        ^^^^^^^^^^^^^^^^^^^
déclarée éventuellement dans les fichiers de mode.
Puis on exécute si elle existe la procédure jedit:mode_read_proc déclarée
                                            ^^^^^^^^^^^^^^^^^^^^     
aussi dans les fichiers de mode.
Si elle n'existe pas : 
- on remplit le texte .main.t du contenu du fichier.
- si EDITPREFS(savestate) vaut 1 on exécute jedit:read_state (stead)
                                            ^^^^^^^^^^^^^^^^  
 qui charge le fichier .state.<nom-du-fichier> situé dans le même répertoire 
 que le fichier, s'il existe.
 Ce fichier contient une liste de listes qui est stockée dans une variable 
 provisoire appelée "state".
 jedit:read_state appelle appelle ensuite la procédure 
 jedit:set_state .main.t $state (stead) qui à partir de la variable  
 ^^^^^^^^^^^^^^^
 state récupère :
 
 élément 1 : une liste de "tags" ou ensemble de caractères (exemple : 
             la sélection) Tout ces tags (nom+position) sont restitués au texte.
 élément 2 : une liste de marques ou position dans le texte (exemple : 
             le point d'insertion) . Toutes ces marques sont restituées.  
 élément 3 : l'état (sauvé "clean" ou non sauvé "dirty") du widget texte.
              la restauration  d'état est aussi utilisée lors de toute 
              annulation de commande (avant chaque commande annulable, on 
              mémorise non seulement le contenu du texte mais aussi les 
              marques, tags,...). ce qui explique que dans le cadre de
              l'annulation d'une commande, on soit amené à restaurer un état
              "dirty (non sauvé). Lors du lancement de l'éditeur, cet état
              est toujours "clean" (sauvé).
 élément 4 : la position de la scrollbar
 
 jedit:set_state exécute enfin la commande te:cmd:set_cursor (stead)
                                           ^^^^^^^^^^^^^^^^^
 Cette commande efface le curseur lorsqu'une sélection est présente dans le
 texte (en déclarant une largeur nulle au curseur). S'il n'y a pas de sélection
 on peut afficher le curseur en déclarant une largeur de $EDITPREFS(textiw) et
 dans ce cas la variable globale selection_last_place qui mémorisait l'endroit
 d'où étendre la sélection (avec Shift-flêches) est effacée ce qui signifie
 que la sélection sera étendue à partir du point d'insertion.
 te:cmd:set_cursor exécute enfin la commande te:cmd:show_position (stead)
                                             ^^^^^^^^^^^^^^^^^^^^
 qui affiche dans la fenêtre .main.status.xy la position du point d'insertion.   
 Suite de l'exécution de jedit:read :
 
 On exécute ensuite la procédure jedit:set_label (stead)
                                 ^^^^^^^^^^^^^^^                               
  
 Affiche le nom du fichier que cette fois-ci, on connait.
 (voir exécution de la procédure jedit:apply_prefs)  
  
 Enfin, si elle existe, la procédure jedit:post_read_hook, éventuellement
                                     ^^^^^^^^^^^^^^^^^^^^
 déclarée dans les fichiers de mode est exécutée.
 
 
FIN DE LA DESCRIPTION DU LANCEMENT DE STEAD (OUF !)                  

#############################################################
2 - Renseignements supplémentaires pour la maintenance
#############################################################


i) le tlcIndex
   ###########
   
Les scripts de stead sont situés dans le répertoire tclLib et regroupés dans
un ensemble de procédures situées dans un ensemble de fichiers.
Tous ces fichiers ne sont pas lus en bloc au lancement de stead. Un fichier 
n'est "sourcé" (lu) que lorsqu'on demande explicitement l'exécution
d'une procédure qu'il contient.
La liste des procédures et le fichier qui les contient doit pour cela être
communiquée à l'interpréteur wish.
Elle est construite par la commnade "auto_mkindex <nom_de_reperoire>" et
est stockée dans un fichier appelé tclIndex.

Au lancement de stead, les seuls fichiers sourcés sont :

telibrary.tcl 
tebindings.tcl 
editbind.tcl 
rect_sel_bind.tcl 
balancebind.tcl 
macrobind.tcl 
colors.tcl 
cursor.tcl
mode.tcl 
electricAlias.tcl

ii) Comment avoir des informations sur les procédures
    #################################################
    
Pour savoir où se trouve une procédure dans le répertoire tclLib, éditez le
fichier tclIndex dans ce répertoire (Cela fait partie du menu "admin"),
et rechercher la procédure. Le nom du fichier est à coté.

Autes informations :

info args <nom-de-proc> : 
  renvoie la liste des arguments de la procédure <nom-de-proc>
info body <nom-de-proc> : 
  renvoie le corps de la procédure <nom-de-proc>
info procs ?pattern? : 
  renvoie la listes des noms de procédures connues.  si pattern est spécifié 
  seules les procédures correspondantes sont renvoyées.
info default <nom-de-proc> <arg> <var> : 
  si l'argument <arg> de la procédure <nom-de-proc> possède une valeur par
  défaut, 1 est renvoyé et la valeur par défaut est placée dans <var>.
  renvoie 0 sinon.
  
Ces commandes peuvent être exécutées en utilisant le menu 
Extra/Issue Tcl Command <meta-Shift-T> ou :
Extra/Tcl Shell


iii) Comment avoir des informations sur les variables globales
     #########################################################
     
Voir la doc pour les préférences utilisateurs, stockées dans le tableau 
EDITPREFS.

Pour les autres variables, beaucoup sont déclarées dans jedit:init (stead).

Sinon, sous Unix, faire :
cd tclLib
grep <nom-de-la-variable> *.tcl
Pour obtenir le nom des fichiers qui font référence à cette variable.

On peut aussi exécuter les commandes tcl :

info exists <nom-de-var> : 
  renvoie 1 si la variable <nom-de-var> existe dans le contexte courant.
  (si on utilise Extra/Issue Tcl Command <meta-Shift-T> ou Extra/Tcl Shell, le
  contexte est global)
info global ?pattern? :
  renvoie la liste de toutes les variables globales. Si pattern est spécifié,
  renvoie seulement les variables globales correspondantes.
set <nom-de-variable> : 
  renvoie la valeur courante de la variable <nom-de-variable>
  
array names <nom-du-tableau> :
  renvoie le nom des éléments du tableau <nom-du-tableau>.  En effet,
  set <nom-d'un-tableau> ne donne rien, pour avoir la valeur il faut
  faire : set <nom-du-tableau>(<nom-de-l'élément>)
  

--------------------------------------------------------------------------
##################################
3 - Maintenance pour les menus
##################################

  Tous ces menus sont déclarés dans la procédure jedit:mkmenus (stead.tcl)
                                                 ^^^^^^^^^^^^^
  invoquée lors du lancement de stead. S'y reporter pour connaître les 
  procédures invoquées par tel ou tel menu.
  ATTENTION : l'option "-accelerator" ne fait qu'afficher le raccourci clavier
  correspondant au menu, ceux-ci n'étant définis que dans te:editbind 
  (editbind.tcl).                                         ^^^^^^^^^^^

###################################          
4 - Maintenance pour le clavier
###################################

  Les raccourcis généraux de l'éditeur sont déclarés dans la procédure
  te:editbind {widgets} (editbind.tcl). Ils sont appliqués à chacun des
  ^^^^^^^^^^^
  {widgets} passés. Elle est invoquée dans le script d'initialisation de stead
  (voir la fin du fichier stead).
  
  Les raccourcis de base du texte sont déclarés dans la procédure 
  te:tb:basic_bind {W} (editbind.tcl). Ils sont appliqués au texte $W.
  Les raccourcis emacs du texte sont déclarés dans la procédure 
  te:tb:emacs_bind {W} (editbind.tcl). Ils sont appliqués au texte $W.
  Les raccourcis de base du texte sont déclarés dans la procédure 
  te:eb:basic_bind {W} (editbind.tcl). Ils sont appliqués au texte $W.
  Les raccourcis emacs du texte sont déclarés dans la procédure 
  te:eb:emacs_bind {W} (editbind.tcl). Ils sont appliqués au texte $W.
  
  Ces 4 procédures sont exécutées au lancement de te par la procédure
  jedit:apply_prefs (stead).
  ^^^^^^^^^^^^^^^^^

##################################
5 - Maintenance pour la souris
##################################


  Les procédures correspondant aux actions sur la souris sur le texte sont
  déclarées dans te:tb:basic_bind {W} (editbind.tcl)
  
###########################################################################
 6 -Les Filtres
###########################################################################

  la procédure "te:pipe_rect_sel" permettant d'appliquer un filtre tcl (et par
  extension unix) à la selection même rectangulaire 
  (Fichier tclLib/rect_sel.tcl).

###########################################################################
7 - Les alias électriques
###########################################################################

  indentation dans les alias électriques
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  
  On utilise pour cela la fonctionnalité d'exécution d'une commnade à
  l'intérieur d'un alias électrique : $EA_8bit_begin<Commande>$EA_8bit_end
  
  Dans le fichier qui contient la définition des alias électriques 
  (~/.tk/stead/steadrc ou ~/.tk/stead/<nom-de-mode>-user.tcl
  ou STEAD/tclLib/jeditmodes/<nom-de-mode>-mode.tcl), on définit la commande 
  suivante qui renvoie l'inentation courante :
   
  proc i {} {
   global EDITPREFS
   return $EDITPREFS(indent_string)
  } 
  
  exemple d'electric alias :
  
  set M $EA_8bit_mark
  set B $EA_8bit_begin
  set E $EA_8bit_end

  
  set t1 "if ($M) $V{bb}\n${B}i${E}$M"
  set t2 "\n$V{eb}$V{bc}endif$V{ec}$M"
  electricAlias-def ${M}C if $t1$t2

###########################################################################
8 - La navigation modale
###########################################################################

   Comme on l'a vu dans le lancement de stead, le bouton .menu.navig est
   lié à la commnande te:mode:set:navig_window (mode.tcl).
                      ^^^^^^^^^^^^^^^^^^^^^^^^         
   Lorsqu'elle sera invoquée la PREMIERE FOIS par l'utilisateur,
   te:mode:set:navig_window fera appel à la procédure te:mode:set_struct <nom>
                                                      ------------------
   (mode.tcl) (où <nom> sera toujours $TE_MODE_NAVIG_SHOW_TEXT ou "navig") qui :
  
   - se chargera de créer la fenêtre .$TE_MODE_NAVIG_SHOW_TEXT (ou .navig) 
   par l'intermédiare de la procédure te:mode:create_navig_window (mode.tcl)
                                      ---------------------------
   cette fenêtre comportera un bouton "Done" qui permet de l'effacer et un 
   bouton "$TE_MODE_NAVIG_RESET_TEXT" qui permet de relancer le calcul
   (exécution de te:mode:rescan_hook puis de te:mode_set_struct). Ces
   boutons seront contenus dans la fenêtre .$TE_MODE_NAVIG_SHOW_TEXT.buttons.
   Elle comportera aussi un canvas .$TE_MODE_NAVIG_SHOW_TEXT.frame.canvas
   lié à une scrollbar .$TE_MODE_NAVIG_SHOW_TEXT.frame.scroll.
   Ce canvas serra rempli par la suite...
   
   
   - remplira le canvas 

###########################################################################
9 - Le menu Templates du mode latex
###########################################################################

   voir le fichier STEAD/tclLib/jeditmodes/latex-mode.tcl
   
   
  Une serie de procedure  renvoient la chaine d'ea. Ces procédures s'appelent
  toutes te:cmd:latex:<nom-du-template>.
  
  Un electric alias provisoire est cree lors de l'appel de la procédure
  te:cmd:mk_alias_string <nom-du-template> <inclure-selection?>. Cette 
  procédure est appelée lors de l'invocation du menu template.
  
  C'est les procedures te:cmd:latex:<nom-du-template> qui devront etre 
  utilisees lors de la creation d'electric alias utilisateur 
  (et non le procedure qui cree des EA provisoires) sinon, cela ferait double 
  emploi des EA) : voir la définition d'electric alias dans le meme fichier.

