###########################################################################
# 
# Cette doc est prime !
# 
###########################################################################

###########################################################################
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 rfrence  une procdure, le nom du fichier qui la contient
est  prcis entre parenthses.
De plus, les procdures soulignes par des "^" sont excutes alors que les
procdures soulignes par des "-" seront excutes en rponse  un vnement
ultrieur (click sur un menu ou clavier).
Conseil de lecture : suivez en mme temps les scripts tcl concerns, et vous
comprendrez tout !!!

###############################################################
1.1 - La premire procdure excute est jedit:init (stead)
                                             ^^^^^^^^^^
###############################################################


i) dtermination du nom du login et du rpertoire de travail
   #########################################################
   
STEAD dtermine le nom de login de l'utilisateur et son rpertoire
de travail.
Le lancement fonctionne mme si variables d'environnemnt USER ou HOME ne
sont pas dfinies. 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 affectes -------> HOME et USER. 

ii) dtermination des rpertoires systme
    #####################################
    
 On calcule le nom de l'excutable 
 TE_EXE <---- $argv0
 On calcule alors le rpertoire ou se trouve l'excutable stead en
 remontant ventuellement les liens de argv0 
 TE_DIR <---- rpertoire de argv0 
 Rpertoire des librairies 
 TE_LIB_DIR <----- $TE_LIB/tclLib
 Rpertoire des fichiers modes systme 
 TE_MODE_DIR <---- $TE_DIR/tclLib/jeditmodes
 Rpertoire des fichiers d'exemples de scripts
 TE_SAMPLE_DIR <-- $TE_DIR/examples

iii) dtermination des rpertoires utilisateur 
     #########################################
       
 rpertoire utilisateur
 TE_USER_DIR <------- $HOME/.tk/stead
 rpertoire des prfrences utilisateur
 TE_USER_PREFS_DIR <-- $HOME/.tk/stead 
 fichier de configuration utilisateur (path complet)
 TE_USER_TERC_FILE <--  $TE_USER_DIR/steadrc
 fichier de prfrences utilisateur (path complet)
 TE_USER_TEPREFS_FILE <-- $TE_USER_DIR/stead-prefs
 rpertoire d'abrviations statiques
 TE_ABBREV_DIR <----- $TE_USER_DIR
 
iiii) initialisation des variables globales gnrales suivantes
      #########################################################
      
 - index dans la chaine d'annulation 
 UNDOPTR  <---- 0 
 
       procdures 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)
 
      procdures 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 crer un mode
                 
       procdures jedit:init                    fichier stead
                  jedit:mkmain
                  
 - liste des modes en fonction du fichier
 FILE_MODES : sous la forme <extension du fichier> <mode> <description perso>
 
       procdures jedit:init                    fichier stead
                  jedit:guess_mode
                  
 - liste des modes en fonction de la premire ligne du mode
 LINE_MODES : sous la forme <expression de style "glob"> <mode> 
              <description prive>
       
       procdures jedit:init                    fichier stead
                  jedit:guess_mode

 Remarque : la description prive n'est jamais utilise dans le programme.
 
 - nombre d'espaces contenus dans une tabulation 
 TAB_SPACES <--- 8
 
       procdures jedit:init                    fichier stead
                  te:rep_tab_with_spaces        fichier prefix.tcl
                  
 buffer pour le copier couper coller
 - CUTBUFFER <--- {} 
 procdures 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 slection
 - OLD_SELECTION <--  {}
 procdures 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
            
  - boolen indiquant si la slection sauvegarde dans le buffer de duplication
  est rectangulaire
  IS_BUFFER_RECTANGULAR(old_sel) <--- 0
  procdures jedit:init                  (stead)
             te:rect_sel                 (rect_sel.tcl)
             te:cmd:xpaste_rect_sel
             te:pipe_rect_sel
             
  - booleen indiquant si la slection sauvegarde dans le buffer de couper/...
  est rectangulaire
  IS_BUFFER_RECTANGULAR(cut_buf) <--- 0
  procdures jedit:init                  (stead)
             te:rect_sel                 (rect_sel.tcl)
             te:cmd:paste_rect_sel
                              
  - dernire abrviation tendue (abrviations dynamiques)
  ABBREV <---- {}
  dbut de la dernire abrviation dynamique
  ABBREV_POS <--- {}  
  position du dernier "match" trouv
  MATCH < ---- {}
  position du dernier "match" trouv
  MATCH_POS <---- {}
  procdures 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   <--- 

  procdure 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          
   procdures jedit:init           (stead)
              te:set_default_prefs 
              
   TABLEAU POUR LES RACCOURCIS CLAVIERS ET SOURIS
   (TE_TextEntry_Bindings)
   
   TE_TEB  <--- voir fichier
   procdures    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 deuxime procdure excute est jedit:userinit (stead)
                                             ^^^^^^^^^^^^^^
###################################################################

i) initialisation des prfrences utilisateur
   ##########################################
   
   - excution de la procdure jedit:init_prefs (stead)
                               ^^^^^^^^^^^^^^^^
     qui  appelle la procdure te:set_default_prefs (stead).
                               ^^^^^^^^^^^^^^^^^^^^
     cette procdure donne aux prfrences utilisateurs (tableau EDITPREFS)
     les valeurs par dfaut contenues dans le tableau EDITPREFS_DEF.     
                              
 ii) - on excute le SCRIPT UTILISATEUR contenu dans le fichier
  $TE_USER_TERC_FILE (variable dclare dans jedit:init (stead)).
   Il peut contenir des commandes Tcl excutes  ce moment prcis et une 
   procdure jedit_user_hook excute plus tard.
   Il contient aussi les prfrences utilisateurs sous la forme :
   set EDITPREFS(<prfrence>) {<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 dlimites par les chanes de commentaires :
   # PREFERENCES UTILISATEUR
   et :
   # FIN DES PREFERENCES UTILISATEUR
   Entre ces deux chanes, toute commande autre qu'une du style 
   "set EDITPREFS(...) " pourra tre crase.
   
   Le fichier est charg par la procdure te:source_config (stead)
                                          ^^^^^^^^^^^^^^^^
 iii) - L'utilisation de certaines prfrences doit se faire maintenant :
 on modifie la variable globale tk_strictMotif pour qu'elle corresponde
  $EDITPREFS(tk_strictMotif) et on impose aux champs d'entre (Entry) d'avoir
 la mme fonte que le texte ($EDITPREFS(textfont)).
 
 
######################################################### 
1.3 - excution de la procdure jedit:mkmenus (stead)
                                    ^^^^^^^^^^^^^
#########################################################

  Il s'agit de la cration des menus de stead.
  Dans l'ordre on cre 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 attachs  leurs boutons 
    de menu respectifs.
  
  On cre ensuite les commandes de menu par une srie de commandes du style
  ".menu.file.m add command ....". On se reportera  la documentation sur
  les menus pour une description dtailles des commandes Tcl invoques par
  l'utilisateur en actionnant ces menus.  
    
  Les menus file, edit, search, format, config, extra sont disposs 
  (par la commande pack)  gauche de la barre de de menu .menu (situe quand
   elle tout en haut de la fentre principale "."). Le menu help est dispos 
  droite de la barre de menu ".menu".

########################################################
1.4 - excution de la procdure jedit:mkmain (stead)
                                    ^^^^^^^^^^^^
########################################################
                                    
  Il s'agit de la cration du widget texte et des autres widgets de la
  fentre qui lui sont associs . 
  Aprs le nom du widget, le nom de la commande Tk qui le cre est ici entre
  parenthses.
  
  Liste des widgets :
  
  La sous-fentre principale (frame) .main (occupant l'espace laiss libre 
  par .menu)

  La fentre d'information (frame) .main.alert (une ligne en haut de .main)
  contenant un champ d'entre .main.alert.label (entry) o apparaissent les
  messages d'information. Un widget  "entry" a t choisi plutt qu'un 
  "label" pour permettre de slectionner les rsultats d'information. 
  Le champ d'entre est toutefois dsactiv (disable) pour empcher 
  l'utilisateur de modifier son contenu. 
  Remarque : la procdure qui affiche dans la fentre 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 dfilement .main.s (scrollbar) place
   gauche ou  droite du texte suivant la prfrence $EDITPREFS(scrollbarside)
  Le texte n'est pas configur pour l'instant (ou plutt, il est configur avec
  les valeurs par dfaut de Tk).

  La fentre 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'entre (entry) .main.status.name contenant "No File Yet." mais
  destin  contenir ultrieurement le nom du fichier dit. L'entry a t 
  choisi pour les mmes raisons que pour .main.alert.label et est aussi
  dsactiv.
 
  - un indicateur de sauvegarde du fichier (rouge si le fichier n'est pas 
  sauv) cr par la procdure te:tb:mk_save_label (stead).
                               ^^^^^^^^^^^^^^^^^^^
        
  Cette procdure cre un "checkbutton" dont la valeur est lie  la variable
  j_teb(modified,.main.t) indiquant si le texte est modifi. Elle est mise
   vrai (1) par la procdure te:tb:mark_dirty (tebindings.tcl) invoque par
                              ----------------
  la plupart des procdures qui modifient le texte. Elle est mise  faux (0)
  par la procdure te:tb:mark_clean (stead) invoque lorsqu'on
                   ----------------
  sauvegarde le fichier. Au stade o on en est, la variable est initialise  0.
  Le nom du checkbutton, pass en argument de la procdure 
  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 
  rduit au nom simple. La commande effectuant cette opration 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 
  coordonnes du point d'insertion. La commande lie 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 procdure affichant les coordonnes dans le bouton 
  s'appelle te:cmd:show_position (stead).
    
   
  Le focus est ensyuite mis sur le texte (commande focus)
  
  La procdure tk_bindForTraversal (fichier menu.tcl de la librairie tk) 
               ^^^^^^^^^^^^^^^^^^^
  qui effectue les binding suivants, est excute :
  bind .main.t <Key-F10>  {tk_firstMenu %W}
  bind .main.t <Any-Mod2-Key>  {tk_traverseToMenu %W %A}
  
########################################################
1.5 - excution de te:tb:mark_clean (stead)
                   ^^^^^^^^^^^^^^^^
########################################################
                       
  Cette procdure dclare "propre" le texte : 
  mise  1 de la variable globale j_teb(modified,.main.t)
  (enlve ventuellement le ! du titre mais pas au lancement de stead
   videmment)
  
#############################################################
1.6 - excution de la procdure jedit:apply_prefs (stead)
                                    ^^^^^^^^^^^^^^^^^
#############################################################

   i) Lecture des raccouris clavier du texte et des entres
      #####################################################
         
   Suivant la valeur de EDITPREFS(bindings) :
   basic => 
   excution de te:eb:basic_bind Entry (editbind.tcl)
                ^^^^^^^^^^^^^^^^            
   dfinit les bindings (de base) pour les widget de type "Entry" : voir
   "Le clavier/Les raccourcis concernant exclusivement les champs d'entre".
   excution de te:tb:basic_bind .main.t (editbind.tcl) dfinit les bindings 
                ^^^^^^^^^^^^^^^^
   de base pour le widget texte .main.t. : voir "Le clavier" /
   "Les raccourcis concernant exclusivement le texte".
   
   emacs =>
   excution de te:eb:emacs_bind Entry (editbind.tcl)
                ^^^^^^^^^^^^^^^^            
   dfinit les bindings emacs pour les widget de type "Entry" : voir
   "Le clavier/Les raccourcis concernant exclusivement les champs d'entre".
   excution de te:tb:emacs_bind .main.t (editbind.tcl) dfinit les bindings 
                ^^^^^^^^^^^^^^^^
   emacs pour le widget texte .main.t. : voir "Le clavier" /
   "Les raccourcis concernant exclusivement le texte".
   
   Remarque:  la procdure te:eb:emacs_bind fait d'abord appel  la
   procdure te:eb:basic_bind. De mme 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) excution de la procdure jedit:set_label (stead)
                                 ^^^^^^^^^^^^^^^
       #################################################
                                     
   affiche le nom de l'interprteur (variable globale ME) suivi du nom du 
   fichier dit (variable globale FILENAME non encore initalise  ce stade)
   comme titre de la fentre principale (wm title .) et comme nom d'icne
   (wm iconname .).
   
   Affiche le nom du fichier (FILENAME chane vide pour l'instant) dans
   la fentre d'tat .main.status.name.
   
   iii) excution de la procdure te:set_colors (stead) 
                                  ^^^^^^^^^^^^^
        ####################################################

    qui possde deux fonctionnalits :
      - provoquer la rinitialisation des couleurs de tous les widgets de 
      l'application crs autres que le widget texte en prenant les valeurs
      dans le tableau EDITPREFS. (commande Tk : <widget> configure)
      - dclarer les couleurs dfinies dans le tableau EDITPREFS
      comme couleurs des widgets crs ultrieurement. (commande Tk Option add)
      Au stade o nous en sommes, aucun widget n'a t cr. Seule la deuxime
      opration est donc effectue. 

    Les couleurs concernes 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 activs  <-- $EDITPREFS(otherabg)
    (lorsque la souris est dessus par exemple)
    couleur de fond des widgets "scrollbar" <-- idem
    couleur de fond des widgets "scale" <--- idem 
   
   iiii) excution de la procdure jedit:configure_text (stead)
                                   ^^^^^^^^^^^^^^^^^^^^
         ######################################################
         
   Il s'agit d'initialiser le texte .main.t par la commande .main.t configure
   en tenant compte des prfrences utilisateur suivantes :
  
     |---------------------|---------------------------------------| 
     |Prfrence           |   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 procdure te:configure_font (stead) est excute
                         ^^^^^^^^^^^^^^^^^
    STEAD essaie d'appliquer la fonte dfinie par $EDITPREFS(textfont) au
    widget .main.t. Si elle est incorrecte, la fonte par dfaut
    -*-lucidatypewriter-medium-r-normal-*-12-*-*-*-*-*-iso8859-* est applique.
    
################################################################    
1.7 - excution de la procdure jedit:configure_undo (stead)
                                    ^^^^^^^^^^^^^^^^^^^^
################################################################

  Suivant la prfrence utilisateur $EDITPREFS(undoable) qui dfinit la 
  possibilit d'annuler des commandes, on inhibe ou pas les commnades
  "Undo", "Redo" et "checkpoint" du menu .menu.edit.m.
  
##############################################################################
1.8 - excution de la procdure te:editbind {.main.t Entry} (editbind.tcl)
                                    ^^^^^^^^^^^
##############################################################################                                    
  On applique au widget .main.t et  la CLASSE "Entry", les raccourcis clavier
  gnraux correspondant  des fonctionnalits accessibles par les menus,
  voir "Le clavier" / "Les raccourcis gnraux de l'diteur"
  
############################################################################
1.9 - affichage de la version de l'diteur dans la fentre d'information
############################################################################

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

###################################################################
1.10 - excution de la procdure jedit:userhook, si elle existe
                                     ^^^^^^^^^^^^^^
###################################################################                                     
  Cette procdure est dfinie par l'utilisateur, s'il le souhaite dans son
  fichier $TE_USER_TERC_FILE, qui a t sourc dans la procdure 
  jedit:userinit (voir plus haut).
  
  Tout ce qui a t dfini auparavant lors du lancement de l'diteur
  (raccourci clavier, menu, prfrence, variable globale, procdure ...)
  pourra tre dtruit ou modifi par cette procdure.
  Attention , on n'a pas encore accs  ce stade au nom du fichier dit ni 
  au mode courant.
  
  Pour le nom du fichier utiliser la procdure 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'excutable de stead peut tre suivi de "-mode <nom-de-mode>" 
  (AVANT LE NOM DU FICHIER), auquel cas, la variable globale MODE est affecte 
  du <nom-de-mode> lu. Sinon MODE est affecte de la valeur "default"
  
  autres options : -text et -command
  
  procedure excute :
  te:parse_args { {mode {} } {text {} } {command {} } }

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

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

  excution de la procdure jedit:guess_directory (stead) applique 
                            ^^^^^^^^^^^^^^^^^^^^^ 
  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-slection ventuelle du mode
############################################

  Si la variable MODE vaut encore "default" (pas de dclaration explicite du 
  mode), excution de la procdure jedit:guess_mode (stead) applique au
                                   ^^^^^^^^^^^^^^^^
  nom du fichier $FILENAME.
  
  Cette procdure recherche automatiquement le mode auquel appartient le 
  fichier selon plusieurs critres :
  
  S'il existe une procdure (dfinie par l'utilisateur dans son fichier
  $TE_USER_TERC_FILE) te:mode:set_hook. Elle est excute et si son rsultat est
  vrai (gal  1), alors on considre que le mode est trouv.
  
  Sinon, on compare successivement le nom du fichier avec le premier lment 
  de chaque liste lment de la liste $FILE_MODES. Si la comparaison russit,
  le nom du mode est le deuxime lment de la liste.
  
  Sinon, on compare successivement la premire ligne du fichier avec le premier
  lment de chaque liste lment de la liste $LINE_MODES. Si la comparaison 
  russit, le nom du mode est le deuxime lment de la liste.
  
  Sinon, on considre que le fichier n'a pas de mode et la variable MODE est
  affecte  "plain".
  
###########################################################
1.14 - excution de la procdure jedit:set_mode (stead)
                                     ^^^^^^^^^^^^^^
###########################################################                                     
  A ce niveau et quel que soit le nombre d'arguments de la ligne de commande
  la variable MODE est affecte soit  "plain" soit au nom du mode.
  jedit:set_mode va donc excuter toutes les commandes tcl particulires au
  mode en question, qu'elle va trouver dans plusieurs fichiers.  Cette
  procdure est excute  chaque changement de mode (pas seulement au 
  lancement)
  
  i) Destruction des constructions du mode prcdent
     ###############################################
     
  En premier lieu, si elle existe, la procdure jedit:mode_cleanup est
                                                ^^^^^^^^^^^^^^^^^^
  excute.  Elle est cense "nettoyer" tout ce qui a t instaur par
  le mode prcdent. Remarquez qu'au lancement, il n'y a pas de mode 
  prcdent, donc pas de procdure jedit:mode_cleanup.
  
  De mme, on va dtruire toutes les variables ventuellement cres par le 
  mode prcdent :
  
    - liste de marques de navigation du mode prcdent : lments de 
    $MODE_MARK_LIST (cr par la procdure te:mode:set_struct (mode.tcl)
    - TE_MODE_SEARCH_STRING : chaine d'expression rgulire pour les
    lments de navigation (cre par l'utilisateur pour le mode prcdent)
    - TE_MODE_NAVIG_SHOW_TEXT : nom des lments de navigation (cre par 
    l'utilisateur pour le mode prcdent)
    - TE_MODE_NAVIG_RESET_TEXT : nom du bouton de rinitialisation des
    lments de navigation (cre par  l'utilisateur pour le mode prcdent)
  
  Ces variables n'existent pas au lancement de stead.
    
  Excution de la procdure te:mode:destroy:navig_window (stead)
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  Il s'agit de la destruction de la fentre .navig des lments de navigation
  et de la variable globale te_mode_nb_buttons, contenant le nombre d'lments
  de navigation contenus dans la fentre .navig initialise par la
  procdure te:mode:create_navig_window (mode.tcl) et incrmente par la
  procdure te:mode:add_button.
  Au lancement de stead, la fentre .navig et la variable te_mode_nb_buttons
  n'existent pas.
  
  
  Destructions des alias lectriques : excution de la procdure 
  electricAlias-removeall (electricalias.tcl)                          
  ^^^^^^^^^^^^^^^^^^^^^^^
  Au lancement, ils n'existent pas ...
  
  ATTENTION : la destruction  ce niveau des alias lectrique interdit
  de placer leur dfinition dans le fichier TE_USER_TERC_FILE dont la procdure
  jedit:userhook est source avant jedit:set_mode.
  
  Destruction de toutes les procdures "hook" ventuellement cres par le
  mode prcdent. (Une procdure "hook" est une procdure utilisateur excute
   un moment prcis)
  Pour information, voici la liste des procdures hook et leur moment 
  d'excution.
  
 |-------------------------|------------------|-------------------------------|
 |   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     | aprs 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    | aprs 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 | aprs ...        |                               |
 |                         |                  |                               |
 |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   | aprs ...        |                               |
 |                         |                  |                               |
 |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| aprs ...        |                               |
 |                         |                  |                               |
 |jedit:pre_paste_hook     | avant un "coller"| te:cmd:paste_rect_sel         |
 |jedit:post_paste_hook    | aprs un "coller"| (rect_sel.tcl)                |
 |                         |                  |                               |
 |jedit:pre_xpaste_hook    |avant de dupliquer| te:cmd:xpaste_rect_sel        |
 |                         | la slection     | (rect_sel.tcl)                | 
 |jedit:post_xpaste_hook   | aprs ...        |                               |
 |                         |                  |                               |
 |te:mode:rescan_hook      | avant le calcul  | te:mode:create_navig_window   |
 |                         | des lments 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  | aprs le calcul  |                               |
 |                         | (dans quel ordre |                               |
 |                         | on trie ?)       |                               |
 |-------------------------|------------------|-------------------------------|
  
  Remarque :
  
  Les deux dernires procdures ne sont pas dtruites. On change simplement 
  leur corps de telle sorte qu'elle renvoient comme rsultat leur unique 
  argument sans en changer la valeur.
  Cela correspond  afficher comme lment de navigation la chaine trouve
  pour te:mode:navig_label_hook et  afficher les lments de navigation dans
  l'ordre qu'ils apparaissent pour te:mode:navig_sort_hook.
  
  
  
  ii) Rechargement des alias "gnraux", non lis au mode
      ###################################################
  
  on dfinit 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 dfaut)
  ALIAS(modes)  <- {tcl,}
  
  Vu que les alias gnraux on t dtruits, avec les autres, il est ncssaire
  de les recharger =>
  Chargement des alias lectriques gnraux $TE_USER_DIR/alias.tcl
  
  
  iii) excution de la procdure electricAlias-mode (stead)
                                 ^^^^^^^^^^^^^^^^^^
       ################################################################
       
   laquelle on passe l'argument $MODE.
  initialisation de variables prives au fichier "electricAlias.tcl"
  de David C. Black : ALIAS(mode) <--- $MODE et 
                      ALIAS(modes) est augmente de $MODE si elle ne contenait
                      pas dja $MODE)
  ==> indique aux procdures d'electric alias qu'on est en mode $MODE
  (en cas de conflit entre electric alias de modes diffrents, c'est celui 
  correspondant au mode courant qui est utilis)
  
  
  iiii) Chargement des procdures lies au mode
        #######################################
  
  CHARGEMENT DU FICHIER SYSTEME $MODE-mode.tcl :
  - dans le rpertoire utilisateur $TE_USER_DIR s'il y est,
  - dans le rpertoire systme $TE_MODE_DIR sinon.
    
  CHARGEMENT DU FICHIER UTILISATEUR $MODE-mode-user.tcl dans le rpertoire 
  utilisateur $TE_MODE_DIR, s'il y est.
  
  Le premier fichier est dit "fichier de mode systme", le second est dit
  "fichier de mode utilisateur". Le second fichier peut supprimer ou
  modifier des procdures, variables et widgets crs par le premier.
  
  Que contient un fichier $MODE-mode.tcl (ou $MODE-mode-user.tcl) "type" ??
  -------------------------------------------------------------------------
    
  Il s'agit de la cration des variables, procdures et widgets automatiquement
  dtruits par la premire partie de jedit:set_mode.
  
  Dfinition d'une chaine de recherche $TE_MODE_SEARCH_STRING des lments de 
  navigation.(exemple les procdures et les fonctions pour le mode pascal)
  On peut dfinir aussi TE_MODE_NAVIG_SHOW_TEXT qui est le texte du bouton
  affichant la fentre qui contient les lments de navigation ainsi que
  TE_MODE_NAVIG_RESET_TEXT qui est le texte du bouton permettant de
  reconstruire la lise des lments de navigation.
  
  Outre ces trois variables, on peut dfinir les procdures "hook" dfinies
  ci dessus. (voir i)
  
  On peut aussi redfinir les prfrences utilisateur EDITPREFS(...)
  celles ci crasant celles dfinies dans le TE_USERPREFS_FILE !!!
  
  On peut aussi crer un menu spcifique au mode par la commande
  te:mode:make_menu <nom> (stead). Cette procdure cre un bouton 
  ^^^^^^^^^^^^^^^^^
  de menu du nom de ".menu.<nom>" (menubutton) au texte "<nom>" avec la 
  premire lettre en majuscule (utilisation de la procdure 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 crer autant de menus <nom> qu'on veut.
  
  Il est videmment possible de crer des variables globales et/ou des 
  procdures supplmentaires, spcifiques au mode. L'excution
  de ces procdures sera souvent lie au(x) menu(s) cr(s) ou  des raccourcis
  clavier supplmentaires.
  
  Enfin il est ncessaire de crer la procdure jedit:mode_cleanup qui sera
  excute lors du prochain changement de mode (au dbut de jedit_mode (stead).
  
  Cette procdure devra contenir la destruction de toutes les variables, 
  procdures et raccourcis supplmentaires cres par des "unset" pour les 
  variables, des "rename proc {}" pour les procdures et des restitutions des 
  anciens bindings pour les raccourcis. Evidemment, il n'est pas utile 
  d'appliquer cette rgle aux variables et procdures automatiquement dtruites/
  renommes au dbut de jedit:set_mode (stead).
  
  La destruction du ou des menu(s) cr(s) par  te:mode:make_menu peut se faire
  par la procdure 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'excution de 
  jedit:set_mode (stead) afin de voir l'utilisation des variables spciales 
  dclares dans ces fichiers.
  
  iiiii) excution de la procdure jedit:configure_text (stead)
                                   ^^^^^^^^^^^^^^^^^^^^
         ######################################################
    
  Nous avons vu que les fichiers <nom-de-mode>-mode.tcl pouvaient contenir la
  redfinition de prfrences utilisateur.  Il est donc ncessaire de 
  r-excuter  ce moment prcis cette procdure pour rinitialiser le widget 
  texte.
  (voir excution de la procdure jedit:set_mode (stead))
  
  iiiiii) excution de la procdure te:mode:make_navig_menu (stead)
                                    ^^^^^^^^^^^^^^^^^^^^^^^
          ############################################################
          
                                    
  C'est  ce niveau que s'utilisent les variables spciales ventuellement
  dclares dans les fichiers de mode.
  Si la variable TE_MODE_SEARCH_STRING existe, on cre 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 procdure dclenchera par la suite le calcul des lments de navigation
  et l'affichage de la fentre de navigation (mais ceci n'est en aucun cas
  effectu au lancement de l'diteur)
   
 iiiiiii) excution de la procdure te:mode:add_edit_commands (mode.tcl)
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^
          ##############################################################
   
  Cette procdure 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 systme <nom-de-mode>-mode.tcl dans TE_MODE_DIR.
  
*** L'excution de jedit:set_mode est maintenant termine.
S'il n'y a pas de nom de fichier qui suit la commande d'excution, le lancement
est termin.
S'il y a un ou plusieurs noms de fichier :  
  
#########################################################
1.15 - excution de la commande jedit:read (stead)
                                    ^^^^^^^^^^
#########################################################

Cette procdure charge le fichier pass en argument et ventuellement un
fichier d'tat si la prfrence utilisateur EDITPREFS(savestate) est  1.

En premier lieu, on excute si elle existe la procdure jedit:pre_read_hook
                                                        ^^^^^^^^^^^^^^^^^^^
dclare ventuellement dans les fichiers de mode.
Puis on excute si elle existe la procdure jedit:mode_read_proc dclare
                                            ^^^^^^^^^^^^^^^^^^^^     
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 excute jedit:read_state (stead)
                                            ^^^^^^^^^^^^^^^^  
 qui charge le fichier .state.<nom-du-fichier> situ dans le mme rpertoire 
 que le fichier, s'il existe.
 Ce fichier contient une liste de listes qui est stocke dans une variable 
 provisoire appele "state".
 jedit:read_state appelle appelle ensuite la procdure 
 jedit:set_state .main.t $state (stead) qui  partir de la variable  
 ^^^^^^^^^^^^^^^
 state rcupre :
 
 lment 1 : une liste de "tags" ou ensemble de caractres (exemple : 
             la slection) Tout ces tags (nom+position) sont restitus au texte.
 lment 2 : une liste de marques ou position dans le texte (exemple : 
             le point d'insertion) . Toutes ces marques sont restitues.  
 lment 3 : l'tat (sauv "clean" ou non sauv "dirty") du widget texte.
              la restauration  d'tat est aussi utilise lors de toute 
              annulation de commande (avant chaque commande annulable, on 
              mmorise 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).
 lment 4 : la position de la scrollbar
 
 jedit:set_state excute enfin la commande te:cmd:set_cursor (stead)
                                           ^^^^^^^^^^^^^^^^^
 Cette commande efface le curseur lorsqu'une slection est prsente dans le
 texte (en dclarant une largeur nulle au curseur). S'il n'y a pas de slection
 on peut afficher le curseur en dclarant une largeur de $EDITPREFS(textiw) et
 dans ce cas la variable globale selection_last_place qui mmorisait l'endroit
 d'o tendre la slection (avec Shift-flches) est efface ce qui signifie
 que la slection sera tendue  partir du point d'insertion.
 te:cmd:set_cursor excute enfin la commande te:cmd:show_position (stead)
                                             ^^^^^^^^^^^^^^^^^^^^
 qui affiche dans la fentre .main.status.xy la position du point d'insertion.   
 Suite de l'excution de jedit:read :
 
 On excute ensuite la procdure jedit:set_label (stead)
                                 ^^^^^^^^^^^^^^^                               
  
 Affiche le nom du fichier que cette fois-ci, on connait.
 (voir excution de la procdure jedit:apply_prefs)  
  
 Enfin, si elle existe, la procdure jedit:post_read_hook, ventuellement
                                     ^^^^^^^^^^^^^^^^^^^^
 dclare dans les fichiers de mode est excute.
 
 
FIN DE LA DESCRIPTION DU LANCEMENT DE STEAD (OUF !)                  

#############################################################
2 - Renseignements supplmentaires pour la maintenance
#############################################################


i) le tlcIndex
   ###########
   
Les scripts de stead sont situs dans le rpertoire tclLib et regroups dans
un ensemble de procdures situes 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'excution
d'une procdure qu'il contient.
La liste des procdures et le fichier qui les contient doit pour cela tre
communique  l'interprteur wish.
Elle est construite par la commnade "auto_mkindex <nom_de_reperoire>" et
est stocke dans un fichier appel tclIndex.

Au lancement de stead, les seuls fichiers sourcs 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 procdures
    #################################################
    
Pour savoir o se trouve une procdure dans le rpertoire tclLib, ditez le
fichier tclIndex dans ce rpertoire (Cela fait partie du menu "admin"),
et rechercher la procdure. Le nom du fichier est  cot.

Autes informations :

info args <nom-de-proc> : 
  renvoie la liste des arguments de la procdure <nom-de-proc>
info body <nom-de-proc> : 
  renvoie le corps de la procdure <nom-de-proc>
info procs ?pattern? : 
  renvoie la listes des noms de procdures connues.  si pattern est spcifi 
  seules les procdures correspondantes sont renvoyes.
info default <nom-de-proc> <arg> <var> : 
  si l'argument <arg> de la procdure <nom-de-proc> possde une valeur par
  dfaut, 1 est renvoy et la valeur par dfaut est place dans <var>.
  renvoie 0 sinon.
  
Ces commandes peuvent tre excutes 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 prfrences utilisateurs, stockes dans le tableau 
EDITPREFS.

Pour les autres variables, beaucoup sont dclares dans jedit:init (stead).

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

On peut aussi excuter 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 spcifi,
  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 lments 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'lment>)
  

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

  Tous ces menus sont dclars dans la procdure jedit:mkmenus (stead.tcl)
                                                 ^^^^^^^^^^^^^
  invoque lors du lancement de stead. S'y reporter pour connatre les 
  procdures invoques par tel ou tel menu.
  ATTENTION : l'option "-accelerator" ne fait qu'afficher le raccourci clavier
  correspondant au menu, ceux-ci n'tant dfinis que dans te:editbind 
  (editbind.tcl).                                         ^^^^^^^^^^^

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

  Les raccourcis gnraux de l'diteur sont dclars dans la procdure
  te:editbind {widgets} (editbind.tcl). Ils sont appliqus  chacun des
  ^^^^^^^^^^^
  {widgets} passs. Elle est invoque dans le script d'initialisation de stead
  (voir la fin du fichier stead).
  
  Les raccourcis de base du texte sont dclars dans la procdure 
  te:tb:basic_bind {W} (editbind.tcl). Ils sont appliqus au texte $W.
  Les raccourcis emacs du texte sont dclars dans la procdure 
  te:tb:emacs_bind {W} (editbind.tcl). Ils sont appliqus au texte $W.
  Les raccourcis de base du texte sont dclars dans la procdure 
  te:eb:basic_bind {W} (editbind.tcl). Ils sont appliqus au texte $W.
  Les raccourcis emacs du texte sont dclars dans la procdure 
  te:eb:emacs_bind {W} (editbind.tcl). Ils sont appliqus au texte $W.
  
  Ces 4 procdures sont excutes au lancement de te par la procdure
  jedit:apply_prefs (stead).
  ^^^^^^^^^^^^^^^^^

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


  Les procdures correspondant aux actions sur la souris sur le texte sont
  dclares dans te:tb:basic_bind {W} (editbind.tcl)
  
###########################################################################
 6 -Les Filtres
###########################################################################

  la procdure "te:pipe_rect_sel" permettant d'appliquer un filtre tcl (et par
  extension unix)  la selection mme rectangulaire 
  (Fichier tclLib/rect_sel.tcl).

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

  indentation dans les alias lectriques
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  
  On utilise pour cela la fonctionnalit d'excution d'une commnade 
  l'intrieur d'un alias lectrique : $EA_8bit_begin<Commande>$EA_8bit_end
  
  Dans le fichier qui contient la dfinition des alias lectriques 
  (~/.tk/stead/steadrc ou ~/.tk/stead/<nom-de-mode>-user.tcl
  ou STEAD/tclLib/jeditmodes/<nom-de-mode>-mode.tcl), on dfinit 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 invoque la PREMIERE FOIS par l'utilisateur,
   te:mode:set:navig_window fera appel  la procdure te:mode:set_struct <nom>
                                                      ------------------
   (mode.tcl) (o <nom> sera toujours $TE_MODE_NAVIG_SHOW_TEXT ou "navig") qui :
  
   - se chargera de crer la fentre .$TE_MODE_NAVIG_SHOW_TEXT (ou .navig) 
   par l'intermdiare de la procdure te:mode:create_navig_window (mode.tcl)
                                      ---------------------------
   cette fentre comportera un bouton "Done" qui permet de l'effacer et un 
   bouton "$TE_MODE_NAVIG_RESET_TEXT" qui permet de relancer le calcul
   (excution de te:mode:rescan_hook puis de te:mode_set_struct). Ces
   boutons seront contenus dans la fentre .$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 procdures s'appelent
  toutes te:cmd:latex:<nom-du-template>.
  
  Un electric alias provisoire est cree lors de l'appel de la procdure
  te:cmd:mk_alias_string <nom-du-template> <inclure-selection?>. Cette 
  procdure est appele 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 dfinition d'electric alias dans le meme fichier.

