annotate lisp/progmodes/tcl.el @ 51151:fe11e703042b

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