annotate lisp/progmodes/tcl.el @ 63308:51d38cfbe542

Warn about using "cvs up -kb" if one intends to commit changes. Add a pointer to another site with detailed configure and build instructions. Suggest to look at config.log when configure fails. Add MinGW Make 3.80 to the list of successful combinations.
author Eli Zaretskii <eliz@gnu.org>
date Sat, 11 Jun 2005 11:31:29 +0000
parents c905fcf5e3d9
children fd24f2ae0e10 21eea50897a7 f042e7c0fe20
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
61246
ee782d6579a8 (tcl-set-font-lock-keywords): Use new \_< ops.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58563
diff changeset
3 ;; Copyright (C) 1994, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
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
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
25 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
26 ;; Boston, MA 02111-1307, 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
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
121 "Major mode for editing Tcl source in Emacs"
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
122 :group 'languages)
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
123
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
124 (defcustom tcl-indent-level 4
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
125 "*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
126 :type 'integer
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
127 :group 'tcl)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
128
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
129 (defcustom tcl-continued-indent-level 4
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
130 "*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
131 :type 'integer
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
132 :group 'tcl)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
133
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
134 (defcustom tcl-auto-newline nil
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
135 "*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
136 :type 'boolean
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
137 :group 'tcl)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
138
51056
5dbeffb17d8e (tcl-indent-exp): Remove dead code.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50856
diff changeset
139 (defcustom tcl-tab-always-indent tab-always-indent
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
140 "*Control effect of TAB key.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
141 If t (the default), always indent current line.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
142 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
143 the line, a TAB is inserted.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
144 Other values cause the first possible action from the following list
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
145 to take place:
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
146
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
147 1. Move from beginning of line to correct indentation.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
148 2. Delete an empty comment.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
149 3. Move forward to start of comment, indenting if necessary.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
150 4. Move forward to end of line, indenting if necessary.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
151 5. Create an empty comment.
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
152 6. Move backward to start of comment, indenting if necessary."
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
153 :type '(choice (const :tag "Always" t)
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
154 (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
155 (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
156 :group 'tcl)
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
157
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
158
44320
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
159 (defcustom tcl-electric-hash-style nil ;; 'smart
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
160 "*Style of electric hash insertion to use.
25163
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
161 Possible values are `backslash', meaning that `\\' quoting should be
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
162 done; `quote', meaning that `\"' quoting should be done; `smart',
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
163 meaning that the choice between `backslash' and `quote' should be
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
164 made depending on the number of hashes inserted; or nil, meaning that
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
165 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
166 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
167 :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
168 :group 'tcl)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
169
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
170 (defcustom tcl-help-directory-list nil
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
171 "*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
172 :type '(repeat directory)
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
173 :group 'tcl)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
174
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
175 (defcustom tcl-use-smart-word-finder t
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
176 "*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
177 :type 'boolean
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
178 :group 'tcl)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
179
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
180 (defcustom tcl-application "wish"
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
181 "*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
182 :type 'string
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
183 :group 'tcl)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
184
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
185 (defcustom tcl-command-switches nil
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
186 "*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
187 :type '(repeat string)
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
188 :group 'tcl)
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
189
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
190 (defcustom tcl-prompt-regexp "^\\(% \\|\\)"
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
191 "*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
192 If nil, the prompt is the name of the application with \">\" appended.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
193
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
194 The default is \"^\\(% \\|\\)\", which will match the default primary
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
195 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
196 :type 'regexp
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
197 :group 'tcl)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
198
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
199 (defcustom inferior-tcl-source-command "source %s\n"
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
200 "*Format-string for building a Tcl command to load a file.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
201 This format string should use `%s' to substitute a file name
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
202 and should result in a Tcl expression that will command the
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
203 inferior Tcl to load that file. The filename will be appropriately
25176
51eb4568f70b Customized.
Richard M. Stallman <rms@gnu.org>
parents: 25163
diff changeset
204 quoted for Tcl."
62531
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
205 :type 'string
c905fcf5e3d9 Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents: 61314
diff changeset
206 :group 'tcl)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
207
61314
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
208 (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
209 "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
210 :group 'tcl
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
211 :version "22.1")
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
212
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
213 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
214 ;; Keymaps, abbrevs, syntax tables.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
215 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
216
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
217 (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
218 (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
219 (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
220 (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
221 (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
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-hash) ;Remove? -stef
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 "\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
226 (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
227 (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
228 (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
229 (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
230 (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
231 (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
232 (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
233 (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
234 (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
235 map)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
236 "Keymap used in `tcl-mode'.")
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
237
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
238 (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
239 (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
240 (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
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) ; FIXME use "'"?
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)
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 ?\n ">" 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 ?\f ">" 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 ?# "<" st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
262 st)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
263 "Syntax table in use in `tcl-mode' buffers.")
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
264
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
265 (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
266 ;; 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
267 ;; 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
268 (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
269 ;; 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
270 (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
271 (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
272 (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
273 (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
274 (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
275 (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
276 (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
277 (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
278 (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
279 (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
280 map)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
281 "Keymap used in `inferior-tcl-mode'.")
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
282
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
283 (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
284 '("Tcl"
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
285 ["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
286 ["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
287 ["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
288 ["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
289 ["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
290 ["Uncomment region" uncomment-region (mark t)]
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
291 "----"
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
292 ["Show Tcl process buffer" inferior-tcl t]
7687
6447f9b3c966 Menu items now sensitive as appropriate.
Tom Tromey <tromey@redhat.com>
parents: 7635
diff changeset
293 ["Send function to Tcl process" tcl-eval-defun
7781
22449aa6d5ae Another menu fix.
Tom Tromey <tromey@redhat.com>
parents: 7780
diff changeset
294 (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
295 ["Send region to Tcl process" tcl-eval-region
7781
22449aa6d5ae Another menu fix.
Tom Tromey <tromey@redhat.com>
parents: 7780
diff changeset
296 (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
297 ["Send file to Tcl process" tcl-load-file
7781
22449aa6d5ae Another menu fix.
Tom Tromey <tromey@redhat.com>
parents: 7780
diff changeset
298 (and inferior-tcl-buffer (get-buffer inferior-tcl-buffer))]
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
299 ["Restart Tcl process with file" tcl-restart-with-file t]
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
300 "----"
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
301 ["Tcl help" tcl-help-on-word tcl-help-directory-list]))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
302
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
303 (defvar inferior-tcl-buffer nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
304 "*The current inferior-tcl process buffer.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
305
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
306 MULTIPLE PROCESS SUPPORT
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
307 ===========================================================================
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
308 To run multiple Tcl processes, you start the first up with
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
309 \\[inferior-tcl]. It will be in a buffer named `*inferior-tcl*'.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
310 Rename this buffer with \\[rename-buffer]. You may now start up a new
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
311 process with another \\[inferior-tcl]. It will be in a new buffer,
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
312 named `*inferior-tcl*'. You can switch between the different process
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
313 buffers with \\[switch-to-buffer].
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
314
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
315 Commands that send text from source buffers to Tcl processes -- like
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
316 `tcl-eval-defun' or `tcl-load-file' -- have to choose a process to
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
317 send to, when you have more than one Tcl process around. This is
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
318 determined by the global variable `inferior-tcl-buffer'. Suppose you
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
319 have three inferior Lisps running:
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
320 Buffer Process
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
321 foo inferior-tcl
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
322 bar inferior-tcl<2>
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
323 *inferior-tcl* inferior-tcl<3>
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
324 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
325 process do you send it to?
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
326
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48192
diff changeset
327 - If you're in a process buffer (foo, bar, or *inferior-tcl*),
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
328 you send it to that process.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
329 - If you're in some other buffer (e.g., a source file), you
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
330 send it to the process attached to buffer `inferior-tcl-buffer'.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
331 This process selection is performed by function `inferior-tcl-proc'.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
332
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
333 Whenever \\[inferior-tcl] fires up a new process, it resets
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
334 `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
335 one process, this does the right thing. If you run multiple
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
336 processes, you can change `inferior-tcl-buffer' to another process
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
337 buffer with \\[set-variable].")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
338
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
339 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
340 ;; Hooks and other customization.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
341 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
342
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
343 (defvar tcl-mode-hook nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
344 "Hook run on entry to Tcl mode.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
345
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
346 Several functions exist which are useful to run from your
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
347 `tcl-mode-hook' (see each function's documentation for more
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
348 information):
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
349
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
350 `tcl-guess-application'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
351 Guesses a default setting for `tcl-application' based on any
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
352 \"#!\" 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
353 `tcl-hashify-buffer'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
354 Quotes all \"#\" characters that don't correspond to actual
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
355 Tcl comments. (Useful when editing code not originally created
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
356 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
357 `tcl-auto-fill-mode'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
358 Auto-filling of Tcl comments.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
359
25163
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
360 Add functions to the hook with `add-hook':
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
361
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
362 (add-hook 'tcl-mode-hook 'tcl-guess-application)")
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
363
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
364
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
365 (defvar tcl-proc-list
24954
503bd9d97ac4 (tcl-proc-list): Reverted; already had `body'.
Tom Tromey <tromey@redhat.com>
parents: 24953
diff changeset
366 '("proc" "method" "itcl_class" "body" "configbody" "class")
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
367 "List of commands whose first argument defines something.
25163
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
368 This exists because some people (eg, me) use `defvar' et al.
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
369 Call `tcl-set-proc-regexp' and `tcl-set-font-lock-keywords'
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
370 after changing this list.")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
371
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
372 (defvar tcl-proc-regexp nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
373 "Regexp to use when matching proc headers.")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
374
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
375 (defvar tcl-typeword-list
22662
f0078b7750b7 Some itcl additions:
Tom Tromey <tromey@redhat.com>
parents: 16170
diff changeset
376 '("global" "upvar" "inherit" "public" "protected" "private"
24957
e26249ed0833 (tcl-typeword-list): Added `variable'.
Tom Tromey <tromey@redhat.com>
parents: 24956
diff changeset
377 "common" "itk_option" "variable")
7612
3b16e6ed71cf Fixed menu support.
Tom Tromey <tromey@redhat.com>
parents: 7288
diff changeset
378 "List of Tcl keywords denoting \"type\". Used only for highlighting.
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
379 Call `tcl-set-font-lock-keywords' after changing this list.")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
380
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
381 ;; Generally I've picked control operators to be keywords.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
382 (defvar tcl-keyword-list
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
383 '("if" "then" "else" "elseif" "for" "foreach" "break" "continue" "while"
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
384 "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
385 "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
386 "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
387 "chain")
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
388 "List of Tcl keywords. Used only for highlighting.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
389 Default list includes some TclX keywords.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
390 Call `tcl-set-font-lock-keywords' after changing this list.")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
391
61314
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
392 (defvar tcl-builtin-list
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
393 '("after" "append" "array" "bgerror" "binary" "catch" "cd" "clock"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
394 "close" "concat" "console" "dde" "encoding" "eof" "exec" "expr"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
395 "fblocked" "fconfigure" "fcopy" "file" "fileevent" "flush"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
396 "format" "gets" "glob" "history" "incr" "info" "interp" "join"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
397 "lappend" "lindex" "linsert" "list" "llength" "load" "lrange"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
398 "lreplace" "lsort" "namespace" "open" "package" "pid" "puts" "pwd"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
399 "read" "regexp" "registry" "regsub" "rename" "scan" "seek" "set"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
400 "socket" "source" "split" "string" "subst" "tell" "time" "trace"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
401 "unknown" "unset" "vwait")
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
402 "List of Tcl commands. Used only for highlighting.
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
403 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
404 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
405 `tcl-keyword-list'.")
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
406
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
407 (defvar tcl-font-lock-keywords nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
408 "Keywords to highlight for Tcl. See variable `font-lock-keywords'.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
409 This variable is generally set from `tcl-proc-regexp',
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
410 `tcl-typeword-list', and `tcl-keyword-list' by the function
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
411 `tcl-set-font-lock-keywords'.")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
412
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
413 (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
414 ;; 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
415 '(("[^;[{ \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
416 "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
417
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
418 ;; FIXME need some way to recognize variables because array refs look
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
419 ;; like 2 sexps.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
420 (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
421 '(("proc" nil tcl-expr tcl-commands)
12404
cf59ada47a1c More changes for itcl.
Tom Tromey <tromey@redhat.com>
parents: 12403
diff changeset
422 ("method" nil tcl-expr tcl-commands)
12405
abcf4791a9b0 (tcl-type-alist): More itcl changes.
Tom Tromey <tromey@redhat.com>
parents: 12404
diff changeset
423 ("destructor" tcl-commands)
abcf4791a9b0 (tcl-type-alist): More itcl changes.
Tom Tromey <tromey@redhat.com>
parents: 12404
diff changeset
424 ("constructor" tcl-commands)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
425 ("expr" tcl-expr)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
426 ("catch" tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
427 ("if" tcl-expr "then" tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
428 ("elseif" tcl-expr "then" tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
429 ("elseif" tcl-expr tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
430 ("if" tcl-expr tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
431 ("while" tcl-expr tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
432 ("for" tcl-commands tcl-expr tcl-commands tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
433 ("foreach" nil nil tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
434 ("for_file" nil nil tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
435 ("for_array_keys" nil nil tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
436 ("for_recursive_glob" nil nil nil tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
437 ;; Loop handling is not perfect, because the third argument can be
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
438 ;; 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
439 ;; forward.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
440 ("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
441 ("loop" nil tcl-expr tcl-commands))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
442 "Alist that controls indentation.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
443 \(Actually, this really only controls what happens on continuation lines).
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
444 Each entry looks like `(KEYWORD TYPE ...)'.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
445 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
446 * nil, meaning that this sexp has no particular type.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
447 * tcl-expr, meaning that this sexp is an arithmetic expression.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
448 * tcl-commands, meaning that this sexp holds Tcl commands.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
449 * a string, which must exactly match the string at the corresponding
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
450 position for a match to be made.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
451
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
452 For example, the entry for the \"loop\" command is:
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
453
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
454 (\"loop\" nil tcl-expr tcl-commands)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
455
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
456 This means that the \"loop\" command has three arguments. The first
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
457 argument is ignored (for indentation purposes). The second argument
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
458 is a Tcl expression, and the last argument is Tcl commands.")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
459
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
460 (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
461 "If non-nil, debugging message will be printed during indentation.")
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
462
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
463
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
464
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
465 ;; 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
466 ;; 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
467 ;; 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
468 ;; 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
469 ;; 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
470 ;; 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
471 ;; 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
472 ;; 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
473 ;; 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
474 (defconst tcl-omit-ws-regexp "^[^]\" \t\n#}][^\n\"#]+[ \t]+")
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
475
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 ;; Some helper functions.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
480 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
481
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
482 (defun tcl-set-proc-regexp ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
483 "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
484 (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
485 (concat "^\\s-*" (regexp-opt tcl-proc-list t) "[ \t]+")))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
486
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
487 (defun tcl-set-font-lock-keywords ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
488 "Set `tcl-font-lock-keywords'.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
489 Uses variables `tcl-proc-regexp' and `tcl-keyword-list'."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
490 (setq tcl-font-lock-keywords
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
491 (list
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
492 ;; Names of functions (and other "defining things").
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
493 (list (concat tcl-proc-regexp "\\([^ \t\n]+\\)")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
494 2 'font-lock-function-name-face)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
495
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
496 ;; 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
497 (list (concat "\\(\\s-\\|^\\)"
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
498 (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
499 "\\(\\s-\\|$\\)")
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
500 2 'font-lock-type-face)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
501
61314
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
502 (list (concat "\\_<" (regexp-opt tcl-builtin-list t) "\\_>")
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
503 1 'font-lock-builtin-face)
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
504
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
505 ;; When variable names are enclosed in {} braces, any
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
506 ;; character can be used. Otherwise just letters, digits,
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
507 ;; underscores. Variable names can be prefixed with any
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
508 ;; number of "namespace::" qualifiers. A leading "::" refers
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
509 ;; to the global namespace.
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
510 '("\\${\\([^}]+\\)}" 1 font-lock-variable-name-face)
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
511 '("\\$\\(\\(?:::\\)?\\(?:[[:alnum:]_]+::\\)*[[:alnum:]_]+\\)"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
512 1 font-lock-variable-name-face)
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
513 '("\\(?:\\s-\\|^\\|\\[\\)set\\s-+{\\([^}]+\\)}"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
514 1 font-lock-variable-name-face keep)
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
515 '("\\(?:\\s-\\|^\\|\\[\\)set\\s-+\\(\\(?:::\\)?\
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
516 \\(?:[[:alnum:]_]+::\\)*[[:alnum:]_]+\\)"
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
517 1 font-lock-variable-name-face keep)
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
518
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
519 '("\\(^\\|[^\\]\\)\\(\\\\\\\\\\)*\\(\\\\\\)$" 3 'tcl-escaped-newline)
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
520
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
521 ;; Keywords. Only recognized if surrounded by whitespace.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
522 ;; FIXME consider using "not word or symbol", not
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
523 ;; "whitespace".
61246
ee782d6579a8 (tcl-set-font-lock-keywords): Use new \_< ops.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58563
diff changeset
524 (cons (concat "\\_<" (regexp-opt tcl-keyword-list t) "\\_>")
61314
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
525 1))))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
526
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
527 (if tcl-proc-regexp
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
528 ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
529 (tcl-set-proc-regexp))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
530
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
531 (if tcl-font-lock-keywords
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
532 ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
533 (tcl-set-font-lock-keywords))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
534
44316
443cf26a410a (tcl-imenu-generic-expression): New value.
Richard M. Stallman <rms@gnu.org>
parents: 44227
diff changeset
535
443cf26a410a (tcl-imenu-generic-expression): New value.
Richard M. Stallman <rms@gnu.org>
parents: 44227
diff changeset
536 (defvar tcl-imenu-generic-expression
44320
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
537 `((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
538 "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
539
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
540
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 ;; The mode itself.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
544 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
545
8252
7d4674a34de3 Added ";;;###autoload" comments where appropriate.
Tom Tromey <tromey@redhat.com>
parents: 7799
diff changeset
546 ;;;###autoload
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
547 (define-derived-mode tcl-mode nil "Tcl"
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
548 "Major mode for editing Tcl code.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
549 Expression and list commands understand all Tcl brackets.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
550 Tab indents for Tcl code.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
551 Paragraphs are separated by blank lines only.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
552 Delete converts tabs to spaces as it moves back.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
553
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
554 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
555 `tcl-indent-level'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
556 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
557 `tcl-continued-indent-level'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
558 Indentation of continuation line relative to first line of command.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
559
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
560 Variables controlling user interaction with mode (see variable
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
561 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
562 `tcl-tab-always-indent'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
563 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
564 `tcl-auto-newline'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
565 Non-nil means automatically newline before and after braces, brackets,
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
566 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
567 `tcl-use-smart-word-finder'
12644
35800a352783 Doc fixes.
Tom Tromey <tromey@redhat.com>
parents: 12524
diff changeset
568 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
569 word when looking up help on a Tcl command.
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
570
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
571 Turning on Tcl mode runs `tcl-mode-hook'. Read the documentation for
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
572 `tcl-mode-hook' to see what kinds of interesting hook functions
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
573 already exist.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
574
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
575 Commands:
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
576 \\{tcl-mode-map}"
44316
443cf26a410a (tcl-imenu-generic-expression): New value.
Richard M. Stallman <rms@gnu.org>
parents: 44227
diff changeset
577 (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
578 (set (make-local-variable 'paragraph-ignore-fill-prefix) t))
7612
3b16e6ed71cf Fixed menu support.
Tom Tromey <tromey@redhat.com>
parents: 7288
diff changeset
579
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
580 (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
581 (set (make-local-variable 'comment-indent-function) 'tcl-comment-indent)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
582 ;; Tcl doesn't require a final newline.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
583 ;; (make-local-variable 'require-final-newline)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
584 ;; (setq require-final-newline t)
7612
3b16e6ed71cf Fixed menu support.
Tom Tromey <tromey@redhat.com>
parents: 7288
diff changeset
585
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
586 (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
587 (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
588 "\\(\\(^\\|[;{[]\\)\\s-*\\)#+ *")
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
589 (set (make-local-variable 'comment-end) "")
11303
7823947372f9 (tcl-outline-level): New function
Tom Tromey <tromey@redhat.com>
parents: 9428
diff changeset
590
48192
1acfacdf062a (tcl-mode): Don't set paragraph-start,
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44320
diff changeset
591 (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
592 (set (make-local-variable 'outline-level) 'tcl-outline-level)
7612
3b16e6ed71cf Fixed menu support.
Tom Tromey <tromey@redhat.com>
parents: 7288
diff changeset
593
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
594 (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
595 '(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
596 (font-lock-syntactic-keywords . tcl-font-lock-syntactic-keywords)
19126e0f7481 (tcl-escaped-newline): New face.
Glenn Morris <rgm@gnu.org>
parents: 61246
diff changeset
597 (parse-sexp-lookup-properties . t)))
12517
2f90abd1c659 (tcl-mode): Customize for new dabbrev.
Tom Tromey <tromey@redhat.com>
parents: 12515
diff changeset
598
44316
443cf26a410a (tcl-imenu-generic-expression): New value.
Richard M. Stallman <rms@gnu.org>
parents: 44227
diff changeset
599 (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
600 tcl-imenu-generic-expression)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48192
diff changeset
601
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
602 ;; 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
603 (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
604 (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
605 (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
606 (set (make-local-variable 'dabbrev-abbrev-char-regexp) "\\sw\\|\\s_")
7612
3b16e6ed71cf Fixed menu support.
Tom Tromey <tromey@redhat.com>
parents: 7288
diff changeset
607
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
608 ;; 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
609 ;; 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
610 (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
611 ;; 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
612 ;; 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
613 ;; beginning-of-defun.
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
614 (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
615 ;; 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
616 ;; 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
617 (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
618 '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
619
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
620 (easy-menu-add tcl-mode-menu)
11787
635f5fb5d82a Changed "Lucid Emacs" to "XEmacs".
Tom Tromey <tromey@redhat.com>
parents: 11303
diff changeset
621 ;; 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
622 (if (boundp 'mode-popup-menu)
12520
ad24dd8cec5c Changes to make menus work in XEmacs.
Tom Tromey <tromey@redhat.com>
parents: 12517
diff changeset
623 (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
624 (cons (concat mode-name " Mode Commands") tcl-mode-menu))))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
625
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 ;; This is used for braces, brackets, and semi (except for closing
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
629 ;; braces, which are handled specially).
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
630 (defun tcl-electric-char (arg)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
631 "Insert character and correct line's indentation."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
632 (interactive "p")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
633 ;; Indent line first; this looks better if parens blink.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
634 (tcl-indent-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
635 (self-insert-command arg)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
636 (if (and tcl-auto-newline (= last-command-char ?\;))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
637 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
638 (newline)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
639 (tcl-indent-line))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
640
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
641 ;; This is used for closing braces. If tcl-auto-newline is set, can
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
642 ;; insert a newline both before and after the brace, depending on
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
643 ;; context. FIXME should this be configurable? Does anyone use this?
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
644 (defun tcl-electric-brace (arg)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
645 "Insert character and correct line's indentation."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
646 (interactive "p")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
647 ;; If auto-newlining and there is stuff on the same line, insert a
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
648 ;; newline first.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
649 (if tcl-auto-newline
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
650 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
651 (if (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
652 (skip-chars-backward " \t")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
653 (bolp))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
654 ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
655 (tcl-indent-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
656 (newline))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
657 ;; In auto-newline case, must insert a newline after each
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
658 ;; brace. So an explicit loop is needed.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
659 (while (> arg 0)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
660 (insert last-command-char)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
661 (tcl-indent-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
662 (newline)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
663 (setq arg (1- arg))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
664 (self-insert-command arg))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
665 (tcl-indent-line))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
666
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 (defun tcl-indent-command (&optional arg)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
670 "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
671 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
672 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
673 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
674 Other values of `tcl-tab-always-indent' cause the first possible action
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
675 from the following list to take place:
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
676
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
677 1. Move from beginning of line to correct indentation.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
678 2. Delete an empty comment.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
679 3. Move forward to start of comment, indenting if necessary.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
680 4. Move forward to end of line, indenting if necessary.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
681 5. Create an empty comment.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
682 6. Move backward to start of comment, indenting if necessary."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
683 (interactive "p")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
684 (cond
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
685 ((not tcl-tab-always-indent)
7052
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
686 ;; Indent if in indentation area, otherwise insert TAB.
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
687 (if (<= (current-column) (current-indentation))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
688 (tcl-indent-line)
16170
2e26cb0991de (tcl-indent-command): Use insert-tab, not self-insert-command.
Tom Tromey <tromey@redhat.com>
parents: 14865
diff changeset
689 (insert-tab arg)))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
690 ((eq tcl-tab-always-indent t)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
691 ;; Always indent.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
692 (tcl-indent-line))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
693 (t
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
694 ;; "Perl-mode" style TAB command.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
695 (let* ((ipoint (point))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
696 (eolpoint (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
697 (end-of-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
698 (point)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
699 (comment-p (tcl-in-comment)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
700 (cond
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
701 ((= ipoint (line-beginning-position))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
702 (beginning-of-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
703 (tcl-indent-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
704 ;; If indenting didn't leave us in column 0, go to the
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
705 ;; indentation. Otherwise leave point at end of line. This
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
706 ;; 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
707 (if (= (point) (line-beginning-position))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
708 (end-of-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
709 (back-to-indentation)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
710 ((and comment-p (looking-at "[ \t]*$"))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
711 ;; Empty comment, so delete it. We also delete any ";"
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
712 ;; characters at the end of the line. I think this is
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
713 ;; friendlier, but I don't know how other people will feel.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
714 (backward-char)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
715 (skip-chars-backward " \t;")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
716 (delete-region (point) eolpoint))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
717 ((and comment-p (< ipoint (point)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
718 ;; Before comment, so skip to it.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
719 (tcl-indent-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
720 (indent-for-comment))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
721 ((/= ipoint eolpoint)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
722 ;; Go to end of line (since we're not there yet).
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
723 (goto-char eolpoint)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
724 (tcl-indent-line))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
725 ((not comment-p)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
726 (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
727 (comment-indent))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
728 (t
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
729 ;; Go to start of comment. We don't leave point where it is
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
730 ;; because we want to skip comment-start-skip.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
731 (tcl-indent-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
732 (indent-for-comment)))))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
733
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
734 (defun tcl-indent-line ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
735 "Indent current line as Tcl code.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
736 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
737 (let ((indent (tcl-calculate-indent nil))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
738 beg shift-amt
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
739 (case-fold-search nil)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
740 (pos (- (point-max) (point))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
741 (beginning-of-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
742 (setq beg (point))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
743 (cond ((eq indent nil)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
744 (setq indent (current-indentation)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
745 (t
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
746 (skip-chars-forward " \t")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
747 (if (listp indent) (setq indent (car indent)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
748 (cond ((= (following-char) ?})
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
749 (setq indent (- indent tcl-indent-level)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
750 ((= (following-char) ?\])
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
751 (setq indent (- indent 1))))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
752 (skip-chars-forward " \t")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
753 (setq shift-amt (- indent (current-column)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
754 (if (zerop shift-amt)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
755 (if (> (- (point-max) pos) (point))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
756 (goto-char (- (point-max) pos)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
757 (delete-region beg (point))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
758 (indent-to indent)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
759 ;; If initial point was within line's indentation,
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
760 ;; position after the indentation. Else stay at same point in text.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
761 (if (> (- (point-max) pos) (point))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
762 (goto-char (- (point-max) pos))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
763 shift-amt))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
764
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
765 (defun tcl-figure-type ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
766 "Determine type of sexp at point.
25163
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
767 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
768 of sexp that indicates types.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
769
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
770 See documentation for variable `tcl-type-alist' for more information."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
771 (let ((count 0)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
772 result
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
773 word-stack)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
774 (while (and (< count 5)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
775 (not result))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
776 (condition-case nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
777 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
778 ;; FIXME should use "tcl-backward-sexp", which would skip
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
779 ;; over entire variables, etc.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
780 (backward-sexp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
781 (if (looking-at "[a-zA-Z_]+")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
782 (let ((list tcl-type-alist)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
783 entry)
12645
3ce3ca90e4a3 (tcl-word-no-props): New function.
Tom Tromey <tromey@redhat.com>
parents: 12644
diff changeset
784 (setq word-stack (cons (tcl-word-no-props) word-stack))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
785 (while (and list (not result))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
786 (setq entry (car list))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
787 (setq list (cdr list))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
788 (let ((index 0))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
789 (while (and entry (<= index count))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
790 ;; Abort loop if string does not match word on
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
791 ;; stack.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
792 (and (stringp (car entry))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
793 (not (string= (car entry)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
794 (nth index word-stack)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
795 (setq entry nil))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
796 (setq entry (cdr entry))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
797 (setq index (1+ index)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
798 (and (> index count)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
799 (not (stringp (car entry)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
800 (setq result (car entry)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
801 )))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
802 (setq word-stack (cons nil word-stack))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
803 (error nil))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
804 (setq count (1+ count)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
805 (and tcl-explain-indentation
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
806 (message "Indentation type %s" result))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
807 result))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
808
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
809 (defun tcl-calculate-indent (&optional parse-start)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
810 "Return appropriate indentation for current line as Tcl code.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
811 In usual case returns an integer: the column to indent to.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
812 Returns nil if line starts inside a string, t if in a comment."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
813 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
814 (beginning-of-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
815 (let* ((indent-point (point))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
816 (case-fold-search nil)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48192
diff changeset
817 (continued-line
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
818 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
819 (if (bobp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
820 nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
821 (backward-char)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
822 (= ?\\ (preceding-char)))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
823 (continued-indent-value (if continued-line
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
824 tcl-continued-indent-level
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
825 0))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
826 state
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
827 containing-sexp
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
828 found-next-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
829 (if parse-start
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
830 (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
831 (beginning-of-defun))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
832 (while (< (point) indent-point)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
833 (setq parse-start (point))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
834 (setq state (parse-partial-sexp (point) indent-point 0))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
835 (setq containing-sexp (car (cdr state))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
836 (cond ((or (nth 3 state) (nth 4 state))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
837 ;; Inside comment or string. Return nil or t if should
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
838 ;; not change this line
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
839 (nth 4 state))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
840 ((null containing-sexp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
841 ;; Line is at top level.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
842 continued-indent-value)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
843 (t
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
844 ;; Set expr-p if we are looking at the expression part of
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
845 ;; an "if", "expr", etc statement. Set commands-p if we
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
846 ;; are looking at the body part of an if, while, etc
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
847 ;; statement. FIXME Should check for "for" loops here.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
848 (goto-char containing-sexp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
849 (let* ((sexpr-type (tcl-figure-type))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
850 (expr-p (eq sexpr-type 'tcl-expr))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
851 (commands-p (eq sexpr-type 'tcl-commands))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
852 (expr-start (point)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
853 ;; Find the first statement in the block and indent
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
854 ;; like it. The first statement in the block might be
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
855 ;; on the same line, so what we do is skip all
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
856 ;; "virtually blank" lines, looking for a non-blank
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
857 ;; one. A line is virtually blank if it only contains
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
858 ;; a comment and whitespace. FIXME continued comments
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
859 ;; aren't supported. They are a wart on Tcl anyway.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
860 ;; We do it this funky way because we want to know if
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
861 ;; we've found a statement on some line _after_ the
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
862 ;; line holding the sexp opener.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
863 (goto-char containing-sexp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
864 (forward-char)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
865 (if (and (< (point) indent-point)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
866 (looking-at "[ \t]*\\(#.*\\)?$"))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
867 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
868 (forward-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
869 (while (and (< (point) indent-point)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
870 (looking-at "[ \t]*\\(#.*\\)?$"))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
871 (setq found-next-line t)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
872 (forward-line))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
873 (if (or continued-line
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
874 (/= (char-after containing-sexp) ?{)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
875 expr-p)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
876 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
877 ;; Line is continuation line, or the sexp opener
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
878 ;; is not a curly brace, or we are are looking at
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
879 ;; an `expr' expression (which must be split
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
880 ;; specially). So indentation is column of first
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
881 ;; good spot after sexp opener (with some added
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
882 ;; in the continued-line case). If there is no
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
883 ;; nonempty line before the indentation point, we
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
884 ;; use the column of the character after the sexp
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
885 ;; opener.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
886 (if (>= (point) indent-point)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
887 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
888 (goto-char containing-sexp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
889 (forward-char))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
890 (skip-chars-forward " \t"))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
891 (+ (current-column) continued-indent-value))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
892 ;; After a curly brace, and not a continuation line.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
893 ;; So take indentation from first good line after
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
894 ;; start of block, unless that line is on the same
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
895 ;; line as the opening brace. In this case use the
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
896 ;; indentation of the opening brace's line, plus
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
897 ;; another indent step. If we are in the body part
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
898 ;; of an "if" or "while" then the indentation is
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
899 ;; taken from the line holding the start of the
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
900 ;; statement.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
901 (if (and (< (point) indent-point)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
902 found-next-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
903 (current-indentation)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
904 (if commands-p
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
905 (goto-char expr-start)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
906 (goto-char containing-sexp))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
907 (+ (current-indentation) tcl-indent-level)))))))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
908
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
909
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
910
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
911 (defun tcl-indent-exp ()
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
912 "Indent each line of the Tcl grouping following point."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
913 (interactive)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
914 (let ((indent-stack (list nil))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
915 (contain-stack (list (point)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
916 (case-fold-search nil)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
917 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
918 this-indent continued-line
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
919 (next-depth 0)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
920 last-depth)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
921 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
922 (forward-sexp 1))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
923 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
924 (setq outer-loop-done nil)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
925 (while (and (not (eobp)) (not outer-loop-done))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
926 (setq last-depth next-depth)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
927 ;; Compute how depth changes over this line
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
928 ;; plus enough other lines to get to one that
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
929 ;; does not end inside a comment or string.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
930 ;; Meanwhile, do appropriate indentation on comment lines.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
931 (setq inner-loop-done nil)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
932 (while (and (not inner-loop-done)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
933 (not (and (eobp) (setq outer-loop-done t))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
934 (setq ostate state)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
935 (setq state (parse-partial-sexp (point) (progn (end-of-line) (point))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
936 nil nil state))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
937 (setq next-depth (car state))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
938 (if (or (nth 4 ostate))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
939 (tcl-indent-line))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
940 (if (or (nth 3 state))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
941 (forward-line 1)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
942 (setq inner-loop-done t)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
943 (if (<= next-depth 0)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
944 (setq outer-loop-done t))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
945 (if outer-loop-done
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
946 nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
947 ;; If this line had ..))) (((.. in it, pop out of the levels
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
948 ;; that ended anywhere in this line, even if the final depth
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
949 ;; doesn't indicate that they ended.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
950 (while (> last-depth (nth 6 state))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
951 (setq indent-stack (cdr indent-stack)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
952 contain-stack (cdr contain-stack)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
953 last-depth (1- last-depth)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
954 ;; Add levels for any parens that were started in this line.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
955 (while (< last-depth next-depth)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
956 (setq indent-stack (cons nil indent-stack)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
957 contain-stack (cons nil contain-stack)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
958 last-depth (1+ last-depth)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
959 (if (null (car contain-stack))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48192
diff changeset
960 (setcar contain-stack
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
961 (or (car (cdr state))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
962 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
963 (forward-sexp -1)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
964 (point)))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
965 (forward-line 1)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48192
diff changeset
966 (setq continued-line
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
967 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
968 (backward-char)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
969 (= (preceding-char) ?\\)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
970 (skip-chars-forward " \t")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
971 (if (eolp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
972 nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
973 (if (and (car indent-stack)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
974 (>= (car indent-stack) 0))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
975 ;; Line is on an existing nesting level.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
976 (setq this-indent (car indent-stack))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
977 ;; Just started a new nesting level.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
978 ;; 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
979 (let ((val (tcl-calculate-indent
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
980 (if (car indent-stack)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
981 (- (car indent-stack))))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
982 (setcar indent-stack
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
983 (setq this-indent val))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
984 (setq continued-line nil)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
985 (cond ((not (numberp this-indent)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
986 ((= (following-char) ?})
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
987 (setq this-indent (- this-indent tcl-indent-level)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
988 ((= (following-char) ?\])
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
989 (setq this-indent (- this-indent 1))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
990 ;; Put chosen indentation into effect.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
991 (or (null this-indent)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48192
diff changeset
992 (= (current-column)
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48192
diff changeset
993 (if continued-line
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
994 (+ this-indent tcl-indent-level)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
995 this-indent))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
996 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
997 (delete-region (point) (progn (beginning-of-line) (point)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48192
diff changeset
998 (indent-to
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48192
diff changeset
999 (if continued-line
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1000 (+ this-indent tcl-indent-level)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1001 this-indent)))))))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1002 )
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1003
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1004
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1005
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1006 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1007 ;; Interfaces to other packages.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1008 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1009
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1010 ;; 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
1011 ;; beginning-of-defun. Also has incestuous knowledge about the
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1012 ;; 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
1013 (defun tcl-add-log-defun ()
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1014 "Return name of Tcl function point is in, or nil."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1015 (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
1016 (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
1017 (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
1018 (match-string 2))))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1019
11303
7823947372f9 (tcl-outline-level): New function
Tom Tromey <tromey@redhat.com>
parents: 9428
diff changeset
1020 (defun tcl-outline-level ()
7823947372f9 (tcl-outline-level): New function
Tom Tromey <tromey@redhat.com>
parents: 9428
diff changeset
1021 (save-excursion
7823947372f9 (tcl-outline-level): New function
Tom Tromey <tromey@redhat.com>
parents: 9428
diff changeset
1022 (skip-chars-forward " \t")
7823947372f9 (tcl-outline-level): New function
Tom Tromey <tromey@redhat.com>
parents: 9428
diff changeset
1023 (current-column)))
7823947372f9 (tcl-outline-level): New function
Tom Tromey <tromey@redhat.com>
parents: 9428
diff changeset
1024
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1025
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1026
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1027 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1028 ;; Helper functions for inferior Tcl mode.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1029 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1030
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1031 ;; This exists to let us delete the prompt when commands are sent
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1032 ;; directly to the inferior Tcl. See gud.el for an explanation of how
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1033 ;; it all works (I took it from there). This stuff doesn't really
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1034 ;; 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
1035 ;; anything useful that can be done.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1036 (defvar inferior-tcl-delete-prompt-marker nil)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1037
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1038 (defun tcl-filter (proc string)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1039 (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
1040 (with-current-buffer (process-buffer proc)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1041 (goto-char (process-mark proc))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1042 ;; Delete prompt if requested.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1043 (if (marker-buffer inferior-tcl-delete-prompt-marker)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1044 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1045 (delete-region (point) inferior-tcl-delete-prompt-marker)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1046 (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
1047 (comint-output-filter proc string))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1048
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1049 (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
1050 (with-current-buffer (process-buffer proc)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1051 (goto-char (process-mark proc))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1052 (beginning-of-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1053 (if (looking-at comint-prompt-regexp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1054 (set-marker inferior-tcl-delete-prompt-marker (point))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1055 (comint-send-string proc string))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1056
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1057 (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
1058 (with-current-buffer (process-buffer proc)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1059 (goto-char (process-mark proc))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1060 (beginning-of-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1061 (if (looking-at comint-prompt-regexp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1062 (set-marker inferior-tcl-delete-prompt-marker (point))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1063 (comint-send-region proc start end))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1064
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1065 (defun switch-to-tcl (eob-p)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1066 "Switch to inferior Tcl process buffer.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1067 With argument, positions cursor at end of buffer."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1068 (interactive "P")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1069 (if (get-buffer inferior-tcl-buffer)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1070 (pop-to-buffer inferior-tcl-buffer)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1071 (error "No current inferior Tcl buffer"))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1072 (cond (eob-p
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1073 (push-mark)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1074 (goto-char (point-max)))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1075
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1076 (defun inferior-tcl-proc ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1077 "Return current inferior Tcl process.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1078 See variable `inferior-tcl-buffer'."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1079 (let ((proc (get-buffer-process (if (eq major-mode 'inferior-tcl-mode)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1080 (current-buffer)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1081 inferior-tcl-buffer))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1082 (or proc
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1083 (error "No Tcl process; see variable `inferior-tcl-buffer'"))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1084
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1085 (defun tcl-eval-region (start end &optional and-go)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1086 "Send the current region to the inferior Tcl process.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1087 Prefix argument means switch to the Tcl buffer afterwards."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1088 (interactive "r\nP")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1089 (let ((proc (inferior-tcl-proc)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1090 (tcl-send-region proc start end)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1091 (tcl-send-string proc "\n")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1092 (if and-go (switch-to-tcl t))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1093
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1094 (defun tcl-eval-defun (&optional and-go)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1095 "Send the current defun to the inferior Tcl process.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1096 Prefix argument means switch to the Tcl buffer afterwards."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1097 (interactive "P")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1098 (save-excursion
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1099 (end-of-defun)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1100 (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
1101 (beginning-of-defun)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1102 (tcl-eval-region (point) end)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1103 (if and-go (switch-to-tcl t)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1104
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1105
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1106
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1107 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1108 ;; Inferior Tcl mode itself.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1109 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1110
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1111 (define-derived-mode inferior-tcl-mode comint-mode "Inferior Tcl"
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1112 "Major mode for interacting with Tcl interpreter.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1113
44316
443cf26a410a (tcl-imenu-generic-expression): New value.
Richard M. Stallman <rms@gnu.org>
parents: 44227
diff changeset
1114 You can start a Tcl process with \\[inferior-tcl].
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1115
25163
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
1116 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
1117 `inferior-tcl-mode-hook', in that order.
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1118
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1119 You can send text to the inferior Tcl process from other buffers
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1120 containing Tcl source.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1121
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1122 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
1123 `tcl-application'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1124 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
1125 `tcl-command-switches'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1126 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
1127 `tcl-prompt-regexp'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1128 Matches prompt.
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1129 `inferior-tcl-source-command'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1130 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
1131 `inferior-tcl-buffer'
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1132 The current inferior Tcl process buffer. See variable
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1133 documentation for details on multiple-process support.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1134
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1135 The following commands are available:
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1136 \\{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
1137 (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
1138 (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
1139 (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
1140 (setq mode-line-process '(": %s"))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1141 (setq local-abbrev-table tcl-mode-abbrev-table)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1142 (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
1143 (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
1144 (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
1145 (set-process-filter (get-buffer-process (current-buffer)) 'tcl-filter))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1146
8252
7d4674a34de3 Added ";;;###autoload" comments where appropriate.
Tom Tromey <tromey@redhat.com>
parents: 7799
diff changeset
1147 ;;;###autoload
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1148 (defun inferior-tcl (cmd)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1149 "Run inferior Tcl process.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1150 Prefix arg means enter program name interactively.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1151 See documentation for function `inferior-tcl-mode' for more information."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1152 (interactive
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1153 (list (if current-prefix-arg
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1154 (read-string "Run Tcl: " tcl-application)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1155 tcl-application)))
57188
03a731220a33 * progmodes/tcl.el (inferior-tcl): Use pop-to-buffer.
Jesper Harder <harder@ifa.au.dk>
parents: 54770
diff changeset
1156 (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
1157 (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
1158 tcl-command-switches))
03a731220a33 * progmodes/tcl.el (inferior-tcl): Use pop-to-buffer.
Jesper Harder <harder@ifa.au.dk>
parents: 54770
diff changeset
1159 (inferior-tcl-mode))
03a731220a33 * progmodes/tcl.el (inferior-tcl): Use pop-to-buffer.
Jesper Harder <harder@ifa.au.dk>
parents: 54770
diff changeset
1160 (set (make-local-variable 'tcl-application) cmd)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1161 (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
1162 (pop-to-buffer "*inferior-tcl*"))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1163
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1164 (defalias 'run-tcl 'inferior-tcl)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1165
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1166
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1167
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1168 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1169 ;; Auto-fill support.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1170 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1171
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1172 (defun tcl-real-command-p ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1173 "Return nil if point is not at the beginning of a command.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1174 A command is the first word on an otherwise empty line, or the
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1175 first word following a semicolon, opening brace, or opening bracket."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1176 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1177 (skip-chars-backward " \t")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1178 (cond
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1179 ((bobp) t)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1180 ((bolp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1181 (backward-char)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1182 ;; Note -- continued comments are not supported here. I
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1183 ;; consider those to be a wart on the language.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1184 (not (eq ?\\ (preceding-char))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1185 (t
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1186 (memq (preceding-char) '(?\; ?{ ?\[))))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1187
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1188 ;; FIXME doesn't actually return t. See last case.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1189 (defun tcl-real-comment-p ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1190 "Return t if point is just after the `#' beginning a real comment.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1191 Does not check to see if previous char is actually `#'.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1192 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
1193 preceded only by whitespace on the line, or has a preceding
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1194 semicolon, opening brace, or opening bracket on the same line."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1195 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1196 (backward-char)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1197 (tcl-real-command-p)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1198
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1199 (defun tcl-hairy-scan-for-comment (state end always-stop)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1200 "Determine if point is in a comment.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1201 Returns a list of the form `(FLAG . STATE)'. STATE can be used
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1202 as input to future invocations. FLAG is nil if not in comment,
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1203 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
1204
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
1205 This function does not work in Emacs 18.
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
1206 See also `tcl-simple-scan-for-comment', a
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1207 simpler version that is often right, and works in Emacs 18."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1208 (let ((bol (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1209 (goto-char end)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1210 (beginning-of-line)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1211 (point)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1212 real-comment
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1213 last-cstart)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1214 (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
1215 (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
1216 (setq state (parse-partial-sexp (point) end nil nil state t))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1217 (if (nth 4 state)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1218 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1219 ;; If ALWAYS-STOP is set, stop even if we don't have a
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1220 ;; real comment, or if the comment isn't on the same line
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1221 ;; as the end.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1222 (if always-stop (setq last-cstart (point)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1223 ;; If we have a real comment, then set the comment
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1224 ;; starting point if we are on the same line as the ending
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1225 ;; location.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1226 (setq real-comment (tcl-real-comment-p))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1227 (if real-comment
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1228 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1229 (and (> (point) bol) (setq last-cstart (point)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1230 ;; NOTE Emacs 19 has a misfeature whereby calling
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1231 ;; parse-partial-sexp with COMMENTSTOP set and with
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1232 ;; an initial list that says point is in a comment
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1233 ;; will cause an immediate return. So we must skip
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1234 ;; over the comment ourselves.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1235 (beginning-of-line 2)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1236 ;; Frob the state to make it look like we aren't in a
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1237 ;; comment.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1238 (setcar (nthcdr 4 state) nil))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1239 (and last-cstart
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1240 (goto-char last-cstart))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1241 (cons real-comment state)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1242
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1243 (defun tcl-in-comment ()
25163
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
1244 "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
1245 (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
1246 (beginning-of-defun)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1247 (car (tcl-hairy-scan-for-comment nil save nil))))
7628
6fe5a25c0107 Fixed bug with M-;.
Tom Tromey <tromey@redhat.com>
parents: 7613
diff changeset
1248
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1249
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1250
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1251 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1252 ;; Help-related code.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1253 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1254
7052
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
1255 (defvar tcl-help-saved-dirs nil
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
1256 "Saved help directories.
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
1257 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
1258 to update the alist.")
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1259
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1260 (defvar tcl-help-alist nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1261 "Alist with command names as keys and filenames as values.")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1262
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1263 (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
1264 "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
1265 (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
1266 (cond
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1267 ((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
1268 (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
1269 ((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
1270 (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
1271
7052
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
1272 (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
1273 "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
1274 (let ((alist nil))
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1275 (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
1276 (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
1277 (setq alist (tcl-files-alist dir alist))))))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1278
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1279 (defun tcl-reread-help-files ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1280 "Set up to re-read files, and then do it."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1281 (interactive)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1282 (message "Building Tcl help file index...")
7052
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
1283 (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
1284 (setq tcl-help-alist (tcl-help-snarf-commands tcl-help-directory-list))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1285 (message "Building Tcl help file index...done"))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1286
12645
3ce3ca90e4a3 (tcl-word-no-props): New function.
Tom Tromey <tromey@redhat.com>
parents: 12644
diff changeset
1287 (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
1288 "Like `current-word', but strips properties."
12645
3ce3ca90e4a3 (tcl-word-no-props): New function.
Tom Tromey <tromey@redhat.com>
parents: 12644
diff changeset
1289 (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
1290 (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
1291 word))
3ce3ca90e4a3 (tcl-word-no-props): New function.
Tom Tromey <tromey@redhat.com>
parents: 12644
diff changeset
1292
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1293 (defun tcl-current-word (flag)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1294 "Return current command word, or nil.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1295 If FLAG is nil, just uses `current-word'.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1296 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
1297 (if (and flag
1eb0d0f0f71b tcl-current-word does the right thing in inferior-tcl-mode.
Tom Tromey <tromey@redhat.com>
parents: 7781
diff changeset
1298 (memq major-mode '(tcl-mode inferior-tcl-mode)))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1299 (condition-case nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1300 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1301 ;; Look backward for first word actually in alist.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1302 (if (bobp)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1303 ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1304 (while (and (not (bobp))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1305 (not (tcl-real-command-p)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1306 (backward-sexp)))
12645
3ce3ca90e4a3 (tcl-word-no-props): New function.
Tom Tromey <tromey@redhat.com>
parents: 12644
diff changeset
1307 (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
1308 (tcl-word-no-props)))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1309 (error nil))
12645
3ce3ca90e4a3 (tcl-word-no-props): New function.
Tom Tromey <tromey@redhat.com>
parents: 12644
diff changeset
1310 (tcl-word-no-props)))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1311
8252
7d4674a34de3 Added ";;;###autoload" comments where appropriate.
Tom Tromey <tromey@redhat.com>
parents: 7799
diff changeset
1312 ;;;###autoload
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1313 (defun tcl-help-on-word (command &optional arg)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1314 "Get help on Tcl command. Default is word at point.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1315 Prefix argument means invert sense of `tcl-use-smart-word-finder'."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1316 (interactive
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1317 (list
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1318 (progn
7052
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
1319 (if (not (equal tcl-help-directory-list tcl-help-saved-dirs))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1320 (tcl-reread-help-files))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1321 (let ((word (tcl-current-word
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1322 (if current-prefix-arg
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1323 (not tcl-use-smart-word-finder)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1324 tcl-use-smart-word-finder))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1325 (completing-read
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1326 (if (or (null word) (string= word ""))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1327 "Help on Tcl command: "
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1328 (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
1329 tcl-help-alist nil t nil nil word)))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1330 current-prefix-arg))
7052
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
1331 (if (not (equal tcl-help-directory-list tcl-help-saved-dirs))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1332 (tcl-reread-help-files))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1333 (if (string= command "")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1334 (setq command (tcl-current-word
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1335 (if arg
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1336 (not tcl-use-smart-word-finder)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1337 tcl-use-smart-word-finder))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1338 (let* ((help (get-buffer-create "*Tcl help*"))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1339 (cell (assoc command tcl-help-alist))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1340 (file (and cell (cdr cell))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1341 (set-buffer help)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1342 (delete-region (point-min) (point-max))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1343 (if file
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1344 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1345 (insert "*** " command "\n\n")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1346 (insert-file-contents file))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1347 (if (string= command "")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1348 (insert "Magical Pig!")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1349 (insert "Tcl command " command " not in help\n")))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1350 (set-buffer-modified-p nil)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1351 (goto-char (point-min))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1352 (display-buffer help)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1353
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1354
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1355
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1356 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1357 ;; Other interactive stuff.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1358 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1359
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1360 (defvar tcl-previous-dir/file nil
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1361 "Record last directory and file used in loading.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1362 This holds a cons cell of the form `(DIRECTORY . FILE)'
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1363 describing the last `tcl-load-file' command.")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1364
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1365 (defun tcl-load-file (file &optional and-go)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1366 "Load a Tcl file into the inferior Tcl process.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1367 Prefix argument means switch to the Tcl buffer afterwards."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1368 (interactive
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1369 (list
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1370 ;; car because comint-get-source returns a list holding the
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1371 ;; filename.
8581
e7daed44da21 tcl-load-file default to current buffer.
Tom Tromey <tromey@redhat.com>
parents: 8580
diff changeset
1372 (car (comint-get-source "Load Tcl file: "
e7daed44da21 tcl-load-file default to current buffer.
Tom Tromey <tromey@redhat.com>
parents: 8580
diff changeset
1373 (or (and
e7daed44da21 tcl-load-file default to current buffer.
Tom Tromey <tromey@redhat.com>
parents: 8580
diff changeset
1374 (eq major-mode 'tcl-mode)
e7daed44da21 tcl-load-file default to current buffer.
Tom Tromey <tromey@redhat.com>
parents: 8580
diff changeset
1375 (buffer-file-name))
e7daed44da21 tcl-load-file default to current buffer.
Tom Tromey <tromey@redhat.com>
parents: 8580
diff changeset
1376 tcl-previous-dir/file)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1377 '(tcl-mode) t))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1378 current-prefix-arg))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1379 (comint-check-source file)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1380 (setq tcl-previous-dir/file (cons (file-name-directory file)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1381 (file-name-nondirectory file)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1382 (tcl-send-string (inferior-tcl-proc)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1383 (format inferior-tcl-source-command (tcl-quote file)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1384 (if and-go (switch-to-tcl t)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1385
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1386 (defun tcl-restart-with-file (file &optional and-go)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1387 "Restart inferior Tcl with file.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1388 If an inferior Tcl process exists, it is killed first.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1389 Prefix argument means switch to the Tcl buffer afterwards."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1390 (interactive
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1391 (list
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1392 (car (comint-get-source "Restart with Tcl file: "
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1393 (or (and
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1394 (eq major-mode 'tcl-mode)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1395 (buffer-file-name))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1396 tcl-previous-dir/file)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1397 '(tcl-mode) t))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1398 current-prefix-arg))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1399 (let* ((buf (if (eq major-mode 'inferior-tcl-mode)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1400 (current-buffer)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1401 inferior-tcl-buffer))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1402 (proc (and buf (get-process buf))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1403 (cond
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1404 ((not (and buf (get-buffer buf)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1405 ;; I think this will be ok.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1406 (inferior-tcl tcl-application)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1407 (tcl-load-file file and-go))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1408 ((or
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1409 (not (comint-check-proc buf))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1410 (yes-or-no-p
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1411 "A Tcl process is running, are you sure you want to reset it? "))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1412 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1413 (comint-check-source file)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1414 (setq tcl-previous-dir/file (cons (file-name-directory file)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1415 (file-name-nondirectory file)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1416 (comint-exec (get-buffer-create buf)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1417 (if proc
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1418 (process-name proc)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1419 "inferior-tcl")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1420 tcl-application file tcl-command-switches)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1421 (if and-go (switch-to-tcl t)))))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1422
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1423 (defun tcl-auto-fill-mode (&optional arg)
44320
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
1424 "Like `auto-fill-mode', but sets `comment-auto-fill-only-comments'."
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1425 (interactive "P")
44320
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
1426 (auto-fill-mode arg)
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
1427 (if auto-fill-function
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
1428 (set (make-local-variable 'comment-auto-fill-only-comments) t)
40a69f39b79f Change maintainer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44316
diff changeset
1429 (kill-local-variable 'comment-auto-fill-only-comments)))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1430
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1431 (defun tcl-electric-hash (&optional count)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1432 "Insert a `#' and quote if it does not start a real comment.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1433 Prefix arg is number of `#'s to insert.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1434 See variable `tcl-electric-hash-style' for description of quoting
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1435 styles."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1436 (interactive "p")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1437 (or count (setq count 1))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1438 (if (> count 0)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1439 (let ((type
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1440 (if (eq tcl-electric-hash-style 'smart)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1441 (if (> count 3) ; FIXME what is "smart"?
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1442 'quote
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1443 'backslash)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1444 tcl-electric-hash-style))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1445 comment)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1446 (if type
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1447 (progn
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1448 (save-excursion
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 (setq comment (tcl-in-comment)))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1451 (delete-char 1)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1452 (and tcl-explain-indentation (message "comment: %s" comment))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1453 (cond
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1454 ((eq type 'quote)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1455 (if (not comment)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1456 (insert "\"")))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1457 ((eq type 'backslash)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1458 ;; The following will set count to 0, so the
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1459 ;; insert-char can still be run.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1460 (if (not comment)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1461 (while (> count 0)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1462 (insert "\\#")
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1463 (setq count (1- count)))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1464 (t nil))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1465 (insert-char ?# count))))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1466
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1467 (defun tcl-hashify-buffer ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1468 "Quote all `#'s in current buffer that aren't Tcl comments."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1469 (interactive)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1470 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1471 (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
1472 (let (state
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1473 result)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1474 (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
1475 (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
1476 (if (car result)
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1477 (beginning-of-line 2)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1478 (backward-char)
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1479 (if (eq ?# (following-char))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1480 (insert "\\"))
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1481 (forward-char))
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1482 (setq state (cdr result))))))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1483
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1484 (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
1485 "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
1486 (save-excursion
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1487 ;; 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
1488 (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
1489 (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
1490 (insert ";")
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1491 ;; Try and erase a non-significant char to keep charpos identical.
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1492 (if (memq (char-after) '(?\t ?\ )) (delete-char 1))))
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1493 (funcall (default-value 'comment-indent-function)))
7052
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
1494
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1495 ;; The following was inspired by the Tcl editing mode written by
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1496 ;; Gregor Schmid <schmid@fb3-s7.math.TU-Berlin.DE>. His version also
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1497 ;; attempts to snarf the command line options from the command line,
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1498 ;; 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
1499 ;; like it would be right enough. His version also looks for the
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1500 ;; "#!/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
1501 ;; FIXME should make sure that the application mentioned actually
5dfd509b6396 Wrote tcl-indent-for-comment
Tom Tromey <tromey@redhat.com>
parents: 6730
diff changeset
1502 ;; exists.
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1503 (defun tcl-guess-application ()
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1504 "Attempt to guess Tcl application by looking at first line.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1505 The first line is assumed to look like \"#!.../program ...\"."
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1506 (save-excursion
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1507 (goto-char (point-min))
8580
648f78c8ecf5 Fixed bug in tcl-guess-application.
Tom Tromey <tromey@redhat.com>
parents: 8575
diff changeset
1508 (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
1509 (set (make-local-variable 'tcl-application) (match-string 1)))))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1510
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1511
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1512
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1513 ;;
11787
635f5fb5d82a Changed "Lucid Emacs" to "XEmacs".
Tom Tromey <tromey@redhat.com>
parents: 11303
diff changeset
1514 ;; XEmacs menu support.
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1515 ;; Taken from schmid@fb3-s7.math.TU-Berlin.DE (Gregor Schmid),
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1516 ;; who wrote a different Tcl mode.
25163
451b28d426e6 Many doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 24957
diff changeset
1517 ;; 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
1518 ;; loading the XEmacs menu emulation code.
6709
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 (defun tcl-popup-menu (e)
7612
3b16e6ed71cf Fixed menu support.
Tom Tromey <tromey@redhat.com>
parents: 7288
diff changeset
1522 (interactive "@e")
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1523 (popup-menu tcl-mode-menu))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1524
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1525
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1526
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1527 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1528 ;; Quoting and unquoting functions.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1529 ;;
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1530
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1531 ;; This quoting is sufficient to protect eg a filename from any sort
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1532 ;; of expansion or splitting. Tcl quoting sure sucks.
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1533 (defun tcl-quote (string)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1534 "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
1535 (mapconcat (lambda (char)
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1536 (if (memq char '(?[ ?] ?{ ?} ?\\ ?\" ?$ ? ?\;))
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1537 (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
1538 (char-to-string char)))
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1539 string ""))
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1540
7628
6fe5a25c0107 Fixed bug with M-;.
Tom Tromey <tromey@redhat.com>
parents: 7613
diff changeset
1541 ;;
6fe5a25c0107 Fixed bug with M-;.
Tom Tromey <tromey@redhat.com>
parents: 7613
diff changeset
1542 ;; Bug reporting.
6fe5a25c0107 Fixed bug with M-;.
Tom Tromey <tromey@redhat.com>
parents: 7613
diff changeset
1543 ;;
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1544
7628
6fe5a25c0107 Fixed bug with M-;.
Tom Tromey <tromey@redhat.com>
parents: 7613
diff changeset
1545
39754
6a46751c85df Change maintainer to FSF and remove loads of compatibility cruft.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38476
diff changeset
1546 ;; 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
1547 (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
1548 (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
1549 (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
1550 (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
1551 (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
1552 (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
1553 (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
1554 (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
1555 (defun tcl-mark () (mark t))
7628
6fe5a25c0107 Fixed bug with M-;.
Tom Tromey <tromey@redhat.com>
parents: 7613
diff changeset
1556
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1557 (provide 'tcl)
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1558
61246
ee782d6579a8 (tcl-set-font-lock-keywords): Use new \_< ops.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 58563
diff changeset
1559 ;; arch-tag: 8a032554-c3ef-422e-b84c-acec0522179d
6709
8dee3c8bc7c8 Initial revision
Tom Tromey <tromey@redhat.com>
parents:
diff changeset
1560 ;;; tcl.el ends here