annotate lisp/progmodes/tcl.el @ 69478:e8bb5df2ba7a

Add index entries around each paragraph rather than depend on entries from beginning of node. Doing so ensures that index entries are less likely to be forgotten if text is cut and pasted, and are necessary anyway if the references are on a separate page. It seems that makeinfo is now (v. 4.8) only producing one index entry per node, so there is no longer any excuse not to. Use subheading instead of heading. The incorrect use of heading produced very large fonts in Info--as large as the main heading. (From Bill Wohler): MH-E never did appear in Emacs 21--MH-E versions 6 and 7 appeared *around* the time of these Emacs releases.
author Bill Wohler <wohler@newt.com>
date Wed, 15 Mar 2006 00:26:12 +0000
parents 32fc565ba875
children da16308f67d1 8438f5473d99 7beb78bc1f8e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 35712
diff changeset
1 ;;; tcl.el --- Tcl code editing commands for Emacs
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
2
68124
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
3 ;; Copyright (C) 1994, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
61246
ee782d6579a8 (tcl-set-font-lock-keywords): Use new \_< ops.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58563
diff changeset
4 ;; Free Software Foundation, Inc.
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
5
44320
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
6 ;; Maintainer: FSF
43437
55d255989f05 (tcl-do-fill-paragraph): Find and fill on more
Richard M. Stallman <rms@gnu.org>
parents: 39754
diff changeset
7 ;; Author: Tom Tromey <tromey@redhat.com>
6710
85f4c4971597 Fixed up headers for release.
Tom Tromey <tromey@redhat.com>
parents: 6709
diff changeset
8 ;; Chris Lindblad <cjl@lcs.mit.edu>
85f4c4971597 Fixed up headers for release.
Tom Tromey <tromey@redhat.com>
parents: 6709
diff changeset
9 ;; Keywords: languages tcl modes
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
10
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
11 ;; This file is part of GNU Emacs.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
12
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
13 ;; GNU Emacs is free software; you can redistribute it and/or modify
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
14 ;; it under the terms of the GNU General Public License as published by
22662
f0078b7750b7 Some itcl additions:
Tom Tromey <tromey@redhat.com>
parents: 16170
diff changeset
15 ;; the Free Software Foundation; either version 2, or (at your option)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
16 ;; any later version.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
17
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
18 ;; GNU Emacs is distributed in the hope that it will be useful,
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
21 ;; GNU General Public License for more details.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
22
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
25163
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
24 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64085
18a818a2ee7c Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 64053
diff changeset
25 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18a818a2ee7c Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 64053
diff changeset
26 ;; Boston, MA 02110-1301, USA.
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
27
25163
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
28 ;; BEFORE USE:
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
29 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
30 ;; If you plan to use the interface to the TclX help files, you must
7052
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
31 ;; set the variable tcl-help-directory-list to point to the topmost
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
32 ;; directories containing the TclX help files. Eg:
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
33 ;;
7052
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
34 ;; (setq tcl-help-directory-list '("/usr/local/lib/tclx/help"))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
35 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
36 ;;; Commentary:
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
37
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
38 ;; CUSTOMIZATION NOTES:
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
39 ;; * tcl-proc-list can be used to customize a list of things that
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
40 ;; "define" other things. Eg in my project I put "defvar" in this
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
41 ;; list.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
42 ;; * tcl-typeword-list is similar, but uses font-lock-type-face.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
43 ;; * tcl-keyword-list is a list of keywords. I've generally used this
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
44 ;; for flow-control words. Eg I add "unwind_protect" to this list.
61314
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
45 ;; * tcl-builtin-list lists commands to be given font-lock-builtin-face.
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
46 ;; * tcl-type-alist can be used to minimally customize indentation
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
47 ;; according to context.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
48
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
49 ;; THANKS FOR CRITICISM AND SUGGESTIONS TO:
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
50 ;; Guido Bosch <Guido.Bosch@loria.fr>
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
51 ;; pgs1002@esc.cam.ac.uk (Dr P.G. Sjoerdsma)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
52 ;; Mike Scheidler <c23mts@kocrsv01.delcoelect.com>
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
53 ;; Matt Newman <men@charney.colorado.edu>
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
54 ;; rwhitby@research.canon.oz.au (Rod Whitby)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
55 ;; h9118101@hkuxa.hku.hk (Yip Chi Lap [Beta])
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
56 ;; Pertti Tapio Kasanen <ptk@delta.hut.fi>
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
57 ;; schmid@fb3-s7.math.TU-Berlin.DE (Gregor Schmid)
8339
b6e4f16c969a Emacs 18 changes from Carl Witty.
Tom Tromey <tromey@redhat.com>
parents: 8252
diff changeset
58 ;; warsaw@nlm.nih.gov (Barry A. Warsaw)
b6e4f16c969a Emacs 18 changes from Carl Witty.
Tom Tromey <tromey@redhat.com>
parents: 8252
diff changeset
59 ;; Carl Witty <cwitty@ai.mit.edu>
8580
648f78c8ecf5 Fixed bug in tcl-guess-application.
Tom Tromey <tromey@redhat.com>
parents: 8575
diff changeset
60 ;; T. V. Raman <raman@crl.dec.com>
11303
7823947372f9 (tcl-outline-level): New function
Tom Tromey <tromey@redhat.com>
parents: 9428
diff changeset
61 ;; Jesper Pedersen <blackie@imada.ou.dk>
11787
635f5fb5d82a Changed "Lucid Emacs" to "XEmacs".
Tom Tromey <tromey@redhat.com>
parents: 11303
diff changeset
62 ;; dfarmer@evolving.com (Doug Farmer)
12924
8172973fd6e4 (tcl-hilit): New function from "Chris Alfeld" <calfeld@math.utah.edu>
Tom Tromey <tromey@redhat.com>
parents: 12795
diff changeset
63 ;; "Chris Alfeld" <calfeld@math.utah.edu>
44320
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
64 ;; Ben Wing <ben@xemacs.org>
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
65
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
66 ;; KNOWN BUGS:
44320
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
67 ;; * In Tcl "#" is not always a comment character. This can confuse tcl.el
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
68 ;; in certain circumstances. For now the only workaround is to use
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
69 ;; font-lock which will mark the # chars accordingly or enclose offending
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
70 ;; hash characters in quotes or precede them with a backslash. Note that
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
71 ;; using braces won't work -- quotes change the syntax class of characters
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
72 ;; between them, while braces do not. If you don't use font-lock, the
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
73 ;; electric-# mode helps alleviate this problem somewhat.
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
74 ;; * indent-tcl-exp is untested.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
75
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
76 ;; TODO:
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
77 ;; * make add-log-tcl-defun smarter. should notice if we are in the
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
78 ;; middle of a defun, or between defuns. should notice if point is
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
79 ;; on first line of defun (or maybe even in comments before defun).
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
80 ;; * Allow continuation lines to be indented under the first argument
44227
a1c4f9151348 (tcl-imenu-create-index-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 43437
diff changeset
81 ;; of the preceding line, like this:
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
82 ;; [list something \
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
83 ;; something-else]
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
84 ;; * There is a request that indentation work like this:
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
85 ;; button .fred -label Fred \
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
86 ;; -command {puts fred}
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
87 ;; * Should have tcl-complete-symbol that queries the inferior process.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
88 ;; * Should have describe-symbol that works by sending the magic
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
89 ;; command to a tclX process.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
90 ;; * Need C-x C-e binding (tcl-eval-last-exp).
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
91 ;; * Write indent-region function that is faster than indenting each
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
92 ;; line individually.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
93 ;; * tcl-figure-type should stop at "beginning of line" (only ws
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
94 ;; before point, and no "\" on previous line). (see tcl-real-command-p).
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
95 ;; * overrides some comint keybindings; fix.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
96 ;; * Trailing \ will eat blank lines. Should deal with this.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
97 ;; (this would help catch some potential bugs).
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
98 ;; * Inferior should display in half the screen, not the whole screen.
7052
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
99 ;; * Indentation should deal with "switch".
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
100 ;; * Consider writing code to find help files automatically (for
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
101 ;; common cases).
7628
6fe5a25c0107 Fixed bug with M-;.
Tom Tromey <tromey@redhat.com>
parents: 7613
diff changeset
102 ;; * `#' shouldn't insert `\#' when point is in string.
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
103
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
104
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
105
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
106 ;;; Code:
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
107
35712
350ba5553ea3 (outline, dabbrev, add-log): Require when
Gerd Moellmann <gerd@gnu.org>
parents: 29408
diff changeset
108 (eval-when-compile
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
109 (require 'imenu)
35712
350ba5553ea3 (outline, dabbrev, add-log): Require when
Gerd Moellmann <gerd@gnu.org>
parents: 29408
diff changeset
110 (require 'outline)
350ba5553ea3 (outline, dabbrev, add-log): Require when
Gerd Moellmann <gerd@gnu.org>
parents: 29408
diff changeset
111 (require 'dabbrev)
350ba5553ea3 (outline, dabbrev, add-log): Require when
Gerd Moellmann <gerd@gnu.org>
parents: 29408
diff changeset
112 (require 'add-log))
350ba5553ea3 (outline, dabbrev, add-log): Require when
Gerd Moellmann <gerd@gnu.org>
parents: 29408
diff changeset
113
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
114 (require 'comint)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
115
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
116 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
117 ;; User variables.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
118 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
119
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
120 (defgroup tcl nil
64053
fd24f2ae0e10 (tcl): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 62531
diff changeset
121 "Major mode for editing Tcl source in Emacs."
66963
a11fdee52c05 Add :link (custom-group-link font-lock-faces) to defgroup.
Juri Linkov <juri@jurta.org>
parents: 64085
diff changeset
122 :link '(custom-group-link :tag "Font Lock Faces group" font-lock-faces)
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
123 :group 'languages)
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
124
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
125 (defcustom tcl-indent-level 4
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
126 "*Indentation of Tcl statements with respect to containing block."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
127 :type 'integer
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
128 :group 'tcl)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
129
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
130 (defcustom tcl-continued-indent-level 4
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
131 "*Indentation of continuation line relative to first line of command."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
132 :type 'integer
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
133 :group 'tcl)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
134
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
135 (defcustom tcl-auto-newline nil
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
136 "*Non-nil means automatically newline before and after braces you insert."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
137 :type 'boolean
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
138 :group 'tcl)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
139
51056
5dbeffb17d8e (tcl-indent-exp): Remove dead code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50856
diff changeset
140 (defcustom tcl-tab-always-indent tab-always-indent
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
141 "*Control effect of TAB key.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
142 If t (the default), always indent current line.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
143 If nil and point is not in the indentation area at the beginning of
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
144 the line, a TAB is inserted.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
145 Other values cause the first possible action from the following list
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
146 to take place:
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
147
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
148 1. Move from beginning of line to correct indentation.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
149 2. Delete an empty comment.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
150 3. Move forward to start of comment, indenting if necessary.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
151 4. Move forward to end of line, indenting if necessary.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
152 5. Create an empty comment.
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
153 6. Move backward to start of comment, indenting if necessary."
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
154 :type '(choice (const :tag "Always" t)
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
155 (const :tag "Beginning only" nil)
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
156 (const :tag "Maybe move or make or delete comment" 'tcl))
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
157 :group 'tcl)
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
158
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
159
44320
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
160 (defcustom tcl-electric-hash-style nil ;; 'smart
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
161 "*Style of electric hash insertion to use.
25163
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
162 Possible values are `backslash', meaning that `\\' quoting should be
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
163 done; `quote', meaning that `\"' quoting should be done; `smart',
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
164 meaning that the choice between `backslash' and `quote' should be
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
165 made depending on the number of hashes inserted; or nil, meaning that
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
166 no quoting should be done. Any other value for this variable is
44320
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
167 taken to mean `smart'. The default is nil."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
168 :type '(choice (const backslash) (const quote) (const smart) (const nil))
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
169 :group 'tcl)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
170
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
171 (defcustom tcl-help-directory-list nil
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
172 "*List of topmost directories containing TclX help files."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
173 :type '(repeat directory)
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
174 :group 'tcl)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
175
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
176 (defcustom tcl-use-smart-word-finder t
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
177 "*If not nil, use smart way to find current word, for Tcl help feature."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
178 :type 'boolean
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
179 :group 'tcl)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
180
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
181 (defcustom tcl-application "wish"
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
182 "*Name of Tcl program to run in inferior Tcl mode."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
183 :type 'string
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
184 :group 'tcl)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
185
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
186 (defcustom tcl-command-switches nil
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
187 "*List of switches to supply to the `tcl-application' program."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
188 :type '(repeat string)
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
189 :group 'tcl)
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
190
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
191 (defcustom tcl-prompt-regexp "^\\(% \\|\\)"
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
192 "*If not nil, a regexp that will match the prompt in the inferior process.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
193 If nil, the prompt is the name of the application with \">\" appended.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
194
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
195 The default is \"^\\(% \\|\\)\", which will match the default primary
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
196 and secondary prompts for tclsh and wish."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
197 :type 'regexp
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
198 :group 'tcl)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
199
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
200 (defcustom inferior-tcl-source-command "source %s\n"
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
201 "*Format-string for building a Tcl command to load a file.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
202 This format string should use `%s' to substitute a file name
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
203 and should result in a Tcl expression that will command the
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
204 inferior Tcl to load that file. The filename will be appropriately
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
205 quoted for Tcl."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
206 :type 'string
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
207 :group 'tcl)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
208
61314
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
209 (defface tcl-escaped-newline '((t :inherit font-lock-string-face))
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
210 "Face used for (non-escaped) backslash at end of a line in Tcl mode."
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
211 :group 'tcl
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
212 :version "22.1")
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
213
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
214 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
215 ;; Keymaps, abbrevs, syntax tables.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
216 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
217
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
218 (defvar tcl-mode-map
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
219 (let ((map (make-sparse-keymap)))
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
220 (define-key map "{" 'tcl-electric-char)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
221 (define-key map "}" 'tcl-electric-brace)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
222 (define-key map "[" 'tcl-electric-char)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
223 (define-key map "]" 'tcl-electric-char)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
224 (define-key map ";" 'tcl-electric-char)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
225 (define-key map "#" 'tcl-electric-hash) ;Remove? -stef
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
226 (define-key map "\e\C-q" 'tcl-indent-exp)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
227 (define-key map "\177" 'backward-delete-char-untabify)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
228 (define-key map "\t" 'tcl-indent-command)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
229 (define-key map "\M-\C-x" 'tcl-eval-defun)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
230 (define-key map "\C-c\C-i" 'tcl-help-on-word)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
231 (define-key map "\C-c\C-v" 'tcl-eval-defun)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
232 (define-key map "\C-c\C-f" 'tcl-load-file)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
233 (define-key map "\C-c\C-t" 'inferior-tcl)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
234 (define-key map "\C-c\C-x" 'tcl-eval-region)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
235 (define-key map "\C-c\C-s" 'switch-to-tcl)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
236 map)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
237 "Keymap used in `tcl-mode'.")
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
238
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
239 (defvar tcl-mode-syntax-table
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
240 (let ((st (make-syntax-table)))
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
241 (modify-syntax-entry ?% "_" st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
242 (modify-syntax-entry ?@ "_" st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
243 (modify-syntax-entry ?& "_" st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
244 (modify-syntax-entry ?* "_" st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
245 (modify-syntax-entry ?+ "_" st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
246 (modify-syntax-entry ?- "_" st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
247 (modify-syntax-entry ?. "_" st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
248 (modify-syntax-entry ?: "_" st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
249 (modify-syntax-entry ?! "_" st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
250 (modify-syntax-entry ?$ "_" st) ; FIXME use "'"?
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
251 (modify-syntax-entry ?/ "_" st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
252 (modify-syntax-entry ?~ "_" st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
253 (modify-syntax-entry ?< "_" st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
254 (modify-syntax-entry ?= "_" st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
255 (modify-syntax-entry ?> "_" st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
256 (modify-syntax-entry ?| "_" st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
257 (modify-syntax-entry ?\( "()" st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
258 (modify-syntax-entry ?\) ")(" st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
259 (modify-syntax-entry ?\; "." st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
260 (modify-syntax-entry ?\n ">" st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
261 ;; (modify-syntax-entry ?\f ">" st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
262 (modify-syntax-entry ?# "<" st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
263 st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
264 "Syntax table in use in `tcl-mode' buffers.")
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
265
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
266 (defvar inferior-tcl-mode-map
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
267 ;; FIXME we override comint keybindings here.
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
268 ;; Maybe someone has a better set?
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
269 (let ((map (make-sparse-keymap)))
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
270 ;; Will inherit from `comint-mode-map' thanks to define-derived-mode.
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
271 (define-key map "\t" 'comint-dynamic-complete)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
272 (define-key map "\M-?" 'comint-dynamic-list-filename-completions)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
273 (define-key map "\177" 'backward-delete-char-untabify)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
274 (define-key map "\M-\C-x" 'tcl-eval-defun)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
275 (define-key map "\C-c\C-i" 'tcl-help-on-word)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
276 (define-key map "\C-c\C-v" 'tcl-eval-defun)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
277 (define-key map "\C-c\C-f" 'tcl-load-file)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
278 (define-key map "\C-c\C-t" 'inferior-tcl)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
279 (define-key map "\C-c\C-x" 'tcl-eval-region)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
280 (define-key map "\C-c\C-s" 'switch-to-tcl)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
281 map)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
282 "Keymap used in `inferior-tcl-mode'.")
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
283
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
284 (easy-menu-define tcl-mode-menu tcl-mode-map "Menu used in `tcl-mode'."
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
285 '("Tcl"
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
286 ["Beginning of function" beginning-of-defun t]
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
287 ["End of function" end-of-defun t]
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
288 ["Mark function" mark-defun t]
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
289 ["Indent region" indent-region (mark t)]
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
290 ["Comment region" comment-region (mark t)]
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
291 ["Uncomment region" uncomment-region (mark t)]
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
292 "----"
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
293 ["Show Tcl process buffer" inferior-tcl t]
7687
6447f9b3c966 Menu items now sensitive as appropriate.
Tom Tromey <tromey@redhat.com>
parents: 7635
diff changeset
294 ["Send function to Tcl process" tcl-eval-defun
7781
22449aa6d5ae Another menu fix.
Tom Tromey <tromey@redhat.com>
parents: 7780
diff changeset
295 (and inferior-tcl-buffer (get-buffer inferior-tcl-buffer))]
7687
6447f9b3c966 Menu items now sensitive as appropriate.
Tom Tromey <tromey@redhat.com>
parents: 7635
diff changeset
296 ["Send region to Tcl process" tcl-eval-region
7781
22449aa6d5ae Another menu fix.
Tom Tromey <tromey@redhat.com>
parents: 7780
diff changeset
297 (and inferior-tcl-buffer (get-buffer inferior-tcl-buffer))]
7687
6447f9b3c966 Menu items now sensitive as appropriate.
Tom Tromey <tromey@redhat.com>
parents: 7635
diff changeset
298 ["Send file to Tcl process" tcl-load-file
7781
22449aa6d5ae Another menu fix.
Tom Tromey <tromey@redhat.com>
parents: 7780
diff changeset
299 (and inferior-tcl-buffer (get-buffer inferior-tcl-buffer))]
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
300 ["Restart Tcl process with file" tcl-restart-with-file t]
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
301 "----"
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
302 ["Tcl help" tcl-help-on-word tcl-help-directory-list]))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
303
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
304 (defvar inferior-tcl-buffer nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
305 "*The current inferior-tcl process buffer.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
306
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
307 MULTIPLE PROCESS SUPPORT
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
308 ===========================================================================
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
309 To run multiple Tcl processes, you start the first up with
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
310 \\[inferior-tcl]. It will be in a buffer named `*inferior-tcl*'.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
311 Rename this buffer with \\[rename-buffer]. You may now start up a new
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
312 process with another \\[inferior-tcl]. It will be in a new buffer,
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
313 named `*inferior-tcl*'. You can switch between the different process
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
314 buffers with \\[switch-to-buffer].
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
315
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
316 Commands that send text from source buffers to Tcl processes -- like
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
317 `tcl-eval-defun' or `tcl-load-file' -- have to choose a process to
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
318 send to, when you have more than one Tcl process around. This is
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
319 determined by the global variable `inferior-tcl-buffer'. Suppose you
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
320 have three inferior Lisps running:
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
321 Buffer Process
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
322 foo inferior-tcl
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
323 bar inferior-tcl<2>
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
324 *inferior-tcl* inferior-tcl<3>
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
325 If you do a \\[tcl-eval-defun] command on some Lisp source code, what
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
326 process do you send it to?
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
327
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48192
diff changeset
328 - If you're in a process buffer (foo, bar, or *inferior-tcl*),
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
329 you send it to that process.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
330 - If you're in some other buffer (e.g., a source file), you
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
331 send it to the process attached to buffer `inferior-tcl-buffer'.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
332 This process selection is performed by function `inferior-tcl-proc'.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
333
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
334 Whenever \\[inferior-tcl] fires up a new process, it resets
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
335 `inferior-tcl-buffer' to be the new process's buffer. If you only run
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
336 one process, this does the right thing. If you run multiple
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
337 processes, you can change `inferior-tcl-buffer' to another process
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
338 buffer with \\[set-variable].")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
339
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
340 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
341 ;; Hooks and other customization.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
342 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
343
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
344 (defvar tcl-mode-hook nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
345 "Hook run on entry to Tcl mode.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
346
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
347 Several functions exist which are useful to run from your
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
348 `tcl-mode-hook' (see each function's documentation for more
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
349 information):
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
350
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
351 `tcl-guess-application'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
352 Guesses a default setting for `tcl-application' based on any
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
353 \"#!\" line at the top of the file.
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
354 `tcl-hashify-buffer'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
355 Quotes all \"#\" characters that don't correspond to actual
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
356 Tcl comments. (Useful when editing code not originally created
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
357 with this mode).
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
358 `tcl-auto-fill-mode'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
359 Auto-filling of Tcl comments.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
360
25163
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
361 Add functions to the hook with `add-hook':
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
362
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
363 (add-hook 'tcl-mode-hook 'tcl-guess-application)")
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
364
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
365
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
366 (defvar tcl-proc-list
24954
503bd9d97ac4 (tcl-proc-list): Reverted; already had `body'.
Tom Tromey <tromey@redhat.com>
parents: 24953
diff changeset
367 '("proc" "method" "itcl_class" "body" "configbody" "class")
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
368 "List of commands whose first argument defines something.
25163
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
369 This exists because some people (eg, me) use `defvar' et al.
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
370 Call `tcl-set-proc-regexp' and `tcl-set-font-lock-keywords'
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
371 after changing this list.")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
372
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
373 (defvar tcl-proc-regexp nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
374 "Regexp to use when matching proc headers.")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
375
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
376 (defvar tcl-typeword-list
22662
f0078b7750b7 Some itcl additions:
Tom Tromey <tromey@redhat.com>
parents: 16170
diff changeset
377 '("global" "upvar" "inherit" "public" "protected" "private"
24957
e26249ed0833 (tcl-typeword-list): Added `variable'.
Tom Tromey <tromey@redhat.com>
parents: 24956
diff changeset
378 "common" "itk_option" "variable")
7612
3b16e6ed71cf Fixed menu support.
Tom Tromey <tromey@redhat.com>
parents: 7288
diff changeset
379 "List of Tcl keywords denoting \"type\". Used only for highlighting.
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
380 Call `tcl-set-font-lock-keywords' after changing this list.")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
381
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
382 ;; Generally I've picked control operators to be keywords.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
383 (defvar tcl-keyword-list
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
384 '("if" "then" "else" "elseif" "for" "foreach" "break" "continue" "while"
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
385 "eval" "case" "in" "switch" "default" "exit" "error" "proc" "return"
12403
f863ead116f0 (tcl-set-proc-regexp): Allow leading spaces.
Tom Tromey <tromey@redhat.com>
parents: 11793
diff changeset
386 "uplevel" "constructor" "destructor" "itcl_class" "loop" "for_array_keys"
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
387 "for_recursive_glob" "for_file" "method" "body" "configbody" "class"
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
388 "chain")
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
389 "List of Tcl keywords. Used only for highlighting.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
390 Default list includes some TclX keywords.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
391 Call `tcl-set-font-lock-keywords' after changing this list.")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
392
61314
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
393 (defvar tcl-builtin-list
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
394 '("after" "append" "array" "bgerror" "binary" "catch" "cd" "clock"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
395 "close" "concat" "console" "dde" "encoding" "eof" "exec" "expr"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
396 "fblocked" "fconfigure" "fcopy" "file" "fileevent" "flush"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
397 "format" "gets" "glob" "history" "incr" "info" "interp" "join"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
398 "lappend" "lindex" "linsert" "list" "llength" "load" "lrange"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
399 "lreplace" "lsort" "namespace" "open" "package" "pid" "puts" "pwd"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
400 "read" "regexp" "registry" "regsub" "rename" "scan" "seek" "set"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
401 "socket" "source" "split" "string" "subst" "tell" "time" "trace"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
402 "unknown" "unset" "vwait")
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
403 "List of Tcl commands. Used only for highlighting.
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
404 Call `tcl-set-font-lock-keywords' after changing this list.
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
405 This list excludes those commands already found in `tcl-proc-list' and
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
406 `tcl-keyword-list'.")
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
407
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
408 (defvar tcl-font-lock-keywords nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
409 "Keywords to highlight for Tcl. See variable `font-lock-keywords'.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
410 This variable is generally set from `tcl-proc-regexp',
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
411 `tcl-typeword-list', and `tcl-keyword-list' by the function
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
412 `tcl-set-font-lock-keywords'.")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
413
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
414 (defvar tcl-font-lock-syntactic-keywords
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
415 ;; Mark the few `#' that are not comment-markers.
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
416 '(("[^;[{ \t\n][ \t]*\\(#\\)" (1 ".")))
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
417 "Syntactic keywords for `tcl-mode'.")
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
418
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
419 ;; FIXME need some way to recognize variables because array refs look
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
420 ;; like 2 sexps.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
421 (defvar tcl-type-alist
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
422 '(("proc" nil tcl-expr tcl-commands)
12404
cf59ada47a1c More changes for itcl.
Tom Tromey <tromey@redhat.com>
parents: 12403
diff changeset
423 ("method" nil tcl-expr tcl-commands)
12405
abcf4791a9b0 (tcl-type-alist): More itcl changes.
Tom Tromey <tromey@redhat.com>
parents: 12404
diff changeset
424 ("destructor" tcl-commands)
abcf4791a9b0 (tcl-type-alist): More itcl changes.
Tom Tromey <tromey@redhat.com>
parents: 12404
diff changeset
425 ("constructor" tcl-commands)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
426 ("expr" tcl-expr)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
427 ("catch" tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
428 ("if" tcl-expr "then" tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
429 ("elseif" tcl-expr "then" tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
430 ("elseif" tcl-expr tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
431 ("if" tcl-expr tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
432 ("while" tcl-expr tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
433 ("for" tcl-commands tcl-expr tcl-commands tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
434 ("foreach" nil nil tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
435 ("for_file" nil nil tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
436 ("for_array_keys" nil nil tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
437 ("for_recursive_glob" nil nil nil tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
438 ;; Loop handling is not perfect, because the third argument can be
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
439 ;; either a command or an expr, and there is no real way to look
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
440 ;; forward.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
441 ("loop" nil tcl-expr tcl-expr tcl-commands)
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
442 ("loop" nil tcl-expr tcl-commands))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
443 "Alist that controls indentation.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
444 \(Actually, this really only controls what happens on continuation lines).
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
445 Each entry looks like `(KEYWORD TYPE ...)'.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
446 Each type entry describes a sexp after the keyword, and can be one of:
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
447 * nil, meaning that this sexp has no particular type.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
448 * tcl-expr, meaning that this sexp is an arithmetic expression.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
449 * tcl-commands, meaning that this sexp holds Tcl commands.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
450 * a string, which must exactly match the string at the corresponding
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
451 position for a match to be made.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
452
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
453 For example, the entry for the \"loop\" command is:
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
454
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
455 (\"loop\" nil tcl-expr tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
456
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
457 This means that the \"loop\" command has three arguments. The first
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
458 argument is ignored (for indentation purposes). The second argument
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
459 is a Tcl expression, and the last argument is Tcl commands.")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
460
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
461 (defvar tcl-explain-indentation nil
50856
2aec3e4bf957 (tcl-explain-indentation): Don't quote nil and t in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 49730
diff changeset
462 "If non-nil, debugging message will be printed during indentation.")
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
463
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
464
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
465
49730
ce81e48eab6e (tcl-omit-ws-regexp): Correctly handle cases like `proc foo {a {b c} d} {'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
466 ;; Here's another stab. I think this one actually works.
ce81e48eab6e (tcl-omit-ws-regexp): Correctly handle cases like `proc foo {a {b c} d} {'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
467 ;; We have to be careful that the open-brace following this regexp
ce81e48eab6e (tcl-omit-ws-regexp): Correctly handle cases like `proc foo {a {b c} d} {'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
468 ;; is indeed the one corresponding to the function's body so
ce81e48eab6e (tcl-omit-ws-regexp): Correctly handle cases like `proc foo {a {b c} d} {'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
469 ;; that end-of-defun works correctly. Tricky cases are:
ce81e48eab6e (tcl-omit-ws-regexp): Correctly handle cases like `proc foo {a {b c} d} {'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
470 ;; proc foo { {arg1 def} arg2 } {
ce81e48eab6e (tcl-omit-ws-regexp): Correctly handle cases like `proc foo {a {b c} d} {'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
471 ;; as well as
ce81e48eab6e (tcl-omit-ws-regexp): Correctly handle cases like `proc foo {a {b c} d} {'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
472 ;; proc foo { \n {arg1 def} \n arg2 } {
ce81e48eab6e (tcl-omit-ws-regexp): Correctly handle cases like `proc foo {a {b c} d} {'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
473 ;; The current setting handles the first case properly but not the second.
ce81e48eab6e (tcl-omit-ws-regexp): Correctly handle cases like `proc foo {a {b c} d} {'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
474 ;; It also fails if `proc' is not in column-0 (e.g. it's in a namespace).
58563
72c3587cd01b (tcl-omit-ws-regexp): Avoid the case where { or [ appears within a comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58562
diff changeset
475 (defconst tcl-omit-ws-regexp "^[^]\" \t\n#}][^\n\"#]+[ \t]+")
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
476
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
477
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
478
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
479 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
480 ;; Some helper functions.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
481 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
482
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
483 (defun tcl-set-proc-regexp ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
484 "Set `tcl-proc-regexp' from variable `tcl-proc-list'."
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
485 (setq tcl-proc-regexp
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
486 (concat "^\\s-*" (regexp-opt tcl-proc-list t) "[ \t]+")))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
487
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
488 (defun tcl-set-font-lock-keywords ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
489 "Set `tcl-font-lock-keywords'.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
490 Uses variables `tcl-proc-regexp' and `tcl-keyword-list'."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
491 (setq tcl-font-lock-keywords
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
492 (list
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
493 ;; Names of functions (and other "defining things").
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
494 (list (concat tcl-proc-regexp "\\([^ \t\n]+\\)")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
495 2 'font-lock-function-name-face)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
496
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
497 ;; Names of type-defining things.
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
498 (list (concat "\\(\\s-\\|^\\)"
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
499 (regexp-opt tcl-typeword-list t)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
500 "\\(\\s-\\|$\\)")
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
501 2 'font-lock-type-face)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
502
61314
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
503 (list (concat "\\_<" (regexp-opt tcl-builtin-list t) "\\_>")
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
504 1 'font-lock-builtin-face)
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
505
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
506 ;; When variable names are enclosed in {} braces, any
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
507 ;; character can be used. Otherwise just letters, digits,
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
508 ;; underscores. Variable names can be prefixed with any
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
509 ;; number of "namespace::" qualifiers. A leading "::" refers
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
510 ;; to the global namespace.
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
511 '("\\${\\([^}]+\\)}" 1 font-lock-variable-name-face)
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
512 '("\\$\\(\\(?:::\\)?\\(?:[[:alnum:]_]+::\\)*[[:alnum:]_]+\\)"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
513 1 font-lock-variable-name-face)
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
514 '("\\(?:\\s-\\|^\\|\\[\\)set\\s-+{\\([^}]+\\)}"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
515 1 font-lock-variable-name-face keep)
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
516 '("\\(?:\\s-\\|^\\|\\[\\)set\\s-+\\(\\(?:::\\)?\
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
517 \\(?:[[:alnum:]_]+::\\)*[[:alnum:]_]+\\)"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
518 1 font-lock-variable-name-face keep)
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
519
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
520 '("\\(^\\|[^\\]\\)\\(\\\\\\\\\\)*\\(\\\\\\)$" 3 'tcl-escaped-newline)
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
521
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
522 ;; Keywords. Only recognized if surrounded by whitespace.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
523 ;; FIXME consider using "not word or symbol", not
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
524 ;; "whitespace".
61246
ee782d6579a8 (tcl-set-font-lock-keywords): Use new \_< ops.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58563
diff changeset
525 (cons (concat "\\_<" (regexp-opt tcl-keyword-list t) "\\_>")
61314
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
526 1))))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
527
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
528 (if tcl-proc-regexp
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
529 ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
530 (tcl-set-proc-regexp))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
531
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
532 (if tcl-font-lock-keywords
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
533 ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
534 (tcl-set-font-lock-keywords))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
535
44316
443cf26a410a (tcl-imenu-generic-expression): New value.
Richard M. Stallman <rms@gnu.org>
parents: 44227
diff changeset
536
443cf26a410a (tcl-imenu-generic-expression): New value.
Richard M. Stallman <rms@gnu.org>
parents: 44227
diff changeset
537 (defvar tcl-imenu-generic-expression
44320
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
538 `((nil ,(concat tcl-proc-regexp "\\([-A-Za-z0-9_:+*]+\\)") 2))
44316
443cf26a410a (tcl-imenu-generic-expression): New value.
Richard M. Stallman <rms@gnu.org>
parents: 44227
diff changeset
539 "Imenu generic expression for `tcl-mode'. See `imenu-generic-expression'.")
443cf26a410a (tcl-imenu-generic-expression): New value.
Richard M. Stallman <rms@gnu.org>
parents: 44227
diff changeset
540
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
541
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
542
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
543 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
544 ;; The mode itself.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
545 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
546
8252
7d4674a34de3 Added ";;;###autoload" comments where appropriate.
Tom Tromey <tromey@redhat.com>
parents: 7799
diff changeset
547 ;;;###autoload
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
548 (define-derived-mode tcl-mode nil "Tcl"
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
549 "Major mode for editing Tcl code.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
550 Expression and list commands understand all Tcl brackets.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
551 Tab indents for Tcl code.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
552 Paragraphs are separated by blank lines only.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
553 Delete converts tabs to spaces as it moves back.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
554
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
555 Variables controlling indentation style:
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
556 `tcl-indent-level'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
557 Indentation of Tcl statements within surrounding block.
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
558 `tcl-continued-indent-level'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
559 Indentation of continuation line relative to first line of command.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
560
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
561 Variables controlling user interaction with mode (see variable
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
562 documentation for details):
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
563 `tcl-tab-always-indent'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
564 Controls action of TAB key.
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
565 `tcl-auto-newline'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
566 Non-nil means automatically newline before and after braces, brackets,
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
567 and semicolons inserted in Tcl code.
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
568 `tcl-use-smart-word-finder'
12644
35800a352783 Doc fixes.
Tom Tromey <tromey@redhat.com>
parents: 12524
diff changeset
569 If not nil, use a smarter, Tcl-specific way to find the current
35800a352783 Doc fixes.
Tom Tromey <tromey@redhat.com>
parents: 12524
diff changeset
570 word when looking up help on a Tcl command.
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
571
49730
ce81e48eab6e (tcl-omit-ws-regexp): Correctly handle cases like `proc foo {a {b c} d} {'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
572 Turning on Tcl mode runs `tcl-mode-hook'. Read the documentation for
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
573 `tcl-mode-hook' to see what kinds of interesting hook functions
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
574 already exist.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
575
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
576 Commands:
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
577 \\{tcl-mode-map}"
44316
443cf26a410a (tcl-imenu-generic-expression): New value.
Richard M. Stallman <rms@gnu.org>
parents: 44227
diff changeset
578 (unless (and (boundp 'filladapt-mode) filladapt-mode)
48192
1acfacdf062a (tcl-mode): Don't set paragraph-start,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44320
diff changeset
579 (set (make-local-variable 'paragraph-ignore-fill-prefix) t))
7612
3b16e6ed71cf Fixed menu support.
Tom Tromey <tromey@redhat.com>
parents: 7288
diff changeset
580
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
581 (set (make-local-variable 'indent-line-function) 'tcl-indent-line)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
582 (set (make-local-variable 'comment-indent-function) 'tcl-comment-indent)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
583 ;; Tcl doesn't require a final newline.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
584 ;; (make-local-variable 'require-final-newline)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
585 ;; (setq require-final-newline t)
7612
3b16e6ed71cf Fixed menu support.
Tom Tromey <tromey@redhat.com>
parents: 7288
diff changeset
586
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
587 (set (make-local-variable 'comment-start) "# ")
49730
ce81e48eab6e (tcl-omit-ws-regexp): Correctly handle cases like `proc foo {a {b c} d} {'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
588 (set (make-local-variable 'comment-start-skip)
ce81e48eab6e (tcl-omit-ws-regexp): Correctly handle cases like `proc foo {a {b c} d} {'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49598
diff changeset
589 "\\(\\(^\\|[;{[]\\)\\s-*\\)#+ *")
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
590 (set (make-local-variable 'comment-end) "")
11303
7823947372f9 (tcl-outline-level): New function
Tom Tromey <tromey@redhat.com>
parents: 9428
diff changeset
591
48192
1acfacdf062a (tcl-mode): Don't set paragraph-start,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44320
diff changeset
592 (set (make-local-variable 'outline-regexp) ".")
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
593 (set (make-local-variable 'outline-level) 'tcl-outline-level)
7612
3b16e6ed71cf Fixed menu support.
Tom Tromey <tromey@redhat.com>
parents: 7288
diff changeset
594
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
595 (set (make-local-variable 'font-lock-defaults)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
596 '(tcl-font-lock-keywords nil nil nil beginning-of-defun
61314
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
597 (font-lock-syntactic-keywords . tcl-font-lock-syntactic-keywords)
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
598 (parse-sexp-lookup-properties . t)))
12517
2f90abd1c659 (tcl-mode): Customize for new dabbrev.
Tom Tromey <tromey@redhat.com>
parents: 12515
diff changeset
599
44316
443cf26a410a (tcl-imenu-generic-expression): New value.
Richard M. Stallman <rms@gnu.org>
parents: 44227
diff changeset
600 (set (make-local-variable 'imenu-generic-expression)
51492
168bf1dc1b53 (tcl-mode): Set imenu-generic-expression to the value of
Juanma Barranquero <lekktu@gmail.com>
parents: 51056
diff changeset
601 tcl-imenu-generic-expression)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48192
diff changeset
602
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
603 ;; Settings for new dabbrev code.
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
604 (set (make-local-variable 'dabbrev-case-fold-search) nil)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
605 (set (make-local-variable 'dabbrev-case-replace) nil)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
606 (set (make-local-variable 'dabbrev-abbrev-skip-leading-regexp) "[$!]")
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
607 (set (make-local-variable 'dabbrev-abbrev-char-regexp) "\\sw\\|\\s_")
7612
3b16e6ed71cf Fixed menu support.
Tom Tromey <tromey@redhat.com>
parents: 7288
diff changeset
608
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
609 ;; This can only be set to t in Emacs 19 and XEmacs.
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
610 ;; Emacs 18 and Epoch lose.
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
611 (set (make-local-variable 'parse-sexp-ignore-comments) t)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
612 ;; XEmacs has defun-prompt-regexp, but I don't believe
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
613 ;; that it works for end-of-defun -- only for
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
614 ;; beginning-of-defun.
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
615 (set (make-local-variable 'defun-prompt-regexp) tcl-omit-ws-regexp)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
616 ;; The following doesn't work in Lucid Emacs 19.6, but maybe
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
617 ;; it will appear in later versions.
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
618 (set (make-local-variable 'add-log-current-defun-function)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
619 'tcl-add-log-defun)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
620
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
621 (easy-menu-add tcl-mode-menu)
11787
635f5fb5d82a Changed "Lucid Emacs" to "XEmacs".
Tom Tromey <tromey@redhat.com>
parents: 11303
diff changeset
622 ;; Append Tcl menu to popup menu for XEmacs.
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
623 (if (boundp 'mode-popup-menu)
12520
ad24dd8cec5c Changes to make menus work in XEmacs.
Tom Tromey <tromey@redhat.com>
parents: 12517
diff changeset
624 (setq mode-popup-menu
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
625 (cons (concat mode-name " Mode Commands") tcl-mode-menu))))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
626
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
627
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
628
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
629 ;; This is used for braces, brackets, and semi (except for closing
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
630 ;; braces, which are handled specially).
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
631 (defun tcl-electric-char (arg)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
632 "Insert character and correct line's indentation."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
633 (interactive "p")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
634 ;; Indent line first; this looks better if parens blink.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
635 (tcl-indent-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
636 (self-insert-command arg)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
637 (if (and tcl-auto-newline (= last-command-char ?\;))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
638 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
639 (newline)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
640 (tcl-indent-line))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
641
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
642 ;; This is used for closing braces. If tcl-auto-newline is set, can
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
643 ;; insert a newline both before and after the brace, depending on
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
644 ;; context. FIXME should this be configurable? Does anyone use this?
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
645 (defun tcl-electric-brace (arg)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
646 "Insert character and correct line's indentation."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
647 (interactive "p")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
648 ;; If auto-newlining and there is stuff on the same line, insert a
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
649 ;; newline first.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
650 (if tcl-auto-newline
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
651 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
652 (if (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
653 (skip-chars-backward " \t")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
654 (bolp))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
655 ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
656 (tcl-indent-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
657 (newline))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
658 ;; In auto-newline case, must insert a newline after each
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
659 ;; brace. So an explicit loop is needed.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
660 (while (> arg 0)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
661 (insert last-command-char)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
662 (tcl-indent-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
663 (newline)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
664 (setq arg (1- arg))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
665 (self-insert-command arg))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
666 (tcl-indent-line))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
667
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
668
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
669
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
670 (defun tcl-indent-command (&optional arg)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
671 "Indent current line as Tcl code, or in some cases insert a tab character.
25163
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
672 If `tcl-tab-always-indent' is t (the default), always indent current line.
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
673 If `tcl-tab-always-indent' is nil and point is not in the indentation
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
674 area at the beginning of the line, a TAB is inserted.
25163
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
675 Other values of `tcl-tab-always-indent' cause the first possible action
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
676 from the following list to take place:
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
677
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
678 1. Move from beginning of line to correct indentation.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
679 2. Delete an empty comment.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
680 3. Move forward to start of comment, indenting if necessary.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
681 4. Move forward to end of line, indenting if necessary.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
682 5. Create an empty comment.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
683 6. Move backward to start of comment, indenting if necessary."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
684 (interactive "p")
68124
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
685 (if (memq tcl-tab-always-indent '(nil t))
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
686 (let ((tab-always-indent tcl-tab-always-indent))
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
687 (call-interactively 'indent-for-tab-command))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
688 ;; "Perl-mode" style TAB command.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
689 (let* ((ipoint (point))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
690 (eolpoint (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
691 (end-of-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
692 (point)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
693 (comment-p (tcl-in-comment)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
694 (cond
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
695 ((= ipoint (line-beginning-position))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
696 (beginning-of-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
697 (tcl-indent-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
698 ;; If indenting didn't leave us in column 0, go to the
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
699 ;; indentation. Otherwise leave point at end of line. This
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
700 ;; is a hack.
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
701 (if (= (point) (line-beginning-position))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
702 (end-of-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
703 (back-to-indentation)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
704 ((and comment-p (looking-at "[ \t]*$"))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
705 ;; Empty comment, so delete it. We also delete any ";"
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
706 ;; characters at the end of the line. I think this is
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
707 ;; friendlier, but I don't know how other people will feel.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
708 (backward-char)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
709 (skip-chars-backward " \t;")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
710 (delete-region (point) eolpoint))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
711 ((and comment-p (< ipoint (point)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
712 ;; Before comment, so skip to it.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
713 (tcl-indent-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
714 (indent-for-comment))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
715 ((/= ipoint eolpoint)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
716 ;; Go to end of line (since we're not there yet).
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
717 (goto-char eolpoint)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
718 (tcl-indent-line))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
719 ((not comment-p)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
720 (tcl-indent-line)
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
721 (comment-indent))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
722 (t
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
723 ;; Go to start of comment. We don't leave point where it is
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
724 ;; because we want to skip comment-start-skip.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
725 (tcl-indent-line)
68124
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
726 (indent-for-comment))))))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
727
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
728 (defun tcl-indent-line ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
729 "Indent current line as Tcl code.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
730 Return the amount the indentation changed by."
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
731 (let ((indent (tcl-calculate-indent nil))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
732 beg shift-amt
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
733 (case-fold-search nil)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
734 (pos (- (point-max) (point))))
68124
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
735 (if (null indent)
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
736 'noindent
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
737 (beginning-of-line)
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
738 (setq beg (point))
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
739 (skip-chars-forward " \t")
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
740 (if (listp indent) (setq indent (car indent)))
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
741 (cond ((= (following-char) ?})
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
742 (setq indent (- indent tcl-indent-level)))
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
743 ((= (following-char) ?\])
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
744 (setq indent (- indent 1))))
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
745 (skip-chars-forward " \t")
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
746 (setq shift-amt (- indent (current-column)))
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
747 (if (zerop shift-amt)
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
748 (if (> (- (point-max) pos) (point))
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
749 (goto-char (- (point-max) pos)))
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
750 (delete-region beg (point))
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
751 (indent-to indent)
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
752 ;; If initial point was within line's indentation,
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
753 ;; position after the indentation. Else stay at same point in text.
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
754 (if (> (- (point-max) pos) (point))
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
755 (goto-char (- (point-max) pos))))
32fc565ba875 (tcl-indent-command): Use indent-for-tab-command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66963
diff changeset
756 shift-amt)))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
757
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
758 (defun tcl-figure-type ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
759 "Determine type of sexp at point.
25163
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
760 This is either `tcl-expr', `tcl-commands', or nil. Puts point at start
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
761 of sexp that indicates types.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
762
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
763 See documentation for variable `tcl-type-alist' for more information."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
764 (let ((count 0)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
765 result
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
766 word-stack)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
767 (while (and (< count 5)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
768 (not result))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
769 (condition-case nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
770 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
771 ;; FIXME should use "tcl-backward-sexp", which would skip
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
772 ;; over entire variables, etc.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
773 (backward-sexp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
774 (if (looking-at "[a-zA-Z_]+")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
775 (let ((list tcl-type-alist)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
776 entry)
12645
3ce3ca90e4a3 (tcl-word-no-props): New function.
Tom Tromey <tromey@redhat.com>
parents: 12644
diff changeset
777 (setq word-stack (cons (tcl-word-no-props) word-stack))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
778 (while (and list (not result))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
779 (setq entry (car list))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
780 (setq list (cdr list))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
781 (let ((index 0))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
782 (while (and entry (<= index count))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
783 ;; Abort loop if string does not match word on
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
784 ;; stack.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
785 (and (stringp (car entry))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
786 (not (string= (car entry)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
787 (nth index word-stack)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
788 (setq entry nil))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
789 (setq entry (cdr entry))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
790 (setq index (1+ index)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
791 (and (> index count)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
792 (not (stringp (car entry)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
793 (setq result (car entry)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
794 )))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
795 (setq word-stack (cons nil word-stack))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
796 (error nil))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
797 (setq count (1+ count)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
798 (and tcl-explain-indentation
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
799 (message "Indentation type %s" result))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
800 result))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
801
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
802 (defun tcl-calculate-indent (&optional parse-start)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
803 "Return appropriate indentation for current line as Tcl code.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
804 In usual case returns an integer: the column to indent to.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
805 Returns nil if line starts inside a string, t if in a comment."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
806 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
807 (beginning-of-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
808 (let* ((indent-point (point))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
809 (case-fold-search nil)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48192
diff changeset
810 (continued-line
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
811 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
812 (if (bobp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
813 nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
814 (backward-char)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
815 (= ?\\ (preceding-char)))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
816 (continued-indent-value (if continued-line
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
817 tcl-continued-indent-level
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
818 0))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
819 state
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
820 containing-sexp
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
821 found-next-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
822 (if parse-start
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
823 (goto-char parse-start)
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
824 (beginning-of-defun))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
825 (while (< (point) indent-point)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
826 (setq parse-start (point))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
827 (setq state (parse-partial-sexp (point) indent-point 0))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
828 (setq containing-sexp (car (cdr state))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
829 (cond ((or (nth 3 state) (nth 4 state))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
830 ;; Inside comment or string. Return nil or t if should
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
831 ;; not change this line
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
832 (nth 4 state))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
833 ((null containing-sexp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
834 ;; Line is at top level.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
835 continued-indent-value)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
836 (t
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
837 ;; Set expr-p if we are looking at the expression part of
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
838 ;; an "if", "expr", etc statement. Set commands-p if we
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
839 ;; are looking at the body part of an if, while, etc
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
840 ;; statement. FIXME Should check for "for" loops here.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
841 (goto-char containing-sexp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
842 (let* ((sexpr-type (tcl-figure-type))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
843 (expr-p (eq sexpr-type 'tcl-expr))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
844 (commands-p (eq sexpr-type 'tcl-commands))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
845 (expr-start (point)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
846 ;; Find the first statement in the block and indent
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
847 ;; like it. The first statement in the block might be
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
848 ;; on the same line, so what we do is skip all
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
849 ;; "virtually blank" lines, looking for a non-blank
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
850 ;; one. A line is virtually blank if it only contains
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
851 ;; a comment and whitespace. FIXME continued comments
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
852 ;; aren't supported. They are a wart on Tcl anyway.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
853 ;; We do it this funky way because we want to know if
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
854 ;; we've found a statement on some line _after_ the
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
855 ;; line holding the sexp opener.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
856 (goto-char containing-sexp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
857 (forward-char)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
858 (if (and (< (point) indent-point)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
859 (looking-at "[ \t]*\\(#.*\\)?$"))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
860 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
861 (forward-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
862 (while (and (< (point) indent-point)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
863 (looking-at "[ \t]*\\(#.*\\)?$"))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
864 (setq found-next-line t)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
865 (forward-line))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
866 (if (or continued-line
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
867 (/= (char-after containing-sexp) ?{)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
868 expr-p)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
869 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
870 ;; Line is continuation line, or the sexp opener
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
871 ;; is not a curly brace, or we are are looking at
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
872 ;; an `expr' expression (which must be split
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
873 ;; specially). So indentation is column of first
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
874 ;; good spot after sexp opener (with some added
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
875 ;; in the continued-line case). If there is no
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
876 ;; nonempty line before the indentation point, we
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
877 ;; use the column of the character after the sexp
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
878 ;; opener.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
879 (if (>= (point) indent-point)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
880 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
881 (goto-char containing-sexp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
882 (forward-char))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
883 (skip-chars-forward " \t"))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
884 (+ (current-column) continued-indent-value))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
885 ;; After a curly brace, and not a continuation line.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
886 ;; So take indentation from first good line after
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
887 ;; start of block, unless that line is on the same
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
888 ;; line as the opening brace. In this case use the
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
889 ;; indentation of the opening brace's line, plus
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
890 ;; another indent step. If we are in the body part
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
891 ;; of an "if" or "while" then the indentation is
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
892 ;; taken from the line holding the start of the
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
893 ;; statement.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
894 (if (and (< (point) indent-point)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
895 found-next-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
896 (current-indentation)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
897 (if commands-p
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
898 (goto-char expr-start)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
899 (goto-char containing-sexp))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
900 (+ (current-indentation) tcl-indent-level)))))))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
901
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
902
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
903
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
904 (defun tcl-indent-exp ()
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
905 "Indent each line of the Tcl grouping following point."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
906 (interactive)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
907 (let ((indent-stack (list nil))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
908 (contain-stack (list (point)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
909 (case-fold-search nil)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
910 outer-loop-done inner-loop-done state ostate
51056
5dbeffb17d8e (tcl-indent-exp): Remove dead code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50856
diff changeset
911 this-indent continued-line
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
912 (next-depth 0)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
913 last-depth)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
914 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
915 (forward-sexp 1))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
916 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
917 (setq outer-loop-done nil)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
918 (while (and (not (eobp)) (not outer-loop-done))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
919 (setq last-depth next-depth)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
920 ;; Compute how depth changes over this line
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
921 ;; plus enough other lines to get to one that
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
922 ;; does not end inside a comment or string.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
923 ;; Meanwhile, do appropriate indentation on comment lines.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
924 (setq inner-loop-done nil)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
925 (while (and (not inner-loop-done)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
926 (not (and (eobp) (setq outer-loop-done t))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
927 (setq ostate state)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
928 (setq state (parse-partial-sexp (point) (progn (end-of-line) (point))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
929 nil nil state))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
930 (setq next-depth (car state))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
931 (if (or (nth 4 ostate))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
932 (tcl-indent-line))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
933 (if (or (nth 3 state))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
934 (forward-line 1)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
935 (setq inner-loop-done t)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
936 (if (<= next-depth 0)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
937 (setq outer-loop-done t))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
938 (if outer-loop-done
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
939 nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
940 ;; If this line had ..))) (((.. in it, pop out of the levels
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
941 ;; that ended anywhere in this line, even if the final depth
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
942 ;; doesn't indicate that they ended.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
943 (while (> last-depth (nth 6 state))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
944 (setq indent-stack (cdr indent-stack)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
945 contain-stack (cdr contain-stack)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
946 last-depth (1- last-depth)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
947 ;; Add levels for any parens that were started in this line.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
948 (while (< last-depth next-depth)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
949 (setq indent-stack (cons nil indent-stack)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
950 contain-stack (cons nil contain-stack)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
951 last-depth (1+ last-depth)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
952 (if (null (car contain-stack))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48192
diff changeset
953 (setcar contain-stack
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
954 (or (car (cdr state))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
955 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
956 (forward-sexp -1)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
957 (point)))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
958 (forward-line 1)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48192
diff changeset
959 (setq continued-line
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
960 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
961 (backward-char)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
962 (= (preceding-char) ?\\)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
963 (skip-chars-forward " \t")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
964 (if (eolp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
965 nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
966 (if (and (car indent-stack)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
967 (>= (car indent-stack) 0))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
968 ;; Line is on an existing nesting level.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
969 (setq this-indent (car indent-stack))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
970 ;; Just started a new nesting level.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
971 ;; Compute the standard indent for this level.
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
972 (let ((val (tcl-calculate-indent
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
973 (if (car indent-stack)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
974 (- (car indent-stack))))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
975 (setcar indent-stack
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
976 (setq this-indent val))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
977 (setq continued-line nil)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
978 (cond ((not (numberp this-indent)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
979 ((= (following-char) ?})
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
980 (setq this-indent (- this-indent tcl-indent-level)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
981 ((= (following-char) ?\])
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
982 (setq this-indent (- this-indent 1))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
983 ;; Put chosen indentation into effect.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
984 (or (null this-indent)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48192
diff changeset
985 (= (current-column)
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48192
diff changeset
986 (if continued-line
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
987 (+ this-indent tcl-indent-level)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
988 this-indent))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
989 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
990 (delete-region (point) (progn (beginning-of-line) (point)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48192
diff changeset
991 (indent-to
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48192
diff changeset
992 (if continued-line
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
993 (+ this-indent tcl-indent-level)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
994 this-indent)))))))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
995 )
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
996
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
997
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
998
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
999 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1000 ;; Interfaces to other packages.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1001 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1002
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1003 ;; FIXME Definition of function is very ad-hoc. Should use
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1004 ;; beginning-of-defun. Also has incestuous knowledge about the
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1005 ;; format of tcl-proc-regexp.
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1006 (defun tcl-add-log-defun ()
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1007 "Return name of Tcl function point is in, or nil."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1008 (save-excursion
13698
a5b05f960c30 (add-log-tcl-defun): Don't use tcl-beginning-of-defun; just go to end
Tom Tromey <tromey@redhat.com>
parents: 13697
diff changeset
1009 (end-of-line)
a5b05f960c30 (add-log-tcl-defun): Don't use tcl-beginning-of-defun; just go to end
Tom Tromey <tromey@redhat.com>
parents: 13697
diff changeset
1010 (if (re-search-backward (concat tcl-proc-regexp "\\([^ \t\n{]+\\)") nil t)
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1011 (match-string 2))))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1012
11303
7823947372f9 (tcl-outline-level): New function
Tom Tromey <tromey@redhat.com>
parents: 9428
diff changeset
1013 (defun tcl-outline-level ()
7823947372f9 (tcl-outline-level): New function
Tom Tromey <tromey@redhat.com>
parents: 9428
diff changeset
1014 (save-excursion
7823947372f9 (tcl-outline-level): New function
Tom Tromey <tromey@redhat.com>
parents: 9428
diff changeset
1015 (skip-chars-forward " \t")
7823947372f9 (tcl-outline-level): New function
Tom Tromey <tromey@redhat.com>
parents: 9428
diff changeset
1016 (current-column)))
7823947372f9 (tcl-outline-level): New function
Tom Tromey <tromey@redhat.com>
parents: 9428
diff changeset
1017
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1018
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1019
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1020 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1021 ;; Helper functions for inferior Tcl mode.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1022 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1023
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1024 ;; This exists to let us delete the prompt when commands are sent
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1025 ;; directly to the inferior Tcl. See gud.el for an explanation of how
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1026 ;; it all works (I took it from there). This stuff doesn't really
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1027 ;; work as well as I'd like it to. But I don't believe there is
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1028 ;; anything useful that can be done.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1029 (defvar inferior-tcl-delete-prompt-marker nil)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1030
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1031 (defun tcl-filter (proc string)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1032 (let ((inhibit-quit t))
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1033 (with-current-buffer (process-buffer proc)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1034 (goto-char (process-mark proc))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1035 ;; Delete prompt if requested.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1036 (if (marker-buffer inferior-tcl-delete-prompt-marker)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1037 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1038 (delete-region (point) inferior-tcl-delete-prompt-marker)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1039 (set-marker inferior-tcl-delete-prompt-marker nil)))))
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1040 (comint-output-filter proc string))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1041
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1042 (defun tcl-send-string (proc string)
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1043 (with-current-buffer (process-buffer proc)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1044 (goto-char (process-mark proc))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1045 (beginning-of-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1046 (if (looking-at comint-prompt-regexp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1047 (set-marker inferior-tcl-delete-prompt-marker (point))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1048 (comint-send-string proc string))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1049
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1050 (defun tcl-send-region (proc start end)
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1051 (with-current-buffer (process-buffer proc)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1052 (goto-char (process-mark proc))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1053 (beginning-of-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1054 (if (looking-at comint-prompt-regexp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1055 (set-marker inferior-tcl-delete-prompt-marker (point))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1056 (comint-send-region proc start end))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1057
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1058 (defun switch-to-tcl (eob-p)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1059 "Switch to inferior Tcl process buffer.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1060 With argument, positions cursor at end of buffer."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1061 (interactive "P")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1062 (if (get-buffer inferior-tcl-buffer)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1063 (pop-to-buffer inferior-tcl-buffer)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1064 (error "No current inferior Tcl buffer"))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1065 (cond (eob-p
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1066 (push-mark)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1067 (goto-char (point-max)))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1068
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1069 (defun inferior-tcl-proc ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1070 "Return current inferior Tcl process.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1071 See variable `inferior-tcl-buffer'."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1072 (let ((proc (get-buffer-process (if (eq major-mode 'inferior-tcl-mode)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1073 (current-buffer)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1074 inferior-tcl-buffer))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1075 (or proc
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1076 (error "No Tcl process; see variable `inferior-tcl-buffer'"))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1077
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1078 (defun tcl-eval-region (start end &optional and-go)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1079 "Send the current region to the inferior Tcl process.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1080 Prefix argument means switch to the Tcl buffer afterwards."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1081 (interactive "r\nP")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1082 (let ((proc (inferior-tcl-proc)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1083 (tcl-send-region proc start end)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1084 (tcl-send-string proc "\n")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1085 (if and-go (switch-to-tcl t))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1086
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1087 (defun tcl-eval-defun (&optional and-go)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1088 "Send the current defun to the inferior Tcl process.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1089 Prefix argument means switch to the Tcl buffer afterwards."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1090 (interactive "P")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1091 (save-excursion
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1092 (end-of-defun)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1093 (let ((end (point)))
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1094 (beginning-of-defun)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1095 (tcl-eval-region (point) end)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1096 (if and-go (switch-to-tcl t)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1097
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1098
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1099
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1100 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1101 ;; Inferior Tcl mode itself.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1102 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1103
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1104 (define-derived-mode inferior-tcl-mode comint-mode "Inferior Tcl"
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1105 "Major mode for interacting with Tcl interpreter.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1106
44316
443cf26a410a (tcl-imenu-generic-expression): New value.
Richard M. Stallman <rms@gnu.org>
parents: 44227
diff changeset
1107 You can start a Tcl process with \\[inferior-tcl].
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1108
25163
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
1109 Entry to this mode runs the normal hooks `comint-mode-hook' and
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
1110 `inferior-tcl-mode-hook', in that order.
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1111
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1112 You can send text to the inferior Tcl process from other buffers
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1113 containing Tcl source.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1114
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1115 Variables controlling Inferior Tcl mode:
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1116 `tcl-application'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1117 Name of program to run.
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1118 `tcl-command-switches'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1119 Command line arguments to `tcl-application'.
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1120 `tcl-prompt-regexp'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1121 Matches prompt.
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1122 `inferior-tcl-source-command'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1123 Command to use to read Tcl file in running application.
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1124 `inferior-tcl-buffer'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1125 The current inferior Tcl process buffer. See variable
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1126 documentation for details on multiple-process support.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1127
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1128 The following commands are available:
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1129 \\{inferior-tcl-mode-map}"
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1130 (set (make-local-variable 'comint-prompt-regexp)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1131 (or tcl-prompt-regexp
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1132 (concat "^" (regexp-quote tcl-application) ">")))
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1133 (setq mode-line-process '(": %s"))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1134 (setq local-abbrev-table tcl-mode-abbrev-table)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1135 (set-syntax-table tcl-mode-syntax-table)
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1136 (set (make-local-variable 'defun-prompt-regexp) tcl-omit-ws-regexp)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1137 (set (make-local-variable 'inferior-tcl-delete-prompt-marker) (make-marker))
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1138 (set-process-filter (get-buffer-process (current-buffer)) 'tcl-filter))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1139
8252
7d4674a34de3 Added ";;;###autoload" comments where appropriate.
Tom Tromey <tromey@redhat.com>
parents: 7799
diff changeset
1140 ;;;###autoload
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1141 (defun inferior-tcl (cmd)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1142 "Run inferior Tcl process.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1143 Prefix arg means enter program name interactively.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1144 See documentation for function `inferior-tcl-mode' for more information."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1145 (interactive
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1146 (list (if current-prefix-arg
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1147 (read-string "Run Tcl: " tcl-application)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1148 tcl-application)))
57188
03a731220a33 * progmodes/tcl.el (inferior-tcl): Use pop-to-buffer.
Jesper Harder <harder@ifa.au.dk>
parents: 54770
diff changeset
1149 (unless (comint-check-proc "*inferior-tcl*")
03a731220a33 * progmodes/tcl.el (inferior-tcl): Use pop-to-buffer.
Jesper Harder <harder@ifa.au.dk>
parents: 54770
diff changeset
1150 (set-buffer (apply (function make-comint) "inferior-tcl" cmd nil
03a731220a33 * progmodes/tcl.el (inferior-tcl): Use pop-to-buffer.
Jesper Harder <harder@ifa.au.dk>
parents: 54770
diff changeset
1151 tcl-command-switches))
03a731220a33 * progmodes/tcl.el (inferior-tcl): Use pop-to-buffer.
Jesper Harder <harder@ifa.au.dk>
parents: 54770
diff changeset
1152 (inferior-tcl-mode))
03a731220a33 * progmodes/tcl.el (inferior-tcl): Use pop-to-buffer.
Jesper Harder <harder@ifa.au.dk>
parents: 54770
diff changeset
1153 (set (make-local-variable 'tcl-application) cmd)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1154 (setq inferior-tcl-buffer "*inferior-tcl*")
57188
03a731220a33 * progmodes/tcl.el (inferior-tcl): Use pop-to-buffer.
Jesper Harder <harder@ifa.au.dk>
parents: 54770
diff changeset
1155 (pop-to-buffer "*inferior-tcl*"))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1156
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1157 (defalias 'run-tcl 'inferior-tcl)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1158
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1159
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1160
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1161 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1162 ;; Auto-fill support.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1163 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1164
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1165 (defun tcl-real-command-p ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1166 "Return nil if point is not at the beginning of a command.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1167 A command is the first word on an otherwise empty line, or the
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1168 first word following a semicolon, opening brace, or opening bracket."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1169 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1170 (skip-chars-backward " \t")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1171 (cond
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1172 ((bobp) t)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1173 ((bolp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1174 (backward-char)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1175 ;; Note -- continued comments are not supported here. I
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1176 ;; consider those to be a wart on the language.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1177 (not (eq ?\\ (preceding-char))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1178 (t
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1179 (memq (preceding-char) '(?\; ?{ ?\[))))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1180
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1181 ;; FIXME doesn't actually return t. See last case.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1182 (defun tcl-real-comment-p ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1183 "Return t if point is just after the `#' beginning a real comment.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1184 Does not check to see if previous char is actually `#'.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1185 A real comment is either at the beginning of the buffer,
44227
a1c4f9151348 (tcl-imenu-create-index-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 43437
diff changeset
1186 preceded only by whitespace on the line, or has a preceding
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1187 semicolon, opening brace, or opening bracket on the same line."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1188 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1189 (backward-char)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1190 (tcl-real-command-p)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1191
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1192 (defun tcl-hairy-scan-for-comment (state end always-stop)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1193 "Determine if point is in a comment.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1194 Returns a list of the form `(FLAG . STATE)'. STATE can be used
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1195 as input to future invocations. FLAG is nil if not in comment,
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1196 t otherwise. If in comment, leaves point at beginning of comment.
25163
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
1197
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
1198 This function does not work in Emacs 18.
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
1199 See also `tcl-simple-scan-for-comment', a
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1200 simpler version that is often right, and works in Emacs 18."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1201 (let ((bol (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1202 (goto-char end)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1203 (beginning-of-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1204 (point)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1205 real-comment
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1206 last-cstart)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1207 (while (and (not last-cstart) (< (point) end))
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1208 (setq real-comment nil) ;In case we've looped around and it is set.
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1209 (setq state (parse-partial-sexp (point) end nil nil state t))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1210 (if (nth 4 state)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1211 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1212 ;; If ALWAYS-STOP is set, stop even if we don't have a
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1213 ;; real comment, or if the comment isn't on the same line
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1214 ;; as the end.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1215 (if always-stop (setq last-cstart (point)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1216 ;; If we have a real comment, then set the comment
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1217 ;; starting point if we are on the same line as the ending
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1218 ;; location.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1219 (setq real-comment (tcl-real-comment-p))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1220 (if real-comment
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1221 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1222 (and (> (point) bol) (setq last-cstart (point)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1223 ;; NOTE Emacs 19 has a misfeature whereby calling
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1224 ;; parse-partial-sexp with COMMENTSTOP set and with
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1225 ;; an initial list that says point is in a comment
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1226 ;; will cause an immediate return. So we must skip
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1227 ;; over the comment ourselves.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1228 (beginning-of-line 2)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1229 ;; Frob the state to make it look like we aren't in a
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1230 ;; comment.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1231 (setcar (nthcdr 4 state) nil))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1232 (and last-cstart
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1233 (goto-char last-cstart))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1234 (cons real-comment state)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1235
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1236 (defun tcl-in-comment ()
25163
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
1237 "Return t if point is in a comment, and leave point at beginning of comment."
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1238 (let ((save (point)))
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1239 (beginning-of-defun)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1240 (car (tcl-hairy-scan-for-comment nil save nil))))
7628
6fe5a25c0107 Fixed bug with M-;.
Tom Tromey <tromey@redhat.com>
parents: 7613
diff changeset
1241
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1242
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1243
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1244 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1245 ;; Help-related code.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1246 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1247
7052
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
1248 (defvar tcl-help-saved-dirs nil
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
1249 "Saved help directories.
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
1250 If `tcl-help-directory-list' changes, this allows `tcl-help-on-word'
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
1251 to update the alist.")
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1252
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1253 (defvar tcl-help-alist nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1254 "Alist with command names as keys and filenames as values.")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1255
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1256 (defun tcl-files-alist (dir &optional alist)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1257 "Recursively add all pairs (FILE . PATH) under DIR to ALIST."
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1258 (dolist (file (directory-files dir t) alist)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1259 (cond
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1260 ((not (file-directory-p file))
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1261 (push (cons (file-name-nondirectory file) file) alist))
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1262 ((member (file-name-nondirectory file) '("." "..")))
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1263 (t (setq alist (tcl-files-alist file alist))))))
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1264
7052
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
1265 (defun tcl-help-snarf-commands (dirlist)
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1266 "Return alist of commands and filenames."
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1267 (let ((alist nil))
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1268 (dolist (dir dirlist alist)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1269 (when (file-directory-p dir)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1270 (setq alist (tcl-files-alist dir alist))))))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1271
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1272 (defun tcl-reread-help-files ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1273 "Set up to re-read files, and then do it."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1274 (interactive)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1275 (message "Building Tcl help file index...")
7052
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
1276 (setq tcl-help-saved-dirs tcl-help-directory-list)
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1277 (setq tcl-help-alist (tcl-help-snarf-commands tcl-help-directory-list))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1278 (message "Building Tcl help file index...done"))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1279
12645
3ce3ca90e4a3 (tcl-word-no-props): New function.
Tom Tromey <tromey@redhat.com>
parents: 12644
diff changeset
1280 (defun tcl-word-no-props ()
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1281 "Like `current-word', but strips properties."
12645
3ce3ca90e4a3 (tcl-word-no-props): New function.
Tom Tromey <tromey@redhat.com>
parents: 12644
diff changeset
1282 (let ((word (current-word)))
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1283 (set-text-properties 0 (length word) nil word)
12645
3ce3ca90e4a3 (tcl-word-no-props): New function.
Tom Tromey <tromey@redhat.com>
parents: 12644
diff changeset
1284 word))
3ce3ca90e4a3 (tcl-word-no-props): New function.
Tom Tromey <tromey@redhat.com>
parents: 12644
diff changeset
1285
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1286 (defun tcl-current-word (flag)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1287 "Return current command word, or nil.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1288 If FLAG is nil, just uses `current-word'.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1289 Otherwise scans backward for most likely Tcl command word."
7799
1eb0d0f0f71b tcl-current-word does the right thing in inferior-tcl-mode.
Tom Tromey <tromey@redhat.com>
parents: 7781
diff changeset
1290 (if (and flag
1eb0d0f0f71b tcl-current-word does the right thing in inferior-tcl-mode.
Tom Tromey <tromey@redhat.com>
parents: 7781
diff changeset
1291 (memq major-mode '(tcl-mode inferior-tcl-mode)))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1292 (condition-case nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1293 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1294 ;; Look backward for first word actually in alist.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1295 (if (bobp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1296 ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1297 (while (and (not (bobp))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1298 (not (tcl-real-command-p)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1299 (backward-sexp)))
12645
3ce3ca90e4a3 (tcl-word-no-props): New function.
Tom Tromey <tromey@redhat.com>
parents: 12644
diff changeset
1300 (if (assoc (tcl-word-no-props) tcl-help-alist)
3ce3ca90e4a3 (tcl-word-no-props): New function.
Tom Tromey <tromey@redhat.com>
parents: 12644
diff changeset
1301 (tcl-word-no-props)))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1302 (error nil))
12645
3ce3ca90e4a3 (tcl-word-no-props): New function.
Tom Tromey <tromey@redhat.com>
parents: 12644
diff changeset
1303 (tcl-word-no-props)))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1304
8252
7d4674a34de3 Added ";;;###autoload" comments where appropriate.
Tom Tromey <tromey@redhat.com>
parents: 7799
diff changeset
1305 ;;;###autoload
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1306 (defun tcl-help-on-word (command &optional arg)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1307 "Get help on Tcl command. Default is word at point.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1308 Prefix argument means invert sense of `tcl-use-smart-word-finder'."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1309 (interactive
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1310 (list
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1311 (progn
7052
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
1312 (if (not (equal tcl-help-directory-list tcl-help-saved-dirs))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1313 (tcl-reread-help-files))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1314 (let ((word (tcl-current-word
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1315 (if current-prefix-arg
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1316 (not tcl-use-smart-word-finder)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1317 tcl-use-smart-word-finder))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1318 (completing-read
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1319 (if (or (null word) (string= word ""))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1320 "Help on Tcl command: "
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1321 (format "Help on Tcl command (default %s): " word))
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1322 tcl-help-alist nil t nil nil word)))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1323 current-prefix-arg))
7052
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
1324 (if (not (equal tcl-help-directory-list tcl-help-saved-dirs))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1325 (tcl-reread-help-files))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1326 (if (string= command "")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1327 (setq command (tcl-current-word
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1328 (if arg
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1329 (not tcl-use-smart-word-finder)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1330 tcl-use-smart-word-finder))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1331 (let* ((help (get-buffer-create "*Tcl help*"))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1332 (cell (assoc command tcl-help-alist))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1333 (file (and cell (cdr cell))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1334 (set-buffer help)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1335 (delete-region (point-min) (point-max))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1336 (if file
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1337 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1338 (insert "*** " command "\n\n")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1339 (insert-file-contents file))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1340 (if (string= command "")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1341 (insert "Magical Pig!")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1342 (insert "Tcl command " command " not in help\n")))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1343 (set-buffer-modified-p nil)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1344 (goto-char (point-min))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1345 (display-buffer help)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1346
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1347
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1348
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1349 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1350 ;; Other interactive stuff.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1351 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1352
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1353 (defvar tcl-previous-dir/file nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1354 "Record last directory and file used in loading.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1355 This holds a cons cell of the form `(DIRECTORY . FILE)'
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1356 describing the last `tcl-load-file' command.")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1357
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1358 (defun tcl-load-file (file &optional and-go)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1359 "Load a Tcl file into the inferior Tcl process.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1360 Prefix argument means switch to the Tcl buffer afterwards."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1361 (interactive
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1362 (list
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1363 ;; car because comint-get-source returns a list holding the
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1364 ;; filename.
8581
e7daed44da21 tcl-load-file default to current buffer.
Tom Tromey <tromey@redhat.com>
parents: 8580
diff changeset
1365 (car (comint-get-source "Load Tcl file: "
e7daed44da21 tcl-load-file default to current buffer.
Tom Tromey <tromey@redhat.com>
parents: 8580
diff changeset
1366 (or (and
e7daed44da21 tcl-load-file default to current buffer.
Tom Tromey <tromey@redhat.com>
parents: 8580
diff changeset
1367 (eq major-mode 'tcl-mode)
e7daed44da21 tcl-load-file default to current buffer.
Tom Tromey <tromey@redhat.com>
parents: 8580
diff changeset
1368 (buffer-file-name))
e7daed44da21 tcl-load-file default to current buffer.
Tom Tromey <tromey@redhat.com>
parents: 8580
diff changeset
1369 tcl-previous-dir/file)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1370 '(tcl-mode) t))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1371 current-prefix-arg))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1372 (comint-check-source file)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1373 (setq tcl-previous-dir/file (cons (file-name-directory file)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1374 (file-name-nondirectory file)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1375 (tcl-send-string (inferior-tcl-proc)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1376 (format inferior-tcl-source-command (tcl-quote file)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1377 (if and-go (switch-to-tcl t)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1378
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1379 (defun tcl-restart-with-file (file &optional and-go)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1380 "Restart inferior Tcl with file.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1381 If an inferior Tcl process exists, it is killed first.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1382 Prefix argument means switch to the Tcl buffer afterwards."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1383 (interactive
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1384 (list
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1385 (car (comint-get-source "Restart with Tcl file: "
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1386 (or (and
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1387 (eq major-mode 'tcl-mode)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1388 (buffer-file-name))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1389 tcl-previous-dir/file)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1390 '(tcl-mode) t))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1391 current-prefix-arg))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1392 (let* ((buf (if (eq major-mode 'inferior-tcl-mode)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1393 (current-buffer)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1394 inferior-tcl-buffer))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1395 (proc (and buf (get-process buf))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1396 (cond
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1397 ((not (and buf (get-buffer buf)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1398 ;; I think this will be ok.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1399 (inferior-tcl tcl-application)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1400 (tcl-load-file file and-go))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1401 ((or
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1402 (not (comint-check-proc buf))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1403 (yes-or-no-p
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1404 "A Tcl process is running, are you sure you want to reset it? "))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1405 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1406 (comint-check-source file)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1407 (setq tcl-previous-dir/file (cons (file-name-directory file)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1408 (file-name-nondirectory file)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1409 (comint-exec (get-buffer-create buf)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1410 (if proc
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1411 (process-name proc)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1412 "inferior-tcl")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1413 tcl-application file tcl-command-switches)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1414 (if and-go (switch-to-tcl t)))))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1415
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1416 (defun tcl-auto-fill-mode (&optional arg)
44320
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
1417 "Like `auto-fill-mode', but sets `comment-auto-fill-only-comments'."
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1418 (interactive "P")
44320
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
1419 (auto-fill-mode arg)
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
1420 (if auto-fill-function
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
1421 (set (make-local-variable 'comment-auto-fill-only-comments) t)
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
1422 (kill-local-variable 'comment-auto-fill-only-comments)))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1423
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1424 (defun tcl-electric-hash (&optional count)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1425 "Insert a `#' and quote if it does not start a real comment.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1426 Prefix arg is number of `#'s to insert.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1427 See variable `tcl-electric-hash-style' for description of quoting
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1428 styles."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1429 (interactive "p")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1430 (or count (setq count 1))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1431 (if (> count 0)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1432 (let ((type
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1433 (if (eq tcl-electric-hash-style 'smart)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1434 (if (> count 3) ; FIXME what is "smart"?
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1435 'quote
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1436 'backslash)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1437 tcl-electric-hash-style))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1438 comment)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1439 (if type
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1440 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1441 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1442 (insert "#")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1443 (setq comment (tcl-in-comment)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1444 (delete-char 1)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1445 (and tcl-explain-indentation (message "comment: %s" comment))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1446 (cond
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1447 ((eq type 'quote)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1448 (if (not comment)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1449 (insert "\"")))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1450 ((eq type 'backslash)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1451 ;; The following will set count to 0, so the
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1452 ;; insert-char can still be run.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1453 (if (not comment)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1454 (while (> count 0)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1455 (insert "\\#")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1456 (setq count (1- count)))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1457 (t nil))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1458 (insert-char ?# count))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1459
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1460 (defun tcl-hashify-buffer ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1461 "Quote all `#'s in current buffer that aren't Tcl comments."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1462 (interactive)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1463 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1464 (goto-char (point-min))
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1465 (let (state
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1466 result)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1467 (while (< (point) (point-max))
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1468 (setq result (tcl-hairy-scan-for-comment state (point-max) t))
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1469 (if (car result)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1470 (beginning-of-line 2)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1471 (backward-char)
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1472 (if (eq ?# (following-char))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1473 (insert "\\"))
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1474 (forward-char))
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1475 (setq state (cdr result))))))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1476
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1477 (defun tcl-comment-indent ()
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1478 "Return the desired indentation, but be careful to add a `;' if needed."
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1479 (save-excursion
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1480 ;; If line is not blank, make sure we insert a ";" first.
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1481 (skip-chars-backward " \t")
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1482 (unless (or (bolp) (tcl-real-command-p))
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1483 (insert ";")
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1484 ;; Try and erase a non-significant char to keep charpos identical.
64053
fd24f2ae0e10 (tcl): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 62531
diff changeset
1485 (if (memq (char-after) '(?\t ?\s)) (delete-char 1))))
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1486 (funcall (default-value 'comment-indent-function)))
7052
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
1487
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1488 ;; The following was inspired by the Tcl editing mode written by
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1489 ;; Gregor Schmid <schmid@fb3-s7.math.TU-Berlin.DE>. His version also
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1490 ;; attempts to snarf the command line options from the command line,
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1491 ;; but I didn't think that would really be that helpful (doesn't seem
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1492 ;; like it would be right enough. His version also looks for the
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1493 ;; "#!/bin/csh ... exec" hack, but that seemed even less useful.
7052
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
1494 ;; FIXME should make sure that the application mentioned actually
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
1495 ;; exists.
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1496 (defun tcl-guess-application ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1497 "Attempt to guess Tcl application by looking at first line.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1498 The first line is assumed to look like \"#!.../program ...\"."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1499 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1500 (goto-char (point-min))
8580
648f78c8ecf5 Fixed bug in tcl-guess-application.
Tom Tromey <tromey@redhat.com>
parents: 8575
diff changeset
1501 (if (looking-at "#![^ \t]*/\\([^ \t\n/]+\\)\\([ \t]\\|$\\)")
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1502 (set (make-local-variable 'tcl-application) (match-string 1)))))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1503
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1504
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1505
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1506 ;;
11787
635f5fb5d82a Changed "Lucid Emacs" to "XEmacs".
Tom Tromey <tromey@redhat.com>
parents: 11303
diff changeset
1507 ;; XEmacs menu support.
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1508 ;; Taken from schmid@fb3-s7.math.TU-Berlin.DE (Gregor Schmid),
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1509 ;; who wrote a different Tcl mode.
25163
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
1510 ;; We also have support for menus in Emacs. We do this by
11787
635f5fb5d82a Changed "Lucid Emacs" to "XEmacs".
Tom Tromey <tromey@redhat.com>
parents: 11303
diff changeset
1511 ;; loading the XEmacs menu emulation code.
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1512 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1513
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1514 (defun tcl-popup-menu (e)
7612
3b16e6ed71cf Fixed menu support.
Tom Tromey <tromey@redhat.com>
parents: 7288
diff changeset
1515 (interactive "@e")
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1516 (popup-menu tcl-mode-menu))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1517
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1518
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1519
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1520 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1521 ;; Quoting and unquoting functions.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1522 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1523
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1524 ;; This quoting is sufficient to protect eg a filename from any sort
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1525 ;; of expansion or splitting. Tcl quoting sure sucks.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1526 (defun tcl-quote (string)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1527 "Quote STRING according to Tcl rules."
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1528 (mapconcat (lambda (char)
64053
fd24f2ae0e10 (tcl): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 62531
diff changeset
1529 (if (memq char '(?[ ?] ?{ ?} ?\\ ?\" ?$ ?\s ?\;))
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1530 (concat "\\" (char-to-string char))
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1531 (char-to-string char)))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1532 string ""))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1533
7628
6fe5a25c0107 Fixed bug with M-;.
Tom Tromey <tromey@redhat.com>
parents: 7613
diff changeset
1534 ;;
6fe5a25c0107 Fixed bug with M-;.
Tom Tromey <tromey@redhat.com>
parents: 7613
diff changeset
1535 ;; Bug reporting.
6fe5a25c0107 Fixed bug with M-;.
Tom Tromey <tromey@redhat.com>
parents: 7613
diff changeset
1536 ;;
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1537
7628
6fe5a25c0107 Fixed bug with M-;.
Tom Tromey <tromey@redhat.com>
parents: 7613
diff changeset
1538
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1539 ;; These are relics kept "just in case".
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1540 (defalias 'tcl-uncomment-region 'uncomment-region)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1541 (defalias 'tcl-indent-for-comment 'comment-indent)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1542 (defalias 'add-log-tcl-defun 'tcl-add-log-defun)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1543 (defalias 'indent-tcl-exp 'tcl-indent-exp)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1544 (defalias 'calculate-tcl-indent 'tcl-calculate-indent)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1545 (defalias 'tcl-beginning-of-defun 'beginning-of-defun)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1546 (defalias 'tcl-end-of-defun 'end-of-defun)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1547 (defalias 'tcl-mark-defun 'mark-defun)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1548 (defun tcl-mark () (mark t))
7628
6fe5a25c0107 Fixed bug with M-;.
Tom Tromey <tromey@redhat.com>
parents: 7613
diff changeset
1549
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1550 (provide 'tcl)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1551
61246
ee782d6579a8 (tcl-set-font-lock-keywords): Use new \_< ops.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58563
diff changeset
1552 ;; arch-tag: 8a032554-c3ef-422e-b84c-acec0522179d
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1553 ;;; tcl.el ends here