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) ))