Emacs

 

dc : Emacs [1] est l'éditeur (sans doute) le plus célèbre, il possède un mode tcl tcl-mode, celui-ci propose notamment une mise en valeur syntaxique. Donal. K. Fellows propose ici [2] un fichier elisp tcl-font.el permattant une coloration améliorée.

J'ai activé C-c C-t, C-c C-k et C-c C-r pour interpréter le buffer avec respectivement tclsh, wish et tclkit. Il s'agit de code trouvé ça et là à placer dans son ~/.emacs.

 (require 'tcl-font)

 (defvar tcl-compile-command "tclsh8.4 %s")
 (defun tcl-compile () (interactive)
  (save-buffer)
  (shell-command (format tcl-compile-command buffer-file-name))
  )
 (add-hook 'tcl-mode-hook
	  '(lambda nil
             (define-key tcl-mode-map "\C-c\C-t" 'tcl-compile)))

 (defvar tk-compile-command "wish8.4 %s")
 (defun tk-compile () (interactive)
  (save-buffer)
  (shell-command (format tk-compile-command buffer-file-name))
  )
 (add-hook 'tcl-mode-hook
	  '(lambda nil
	     (define-key tcl-mode-map "\C-c\C-k" 'tk-compile)))

 (defvar tclkit-compile-command "tclkit8.5a4 %s")
 (defun tclkit-compile () (interactive)
  (save-buffer)
  (shell-command (format tclkit-compile-command buffer-file-name))
  )
 (add-hook 'tcl-mode-hook
	  '(lambda nil
	     (define-key tcl-mode-map "\C-c\C-r" 'tclkit-compile)))

J'ai aussi ajouté un binding avec la touche F1 pour activer l'aide sur un mot en affichant dans un buffer la page du manuel :

 (setq Man-switches "n")
 (global-set-key [(f1)]
		(lambda ()
		  (interactive)
		  (manual-entry (current-word))
		  ))

dc quelques commandes (ajoutées au mode tcl) permettant des insertions faciles :

 (add-hook 'tcl-mode-hook
      '(lambda ()
	 (defun tcl-insert-package (nom version)
	   (interactive "sNom de l'extension : \nsVersion : ")
	   (if (equal nom "")
	       (message "Pas d'insertion")
	     (insert (concat "package require " nom " " version))
	     )
	   )
	 (defun tcl-insert-proc (namespace nom args)
	   (interactive "sNamespace : \nsNom de la procédure : \nsListe des arguments : ")
	   (if (equal namespace "")
	       ()
	       (setf namespace (concat namespace "::")))
	   (insert (concat "proc " namespace nom " {" args "} {\n    \n}"))
	   (forward-line -1)
	   (forward-char 4)
	   )
	 (defun tcl-insert-simpleFor (nom entierDebut entierFin)
	   (interactive "sNom de la variable : \nsValeur de départ : \nsValeur de fin : ")
	   (save-excursion
	     (insert (concat "for {set " nom " " entierDebut "} {$" nom "<" entierFin "} {incr " nom "} {\n\n}"))
	     (indent-according-to-mode)
	     )
	   (forward-line 1)
	   (indent-according-to-mode)
	   )
	 (defun tcl-insert-expr ()
	   (interactive)
	   (insert "[expr {}]")
	   (forward-char -2)
	   )
	 (defun tcl-insert-accolades ()
	   (interactive)
	   (insert "{}")
	   (forward-char -1)
	   )
	 (defun tcl-insert-crochets ()
	   (interactive)
	   (insert "[]")
	   (forward-char -1)
	   )
	 (defun tcl-insert-parentheses ()
	   (interactive)
	   (insert "()")
	   (forward-char -1)
	   )
	 (defun tcl-insert-preambule ()
	   (interactive)
	   (insert (concat
		    "#!/bin/sh
 # The next line restarts using tclsh \\
 exec tclsh8.4 \"$0\" -- ${1+\"$@\"}

 #
 # auteur : david cobac [string map {# @} david.cobac#free.fr]
 # date   : "
		    (format-time-string "%d/%m/%Y")
		    "\n#"
		    )))

	 (define-key tcl-mode-map "\C-cp" 'tcl-insert-package)
	 (define-key tcl-mode-map "\C-ce" 'tcl-insert-expr)
	 (define-key tcl-mode-map "\C-cF" 'tcl-insert-proc)
	 (define-key tcl-mode-map "\C-cf" 'tcl-insert-simpleFor)
	 (define-key tcl-mode-map "\C-c\C-a" 'tcl-insert-accolades)
	 (define-key tcl-mode-map "\C-c\C-w" 'tcl-insert-crochets)
	 (define-key tcl-mode-map "\C-c\C-p" 'tcl-insert-parentheses)
	 (define-key tcl-mode-map "\C-cP" 'tcl-insert-preambule)
	 ))