annotate lisp/progmodes/idlwave.el @ 89363:66640ed1aeae

(x_new_fontset): Fix previous change.
author Kenichi Handa <handa@m17n.org>
date Sat, 11 Jan 2003 01:50:19 +0000
parents 043ec968d20b
children b80d723ad7cc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1 ;;; idlwave.el --- IDL and WAVE CL editing mode for GNU Emacs
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2 ;; Copyright (c) 1999, 2000 Free Software Foundation
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4 ;; Author: Chris Chase <chase@att.com>
41739
49e8031d8893 Update maintainer.
Eli Zaretskii <eliz@gnu.org>
parents: 41608
diff changeset
5 ;; Maintainer: John-David Smith <jdsmith@astro.cornell.edu>
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6 ;; Version: 4.7
43351
043ec968d20b (idlwave-mode): Do not use make-local-hook.
Pavel Janík <Pavel@Janik.cz>
parents: 42456
diff changeset
7 ;; Date: $Date: 2001/12/31 20:42:10 $
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
8 ;; Keywords: languages
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
9
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 34708
diff changeset
10 ;; This file is part of GNU Emacs.
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
11
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
15 ;; any later version.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
16
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
20 ;; GNU General Public License for more details.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
21
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
25 ;; Boston, MA 02111-1307, USA.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
26
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
27 ;;; Commentary:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
28
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
29 ;; In distant past, based on pascal.el. Though bears little
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
30 ;; resemblance to that now.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
31 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
32 ;; Incorporates many ideas, such as abbrevs, action routines, and
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
33 ;; continuation line indenting, from wave.el.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
34 ;; wave.el original written by Lubos Pochman, Precision Visuals, Boulder.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
35 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
36 ;; See the mode description ("C-h m" in idlwave-mode or "C-h f idlwave-mode")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
37 ;; for features, key bindings, and info.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
38 ;; Also, Info format documentation is available with `M-x idlwave-info'
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
39 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
40 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
41 ;; INSTALLATION
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
42 ;; ============
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
43 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
44 ;; Follow the instructions in the INSTALL file of the distribution.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
45 ;; In short, put this file on your load path and add the following
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
46 ;; lines to your .emacs file:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
47 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
48 ;; (autoload 'idlwave-mode "idlwave" "IDLWAVE Mode" t)
27107
7b2b73f13427 Renamed idlwave-*.el into idlw-*.el.
Eli Zaretskii <eliz@gnu.org>
parents: 26956
diff changeset
49 ;; (autoload 'idlwave-shell "idlw-shell" "IDLWAVE Shell" t)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
50 ;; (setq auto-mode-alist (cons '("\\.pro\\'" . idlwave-mode) auto-mode-alist))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
51 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
52 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
53 ;; SOURCE
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
54 ;; ======
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
55 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
56 ;; The newest version of this file is available from the maintainers
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
57 ;; Webpage.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
58 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
59 ;; http://www.strw.leidenuniv.el/~dominik/Tools/idlwave
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
60 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
61 ;; DOCUMENTATION
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
62 ;; =============
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
63 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
64 ;; IDLWAVE is documented online in info format.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
65 ;; A printable version of the documentation is available from the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
66 ;; maintainers webpage (see under SOURCE)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
67 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
68 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
69 ;; ACKNOWLEDGMENTS
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
70 ;; ===============
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
71 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
72 ;; Thanks to the following people for their contributions and comments:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
73 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
74 ;; Ulrik Dickow <dickow@nbi.dk>
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
75 ;; Eric E. Dors <edors@lanl.gov>
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
76 ;; Stein Vidar H. Haugan <s.v.h.haugan@astro.uio.no>
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
77 ;; David Huenemoerder <dph@space.mit.edu>
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
78 ;; Kevin Ivory <Kevin.Ivory@linmpi.mpg.de>
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
79 ;; Xuyong Liu <liu@stsci.edu>
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
80 ;; Simon Marshall <Simon.Marshall@esrin.esa.it>
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
81 ;; Laurent Mugnier <mugnier@onera.fr>
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
82 ;; Lubos Pochman <lubos@rsinc.com>
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
83 ;; Patrick M. Ryan <pat@jaameri.gsfc.nasa.gov>
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
84 ;; Marty Ryba <ryba@ll.mit.edu>
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
85 ;; Phil Williams <williams@irc.chmcc.org>
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
86 ;; J.D. Smith <jdsmith@astrosun.tn.cornell.edu>
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
87 ;; Phil Sterne <sterne@dublin.llnl.gov>
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
88 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
89 ;; CUSTOMIZATION:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
90 ;; =============
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
91 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
92 ;; IDLWAVE has customize support - so if you want to learn about the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
93 ;; variables which control the behavior of the mode, use
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
94 ;; `M-x idlwave-customize'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
95 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
96 ;; You can set your own preferred values with Customize, or with Lisp
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
97 ;; code in .emacs. For an example of what to put into .emacs, check
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
98 ;; the TexInfo documentation.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
99 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
100 ;; KNOWN PROBLEMS:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
101 ;; ==============
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
102 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
103 ;; Moving the point backwards in conjunction with abbrev expansion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
104 ;; does not work as I would like it, but this is a problem with
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
105 ;; emacs abbrev expansion done by the self-insert-command. It ends
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
106 ;; up inserting the character that expanded the abbrev after moving
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
107 ;; point backward, e.g., "\cl" expanded with a space becomes
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
108 ;; "LONG( )" with point before the close paren. This is solved by
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
109 ;; using a temporary function in `post-command-hook' - not pretty,
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
110 ;; but it works.
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
111 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
112 ;; Tabs and spaces are treated equally as whitespace when filling a
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
113 ;; comment paragraph. To accomplish this, tabs are permanently
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
114 ;; replaced by spaces in the text surrounding the paragraph, which
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
115 ;; may be an undesirable side-effect. Replacing tabs with spaces is
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
116 ;; limited to comments only and occurs only when a comment
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
117 ;; paragraph is filled via `idlwave-fill-paragraph'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
118 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
119 ;; "&" is ignored when parsing statements.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
120 ;; Avoid muti-statement lines (using "&") on block begin and end
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
121 ;; lines. Multi-statement lines can mess up the formatting, for
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
122 ;; example, multiple end statements on a line: endif & endif.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
123 ;; Using "&" outside of block begin/end lines should be okay.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
124 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
125 ;; It is possible that the parser which decides what to complete has
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
126 ;; problems with pointer dereferencing statements. I don't use
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
127 ;; pointers often enough to find out - please report any problems.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
128 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
129 ;; Completion and Routine Info do not know about inheritance. Thus,
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
130 ;; Keywords inherited from superclasses are not displayed and cannot
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
131 ;; completed.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
132 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
133 ;; When forcing completion of method keywords, the initial
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
134 ;; query for a method has multiple entries for some methods. Would
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
135 ;; be too difficult to fix this hardly used case.
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
136 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
137
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
138 ;;; Code:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
139
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
140 (eval-when-compile (require 'cl))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
141
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
142 (eval-and-compile
41608
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38436
diff changeset
143 ;; Kludge to allow `defcustom' for Emacs 19.
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38436
diff changeset
144 (condition-case () (require 'custom) (error nil))
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38436
diff changeset
145 (if (and (featurep 'custom) (fboundp 'custom-declare-variable))
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38436
diff changeset
146 nil ;; We've got what we needed
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38436
diff changeset
147 ;; We have the old or no custom-library, hack around it!
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38436
diff changeset
148 (defmacro defgroup (&rest args) nil)
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38436
diff changeset
149 (defmacro defcustom (var value doc &rest args)
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38436
diff changeset
150 `(defvar ,var ,value ,doc))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
151
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
152 (defgroup idlwave nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
153 "Major mode for editing IDL/WAVE CL .pro files"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
154 :tag "IDLWAVE"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
155 :link '(url-link :tag "Home Page"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
156 "http://strw.leidenuniv.nl/~dominik/Tools/idlwave")
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
157 :link '(emacs-commentary-link :tag "Commentary in idlw-shell.el"
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
158 "idlw-shell.el")
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
159 :link '(emacs-commentary-link :tag "Commentary in idlwave.el" "idlwave.el")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
160 :link '(custom-manual "(idlwave)Top")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
161 :prefix "idlwave"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
162 :group 'languages)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
163
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
164 ;;; Variables for indentation behavior ---------------------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
165
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
166 (defgroup idlwave-code-formatting nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
167 "Indentation and formatting options for IDLWAVE mode."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
168 :group 'idlwave)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
169
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
170 (defcustom idlwave-main-block-indent 0
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
171 "*Extra indentation for the main block of code.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
172 That is the block between the FUNCTION/PRO statement and the END
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
173 statement for that program unit."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
174 :group 'idlwave-code-formatting
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
175 :type 'integer)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
176
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
177 (defcustom idlwave-block-indent 4
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
178 "*Extra indentation applied to block lines.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
179 If you change this, you probably also want to change `idlwave-end-offset'."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
180 :group 'idlwave-code-formatting
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
181 :type 'integer)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
182
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
183 (defcustom idlwave-end-offset -4
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
184 "*Extra indentation applied to block END lines.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
185 A value equal to negative `idlwave-block-indent' will make END lines
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
186 line up with the block BEGIN lines."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
187 :group 'idlwave-code-formatting
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
188 :type 'integer)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
189
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
190 (defcustom idlwave-continuation-indent 2
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
191 "*Extra indentation applied to continuation lines.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
192 This extra offset applies to the first of a set of continuation lines.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
193 The following lines receive the same indentation as the first.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
194 Also, the value of this variable applies to continuation lines inside
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
195 parenthesis. When the current line contains an open unmatched ([{,
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
196 the next line is indented to that parenthesis plus the value of this variable."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
197 :group 'idlwave-code-formatting
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
198 :type 'integer)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
199
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
200 (defcustom idlwave-hanging-indent t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
201 "*If set non-nil then comment paragraphs are indented under the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
202 hanging indent given by `idlwave-hang-indent-regexp' match in the first line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
203 of the paragraph."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
204 :group 'idlwave-code-formatting
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
205 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
206
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
207 (defcustom idlwave-hang-indent-regexp "- "
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
208 "*Regular expression matching the position of the hanging indent
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
209 in the first line of a comment paragraph. The size of the indent
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
210 extends to the end of the match for the regular expression."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
211 :group 'idlwave-code-formatting
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
212 :type 'regexp)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
213
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
214 (defcustom idlwave-use-last-hang-indent nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
215 "*If non-nil then use last match on line for `idlwave-indent-regexp'."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
216 :group 'idlwave-code-formatting
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
217 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
218
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
219 (defcustom idlwave-fill-comment-line-only t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
220 "*If non-nil then auto fill will only operate on comment lines."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
221 :group 'idlwave-code-formatting
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
222 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
223
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
224 (defcustom idlwave-auto-fill-split-string t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
225 "*If non-nil then auto fill will split strings with the IDL `+' operator.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
226 When the line end falls within a string, string concatenation with the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
227 '+' operator will be used to distribute a long string over lines.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
228 If nil and a string is split then a terminal beep and warning are issued.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
229
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
230 This variable is ignored when `idlwave-fill-comment-line-only' is
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
231 non-nil, since in this case code is not auto-filled."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
232 :group 'idlwave-code-formatting
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
233 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
234
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
235 (defcustom idlwave-split-line-string t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
236 "*If non-nil then `idlwave-split-line' will split strings with `+'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
237 When the splitting point of a line falls inside a string, split the string
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
238 using the `+' string concatenation operator. If nil and a string is
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
239 split then a terminal beep and warning are issued."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
240 :group 'idlwave-code-formatting
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
241 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
242
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
243 (defcustom idlwave-no-change-comment ";;;"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
244 "*The indentation of a comment that starts with this regular
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
245 expression will not be changed. Note that the indentation of a comment
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
246 at the beginning of a line is never changed."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
247 :group 'idlwave-code-formatting
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
248 :type 'string)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
249
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
250 (defcustom idlwave-begin-line-comment nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
251 "*A comment anchored at the beginning of line.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
252 A comment matching this regular expression will not have its
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
253 indentation changed. If nil the default is \"^;\", i.e., any line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
254 beginning with a \";\". Expressions for comments at the beginning of
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
255 the line should begin with \"^\"."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
256 :group 'idlwave-code-formatting
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
257 :type '(choice (const :tag "Any line beginning with `;'" nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
258 'regexp))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
259
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
260 (defcustom idlwave-code-comment ";;[^;]"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
261 "*A comment that starts with this regular expression on a line by
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
262 itself is indented as if it is a part of IDL code. As a result if
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
263 the comment is not preceded by whitespace it is unchanged."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
264 :group 'idlwave-code-formatting
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
265 :type 'regexp)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
266
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
267 ;; Comments not matching any of the above will be indented as a
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
268 ;; right-margin comment, i.e., to a minimum of `comment-column'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
269
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
270
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
271 ;;; Routine Info and Completion ---------------------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
272
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
273 (defgroup idlwave-routine-info nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
274 "Routine Info options for IDLWAVE mode."
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
275 :group 'idlwave)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
276
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
277 (defcustom idlwave-scan-all-buffers-for-routine-info t
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
278 "*Non-nil means, scan buffers for IDL programs when updating info.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
279 The scanning is done by the command `idlwave-update-routine-info'.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
280 The following values are allowed:
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
281
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
282 nil Don't scan any buffers.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
283 t Scan all idlwave-mode buffers in the current editing session.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
284 current Scan only the current buffer, but no other buffers."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
285 :group 'idlwave-routine-info
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
286 :type '(choice
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
287 (const :tag "No buffer" nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
288 (const :tag "All buffers" t)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
289 (const :tag "Current buffer only" 'current)))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
290
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
291 (defcustom idlwave-query-shell-for-routine-info t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
292 "*Non-nil means query the shell for info about compiled routines.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
293 Querying the shell is useful to get information about compiled modules,
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
294 and it is turned on by default. However, when you have a complete library
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
295 scan, this is not necessary."
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
296 :group 'idlwave-routine-info
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
297 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
298
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
299 (defcustom idlwave-auto-routine-info-updates
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
300 '(find-file save-buffer kill-buffer compile-buffer)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
301 "*Controls under what circumstances routine info is updated automatically.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
302 Possible values:
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
303 nil Never
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
304 t All available
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
305 (...) A list of circumstances. Allowed members are:
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
306 find-file Add info for new IDLWAVE buffers.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
307 save-buffer Update buffer info when buffer is saved
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
308 kill-buffer Remove buffer info when buffer gets killed
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
309 compile-buffer Update shell info after `idlwave-shell-save-and...'"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
310 :group 'idlwave-routine-info
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
311 :type '(choice
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
312 (const :tag "Never" nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
313 (const :tag "As often as possible" t)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
314 (set :tag "Checklist" :greedy t
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
315 (const :tag "When visiting a file" find-file)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
316 (const :tag "When saving a buffer" save-buffer)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
317 (const :tag "After a buffer was killed" kill-buffer)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
318 (const :tag "After a buffer was compiled successfully, update shell info" compile-buffer))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
319
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
320 (defcustom idlwave-rinfo-max-source-lines 5
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
321 "*Maximum number of source files displayed in the Routine Info window.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
322 When an integer, it is the maximum number of source files displayed.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
323 t means to show all source files."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
324 :group 'idlwave-routine-info
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
325 :type 'integer)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
326
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
327 (defcustom idlwave-library-path nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
328 "Library path for Windows and MacOS. Not needed under Unix.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
329 When selecting the directories to scan for IDL library routine info,
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
330 IDLWAVE can under UNIX query the shell for the exact search path.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
331 However, under Windows and MacOS, the IDLWAVE shell does not work. In this
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
332 case, this variable specifies the path where IDLWAVE can find library files.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
333 The shell will only be asked when this variable is nil.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
334 The value is a list of directories. A directory preceeded by a `+' will
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
335 be searched recursively. If you set this variable on a UNIX system, the shell
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
336 will not be asked.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
337 See also `idlwave-system-directory'."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
338 :group 'idlwave-routine-info
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
339 :type '(repeat (directory)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
340
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
341 (defcustom idlwave-system-directory ""
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
342 "The IDL system directory for Windows and MacOS. Not needed under UNIX.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
343 Set this to the value of the `!DIR' system variable in IDL. IDLWAVE uses
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
344 this to find out which of the library routines belong to the official system
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
345 library. All files inside the `lib' subdirectory are considered system
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
346 library files - so don't install private stuff in this directory.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
347 On UNIX systems, IDLWAVE queries the shell for the value of `!DIR'.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
348 See also `idlwave-library-path'."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
349 :group 'idlwave-routine-info
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
350 :type 'directory)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
351
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
352 (defcustom idlwave-libinfo-file "~/.idlcat.el"
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
353 "*File for routine information of the IDL library.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
354 When this points to a file, the file will be loaded when IDLWAVE first
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
355 accesses routine info (or does completion).
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
356 When you scan the library with `idlwave-create-libinfo-file', this file
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
357 will be used to store the result."
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
358 :group 'idlwave-routine-info
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
359 :type 'file)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
360
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
361 (defcustom idlwave-special-lib-alist nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
362 "Alist of regular expressions matching special library directories.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
363 When listing routine source locations, IDLWAVE gives a short hint where
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
364 the file defining the routine is located. By default it lists `SystemLib'
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
365 for routines in the system library `!DIR/lib' and `Library' for anything
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
366 else. This variable can define additional types. The car of each entry
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
367 is a regular expression matching the file name (they normally will match
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
368 on the path). The cdr is the string to be used as identifier. Max 10
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
369 chars are allowed."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
370 :group 'idlwave-routine-info
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
371 :type '(repeat
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
372 (cons regexp string)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
373
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
374 (defgroup idlwave-online-help nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
375 "Online Help options for IDLWAVE mode."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
376 :group 'idlwave)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
377
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
378 (defcustom idlwave-help-directory ""
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
379 "The directory where idlw-help.txt and idlw-help.el are stored."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
380 :group 'idlwave-online-help
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
381 :type 'file)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
382
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
383 (defcustom idlwave-help-use-dedicated-frame t
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
384 "*Non-nil means, use a separate frame for Online Help if possible."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
385 :group 'idlwave-online-help
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
386 :type 'boolean)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
387
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
388 (defcustom idlwave-help-frame-parameters
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
389 '((height . 20) (unsplittable . t))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
390 "The frame parameters for the special Online Help frame.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
391 See also `idlwave-help-use-dedicated-frame'.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
392 If you do not set the frame width here, the value specified in
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
393 `idlw-help.el' will be used."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
394 :group 'idlwave-online-help
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
395 :type '(repeat
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
396 (cons symbol sexp)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
397
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
398 (defcustom idlwave-max-popup-menu-items 20
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
399 "Maximum number of items per pane in popup menus.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
400 Currently only used for class selection during completion help."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
401 :group 'idlwave-online-help
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
402 :type 'integer)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
403
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
404 (defcustom idlwave-extra-help-function 'idlwave-help-with-source
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
405 "The function to call for online help if the normal help fails.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
406 Online help works only for system routines which are described in the
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
407 IDL manuals. A function may be specified to access help from other sources.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
408
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
409 The function must accept four arguments: NAME, TYPE, CLASS, KEYWORD.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
410 The Help buffer is current when this function is called, and the help
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
411 text should be loaded into this buffer. If help is found, the function
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
412 should return the buffer position which should be used as `window-start'
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
413 in the help window. Also, the variable `idlwave-help-mode-line-indicator'
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
414 should be set to a useful string, which will be displayed in the mode line
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
415 of the help window. If should also set the variable `idlwave-min-frame-width'
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
416 to a positive integer. IDLWAVE will ensure that the help frame is at
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
417 least that many columns wide.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
418 Failure to find help should be indicated by throwing an error.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
419
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
420 When this variable is non-nil, IDLWAVE will allow the mouse-3 help click
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
421 for every routine and keyword, even though the item may not be highlighted
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
422 in blue (indicating the availability of system documentation).
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
423
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
424 The default value for this function is `idlwave-help-with-source' which
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
425 loads the routine source file into the help buffer. If you try to write
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
426 a different function which accesses a special help file or so, it is
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
427 probably a good idea to still call this function as a fallback."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
428 :group 'idlwave-online-help
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
429 :type 'symbol)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
430
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
431 (defcustom idlwave-help-fontify-source-code nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
432 "*Non-nil means, fontify source code displayed as help like normal code."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
433 :group 'idlwave-online-help
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
434 :type 'boolean)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
435
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
436 (defcustom idlwave-help-source-try-header t
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
437 "*Non-nil means, try to find help in routine header when displaying source.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
438 Routines which are not documented in the system manual use their source as
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
439 help text. When this variable is non-nil, we try to find a description of
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
440 the help item in the first routine doclib header above the routine definition.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
441 If the variable is nil, or if we cannot find/parse the header, the routine
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
442 definition is displayed instead."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
443 :group 'idlwave-online-help
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
444 :type 'boolean)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
445
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
446 (defface idlwave-help-link-face
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
447 '((((class color)) (:foreground "Blue"))
42456
8a4077ab418c (various face definitions): Use :weight, not :bold.
Richard M. Stallman <rms@gnu.org>
parents: 42444
diff changeset
448 (t (:weight bold)))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
449 "Face for highlighting links into IDLWAVE online help."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
450 :group 'idlwave-online-help)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
451
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
452 (defcustom idlwave-help-activate-links-agressively t
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
453 "*Non-nil means, make all possible links in help active.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
454 This just activates all words which are also a help topic - some links may
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
455 be misleading."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
456 :group 'idlwave-online-help
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
457 :type 'boolean)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
458
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
459
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
460 (defgroup idlwave-completion nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
461 "Completion options for IDLWAVE mode."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
462 :prefix "idlwave"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
463 :group 'idlwave)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
464
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
465 (eval-and-compile
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
466 (defconst idlwave-tmp
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
467 '(choice :tag "by applying the function"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
468 (const upcase)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
469 (const downcase)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
470 (const capitalize)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
471 (const preserve)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
472 (symbol :tag "Other"))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
473
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
474 (defcustom idlwave-completion-case '((routine . upcase)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
475 (keyword . upcase)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
476 (class . preserve)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
477 (method . preserve))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
478 "Association list setting the case of completed words.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
479
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
480 This variable determines the case (UPPER/lower/Capitalized...) of
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
481 words inserted into the buffer by completion. The preferred case can
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
482 be specified separately for routine names, keywords, classes and
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
483 methods.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
484 This alist should therefore have entries for `routine' (normal
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
485 functions and procedures, i.e. non-methods), `keyword', `class', and
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
486 `method'. Plausible values are
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
487
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
488 upcase upcase whole word, like `BOX_CURSOR'
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
489 downcase downcase whole word, like `read_ppm'
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
490 capitalize capitalize each part, like `Widget_Control'
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
491 preserve preserve case as is, like `IDLgrView'
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
492
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
493 The value can also be any Emacs Lisp function which transforms the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
494 case of characters in a string.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
495
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
496 A value of `preserve' means that the case of the completed word is
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
497 identical to the way it was written in the definition statement of the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
498 routine. This was implemented to allow for mixed-case completion, in
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
499 particular of object classes and methods.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
500 If a completable word is defined in multiple locations, the meaning of
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
501 `preserve' is not unique since the different definitions might be
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
502 cased differently. Therefore IDLWAVE always takes the case of the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
503 *first* definition it encounters during routine info collection and
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
504 uses the case derived from it consistently.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
505
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
506 Note that a lowercase-only string in the buffer will always be completed in
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
507 lower case (but see the variable `idlwave-completion-force-default-case').
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
508
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
509 After changing this variable, you need to either restart Emacs or press
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
510 `C-u C-c C-i' to update the internal lists."
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
511 :group 'idlwave-completion
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
512 :type `(repeat
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
513 (cons (symbol :tag "Derive completion case for")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
514 ,idlwave-tmp)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
515
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
516 (defcustom idlwave-completion-force-default-case nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
517 "*Non-nil means, completion will always honor `idlwave-completion-case'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
518 When nil, only the completion of a mixed case or upper case string
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
519 will honor the default settings in `idlwave-completion-case', while
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
520 the completion of lower case strings will be completed entirely in
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
521 lower case."
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
522 :group 'idlwave-completion
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
523 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
524
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
525 (defcustom idlwave-complete-empty-string-as-lower-case nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
526 "*Non-nil means, the empty string is considered downcase for completion.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
527 The case of what is already in the buffer determines the case of completions.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
528 When this variable is non-nil, the empty string is considered to be downcase.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
529 Completing on the empty string then offers downcase versions of the possible
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
530 completions."
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
531 :group 'idlwave-completion
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
532 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
533
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
534 (defvar idlwave-default-completion-case-is-down nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
535 "Obsolete variable. See `idlwave-complete-empty-string-as-lower-case' and
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
536 `idlwave-completion-case'.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
537
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
538 (defcustom idlwave-buffer-case-takes-precedence nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
539 "*Non-nil means, the case of tokens in buffers dominates over system stuff.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
540 To make this possible, we need to re-case everything each time we update
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
541 the routine info from the buffers. This is slow.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
542 The default is to consider the case given in the system and library files
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
543 first which makes updating much faster."
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
544 :group 'idlwave-completion
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
545 :type 'boolean)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
546
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
547 (defcustom idlwave-highlight-help-links-in-completion t
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
548 "*Non-nil means, highlight completions for which system help is available.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
549 Help can then be accessed with mouse-3.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
550 This option is only effective when the online help system is installed."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
551 :group 'idlwave-completion
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
552 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
553
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
554 (defcustom idlwave-support-inheritance t
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
555 "Non-nil means, treat inheritance with completion, online help etc.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
556 When nil, IDLWAVE only knows about the native methods and tags of a class,
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
557 not about inherited ones."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
558 :group 'idlwave-routine-info
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
559 :type 'boolean)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
560
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
561 (defcustom idlwave-completion-show-classes 1
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
562 "*Number of classes to show when completing object methods and keywords.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
563 When completing methods or keywords for an object with unknown class,
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
564 the *Completions* buffer will show the legal classes for each completion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
565 like this:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
566
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
567 MyMethod <Class1,Class2,Class3>
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
568
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
569 The value of this variable may be nil to inhibit display, or an integer to
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
570 indicate the maximum number of classes to display.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
571
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
572 On XEmacs, a full list of classes will also be placed into a `help-echo'
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
573 property on the competion items, so that the list of classes for the current
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
574 item is displayed in the echo area. If the value of this variable is a
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
575 negative integer, the `help-echo' property will be suppressed."
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
576 :group 'idlwave-completion
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
577 :type '(choice (const :tag "Don't show" nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
578 (integer :tag "Number of classes shown" 1)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
579
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
580 (defcustom idlwave-completion-fontify-classes t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
581 "*Non-nil means, fontify the classes in completions buffer.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
582 This makes it easier to distinguish the completion items from the extra
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
583 class info listed. See `idlwave-completion-show-classes'."
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
584 :group 'idlwave-completion
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
585 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
586
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
587 (defcustom idlwave-query-class '((method-default . nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
588 (keyword-default . nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
589 "Association list governing specification of object classes for completion.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
590
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
591 When IDLWAVE is trying to complete items which belong to the object
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
592 oriented part of IDL, it usually cannot determine the class of a given
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
593 object from context. In order to provide the user with a correct list
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
594 of methods or keywords, it would have to determine the appropriate
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
595 class. IDLWAVE has two ways to deal with this problem.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
596
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
597 1. One possibility is to combine the items of all available
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
598 classes for the purpose of completion. So when completing a
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
599 method, all methods of all classes are available, and when
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
600 completing a keyword, all keywords allowed for this method in any
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
601 class will be possible completions. This behavior is very much
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
602 like normal completion and is therefore the default. It works much
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
603 better than one might think - only for the INIT, GETPROPERTY and
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
604 SETPROPERTY the keyword lists become uncomfortably long.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
605 See also `idlwave-completion-show-classes'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
606
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
607 2. The second possibility is to ask the user on each occasion. To
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
608 make this less interruptive, IDLWAVE can store the class as a text
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
609 property on the object operator `->'. For a given object in the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
610 source code, class selection will then be needed only once
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
611 - for example to complete the method. Keywords to the method can
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
612 then be completed directly, because the class is already known.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
613 You will have to turn on the storage of the selected class
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
614 explicitly with the variable `idlwave-store-inquired-class'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
615
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
616 This variable allows to configure IDLWAVE's behavior during
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
617 completion. Its value is an alist, which should contain at least two
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
618 elements: (method-default . VALUE) and (keyword-default . VALUE),
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
619 where VALUE is either t or nil. These specify if the class should be
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
620 determined during method and keyword completion, respectively.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
621
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
622 The alist may have additional entries specifying exceptions from the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
623 keyword completion rule for specific methods, like INIT or
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
624 GETPROPERTY. In order to turn on class specification for the INIT
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
625 method, add an entry (\"INIT\" . t). The method name must be ALL-CAPS."
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
626 :group 'idlwave-completion
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
627 :type '(list
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
628 (cons (const method-default)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
629 (boolean :tag "Determine class when completing METHODS "))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
630 (cons (const keyword-default)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
631 (boolean :tag "Determine class when completing KEYWORDS "))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
632 (repeat
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
633 :tag "Exceptions to defaults"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
634 :inline t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
635 (cons (string :tag "MODULE" :value "")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
636 (boolean :tag "Determine class for this method")))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
637
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
638 (defcustom idlwave-store-inquired-class nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
639 "*Non-nil means, store class of a method call as text property on `->'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
640 IDLWAVE sometimes has to ask the user for the class associated with a
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
641 particular object method call. This happens during the commands
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
642 `idlwave-routine-info' and `idlwave-complete', depending upon the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
643 value of the variable `idlwave-query-class'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
644
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
645 When you specify a class, this information can be stored as a text
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
646 property on the `->' arrow in the source code, so that during the same
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
647 editing session, IDLWAVE will not have to ask again. When this
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
648 variable is non-nil, IDLWAVE will store and reuse the class information.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
649 The class stored can be checked and removed with `\\[idlwave-routine-info]'
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
650 on the arrow.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
651
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
652 The default of this variable is nil, since the result of commands then
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
653 is more predictable. However, if you know what you are doing, it can
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
654 be nice to turn this on.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
655
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
656 An arrow which knows the class will be highlighted with
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
657 `idlwave-class-arrow-face'. The command \\[idlwave-routine-info]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
658 displays (with prefix arg: deletes) the class stored on the arrow
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
659 at point."
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
660 :group 'idlwave-completion
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
661 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
662
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
663 (defcustom idlwave-class-arrow-face 'bold
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
664 "*Face to highlight object operator arrows `->' which carry a class property.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
665 When IDLWAVE stores a class name as text property on an object arrow
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
666 (see variable `idlwave-store-inquired-class', it highlights the arrow
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
667 with this font in order to remind the user that this arrow is special."
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
668 :group 'idlwave-completion
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
669 :type 'symbol)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
670
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
671 (defcustom idlwave-resize-routine-help-window t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
672 "*Non-nil means, resize the Routine-info *Help* window to fit the content."
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
673 :group 'idlwave-completion
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
674 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
675
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
676 (defcustom idlwave-keyword-completion-adds-equal t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
677 "*Non-nil means, completion automatically adds `=' after completed keywords."
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
678 :group 'idlwave-completion
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
679 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
680
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
681 (defcustom idlwave-function-completion-adds-paren t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
682 "*Non-nil means, completion automatically adds `(' after completed function.
42205
7308bbc423d5 Doc fixes.
Pavel Janík <Pavel@Janik.cz>
parents: 41739
diff changeset
683 nil means, don't add anything.
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
684 A value of `2' means, also add the closing parenthesis and position cursor
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
685 between the two."
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
686 :group 'idlwave-completion
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
687 :type '(choice (const :tag "Nothing" nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
688 (const :tag "(" t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
689 (const :tag "()" 2)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
690
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
691 (defcustom idlwave-completion-restore-window-configuration t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
692 "*Non-nil means, try to restore the window configuration after completion.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
693 When completion is not unique, Emacs displays a list of completions.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
694 This messes up your window configuration. With this variable set, IDLWAVE
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
695 restores the old configuration after successful completion."
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
696 :group 'idlwave-completion
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
697 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
698
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
699 ;;; Variables for abbrev and action behavior -----------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
700
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
701 (defgroup idlwave-abbrev-and-indent-action nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
702 "IDLWAVE performs actions when expanding abbreviations or indenting lines.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
703 The variables in this group govern this."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
704 :group 'idlwave)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
705
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
706 (defcustom idlwave-do-actions nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
707 "*Non-nil means performs actions when indenting.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
708 The actions that can be performed are listed in `idlwave-indent-action-table'."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
709 :group 'idlwave-abbrev-and-indent-action
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
710 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
711
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
712 (defcustom idlwave-abbrev-start-char "\\"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
713 "*A single character string used to start abbreviations in abbrev mode.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
714 Possible characters to chose from: ~`\%
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
715 or even '?'. '.' is not a good choice because it can make structure
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
716 field names act like abbrevs in certain circumstances.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
717
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
718 Changes to this in `idlwave-mode-hook' will have no effect. Instead a user
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
719 must set it directly using `setq' in the .emacs file before idlwave.el
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
720 is loaded."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
721 :group 'idlwave-abbrev-and-indent-action
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
722 :type 'string)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
723
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
724 (defcustom idlwave-surround-by-blank nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
725 "*Non-nil means, enable `idlwave-surround'.
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
726 If non-nil, `=',`<',`>',`&',`,', `->' are surrounded with spaces by
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
727 `idlwave-surround'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
728 See help for `idlwave-indent-action-table' for symbols using `idlwave-surround'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
729
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
730 Also see the default key bindings for keys using `idlwave-surround'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
731 Keys are bound and made into actions calling `idlwave-surround' with
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
732 `idlwave-action-and-binding'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
733 See help for `idlwave-action-and-binding' for examples.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
734
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
735 Also see help for `idlwave-surround'."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
736 :group 'idlwave-abbrev-and-indent-action
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
737 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
738
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
739 (defcustom idlwave-pad-keyword t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
740 "*Non-nil means pad '=' for keywords like assignments.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
741 Whenever `idlwave-surround' is non-nil then this affects how '=' is padded
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
742 for keywords. If t, it is padded the same as for assignments.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
743 If nil then spaces are removed. With any other value, spaces are left
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
744 unchanged."
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
745 :group 'idlwave-abbrev-and-indent-action
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
746 :type '(choice
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
747 (const :tag "Pad like assignments" t)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
748 (const :tag "Remove space near `='" nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
749 (const :tag "Keep space near `='" 'keep)))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
750
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
751 (defcustom idlwave-show-block t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
752 "*Non-nil means point blinks to block beginning for `idlwave-show-begin'."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
753 :group 'idlwave-abbrev-and-indent-action
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
754 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
755
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
756 (defcustom idlwave-expand-generic-end nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
757 "*Non-nil means expand generic END to ENDIF/ENDELSE/ENDWHILE etc."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
758 :group 'idlwave-abbrev-and-indent-action
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
759 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
760
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
761 (defcustom idlwave-reindent-end t
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
762 "*Non-nil means re-indent line after END was typed."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
763 :group 'idlwave-abbrev-and-indent-action
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
764 :type 'boolean)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
765
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
766 (defcustom idlwave-abbrev-move t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
767 "*Non-nil means the abbrev hook can move point.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
768 Set to nil by `idlwave-expand-region-abbrevs'. To see the abbrev
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
769 definitions, use the command `list-abbrevs', for abbrevs that move
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
770 point. Moving point is useful, for example, to place point between
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
771 parentheses of expanded functions.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
772
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
773 See `idlwave-check-abbrev'."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
774 :group 'idlwave-abbrev-and-indent-action
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
775 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
776
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
777 (defcustom idlwave-abbrev-change-case nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
778 "*Non-nil means all abbrevs will be forced to either upper or lower case.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
779 If the value t, all expanded abbrevs will be upper case.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
780 If the value is 'down then abbrevs will be forced to lower case.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
781 If nil, the case will not change.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
782 If `idlwave-reserved-word-upcase' is non-nil, reserved words will always be
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
783 upper case, regardless of this variable."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
784 :group 'idlwave-abbrev-and-indent-action
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
785 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
786
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
787 (defcustom idlwave-reserved-word-upcase nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
788 "*Non-nil means, reserved words will be made upper case via abbrev expansion.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
789 If nil case of reserved words is controlled by `idlwave-abbrev-change-case'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
790 Has effect only if in abbrev-mode."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
791 :group 'idlwave-abbrev-and-indent-action
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
792 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
793
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
794 ;;; Action/Expand Tables.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
795 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
796 ;; The average user may have difficulty modifying this directly. It
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
797 ;; can be modified/set in idlwave-mode-hook, but it is easier to use
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
798 ;; idlwave-action-and-binding. See help for idlwave-action-and-binding for
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
799 ;; examples of how to add an action.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
800 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
801 ;; The action table is used by `idlwave-indent-line' whereas both the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
802 ;; action and expand tables are used by `idlwave-indent-and-action'. In
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
803 ;; general, the expand table is only used when a line is explicitly
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
804 ;; indented. Whereas, in addition to being used when the expand table
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
805 ;; is used, the action table is used when a line is indirectly
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
806 ;; indented via line splitting, auto-filling or a new line creation.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
807 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
808 ;; Example actions:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
809 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
810 ;; Capitalize system vars
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
811 ;; (idlwave-action-and-binding idlwave-sysvar '(capitalize-word 1) t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
812 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
813 ;; Capitalize procedure name
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
814 ;; (idlwave-action-and-binding "\\<\\(pro\\|function\\)\\>[ \t]*\\<"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
815 ;; '(capitalize-word 1) t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
816 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
817 ;; Capitalize common block name
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
818 ;; (idlwave-action-and-binding "\\<common\\>[ \t]+\\<"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
819 ;; '(capitalize-word 1) t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
820 ;; Capitalize label
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
821 ;; (idlwave-action-and-binding (concat "^[ \t]*" idlwave-label)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
822 ;; '(capitalize-word -1) t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
823
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
824 (defvar idlwave-indent-action-table nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
825 "*Associated array containing action lists of search string (car),
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
826 and function as a cdr. This table is used by `idlwave-indent-line'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
827 See documentation for `idlwave-do-action' for a complete description of
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
828 the action lists.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
829
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
830 Additions to the table are made with `idlwave-action-and-binding' when a
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
831 binding is not requested.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
832 See help on `idlwave-action-and-binding' for examples.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
833
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
834 (defvar idlwave-indent-expand-table nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
835 "*Associated array containing action lists of search string (car),
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
836 and function as a cdr. The table is used by the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
837 `idlwave-indent-and-action' function. See documentation for
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
838 `idlwave-do-action' for a complete description of the action lists.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
839
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
840 Additions to the table are made with `idlwave-action-and-binding' when a
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
841 binding is requested.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
842 See help on `idlwave-action-and-binding' for examples.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
843
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
844 ;;; Documentation header and history keyword ---------------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
845
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
846 (defgroup idlwave-documentation nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
847 "Options for documenting IDLWAVE files."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
848 :group 'idlwave)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
849
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
850 ;; FIXME: make defcustom?
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
851 (defvar idlwave-file-header
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
852 (list nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
853 ";+
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
854 ; NAME:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
855 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
856 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
857 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
858 ; PURPOSE:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
859 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
860 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
861 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
862 ; CATEGORY:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
863 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
864 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
865 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
866 ; CALLING SEQUENCE:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
867 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
868 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
869 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
870 ; INPUTS:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
871 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
872 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
873 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
874 ; OPTIONAL INPUTS:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
875 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
876 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
877 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
878 ; KEYWORD PARAMETERS:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
879 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
880 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
881 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
882 ; OUTPUTS:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
883 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
884 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
885 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
886 ; OPTIONAL OUTPUTS:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
887 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
888 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
889 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
890 ; COMMON BLOCKS:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
891 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
892 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
893 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
894 ; SIDE EFFECTS:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
895 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
896 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
897 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
898 ; RESTRICTIONS:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
899 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
900 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
901 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
902 ; PROCEDURE:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
903 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
904 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
905 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
906 ; EXAMPLE:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
907 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
908 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
909 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
910 ; MODIFICATION HISTORY:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
911 ;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
912 ;-
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
913 ")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
914 "*A list (PATHNAME STRING) specifying the doc-header template to use for
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
915 summarizing a file. If PATHNAME is non-nil then this file will be included.
42205
7308bbc423d5 Doc fixes.
Pavel Janík <Pavel@Janik.cz>
parents: 41739
diff changeset
916 Otherwise STRING is used. If nil, the file summary will be omitted.
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
917 For example you might set PATHNAME to the path for the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
918 lib_template.pro file included in the IDL distribution.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
919
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
920 (defcustom idlwave-timestamp-hook 'idlwave-default-insert-timestamp
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
921 "*The hook function used to update the timestamp of a function."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
922 :group 'idlwave-documentation
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
923 :type 'function)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
924
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
925 (defcustom idlwave-doc-modifications-keyword "HISTORY"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
926 "*The modifications keyword to use with the log documentation commands.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
927 A ':' is added to the keyword end.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
928 Inserted by doc-header and used to position logs by doc-modification.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
929 If nil it will not be inserted."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
930 :group 'idlwave-documentation
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
931 :type 'string)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
932
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
933 (defcustom idlwave-doclib-start "^;+\\+"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
934 "*Regexp matching the start of a document library header."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
935 :group 'idlwave-documentation
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
936 :type 'regexp)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
937
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
938 (defcustom idlwave-doclib-end "^;+-"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
939 "*Regexp matching the end of a document library header."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
940 :group 'idlwave-documentation
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
941 :type 'regexp)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
942
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
943 ;;; External Programs -------------------------------------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
944
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
945 (defgroup idlwave-external-programs nil
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
946 "Path locations of external commands used by IDLWAVE."
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
947 :group 'idlwave)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
948
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
949 ;; WARNING: The following variable has recently been moved from
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
950 ;; idlw-shell.el to this file. I hope this does not break
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
951 ;; anything.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
952
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
953 (defcustom idlwave-shell-explicit-file-name "idl"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
954 "*If non-nil, is the command to run IDL.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
955 Should be an absolute file path or path relative to the current environment
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
956 execution search path."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
957 :group 'idlwave-external-programs
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
958 :type 'string)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
959
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
960 ;; FIXME: Document a case when is this needed.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
961 (defcustom idlwave-shell-command-line-options nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
962 "*A list of command line options for calling the IDL program."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
963 :type '(repeat (string :value ""))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
964 :group 'idlwave-external-programs)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
965
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
966 (defcustom idlwave-help-application "idlhelp"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
967 "*The external application providing reference help for programming."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
968 :group 'idlwave-external-programs
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
969 :type 'string)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
970
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
971 ;;; Some Shell variables which must be defined here.-----------------------
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
972
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
973 (defcustom idlwave-shell-debug-modifiers '()
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
974 "List of modifiers to be used for the debugging commands.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
975 Will be used to bind debugging commands in the shell buffer and in all
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
976 source buffers. These are additional convenience bindings, the debugging
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
977 commands are always available with the `C-c C-d' prefix.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
978 If you set this to '(control shift), this means setting a breakpoint will
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
979 be on `C-S-b', compiling a source file on `C-S-c' etc. Possible modifiers
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
980 are `control', `meta', `super', `hyper', `alt', and `shift'."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
981 :group 'idlwave-shell-general-setup
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
982 :type '(set :tag "Specify modifiers"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
983 (const control)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
984 (const meta)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
985 (const super)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
986 (const hyper)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
987 (const alt)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
988 (const shift)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
989
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
990 (defcustom idlwave-shell-automatic-start nil
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
991 "*If non-nil attempt invoke idlwave-shell if not already running.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
992 This is checked when an attempt to send a command to an
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
993 IDL process is made."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
994 :group 'idlwave-shell-general-setup
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
995 :type 'boolean)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
996
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
997 ;;; Miscellaneous variables -------------------------------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
998
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
999 (defgroup idlwave-misc nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1000 "Miscellaneous options for IDLWAVE mode."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1001 :group 'idlwave)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1002
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1003 (defcustom idlwave-startup-message t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1004 "*Non-nil displays a startup message when `idlwave-mode' is first called."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1005 :group 'idlwave-misc
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1006 :type 'boolean)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1007
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1008 (defcustom idlwave-default-font-lock-items
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1009 '(pros-and-functions batch-files idl-keywords label goto
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1010 common-blocks class-arrows)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1011 "Items which should be fontified on the default fontification level 2.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1012 IDLWAVE defines 3 levels of fontification. Level 1 is very little, level 3
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1013 is everything and level 2 is specified by this list.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1014 This variable must be set before IDLWAVE gets loaded. It is
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1015 a list of symbols, the following symbols are allowed.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1016
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1017 pros-and-functions Procedure and Function definitions
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1018 batch-files Batch Files
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1019 idl-keywords IDL Keywords
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1020 label Statement Labels
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1021 goto Goto Statements
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1022 common-blocks Common Blocks
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1023 keyword-parameters Keyword Parameters in routine definitions and calls
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1024 system-variables System Variables
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1025 fixme FIXME: Warning in comments (on XEmacs only v. 21.0 and up)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1026 class-arrows Object Arrows with class property"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1027 :group 'idlwave-misc
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1028 :type '(set
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1029 :inline t :greedy t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1030 (const :tag "Procedure and Function definitions" pros-and-functions)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1031 (const :tag "Batch Files" batch-files)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1032 (const :tag "IDL Keywords (reserved words)" idl-keywords)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1033 (const :tag "Statement Labels" label)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1034 (const :tag "Goto Statements" goto)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1035 (const :tag "Tags in Structure Definition" structtag)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1036 (const :tag "Structure Name" structname)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1037 (const :tag "Common Blocks" common-blocks)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1038 (const :tag "Keyword Parameters" keyword-parameters)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1039 (const :tag "System Variables" system-variables)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1040 (const :tag "FIXME: Warning" fixme)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1041 (const :tag "Object Arrows with class property " class-arrows)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1042
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1043 (defcustom idlwave-mode-hook nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1044 "Normal hook. Executed when a buffer is put into `idlwave-mode'."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1045 :group 'idlwave-misc
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1046 :type 'hook)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1047
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1048 (defcustom idlwave-load-hook nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1049 "Normal hook. Executed when idlwave.el is loaded."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1050 :group 'idlwave-misc
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1051 :type 'hook)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1052
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1053 (defvar idlwave-experimental nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1054 "Non-nil means turn on a few experimental features.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1055 This variable is only for the maintainer, to test difficult stuff,
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1056 while still distributing stable releases.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1057 As a user, you should not set this to t.")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1058
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1059 ;;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1060 ;;; End customization variables section
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1061 ;;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1062
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1063 ;;; Non customization variables
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1064
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1065 ;;; font-lock mode - Additions by Phil Williams, Ulrik Dickow and
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1066 ;;; Simon Marshall <simon@gnu.ai.mit.edu>
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1067 ;;; and Carsten Dominik...
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1068
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1069 (defconst idlwave-font-lock-keywords-1 nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1070 "Subdued level highlighting for IDLWAVE mode.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1071
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1072 (defconst idlwave-font-lock-keywords-2 nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1073 "Medium level highlighting for IDLWAVE mode.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1074
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1075 (defconst idlwave-font-lock-keywords-3 nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1076 "Gaudy level highlighting for IDLWAVE mode.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1077
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1078 (let* ((oldp (or (string-match "Lucid" emacs-version)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1079 (not (boundp 'emacs-minor-version))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1080 (and (<= emacs-major-version 19)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1081 (<= emacs-minor-version 29))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1082
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1083 ;; The following are the reserved words in IDL. Maybe we should
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1084 ;; highlight some more stuff as well?
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1085 (idl-keywords
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
1086 ;; To update this regexp, update the list of keywords and
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
1087 ;; evaluate the form.
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
1088 ; (insert
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1089 ; (prin1-to-string
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1090 ; (concat
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1091 ; "\\<\\("
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1092 ; (regexp-opt
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1093 ; '("and" "or" "xor" "not"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1094 ; "eq" "ge" "gt" "le" "lt" "ne"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1095 ; "for" "do" "endfor"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1096 ; "if" "then" "endif" "else" "endelse"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1097 ; "case" "of" "endcase"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1098 ; "switch" "break" "continue" "endswitch"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1099 ; "begin" "end"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1100 ; "repeat" "until" "endrep"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1101 ; "while" "endwhile"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1102 ; "goto" "return"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1103 ; "inherits" "mod"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1104 ; "compile_opt" "forward_function"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1105 ; "on_error" "on_ioerror")) ; on_error is not officially reserved
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1106 ; "\\)\\>")))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1107
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1108 "\\<\\(and\\|b\\(egin\\|reak\\)\\|c\\(ase\\|o\\(mpile_opt\\|ntinue\\)\\)\\|do\\|e\\(lse\\|nd\\(case\\|else\\|for\\|if\\|rep\\|switch\\|while\\)?\\|q\\)\\|for\\(ward_function\\)?\\|g\\(oto\\|[et]\\)\\|i\\(f\\|nherits\\)\\|l[et]\\|mod\\|n\\(e\\|ot\\)\\|o\\(n_\\(error\\|ioerror\\)\\|[fr]\\)\\|re\\(peat\\|turn\\)\\|switch\\|then\\|until\\|while\\|xor\\)\\>")
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1109
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1110 ;; Procedure declarations. Fontify keyword plus procedure name.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1111 ;; Function declarations. Fontify keyword plus function name.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1112 (pros-and-functions
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1113 '("\\<\\(function\\|pro\\)\\>[ \t]+\\(\\sw+\\(::\\sw+\\)?\\)"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1114 (1 font-lock-keyword-face)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1115 (2 font-lock-function-name-face nil t)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1116
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1117 ;; Common blocks
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1118 (common-blocks
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1119 '("\\<\\(common\\)\\>[ \t]*\\(\\sw+\\)?[ \t]*,?"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1120 (1 font-lock-keyword-face) ; "common"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1121 (2 font-lock-reference-face nil t) ; block name
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1122 (font-lock-match-c++-style-declaration-item-and-skip-to-next
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1123 ;; Start with point after block name and comma
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1124 (goto-char (match-end 0)) ; needed for XEmacs, could be nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1125 nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1126 (1 font-lock-variable-name-face) ; variable names
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1127 )))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1128
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1129 ;; Batch files
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1130 (batch-files
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1131 '("^[ \t]*\\(@[^ \t\n]+\\)" (1 font-lock-string-face)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1132
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1133 ;; FIXME warning.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1134 (fixme
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1135 '("\\<FIXME:" (0 font-lock-warning-face t)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1136
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1137 ;; Labels
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1138 (label
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1139 '("^[ \t]*\\([a-zA-Z]\\sw*:\\)" (1 font-lock-reference-face)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1140
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1141 ;; The goto statement and its label
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1142 (goto
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1143 '("\\(goto\\)[ \t]*,[ \t]*\\([a-zA-Z]\\sw*\\)"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1144 (1 font-lock-keyword-face)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1145 (2 font-lock-reference-face)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1146
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1147 ;; Tags in structure definitions. Note that this definition actually
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1148 ;; collides with labels, so we have to use the same face.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1149 (structtag
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1150 '("\\<\\([a-zA-Z][a-zA-Z0-9_]*:\\)[^:]" (1 font-lock-reference-face)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1151
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1152 ;; Structure names
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1153 (structname
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1154 '("\\({\\|\\<inherits\\s-\\)\\s-*\\([a-zA-Z][a-zA-Z0-9_]*\\)[},\t \n]"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1155 (2 font-lock-function-name-face)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1156
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1157 ;; Named parameters, like /xlog or ,xrange=[]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1158 ;; This is anchored to the comma preceeding the keyword.
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
1159 ;; Treats continuation lines, works only during whole buffer
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
1160 ;; fontification. Slow, use it only in fancy fontification.
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1161 (keyword-parameters
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1162 '("\\(,\\|[a-zA-Z0-9_](\\)[ \t]*\\(\\$[ \t]*\\(;.*\\)?\\(\n[ \t]*;.*\\)*\n[ \t]*\\)?\\(/[a-zA-Z_]\\sw*\\|[a-zA-Z_]\\sw*[ \t]*=\\)"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1163 (5 font-lock-reference-face)))
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
1164
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
1165 ;; System variables start with a bang.
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1166 (system-variables
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1167 '("\\(![a-zA-Z_0-9]+\\(\\.\\sw+\\)?\\)"
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1168 (1 font-lock-variable-name-face)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1169
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1170 ;; Special and unusual operators (not used because too noisy)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1171 (special-operators
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1172 '("[<>#]" (0 font-lock-keyword-face)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1173
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1174 ;; All operators (not used because too noisy)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1175 (all-operators
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1176 '("[-*^#+<>/]" (0 font-lock-keyword-face)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1177
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1178 ;; Arrows with text property `idlwave-class'
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1179 (class-arrows
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1180 (list 'idlwave-match-class-arrows
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1181 (list 0 (if (featurep 'xemacs)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1182 idlwave-class-arrow-face
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1183 'idlwave-class-arrow-face))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1184
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1185 )
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1186
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1187 ;; The following lines are just a dummy to make the compiler shut up
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1188 ;; about variables bound but not used.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1189 (setq oldp oldp
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1190 idl-keywords idl-keywords
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1191 pros-and-functions pros-and-functions
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1192 common-blocks common-blocks
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1193 batch-files batch-files
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1194 fixme fixme
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1195 label label
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1196 goto goto
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1197 structtag structtag
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1198 structname structname
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1199 keyword-parameters keyword-parameters
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1200 system-variables system-variables
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1201 special-operators special-operators
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1202 all-operators all-operators
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1203 class-arrows class-arrows)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1204
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1205 (setq idlwave-font-lock-keywords-1
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1206 (list pros-and-functions
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1207 batch-files
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1208 ))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1209
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1210 (setq idlwave-font-lock-keywords-2
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1211 (mapcar 'symbol-value idlwave-default-font-lock-items))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1212
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1213 (setq idlwave-font-lock-keywords-3
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1214 (list pros-and-functions
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1215 batch-files
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1216 idl-keywords
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1217 label goto
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1218 structtag
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1219 structname
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1220 common-blocks
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1221 keyword-parameters
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1222 system-variables
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1223 class-arrows
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1224 ))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1225 )
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1226
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1227 (defun idlwave-match-class-arrows (limit)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1228 ;; Match an object arrow with class property
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1229 (and idlwave-store-inquired-class
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1230 (re-search-forward "->" limit 'limit)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1231 (get-text-property (match-beginning 0) 'idlwave-class)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1232
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1233 (defvar idlwave-font-lock-keywords idlwave-font-lock-keywords-2
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1234 "Default expressions to highlight in IDLWAVE mode.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1235
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1236 (defvar idlwave-font-lock-defaults
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1237 '((idlwave-font-lock-keywords
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1238 idlwave-font-lock-keywords-1
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1239 idlwave-font-lock-keywords-2
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1240 idlwave-font-lock-keywords-3)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1241 nil t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1242 ((?$ . "w") (?_ . "w") (?. . "w"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1243 beginning-of-line))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1244
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1245 (put 'idlwave-mode 'font-lock-defaults
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1246 idlwave-font-lock-defaults) ; XEmacs
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1247
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1248 (defconst idlwave-comment-line-start-skip "^[ \t]*;"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1249 "Regexp to match the start of a full-line comment.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1250 That is the _beginning_ of a line containing a comment delimiter `;' preceded
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1251 only by whitespace.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1252
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1253 (defconst idlwave-begin-block-reg
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1254 "\\<\\(pro\\|function\\|begin\\|case\\|switch\\)\\>"
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1255 "Regular expression to find the beginning of a block. The case does
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1256 not matter. The search skips matches in comments.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1257
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1258 (defconst idlwave-begin-unit-reg "\\<\\(pro\\|function\\)\\>\\|\\`"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1259 "Regular expression to find the beginning of a unit. The case does
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1260 not matter.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1261
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1262 (defconst idlwave-end-unit-reg "\\<\\(pro\\|function\\)\\>\\|\\'"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1263 "Regular expression to find the line that indicates the end of unit.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1264 This line is the end of buffer or the start of another unit. The case does
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1265 not matter. The search skips matches in comments.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1266
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1267 (defconst idlwave-continue-line-reg "\\<\\$"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1268 "Regular expression to match a continued line.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1269
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1270 (defconst idlwave-end-block-reg
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1271 "\\<end\\(\\|case\\|switch\\|else\\|for\\|if\\|rep\\|while\\)\\>"
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1272 "Regular expression to find the end of a block. The case does
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1273 not matter. The search skips matches found in comments.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1274
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1275 (defconst idlwave-block-matches
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1276 '(("pro" . "end")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1277 ("function" . "end")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1278 ("case" . "endcase")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1279 ("else" . "endelse")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1280 ("for" . "endfor")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1281 ("then" . "endif")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1282 ("repeat" . "endrep")
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1283 ("switch" . "endswitch")
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1284 ("while" . "endwhile"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1285 "Matches between statements and the corresponding END variant.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1286 The cars are the reserved words starting a block. If the block really
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1287 begins with BEGIN, the cars are the reserved words before the begin
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1288 which can be used to identify the block type.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1289 This is used to check for the correct END type, to close blocks and
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1290 to expand generic end statements to their detailed form.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1291
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1292 (defconst idlwave-block-match-regexp
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1293 "\\<\\(else\\|for\\|then\\|repeat\\|while\\)\\>"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1294 "Regular expression matching reserved words which can stand before
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1295 blocks starting with a BEGIN statement. The matches must have associations
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1296 `idlwave-block-matches'")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1297
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1298 (defconst idlwave-identifier "[a-zA-Z][a-zA-Z0-9$_]*"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1299 "Regular expression matching an IDL identifier.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1300
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1301 (defconst idlwave-sysvar (concat "!" idlwave-identifier)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1302 "Regular expression matching IDL system variables.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1303
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1304 (defconst idlwave-variable (concat idlwave-identifier "\\|" idlwave-sysvar)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1305 "Regular expression matching IDL variable names.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1306
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1307 (defconst idlwave-label (concat idlwave-identifier ":")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1308 "Regular expression matching IDL labels.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1309
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1310 (defconst idlwave-statement-match
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1311 (list
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1312 ;; "endif else" is the the only possible "end" that can be
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1313 ;; followed by a statement on the same line.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1314 '(endelse . ("end\\(\\|if\\)\\s +else" "end\\(\\|if\\)\\s +else"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1315 ;; all other "end"s can not be followed by a statement.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1316 (cons 'end (list idlwave-end-block-reg nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1317 '(if . ("if\\>" "then"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1318 '(for . ("for\\>" "do"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1319 '(begin . ("begin\\>" nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1320 '(pdef . ("pro\\>\\|function\\>" nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1321 '(while . ("while\\>" "do"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1322 '(repeat . ("repeat\\>" "repeat"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1323 '(goto . ("goto\\>" nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1324 '(case . ("case\\>" nil))
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1325 '(switch . ("switch\\>" nil))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1326 (cons 'call (list (concat idlwave-identifier "\\(\\s *$\\|\\s *,\\)") nil))
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
1327 '(assign . ("[^=>\n]*=" nil)))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1328
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1329 "Associated list of statement matching regular expressions.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1330 Each regular expression matches the start of an IDL statement. The
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1331 first element of each association is a symbol giving the statement
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1332 type. The associated value is a list. The first element of this list
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1333 is a regular expression matching the start of an IDL statement for
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1334 identifying the statement type. The second element of this list is a
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1335 regular expression for finding a substatement for the type. The
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1336 substatement starts after the end of the found match modulo
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1337 whitespace. If it is nil then the statement has no substatement. The
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1338 list order matters since matching an assignment statement exactly is
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1339 not possible without parsing. Thus assignment statement become just
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1340 the leftover unidentified statements containing an equal sign." )
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1341
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1342 (defvar idlwave-fill-function 'auto-fill-function
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1343 "IDL mode auto fill function.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1344
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1345 (defvar idlwave-comment-indent-function 'comment-indent-function
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1346 "IDL mode comment indent function.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1347
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1348 ;; Note that this is documented in the v18 manuals as being a string
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1349 ;; of length one rather than a single character.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1350 ;; The code in this file accepts either format for compatibility.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1351 (defvar idlwave-comment-indent-char ?\
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1352 "Character to be inserted for IDL comment indentation.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1353 Normally a space.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1354
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1355 (defconst idlwave-continuation-char ?$
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1356 "Character which is inserted as a last character on previous line by
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1357 \\[idlwave-split-line] to begin a continuation line. Normally $.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1358
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1359 (defconst idlwave-mode-version " 4.7")
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1360
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1361 (defmacro idlwave-keyword-abbrev (&rest args)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1362 "Creates a function for abbrev hooks to call `idlwave-check-abbrev' with args."
41608
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38436
diff changeset
1363 `(quote (lambda ()
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38436
diff changeset
1364 ,(append '(idlwave-check-abbrev) args))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1365
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1366 ;; If I take the time I can replace idlwave-keyword-abbrev with
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1367 ;; idlwave-code-abbrev and remove the quoted abbrev check from
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1368 ;; idlwave-check-abbrev. Then, e.g, (idlwave-keyword-abbrev 0 t) becomes
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1369 ;; (idlwave-code-abbrev idlwave-check-abbrev 0 t). In fact I should change
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1370 ;; the name of idlwave-check-abbrev to something like idlwave-modify-abbrev.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1371
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1372 (defmacro idlwave-code-abbrev (&rest args)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1373 "Creates a function for abbrev hooks that ensures abbrevs are not quoted.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1374 Specifically, if the abbrev is in a comment or string it is unexpanded.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1375 Otherwise ARGS forms a list that is evaluated."
41608
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38436
diff changeset
1376 `(quote (lambda ()
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38436
diff changeset
1377 ,(prin1-to-string args) ;; Puts the code in the doc string
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38436
diff changeset
1378 (if (idlwave-quoted)
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38436
diff changeset
1379 (progn (unexpand-abbrev) nil)
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38436
diff changeset
1380 ,(append args)))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1381
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1382 (defvar idlwave-mode-map (make-sparse-keymap)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1383 "Keymap used in IDL mode.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1384
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1385 (defvar idlwave-mode-syntax-table (make-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1386 "Syntax table in use in `idlwave-mode' buffers.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1387
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1388 (modify-syntax-entry ?+ "." idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1389 (modify-syntax-entry ?- "." idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1390 (modify-syntax-entry ?* "." idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1391 (modify-syntax-entry ?/ "." idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1392 (modify-syntax-entry ?^ "." idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1393 (modify-syntax-entry ?# "." idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1394 (modify-syntax-entry ?= "." idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1395 (modify-syntax-entry ?% "." idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1396 (modify-syntax-entry ?< "." idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1397 (modify-syntax-entry ?> "." idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1398 (modify-syntax-entry ?\' "\"" idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1399 (modify-syntax-entry ?\" "\"" idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1400 (modify-syntax-entry ?\\ "." idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1401 (modify-syntax-entry ?_ "_" idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1402 (modify-syntax-entry ?{ "(}" idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1403 (modify-syntax-entry ?} "){" idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1404 (modify-syntax-entry ?$ "_" idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1405 (modify-syntax-entry ?. "." idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1406 (modify-syntax-entry ?\; "<" idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1407 (modify-syntax-entry ?\n ">" idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1408 (modify-syntax-entry ?\f ">" idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1409
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1410 (defvar idlwave-find-symbol-syntax-table
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1411 (copy-syntax-table idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1412 "Syntax table that treats symbol characters as word characters.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1413
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1414 (modify-syntax-entry ?$ "w" idlwave-find-symbol-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1415 (modify-syntax-entry ?_ "w" idlwave-find-symbol-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1416
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1417 (defmacro idlwave-with-special-syntax (&rest body)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1418 "Execute BODY with a different systax table."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1419 `(let ((saved-syntax (syntax-table)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1420 (unwind-protect
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1421 (progn
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1422 (set-syntax-table idlwave-find-symbol-syntax-table)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1423 ,@body)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1424 (set-syntax-table saved-syntax))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1425
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1426 (defvar idlwave-print-symbol-syntax-table
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1427 (copy-syntax-table idlwave-mode-syntax-table)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1428 "Syntax table that treats symbol characters as word characters.")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1429
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1430 (modify-syntax-entry ?$ "w" idlwave-find-symbol-syntax-table)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1431 (modify-syntax-entry ?_ "w" idlwave-find-symbol-syntax-table)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1432 (modify-syntax-entry ?! "w" idlwave-find-symbol-syntax-table)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1433 (modify-syntax-entry ?. "w" idlwave-find-symbol-syntax-table)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1434
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1435 (defmacro idlwave-with-special-syntax1 (&rest body)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1436 "Execute BODY with a different systax table."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1437 `(let ((saved-syntax (syntax-table)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1438 (unwind-protect
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1439 (progn
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1440 (set-syntax-table idlwave-find-symbol-syntax-table)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1441 ,@body)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1442 (set-syntax-table saved-syntax))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1443
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1444 (defun idlwave-action-and-binding (key cmd &optional select)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1445 "KEY and CMD are made into a key binding and an indent action.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1446 KEY is a string - same as for the `define-key' function. CMD is a
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1447 function of no arguments or a list to be evaluated. CMD is bound to
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1448 KEY in `idlwave-mode-map' by defining an anonymous function calling
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1449 `self-insert-command' followed by CMD. If KEY contains more than one
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1450 character a binding will only be set if SELECT is 'both.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1451
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1452 (KEY . CMD\ is also placed in the `idlwave-indent-expand-table',
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1453 replacing any previous value for KEY. If a binding is not set then it
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1454 will instead be placed in `idlwave-indent-action-table'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1455
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1456 If the optional argument SELECT is nil then an action and binding are
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1457 created. If SELECT is 'noaction, then a binding is always set and no
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1458 action is created. If SELECT is 'both then an action and binding
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1459 will both be created even if KEY contains more than one character.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1460 Otherwise, if SELECT is non-nil then only an action is created.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1461
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1462 Some examples:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1463 No spaces before and 1 after a comma
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1464 (idlwave-action-and-binding \",\" '(idlwave-surround 0 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1465 A minimum of 1 space before and after `=' (see `idlwave-expand-equal').
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1466 (idlwave-action-and-binding \"=\" '(idlwave-expand-equal -1 -1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1467 Capitalize system variables - action only
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1468 (idlwave-action-and-binding idlwave-sysvar '(capitalize-word 1) t)"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1469 (if (not (equal select 'noaction))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1470 ;; Add action
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1471 (let* ((table (if select 'idlwave-indent-action-table
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1472 'idlwave-indent-expand-table))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1473 (cell (assoc key (eval table))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1474 (if cell
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1475 ;; Replace action command
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1476 (setcdr cell cmd)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1477 ;; New action
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1478 (set table (append (eval table) (list (cons key cmd)))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1479 ;; Make key binding for action
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1480 (if (or (and (null select) (= (length key) 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1481 (equal select 'noaction)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1482 (equal select 'both))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1483 (define-key idlwave-mode-map key
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1484 (append '(lambda ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1485 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1486 (self-insert-command 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1487 (list (if (listp cmd)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1488 cmd
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1489 (list cmd)))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1490
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1491 (fset 'idlwave-debug-map (make-sparse-keymap))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1492
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
1493 (define-key idlwave-mode-map "\C-c " 'idlwave-hard-tab)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1494 (define-key idlwave-mode-map [(control tab)] 'idlwave-hard-tab)
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
1495 ;(define-key idlwave-mode-map "\C-c\C- " 'idlwave-hard-tab)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1496 (define-key idlwave-mode-map "'" 'idlwave-show-matching-quote)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1497 (define-key idlwave-mode-map "\"" 'idlwave-show-matching-quote)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1498 (define-key idlwave-mode-map "\C-c;" 'idlwave-toggle-comment-region)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1499 (define-key idlwave-mode-map "\C-\M-a" 'idlwave-beginning-of-subprogram)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1500 (define-key idlwave-mode-map "\C-\M-e" 'idlwave-end-of-subprogram)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1501 (define-key idlwave-mode-map "\C-c{" 'idlwave-beginning-of-block)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1502 (define-key idlwave-mode-map "\C-c}" 'idlwave-end-of-block)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1503 (define-key idlwave-mode-map "\C-c]" 'idlwave-close-block)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1504 (define-key idlwave-mode-map "\M-\C-h" 'idlwave-mark-subprogram)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1505 (define-key idlwave-mode-map "\M-\C-n" 'idlwave-forward-block)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1506 (define-key idlwave-mode-map "\M-\C-p" 'idlwave-backward-block)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1507 (define-key idlwave-mode-map "\M-\C-d" 'idlwave-down-block)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1508 (define-key idlwave-mode-map "\M-\C-u" 'idlwave-backward-up-block)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1509 (define-key idlwave-mode-map "\M-\r" 'idlwave-split-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1510 (define-key idlwave-mode-map "\M-\C-q" 'idlwave-indent-subprogram)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1511 (define-key idlwave-mode-map "\C-c\C-p" 'idlwave-previous-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1512 (define-key idlwave-mode-map "\C-c\C-n" 'idlwave-next-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1513 ;; (define-key idlwave-mode-map "\r" 'idlwave-newline)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1514 ;; (define-key idlwave-mode-map "\t" 'idlwave-indent-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1515 (define-key idlwave-mode-map "\C-c\C-a" 'idlwave-auto-fill-mode)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1516 (define-key idlwave-mode-map "\M-q" 'idlwave-fill-paragraph)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1517 (define-key idlwave-mode-map "\M-s" 'idlwave-edit-in-idlde)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1518 (define-key idlwave-mode-map "\C-c\C-h" 'idlwave-doc-header)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1519 (define-key idlwave-mode-map "\C-c\C-m" 'idlwave-doc-modification)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1520 (define-key idlwave-mode-map "\C-c\C-c" 'idlwave-case)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1521 (define-key idlwave-mode-map "\C-c\C-d" 'idlwave-debug-map)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1522 (define-key idlwave-mode-map "\C-c\C-d\C-c" 'idlwave-shell-save-and-run)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1523 (define-key idlwave-mode-map "\C-c\C-d\C-b" 'idlwave-shell-break-here)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1524 (when (and (boundp 'idlwave-shell-debug-modifiers)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1525 (listp idlwave-shell-debug-modifiers)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1526 (not (equal idlwave-shell-debug-modifiers '())))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1527 ;; Bind the debug commands also with the special modifiers.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1528 (let ((shift (memq 'shift idlwave-shell-debug-modifiers))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1529 (mods-noshift (delq 'shift
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1530 (copy-sequence idlwave-shell-debug-modifiers))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1531 (define-key idlwave-mode-map
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1532 (vector (append mods-noshift (list (if shift ?C ?c))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1533 'idlwave-shell-save-and-run)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1534 (define-key idlwave-mode-map
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1535 (vector (append mods-noshift (list (if shift ?B ?b))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1536 'idlwave-shell-break-here)))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1537 (define-key idlwave-mode-map "\C-c\C-f" 'idlwave-for)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1538 ;; (define-key idlwave-mode-map "\C-c\C-f" 'idlwave-function)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1539 ;; (define-key idlwave-mode-map "\C-c\C-p" 'idlwave-procedure)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1540 (define-key idlwave-mode-map "\C-c\C-r" 'idlwave-repeat)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1541 (define-key idlwave-mode-map "\C-c\C-w" 'idlwave-while)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1542 (define-key idlwave-mode-map "\C-c\C-k" 'idlwave-kill-autoloaded-buffers)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1543 (define-key idlwave-mode-map "\C-c\C-s" 'idlwave-shell)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1544 (define-key idlwave-mode-map "\C-c\C-l" 'idlwave-shell-recenter-shell-window)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1545 (define-key idlwave-mode-map "\C-c\C-b" 'idlwave-list-buffer-load-path-shadows)
27185
ae5b17b9c403 fixed some bugs associated with the new file names
Carsten Dominik <dominik@science.uva.nl>
parents: 27107
diff changeset
1546 (autoload 'idlwave-shell "idlw-shell"
ae5b17b9c403 fixed some bugs associated with the new file names
Carsten Dominik <dominik@science.uva.nl>
parents: 27107
diff changeset
1547 "Run an inferior IDL, with I/O through buffer `(idlwave-shell-buffer)'." t)
27107
7b2b73f13427 Renamed idlwave-*.el into idlw-*.el.
Eli Zaretskii <eliz@gnu.org>
parents: 26956
diff changeset
1548 (autoload 'idlwave-shell-send-command "idlw-shell")
7b2b73f13427 Renamed idlwave-*.el into idlw-*.el.
Eli Zaretskii <eliz@gnu.org>
parents: 26956
diff changeset
1549 (autoload 'idlwave-shell-recenter-shell-window "idlw-shell"
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1550 "Run `idlwave-shell' and switch back to current window" t)
27107
7b2b73f13427 Renamed idlwave-*.el into idlw-*.el.
Eli Zaretskii <eliz@gnu.org>
parents: 26956
diff changeset
1551 (autoload 'idlwave-shell-save-and-run "idlw-shell"
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1552 "Save and run buffer under the shell." t)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1553 (autoload 'idlwave-shell-break-here "idlw-shell"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1554 "Set breakpoint in current line." t)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1555 (define-key idlwave-mode-map "\C-c\C-v" 'idlwave-find-module)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1556 (define-key idlwave-mode-map "\C-c?" 'idlwave-routine-info)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1557 (define-key idlwave-mode-map "\M-?" 'idlwave-context-help)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1558 (define-key idlwave-mode-map [(meta tab)] 'idlwave-complete)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1559 (define-key idlwave-mode-map "\C-c\C-i" 'idlwave-update-routine-info)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1560 (define-key idlwave-mode-map "\C-c=" 'idlwave-resolve)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1561 (define-key idlwave-mode-map
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1562 (if (featurep 'xemacs) [(shift button3)] [(shift mouse-3)])
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1563 'idlwave-mouse-context-help)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1564
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1565 ;; Set action and key bindings.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1566 ;; See description of the function `idlwave-action-and-binding'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1567 ;; Automatically add spaces for the following characters
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1568 (idlwave-action-and-binding "&" '(idlwave-surround -1 -1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1569 (idlwave-action-and-binding "<" '(idlwave-surround -1 -1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1570 (idlwave-action-and-binding ">" '(idlwave-surround -1 -1 '(?-)))
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
1571 (idlwave-action-and-binding "->" '(idlwave-surround -1 -1 nil 2))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1572 (idlwave-action-and-binding "," '(idlwave-surround 0 -1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1573 ;; Automatically add spaces to equal sign if not keyword
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1574 (idlwave-action-and-binding "=" '(idlwave-expand-equal -1 -1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1575
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1576 ;;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1577 ;;; Abbrev Section
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1578 ;;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1579 ;;; When expanding abbrevs and the abbrev hook moves backward, an extra
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1580 ;;; space is inserted (this is the space typed by the user to expanded
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1581 ;;; the abbrev).
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1582 ;;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1583
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1584 (condition-case nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1585 (modify-syntax-entry (string-to-char idlwave-abbrev-start-char)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1586 "w" idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1587 (error nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1588
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1589 (defvar idlwave-mode-abbrev-table nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1590 "Abbreviation table used for IDLWAVE mode")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1591 (define-abbrev-table 'idlwave-mode-abbrev-table ())
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1592 (let ((abbrevs-changed nil) ;; mask the current value to avoid save
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1593 (tb idlwave-mode-abbrev-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1594 (c idlwave-abbrev-start-char))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1595 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1596 ;; Templates
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1597 ;;
42444
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1598 (define-abbrev tb (concat c "c") "" (idlwave-code-abbrev idlwave-case) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1599 (define-abbrev tb (concat c "sw") "" (idlwave-code-abbrev idlwave-switch) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1600 (define-abbrev tb (concat c "f") "" (idlwave-code-abbrev idlwave-for) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1601 (define-abbrev tb (concat c "fu") "" (idlwave-code-abbrev idlwave-function) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1602 (define-abbrev tb (concat c "pr") "" (idlwave-code-abbrev idlwave-procedure) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1603 (define-abbrev tb (concat c "r") "" (idlwave-code-abbrev idlwave-repeat) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1604 (define-abbrev tb (concat c "w") "" (idlwave-code-abbrev idlwave-while) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1605 (define-abbrev tb (concat c "i") "" (idlwave-code-abbrev idlwave-if) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1606 (define-abbrev tb (concat c "elif") "" (idlwave-code-abbrev idlwave-elif) 0 t)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1607 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1608 ;; Keywords, system functions, conversion routines
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1609 ;;
42444
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1610 (define-abbrev tb (concat c "b") "begin" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1611 (define-abbrev tb (concat c "co") "common" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1612 (define-abbrev tb (concat c "cb") "byte()" (idlwave-keyword-abbrev 1) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1613 (define-abbrev tb (concat c "cx") "fix()" (idlwave-keyword-abbrev 1) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1614 (define-abbrev tb (concat c "cl") "long()" (idlwave-keyword-abbrev 1) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1615 (define-abbrev tb (concat c "cf") "float()" (idlwave-keyword-abbrev 1) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1616 (define-abbrev tb (concat c "cs") "string()" (idlwave-keyword-abbrev 1) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1617 (define-abbrev tb (concat c "cc") "complex()" (idlwave-keyword-abbrev 1) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1618 (define-abbrev tb (concat c "cd") "double()" (idlwave-keyword-abbrev 1) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1619 (define-abbrev tb (concat c "e") "else" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1620 (define-abbrev tb (concat c "ec") "endcase" 'idlwave-show-begin 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1621 (define-abbrev tb (concat c "es") "endswitch" 'idlwave-show-begin 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1622 (define-abbrev tb (concat c "ee") "endelse" 'idlwave-show-begin 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1623 (define-abbrev tb (concat c "ef") "endfor" 'idlwave-show-begin 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1624 (define-abbrev tb (concat c "ei") "endif else if" 'idlwave-show-begin 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1625 (define-abbrev tb (concat c "el") "endif else" 'idlwave-show-begin 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1626 (define-abbrev tb (concat c "en") "endif" 'idlwave-show-begin 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1627 (define-abbrev tb (concat c "er") "endrep" 'idlwave-show-begin 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1628 (define-abbrev tb (concat c "ew") "endwhile" 'idlwave-show-begin 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1629 (define-abbrev tb (concat c "g") "goto," (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1630 (define-abbrev tb (concat c "h") "help," (idlwave-keyword-abbrev 0) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1631 (define-abbrev tb (concat c "k") "keyword_set()" (idlwave-keyword-abbrev 1) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1632 (define-abbrev tb (concat c "n") "n_elements()" (idlwave-keyword-abbrev 1) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1633 (define-abbrev tb (concat c "on") "on_error," (idlwave-keyword-abbrev 0) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1634 (define-abbrev tb (concat c "oi") "on_ioerror," (idlwave-keyword-abbrev 0 1) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1635 (define-abbrev tb (concat c "ow") "openw," (idlwave-keyword-abbrev 0) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1636 (define-abbrev tb (concat c "or") "openr," (idlwave-keyword-abbrev 0) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1637 (define-abbrev tb (concat c "ou") "openu," (idlwave-keyword-abbrev 0) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1638 (define-abbrev tb (concat c "p") "print," (idlwave-keyword-abbrev 0) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1639 (define-abbrev tb (concat c "pt") "plot," (idlwave-keyword-abbrev 0) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1640 (define-abbrev tb (concat c "re") "read," (idlwave-keyword-abbrev 0) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1641 (define-abbrev tb (concat c "rf") "readf," (idlwave-keyword-abbrev 0) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1642 (define-abbrev tb (concat c "ru") "readu," (idlwave-keyword-abbrev 0) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1643 (define-abbrev tb (concat c "rt") "return" (idlwave-keyword-abbrev 0) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1644 (define-abbrev tb (concat c "sc") "strcompress()" (idlwave-keyword-abbrev 1) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1645 (define-abbrev tb (concat c "sn") "strlen()" (idlwave-keyword-abbrev 1) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1646 (define-abbrev tb (concat c "sl") "strlowcase()" (idlwave-keyword-abbrev 1) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1647 (define-abbrev tb (concat c "su") "strupcase()" (idlwave-keyword-abbrev 1) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1648 (define-abbrev tb (concat c "sm") "strmid()" (idlwave-keyword-abbrev 1) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1649 (define-abbrev tb (concat c "sp") "strpos()" (idlwave-keyword-abbrev 1) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1650 (define-abbrev tb (concat c "st") "strput()" (idlwave-keyword-abbrev 1) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1651 (define-abbrev tb (concat c "sr") "strtrim()" (idlwave-keyword-abbrev 1) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1652 (define-abbrev tb (concat c "t") "then" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1653 (define-abbrev tb (concat c "u") "until" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1654 (define-abbrev tb (concat c "wu") "writeu," (idlwave-keyword-abbrev 0) 0 t)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1655 (define-abbrev tb (concat c "ine") "if n_elements() eq 0 then"
42444
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1656 (idlwave-keyword-abbrev 11) 0 t)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1657 (define-abbrev tb (concat c "inn") "if n_elements() ne 0 then"
42444
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1658 (idlwave-keyword-abbrev 11) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1659 (define-abbrev tb (concat c "np") "n_params()" (idlwave-keyword-abbrev 0) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1660 (define-abbrev tb (concat c "s") "size()" (idlwave-keyword-abbrev 1) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1661 (define-abbrev tb (concat c "wi") "widget_info()" (idlwave-keyword-abbrev 1) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1662 (define-abbrev tb (concat c "wc") "widget_control," (idlwave-keyword-abbrev 0) 0 t)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1663
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1664 ;; This section is reserved words only. (From IDL user manual)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1665 ;;
42444
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1666 (define-abbrev tb "and" "and" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1667 (define-abbrev tb "begin" "begin" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1668 (define-abbrev tb "break" "break" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1669 (define-abbrev tb "case" "case" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1670 (define-abbrev tb "common" "common" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1671 (define-abbrev tb "continue" "continue" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1672 (define-abbrev tb "do" "do" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1673 (define-abbrev tb "else" "else" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1674 (define-abbrev tb "end" "end" 'idlwave-show-begin-check 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1675 (define-abbrev tb "endcase" "endcase" 'idlwave-show-begin-check 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1676 (define-abbrev tb "endelse" "endelse" 'idlwave-show-begin-check 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1677 (define-abbrev tb "endfor" "endfor" 'idlwave-show-begin-check 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1678 (define-abbrev tb "endif" "endif" 'idlwave-show-begin-check 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1679 (define-abbrev tb "endrep" "endrep" 'idlwave-show-begin-check 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1680 (define-abbrev tb "endswitch" "endswitch" 'idlwave-show-begin-check 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1681 (define-abbrev tb "endwhi" "endwhi" 'idlwave-show-begin-check 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1682 (define-abbrev tb "endwhile" "endwhile" 'idlwave-show-begin-check 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1683 (define-abbrev tb "eq" "eq" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1684 (define-abbrev tb "for" "for" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1685 (define-abbrev tb "function" "function" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1686 (define-abbrev tb "ge" "ge" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1687 (define-abbrev tb "goto" "goto" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1688 (define-abbrev tb "gt" "gt" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1689 (define-abbrev tb "if" "if" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1690 (define-abbrev tb "le" "le" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1691 (define-abbrev tb "lt" "lt" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1692 (define-abbrev tb "mod" "mod" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1693 (define-abbrev tb "ne" "ne" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1694 (define-abbrev tb "not" "not" (idlwave-keyword-abbrev 0 t 0 t))
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1695 (define-abbrev tb "of" "of" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1696 (define-abbrev tb "on_ioerror" "on_ioerror" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1697 (define-abbrev tb "or" "or" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1698 (define-abbrev tb "pro" "pro" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1699 (define-abbrev tb "repeat" "repeat" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1700 (define-abbrev tb "switch" "switch" (idlwave-keyword-abbrev 0 t 0 t))
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1701 (define-abbrev tb "then" "then" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1702 (define-abbrev tb "until" "until" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1703 (define-abbrev tb "while" "while" (idlwave-keyword-abbrev 0 t) 0 t)
732e0cda5c89 (idlwave-mode-abbrev-table): Mark all the predefined abbrevs as "system"
Pavel Janík <Pavel@Janik.cz>
parents: 42205
diff changeset
1704 (define-abbrev tb "xor" "xor" (idlwave-keyword-abbrev 0 t) 0 t))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1705
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1706 (defvar imenu-create-index-function)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1707 (defvar extract-index-name-function)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1708 (defvar prev-index-position-function)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1709 (defvar imenu-extract-index-name-function)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1710 (defvar imenu-prev-index-position-function)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1711 ;; defined later - so just make the compiler shut up
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1712 (defvar idlwave-mode-menu)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1713 (defvar idlwave-mode-debug-menu)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1714
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1715 ;;;###autoload
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1716 (defun idlwave-mode ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1717 "Major mode for editing IDL and WAVE CL .pro files.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1718
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1719 The main features of this mode are
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1720
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1721 1. Indentation and Formatting
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1722 --------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1723 Like other Emacs programming modes, C-j inserts a newline and indents.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1724 TAB is used for explicit indentation of the current line.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1725
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1726 To start a continuation line, use \\[idlwave-split-line]. This function can also
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1727 be used in the middle of a line to split the line at that point.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1728 When used inside a long constant string, the string is split at
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1729 that point with the `+' concatenation operator.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1730
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1731 Comments are indented as follows:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1732
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1733 `;;;' Indentation remains unchanged.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1734 `;;' Indent like the surrounding code
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1735 `;' Indent to a minimum column.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1736
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1737 The indentation of comments starting in column 0 is never changed.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1738
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1739 Use \\[idlwave-fill-paragraph] to refill a paragraph inside a comment. The indentation
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1740 of the second line of the paragraph relative to the first will be
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1741 retained. Use \\[idlwave-auto-fill-mode] to toggle auto-fill mode for these comments.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1742 When the variable `idlwave-fill-comment-line-only' is nil, code
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1743 can also be auto-filled and auto-indented (not recommended).
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1744
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1745 To convert pre-existing IDL code to your formatting style, mark the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1746 entire buffer with \\[mark-whole-buffer] and execute \\[idlwave-expand-region-abbrevs].
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1747 Then mark the entire buffer again followed by \\[indent-region] (`indent-region').
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1748
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1749 2. Routine Info
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1750 ------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1751 IDLWAVE displays information about the calling sequence and the accepted
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1752 keyword parameters of a procedure or function with \\[idlwave-routine-info].
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1753 \\[idlwave-find-module] jumps to the source file of a module.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1754 These commands know about system routines, all routines in idlwave-mode
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1755 buffers and (when the idlwave-shell is active) about all modules
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1756 currently compiled under this shell. Use \\[idlwave-update-routine-info] to update this
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1757 information, which is also used for completion (see item 4).
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1758
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1759 3. Online IDL Help
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1760 ---------------
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1761 \\[idlwave-context-help] displays the IDL documentation relevant
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1762 for the system variable, keyword, or routine at point. A single key
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1763 stroke gets you directly to the right place in the docs. Two additional
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1764 files (an ASCII version of the IDL documentation and a topics file) must
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1765 be installed for this - check the IDLWAVE webpage for these files.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1766
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1767 4. Completion
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1768 ----------
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1769 \\[idlwave-complete] completes the names of procedures, functions
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1770 class names and keyword parameters. It is context sensitive and
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1771 figures out what is expected at point (procedure/function/keyword).
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1772 Lower case strings are completed in lower case, other strings in
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1773 mixed or upper case.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1775 5. Code Templates and Abbreviations
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1776 --------------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1777 Many Abbreviations are predefined to expand to code fragments and templates.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1778 The abbreviations start generally with a `\\`. Some examples
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1779
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1780 \\pr PROCEDURE template
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1781 \\fu FUNCTION template
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1782 \\c CASE statement template
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
1783 \\sw SWITCH statement template
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1784 \\f FOR loop template
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1785 \\r REPEAT Loop template
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1786 \\w WHILE loop template
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1787 \\i IF statement template
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1788 \\elif IF-ELSE statement template
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1789 \\b BEGIN
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1790
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1791 For a full list, use \\[idlwave-list-abbrevs]. Some templates also have
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1792 direct keybindings - see the list of keybindings below.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1793
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1794 \\[idlwave-doc-header] inserts a documentation header at the beginning of the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1795 current program unit (pro, function or main). Change log entries
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1796 can be added to the current program unit with \\[idlwave-doc-modification].
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1797
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1798 6. Automatic Case Conversion
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1799 -------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1800 The case of reserved words and some abbrevs is controlled by
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1801 `idlwave-reserved-word-upcase' and `idlwave-abbrev-change-case'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1802
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1803 7. Automatic END completion
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1804 ------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1805 If the variable `idlwave-expand-generic-end' is non-nil, each END typed
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1806 will be converted to the specific version, like ENDIF, ENDFOR, etc.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1807
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1808 8. Hooks
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1809 -----
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1810 Loading idlwave.el runs `idlwave-load-hook'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1811 Turning on `idlwave-mode' runs `idlwave-mode-hook'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1812
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1813 9. Documentation and Customization
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1814 -------------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1815 Info documentation for this package is available. Use \\[idlwave-info]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1816 to display (complain to your sysadmin if that does not work).
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1817 For Postscript and HTML versions of the documentation, check IDLWAVE's
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1818 homepage at `http://www.strw.leidenuniv.nl/~dominik/Tools/idlwave'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1819 IDLWAVE has customize support - see the group `idlwave'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1820
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1821 10.Keybindings
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1822 -----------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1823 Here is a list of all keybindings of this mode.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1824 If some of the key bindings below show with ??, use \\[describe-key]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1825 followed by the key sequence to see what the key sequence does.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1826
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1827 \\{idlwave-mode-map}"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1828
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1829 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1830 (kill-all-local-variables)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1831
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1832 (if idlwave-startup-message
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1833 (message "Emacs IDLWAVE mode version %s." idlwave-mode-version))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1834 (setq idlwave-startup-message nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1835
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1836 (setq local-abbrev-table idlwave-mode-abbrev-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1837 (set-syntax-table idlwave-mode-syntax-table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1838
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1839 (set (make-local-variable 'indent-line-function) 'idlwave-indent-and-action)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1840
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1841 (make-local-variable idlwave-comment-indent-function)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1842 (set idlwave-comment-indent-function 'idlwave-comment-hook)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1843
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1844 (set (make-local-variable 'comment-start-skip) ";+[ \t]*")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1845 (set (make-local-variable 'comment-start) ";")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1846 (set (make-local-variable 'require-final-newline) t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1847 (set (make-local-variable 'abbrev-all-caps) t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1848 (set (make-local-variable 'indent-tabs-mode) nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1849 (set (make-local-variable 'completion-ignore-case) t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1850
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1851 (use-local-map idlwave-mode-map)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1852
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1853 (when (featurep 'easymenu)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1854 (easy-menu-add idlwave-mode-menu idlwave-mode-map)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1855 (easy-menu-add idlwave-mode-debug-menu idlwave-mode-map))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1856
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1857 (setq mode-name "IDLWAVE")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1858 (setq major-mode 'idlwave-mode)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1859 (setq abbrev-mode t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1860
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1861 (set (make-local-variable idlwave-fill-function) 'idlwave-auto-fill)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1862 (setq comment-end "")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1863 (set (make-local-variable 'comment-multi-line) nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1864 (set (make-local-variable 'paragraph-separate) "[ \t\f]*$\\|[ \t]*;+[ \t]*$")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1865 (set (make-local-variable 'paragraph-start) "[ \t\f]\\|[ \t]*;+[ \t]")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1866 (set (make-local-variable 'paragraph-ignore-fill-prefix) nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1867 (set (make-local-variable 'parse-sexp-ignore-comments) nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1868
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1869 ;; Set tag table list to use IDLTAGS as file name.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1870 (if (boundp 'tag-table-alist)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1871 (add-to-list 'tag-table-alist '("\\.pro$" . "IDLTAGS")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1872
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1873 ;; Font-lock additions - originally Phil Williams, then Ulrik Dickow
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1874 ;; Following line is for Emacs - XEmacs uses the corresponding porperty
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1875 ;; on the `idlwave-mode' symbol.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1876 (set (make-local-variable 'font-lock-defaults) idlwave-font-lock-defaults)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1877
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1878 ;; Imenu setup
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1879 (set (make-local-variable 'imenu-create-index-function)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1880 'imenu-default-create-index-function)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1881 (set (make-local-variable 'imenu-extract-index-name-function)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1882 'idlwave-unit-name)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1883 (set (make-local-variable 'imenu-prev-index-position-function)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1884 'idlwave-prev-index-position)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1885
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1886 ;; Make a local post-command-hook and add our hook to it
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1887 (add-hook 'post-command-hook 'idlwave-command-hook nil 'local)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1888
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1889 ;; Make local hooks for buffer updates
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1890 (add-hook 'kill-buffer-hook 'idlwave-kill-buffer-update nil 'local)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1891 (add-hook 'after-save-hook 'idlwave-save-buffer-update nil 'local)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1892 (add-hook 'after-save-hook 'idlwave-revoke-license-to-kill nil 'local)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1893
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1894 ;; Update the routine info with info about current buffer?
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
1895 (idlwave-new-buffer-update)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1896
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1897 ;; Run the mode hook
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1898 (run-hooks 'idlwave-mode-hook))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1899
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1900 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1901 ;; Done with start up and initialization code.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1902 ;; The remaining routines are the code formatting functions.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1903 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1904
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1905 (defun idlwave-push-mark (&rest rest)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1906 "Push mark for compatibility with Emacs 18/19."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1907 (if (fboundp 'iconify-frame)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1908 (apply 'push-mark rest)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1909 (push-mark)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1910
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1911 (defun idlwave-hard-tab ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1912 "Inserts TAB in buffer in current position."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1913 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1914 (insert "\t"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1915
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1916 ;;; This stuff is experimental
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1917
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1918 (defvar idlwave-command-hook nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1919 "If non-nil, a list that can be evaluated using `eval'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1920 It is evaluated in the lisp function `idlwave-command-hook' which is
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1921 placed in `post-command-hook'.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1922
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1923 (defun idlwave-command-hook ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1924 "Command run after every command.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1925 Evaluates a non-nil value of the *variable* `idlwave-command-hook' and
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1926 sets the variable to zero afterwards."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1927 (and idlwave-command-hook
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1928 (listp idlwave-command-hook)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1929 (condition-case nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1930 (eval idlwave-command-hook)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1931 (error nil)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1932 (setq idlwave-command-hook nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1933
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1934 ;;; End experiment
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1935
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1936 ;; It would be better to use expand.el for better abbrev handling and
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1937 ;; versatility.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1938
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1939 (defun idlwave-check-abbrev (arg &optional reserved)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1940 "Reverses abbrev expansion if in comment or string.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1941 Argument ARG is the number of characters to move point
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1942 backward if `idlwave-abbrev-move' is non-nil.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1943 If optional argument RESERVED is non-nil then the expansion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1944 consists of reserved words, which will be capitalized if
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1945 `idlwave-reserved-word-upcase' is non-nil.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1946 Otherwise, the abbrev will be capitalized if `idlwave-abbrev-change-case'
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1947 is non-nil, unless its value is \`down in which case the abbrev will be
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1948 made into all lowercase.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1949 Returns non-nil if abbrev is left expanded."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1950 (if (idlwave-quoted)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1951 (progn (unexpand-abbrev)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1952 nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1953 (if (and reserved idlwave-reserved-word-upcase)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1954 (upcase-region last-abbrev-location (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1955 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1956 ((equal idlwave-abbrev-change-case 'down)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1957 (downcase-region last-abbrev-location (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1958 (idlwave-abbrev-change-case
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1959 (upcase-region last-abbrev-location (point)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1960 (if (and idlwave-abbrev-move (> arg 0))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1961 (if (boundp 'post-command-hook)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1962 (setq idlwave-command-hook (list 'backward-char (1+ arg)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1963 (backward-char arg)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1964 t))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1965
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1966 (defun idlwave-in-comment ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1967 "Returns t if point is inside a comment, nil otherwise."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1968 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1969 (let ((here (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1970 (and (idlwave-goto-comment) (> here (point))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1971
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1972 (defun idlwave-goto-comment ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1973 "Move to start of comment delimiter on current line.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1974 Moves to end of line if there is no comment delimiter.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1975 Ignores comment delimiters in strings.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1976 Returns point if comment found and nil otherwise."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1977 (let ((eos (progn (end-of-line) (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1978 (data (match-data))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1979 found)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1980 ;; Look for first comment delimiter not in a string
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1981 (beginning-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1982 (setq found (search-forward comment-start eos 'lim))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1983 (while (and found (idlwave-in-quote))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1984 (setq found (search-forward comment-start eos 'lim)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1985 (store-match-data data)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1986 (and found (not (idlwave-in-quote))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1987 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1988 (backward-char 1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1989 (point)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1990
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1991 (defun idlwave-show-matching-quote ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1992 "Insert quote and show matching quote if this is end of a string."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1993 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1994 (let ((bq (idlwave-in-quote))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1995 (inq last-command-char))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1996 (if (and bq (not (idlwave-in-comment)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1997 (let ((delim (char-after bq)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1998 (insert inq)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
1999 (if (eq inq delim)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2000 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2001 (goto-char bq)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2002 (sit-for 1))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2003 ;; Not the end of a string
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2004 (insert inq))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2005
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2006 (defun idlwave-show-begin-check ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2007 "Ensure that the previous word was a token before `idlwave-show-begin'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2008 An END token must be preceded by whitespace."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2009 (if
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2010 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2011 (backward-word 1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2012 (backward-char 1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2013 (looking-at "[ \t\n\f]"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2014 (idlwave-show-begin)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2015
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2016 (defun idlwave-show-begin ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2017 "Finds the start of current block and blinks to it for a second.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2018 Also checks if the correct end statement has been used."
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2019 ;; Re-indent end line
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2020 (if idlwave-reindent-end
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2021 (idlwave-indent-line))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2022 ;; All end statements are reserved words
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2023 (let* ((pos (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2024 end end1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2025 (when (and (idlwave-check-abbrev 0 t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2026 idlwave-show-block)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2027 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2028 ;; Move inside current block
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2029 (setq end (buffer-substring
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2030 (save-excursion (skip-chars-backward "a-zA-Z")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2031 (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2032 (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2033 (idlwave-beginning-of-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2034 (idlwave-block-jump-out -1 'nomark)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2035 (when (setq end1 (cdr (idlwave-block-master)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2036 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2037 ((null end1)) ; no-opeartion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2038 ((string= (downcase end) (downcase end1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2039 (sit-for 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2040 ((string= (downcase end) "end")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2041 ;; A generic end
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2042 (if idlwave-expand-generic-end
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2043 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2044 (goto-char pos)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2045 (backward-char 3)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2046 (insert (if (string= end "END") (upcase end1) end1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2047 (delete-char 3)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2048 (sit-for 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2049 (t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2050 (beep)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2051 (message "Warning: Shouldn't this be \"%s\" instead of \"%s\"?"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2052 end1 end)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2053 (sit-for 1))))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2054
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2055 (defun idlwave-block-master ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2056 (let ((case-fold-search t))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2057 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2058 (cond
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2059 ((looking-at "pro\\|case\\|switch\\|function\\>")
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2060 (assoc (downcase (match-string 0)) idlwave-block-matches))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2061 ((looking-at "begin\\>")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2062 (let ((limit (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2063 (idlwave-beginning-of-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2064 (point))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2065 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2066 ((re-search-backward idlwave-block-match-regexp limit t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2067 (assoc (downcase (match-string 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2068 idlwave-block-matches))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2069 ;;((re-search-backward ":[ \t]*\\=" limit t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2070 ;; ;; seems to be a case thing
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2071 ;; '("begin" . "end"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2072 (t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2073 ;; Just a nromal block
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2074 '("begin" . "end")))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2075 (t nil)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2076
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2077 (defun idlwave-close-block ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2078 "Terminate the current block with the correct END statement."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2079 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2080
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2081 ;; Start new line if we are not in a new line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2082 (unless (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2083 (skip-chars-backward " \t")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2084 (bolp))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2085 (let ((idlwave-show-block nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2086 (newline-and-indent)))
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2087 (insert "end")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2088 (idlwave-show-begin))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2089
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2090 (defun idlwave-surround (&optional before after escape-chars length)
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2091 "Surround the LENGTH characters before point with blanks.
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2092 LENGTH defaults to 1.
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2093 Optional arguments BEFORE and AFTER affect the behavior before and
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2094 after the characters (see also description of `idlwave-make-space'):
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2095
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2096 nil do nothing
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2097 0 force no spaces
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2098 integer > 0 force exactly n spaces
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2099 integer < 0 at least |n| spaces
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2100
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2101 The function does nothing if any of the following conditions is true:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2102 - `idlwave-surround-by-blank' is nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2103 - the character before point is inside a string or comment
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2104 - the char preceeding the string to be surrounded is a member of ESCAPE-CHARS.
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2105 This hack is used to avoid padding of `>' when it is part of
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2106 the '->' operator. In this case, ESCAPE-CHARS would be '(?-)."
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2107
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2108 (setq length (or length 1)) ; establish a default for LENGTH
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2109
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2110 (when (and idlwave-surround-by-blank
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2111 (not (idlwave-quoted))
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2112 (not (memq (char-after (- (point) (1+ length))) escape-chars)))
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2113 (backward-char length)
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2114 (save-restriction
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2115 (let ((here (point)))
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2116 (skip-chars-backward " \t")
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2117 (if (bolp)
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2118 ;; avoid clobbering indent
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2119 (progn
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2120 (move-to-column (idlwave-calculate-indent))
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2121 (if (<= (point) here)
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2122 (narrow-to-region (point) here))
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2123 (goto-char here)))
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2124 (idlwave-make-space before))
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2125 (skip-chars-forward " \t"))
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2126 (forward-char length)
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2127 (idlwave-make-space after)
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2128 ;; Check to see if the line should auto wrap
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2129 (if (and (equal (char-after (1- (point))) ?\ )
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2130 (> (current-column) fill-column))
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2131 (funcall auto-fill-function))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2132
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2133 (defun idlwave-make-space (n)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2134 "Make space at point.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2135 The space affected is all the spaces and tabs around point.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2136 If n is non-nil then point is left abs(n) spaces from the beginning of
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2137 the contiguous space.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2138 The amount of space at point is determined by N.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2139 If the value of N is:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2140 nil - do nothing.
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2141 > 0 - exactly N spaces.
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2142 < 0 - a minimum of -N spaces, i.e., do not change if there are
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2143 already -N spaces.
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
2144 0 - no spaces (i.e. remove any existing space)."
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2145 (if (integerp n)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2146 (let
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2147 ((start-col (progn (skip-chars-backward " \t") (current-column)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2148 (left (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2149 (end-col (progn (skip-chars-forward " \t") (current-column))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2150 (delete-horizontal-space)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2151 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2152 ((> n 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2153 (idlwave-indent-to (+ start-col n))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2154 (goto-char (+ left n)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2155 ((< n 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2156 (idlwave-indent-to end-col (- n))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2157 (goto-char (- left n)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2158 ;; n = 0, done
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2159 ))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2160
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2161 (defun idlwave-newline ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2162 "Inserts a newline and indents the current and previous line."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2163 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2164 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2165 ;; Handle unterminated single and double quotes
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2166 ;; If not in a comment and in a string then insertion of a newline
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2167 ;; will mean unbalanced quotes.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2168 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2169 (if (and (not (idlwave-in-comment)) (idlwave-in-quote))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2170 (progn (beep)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2171 (message "Warning: unbalanced quotes?")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2172 (newline)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2173 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2174 ;; The current line is being split, the cursor should be at the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2175 ;; beginning of the new line skipping the leading indentation.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2176 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2177 ;; The reason we insert the new line before indenting is that the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2178 ;; indenting could be confused by keywords (e.g. END) on the line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2179 ;; after the split point. This prevents us from just using
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2180 ;; `indent-for-tab-command' followed by `newline-and-indent'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2181 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2182 (beginning-of-line 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2183 (idlwave-indent-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2184 (forward-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2185 (idlwave-indent-line))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2186
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2187 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2188 ;; Use global variable 'comment-column' to set parallel comment
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2189 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2190 ;; Modeled on lisp.el
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2191 ;; Emacs Lisp and IDL (Wave CL) have identical comment syntax
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2192 (defun idlwave-comment-hook ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2193 "Compute indent for the beginning of the IDL comment delimiter."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2194 (if (or (looking-at idlwave-no-change-comment)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2195 (if idlwave-begin-line-comment
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2196 (looking-at idlwave-begin-line-comment)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2197 (looking-at "^;")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2198 (current-column)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2199 (if (looking-at idlwave-code-comment)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2200 (if (save-excursion (skip-chars-backward " \t") (bolp))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2201 ;; On line by itself, indent as code
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2202 (let ((tem (idlwave-calculate-indent)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2203 (if (listp tem) (car tem) tem))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2204 ;; after code - do not change
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2205 (current-column))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2206 (skip-chars-backward " \t")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2207 (max (if (bolp) 0 (1+ (current-column)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2208 comment-column))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2209
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2210 (defun idlwave-split-line ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2211 "Continue line by breaking line at point and indent the lines.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2212 For a code line insert continuation marker. If the line is a line comment
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2213 then the new line will contain a comment with the same indentation.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2214 Splits strings with the IDL operator `+' if `idlwave-split-line-string' is
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2215 non-nil."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2216 (interactive)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2217 ;; Expand abbreviation, just like normal RET would.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2218 (and abbrev-mode (expand-abbrev))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2219 (let (beg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2220 (if (not (idlwave-in-comment))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2221 ;; For code line add continuation.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2222 ;; Check if splitting a string.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2223 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2224 (if (setq beg (idlwave-in-quote))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2225 (if idlwave-split-line-string
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2226 ;; Split the string.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2227 (progn (insert (setq beg (char-after beg)) " + "
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2228 idlwave-continuation-char beg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2229 (backward-char 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2230 ;; Do not split the string.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2231 (beep)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2232 (message "Warning: continuation inside string!!")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2233 (insert " " idlwave-continuation-char))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2234 ;; Not splitting a string.
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2235 (if (not (member (char-before) '(?\ ?\t)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2236 (insert " "))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2237 (insert idlwave-continuation-char))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2238 (newline-and-indent))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2239 (indent-new-comment-line))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2240 ;; Indent previous line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2241 (setq beg (- (point-max) (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2242 (forward-line -1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2243 (idlwave-indent-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2244 (goto-char (- (point-max) beg))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2245 ;; Reindent new line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2246 (idlwave-indent-line)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2247
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2248 (defun idlwave-beginning-of-subprogram ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2249 "Moves point to the beginning of the current program unit."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2250 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2251 (idlwave-find-key idlwave-begin-unit-reg -1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2252
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2253 (defun idlwave-end-of-subprogram ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2254 "Moves point to the start of the next program unit."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2255 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2256 (idlwave-end-of-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2257 (idlwave-find-key idlwave-end-unit-reg 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2258
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2259 (defun idlwave-mark-statement ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2260 "Mark current IDL statement."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2261 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2262 (idlwave-end-of-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2263 (let ((end (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2264 (idlwave-beginning-of-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2265 (idlwave-push-mark end nil t)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2266
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2267 (defun idlwave-mark-block ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2268 "Mark containing block."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2269 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2270 (idlwave-end-of-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2271 (idlwave-backward-up-block -1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2272 (idlwave-end-of-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2273 (let ((end (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2274 (idlwave-backward-block)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2275 (idlwave-beginning-of-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2276 (idlwave-push-mark end nil t)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2277
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2278
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2279 (defun idlwave-mark-subprogram ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2280 "Put mark at beginning of program, point at end.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2281 The marks are pushed."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2282 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2283 (idlwave-end-of-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2284 (idlwave-beginning-of-subprogram)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2285 (let ((beg (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2286 (idlwave-forward-block)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2287 (idlwave-push-mark beg nil t))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2288 (exchange-point-and-mark))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2289
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2290 (defun idlwave-backward-up-block (&optional arg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2291 "Move to beginning of enclosing block if prefix ARG >= 0.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2292 If prefix ARG < 0 then move forward to enclosing block end."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2293 (interactive "p")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2294 (idlwave-block-jump-out (- arg) 'nomark))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2295
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2296 (defun idlwave-beginning-of-block ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2297 "Go to the beginning of the current block."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2298 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2299 (idlwave-block-jump-out -1 'nomark)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2300 (forward-word 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2301
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2302 (defun idlwave-end-of-block ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2303 "Go to the beginning of the current block."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2304 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2305 (idlwave-block-jump-out 1 'nomark)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2306 (backward-word 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2307
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2308 (defun idlwave-forward-block ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2309 "Move across next nested block."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2310 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2311 (if (idlwave-down-block 1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2312 (idlwave-block-jump-out 1 'nomark)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2313
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2314 (defun idlwave-backward-block ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2315 "Move backward across previous nested block."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2316 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2317 (if (idlwave-down-block -1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2318 (idlwave-block-jump-out -1 'nomark)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2319
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2320 (defun idlwave-down-block (&optional arg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2321 "Go down a block.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2322 With ARG: ARG >= 0 go forwards, ARG < 0 go backwards.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2323 Returns non-nil if successfull."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2324 (interactive "p")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2325 (let (status)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2326 (if (< arg 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2327 ;; Backward
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2328 (let ((eos (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2329 (idlwave-block-jump-out -1 'nomark)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2330 (point))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2331 (if (setq status (idlwave-find-key
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2332 idlwave-end-block-reg -1 'nomark eos))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2333 (idlwave-beginning-of-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2334 (message "No nested block before beginning of containing block.")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2335 ;; Forward
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2336 (let ((eos (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2337 (idlwave-block-jump-out 1 'nomark)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2338 (point))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2339 (if (setq status (idlwave-find-key
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2340 idlwave-begin-block-reg 1 'nomark eos))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2341 (idlwave-end-of-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2342 (message "No nested block before end of containing block."))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2343 status))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2344
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2345 (defun idlwave-mark-doclib ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2346 "Put point at beginning of doc library header, mark at end.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2347 The marks are pushed."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2348 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2349 (let (beg
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2350 (here (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2351 (goto-char (point-max))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2352 (if (re-search-backward idlwave-doclib-start nil t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2353 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2354 (setq beg (progn (beginning-of-line) (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2355 (if (re-search-forward idlwave-doclib-end nil t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2356 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2357 (forward-line 1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2358 (idlwave-push-mark beg nil t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2359 (message "Could not find end of doc library header.")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2360 (message "Could not find doc library header start.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2361 (goto-char here)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2362
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2363
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2364 (defun idlwave-current-routine ()
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2365 "Return (NAME TYPE CLASS) of current routine."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2366 (idlwave-routines)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2367 (save-excursion
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2368 (idlwave-beginning-of-subprogram)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2369 (if (looking-at "[ \t]*\\<\\(pro\\|function\\)\\>\\s-+\\(\\([a-zA-Z0-9$_]+\\)::\\)?\\([a-zA-Z0-9$_]+\\)")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2370 (let* ((type (if (string= (downcase (match-string 1)) "pro")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2371 'pro 'function))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2372 (class (idlwave-sintern-class (match-string 3)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2373 (name (idlwave-sintern-routine-or-method (match-string 4) class)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2374 (list name type class)))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2375
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2376 (defvar idlwave-shell-prompt-pattern)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2377 (defun idlwave-beginning-of-statement ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2378 "Move to beginning of the current statement.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2379 Skips back past statement continuations.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2380 Point is placed at the beginning of the line whether or not this is an
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2381 actual statement."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2382 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2383 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2384 ((eq major-mode 'idlwave-shell-mode)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2385 (if (re-search-backward idlwave-shell-prompt-pattern nil t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2386 (goto-char (match-end 0))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2387 (t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2388 (if (save-excursion (forward-line -1) (idlwave-is-continuation-line))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2389 (idlwave-previous-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2390 (beginning-of-line)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2391
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2392 (defun idlwave-previous-statement ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2393 "Moves point to beginning of the previous statement.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2394 Returns t if the current line before moving is the beginning of
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2395 the first non-comment statement in the file, and nil otherwise."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2396 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2397 (let (first-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2398 (if (not (= (forward-line -1) 0))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2399 ;; first line in file
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2400 t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2401 ;; skip blank lines, label lines, include lines and line comments
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2402 (while (and
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2403 ;; The current statement is the first statement until we
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2404 ;; reach another statement.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2405 (setq first-statement
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2406 (or
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2407 (looking-at idlwave-comment-line-start-skip)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2408 (looking-at "[ \t]*$")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2409 (looking-at (concat "[ \t]*" idlwave-label "[ \t]*$"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2410 (looking-at "^@")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2411 (= (forward-line -1) 0)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2412 ;; skip continuation lines
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2413 (while (and
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2414 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2415 (forward-line -1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2416 (idlwave-is-continuation-line))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2417 (= (forward-line -1) 0)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2418 first-statement)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2419
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2420 (defun idlwave-end-of-statement ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2421 "Moves point to the end of the current IDL statement.
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2422 If not in a statement just moves to end of line. Returns position."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2423 (interactive)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2424 (while (and (idlwave-is-continuation-line)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2425 (= (forward-line 1) 0))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2426 (while (and (idlwave-is-comment-or-empty-line)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2427 (= (forward-line 1) 0))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2428 (end-of-line)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2429 (point))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2430
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2431 (defun idlwave-end-of-statement0 ()
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2432 "Moves point to the end of the current IDL statement.
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2433 If not in a statement just moves to end of line. Returns position."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2434 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2435 (while (and (idlwave-is-continuation-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2436 (= (forward-line 1) 0)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2437 (end-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2438 (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2439
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2440 (defun idlwave-next-statement ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2441 "Moves point to beginning of the next IDL statement.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2442 Returns t if that statement is the last
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2443 non-comment IDL statement in the file, and nil otherwise."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2444 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2445 (let (last-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2446 (idlwave-end-of-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2447 ;; skip blank lines, label lines, include lines and line comments
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2448 (while (and (= (forward-line 1) 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2449 ;; The current statement is the last statement until
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2450 ;; we reach a new statement.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2451 (setq last-statement
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2452 (or
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2453 (looking-at idlwave-comment-line-start-skip)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2454 (looking-at "[ \t]*$")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2455 (looking-at (concat "[ \t]*" idlwave-label "[ \t]*$"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2456 (looking-at "^@")))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2457 last-statement))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2458
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2459 (defun idlwave-skip-label-or-case ()
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2460 "Skip label or case statement element.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2461 Returns position after label.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2462 If there is no label point is not moved and nil is returned."
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2463 ;; Case expressions and labels are terminated by a colon.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2464 ;; So we find the first colon in the line and make sure
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2465 ;; - no `?' is before it (might be a ? b : c)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2466 ;; - it is not in a comment
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2467 ;; - not in a string constant
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2468 ;; - not in parenthesis (like a[0:3])
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2469 ;; As many in this mode, this function is heuristic and not an exact
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2470 ;; parser.
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2471 (let ((start (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2472 (end (idlwave-find-key ":" 1 'nomark
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2473 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2474 (idlwave-end-of-statement) (point)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2475 (if (and end
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2476 (= (nth 0 (parse-partial-sexp start end)) 0)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2477 (not (string-match "\\?" (buffer-substring start end))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2478 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2479 (forward-char)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2480 (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2481 (goto-char start)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2482 nil)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2483
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2484 (defun idlwave-start-of-substatement (&optional pre)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2485 "Move to start of next IDL substatement after point.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2486 Uses the type of the current IDL statement to determine if the next
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2487 statement is on a new line or is a subpart of the current statement.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2488 Returns point at start of substatement modulo whitespace.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2489 If optional argument is non-nil move to beginning of current
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2490 substatement."
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2491 (let ((orig (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2492 (eos (idlwave-end-of-statement))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2493 (ifnest 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2494 st nst last)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2495 (idlwave-beginning-of-statement)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2496 (idlwave-skip-label-or-case)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2497 (setq last (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2498 ;; Continue looking for substatements until we are past orig
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2499 (while (and (<= (point) orig) (not (eobp)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2500 (setq last (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2501 (setq nst (nth 1 (cdr (setq st (car (idlwave-statement-type))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2502 (if (equal (car st) 'if) (setq ifnest (1+ ifnest)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2503 (cond ((and nst
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2504 (idlwave-find-key nst 1 'nomark eos))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2505 (goto-char (match-end 0)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2506 ((and (> ifnest 0) (idlwave-find-key "\\<else\\>" 1 'nomark eos))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2507 (setq ifnest (1- ifnest))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2508 (goto-char (match-end 0)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2509 (t (setq ifnest 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2510 (idlwave-next-statement))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2511 (if pre (goto-char last))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2512 ;; If a continuation line starts here, move to next line
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2513 (if (looking-at "[ \t]*\\$\\([ \t]*\\(;\\|$\\)\\)")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2514 (beginning-of-line 2))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2515 (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2516
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2517 (defun idlwave-statement-type ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2518 "Return the type of the current IDL statement.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2519 Uses `idlwave-statement-match' to return a cons of (type . point) with
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2520 point the ending position where the type was determined. Type is the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2521 association from `idlwave-statement-match', i.e. the cons cell from the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2522 list not just the type symbol. Returns nil if not an identifiable
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2523 statement."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2524 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2525 ;; Skip whitespace within a statement which is spaces, tabs, continuations
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2526 (while (looking-at "[ \t]*\\<\\$")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2527 (forward-line 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2528 (skip-chars-forward " \t")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2529 (let ((st idlwave-statement-match)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2530 (case-fold-search t))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2531 (while (and (not (looking-at (nth 0 (cdr (car st)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2532 (setq st (cdr st))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2533 (if st
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2534 (append st (match-end 0))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2535
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2536 (defun idlwave-expand-equal (&optional before after)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2537 "Pad '=' with spaces.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2538 Two cases: Assignment statement, and keyword assignment.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2539 The case is determined using `idlwave-start-of-substatement' and
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2540 `idlwave-statement-type'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2541 The equal sign will be surrounded by BEFORE and AFTER blanks.
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2542 If `idlwave-pad-keyword' is t then keyword assignment is treated just
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2543 like assignment statements. When nil, spaces are removed for keyword
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2544 assignment. Any other value keeps the current space around the `='.
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2545 Limits in for loops are treated as keyword assignment.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2546 See `idlwave-surround'. "
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2547 ;; Even though idlwave-surround checks `idlwave-surround-by-blank' this
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2548 ;; check saves the time of finding the statement type.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2549 (if idlwave-surround-by-blank
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2550 (let ((st (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2551 (idlwave-start-of-substatement t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2552 (idlwave-statement-type))))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2553
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2554 (cond ((or (and (equal (car (car st)) 'assign)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2555 (equal (cdr st) (point)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2556 (eq t idlwave-pad-keyword))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2557 ;; An assignment statement or keywor and we need padding
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2558 (idlwave-surround before after))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2559 ((null idlwave-pad-keyword)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2560 ;; Spaces should be removed at a keyword
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2561 (idlwave-surround 0 0))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2562 (t)))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2563
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2564 (defun idlwave-indent-and-action ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2565 "Call `idlwave-indent-line' and do expand actions."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2566 (interactive)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2567 (save-excursion
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2568 (if (and idlwave-expand-generic-end
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2569 (re-search-backward "\\<\\(end\\)\\s-*\\="
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2570 (max 0 (- (point) 10)) t)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2571 (looking-at "\\(end\\)\\([ \n\t]\\|\\'\\)"))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2572 (progn (goto-char (match-end 1))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2573 (idlwave-show-begin))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2574 (idlwave-indent-line t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2575 )
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2576
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2577 (defun idlwave-indent-line (&optional expand)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2578 "Indents current IDL line as code or as a comment.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2579 The actions in `idlwave-indent-action-table' are performed.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2580 If the optional argument EXPAND is non-nil then the actions in
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2581 `idlwave-indent-expand-table' are performed."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2582 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2583 ;; Move point out of left margin.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2584 (if (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2585 (skip-chars-backward " \t")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2586 (bolp))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2587 (skip-chars-forward " \t"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2588 (let ((mloc (point-marker)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2589 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2590 (beginning-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2591 (if (looking-at idlwave-comment-line-start-skip)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2592 ;; Indentation for a line comment
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2593 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2594 (skip-chars-forward " \t")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2595 (idlwave-indent-left-margin (idlwave-comment-hook)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2596 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2597 ;; Code Line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2598 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2599 ;; Before indenting, run action routines.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2600 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2601 (if (and expand idlwave-do-actions)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2602 (mapcar 'idlwave-do-action idlwave-indent-expand-table))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2603 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2604 (if idlwave-do-actions
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2605 (mapcar 'idlwave-do-action idlwave-indent-action-table))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2606 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2607 ;; No longer expand abbrevs on the line. The user can do this
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2608 ;; manually using expand-region-abbrevs.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2609 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2610 ;; Indent for code line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2611 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2612 (beginning-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2613 (if (or
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2614 ;; a label line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2615 (looking-at (concat "^" idlwave-label "[ \t]*$"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2616 ;; a batch command
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2617 (looking-at "^[ \t]*@"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2618 ;; leave flush left
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2619 nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2620 ;; indent the line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2621 (idlwave-indent-left-margin (idlwave-calculate-indent)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2622 ;; Adjust parallel comment
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2623 (end-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2624 (if (idlwave-in-comment)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2625 (indent-for-comment))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2626 (goto-char mloc)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2627 ;; Get rid of marker
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2628 (set-marker mloc nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2629 ))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2630
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2631 (defun idlwave-do-action (action)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2632 "Perform an action repeatedly on a line.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2633 ACTION is a list (REG . FUNC). REG is a regular expression. FUNC is
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2634 either a function name to be called with `funcall' or a list to be
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2635 evaluated with `eval'. The action performed by FUNC should leave point
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2636 after the match for REG - otherwise an infinite loop may be entered."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2637 (let ((action-key (car action))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2638 (action-routine (cdr action)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2639 (beginning-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2640 (while (idlwave-look-at action-key)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2641 (if (listp action-routine)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2642 (eval action-routine)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2643 (funcall action-routine)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2644
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2645 (defun idlwave-indent-to (col &optional min)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2646 "Indent from point with spaces until column COL.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2647 Inserts space before markers at point."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2648 (if (not min) (setq min 0))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2649 (insert-before-markers
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2650 (make-string (max min (- col (current-column))) ?\ )))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2651
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2652 (defun idlwave-indent-left-margin (col)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2653 "Indent the current line to column COL.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2654 Indents such that first non-whitespace character is at column COL
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2655 Inserts spaces before markers at point."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2656 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2657 (beginning-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2658 (delete-horizontal-space)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2659 (idlwave-indent-to col)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2660
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2661 (defun idlwave-indent-subprogram ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2662 "Indents program unit which contains point."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2663 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2664 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2665 (idlwave-end-of-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2666 (idlwave-beginning-of-subprogram)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2667 (let ((beg (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2668 (idlwave-forward-block)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2669 (message "Indenting subprogram...")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2670 (indent-region beg (point) nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2671 (message "Indenting subprogram...done.")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2672
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2673 (defun idlwave-calculate-indent ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2674 "Return appropriate indentation for current line as IDL code."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2675 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2676 (beginning-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2677 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2678 ;; Check for beginning of unit - main (beginning of buffer), pro, or
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2679 ;; function
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2680 ((idlwave-look-at idlwave-begin-unit-reg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2681 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2682 ;; Check for continuation line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2683 ((save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2684 (and (= (forward-line -1) 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2685 (idlwave-is-continuation-line)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2686 (idlwave-calculate-cont-indent))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2687 ;; calculate indent based on previous and current statements
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2688 (t (let ((the-indent
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2689 ;; calculate indent based on previous statement
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2690 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2691 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2692 ((idlwave-previous-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2693 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2694 ;; Main block
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2695 ((idlwave-look-at idlwave-begin-unit-reg t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2696 (+ (idlwave-current-statement-indent)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2697 idlwave-main-block-indent))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2698 ;; Begin block
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2699 ((idlwave-look-at idlwave-begin-block-reg t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2700 (+ (idlwave-current-statement-indent)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2701 idlwave-block-indent))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2702 ((idlwave-look-at idlwave-end-block-reg t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2703 (- (idlwave-current-statement-indent)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2704 idlwave-end-offset
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2705 idlwave-block-indent))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2706 ((idlwave-current-statement-indent))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2707 ;; adjust the indentation based on the current statement
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2708 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2709 ;; End block
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2710 ((idlwave-look-at idlwave-end-block-reg t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2711 (+ the-indent idlwave-end-offset))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2712 (the-indent)))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2713
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2714 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2715 ;; Parenthesses balacing/indent
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2716 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2717
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2718 (defun idlwave-calculate-cont-indent ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2719 "Calculates the IDL continuation indent column from the previous statement.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2720 Note that here previous statement means the beginning of the current
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2721 statement if this statement is a continuation of the previous line.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2722 Intervening comments or comments within the previous statement can
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2723 screw things up if the comments contain parentheses characters."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2724 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2725 (let* (open
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2726 (case-fold-search t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2727 (end-reg (progn (beginning-of-line) (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2728 (close-exp (progn (skip-chars-forward " \t") (looking-at "\\s)")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2729 (beg-reg (progn (idlwave-previous-statement) (point))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2730 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2731 ;; If PRO or FUNCTION declaration indent after name, and first comma.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2732 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2733 (if (idlwave-look-at "\\<\\(pro\\|function\\)\\>")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2734 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2735 (forward-sexp 1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2736 (if (looking-at "[ \t]*,[ \t]*")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2737 (goto-char (match-end 0)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2738 (current-column))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2739 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2740 ;; Not a PRO or FUNCTION
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2741 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2742 ;; Look for innermost unmatched open paren
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2743 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2744 (if (setq open (car (cdr (parse-partial-sexp beg-reg end-reg))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2745 ;; Found innermost open paren.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2746 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2747 (goto-char open)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2748 ;; Line up with next word unless this is a closing paren.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2749 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2750 ;; This is a closed paren - line up under open paren.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2751 (close-exp
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2752 (current-column))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2753 ;; Empty - just add regular indent. Take into account
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2754 ;; the forward-char
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2755 ((progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2756 ;; Skip paren
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2757 (forward-char 1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2758 (looking-at "[ \t$]*$"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2759 (+ (current-column) idlwave-continuation-indent -1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2760 ;; Line up with first word
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2761 ((progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2762 (skip-chars-forward " \t")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2763 (current-column)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2764 ;; No unmatched open paren. Just a simple continuation.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2765 (goto-char beg-reg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2766 (+ (idlwave-current-indent)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2767 ;; Make adjustments based on current line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2768 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2769 ;; Else statement
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2770 ((progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2771 (goto-char end-reg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2772 (skip-chars-forward " \t")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2773 (looking-at "else"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2774 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2775 ;; Ordinary continuation
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2776 (idlwave-continuation-indent))))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2777
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2778 (defun idlwave-find-key (key-re &optional dir nomark limit)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2779 "Move to next match of the regular expression KEY-RE.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2780 Matches inside comments or string constants will be ignored.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2781 If DIR is negative, the search will be backwards.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2782 At a successful match, the mark is pushed unless NOMARK is non-nil.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2783 Searches are limited to LIMIT.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2784 Searches are case-insensitive and use a special syntax table which
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2785 treats `$' and `_' as word characters.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2786 Return value is the beginning of the match or (in case of failure) nil."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2787 (setq dir (or dir 0))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2788 (let ((case-fold-search t)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2789 (search-func (if (> dir 0) 're-search-forward 're-search-backward))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2790 found)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2791 (idlwave-with-special-syntax
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2792 (save-excursion
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2793 (catch 'exit
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2794 (while (funcall search-func key-re limit t)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2795 (if (not (idlwave-quoted))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2796 (throw 'exit (setq found (match-beginning 0))))))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2797 (if found
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2798 (progn
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2799 (if (not nomark) (push-mark))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2800 (goto-char found)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2801 found)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2802 nil)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2803
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2804 (defun idlwave-block-jump-out (&optional dir nomark)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2805 "When optional argument DIR is non-negative, move forward to end of
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2806 current block using the `idlwave-begin-block-reg' and `idlwave-end-block-reg'
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2807 regular expressions. When DIR is negative, move backwards to block beginning.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2808 Recursively calls itself to skip over nested blocks. DIR defaults to
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2809 forward. Calls `push-mark' unless the optional argument NOMARK is
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2810 non-nil. Movement is limited by the start of program units because of
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2811 possibility of unbalanced blocks."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2812 (interactive "P")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2813 (or dir (setq dir 0))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2814 (let* ((here (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2815 (case-fold-search t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2816 (limit (if (>= dir 0) (point-max) (point-min)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2817 (block-limit (if (>= dir 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2818 idlwave-begin-block-reg
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2819 idlwave-end-block-reg))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2820 found
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2821 (block-reg (concat idlwave-begin-block-reg "\\|"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2822 idlwave-end-block-reg))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2823 (unit-limit (or (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2824 (if (< dir 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2825 (idlwave-find-key
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2826 idlwave-begin-unit-reg dir t limit)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2827 (end-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2828 (idlwave-find-key
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2829 idlwave-end-unit-reg dir t limit)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2830 limit)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2831 (if (>= dir 0) (end-of-line)) ;Make sure we are in current block
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2832 (if (setq found (idlwave-find-key block-reg dir t unit-limit))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2833 (while (and found (looking-at block-limit))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2834 (if (>= dir 0) (forward-word 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2835 (idlwave-block-jump-out dir t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2836 (setq found (idlwave-find-key block-reg dir t unit-limit))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2837 (if (not nomark) (push-mark here))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2838 (if (not found) (goto-char unit-limit)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2839 (if (>= dir 0) (forward-word 1)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2840
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2841 (defun idlwave-current-statement-indent ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2842 "Return indentation of the current statement.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2843 If in a statement, moves to beginning of statement before finding indent."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2844 (idlwave-beginning-of-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2845 (idlwave-current-indent))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2846
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2847 (defun idlwave-current-indent ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2848 "Return the column of the indentation of the current line.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2849 Skips any whitespace. Returns 0 if the end-of-line follows the whitespace."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2850 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2851 (beginning-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2852 (skip-chars-forward " \t")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2853 ;; if we are at the end of blank line return 0
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2854 (cond ((eolp) 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2855 ((current-column)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2856
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2857 (defun idlwave-is-continuation-line ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2858 "Tests if current line is continuation line."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2859 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2860 (idlwave-look-at "\\<\\$")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2861
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2862 (defun idlwave-is-comment-line ()
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2863 "Tests if the current line is a comment line."
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2864 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2865 (beginning-of-line 1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2866 (looking-at "[ \t]*;")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2867
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2868 (defun idlwave-is-comment-or-empty-line ()
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2869 "Tests if the current line is a comment line."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2870 (save-excursion
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2871 (beginning-of-line 1)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2872 (looking-at "[ \t]*[;\n]")))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
2873
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2874 (defun idlwave-look-at (regexp &optional cont beg)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2875 "Searches current line from current point for REGEXP.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2876 If optional argument CONT is non-nil, searches to the end of
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2877 the current statement.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2878 If optional arg BEG is non-nil, search starts from the beginning of the
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2879 current statement.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2880 Ignores matches that end in a comment or inside a string expression.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2881 Returns point if successful, nil otherwise.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2882 This function produces unexpected results if REGEXP contains quotes or
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2883 a comment delimiter. The search is case insensitive.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2884 If successful leaves point after the match, otherwise, does not move point."
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2885 (let ((here (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2886 (case-fold-search t)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2887 (eos (save-excursion
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2888 (if cont (idlwave-end-of-statement) (end-of-line))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2889 (point)))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2890 found)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2891 (idlwave-with-special-syntax
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2892 (if beg (idlwave-beginning-of-statement))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2893 (while (and (setq found (re-search-forward regexp eos t))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
2894 (idlwave-quoted))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2895 (if (not found) (goto-char here))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2896 found))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2897
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2898 (defun idlwave-fill-paragraph (&optional nohang)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2899 "Fills paragraphs in comments.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2900 A paragraph is made up of all contiguous lines having the same comment
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2901 leader (the leading whitespace before the comment delimiter and the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2902 comment delimiter). In addition, paragraphs are separated by blank
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2903 line comments. The indentation is given by the hanging indent of the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2904 first line, otherwise by the minimum indentation of the lines after
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2905 the first line. The indentation of the first line does not change.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2906 Does not effect code lines. Does not fill comments on the same line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2907 with code. The hanging indent is given by the end of the first match
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2908 matching `idlwave-hang-indent-regexp' on the paragraph's first line . If the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2909 optional argument NOHANG is non-nil then the hanging indent is
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2910 ignored."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2911 (interactive "P")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2912 ;; check if this is a line comment
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2913 (if (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2914 (beginning-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2915 (skip-chars-forward " \t")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2916 (looking-at comment-start))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2917 (let
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2918 ((indent 999)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2919 pre here diff fill-prefix-reg bcl first-indent
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2920 hang start end)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2921 ;; Change tabs to spaces in the surrounding paragraph.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2922 ;; The surrounding paragraph will be the largest containing block of
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2923 ;; contiguous line comments. Thus, we may be changing tabs in
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2924 ;; a much larger area than is needed, but this is the easiest
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2925 ;; brute force way to do it.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2926 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2927 ;; This has the undesirable side effect of replacing the tabs
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2928 ;; permanently without the user's request or knowledge.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2929 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2930 (backward-paragraph)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2931 (setq start (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2932 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2933 (forward-paragraph)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2934 (setq end (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2935 (untabify start end)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2936 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2937 (setq here (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2938 (beginning-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2939 (setq bcl (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2940 (re-search-forward
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2941 (concat "^[ \t]*" comment-start "+")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2942 (save-excursion (end-of-line) (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2943 t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2944 ;; Get the comment leader on the line and its length
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2945 (setq pre (current-column))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2946 ;; the comment leader is the indentation plus exactly the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2947 ;; number of consecutive ";".
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2948 (setq fill-prefix-reg
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2949 (concat
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2950 (setq fill-prefix
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2951 (regexp-quote
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2952 (buffer-substring (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2953 (beginning-of-line) (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2954 (point))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2955 "[^;]"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2957 ;; Mark the beginning and end of the paragraph
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2958 (goto-char bcl)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2959 (while (and (looking-at fill-prefix-reg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2960 (not (looking-at paragraph-separate))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2961 (not (bobp)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2962 (forward-line -1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2963 ;; Move to first line of paragraph
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2964 (if (/= (point) bcl)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2965 (forward-line 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2966 (setq start (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2967 (goto-char bcl)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2968 (while (and (looking-at fill-prefix-reg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2969 (not (looking-at paragraph-separate))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2970 (not (eobp)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2971 (forward-line 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2972 (beginning-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2973 (if (or (not (looking-at fill-prefix-reg))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2974 (looking-at paragraph-separate))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2975 (forward-line -1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2976 (end-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2977 ;; if at end of buffer add a newline (need this because
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2978 ;; fill-region needs END to be at the beginning of line after
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2979 ;; the paragraph or it will add a line).
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2980 (if (eobp)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2981 (progn (insert ?\n) (backward-char 1)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2982 ;; Set END to the beginning of line after the paragraph
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2983 ;; END is calculated as distance from end of buffer
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2984 (setq end (- (point-max) (point) 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2985 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2986 ;; Calculate the indentation for the paragraph.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2987 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2988 ;; In the following while statements, after one iteration
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2989 ;; point will be at the beginning of a line in which case
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2990 ;; the while will not be executed for the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2991 ;; the first paragraph line and thus will not affect the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2992 ;; indentation.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2993 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2994 ;; First check to see if indentation is based on hanging indent.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2995 (if (and (not nohang) idlwave-hanging-indent
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2996 (setq hang
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2997 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2998 (goto-char start)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
2999 (idlwave-calc-hanging-indent))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3000 ;; Adjust lines of paragraph by inserting spaces so that
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3001 ;; each line's indent is at least as great as the hanging
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3002 ;; indent. This is needed for fill-paragraph to work with
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3003 ;; a fill-prefix.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3004 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3005 (setq indent hang)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3006 (beginning-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3007 (while (> (point) start)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3008 (re-search-forward comment-start-skip
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3009 (save-excursion (end-of-line) (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3010 t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3011 (if (> (setq diff (- indent (current-column))) 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3012 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3013 (if (>= here (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3014 ;; adjust the original location for the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3015 ;; inserted text.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3016 (setq here (+ here diff)))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3017 (insert (make-string diff ?\ ))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3018 (forward-line -1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3019 )
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3020
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3021 ;; No hang. Instead find minimum indentation of paragraph
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3022 ;; after first line.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3023 ;; For the following while statement, since START is at the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3024 ;; beginning of line and END is at the the end of line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3025 ;; point is greater than START at least once (which would
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3026 ;; be the case for a single line paragraph).
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3027 (while (> (point) start)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3028 (beginning-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3029 (setq indent
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3030 (min indent
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3031 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3032 (re-search-forward
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3033 comment-start-skip
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3034 (save-excursion (end-of-line) (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3035 t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3036 (current-column))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3037 (forward-line -1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3038 )
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3039 (setq fill-prefix (concat fill-prefix
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3040 (make-string (- indent pre)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3041 ?\ )))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3042 ;; first-line indent
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3043 (setq first-indent
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3044 (max
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3045 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3046 (re-search-forward
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3047 comment-start-skip
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3048 (save-excursion (end-of-line) (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3049 t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3050 (current-column))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3051 indent))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3052
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3053 ;; try to keep point at its original place
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3054 (goto-char here)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3055
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3056 ;; In place of the more modern fill-region-as-paragraph, a hack
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3057 ;; to keep whitespace untouched on the first line within the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3058 ;; indent length and to preserve any indent on the first line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3059 ;; (first indent).
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3060 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3061 (setq diff
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3062 (buffer-substring start (+ start first-indent -1)))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3063 (subst-char-in-region start (+ start first-indent -1) ?\ ?~ nil)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3064 (fill-region-as-paragraph
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3065 start
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3066 (- (point-max) end)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3067 (current-justification)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3068 nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3069 (delete-region start (+ start first-indent -1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3070 (goto-char start)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3071 (insert diff))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3072 ;; When we want the point at the beginning of the comment
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3073 ;; body fill-region will put it at the beginning of the line.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3074 (if (bolp) (skip-chars-forward (concat " \t" comment-start)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3075 (setq fill-prefix nil))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3076
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3077 (defun idlwave-calc-hanging-indent ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3078 "Calculate the position of the hanging indent for the comment
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3079 paragraph. The hanging indent position is given by the first match
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3080 with the `idlwave-hang-indent-regexp'. If `idlwave-use-last-hang-indent' is
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3081 non-nil then use last occurrence matching `idlwave-hang-indent-regexp' on
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3082 the line.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3083 If not found returns nil."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3084 (if idlwave-use-last-hang-indent
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3085 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3086 (end-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3087 (if (re-search-backward
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3088 idlwave-hang-indent-regexp
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3089 (save-excursion (beginning-of-line) (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3090 t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3091 (+ (current-column) (length idlwave-hang-indent-regexp))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3092 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3093 (beginning-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3094 (if (re-search-forward
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3095 idlwave-hang-indent-regexp
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3096 (save-excursion (end-of-line) (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3097 t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3098 (current-column)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3099
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3100 (defun idlwave-auto-fill ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3101 "Called to break lines in auto fill mode.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3102 Only fills comment lines if `idlwave-fill-comment-line-only' is non-nil.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3103 Places a continuation character at the end of the line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3104 if not in a comment. Splits strings with IDL concatenation operator
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3105 `+' if `idlwave-auto-fill-split-string is non-nil."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3106 (if (<= (current-column) fill-column)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3107 nil ; do not to fill
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3108 (if (or (not idlwave-fill-comment-line-only)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3109 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3110 ;; Check for comment line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3111 (beginning-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3112 (looking-at idlwave-comment-line-start-skip)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3113 (let (beg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3114 (idlwave-indent-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3115 ;; Prevent actions do-auto-fill which calls indent-line-function.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3116 (let (idlwave-do-actions
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3117 (paragraph-start ".")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3118 (paragraph-separate "."))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3119 (do-auto-fill))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3120 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3121 (end-of-line 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3122 ;; Indent the split line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3123 (idlwave-indent-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3124 )
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3125 (if (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3126 (beginning-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3127 (looking-at idlwave-comment-line-start-skip))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3128 ;; A continued line comment
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3129 ;; We treat continued line comments as part of a comment
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3130 ;; paragraph. So we check for a hanging indent.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3131 (if idlwave-hanging-indent
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3132 (let ((here (- (point-max) (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3133 (indent
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3134 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3135 (forward-line -1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3136 (idlwave-calc-hanging-indent))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3137 (if indent
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3138 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3139 ;; Remove whitespace between comment delimiter and
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3140 ;; text, insert spaces for appropriate indentation.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3141 (beginning-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3142 (re-search-forward
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3143 comment-start-skip
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3144 (save-excursion (end-of-line) (point)) t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3145 (delete-horizontal-space)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3146 (idlwave-indent-to indent)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3147 (goto-char (- (point-max) here)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3148 )))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3149 ;; Split code or comment?
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3150 (if (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3151 (end-of-line 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3152 (idlwave-in-comment))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3153 ;; Splitting a non-line comment.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3154 ;; Insert the comment delimiter from split line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3155 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3156 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3157 (beginning-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3158 (skip-chars-forward " \t")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3159 ;; Insert blank to keep off beginning of line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3160 (insert " "
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3161 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3162 (forward-line -1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3163 (buffer-substring (idlwave-goto-comment)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3164 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3165 (skip-chars-forward "; ")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3166 (point))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3167 (idlwave-indent-line))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3168 ;; Split code line - add continuation character
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3169 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3170 (end-of-line 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3171 ;; Check to see if we split a string
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3172 (if (and (setq beg (idlwave-in-quote))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3173 idlwave-auto-fill-split-string)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3174 ;; Split the string and concatenate.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3175 ;; The first extra space is for the space
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3176 ;; the line was split. That space was removed.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3177 (insert " " (char-after beg) " +"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3178 (insert " $"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3179 (if beg
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3180 (if idlwave-auto-fill-split-string
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3181 ;; Make the second part of continued string
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3182 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3183 (beginning-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3184 (skip-chars-forward " \t")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3185 (insert (char-after beg)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3186 ;; Warning
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3187 (beep)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3188 (message "Warning: continuation inside a string.")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3189 ;; Although do-auto-fill (via indent-new-comment-line) calls
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3190 ;; idlwave-indent-line for the new line, re-indent again
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3191 ;; because of the addition of the continuation character.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3192 (idlwave-indent-line))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3193 )))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3194
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3195 (defun idlwave-auto-fill-mode (arg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3196 "Toggle auto-fill mode for IDL mode.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3197 With arg, turn auto-fill mode on if arg is positive.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3198 In auto-fill mode, inserting a space at a column beyond `fill-column'
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3199 automatically breaks the line at a previous space."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3200 (interactive "P")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3201 (prog1 (set idlwave-fill-function
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3202 (if (if (null arg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3203 (not (symbol-value idlwave-fill-function))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3204 (> (prefix-numeric-value arg) 0))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3205 'idlwave-auto-fill
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3206 nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3207 ;; update mode-line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3208 (set-buffer-modified-p (buffer-modified-p))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3209
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3210 (defun idlwave-doc-header (&optional nomark )
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3211 "Insert a documentation header at the beginning of the unit.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3212 Inserts the value of the variable idlwave-file-header. Sets mark before
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3213 moving to do insertion unless the optional prefix argument NOMARK
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3214 is non-nil."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3215 (interactive "P")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3216 (or nomark (push-mark))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3217 ;; make sure we catch the current line if it begins the unit
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3218 (end-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3219 (idlwave-beginning-of-subprogram)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3220 (beginning-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3221 ;; skip function or procedure line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3222 (if (idlwave-look-at "\\<\\(pro\\|function\\)\\>")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3223 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3224 (idlwave-end-of-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3225 (if (> (forward-line 1) 0) (insert "\n"))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3226 (if idlwave-file-header
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3227 (cond ((car idlwave-file-header)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3228 (insert-file (car idlwave-file-header)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3229 ((stringp (car (cdr idlwave-file-header)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3230 (insert (car (cdr idlwave-file-header)))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3231
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3232
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3233 (defun idlwave-default-insert-timestamp ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3234 "Default timestamp insertion function"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3235 (insert (current-time-string))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3236 (insert ", " (user-full-name))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3237 (insert " <" (user-login-name) "@" (system-name) ">")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3238 ;; Remove extra spaces from line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3239 (idlwave-fill-paragraph)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3240 ;; Insert a blank line comment to separate from the date entry -
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3241 ;; will keep the entry from flowing onto date line if re-filled.
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3242 (insert "\n;\n;\t\t"))t
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3243
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3244 (defun idlwave-doc-modification ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3245 "Insert a brief modification log at the beginning of the current program.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3246 Looks for an occurrence of the value of user variable
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3247 `idlwave-doc-modifications-keyword' if non-nil. Inserts time and user name
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3248 and places the point for the user to add a log. Before moving, saves
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3249 location on mark ring so that the user can return to previous point."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3250 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3251 (push-mark)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3252 (let* (beg end)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3253 (if (and (or (re-search-backward idlwave-doclib-start nil t)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3254 (progn
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3255 (goto-char (point-min))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3256 (re-search-forward idlwave-doclib-start nil t)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3257 (setq beg (match-beginning 0))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3258 (re-search-forward idlwave-doclib-end nil t)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3259 (setq end (match-end 0)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3260 (progn
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3261 (goto-char beg)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3262 (if (re-search-forward
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3263 (concat idlwave-doc-modifications-keyword ":")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3264 end t)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3265 (end-of-line)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3266 (goto-char end)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3267 (end-of-line -1)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3268 (insert "\n" comment-start "\n")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3269 (insert comment-start " " idlwave-doc-modifications-keyword ":"))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3270 (insert "\n;\n;\t")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3271 (run-hooks 'idlwave-timestamp-hook))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3272 (error "No valid DOCLIB header"))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3273
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3274 ;;; CJC 3/16/93
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3275 ;;; Interface to expand-region-abbrevs which did not work when the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3276 ;;; abbrev hook associated with an abbrev moves point backwards
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3277 ;;; after abbrev expansion, e.g., as with the abbrev '.n'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3278 ;;; The original would enter an infinite loop in attempting to expand
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3279 ;;; .n (it would continually expand and unexpand the abbrev without expanding
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3280 ;;; because the point would keep going back to the beginning of the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3281 ;;; abbrev instead of to the end of the abbrev). We now keep the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3282 ;;; abbrev hook from moving backwards.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3283 ;;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3284 (defun idlwave-expand-region-abbrevs (start end)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3285 "Expand each abbrev occurrence in the region.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3286 Calling from a program, arguments are START END."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3287 (interactive "r")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3288 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3289 (goto-char (min start end))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3290 (let ((idlwave-show-block nil) ;Do not blink
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3291 (idlwave-abbrev-move nil)) ;Do not move
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3292 (expand-region-abbrevs start end 'noquery))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3293
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3294 (defun idlwave-quoted ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3295 "Returns t if point is in a comment or quoted string.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3296 nil otherwise."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3297 (or (idlwave-in-comment) (idlwave-in-quote)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3298
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3299 (defun idlwave-in-quote ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3300 "Returns location of the opening quote
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3301 if point is in a IDL string constant, nil otherwise.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3302 Ignores comment delimiters on the current line.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3303 Properly handles nested quotation marks and octal
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3304 constants - a double quote followed by an octal digit."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3305 ;;; Treat an octal inside an apostrophe to be a normal string. Treat a
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3306 ;;; double quote followed by an octal digit to be an octal constant
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3307 ;;; rather than a string. Therefore, there is no terminating double
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3308 ;;; quote.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3309 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3310 ;; Because single and double quotes can quote each other we must
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3311 ;; search for the string start from the beginning of line.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3312 (let* ((start (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3313 (eol (progn (end-of-line) (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3314 (bq (progn (beginning-of-line) (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3315 (endq (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3316 (data (match-data))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3317 delim
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3318 found)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3319 (while (< endq start)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3320 ;; Find string start
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3321 ;; Don't find an octal constant beginning with a double quote
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3322 (if (re-search-forward "\"[^0-7]\\|'\\|\"$" eol 'lim)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3323 ;; Find the string end.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3324 ;; In IDL, two consecutive delimiters after the start of a
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3325 ;; string act as an
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3326 ;; escape for the delimiter in the string.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3327 ;; Two consecutive delimiters alone (i.e., not after the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3328 ;; start of a string) is the the null string.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3329 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3330 ;; Move to position after quote
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3331 (goto-char (1+ (match-beginning 0)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3332 (setq bq (1- (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3333 ;; Get the string delimiter
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3334 (setq delim (char-to-string (preceding-char)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3335 ;; Check for null string
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3336 (if (looking-at delim)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3337 (progn (setq endq (point)) (forward-char 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3338 ;; Look for next unpaired delimiter
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3339 (setq found (search-forward delim eol 'lim))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3340 (while (looking-at delim)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3341 (forward-char 1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3342 (setq found (search-forward delim eol 'lim)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3343 (if found
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3344 (setq endq (- (point) 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3345 (setq endq (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3346 ))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3347 (progn (setq bq (point)) (setq endq (point)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3348 (store-match-data data)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3349 ;; return string beginning position or nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3350 (if (> start bq) bq))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3351
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3352 ;; Statement templates
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3353
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3354 ;; Replace these with a general template function, something like
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3355 ;; expand.el (I think there was also something with a name similar to
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3356 ;; dmacro.el)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3357
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3358 (defun idlwave-template (s1 s2 &optional prompt noindent)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3359 "Build a template with optional prompt expression.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3360
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3361 Opens a line if point is not followed by a newline modulo intervening
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3362 whitespace. S1 and S2 are strings. S1 is inserted at point followed
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3363 by S2. Point is inserted between S1 and S2. The case of S1 and S2 is
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3364 adjusted according to `idlwave-abbrev-change-case'. If optional argument
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3365 PROMPT is a string then it is displayed as a message in the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3366 minibuffer. The PROMPT serves as a reminder to the user of an
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3367 expression to enter.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3368
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3369 The lines containing S1 and S2 are reindented using `indent-region'
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3370 unless the optional second argument NOINDENT is non-nil."
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3371 (if (eq major-mode 'idlwave-shell-mode)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3372 ;; This is a gross hack to avoit template abbrev expansion
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3373 ;; in the shell. FIXME: This is a dirty hack.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3374 (if (and (eq this-command 'self-insert-command)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3375 (equal last-abbrev-location (point)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3376 (insert last-abbrev-text)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3377 (error "No templates in idlwave-shell"))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3378 (cond ((eq idlwave-abbrev-change-case 'down)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3379 (setq s1 (downcase s1) s2 (downcase s2)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3380 (idlwave-abbrev-change-case
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3381 (setq s1 (upcase s1) s2 (upcase s2))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3382 (let ((beg (save-excursion (beginning-of-line) (point)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3383 end)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3384 (if (not (looking-at "\\s-*\n"))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3385 (open-line 1))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3386 (insert s1)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3387 (save-excursion
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3388 (insert s2)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3389 (setq end (point)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3390 (if (not noindent)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3391 (indent-region beg end nil))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3392 (if (stringp prompt)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3393 (message prompt)))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3394
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3395 (defun idlwave-rw-case (string)
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3396 "Make STRING have the case required by `idlwave-reserved-word-upcase'."
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3397 (if idlwave-reserved-word-upcase
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3398 (upcase string)
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3399 string))
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3400
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3401 (defun idlwave-elif ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3402 "Build skeleton IDL if-else block."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3403 (interactive)
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3404 (idlwave-template
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3405 (idlwave-rw-case "if")
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3406 (idlwave-rw-case " then begin\n\nendif else begin\n\nendelse")
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3407 "Condition expression"))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3408
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3409 (defun idlwave-case ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3410 "Build skeleton IDL case statement."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3411 (interactive)
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3412 (idlwave-template
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3413 (idlwave-rw-case "case")
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3414 (idlwave-rw-case " of\n\nendcase")
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3415 "Selector expression"))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3416
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3417 (defun idlwave-switch ()
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3418 "Build skeleton IDL switch statement."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3419 (interactive)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3420 (idlwave-template
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3421 (idlwave-rw-case "switch")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3422 (idlwave-rw-case " of\n\nendswitch")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3423 "Selector expression"))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3424
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3425 (defun idlwave-for ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3426 "Build skeleton for loop statment."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3427 (interactive)
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3428 (idlwave-template
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3429 (idlwave-rw-case "for")
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3430 (idlwave-rw-case " do begin\n\nendfor")
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3431 "Loop expression"))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3432
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3433 (defun idlwave-if ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3434 "Build skeleton for loop statment."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3435 (interactive)
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3436 (idlwave-template
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3437 (idlwave-rw-case "if")
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3438 (idlwave-rw-case " then begin\n\nendif")
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3439 "Scalar logical expression"))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3440
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3441 (defun idlwave-procedure ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3442 (interactive)
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3443 (idlwave-template
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3444 (idlwave-rw-case "pro")
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3445 (idlwave-rw-case "\n\nreturn\nend")
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3446 "Procedure name"))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3447
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3448 (defun idlwave-function ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3449 (interactive)
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3450 (idlwave-template
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3451 (idlwave-rw-case "function")
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3452 (idlwave-rw-case "\n\nreturn\nend")
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3453 "Function name"))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3454
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3455 (defun idlwave-repeat ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3456 (interactive)
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3457 (idlwave-template
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3458 (idlwave-rw-case "repeat begin\n\nendrep until")
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3459 (idlwave-rw-case "")
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3460 "Exit condition"))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3461
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3462 (defun idlwave-while ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3463 (interactive)
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3464 (idlwave-template
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3465 (idlwave-rw-case "while")
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3466 (idlwave-rw-case " do begin\n\nendwhile")
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
3467 "Entry condition"))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3468
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3469 (defun idlwave-split-string (string &optional pattern)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3470 "Return a list of substrings of STRING which are separated by PATTERN.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3471 If PATTERN is omitted, it defaults to \"[ \\f\\t\\n\\r\\v]+\"."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3472 (or pattern
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3473 (setq pattern "[ \f\t\n\r\v]+"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3474 (let (parts (start 0))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3475 (while (string-match pattern string start)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3476 (setq parts (cons (substring string start (match-beginning 0)) parts)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3477 start (match-end 0)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3478 (nreverse (cons (substring string start) parts))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3479
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3480 (defun idlwave-replace-string (string replace_string replace_with)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3481 (let* ((start 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3482 (last (length string))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3483 (ret_string "")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3484 end)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3485 (while (setq end (string-match replace_string string start))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3486 (setq ret_string
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3487 (concat ret_string (substring string start end) replace_with))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3488 (setq start (match-end 0)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3489 (setq ret_string (concat ret_string (substring string start last)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3490
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3491 (defun idlwave-get-buffer-visiting (file)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3492 ;; Return the buffer currently visiting FILE
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3493 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3494 ((boundp 'find-file-compare-truenames) ; XEmacs
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3495 (let ((find-file-compare-truenames t))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3496 (get-file-buffer file)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3497 ((fboundp 'find-buffer-visiting) ; Emacs
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3498 (find-buffer-visiting file))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3499 (t (error "This should not happen (idlwave-get-buffer-visiting)"))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3500
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3501 (defvar idlwave-outlawed-buffers nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3502 "List of buffer pulled up by idlwave for special reasons.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3503 Buffers in this list may be killed by `idlwave-kill-autoloaded-buffers'.")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3504
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3505 (defun idlwave-find-file-noselect (file &optional why)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3506 ;; Return a buffer visiting file.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3507 (or (idlwave-get-buffer-visiting file)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3508 (let ((buf (find-file-noselect file)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3509 (if why (add-to-list 'idlwave-outlawed-buffers (cons buf why)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3510 buf)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3511
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3512 (defun idlwave-kill-autoloaded-buffers ()
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3513 "Cleanup by killing buffers created automatically by IDLWAVE.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3514 Function prompts for a letter to identify the buffers to kill.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3515 Possible letters are:
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3516
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3517 f Buffers created by the command \\[idlwave-find-module] or mouse
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3518 clicks in the routine info window.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3519 s Buffers created by the IDLWAVE Shell to display where execution
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3520 stopped or an error was found.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3521 a Both of the above.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3522
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3523 Buffer containing unsaved changes require confirmation before they are killed."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3524 (interactive)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3525 (if (null idlwave-outlawed-buffers)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3526 (error "No IDLWAVE-created buffers available")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3527 (princ (format "Kill IDLWAVE-created buffers: [f]ind source(%d), [s]hell display(%d), [a]ll ? "
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3528 (idlwave-count-outlawed-buffers 'find)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3529 (idlwave-count-outlawed-buffers 'shell)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3530 (let ((c (read-char)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3531 (cond
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3532 ((member c '(?f ?\C-f))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3533 (idlwave-do-kill-autoloaded-buffers 'find))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3534 ((member c '(?s ?\C-s))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3535 (idlwave-do-kill-autoloaded-buffers 'shell))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3536 ((member c '(?a ?\C-a))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3537 (idlwave-do-kill-autoloaded-buffers t))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3538 (t (error "Abort"))))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3539
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3540 (defun idlwave-count-outlawed-buffers (tag)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3541 "How many outlawed buffers have tag TAG?"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3542 (length (delq nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3543 (mapcar
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3544 (lambda (x) (eq (cdr x) tag))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3545 idlwave-outlawed-buffers))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3546
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3547 (defun idlwave-do-kill-autoloaded-buffers (&rest reasons)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3548 "Kill all buffers pulled up by IDLWAVE matching REASONS."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3549 (let* ((list (copy-sequence idlwave-outlawed-buffers))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3550 (cnt 0)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3551 entry)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3552 (while (setq entry (pop list))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3553 (if (buffer-live-p (car entry))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3554 (and (or (memq t reasons)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3555 (memq (cdr entry) reasons))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3556 (kill-buffer (car entry))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3557 (incf cnt)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3558 (setq idlwave-outlawed-buffers
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3559 (delq entry idlwave-outlawed-buffers)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3560 (setq idlwave-outlawed-buffers
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3561 (delq entry idlwave-outlawed-buffers))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3562 (message "%d buffer%s killed" cnt (if (= cnt 1) "" "s"))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3563
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3564 (defun idlwave-revoke-license-to-kill ()
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3565 "Remove BUFFER from the buffers which may be killed.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3566 Killing would be done by `idlwave-do-kill-autoloaded-buffers'.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3567 Intended for `after-save-hook'."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3568 (let* ((buf (current-buffer))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3569 (entry (assq buf idlwave-outlawed-buffers)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3570 ;; Revoke license
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3571 (if entry
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3572 (setq idlwave-outlawed-buffers
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3573 (delq entry idlwave-outlawed-buffers)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3574 ;; Remove this function from the hook.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3575 (remove-hook 'after-save-hook 'idlwave-revoke-license-to-kill 'local)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3576
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3577 (defvar idlwave-path-alist)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3578 (defun idlwave-locate-lib-file (file)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3579 ;; Find FILE on the scanned lib path and return a buffer visiting it
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3580 (let* ((dirs idlwave-path-alist)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3581 dir efile)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3582 (catch 'exit
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3583 (while (setq dir (car (pop dirs)))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3584 (if (file-regular-p
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3585 (setq efile (expand-file-name file dir)))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3586 (throw 'exit efile))))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3587 (defun idlwave-expand-lib-file-name (file)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3588 ;; Find FILE on the scanned lib path and return a buffer visiting it
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3589 (cond
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3590 ((null file) nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3591 ((string-match "\\`\\({\\([0-9]+\\)}/\\)\\(.*\\)" file)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3592 (expand-file-name (match-string 3 file)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3593 (car (nth (1- (string-to-int (match-string 2 file)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3594 idlwave-path-alist))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3595 ((file-name-absolute-p file) file)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3596 (t (idlwave-locate-lib-file file))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3597
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3598 (defun idlwave-make-tags ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3599 "Creates the IDL tags file IDLTAGS in the current directory from
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3600 the list of directories specified in the minibuffer. Directories may be
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3601 for example: . /usr/local/rsi/idl/lib. All the subdirectories of the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3602 specified top directories are searched if the directory name is prefixed
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3603 by @. Specify @ directories with care, it may take a long, long time if
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3604 you specify /."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3605 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3606 (let (directory directories cmd append status numdirs dir getsubdirs
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3607 buffer save_buffer files numfiles item errbuf)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3608
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3609 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3610 ;; Read list of directories
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3611 (setq directory (read-string "Tag Directories: " "."))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3612 (setq directories (idlwave-split-string directory "[ \t]+"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3613 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3614 ;; Set etags command, vars
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3615 (setq cmd "etags --output=IDLTAGS --language=none --regex='/[
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3616 \\t]*[pP][Rr][Oo][ \\t]+\\([^ \\t,]+\\)/' --regex='/[
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3617 \\t]*[Ff][Uu][Nn][Cc][Tt][Ii][Oo][Nn][ \\t]+\\([^ \\t,]+\\)/' ")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3618 (setq append " ")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3619 (setq status 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3620 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3621 ;; For each directory
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3622 (setq numdirs 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3623 (setq dir (nth numdirs directories))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3624 (while (and dir)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3625 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3626 ;; Find the subdirectories
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3627 (if (string-match "^[@]\\(.+\\)$" dir)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3628 (setq getsubdirs t) (setq getsubdirs nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3629 (if (and getsubdirs) (setq dir (substring dir 1 (length dir))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3630 (setq dir (expand-file-name dir))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3631 (if (file-directory-p dir)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3632 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3633 (if (and getsubdirs)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3634 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3635 (setq buffer (get-buffer-create "*idltags*"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3636 (call-process "sh" nil buffer nil "-c"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3637 (concat "find " dir " -type d -print"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3638 (setq save_buffer (current-buffer))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3639 (set-buffer buffer)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3640 (setq files (idlwave-split-string
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3641 (idlwave-replace-string
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3642 (buffer-substring 1 (point-max))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3643 "\n" "/*.pro ")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3644 "[ \t]+"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3645 (set-buffer save_buffer)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3646 (kill-buffer buffer))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3647 (setq files (list (concat dir "/*.pro"))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3648 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3649 ;; For each subdirectory
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3650 (setq numfiles 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3651 (setq item (nth numfiles files))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3652 (while (and item)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3653 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3654 ;; Call etags
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3655 (if (not (string-match "^[ \\t]*$" item))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3656 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3657 (message (concat "Tagging " item "..."))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3658 (setq errbuf (get-buffer-create "*idltags-error*"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3659 (setq status (+ status
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3660 (call-process "sh" nil errbuf nil "-c"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3661 (concat cmd append item))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3662 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3663 ;; Append additional tags
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3664 (setq append " --append ")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3665 (setq numfiles (1+ numfiles))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3666 (setq item (nth numfiles files)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3667 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3668 (setq numfiles (1+ numfiles))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3669 (setq item (nth numfiles files))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3670 )))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3671
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3672 (setq numdirs (1+ numdirs))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3673 (setq dir (nth numdirs directories)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3674 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3675 (setq numdirs (1+ numdirs))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3676 (setq dir (nth numdirs directories)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3677
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3678 (setq errbuf (get-buffer-create "*idltags-error*"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3679 (if (= status 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3680 (kill-buffer errbuf))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3681 (message "")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3682 ))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3683
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3684 (defun idlwave-toggle-comment-region (beg end &optional n)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3685 "Comment the lines in the region if the first non-blank line is
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3686 commented, and conversely, uncomment region. If optional prefix arg
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3687 N is non-nil, then for N positive, add N comment delimiters or for N
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3688 negative, remove N comment delimiters.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3689 Uses `comment-region' which does not place comment delimiters on
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3690 blank lines."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3691 (interactive "r\nP")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3692 (if n
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3693 (comment-region beg end (prefix-numeric-value n))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3694 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3695 (goto-char beg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3696 (beginning-of-line)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3697 ;; skip blank lines
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3698 (skip-chars-forward " \t\n")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3699 (if (looking-at (concat "[ \t]*\\(" comment-start "+\\)"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3700 (comment-region beg end
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3701 (- (length (buffer-substring
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3702 (match-beginning 1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3703 (match-end 1)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3704 (comment-region beg end)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3705
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3706
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3707 ;; ----------------------------------------------------------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3708 ;; ----------------------------------------------------------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3709 ;; ----------------------------------------------------------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3710 ;; ----------------------------------------------------------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3711 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3712 ;; Completion and Routine Info
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3713 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3714
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3715 ;; String "intern" functions
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3716
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3717 ;; For the completion and routine info function, we want to normalize
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3718 ;; the case of procedure names etc. We do this by "interning" these
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3719 ;; string is a hand-crafted way. Hashes are used to map the downcase
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3720 ;; version of the strings to the cased versions. Since these cased
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3721 ;; versions are really lisp objects, we can use `eq' to search, which
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3722 ;; is a large performance boost.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3723 ;; All new strings need to be "sinterned". We do this as early as
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3724 ;; possible after getting these strings from completion or buffer
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3725 ;; substrings. So most of the code can simply assume to deal with
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3726 ;; "sinterned" strings. The only exception is that the functions
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3727 ;; which scan whole buffers for routine information do not intern the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3728 ;; grabbed strings. This is only done afterwards. Therefore in these
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3729 ;; functions it is *not* save to assume the strings can be compared
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3730 ;; with `eq' and be fed into the routine assq functions.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3731
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3732 ;; Here we define the hashing functions.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3733
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3734 ;; The variables which hold the hashes.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3735 (defvar idlwave-sint-routines '(nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3736 (defvar idlwave-sint-keywords '(nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3737 (defvar idlwave-sint-methods '(nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3738 (defvar idlwave-sint-classes '(nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3739 (defvar idlwave-sint-files '(nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3740
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3741 (defun idlwave-reset-sintern (&optional what)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3742 "Reset all sintern hashes."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3743 ;; Make sure the hash functions are accessible.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3744 (if (or (not (fboundp 'gethash))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3745 (not (fboundp 'puthash)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3746 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3747 (require 'cl)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3748 (or (fboundp 'puthash)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3749 (defalias 'puthash 'cl-puthash))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3750 (let ((entries '((idlwave-sint-routines 1000 10)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3751 (idlwave-sint-keywords 1000 10)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3752 (idlwave-sint-methods 100 10)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3753 (idlwave-sint-classes 10 10))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3754
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3755 ;; Make sure these are lists
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3756 (loop for entry in entries
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3757 for var = (car entry)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3758 do (if (not (consp (symbol-value var))) (set var (list nil))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3759
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3760 (when (or (eq what t) (eq what 'syslib)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3761 (null (cdr idlwave-sint-routines)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3762 ;; Reset the system & library hash
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3763 (loop for entry in entries
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3764 for var = (car entry) for size = (nth 1 entry)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3765 do (setcdr (symbol-value var)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3766 (make-hash-table ':size size ':test 'equal)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3767 (setq idlwave-sint-files nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3768
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3769 (when (or (eq what t) (eq what 'bufsh)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3770 (null (car idlwave-sint-routines)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3771 ;; Reset the buffer & shell hash
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3772 (loop for entry in entries
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3773 for var = (car entry) for size = (nth 1 entry)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3774 do (setcar (symbol-value var)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3775 (make-hash-table ':size size ':test 'equal))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3776
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3777 (defun idlwave-sintern-routine-or-method (name &optional class set)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3778 (if class
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3779 (idlwave-sintern-method name set)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3780 (idlwave-sintern-routine name set)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3781
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3782 (defun idlwave-sintern (stype &rest args)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3783 (apply (intern (concat "idlwave-sintern-" (symbol-name stype))) args))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3784
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3785 ;;(defmacro idlwave-sintern (type var)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3786 ;; `(cond ((not (stringp name)) name)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3787 ;; ((gethash (downcase name) (cdr ,var)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3788 ;; ((gethash (downcase name) (car ,var)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3789 ;; (set (idlwave-sintern-set name ,type ,var set))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3790 ;; (name)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3791
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3792 (defun idlwave-sintern-routine (name &optional set)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3793 (cond ((not (stringp name)) name)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3794 ((gethash (downcase name) (cdr idlwave-sint-routines)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3795 ((gethash (downcase name) (car idlwave-sint-routines)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3796 (set (idlwave-sintern-set name 'routine idlwave-sint-routines set))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3797 (name)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3798 (defun idlwave-sintern-keyword (name &optional set)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3799 (cond ((not (stringp name)) name)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3800 ((gethash (downcase name) (cdr idlwave-sint-keywords)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3801 ((gethash (downcase name) (car idlwave-sint-keywords)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3802 (set (idlwave-sintern-set name 'keyword idlwave-sint-keywords set))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3803 (name)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3804 (defun idlwave-sintern-method (name &optional set)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3805 (cond ((not (stringp name)) name)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3806 ((gethash (downcase name) (cdr idlwave-sint-methods)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3807 ((gethash (downcase name) (car idlwave-sint-methods)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3808 (set (idlwave-sintern-set name 'method idlwave-sint-methods set))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3809 (name)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3810 (defun idlwave-sintern-class (name &optional set)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3811 (cond ((not (stringp name)) name)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3812 ((gethash (downcase name) (cdr idlwave-sint-classes)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3813 ((gethash (downcase name) (car idlwave-sint-classes)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3814 (set (idlwave-sintern-set name 'class idlwave-sint-classes set))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3815 (name)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3816
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3817 (defun idlwave-sintern-file (name &optional set)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3818 (car (or (member name idlwave-sint-files)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3819 (setq idlwave-sint-files (cons name idlwave-sint-files)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3820
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3821 (defun idlwave-sintern-set (name type tables set)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3822 (let* ((func (or (cdr (assq type idlwave-completion-case))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3823 'identity))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3824 (iname (funcall (if (eq func 'preserve) 'identity func) name))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3825 (table (if (eq set 'sys) (cdr tables) (car tables))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3826 (puthash (downcase name) iname table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3827 iname))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3828
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3829 (defun idlwave-sintern-rinfo-list (list &optional set)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3830 "Sintern all strings in the rinfo LIST. With optional parameter SET:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3831 also set new patterns. Probably this will always have to be t."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3832 (let (entry name type class kwds res source call olh new)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3833 (while list
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3834 (setq entry (car list)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3835 list (cdr list)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3836 name (car entry)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3837 type (nth 1 entry)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3838 class (nth 2 entry)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3839 source (nth 3 entry)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3840 call (nth 4 entry)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3841 kwds (nth 5 entry)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3842 olh (nth 6 entry))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3843 (setq kwds (mapcar (lambda (x)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3844 (list (idlwave-sintern-keyword (car x) set)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3845 kwds))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3846 (if class
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3847 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3848 (if (symbolp class) (setq class (symbol-name class)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3849 (setq class (idlwave-sintern-class class set))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3850 (setq name (idlwave-sintern-method name set)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3851 (setq name (idlwave-sintern-routine name set)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3852 (if (stringp (cdr source))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3853 (setcdr source (idlwave-sintern-file (cdr source) t)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3854 (setq new (if olh
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3855 (list name type class source call kwds olh)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3856 (list name type class source call kwds)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3857 (setq res (cons new res)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3858 (nreverse res)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3859
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3860 ;; Creating new sintern tables
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3861
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3862 (defun idlwave-new-sintern-type (tag)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3863 "Define a variable and a function to sintern the new type TAG.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3864 This defines the function `idlwave-sintern-TAG' and the variable
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3865 `idlwave-sint-TAGs'."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3866 (let* ((name (symbol-name tag))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3867 (names (concat name "s"))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3868 (var (intern (concat "idlwave-sint-" names)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3869 (func (intern (concat "idlwave-sintern-" name))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3870 (set var nil) ; initial value of the association list
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3871 (fset func ; set the function
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3872 `(lambda (name &optional set)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3873 (cond ((not (stringp name)) name)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3874 ((cdr (assoc (downcase name) ,var)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3875 (set
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3876 (setq ,var (cons (cons (downcase name) name) ,var))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3877 name)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3878 (name))))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3879
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3880 (defun idlwave-reset-sintern-type (tag)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3881 "Reset the sintern variable associated with TAG."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3882 (set (intern (concat "idlwave-sint-" (symbol-name tag) "s")) nil))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3883
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3884 ;;---------------------------------------------------------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3885
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3886
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3887 ;; The variables which hold the information
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3888 (defvar idlwave-system-routines nil
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3889 "Holds the routine-info obtained by scanning buffers.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3890 (defvar idlwave-buffer-routines nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3891 "Holds the routine-info obtained by scanning buffers.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3892 (defvar idlwave-compiled-routines nil
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3893 "Holds the routine-info obtained by asking the shell.")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3894 (defvar idlwave-unresolved-routines nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3895 "Holds the unresolved routine-info obtained by asking the shell.")
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3896 (defvar idlwave-library-routines nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3897 "Holds the procedure routine-info from the library scan.")
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3898 (defvar idlwave-path-alist nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3899 "Alist with !PATH directories and a flag if the dir has been scanned.")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3900 (defvar idlwave-true-path-alist nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3901 "Like `idlwave-path-alist', but with true filenames.")
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3902 (defvar idlwave-routines nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3903 "Holds the combinded procedure routine-info.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3904 (defvar idlwave-class-alist nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3905 "Holds the class names known to IDLWAVE.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3906 (defvar idlwave-class-history nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3907 "The history of classes selected with the minibuffer.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3908 (defvar idlwave-force-class-query nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3909 (defvar idlwave-before-completion-wconf nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3910 "The window configuration just before the completion buffer was displayed.")
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3911 (defvar idlwave-last-system-routine-info-cons-cell nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3912 "The last cons cell in the system routine info.")
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3913
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3914 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3915 ;; The code to get routine info from different sources.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3916
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3917 (defvar idlwave-system-routines)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3918 (defun idlwave-routines ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3919 "Provide a list of IDL routines.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3920 This routine loads the builtin routines on the first call. Later it
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3921 only returns the value of the variable."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3922 (or idlwave-routines
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3923 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3924 (idlwave-update-routine-info)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3925 ;; return the current value
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3926 idlwave-routines)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3927
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3928 (defvar idlwave-update-rinfo-hook nil
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3929 "List of functions which should run after a global rinfo update.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3930 Does not run after automatic updates of buffer or the shell.")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3931
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3932 (defun idlwave-update-routine-info (&optional arg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3933 "Update the internal routine-info lists.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3934 These lists are used by `idlwave-routine-info' (\\[idlwave-routine-info])
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3935 and by `idlwave-complete' (\\[idlwave-complete]) to provide information
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3936 about individual routines.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3937
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3938 The information can come from 4 sources:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3939 1. IDL programs in the current editing session
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3940 2. Compiled modules in an IDL shell running as Emacs subprocess
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3941 3. A list which covers the IDL system routines.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3942 4. A list which covers the prescanned library files.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3943
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3944 Scans all IDLWAVE-mode buffers of the current editing session (see
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3945 `idlwave-scan-all-buffers-for-routine-info').
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3946 When an IDL shell is running, this command also queries the IDL program
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3947 for currently compiled routines.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3948
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3949 With prefix ARG, also reload the system and library lists.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3950 With two prefix ARG's, also rescans the library tree."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3951 (interactive "P")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3952 (if (equal arg '(16))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3953 (idlwave-create-libinfo-file t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3954 (let* ((reload (or arg
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3955 idlwave-buffer-case-takes-precedence
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3956 (null idlwave-system-routines))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3957
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3958 (setq idlwave-buffer-routines nil
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3959 idlwave-compiled-routines nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3960 idlwave-unresolved-routines nil)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3961 ;; Reset the appropriate hashes
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3962 (idlwave-reset-sintern (cond (reload t)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
3963 ((null idlwave-system-routines) t)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3964 (t 'bufsh)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3965
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3966 (if idlwave-buffer-case-takes-precedence
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3967 ;; We can safely scan the buffer stuff first
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3968 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3969 (idlwave-update-buffer-routine-info)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3970 (and reload (idlwave-load-system-rinfo)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3971 ;; We first do the system info, and then the buffers
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3972 (and reload (idlwave-load-system-rinfo))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3973 (idlwave-update-buffer-routine-info))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3974
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3975 ;; Let's see if there is a shell
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3976 (let* ((shell-is-running (and (fboundp 'idlwave-shell-is-running)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3977 (idlwave-shell-is-running)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3978 (ask-shell (and shell-is-running
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3979 idlwave-query-shell-for-routine-info)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3980
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3981 (if (or (not ask-shell)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3982 (not (interactive-p)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3983 ;; 1. If we are not going to ask the shell, we need to do the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3984 ;; concatenation now.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3985 ;; 2. When this function is called non-interactively, it means
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3986 ;; that someone needs routine info *now*. The shell update
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3987 ;; causes the concatenation *delayed*, so not in time for
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3988 ;; the current command. Therefore, we do a concatenation
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3989 ;; now, even though the shell might do it again.
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3990 (idlwave-concatenate-rinfo-lists nil t))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3991
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3992 (when ask-shell
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3993 ;; Ask the shell about the routines it knows.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3994 (message "Querying the shell")
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
3995 (idlwave-shell-update-routine-info nil t))))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3996
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3997 (defun idlwave-load-system-rinfo ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
3998 ;; Load and case-treat the system and lib info files.
27185
ae5b17b9c403 fixed some bugs associated with the new file names
Carsten Dominik <dominik@science.uva.nl>
parents: 27107
diff changeset
3999 (load "idlw-rinfo" t)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4000 (message "Normalizing idlwave-system-routines...")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4001 (setq idlwave-system-routines
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4002 (idlwave-sintern-rinfo-list idlwave-system-routines 'sys))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4003 (message "Normalizing idlwave-system-routines...done")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4004 (setq idlwave-routines (copy-sequence idlwave-system-routines))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4005 (setq idlwave-last-system-routine-info-cons-cell
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4006 (nthcdr (1- (length idlwave-routines)) idlwave-routines))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4007 (when (and (stringp idlwave-libinfo-file)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4008 (file-regular-p idlwave-libinfo-file))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4009 (condition-case nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4010 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4011 (load-file idlwave-libinfo-file)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4012 (setq idlwave-true-path-alist nil)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4013 (message "Normalizing idlwave-library-routines...")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4014 (setq idlwave-library-routines (idlwave-sintern-rinfo-list
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4015 idlwave-library-routines 'sys))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4016 (message "Normalizing idlwave-library-routines...done"))
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4017 (error nil)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4018 (run-hooks 'idlwave-after-load-rinfo-hook))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4019
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4020
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4021 (defun idlwave-update-buffer-routine-info ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4022 (let (res)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4023 (cond
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4024 ((eq idlwave-scan-all-buffers-for-routine-info t)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4025 ;; Scan all buffers, current buffer last
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4026 (message "Scanning all buffers...")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4027 (setq res (idlwave-get-routine-info-from-buffers
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4028 (reverse (buffer-list)))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4029 ((null idlwave-scan-all-buffers-for-routine-info)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4030 ;; Don't scan any buffers
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4031 (setq res nil))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4032 (t
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4033 ;; Just scan this buffer
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4034 (if (eq major-mode 'idlwave-mode)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4035 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4036 (message "Scanning current buffer...")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4037 (setq res (idlwave-get-routine-info-from-buffers
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4038 (list (current-buffer))))))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4039 ;; Put the result into the correct variable
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4040 (setq idlwave-buffer-routines
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4041 (idlwave-sintern-rinfo-list res t))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4042
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4043 (defun idlwave-concatenate-rinfo-lists (&optional quiet run-hook)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4044 "Put the different sources for routine information together."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4045 ;; The sequence here is important because earlier definitions shadow
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4046 ;; later ones. We assume that if things in the buffers are newer
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4047 ;; then in the shell of the system, it is meant to be different.
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4048
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4049 (setcdr idlwave-last-system-routine-info-cons-cell
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4050 (append idlwave-buffer-routines
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4051 idlwave-compiled-routines
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4052 idlwave-library-routines))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4053 (setq idlwave-class-alist nil)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4054
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4055 ;; Give a message with information about the number of routines we have.
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4056 (unless quiet
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4057 (message
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4058 "Routine info updated: buffer(%d) compiled(%d) catalog(%d) system(%d)"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4059 (length idlwave-buffer-routines)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4060 (length idlwave-compiled-routines)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4061 (length idlwave-library-routines)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4062 (length idlwave-system-routines)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4063 (if run-hook
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4064 (run-hooks 'idlwave-update-rinfo-hook)))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4065
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4066 (defun idlwave-class-alist ()
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4067 "Return the class alist - make it if necessary."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4068 (or idlwave-class-alist
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4069 (let (class)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4070 (loop for x in idlwave-routines do
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4071 (when (and (setq class (nth 2 x))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4072 (not (assq class idlwave-class-alist)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4073 (push (list class) idlwave-class-alist)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4074 idlwave-class-alist)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4075
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4076 ;; Three functions for the hooks
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4077 (defun idlwave-save-buffer-update ()
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4078 (idlwave-update-current-buffer-info 'save-buffer))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4079 (defun idlwave-kill-buffer-update ()
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4080 (idlwave-update-current-buffer-info 'kill-buffer))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4081 (defun idlwave-new-buffer-update ()
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4082 (idlwave-update-current-buffer-info 'find-file))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4083
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4084 (defun idlwave-update-current-buffer-info (why)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4085 "Undate idlwave-routines for current buffer. Can run from after-save-hook."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4086 (when (and (eq major-mode 'idlwave-mode)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4087 (or (eq t idlwave-auto-routine-info-updates)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4088 (memq why idlwave-auto-routine-info-updates))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4089 idlwave-scan-all-buffers-for-routine-info
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4090 idlwave-routines)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4091 (condition-case nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4092 (let (routines)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4093 (idlwave-replace-buffer-routine-info
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4094 (buffer-file-name)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4095 (if (eq why 'kill-buffer)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4096 nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4097 (setq routines
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4098 (idlwave-sintern-rinfo-list
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4099 (idlwave-get-routine-info-from-buffers
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4100 (list (current-buffer))) 'set))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4101 (idlwave-concatenate-rinfo-lists 'quiet)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4102 routines)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4103 (error nil))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4104
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4105 (defun idlwave-replace-buffer-routine-info (file new)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4106 "Cut the part from FILE out of `idlwave-buffer-routines' and add NEW."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4107 (let ((list idlwave-buffer-routines)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4108 found)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4109 (while list
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4110 ;; The following test uses eq to make sure it works correctly
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4111 ;; when two buffers visit the same file. Then the file names
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4112 ;; will be equal, but not eq.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4113 (if (eq (cdr (nth 3 (car list))) file)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4114 (progn
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4115 (setcar list nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4116 (setq found t))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4117 (if found
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4118 ;; End of that section reached. Jump.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4119 (setq list nil)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4120 (setq list (cdr list)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4121 (setq idlwave-buffer-routines
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4122 (append new (delq nil idlwave-buffer-routines)))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4123
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4124 ;;----- Scanning buffers -------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4125
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4126 (defun idlwave-get-routine-info-from-buffers (buffers)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4127 "Call `idlwave-get-buffer-routine-info' on idlwave-mode buffers in BUFFERS."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4128 (let (buf routine-lists res)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4129 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4130 (while (setq buf (pop buffers))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4131 (set-buffer buf)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4132 (if (and (eq major-mode 'idlwave-mode)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4133 buffer-file-name)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4134 ;; yes, this buffer has the right mode.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4135 (progn (setq res (condition-case nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4136 (idlwave-get-buffer-routine-info)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4137 (error nil)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4138 (push res routine-lists)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4139 ;; Concatenate the individual lists and return the result
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4140 (apply 'nconc routine-lists)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4141
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4142 (defun idlwave-get-buffer-routine-info ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4143 "Scan the current buffer for routine info. Return (PRO-LIST FUNC-LIST)."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4144 (let* ((case-fold-search t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4145 routine-list string entry)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4146 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4147 (save-restriction
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4148 (widen)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4149 (goto-char (point-min))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4150 (while (re-search-forward
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4151 "^[ \t]*\\(pro\\|function\\)[ \t]" nil t)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4152 (setq string (buffer-substring
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4153 (match-beginning 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4154 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4155 (idlwave-end-of-statement)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4156 (point))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4157 (setq entry (idlwave-parse-definition string))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4158 (push entry routine-list))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4159 routine-list))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4160
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4161 (defvar idlwave-scanning-lib-dir)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4162 (defun idlwave-parse-definition (string)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4163 "Parse a module definition."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4164 (let ((case-fold-search t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4165 start name args type keywords class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4166 ;; Remove comments
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4167 (while (string-match ";.*" string)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4168 (setq string (replace-match "" t t string)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4169 ;; Remove the continuation line stuff
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4170 (while (string-match "\\([^a-zA-Z0-9$_]\\)\\$[ \t]*\n" string)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4171 (setq string (replace-match "\\1 " t nil string)))
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4172 (while (string-match "\n" string)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4173 (setq string (replace-match " " t nil string)))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4174 ;; Match the name and type.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4175 (when (string-match
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4176 "\\<\\(pro\\|function\\)\\>\\s-+\\(\\([a-zA-Z0-9$_]+\\)::\\)?\\([a-zA-Z0-9$_]+\\)" string)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4177 (setq start (match-end 0))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4178 (setq type (downcase (match-string 1 string)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4179 (if (match-beginning 3)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4180 (setq class (match-string 3 string)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4181 (setq name (match-string 4 string)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4182 ;; Match normal args and keyword args
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4183 (while (string-match
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4184 ",\\s-*\\([a-zA-Z][a-zA-Z0-9$_]*\\|\\(_ref\\)?_extra\\)\\s-*\\(=\\)?"
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4185 string start)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4186 (setq start (match-end 0))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4187 (if (match-beginning 3)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4188 (push (match-string 1 string) keywords)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4189 (push (match-string 1 string) args)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4190 ;; Normalize and sort.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4191 (setq args (nreverse args))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4192 (setq keywords (sort keywords (lambda (a b)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4193 (string< (downcase a) (downcase b)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4194 ;; Make and return the entry
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4195 ;; We don't know which argument are optional, so this information
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4196 ;; will not be contained in the calling sequence.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4197 (list name
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4198 (if (equal type "pro") 'pro 'fun)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4199 class
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4200 (cond ((not (boundp 'idlwave-scanning-lib))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4201 (cons 'buffer (buffer-file-name)))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4202 ; ((string= (downcase
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4203 ; (file-name-sans-extension
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4204 ; (file-name-nondirectory (buffer-file-name))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4205 ; (downcase name))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4206 ; (list 'lib))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4207 ; (t (cons 'lib (file-name-nondirectory (buffer-file-name))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4208 (t (cons 'lib (concat idlwave-scanning-lib-dir
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4209 (file-name-nondirectory (buffer-file-name))))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4210 (concat
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4211 (if (string= type "function") "Result = " "")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4212 (if class "Obj ->[%s::]" "")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4213 "%s"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4214 (if args
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4215 (concat
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4216 (if (string= type "function") "(" ", ")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4217 (mapconcat 'identity args ", ")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4218 (if (string= type "function") ")" ""))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4219 (if keywords
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4220 (mapcar 'list keywords)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4221 nil))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4222
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4223 ;;----- Scanning the library -------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4224
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4225 (defvar idlwave-sys-dir nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4226 "Internal variable.")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4227
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4228 (defun idlwave-sys-dir ()
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4229 "Return the syslib directory, or a dummy that never matches."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4230 (or idlwave-sys-dir
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4231 "@@@@@@@@"))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4232
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4233 (defvar idlwave-shell-path-query)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4234 (defun idlwave-create-libinfo-file (&optional arg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4235 "Scan all files on selected dirs of IDL search path for routine information.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4236 A widget checklist will allow you to choose the directories.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4237 Write the result as a file `idlwave-libinfo-file'. When this file exists,
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4238 will be automatically loaded to give routine information about library
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4239 routines.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4240 With ARG, just rescan the same directories as last time - so no widget
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4241 will pop up."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4242 (interactive "P")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4243 ;; Make sure the file is loaded if it exists.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4244 (if (and (stringp idlwave-libinfo-file)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4245 (file-regular-p idlwave-libinfo-file))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4246 (condition-case nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4247 (load-file idlwave-libinfo-file)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4248 (error nil)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4249 ;; Make sure the file name makes sense
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4250 (unless (and (stringp idlwave-libinfo-file)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4251 (> (length idlwave-libinfo-file) 0)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4252 (file-accessible-directory-p
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4253 (file-name-directory idlwave-libinfo-file))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4254 (not (string= "" (file-name-nondirectory
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4255 idlwave-libinfo-file))))
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 34708
diff changeset
4256 (error "`idlwave-libinfo-file' does not point to file in accessible directory"))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4257
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4258 (cond
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4259 ((and arg idlwave-path-alist
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4260 (consp (car idlwave-path-alist))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4261 idlwave-sys-dir)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4262 ;; Rescan the known directories
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4263 (idlwave-scan-lib-files
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4264 idlwave-sys-dir
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4265 idlwave-path-alist))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4266 (idlwave-library-path
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4267 ;; Get the directories from that variable
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4268 (idlwave-display-libinfo-widget
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4269 idlwave-system-directory
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4270 (idlwave-expand-path idlwave-library-path)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4271 (delq nil (mapcar (lambda (x) (if (consp x) (if (cdr x) (car x) nil) x))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4272 idlwave-path-alist))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4273 (t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4274 ;; Ask the shell for the path and run the widget
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4275 (message "Asking the shell for IDL path...")
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4276 (require 'idlw-shell)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4277 (idlwave-shell-send-command idlwave-shell-path-query
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4278 '(idlwave-libinfo-command-hook nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4279 'hide))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4280
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4281 (defun idlwave-libinfo-command-hook (&optional arg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4282 ;; Command hook used by `idlwave-create-libinfo-file'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4283 (if arg
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4284 ;; Scan immediately
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4285 (idlwave-scan-lib-files
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4286 idlwave-sys-dir
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4287 idlwave-path-alist)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4288 ;; Display the widget
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4289 (let* ((rpl (idlwave-shell-path-filter))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4290 (sysdir (car rpl))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4291 (dirs (cdr rpl)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4292 (idlwave-display-libinfo-widget
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4293 sysdir dirs
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4294 (delq nil (mapcar (lambda (x) (if (cdr x) (car x) nil))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4295 idlwave-path-alist))))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4296
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4297 (defconst idlwave-libinfo-widget-help-string
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4298 "This is the front-end to the creation of IDLWAVE library catalog.
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4299 Please select below the directories on IDL's search path from which you
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4300 would like to extract routine information, which will be stored in the file
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4301
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4302 %s
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4303
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4304 If this is not the correct file, first set variable `idlwave-libinfo-file'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4305 Then call this command again.
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4306
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4307 For writing code, you need to include the directories which contain the
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4308 routines you use. If IDLWAVE should be able to analyse routine shadowing
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4309 it is best to scan all directories.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4310
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4311 After selecting the directories, choose [Scan & Save] to scan the library
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4312 directories and save the routine info.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4313 \n")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4314
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4315 (defvar idlwave-widget)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4316 (defvar widget-keymap)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4317 (defun idlwave-display-libinfo-widget (sysdir dirs selected-dirs)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4318 "Create the widget to select IDL search path directories for scanning."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4319 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4320 (require 'widget)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4321 (require 'wid-edit)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4322 (unless dirs
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4323 (error "Don't know IDL's search path"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4324
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4325 ;; Allow only those directories to be selected which are in the path.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4326 (setq selected-dirs (delq nil (mapcar (lambda (x)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4327 (if (member x dirs) x nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4328 selected-dirs)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4329 (kill-buffer (get-buffer-create "*IDLWAVE Widget*"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4330 (switch-to-buffer (get-buffer-create "*IDLWAVE Widget*"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4331 (kill-all-local-variables)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4332 (make-local-variable 'idlwave-widget)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4333 (widget-insert (format idlwave-libinfo-widget-help-string
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4334 idlwave-libinfo-file))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4335
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4336 (widget-create 'push-button
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4337 :notify 'idlwave-widget-scan-lib-files
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4338 "Scan & Save")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4339 (widget-insert " ")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4340 (widget-create 'push-button
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4341 :notify (lambda (&rest ignore)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4342 (kill-buffer (current-buffer)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4343 "Quit")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4344 (widget-insert " ")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4345 (widget-create 'push-button
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4346 :notify 'idlwave-delete-libinfo-file
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4347 "Delete File")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4348 (widget-insert " ")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4349 (widget-create 'push-button
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4350 :notify '(lambda (&rest ignore)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4351 (idlwave-display-libinfo-widget
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4352 (widget-get idlwave-widget :sysdir)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4353 (widget-get idlwave-widget :path-dirs)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4354 (widget-get idlwave-widget :path-dirs)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4355 "Select All")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4356 (widget-insert " ")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4357 (widget-create 'push-button
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4358 :notify '(lambda (&rest ignore)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4359 (idlwave-display-libinfo-widget
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4360 (widget-get idlwave-widget :sysdir)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4361 (widget-get idlwave-widget :path-dirs)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4362 nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4363 "Deselect All")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4364 (widget-insert "\n\n")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4365
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4366 (widget-insert "Select Directories\n")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4367
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4368 (setq idlwave-widget
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4369 (apply 'widget-create
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4370 'checklist
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4371 :value selected-dirs
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4372 :greedy t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4373 :tag "List of directories"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4374 (mapcar (lambda (x) (list 'item x)) dirs)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4375 (widget-put idlwave-widget :path-dirs dirs)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4376 (widget-put idlwave-widget :sysdir sysdir)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4377 (widget-insert "\n")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4378 (use-local-map widget-keymap)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4379 (widget-setup)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4380 (goto-char (point-min))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4381 (delete-other-windows))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4382
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4383 (defun idlwave-delete-libinfo-file (&rest ignore)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4384 (if (yes-or-no-p
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4385 (format "Delete file %s " idlwave-libinfo-file))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4386 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4387 (delete-file idlwave-libinfo-file)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4388 (message "%s has been deleted" idlwave-libinfo-file))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4389
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4390 (defun idlwave-widget-scan-lib-files (&rest ignore)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4391 ;; Call `idlwave-scan-lib-files' with data taken from the widget.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4392 (let* ((widget idlwave-widget)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4393 (selected-dirs (widget-value widget))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4394 (sysdir (widget-get widget :sysdir))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4395 (path-dirs (widget-get widget :path-dirs))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4396 (path-dir-alist
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4397 (mapcar (lambda (x) (cons x (if (member x selected-dirs) t nil)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4398 path-dirs)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4399 (idlwave-scan-lib-files sysdir path-dir-alist)))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4400
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4401 (defvar font-lock-mode)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4402 (defun idlwave-scan-lib-files (sysdir path-alist)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4403 ;; Scan the files in PATH-ALIST and store the info in a file
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4404 (let* ((idlwave-scanning-lib t)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4405 (idlwave-scanning-lib-dir "")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4406 (dircnt (1+ (length path-alist)))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4407 (idlwave-completion-case nil)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4408 dirs-alist dir files file)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4409 (setq idlwave-library-routines nil)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4410 (setq idlwave-path-alist path-alist)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4411 (setq idlwave-true-path-alist nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4412 (setq idlwave-sys-dir sysdir)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4413 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4414 (set-buffer (get-buffer-create "*idlwave-scan.pro*"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4415 (idlwave-mode)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4416 (setq dirs-alist (reverse path-alist))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4417 (while (setq dir (pop dirs-alist))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4418 (decf dircnt)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4419 (when (cdr dir)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4420 ;; Has the flag of scanned directories
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4421 (setq dir (car dir))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4422 (setq idlwave-scanning-lib-dir (format "{%d}/" dircnt))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4423 (when (file-directory-p dir)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4424 (setq files (directory-files dir 'full "\\.[pP][rR][oO]\\'"))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4425 (while (setq file (pop files))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4426 (when (file-regular-p file)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4427 (if (not (file-readable-p file))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4428 (message "Skipping %s (no read permission)" file)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4429 (message "Scanning %s..." file)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4430 (erase-buffer)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4431 (insert-file-contents file 'visit)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4432 (setq idlwave-library-routines
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4433 (append (idlwave-get-routine-info-from-buffers
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4434 (list (current-buffer)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4435 idlwave-library-routines)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4436 ))))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4437 ;; Sorting is not necessary since we sort each time before a routine
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4438 ;; is used. So we don't do it here - the catalog file looks nicer
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4439 ;; when it is unsorted.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4440 ;;(message "Sorting...")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4441 ;;(setq idlwave-library-routines
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4442 ;;(sort idlwave-library-routines 'idlwave-routine-entry-compare))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4443 ;;(message "Sorting...done")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4444 (message "Creating libinfo file...")
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4445 (kill-buffer "*idlwave-scan.pro*")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4446 (kill-buffer (get-buffer-create "*IDLWAVE Widget*"))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4447 (let ((font-lock-maximum-size 0)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4448 (auto-mode-alist nil))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4449 (find-file idlwave-libinfo-file))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4450 (if (and (boundp 'font-lock-mode)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4451 font-lock-mode)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4452 (font-lock-mode 0))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4453 (erase-buffer)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4454 (insert ";; IDLWAVE libinfo file\n")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4455 (insert (format ";; Created %s\n\n" (current-time-string)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4456
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4457 ;; Define the variable which knows the value of "!DIR"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4458 (insert (format "\n(setq idlwave-sys-dir \"%s\")\n"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4459 idlwave-sys-dir))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4460
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4461 ;; Define the variable which contains a list of all scanned directories
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4462 (insert "\n(setq idlwave-path-alist\n '(")
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4463 (mapcar (lambda (x)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4464 (insert (format "\n (\"%s\" . %s)" (car x) (cdr x))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4465 path-alist)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4466 (insert "))\n")
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4467
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4468 ;; Define the routine info list
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4469 (insert "\n(setq idlwave-library-routines\n '(")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4470 (mapcar (lambda (x)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4471 (insert "\n ")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4472 (insert (with-output-to-string (prin1 x))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4473 idlwave-library-routines)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4474 (insert (format "))\n\n;;; %s ends here\n"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4475 (file-name-nondirectory idlwave-libinfo-file)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4476 (goto-char (point-min))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4477 ;; Save the buffer
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4478 (save-buffer 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4479 (kill-buffer (current-buffer)))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4480 (message "Creating libinfo file...done")
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4481 (message "Info for %d routines saved in %s"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4482 (length idlwave-library-routines)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4483 idlwave-libinfo-file)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4484 (sit-for 2)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4485 (idlwave-update-routine-info t))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4486
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4487 (defun idlwave-expand-path (path &optional default-dir)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4488 ;; Expand parts of path starting with '+' recursively into directory list.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4489 ;; Relative recursive path elements are expanded relative to DEFAULT-DIR.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4490 (message "Expanding path...")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4491 (let (path1 dir recursive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4492 (while (setq dir (pop path))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4493 (if (setq recursive (string= (substring dir 0 1) "+"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4494 (setq dir (substring dir 1)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4495 (if (and recursive
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4496 (not (file-name-absolute-p dir)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4497 (setq dir (expand-file-name dir default-dir)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4498 (if recursive
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4499 ;; Expand recursively
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4500 (setq path1 (append (idlwave-recursive-directory-list dir) path1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4501 ;; Keep unchanged
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4502 (push dir path1)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4503 (message "Expanding path...done")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4504 (nreverse path1)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4505
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4506 (defun idlwave-recursive-directory-list (dir)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4507 ;; Return a list of all directories below DIR, including DIR itself
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4508 (let ((path (list dir)) path1 file files)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4509 (while (setq dir (pop path))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4510 (when (file-directory-p dir)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4511 (setq files (nreverse (directory-files dir t "[^.]")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4512 (while (setq file (pop files))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4513 (if (file-directory-p file)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4514 (push (file-name-as-directory file) path)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4515 (push dir path1)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4516 path1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4517
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4518 ;;----- Asking the shell -------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4519
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4520 ;; First, here is the idl program which can be used to query IDL for
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4521 ;; defined routines.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4522 (defconst idlwave-routine-info.pro
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4523 "
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4524 ;; START OF IDLWAVE SUPPORT ROUTINES
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4525 pro idlwave_print_info_entry,name,func=func,separator=sep
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4526 ;; See if it's an object method
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4527 if name eq '' then return
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4528 func = keyword_set(func)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4529 methsep = strpos(name,'::')
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4530 meth = methsep ne -1
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4531
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4532 ;; Get routine info
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4533 pars = routine_info(name,/parameters,functions=func)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4534 source = routine_info(name,/source,functions=func)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4535 nargs = pars.num_args
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4536 nkw = pars.num_kw_args
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4537 if nargs gt 0 then args = pars.args
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4538 if nkw gt 0 then kwargs = pars.kw_args
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4539
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4540 ;; Trim the class, and make the name
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4541 if meth then begin
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4542 class = strmid(name,0,methsep)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4543 name = strmid(name,methsep+2,strlen(name)-1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4544 if nargs gt 0 then begin
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4545 ;; remove the self argument
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4546 wh = where(args ne 'SELF',nargs)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4547 if nargs gt 0 then args = args(wh)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4548 endif
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4549 endif else begin
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4550 ;; No class, just a normal routine.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4551 class = \"\"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4552 endelse
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4553
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4554 ;; Calling sequence
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4555 cs = \"\"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4556 if func then cs = 'Result = '
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4557 if meth then cs = cs + 'Obj -> [' + '%s' + '::]'
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4558 cs = cs + '%s'
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4559 if func then cs = cs + '(' else if nargs gt 0 then cs = cs + ', '
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4560 if nargs gt 0 then begin
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4561 for j=0,nargs-1 do begin
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4562 cs = cs + args(j)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4563 if j lt nargs-1 then cs = cs + ', '
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4564 endfor
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4565 end
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4566 if func then cs = cs + ')'
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4567 ;; Keyword arguments
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4568 kwstring = ''
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4569 if nkw gt 0 then begin
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4570 for j=0,nkw-1 do begin
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4571 kwstring = kwstring + ' ' + kwargs(j)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4572 endfor
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4573 endif
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4574
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4575 ret=(['IDLWAVE-PRO','IDLWAVE-FUN'])(func)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4576
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4577 print,ret + ': ' + name + sep + class + sep + source(0).path $
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4578 + sep + cs + sep + kwstring
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4579 end
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4580
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4581 pro idlwave_routine_info
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4582 sep = '<@>'
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4583 print,'>>>BEGIN OF IDLWAVE ROUTINE INFO (\"' + sep + '\" IS THE SEPARATOR)'
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4584 all = routine_info()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4585 for i=0,n_elements(all)-1 do $
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4586 idlwave_print_info_entry,all(i),separator=sep
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4587 all = routine_info(/functions)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4588 for i=0,n_elements(all)-1 do $
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4589 idlwave_print_info_entry,all(i),/func,separator=sep
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4590 print,'>>>END OF IDLWAVE ROUTINE INFO'
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4591 end
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4592
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4593 pro idlwave_get_sysvars
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4594 forward_function strjoin,strtrim,strsplit
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4595 catch,error_status
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4596 if error_status ne 0 then begin
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4597 print, 'Cannot get info about system variables'
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4598 endif else begin
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4599 help,/brief,output=s,/system_variables ; ? unsafe use of OUTPUT=
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4600 s = strtrim(strjoin(s,' ',/single),2) ; make one line
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4601 v = strsplit(s,' +',/regex,/extract) ; get variables
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4602 for i=0,n_elements(v)-1 do begin
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4603 t = [''] ; get tag list
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4604 a=execute('if n_tags('+v[i]+') gt 0 then t=tag_names('+v[i]+')')
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4605 print, 'IDLWAVE-SYSVAR: '+v[i]+' '+strjoin(t,' ',/single)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4606 endfor
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4607 endelse
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4608 end
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4609
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4610 pro idlwave_get_class_tags, class
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4611 res = execute('tags=tag_names({'+class+'})')
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4612 if res then print,'IDLWAVE-CLASS-TAGS: '+class+string(format='(1000(\" \",A))',tags)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4613 end
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4614 ;; END OF IDLWAVE SUPPORT ROUTINES
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4615 "
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4616 "The idl programs to get info from the shell.")
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4617
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4618 (defvar idlwave-idlwave_routine_info-compiled nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4619 "Remembers if the routine info procedure is already compiled.")
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4620
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4621 (defvar idlwave-shell-temp-pro-file)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4622 (defvar idlwave-shell-temp-rinfo-save-file)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4623 (defun idlwave-shell-update-routine-info (&optional quiet run-hooks)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4624 "Query the shell for routine_info of compiled modules and update the lists."
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4625 ;; Save and compile the procedure. The compiled procedure is then
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4626 ;; saved into an IDL SAVE file, to allow for fast RESTORE.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4627 ;; We need to RESTORE the procedure each time we use it, since
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4628 ;; the user may have killed or redefined it. In particluar,
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4629 ;; .RESET_SESSION will kill all user procedures.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4630 (unless (and idlwave-idlwave_routine_info-compiled
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4631 (file-readable-p idlwave-shell-temp-rinfo-save-file))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4632 (save-excursion
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4633 (set-buffer (idlwave-find-file-noselect
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4634 idlwave-shell-temp-pro-file))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4635 (erase-buffer)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4636 (insert idlwave-routine-info.pro)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4637 (save-buffer 0))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4638 (idlwave-shell-send-command
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4639 (concat ".run " idlwave-shell-temp-pro-file)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4640 nil 'hide)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4641 (idlwave-shell-send-command
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4642 (format "save,'idlwave_routine_info','idlwave_print_info_entry',FILE='%s',/ROUTINES"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4643 idlwave-shell-temp-rinfo-save-file)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4644 nil 'hide))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4645
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4646 ;; Restore and execute the procedure, analyze the output
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4647 (idlwave-shell-send-command
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4648 (format "RESTORE, '%s' & idlwave_routine_info"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4649 idlwave-shell-temp-rinfo-save-file)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4650 `(progn
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4651 (idlwave-shell-routine-info-filter)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4652 (idlwave-concatenate-rinfo-lists ,quiet ,run-hooks))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4653 'hide))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4654
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4655 ;; ---------------------------------------------------------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4656 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4657 ;; Completion and displaying routine calling sequences
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4658
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4659 (defvar idlwave-completion-help-info nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4660 (defvar idlwave-current-obj_new-class nil)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4661 (defvar idlwave-complete-special nil)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4662
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4663 (defun idlwave-complete (&optional arg module class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4664 "Complete a function, procedure or keyword name at point.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4665 This function is smart and figures out what can be legally completed
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4666 at this point.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4667 - At the beginning of a statement it completes procedure names.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4668 - In the middle of a statement it completes function names.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4669 - after a `(' or `,' in the argument list of a function or procedure,
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4670 it completes a keyword of the relevant function or procedure.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4671 - In the first arg of `OBJ_NEW', it completes a class name.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4672
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4673 When several completions are possible, a list will be displayed in the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4674 *Completions* buffer. If this list is too long to fit into the
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4675 window, scrolling can be achieved by repeatedly pressing \\[idlwave-complete].
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4676
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4677 The function also knows about object methods. When it needs a class
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4678 name, the action depends upon `idlwave-query-class', which see. You
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4679 can force IDLWAVE to ask you for a class name with a \\[universal-argument] prefix
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4680 argument to this command.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4681
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4682 See also the variables `idlwave-keyword-completion-adds-equal' and
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4683 `idlwave-function-completion-adds-paren'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4684
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4685 The optional ARG can be used to specify the completion type in order
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4686 to override IDLWAVE's idea of what should be completed at point.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4687 Possible values are:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4688
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4689 0 <=> query for the completion type
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4690 1 <=> 'procedure
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4691 2 <=> 'procedure-keyword
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4692 3 <=> 'function
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4693 4 <=> 'function-keyword
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4694 5 <=> 'procedure-method
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4695 6 <=> 'procedure-method-keyword
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4696 7 <=> 'function-method
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4697 8 <=> 'function-method-keyword
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4698 9 <=> 'class
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4699
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4700 For Lisp programmers only:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4701 When we force a keyword, optional argument MODULE can contain the module name.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4702 When we force a method or a method keyword, CLASS can specify the class."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4703 (interactive "P")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4704 (idlwave-routines)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4705 (let* ((where-list
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4706 (if (and arg
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4707 (or (integerp arg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4708 (symbolp arg)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4709 (idlwave-make-force-complete-where-list arg module class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4710 (idlwave-where)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4711 (what (nth 2 where-list))
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
4712 (idlwave-force-class-query (equal arg '(4))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4713
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4714 (if (and module (string-match "::" module))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4715 (setq class (substring module 0 (match-beginning 0))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4716 module (substring module (match-end 0))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4717
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4718 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4719
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4720 ((and (null arg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4721 (eq (car-safe last-command) 'idlwave-display-completion-list)
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
4722 (get-buffer-window "*Completions*"))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4723 (setq this-command last-command)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4724 (idlwave-scroll-completions))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4725
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4726 ;; Check for any special completion functions
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4727 ((and idlwave-complete-special
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4728 (idlwave-complete-special)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4729
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4730 ((and (idlwave-in-quote)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4731 (not (eq what 'class)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4732 (idlwave-complete-filename))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4733
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4734 ((null what)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4735 (error "Nothing to complete here"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4736
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4737 ((eq what 'class)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4738 (setq idlwave-completion-help-info '(class))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4739 (idlwave-complete-class))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4740
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4741 ((eq what 'procedure)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4742 ;; Complete a procedure name
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4743 (let* ((class-selector (idlwave-determine-class (nth 3 where-list) 'pro))
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4744 (super-classes (idlwave-all-class-inherits class-selector))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4745 (isa (concat "procedure" (if class-selector "-method" "")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4746 (type-selector 'pro))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4747 (setq idlwave-completion-help-info
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4748 (list 'routine nil type-selector class-selector nil super-classes))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4749 (idlwave-complete-in-buffer
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4750 'procedure (if class-selector 'method 'routine)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4751 (idlwave-routines) 'idlwave-selector
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4752 (format "Select a %s name%s"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4753 isa
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4754 (if class-selector
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4755 (format " (class is %s)" class-selector)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4756 ""))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4757 isa
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4758 'idlwave-attach-method-classes)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4759
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4760 ((eq what 'function)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4761 ;; Complete a function name
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4762 (let* ((class-selector (idlwave-determine-class (nth 3 where-list) 'fun))
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4763 (super-classes (idlwave-all-class-inherits class-selector))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4764 (isa (concat "function" (if class-selector "-method" "")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4765 (type-selector 'fun))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4766 (setq idlwave-completion-help-info
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4767 (list 'routine nil type-selector class-selector nil super-classes))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4768 (idlwave-complete-in-buffer
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4769 'function (if class-selector 'method 'routine)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4770 (idlwave-routines) 'idlwave-selector
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4771 (format "Select a %s name%s"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4772 isa
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4773 (if class-selector
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4774 (format " (class is %s)" class-selector)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4775 ""))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4776 isa
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4777 'idlwave-attach-method-classes)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4778
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4779 ((eq what 'procedure-keyword)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4780 ;; Complete a procedure keyword
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4781 (let* ((where (nth 3 where-list))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4782 (name (car where))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4783 (method-selector name)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4784 (type-selector 'pro)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4785 (class (idlwave-determine-class where 'pro))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4786 (class-selector class)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4787 (super-classes (idlwave-all-class-inherits class-selector))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4788 (isa (format "procedure%s-keyword" (if class "-method" "")))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4789 (entry (idlwave-best-rinfo-assq
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4790 name 'pro class (idlwave-routines)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4791 (list (nth 5 entry)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4792 (unless (or entry (eq class t))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4793 (error "Nothing known about procedure %s"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4794 (idlwave-make-full-name class name)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4795 (setq list (idlwave-fix-keywords name 'pro class list))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4796 (unless list (error (format "No keywords available for procedure %s"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4797 (idlwave-make-full-name class name))))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4798 (setq idlwave-completion-help-info
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4799 (list 'keyword name type-selector class-selector nil super-classes))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4800 (idlwave-complete-in-buffer
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4801 'keyword 'keyword list nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4802 (format "Select keyword for procedure %s%s"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4803 (idlwave-make-full-name class name)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4804 (if (or (member '("_EXTRA") list)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4805 (member '("_REF_EXTRA") list))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4806 " (note _EXTRA)" ""))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4807 isa
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4808 'idlwave-attach-keyword-classes)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4809
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4810 ((eq what 'function-keyword)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4811 ;; Complete a function keyword
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4812 (let* ((where (nth 3 where-list))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4813 (name (car where))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4814 (method-selector name)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4815 (type-selector 'fun)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4816 (class (idlwave-determine-class where 'fun))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4817 (class-selector class)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4818 (super-classes (idlwave-all-class-inherits class-selector))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4819 (isa (format "function%s-keyword" (if class "-method" "")))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4820 (entry (idlwave-best-rinfo-assq
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4821 name 'fun class (idlwave-routines)))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4822 (list (nth 5 entry))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4823 msg-name)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4824 (unless (or entry (eq class t))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4825 (error "Nothing known about function %s"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4826 (idlwave-make-full-name class name)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4827 (setq list (idlwave-fix-keywords name 'fun class list))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4828 ;; OBJ_NEW: Messages mention the proper Init method
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4829 (setq msg-name (if (and (null class)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4830 (string= (upcase name) "OBJ_NEW"))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4831 (concat idlwave-current-obj_new-class
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4832 "::Init (via OBJ_NEW)")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4833 (idlwave-make-full-name class name)))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4834 (unless list (error (format "No keywords available for function %s"
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4835 msg-name)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4836 (setq idlwave-completion-help-info
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4837 (list 'keyword name type-selector class-selector nil super-classes))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4838 (idlwave-complete-in-buffer
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4839 'keyword 'keyword list nil
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4840 (format "Select keyword for function %s%s" msg-name
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4841 (if (or (member '("_EXTRA") list)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4842 (member '("_REF_EXTRA") list))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4843 " (note _EXTRA)" ""))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4844 isa
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4845 'idlwave-attach-keyword-classes)))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4846
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4847 (t (error "This should not happen (idlwave-complete)")))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4848
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4849 (defvar idlwave-complete-special nil
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4850 "List of special completion functions.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4851 These functions are called for each completion. Each function must check
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4852 if its own special completion context is present. If yes, it should
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4853 use `idlwave-complete-in-buffer' to do some completion and return `t'.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4854 If such a function returns `t', *no further* attempts to complete
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4855 other contexts will be done. If the function returns `nil', other completions
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4856 will be tried.")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4857 (defun idlwave-complete-special ()
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4858 (let ((functions idlwave-complete-special)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4859 fun)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4860 (catch 'exit
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4861 (while (setq fun (pop functions))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4862 (if (funcall fun)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4863 (throw 'exit t)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4864 nil)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4865
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4866 (defun idlwave-make-force-complete-where-list (what &optional module class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4867 ;; Return an artificial WHERE specification to force the completion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4868 ;; routine to complete a specific item independent of context.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4869 ;; WHAT is the prefix arg of `idlwave-complete', see there for details.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4870 ;; MODULE and CLASS can be used to specify the routine name and class.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4871 ;; The class name will also be found in MODULE if that is like "class::mod".
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4872 (let* ((what-list '(("procedure") ("procedure-keyword")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4873 ("function") ("function-keyword")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4874 ("procedure-method") ("procedure-method-keyword")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4875 ("function-method") ("function-method-keyword")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4876 ("class")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4877 (module (idlwave-sintern-routine-or-method module class))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4878 (class (idlwave-sintern-class class))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4879 (what (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4880 ((equal what 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4881 (setq what
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4882 (intern (completing-read
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4883 "Complete what? " what-list nil t))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4884 ((integerp what)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4885 (setq what (intern (car (nth (1- what) what-list)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4886 ((and what
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4887 (symbolp what)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4888 (assoc (symbol-name what) what-list))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4889 what)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4890 (t (error "Illegal WHAT"))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4891 (nil-list '(nil nil nil nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4892 (class-list (list nil nil (or class t) nil)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4893
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4894 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4895
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4896 ((eq what 'procedure)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4897 (list nil-list nil-list 'procedure nil-list nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4898
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4899 ((eq what 'procedure-keyword)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4900 (let* ((class-selector nil)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4901 (super-classes nil)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4902 (type-selector 'pro)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4903 (pro (or module
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4904 (idlwave-completing-read
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4905 "Procedure: " (idlwave-routines) 'idlwave-selector))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4906 (setq pro (idlwave-sintern-routine pro))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4907 (list nil-list nil-list 'procedure-keyword
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4908 (list pro nil nil nil) nil)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4909
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4910 ((eq what 'function)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4911 (list nil-list nil-list 'function nil-list nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4912
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4913 ((eq what 'function-keyword)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4914 (let* ((class-selector nil)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4915 (super-classes nil)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4916 (type-selector 'fun)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4917 (func (or module
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4918 (idlwave-completing-read
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4919 "Function: " (idlwave-routines) 'idlwave-selector))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4920 (setq func (idlwave-sintern-routine func))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4921 (list nil-list nil-list 'function-keyword
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4922 (list func nil nil nil) nil)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4923
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4924 ((eq what 'procedure-method)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4925 (list nil-list nil-list 'procedure class-list nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4926
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4927 ((eq what 'procedure-method-keyword)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4928 (let* ((class (idlwave-determine-class class-list 'pro))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4929 (class-selector class)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4930 (super-classes (idlwave-all-class-inherits class-selector))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4931 (type-selector 'pro)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4932 (pro (or module
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4933 (idlwave-completing-read
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4934 (format "Procedure in %s class: " class-selector)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4935 (idlwave-routines) 'idlwave-selector))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4936 (setq pro (idlwave-sintern-method pro))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4937 (list nil-list nil-list 'procedure-keyword
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4938 (list pro nil class nil) nil)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4939
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4940 ((eq what 'function-method)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4941 (list nil-list nil-list 'function class-list nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4942
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4943 ((eq what 'function-method-keyword)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4944 (let* ((class (idlwave-determine-class class-list 'fun))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4945 (class-selector class)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4946 (super-classes (idlwave-all-class-inherits class-selector))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4947 (type-selector 'fun)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4948 (func (or module
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4949 (idlwave-completing-read
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4950 (format "Function in %s class: " class-selector)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4951 (idlwave-routines) 'idlwave-selector))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4952 (setq func (idlwave-sintern-method func))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4953 (list nil-list nil-list 'function-keyword
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4954 (list func nil class nil) nil)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4955
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4956 ((eq what 'class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4957 (list nil-list nil-list 'class nil-list nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4958
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4959 (t (error "Illegal value for WHAT")))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4960
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4961 (defun idlwave-completing-read (&rest args)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4962 ;; Completing read, case insensitive
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4963 (let ((old-value (default-value 'completion-ignore-case)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4964 (unwind-protect
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4965 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4966 (setq-default completion-ignore-case t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4967 (apply 'completing-read args))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4968 (setq-default completion-ignore-case old-value))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4969
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4970 (defvar idlwave-shell-default-directory)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4971 (defun idlwave-complete-filename ()
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4972 "Use the comint stuff to complete a file name."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4973 (require 'comint)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4974 (let* ((comint-file-name-chars "~/A-Za-z0-9+@:_.$#%={}\\-")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4975 (comint-completion-addsuffix nil)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4976 (default-directory
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4977 (if (and (boundp 'idlwave-shell-default-directory)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4978 (stringp idlwave-shell-default-directory)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4979 (file-directory-p idlwave-shell-default-directory))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4980 idlwave-shell-default-directory
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4981 default-directory)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4982 (comint-dynamic-complete-filename)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
4983
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4984 (defun idlwave-make-full-name (class name)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4985 ;; Make a fully qualified module name including the class name
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4986 (concat (if class (format "%s::" class) "") name))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4987
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4988 (defun idlwave-rinfo-assoc (name type class list)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4989 "Like `idlwave-rinfo-assq', but sintern strings first."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4990 (idlwave-rinfo-assq
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4991 (idlwave-sintern-routine-or-method name class)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4992 type (idlwave-sintern-class class) list))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
4993
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4994 (defun idlwave-rinfo-assq (name type class list)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4995 ;; Works like assq, but also checks type and class
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4996 (catch 'exit
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4997 (let (match)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4998 (while (setq match (assq name list))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
4999 (and (or (eq type t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5000 (eq (nth 1 match) type))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5001 (eq (nth 2 match) class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5002 (throw 'exit match))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5003 (setq list (cdr (memq match list)))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5004
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5005 (defun idlwave-rinfo-assq-any-class (name type class list)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5006 (let* ((classes (cons class (idlwave-all-class-inherits class)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5007 class rtn)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5008 (while classes
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5009 (if (setq rtn (idlwave-rinfo-assq name type (pop classes) list))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5010 (setq classes nil)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5011 rtn))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5012
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5013 (defun idlwave-best-rinfo-assq (name type class list)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5014 "Like `idlwave-rinfo-assq', but get all twins and sort, then return first."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5015 (let ((twins (idlwave-routine-twins
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5016 (idlwave-rinfo-assq-any-class name type class list)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5017 list))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5018 syslibp)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5019 (when (> (length twins) 1)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5020 (setq twins (sort twins 'idlwave-routine-entry-compare-twins))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5021 (if (and (eq 'system (car (nth 3 (car twins))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5022 (setq syslibp (idlwave-any-syslib (cdr twins)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5023 (not (equal 1 syslibp)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5024 ;; Its a syslib, so we need to remove the system entry
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5025 (setq twins (cdr twins))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5026 (car twins)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5027
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5028 (defun idlwave-best-rinfo-assoc (name type class list)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5029 "Like `idlwave-best-rinfo-assq', but sintern strings first."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5030 (idlwave-best-rinfo-assq
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5031 (idlwave-sintern-routine-or-method name class)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5032 type (idlwave-sintern-class class) list))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5033
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5034 (defun idlwave-any-syslib (entries)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5035 "Does the entry list ENTRIES contain a syslib entry?
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5036 If yes, return the index (>=1)."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5037 (let (file (cnt 0))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5038 (catch 'exit
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5039 (while entries
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5040 (incf cnt)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5041 (setq file (cdr (nth 3 (car entries))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5042 (if (and file
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5043 (idlwave-syslib-p
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5044 (idlwave-expand-lib-file-name file)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5045 (throw 'exit cnt)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5046 (setq entries (cdr entries))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5047 nil)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5048
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5049 (defun idlwave-all-assq (key list)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5050 "Return a list of all associations of Key in LIST."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5051 (let (rtn elt)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5052 (while (setq elt (assq key list))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5053 (push elt rtn)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5054 (setq list (cdr (memq elt list))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5055 (nreverse rtn)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5056
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5057 (defun idlwave-all-method-classes (method &optional type)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5058 "Return all classes which have a method METHOD. TYPE is 'fun or 'pro.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5059 When TYPE is not specified, both procedures and functions will be considered."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5060 (if (null method)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5061 (mapcar 'car (idlwave-class-alist))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5062 (let (rtn)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5063 (mapcar (lambda (x)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5064 (and (nth 2 x)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5065 (or (not type)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5066 (eq type (nth 1 x)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5067 (push (nth 2 x) rtn)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5068 (idlwave-all-assq method (idlwave-routines)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5069 (idlwave-uniquify rtn))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5070
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5071 (defun idlwave-all-method-keyword-classes (method keyword &optional type)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5072 "Return all classes which have a method METHOD with keyword KEYWORD.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5073 TYPE is 'fun or 'pro.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5074 When TYPE is not specified, both procedures and functions will be considered."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5075 (if (or (null method)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5076 (null keyword))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5077 nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5078 (let (rtn)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5079 (mapcar (lambda (x)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5080 (and (nth 2 x)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5081 (or (not type)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5082 (eq type (nth 1 x)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5083 (assoc keyword (nth 5 x))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5084 (push (nth 2 x) rtn)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5085 (idlwave-all-assq method (idlwave-routines)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5086 (idlwave-uniquify rtn))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5087
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5088 (defun idlwave-members-only (list club)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5089 "Return list of all elements in LIST which are also in CLUB."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5090 (let (rtn)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5091 (while list
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5092 (if (member (car list) club)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5093 (setq rtn (cons (car list) rtn)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5094 (setq list (cdr list)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5095 (nreverse rtn)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5096
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5097 (defun idlwave-nonmembers-only (list club)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5098 "Return list of all elements in LIST which are not in CLUB."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5099 (let (rtn)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5100 (while list
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5101 (if (member (car list) club)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5102 nil
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5103 (setq rtn (cons (car list) rtn)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5104 (setq list (cdr list)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5105 (nreverse rtn)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5106
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5107 (defun idlwave-determine-class (info type)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5108 ;; Determine the class of a routine call. INFO is the structure returned
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5109 ;; `idlwave-what-function' or `idlwave-what-procedure'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5110 ;; The third element in this structure is the class. When nil, we return nil.
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5111 ;; When t, try to get the class from text properties at the arrow. When
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5112 ;; the object is "self", we use the class of the current routine.
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5113 ;; otherwise prompt the user for a class name. Also stores the selected
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5114 ;; class as a text property at the arrow.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5115 ;; TYPE is 'fun or 'pro.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5116 (let* ((class (nth 2 info))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5117 (apos (nth 3 info))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5118 (nassoc (assoc (if (stringp (car info))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5119 (upcase (car info))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5120 (car info))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5121 idlwave-query-class))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5122 (dassoc (assq (if (car info) 'keyword-default 'method-default)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5123 idlwave-query-class))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5124 (query (cond (nassoc (cdr nassoc))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5125 (dassoc (cdr dassoc))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5126 (t t)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5127 (arrow (and apos (string= (buffer-substring apos (+ 2 apos)) "->")))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5128 (is-self
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5129 (and arrow
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5130 (save-excursion (goto-char apos)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5131 (forward-word -1)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5132 (let ((case-fold-search t))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5133 (looking-at "self\\>")))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5134 (force-query idlwave-force-class-query)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5135 store class-alist)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5136 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5137 ((null class) nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5138 ((eq t class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5139 ;; There is an object which would like to know its class
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5140 (if (and arrow (get-text-property apos 'idlwave-class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5141 idlwave-store-inquired-class
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5142 (not force-query))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5143 (setq class (get-text-property apos 'idlwave-class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5144 class (idlwave-sintern-class class)))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5145 (when (and (eq t class)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5146 is-self)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5147 (setq class (or (nth 2 (idlwave-current-routine)) class)))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5148 (when (and (eq class t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5149 (or force-query query))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5150 (setq class-alist
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5151 (mapcar 'list (idlwave-all-method-classes (car info) type)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5152 (setq class
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5153 (idlwave-sintern-class
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5154 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5155 ((and (= (length class-alist) 0) (not force-query))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5156 (error "No classes available with method %s" (car info)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5157 ((and (= (length class-alist) 1) (not force-query))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5158 (car (car class-alist)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5159 (t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5160 (setq store idlwave-store-inquired-class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5161 (idlwave-completing-read
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5162 (format "Class%s: " (if (stringp (car info))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5163 (format " for %s method %s"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5164 type (car info))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5165 ""))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5166 class-alist nil nil nil 'idlwave-class-history))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5167 (when (and class (not (eq t class)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5168 ;; We have a real class here
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5169 (when (and store arrow)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5170 (put-text-property apos (+ apos 2) 'idlwave-class class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5171 (put-text-property apos (+ apos 2) 'face idlwave-class-arrow-face))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5172 (setf (nth 2 info) class))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5173 ;; Return the class
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5174 class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5175 ;; Default as fallback
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5176 (t class))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5177
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5178 (defvar type-selector)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5179 (defvar class-selector)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5180 (defvar method-selector)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5181 (defvar super-classes)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5182 (defun idlwave-selector (a)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5183 (and (eq (nth 1 a) type-selector)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5184 (or (and (nth 2 a) (eq class-selector t))
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5185 (eq (nth 2 a) class-selector)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5186 (memq (nth 2 a) super-classes)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5187 )))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5188
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5189 (defun idlwave-where ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5190 "Find out where we are.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5191 The return value is a list with the following stuff:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5192 (PRO-LIST FUNC-LIST COMPLETE-WHAT CW-LIST LAST-CHAR)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5193
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5194 PRO-LIST (PRO POINT CLASS ARROW)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5195 FUNC-LIST (FUNC POINT CLASS ARROW)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5196 COMPLETE-WHAT a symbol indicating what kind of completion makes sense here
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5197 CW-LIST Like PRO-LIST, for what can be copmpleted here.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5198 LAST-CHAR last relevant character before point (non-white non-comment,
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5199 not part of current identifier or leading slash).
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5200
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5201 In the lists, we have these meanings:
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5202 PRO: Procedure name
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5203 FUNC: Function name
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5204 POINT: Where is this
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5205 CLASS: What class has the routine (nil=no, t=is method, but class unknown)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5206 ARROW: Where is the arrow?"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5207 (idlwave-routines)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5208 (let* (;(bos (save-excursion (idlwave-beginning-of-statement) (point)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5209 (bos (save-excursion (idlwave-start-of-substatement 'pre) (point)))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5210 (func-entry (idlwave-what-function bos))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5211 (func (car func-entry))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5212 (func-class (nth 1 func-entry))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5213 (func-arrow (nth 2 func-entry))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5214 (func-point (or (nth 3 func-entry) 0))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5215 (func-level (or (nth 4 func-entry) 0))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5216 (pro-entry (idlwave-what-procedure bos))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5217 (pro (car pro-entry))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5218 (pro-class (nth 1 pro-entry))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5219 (pro-arrow (nth 2 pro-entry))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5220 (pro-point (or (nth 3 pro-entry) 0))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5221 (last-char (idlwave-last-valid-char))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5222 (case-fold-search t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5223 cw cw-mod cw-arrow cw-class cw-point)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5224 (if (< func-point pro-point) (setq func nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5225 (cond
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5226 ((string-match "\\`[ \t]*\\(pro\\|function\\)[ \t]+[a-zA-Z0-9_]*\\'"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5227 (buffer-substring bos (point)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5228 (setq cw 'class))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5229 ((string-match
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5230 "\\`[ \t]*\\([a-zA-Z][a-zA-Z0-9$_]*\\)?\\'"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5231 (buffer-substring (if (> pro-point 0) pro-point bos) (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5232 (setq cw 'procedure cw-class pro-class cw-point pro-point
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5233 cw-arrow pro-arrow))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5234 ((string-match "\\`[ \t]*\\(pro\\|function\\)\\>"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5235 (buffer-substring bos (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5236 nil)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5237 ((string-match "OBJ_NEW([ \t]*['\"]\\([a-zA-Z0-9$_]*\\)?\\'"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5238 (buffer-substring bos (point)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5239 (setq cw 'class))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5240 ((string-match "\\<inherits\\s-+\\([a-zA-Z0-9$_]*\\)?\\'"
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5241 (buffer-substring bos (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5242 (setq cw 'class))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5243 ((and func
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5244 (> func-point pro-point)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5245 (= func-level 1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5246 (memq last-char '(?\( ?,)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5247 (setq cw 'function-keyword cw-mod func cw-point func-point
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5248 cw-class func-class cw-arrow func-arrow))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5249 ((and pro (eq last-char ?,))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5250 (setq cw 'procedure-keyword cw-mod pro cw-point pro-point
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5251 cw-class pro-class cw-arrow pro-arrow))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5252 ; ((member last-char '(?\' ?\) ?\] ?!))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5253 ; ;; after these chars, a function makes no sense
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5254 ; ;; FIXME: I am sure there can be more in this list
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5255 ; ;; FIXME: Do we want to do this at all?
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5256 ; nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5257 ;; Everywhere else we try a function.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5258 (t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5259 (setq cw 'function)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5260 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5261 (if (re-search-backward "->[ \t]*\\(\\([$a-zA-Z0-9_]+\\)::\\)?[$a-zA-Z0-9_]*\\=" bos t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5262 (setq cw-arrow (match-beginning 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5263 cw-class (if (match-end 2)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5264 (idlwave-sintern-class (match-string 2))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5265 t))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5266 (list (list pro pro-point pro-class pro-arrow)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5267 (list func func-point func-class func-arrow)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5268 cw
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5269 (list cw-mod cw-point cw-class cw-arrow)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5270 last-char)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5271
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5272 (defun idlwave-this-word (&optional class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5273 ;; Grab the word around point. CLASS is for the `skip-chars=...' functions
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5274 (setq class (or class "a-zA-Z0-9$_"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5275 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5276 (buffer-substring-no-properties
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5277 (progn (skip-chars-backward class) (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5278 (progn (skip-chars-forward class) (point)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5279
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5280 (defun idlwave-what-function (&optional bound)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5281 ;; Find out if point is within the argument list of a function.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5282 ;; The return value is ("function-name" (point) level).
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5283 ;; Level is 1 on the to level parenthesis, higher further down.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5284
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5285 ;; If the optional BOUND is an integer, bound backwards directed
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5286 ;; searches to this point.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5287
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5288 (catch 'exit
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5289 (let (pos
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5290 func-point
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5291 (cnt 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5292 func arrow-start class)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5293 (idlwave-with-special-syntax
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5294 (save-restriction
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5295 (save-excursion
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5296 (narrow-to-region (max 1 (or bound 0)) (point-max))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5297 ;; move back out of the current parenthesis
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5298 (while (condition-case nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5299 (progn (up-list -1) t)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5300 (error nil))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5301 (setq pos (point))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5302 (incf cnt)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5303 (when (and (= (following-char) ?\()
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5304 (re-search-backward
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5305 "\\(::\\|\\<\\)\\([a-zA-Z][a-zA-Z0-9$_]*\\)[ \t]*\\="
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5306 bound t))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5307 (setq func (match-string 2)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5308 func-point (goto-char (match-beginning 2))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5309 pos func-point)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5310 (if (re-search-backward
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5311 "->[ \t]*\\(\\([a-zA-Z][a-zA-Z0-9$_]*\\)::\\)?\\=" bound t)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5312 (setq arrow-start (match-beginning 0)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5313 class (or (match-string 2) t)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5314 (throw
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5315 'exit
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5316 (list
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5317 (idlwave-sintern-routine-or-method func class)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5318 (idlwave-sintern-class class)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5319 arrow-start func-point cnt)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5320 (goto-char pos))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5321 (throw 'exit nil)))))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5322
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5323 (defun idlwave-what-procedure (&optional bound)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5324 ;; Find out if point is within the argument list of a procedure.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5325 ;; The return value is ("procedure-name" class arrow-pos (point)).
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5326
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5327 ;; If the optional BOUND is an integer, bound backwards directed
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5328 ;; searches to this point.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5329 (let ((pos (point)) pro-point
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5330 pro class arrow-start string)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5331 (save-excursion
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5332 ;;(idlwave-beginning-of-statement)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5333 (idlwave-start-of-substatement 'pre)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5334 (setq string (buffer-substring (point) pos))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5335 (if (string-match
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5336 "\\`[ \t]*\\([a-zA-Z][a-zA-Z0-9$_]*\\)[ \t]*\\(,\\|\\'\\)" string)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5337 (setq pro (match-string 1 string)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5338 pro-point (+ (point) (match-beginning 1)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5339 (if (and (idlwave-skip-object)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5340 (setq string (buffer-substring (point) pos))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5341 (string-match
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5342 "\\`[ \t]*\\(->\\)[ \t]*\\(\\([a-zA-Z][a-zA-Z0-9$_]*\\)::\\)?\\([a-zA-Z][a-zA-Z0-9$_]*\\)?[ \t]*\\(,\\|\\'\\)" string))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5343 (setq pro (if (match-beginning 4)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5344 (match-string 4 string))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5345 pro-point (if (match-beginning 4)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5346 (+ (point) (match-beginning 4))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5347 pos)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5348 arrow-start (+ (point) (match-beginning 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5349 class (or (match-string 3 string) t)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5350 (list (idlwave-sintern-routine-or-method pro class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5351 (idlwave-sintern-class class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5352 arrow-start
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5353 pro-point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5354
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5355 (defun idlwave-skip-object ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5356 ;; If there is an object at point, move over it and return t.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5357 (let ((pos (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5358 (if (catch 'exit
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5359 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5360 (skip-chars-forward " ") ; white space
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5361 (skip-chars-forward "*") ; de-reference
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5362 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5363 ((looking-at idlwave-identifier)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5364 (goto-char (match-end 0)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5365 ((eq (following-char) ?\()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5366 nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5367 (t (throw 'exit nil)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5368 (catch 'endwhile
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5369 (while t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5370 (cond ((eq (following-char) ?.)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5371 (forward-char 1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5372 (if (not (looking-at idlwave-identifier))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5373 (throw 'exit nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5374 (goto-char (match-end 0)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5375 ((memq (following-char) '(?\( ?\[))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5376 (condition-case nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5377 (forward-list 1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5378 (error (throw 'exit nil))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5379 (t (throw 'endwhile t)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5380 (if (looking-at "[ \t]*->")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5381 (throw 'exit (setq pos (match-beginning 0)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5382 (throw 'exit nil))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5383 (goto-char pos)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5384 nil)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5385
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5386
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5387 (defun idlwave-last-valid-char ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5388 "Return the last character before point which is not white or a comment
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5389 and also not part of the current identifier. Since we do this in
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5390 order to identify places where keywords are, we consider the initial
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5391 `/' of a keyword as part of the identifier.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5392 This function is not general, can only be used for completion stuff."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5393 (catch 'exit
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5394 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5395 ;; skip the current identifier
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5396 (skip-chars-backward "a-zA-Z0-9_$")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5397 ;; also skip a leading slash which might be belong to the keyword
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5398 (if (eq (preceding-char) ?/)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5399 (backward-char 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5400 ;; FIXME: does not check if this is a valid identifier
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5401 (while t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5402 (skip-chars-backward " \t")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5403 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5404 ((memq (preceding-char) '(?\; ?\$)) (throw 'exit nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5405 ((eq (preceding-char) ?\n)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5406 (beginning-of-line 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5407 (if (looking-at "\\([^;]\\)*\\$[ \t]*\\(;.*\\)?\n")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5408 ;; continuation line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5409 (goto-char (match-end 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5410 (throw 'exit nil)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5411 (t (throw 'exit (preceding-char))))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5412
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5413 (defvar idlwave-complete-after-success-form nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5414 "A form to evaluate after successful completion.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5415 (defvar idlwave-complete-after-success-form-force nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5416 "A form to evaluate after completion selection in *Completions* buffer.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5417 (defconst idlwave-completion-mark (make-marker)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5418 "A mark pointing to the beginning of the completion string.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5419
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5420 (defun idlwave-complete-in-buffer (type stype list selector prompt isa
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5421 &optional prepare-display-function)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5422 "Perform TYPE completion of word before point against LIST.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5423 SELECTOR is the PREDICATE argument for the completion function.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5424 Show PROMPT in echo area. TYPE is one of 'function, 'procedure or 'keyword."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5425 (let* ((completion-ignore-case t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5426 beg (end (point)) slash part spart completion all-completions
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5427 dpart dcompletion)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5428
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5429 (unless list
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5430 (error (concat prompt ": No completions available")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5431
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5432 ;; What is already in the buffer?
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5433 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5434 (skip-chars-backward "a-zA-Z0-9_$")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5435 (setq slash (eq (preceding-char) ?/)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5436 beg (point)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5437 idlwave-complete-after-success-form
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5438 (list 'idlwave-after-successful-completion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5439 (list 'quote type) slash beg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5440 idlwave-complete-after-success-form-force
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5441 (list 'idlwave-after-successful-completion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5442 (list 'quote type) slash (list 'quote 'force))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5443
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5444 ;; Try a completion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5445 (setq part (buffer-substring beg end)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5446 dpart (downcase part)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5447 spart (idlwave-sintern stype part)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5448 completion (try-completion part list selector)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5449 dcompletion (if (stringp completion) (downcase completion)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5450 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5451 ((null completion)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5452 ;; nothing available.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5453 (error "Can't find %s completion for \"%s\"" isa part))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5454 ((and (not (equal dpart dcompletion))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5455 (not (eq t completion)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5456 ;; We can add something
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5457 (delete-region beg end)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5458 (if (and (string= part dpart)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5459 (or (not (string= part ""))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5460 idlwave-complete-empty-string-as-lower-case)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5461 (not idlwave-completion-force-default-case))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5462 (insert dcompletion)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5463 (insert completion))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5464 (if (eq t (try-completion completion list selector))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5465 ;; Now this is a unique match
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5466 (idlwave-after-successful-completion type slash beg))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5467 t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5468 ((or (eq completion t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5469 (and (equal dpart dcompletion)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5470 (= 1 (length (setq all-completions
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5471 (idlwave-uniquify
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5472 (all-completions part list selector)))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5473 ;; This is already complete
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5474 (idlwave-after-successful-completion type slash beg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5475 (message "%s is already the complete %s" part isa)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5476 nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5477 (t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5478 ;; We cannot add something - offer a list.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5479 (message "Making completion list...")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5480 (let* ((list all-completions)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5481 ;; "complete" means, this is already a valid completion
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5482 (complete (memq spart all-completions))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5483 (completion-highlight-first-word-only t) ; XEmacs
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5484 (completion-fixup-function ; Emacs
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5485 (lambda () (and (eq (preceding-char) ?>)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5486 (re-search-backward " <" beg t)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5487 (setq list (sort list (lambda (a b)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5488 (string< (downcase a) (downcase b)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5489 (if prepare-display-function
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5490 (setq list (funcall prepare-display-function list)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5491 (if (and (string= part dpart)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5492 (or (not (string= part ""))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5493 idlwave-complete-empty-string-as-lower-case)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5494 (not idlwave-completion-force-default-case))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5495 (setq list (mapcar (lambda (x)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5496 (if (listp x)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5497 (setcar x (downcase (car x)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5498 (setq x (downcase x)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5499 x)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5500 list)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5501 (idlwave-display-completion-list list prompt beg complete))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5502 t))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5503
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5504 (defun idlwave-complete-class ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5505 "Complete a class at point."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5506 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5507 ;; Call `idlwave-routines' to make sure the class list will be available
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5508 (idlwave-routines)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5509 ;; Check for the special case of completing empty string after pro/function
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5510 (if (let ((case-fold-search t))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5511 (save-excursion
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5512 (and
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5513 (re-search-backward "\\<\\(pro\\|function\\)[ \t]+\\="
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5514 (- (point) 15) t)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5515 (goto-char (point-min))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5516 (re-search-forward
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5517 "^[ \t]*\\(pro\\|function\\)[ \t]+\\([a-zA-Z0-9_]+::\\)" nil t))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5518 ;; Yank the full class specification
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5519 (insert (match-string 2))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5520 ;; Do the completion
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5521 (idlwave-complete-in-buffer 'class 'class (idlwave-class-alist) nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5522 "Select a class" "class")))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5523
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5524 (defun idlwave-attach-classes (list is-kwd show-classes)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5525 ;; Attach the proper class list to a LIST of completion items.
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5526 ;; IS-KWD, when non-nil, shows its keywords - otherwise its methods
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5527 ;; SHOW-CLASSES is the value of `idlwave-completion-show-classes'.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5528 (catch 'exit
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5529 (if (or (null show-classes) ; don't want to see classes
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5530 (null class-selector) ; not a method call
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5531 (and (stringp class-selector) ; the class is already known
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5532 (not super-classes))) ; no possibilities for inheritance
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5533 ;; In these cases, we do not have to do anything
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5534 (throw 'exit list))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5535
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5536 (let* ((do-prop (and (>= show-classes 0)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5537 (>= emacs-major-version 21)))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5538 (do-buf (not (= show-classes 0)))
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5539 ; (do-dots (featurep 'xemacs))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5540 (do-dots t)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5541 (inherit (if super-classes
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5542 (cons class-selector super-classes)))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5543 (max (abs show-classes))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5544 (lmax (if do-dots (apply 'max (mapcar 'length list))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5545 classes nclasses class-info space)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5546 (mapcar
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5547 (lambda (x)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5548 ;; get the classes
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5549 (setq classes
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5550 (if is-kwd
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5551 (idlwave-all-method-keyword-classes
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5552 method-selector x type-selector)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5553 (idlwave-all-method-classes x type-selector)))
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5554 (if inherit
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5555 (setq classes
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5556 (delq nil
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5557 (mapcar (lambda (x) (if (memq x inherit) x nil))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5558 classes))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5559 (setq nclasses (length classes))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5560 ;; Make the separator between item and class-info
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5561 (if do-dots
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5562 (setq space (concat " " (make-string (- lmax (length x)) ?.)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5563 (setq space " "))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5564 (if do-buf
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5565 ;; We do want info in the buffer
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5566 (if (<= nclasses max)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5567 (setq class-info (concat
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5568 space
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5569 "<" (mapconcat 'identity classes ",") ">"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5570 (setq class-info (format "%s<%d classes>" space nclasses)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5571 (setq class-info nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5572 (when do-prop
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5573 ;; We do want properties
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5574 (setq x (copy-sequence x))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5575 (put-text-property 0 (length x)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5576 'help-echo (mapconcat 'identity classes " ")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5577 x))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5578 (if class-info
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5579 (list x class-info)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5580 x))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5581 list))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5582
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5583 (defun idlwave-attach-method-classes (list)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5584 ;; Call idlwave-attach-classes with method parameters
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5585 (idlwave-attach-classes list nil idlwave-completion-show-classes))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5586 (defun idlwave-attach-keyword-classes (list)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5587 ;; Call idlwave-attach-classes with keyword parameters
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5588 (idlwave-attach-classes list t idlwave-completion-show-classes))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5589
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5590 ;;----------------------------------------------------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5591 ;;----------------------------------------------------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5592 ;;----------------------------------------------------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5593 ;;----------------------------------------------------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5594 ;;----------------------------------------------------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5595
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5596 (defvar idlwave-completion-setup-hook nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5597
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5598 (defun idlwave-scroll-completions (&optional message)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5599 "Scroll the completion window on this frame."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5600 (let ((cwin (get-buffer-window "*Completions*" 'visible))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5601 (win (selected-window)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5602 (unwind-protect
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5603 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5604 (select-window cwin)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5605 (condition-case nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5606 (scroll-up)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5607 (error (if (and (listp last-command)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5608 (nth 2 last-command))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5609 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5610 (select-window win)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5611 (eval idlwave-complete-after-success-form))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5612 (set-window-start cwin (point-min)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5613 (and message (message message)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5614 (select-window win))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5615
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5616 (defun idlwave-display-completion-list (list &optional message beg complete)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5617 "Display the completions in LIST in the completions buffer and echo MESSAGE."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5618 (unless (and (get-buffer-window "*Completions*")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5619 (idlwave-local-value 'idlwave-completion-p "*Completions*"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5620 (move-marker idlwave-completion-mark beg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5621 (setq idlwave-before-completion-wconf (current-window-configuration)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5622
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5623 (if (featurep 'xemacs)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5624 (idlwave-display-completion-list-xemacs
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5625 list)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5626 (idlwave-display-completion-list-emacs list))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5627
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5628 ;; Store a special value in `this-command'. When `idlwave-complete'
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5629 ;; finds this in `last-command', it will scroll the *Completions* buffer.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5630 (setq this-command (list 'idlwave-display-completion-list message complete))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5631
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5632 ;; Mark the completions buffer as created by cib
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5633 (idlwave-set-local 'idlwave-completion-p t "*Completions*")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5634
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5635 ;; Fontify the classes
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5636 (if (and idlwave-completion-fontify-classes
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5637 (consp (car list)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5638 (idlwave-completion-fontify-classes))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5639
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5640 ;; Run the hook
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5641 (run-hooks 'idlwave-completion-setup-hook)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5642
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5643 ;; Display the message
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5644 (message (or message "Making completion list...done")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5645
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5646 (defun idlwave-choose (function &rest args)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5647 "Call FUNCTION as a completion chooser and pass ARGS to it."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5648 (let ((completion-ignore-case t)) ; install correct value
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5649 (apply function args))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5650 (if (and (eq major-mode 'idlwave-shell-mode)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5651 (boundp 'font-lock-mode)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5652 (not font-lock-mode))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5653 ;; Remove the fontification of the word before point
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5654 (let ((beg (save-excursion
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5655 (skip-chars-backward "a-zA-Z0-9_")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5656 (point))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5657 (remove-text-properties beg (point) '(face nil))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5658 (eval idlwave-complete-after-success-form-force))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5659
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5660 (defun idlwave-restore-wconf-after-completion ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5661 "Restore the old (before completion) window configuration."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5662 (and idlwave-completion-restore-window-configuration
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5663 idlwave-before-completion-wconf
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5664 (set-window-configuration idlwave-before-completion-wconf)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5665
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5666 (defun idlwave-set-local (var value &optional buffer)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5667 "Set the buffer-local value of VAR in BUFFER to VALUE."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5668 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5669 (set-buffer (or buffer (current-buffer)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5670 (set (make-local-variable var) value)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5671
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5672 (defun idlwave-local-value (var &optional buffer)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5673 "Return the value of VAR in BUFFER, but only if VAR is local to BUFFER."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5674 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5675 (set-buffer (or buffer (current-buffer)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5676 (and (local-variable-p var (current-buffer))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5677 (symbol-value var))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5678
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5679 ;; In XEmacs, we can use :activate-callback directly to advice the
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5680 ;; choose functions. We use the private keymap only for the online
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5681 ;; help feature.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5682
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5683 (defvar idlwave-completion-map nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5684 "Keymap for completion-list-mode with idlwave-complete.")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5685
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5686 (defun idlwave-display-completion-list-xemacs (list &rest cl-args)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5687 (with-output-to-temp-buffer "*Completions*"
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5688 (apply 'display-completion-list list
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5689 ':activate-callback 'idlwave-default-choose-completion
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5690 cl-args))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5691 (save-excursion
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5692 (set-buffer "*Completions*")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5693 (use-local-map
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5694 (or idlwave-completion-map
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5695 (setq idlwave-completion-map
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5696 (idlwave-make-modified-completion-map-xemacs
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5697 (current-local-map)))))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5698
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5699 (defun idlwave-default-choose-completion (&rest args)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5700 "Execute `default-choose-completion' and then restore the win-conf."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5701 (apply 'idlwave-choose 'default-choose-completion args))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5702
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5703 (defun idlwave-make-modified-completion-map-xemacs (old-map)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5704 "Replace `choose-completion' and `mouse-choose-completion' in OLD-MAP."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5705 (let ((new-map (copy-keymap old-map)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5706 (define-key new-map [button3up] 'idlwave-mouse-completion-help)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5707 (define-key new-map [button3] (lambda ()
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5708 (interactive)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5709 (setq this-command last-command)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5710 new-map))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5711
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5712 ;; In Emacs we also to replace choose keybindings in the completion
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5713 ;; map in order to install our wrappers.
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5714
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5715 (defun idlwave-display-completion-list-emacs (list)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5716 "Display completion list and install the choose wrappers."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5717 (with-output-to-temp-buffer "*Completions*"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5718 (display-completion-list list))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5719 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5720 (set-buffer "*Completions*")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5721 (use-local-map
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5722 (or idlwave-completion-map
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5723 (setq idlwave-completion-map
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5724 (idlwave-make-modified-completion-map-emacs
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5725 (current-local-map)))))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5726
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5727 (defun idlwave-make-modified-completion-map-emacs (old-map)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5728 "Replace `choose-completion' and `mouse-choose-completion' in OLD-MAP."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5729 (let ((new-map (copy-keymap old-map)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5730 (substitute-key-definition
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5731 'choose-completion 'idlwave-choose-completion new-map)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5732 (substitute-key-definition
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5733 'mouse-choose-completion 'idlwave-mouse-choose-completion new-map)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
5734 (define-key new-map [mouse-3] 'idlwave-mouse-completion-help)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5735 new-map))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5736
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5737 (defun idlwave-choose-completion (&rest args)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5738 "Choose the completion that point is in or next to."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5739 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5740 (apply 'idlwave-choose 'choose-completion args))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5741
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5742 (defun idlwave-mouse-choose-completion (&rest args)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5743 "Click on an alternative in the `*Completions*' buffer to choose it."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5744 (interactive "e")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5745 (apply 'idlwave-choose 'mouse-choose-completion args))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5746
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5747 ;;----------------------------------------------------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5748 ;;----------------------------------------------------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
5749
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5750 ;;; ------------------------------------------------------------------------
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5751 ;;; Sturucture parsing code, and code to manage class info
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5752
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5753 ;;
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5754 ;; - Go again over the documentation how to write a completion
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5755 ;; plugin. It is in self.el, but currently still very bad.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5756 ;; This could be in a separate file in the distribution, or
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5757 ;; in an appendix for the manual.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5758
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5759 (defun idlwave-struct-tags ()
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5760 "Return a list of all tags in the structure defined at point.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5761 Point is expected just before the opening `{' of the struct definition."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5762 (save-excursion
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5763 (let* ((borders (idlwave-struct-borders))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5764 (beg (car borders))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5765 (end (cdr borders))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5766 tags)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5767 (goto-char beg)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5768 (while (re-search-forward "[{,][ \t]*\\(\\$.*\n[ \t]*\\)?\\([a-zA-Z][a-zA-Z0-9_]*\\)[ \t]*:" end t)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5769 ;; Check if we are still on the top level of the structure.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5770 (if (and (condition-case nil (progn (up-list -1) t) (error nil))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5771 (= (point) beg))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5772 (push (match-string 2) tags))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5773 (goto-char (match-end 0)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5774 (nreverse tags))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5775
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5776 (defun idlwave-struct-inherits ()
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5777 "Return a list of all `inherits' names in the struct at point.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5778 Point is expected just before the opening `{' of the struct definition."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5779 (save-excursion
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5780 (let* ((borders (idlwave-struct-borders))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5781 (beg (car borders))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5782 (end (cdr borders))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5783 (case-fold-search t)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5784 names)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5785 (goto-char beg)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5786 (while (re-search-forward "[{,][ \t]*\\(\\$.*\n[ \t]*\\)?inherits[ \t]*\\(\\$.*\n[ \t]*\\)?\\([a-zA-Z][a-zA-Z0-9_]*\\)" end t)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5787 ;; Check if we are still on the top level of the structure.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5788 (if (and (condition-case nil (progn (up-list -1) t) (error nil))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5789 (= (point) beg))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5790 (push (match-string 3) names))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5791 (goto-char (match-end 0)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5792 (nreverse names))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5793
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5794
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5795 (defun idlwave-struct-borders ()
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5796 "Return the borders of the {...} after point as a cons cell."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5797 (let (beg)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5798 (save-excursion
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5799 (skip-chars-forward "^{")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5800 (setq beg (point))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5801 (condition-case nil (forward-list 1)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5802 (error (goto-char beg)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5803 (cons beg (point)))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5804
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5805 (defun idlwave-find-structure-definition (&optional var name bound)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5806 "Search forward for a structure definition.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5807 If VAR is non-nil, search for a structure assigned to variable VAR.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5808 If NAME is non-nil, search for a named structure NAME.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5809 If BOUND is an integer, limit the search.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5810 If BOUND is the symbol `all', we search first back and then forward
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5811 through the entire file."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5812 (let* ((ws "[ \t]*\\(\\$.*\n[ \t]*\\)?")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5813 (case-fold-search t)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5814 (lim (if (integerp bound) bound nil))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5815 (re (concat
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5816 (if var
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5817 (concat "\\<" (regexp-quote (downcase var)) "\\>" ws)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5818 "\\(\\)")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5819 "=" ws "\\({\\)"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5820 (if name (concat ws "\\<" (downcase name) "[^a-zA-Z0-9_$]") ""))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5821 (if (or (and (eq bound 'all)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5822 (re-search-backward re nil t))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5823 (re-search-forward re lim t))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5824 (goto-char (match-beginning 3)))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5825
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5826 (defvar idlwave-class-info nil)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5827 (defvar idlwave-system-class-info nil)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5828 (add-hook 'idlwave-update-rinfo-hook
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5829 (lambda () (setq idlwave-class-info nil)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5830 (add-hook 'idlwave-after-load-rinfo-hook
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5831 (lambda () (setq idlwave-class-info nil)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5832
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5833 (defun idlwave-class-info (class)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5834 (let (list entry)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5835 (unless idlwave-class-info
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5836 ;; Info is nil, put in the system stuff.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5837 (setq idlwave-class-info idlwave-system-class-info)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5838 (setq list idlwave-class-info)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5839 (while (setq entry (pop list))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5840 (idlwave-sintern-class-info entry)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5841 (setq class (idlwave-sintern-class class))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5842 (setq entry (assq class idlwave-class-info))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5843 (unless entry
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5844 (setq entry (idlwave-find-class-info class))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5845 (when entry
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5846 ;; Sintern and cache the info
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5847 (idlwave-sintern-class-info entry)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5848 (push entry idlwave-class-info)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5849 entry))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5850
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5851 (defun idlwave-sintern-class-info (entry)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5852 "Sintern the class names in a class-info entry."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5853 (let ((taglist (assq 'tags entry))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5854 (inherits (assq 'inherits entry)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5855 (setcar entry (idlwave-sintern-class (car entry) 'set))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5856 (if inherits
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5857 (setcdr inherits (mapcar (lambda (x) (idlwave-sintern-class x 'set))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5858 (cdr inherits))))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5859
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5860 (defun idlwave-find-class-info (class)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5861 "Find the __define procedure for a class structure and return info entry."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5862 (let* ((pro (concat (downcase class) "__define"))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5863 (class (idlwave-sintern-class class))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5864 (idlwave-auto-routine-info-updates nil)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5865 (file (cdr (nth 3 (idlwave-rinfo-assoc pro 'pro nil
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5866 (idlwave-routines)))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5867 buf)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5868 (if (or (not file)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5869 (not (file-regular-p
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5870 (setq file (idlwave-expand-lib-file-name file)))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5871 nil ; Cannot get info
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5872 (save-excursion
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5873 (if (setq buf (idlwave-get-buffer-visiting file))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5874 (set-buffer buf)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5875 (set-buffer (get-buffer-create " *IDLWAVE-tmp*"))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5876 (erase-buffer)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5877 (unless (eq major-mode 'idlwave-mode)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5878 (idlwave-mode))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5879 (insert-file-contents file))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5880 (save-excursion
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5881 (goto-char 1)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5882 (setq case-fold-search t)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5883 (when (and (re-search-forward
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5884 (concat "^[ \t]*pro[ \t]+" pro "\\>") nil t)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5885 ;; FIXME: should we limit to end of pro here?
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5886 (idlwave-find-structure-definition nil class))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5887 (list class
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5888 (cons 'tags (idlwave-struct-tags))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5889 (cons 'inherits (idlwave-struct-inherits)))))))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5890
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5891 (defun idlwave-class-tags (class)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5892 "Return the native tags in CLASS."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5893 (cdr (assq 'tags (idlwave-class-info class))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5894 (defun idlwave-class-inherits (class)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5895 "Return the direct superclasses of CLASS."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5896 (cdr (assq 'inherits (idlwave-class-info class))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5897
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5898 (defun idlwave-all-class-tags (class)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5899 "Return a list of native and inherited tags in CLASS."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5900 (apply 'append (mapcar 'idlwave-class-tags
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5901 (cons class (idlwave-all-class-inherits class)))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5902
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5903 (defun idlwave-all-class-inherits (class)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5904 "Return a list of all superclasses of CLASS (recursively expanded).
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5905 The list is cashed in `idlwave-class-info' for faster access."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5906 (cond
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5907 ((not idlwave-support-inheritance) nil)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5908 ((eq class nil) nil)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5909 ((eq class t) nil)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5910 (t
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5911 (let ((info (idlwave-class-info class))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5912 entry)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5913 (if (setq entry (assq 'all-inherits info))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5914 (cdr entry)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5915 (let ((inherits (idlwave-class-inherits class))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5916 rtn all-inherits cl)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5917 (while inherits
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5918 (setq cl (pop inherits)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5919 rtn (cons cl rtn)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5920 inherits (append inherits (idlwave-class-inherits cl))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5921 (setq all-inherits (nreverse rtn))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5922 (nconc info (list (cons 'all-inherits all-inherits)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5923 all-inherits))))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5924
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5925
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5926 ;;==========================================================================
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5927 ;;
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5928 ;; Completing class structure tags. This is a completion plugin.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5929 ;; The necessary taglist is constructed dynamically
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5930
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5931 (defvar idlwave-current-tags-class nil)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5932 (defvar idlwave-current-class-tags nil)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5933 (defvar idlwave-current-native-class-tags nil)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5934 (defvar idlwave-sint-classtags nil)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5935 (idlwave-new-sintern-type 'classtag)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5936 (add-to-list 'idlwave-complete-special 'idlwave-complete-class-structure-tag)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5937 (add-hook 'idlwave-update-rinfo-hook 'idlwave-classtag-reset)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5938
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5939 (defun idlwave-complete-class-structure-tag ()
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5940 "Complete a structure tag on a `self' argument in an object method."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5941 (interactive)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5942 (let ((pos (point))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5943 (case-fold-search t))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5944 (if (save-excursion
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5945 ;; Check if the context is right
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5946 (skip-chars-backward "[a-zA-Z0-9._$]")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5947 (and (< (point) (- pos 4))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5948 (looking-at "self\\.")))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5949 (let* ((class (nth 2 (idlwave-current-routine))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5950 ;; Check if we are in a class routine
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5951 (unless class
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 34708
diff changeset
5952 (error "Not in a method procedure or function"))
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5953 ;; Check if we need to update the "current" class
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5954 (if (not (equal class idlwave-current-tags-class))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5955 (idlwave-prepare-class-tag-completion class))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5956 (setq idlwave-completion-help-info nil)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5957 (let ((idlwave-cpl-bold idlwave-current-native-class-tags))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5958 (idlwave-complete-in-buffer
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5959 'classtag 'classtag
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5960 idlwave-current-class-tags nil
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5961 (format "Select a tag of class %s" class)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5962 "class tag"))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5963 t) ; return t to skip other completions
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5964 nil)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5965
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5966 (defun idlwave-classtag-reset ()
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5967 (setq idlwave-current-tags-class nil))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5968
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5969 (defun idlwave-prepare-class-tag-completion (class)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5970 "Find and parse the necessary class definitions for class structure tags."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5971 (setq idlwave-sint-classtags nil)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5972 (setq idlwave-current-tags-class class)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5973 (setq idlwave-current-class-tags
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5974 (mapcar (lambda (x)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5975 (list (idlwave-sintern-classtag x 'set)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5976 (idlwave-all-class-tags class)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5977 (setq idlwave-current-native-class-tags
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5978 (mapcar 'downcase (idlwave-class-tags class))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5979
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5980 ;===========================================================================
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5981 ;;
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5982 ;; Completing system variables and their structure fields
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5983 ;; This is also a plugin. It is a bit bigger since we support loading
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5984 ;; current system variables from the shell and highlighting in the
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5985 ;; completions buffer.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5986
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5987 (defvar idlwave-sint-sysvars nil)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5988 (defvar idlwave-sint-sysvartags nil)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5989 (idlwave-new-sintern-type 'sysvar)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5990 (idlwave-new-sintern-type 'sysvartag)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5991 (add-to-list 'idlwave-complete-special 'idlwave-complete-sysvar-or-tag)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5992 (add-hook 'idlwave-update-rinfo-hook 'idlwave-sysvars-reset)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5993 (add-hook 'idlwave-after-load-rinfo-hook 'idlwave-remember-builtin-sysvars)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5994 (add-hook 'idlwave-after-load-rinfo-hook 'idlwave-sintern-sysvar-alist)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5995
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5996 (defvar idlwave-system-variables-alist nil
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5997 "Alist of system variables and the associated structure tags.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5998 Gets set in `idlw-rinfo.el'.")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
5999 (defvar idlwave-builtin-system-variables nil)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6000
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6001 (defun idlwave-complete-sysvar-or-tag ()
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6002 "Complete a system variable."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6003 (interactive)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6004 (let ((pos (point))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6005 (case-fold-search t))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6006 (cond ((save-excursion
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6007 ;; Check if the context is right for system variable
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6008 (skip-chars-backward "[a-zA-Z0-9_$]")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6009 (equal (char-before) ?!))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6010 (setq idlwave-completion-help-info '(idlwave-complete-sysvar-help))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6011 (idlwave-complete-in-buffer 'sysvar 'sysvar
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6012 idlwave-system-variables-alist nil
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6013 "Select a system variable"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6014 "system variable")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6015 t) ; return t to skip other completions
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6016 ((save-excursion
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6017 ;; Check if the context is right for sysvar tag
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6018 (skip-chars-backward "[a-zA-Z0-9_$.]")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6019 (and (equal (char-before) ?!)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6020 (looking-at "\\([a-zA-Z][a-zA-Z0-9_$]*\\)\\.")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6021 (<= (match-end 0) pos)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6022 ;; Complete a system variable tag
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6023 (let* ((var (idlwave-sintern-sysvar (match-string 1)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6024 (entry (assq var idlwave-system-variables-alist))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6025 (tags (cdr entry)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6026 (or entry (error "!%s is not know to be a system variable" var))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6027 (or tags (error "System variable !%s is not a structure" var))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6028 (setq idlwave-completion-help-info
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6029 (list 'idlwave-complete-sysvar-help var))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6030 (idlwave-complete-in-buffer 'sysvartag 'sysvartag
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6031 tags nil
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6032 "Select a system variable tag"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6033 "system variable tag")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6034 t)) ; return t to skip other completions
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6035 (t nil))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6036
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6037 (defvar name)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6038 (defvar kwd)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6039 (defun idlwave-complete-sysvar-help (mode word)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6040 (cond
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6041 ((eq mode 'test)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6042 (or (and (eq nil (nth 1 idlwave-completion-help-info))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6043 (member (downcase word) idlwave-builtin-system-variables))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6044 (and (stringp (nth 1 idlwave-completion-help-info))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6045 (member (downcase (nth 1 idlwave-completion-help-info))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6046 idlwave-builtin-system-variables))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6047 ((eq mode 'set)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6048 (setq name "system variables"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6049 kwd (concat "!"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6050 (if (stringp (nth 1 idlwave-completion-help-info))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6051 (nth 1 idlwave-completion-help-info)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6052 word))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6053 (t (error "This should not happen"))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6054
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6055
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6056 (defun idlwave-sysvars-reset ()
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6057 (if (and (fboundp 'idlwave-shell-is-running)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6058 (idlwave-shell-is-running))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6059 (idlwave-shell-send-command "idlwave_get_sysvars"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6060 'idlwave-process-sysvars 'hide)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6061
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6062 (defun idlwave-process-sysvars ()
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6063 (idlwave-shell-filter-sysvars)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6064 (setq idlwave-sint-sysvars nil
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6065 idlwave-sint-sysvartags nil)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6066 (idlwave-sintern-sysvar-alist))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6067
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6068 (defun idlwave-remember-builtin-sysvars ()
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6069 (setq idlwave-builtin-system-variables
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6070 (mapcar 'downcase
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6071 (mapcar 'car idlwave-system-variables-alist))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6072
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6073 (defun idlwave-sintern-sysvar-alist ()
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6074 (let ((list idlwave-system-variables-alist) entry)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6075 (while (setq entry (pop list))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6076 (setcar entry (idlwave-sintern-sysvar (car entry) 'set))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6077 (setcdr entry (mapcar (lambda (x)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6078 (list (idlwave-sintern-sysvartag (car x) 'set)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6079 (cdr entry))))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6080
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6081 (defvar idlwave-shell-command-output)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6082 (defun idlwave-shell-filter-sysvars ()
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6083 "Get the system variables and structure tags."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6084 (let ((text idlwave-shell-command-output)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6085 (start 0)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6086 (old idlwave-system-variables-alist)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6087 var tags type name class)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6088 (setq idlwave-system-variables-alist nil)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6089 (while (string-match "^IDLWAVE-SYSVAR: !\\([a-zA-Z0-9_$]+\\)\\( \\(.*\\)\\)?"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6090 text start)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6091 (setq start (match-end 0)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6092 var (match-string 1 text)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6093 tags (if (match-end 3) (idlwave-split-string (match-string 3 text))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6094 (setq idlwave-system-variables-alist
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6095 (cons (cons var (mapcar 'list tags))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6096 idlwave-system-variables-alist)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6097 ;; Keep the old value if query was not successful
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6098 (setq idlwave-system-variables-alist
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6099 (or idlwave-system-variables-alist old))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6100
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6101 (defun idlwave-completion-fontify-classes ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6102 "Goto the *Completions* buffer and fontify the class info."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6103 (when (featurep 'font-lock)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6104 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6105 (set-buffer "*Completions*")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6106 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6107 (goto-char (point-min))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6108 (while (re-search-forward "\\.*<[^>]+>" nil t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6109 (put-text-property (match-beginning 0) (match-end 0)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6110 'face 'font-lock-string-face))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6111
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6112 (defun idlwave-uniquify (list)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6113 (let (nlist)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6114 (loop for x in list do
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6115 (add-to-list 'nlist x))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6116 nlist))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6117
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6118 (defun idlwave-after-successful-completion (type slash &optional verify)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6119 "Add `=' or `(' after successful completion of keyword and function.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6120 Restore the pre-completion window configuration if possible."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6121 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6122 ((eq type 'procedure)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6123 nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6124 ((eq type 'function)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6125 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6126 ((equal idlwave-function-completion-adds-paren nil) nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6127 ((or (equal idlwave-function-completion-adds-paren t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6128 (equal idlwave-function-completion-adds-paren 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6129 (insert "("))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6130 ((equal idlwave-function-completion-adds-paren 2)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6131 (insert "()")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6132 (backward-char 1))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6133 (t nil)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6134 ((eq type 'keyword)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6135 (if (and idlwave-keyword-completion-adds-equal
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6136 (not slash))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6137 (progn (insert "=") t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6138 nil)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6139
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6140 ;; Restore the pre-completion window configuration if this is safe.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6141
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6142 (if (or (eq verify 'force) ; force
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6143 (and
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6144 (get-buffer-window "*Completions*") ; visible
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6145 (idlwave-local-value 'idlwave-completion-p
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6146 "*Completions*") ; cib-buffer
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6147 (eq (marker-buffer idlwave-completion-mark)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6148 (current-buffer)) ; buffer OK
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6149 (equal (marker-position idlwave-completion-mark)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6150 verify))) ; pos OK
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6151 (idlwave-restore-wconf-after-completion))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6152 (move-marker idlwave-completion-mark nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6153 (setq idlwave-before-completion-wconf nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6154
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6155 (defun idlwave-mouse-context-help (ev &optional arg)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6156 "Call `idlwave-context-help' on the clicked location."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6157 (interactive "eP")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6158 (mouse-set-point ev)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6159 (idlwave-context-help arg))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6160
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6161 (defvar idlwave-last-context-help-pos nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6162 (defun idlwave-context-help (&optional arg)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6163 "Display IDL Online Help on context.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6164 If point is on a keyword, help for that keyword will be shown.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6165 If point is on a routine name or in the argument list of a routine,
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6166 help for that routine will be displayed.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6167 Works for system routines and keywords only."
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6168 (interactive "P")
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6169 (idlwave-require-online-help)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6170 (idlwave-do-context-help arg))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6171
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6172 (defun idlwave-mouse-completion-help (ev)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6173 "Display online help about the completion at point."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6174 (interactive "eP")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6175 (idlwave-require-online-help)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6176 ;; Restore last-command for next command, to make scrolling of completions
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6177 ;; work.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6178 (setq this-command last-command)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6179 (idlwave-do-mouse-completion-help ev))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6180
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6181
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6182 (defvar idlwave-help-is-loaded nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6183 "Is online help avaiable?")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6184 ;; The following variables will be defined by `idlw-help.el'.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6185 (defvar idlwave-help-frame-width nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6186 (defvar idlwave-help-file nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6187 (defvar idlwave-help-topics nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6188
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6189 (defun idlwave-help-directory ()
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6190 "Return the help directory, or nil if that is not known."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6191 (or (and (stringp idlwave-help-directory)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6192 (> (length idlwave-help-directory) 0)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6193 idlwave-help-directory)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6194 (getenv "IDLWAVE_HELP_DIRECTORY")))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6195
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6196 (defun idlwave-require-online-help ()
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6197 (if idlwave-help-is-loaded
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6198 t ;; everything is OK.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6199 (let* ((dir (or (idlwave-help-directory)
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 34708
diff changeset
6200 (error "Online Help is not installed (idlwave-help-directory is unknown)")))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6201 (lfile1 (expand-file-name "idlw-help.elc" dir))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6202 (lfile2 (expand-file-name "idlw-help.el" dir))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6203 (hfile (expand-file-name "idlw-help.txt" dir)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6204 (if (or (and (file-regular-p lfile1) (load-file lfile1))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6205 (and (file-regular-p lfile2) (load-file lfile2)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6206 (progn
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6207 (if (and idlwave-help-frame-parameters
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6208 (not (assoc 'width idlwave-help-frame-parameters)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6209 (push (cons 'width idlwave-help-frame-width)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6210 idlwave-help-frame-parameters))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6211 (or idlwave-help-topics
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6212 (error "File `%s' in help dir `%s' does not define `idlwave-help-topics'"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6213 "idlw-help.el" dir)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6214 (error "No such file `%s' in help dir `%s'" "idlw-help.el" dir))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6215 (if (file-regular-p hfile)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6216 (setq idlwave-help-is-loaded t
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6217 idlwave-help-file hfile)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6218 (error "No such file `%s' in dir `%s'" "idlw-help.txt" dir)))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6219
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6220 (defun idlwave-routine-info (&optional arg external)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6221 "Display a routines calling sequence and list of keywords.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6222 When point is on the name a function or procedure, or in the argument
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6223 list of a function or procedure, this command displays a help buffer
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6224 with the information. When called with prefix arg, enforce class
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6225 query.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6226
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6227 When point is on an object operator `->', display the class stored in
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6228 this arrow, if any (see `idlwave-store-inquired-class'). With a
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6229 prefix arg, the class property is cleared out."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6230
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6231 (interactive "P")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6232 (idlwave-routines)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6233 (if (string-match "->" (buffer-substring
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6234 (max (point-min) (1- (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6235 (min (+ 2 (point)) (point-max))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6236 ;; Cursor is on an arrow
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6237 (if (get-text-property (point) 'idlwave-class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6238 ;; arrow has class property
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6239 (if arg
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6240 ;; Remove property
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6241 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6242 (backward-char 1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6243 (when (looking-at ".?\\(->\\)")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6244 (remove-text-properties (match-beginning 1) (match-end 1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6245 '(idlwave-class nil face nil))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6246 (message "Class property removed from arrow")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6247 ;; Echo class property
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6248 (message "Arrow has text property identifying object to be class %s"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6249 (get-text-property (point) 'idlwave-class)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6250 ;; No property found
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6251 (message "Arrow has no class text property"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6252
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6253 ;; Not on an arrow...
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6254 (let* ((idlwave-query-class nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6255 (idlwave-force-class-query (equal arg '(4)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6256 (module (idlwave-what-module)))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6257 (if (car module)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6258 (apply 'idlwave-display-calling-sequence
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6259 (idlwave-fix-module-if-obj_new module))
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 34708
diff changeset
6260 (error "Don't know which calling sequence to show")))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6261
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6262 (defun idlwave-resolve (&optional arg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6263 "Call RESOLVE on the module name at point.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6264 Like `idlwave-routine-info', this looks for a routine call at point.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6265 After confirmation in the minibuffer, it will use the shell to issue
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6266 a RESOLVE call for this routine, to attempt to make it defined and its
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6267 routine info available for IDLWAVE. If the routine is a method call,
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6268 both `class__method' and `class__define' will be tried.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6269 With ARG, enforce query for the class of object methods."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6270 (interactive "P")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6271 (let* ((idlwave-query-class nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6272 (idlwave-force-class-query (equal arg '(4)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6273 (module (idlwave-what-module))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6274 (name (idlwave-make-full-name (nth 2 module) (car module)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6275 (type (if (eq (nth 1 module) 'pro) "pro" "function"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6276 (resolve (read-string "Resolve: " (format "%s %s" type name)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6277 (kwd "")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6278 class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6279 (if (string-match "\\(pro\\|function\\)[ \t]+\\(\\(.*\\)::\\)?\\(.*\\)"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6280 resolve)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6281 (setq type (match-string 1 resolve)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6282 class (if (match-beginning 2)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6283 (match-string 3 resolve)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6284 nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6285 name (match-string 4 resolve)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6286 (if (string= (downcase type) "function")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6287 (setq kwd ",/is_function"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6288
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6289 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6290 ((null class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6291 (idlwave-shell-send-command
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6292 (format "resolve_routine,'%s'%s" (downcase name) kwd)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6293 'idlwave-update-routine-info
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6294 nil t))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6295 (t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6296 (idlwave-shell-send-command
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6297 (format "resolve_routine,'%s__define'%s" (downcase class) kwd)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6298 (list 'idlwave-shell-send-command
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6299 (format "resolve_routine,'%s__%s'%s"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6300 (downcase class) (downcase name) kwd)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6301 '(idlwave-update-routine-info)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6302 nil t))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6303
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6304 (defun idlwave-find-module (&optional arg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6305 "Find the source code of an IDL module.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6306 Works for modules for which IDLWAVE has routine info available.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6307 The function offers as default the module name `idlwave-routine-info' would
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6308 use. With ARG force class query for object methods."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6309 (interactive "P")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6310 (let* ((idlwave-query-class nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6311 (idlwave-force-class-query (equal arg '(4)))
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6312 (module (idlwave-fix-module-if-obj_new (idlwave-what-module)))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6313 (default (concat (idlwave-make-full-name (nth 2 module) (car module))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6314 (if (eq (nth 1 module) 'pro) "<p>" "<f>")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6315 (list
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6316 (delq nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6317 (mapcar (lambda (x)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6318 (if (eq 'system (car-safe (nth 3 x)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6319 ;; Take out system routines with no source.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6320 nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6321 (cons
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6322 (concat (idlwave-make-full-name (nth 2 x) (car x))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6323 (if (eq (nth 1 x) 'pro) "<p>" "<f>"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6324 (cdr x))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6325 (idlwave-routines))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6326 (name (idlwave-completing-read
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6327 (format "Module (Default %s): "
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6328 (if default default "none"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6329 list))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6330 type class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6331 (if (string-match "\\`\\s-*\\'" name)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6332 ;; Nothing, use the default.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6333 (setq name default))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6334 (if (string-match "<[fp]>" name)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6335 (setq type (substring name -2 -1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6336 name (substring name 0 -3)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6337 (if (string-match "\\(.*\\)::\\(.*\\)" name)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6338 (setq class (match-string 1 name)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6339 name (match-string 2 name)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6340 (setq name (idlwave-sintern-routine-or-method name class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6341 class (idlwave-sintern-class class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6342 type (cond ((equal type "f") 'fun)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6343 ((equal type "p") 'pro)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6344 (t t)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6345 (idlwave-do-find-module name type class)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6346
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6347 (defun idlwave-do-find-module (name type class &optional force-source)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6348 (let ((name1 (idlwave-make-full-name class name))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6349 source buf1 entry
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6350 (buf (current-buffer))
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6351 (pos (point))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6352 name2)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6353 (setq entry (idlwave-best-rinfo-assq name type class (idlwave-routines))
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6354 source (or force-source (nth 3 entry))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6355 name2 (if (nth 2 entry)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6356 (idlwave-make-full-name (nth 2 entry) name)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6357 name1))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6358 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6359 ((or (null name) (equal name ""))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6360 (error "Abort"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6361 ((null entry)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6362 (error "Nothing known about a module %s" name2))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6363 ((eq (car source) 'system)
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 34708
diff changeset
6364 (error "Source code for system routine %s is not available"
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6365 name2))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6366 ((equal (cdr source) "")
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 34708
diff changeset
6367 (error "Source code for routine %s is not available"
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6368 name2))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6369 ((memq (car source) '(buffer lib compiled))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6370 (setq buf1
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6371 (if (eq (car source) 'lib)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6372 (idlwave-find-file-noselect
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6373 (idlwave-expand-lib-file-name
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6374 (or (cdr source)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6375 (format "%s.pro" (downcase name)))) 'find)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6376 (idlwave-find-file-noselect (cdr source) 'find)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6377 (pop-to-buffer buf1 t)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6378 (goto-char (point-max))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6379 (let ((case-fold-search t))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6380 (if (re-search-backward
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6381 (concat "^[ \t]*\\<"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6382 (cond ((equal type "f") "function")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6383 ((equal type "p") "pro")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6384 (t "\\(pro\\|function\\)"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6385 "\\>[ \t]+"
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6386 (regexp-quote (downcase name2))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6387 "[^a-zA-Z0-9_$]")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6388 nil t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6389 (goto-char (match-beginning 0))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6390 (pop-to-buffer buf)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6391 (goto-char pos)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6392 (error "Could not find routine %s" name2)))))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6393
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6394 (defun idlwave-what-module ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6395 "Return a default module for stuff near point.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6396 Used by `idlwave-routine-info' and `idlwave-find-module'."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6397 (idlwave-routines)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6398 (if (let ((case-fold-search t))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6399 (save-excursion
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6400 (idlwave-beginning-of-statement)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6401 (looking-at "[ \t]*\\(pro\\|function\\)[ \t]+\\(\\([a-zA-Z0-9_$]+\\)::\\)?\\([a-zA-Z0-9$_]+\\)\\([, \t\n]\\|$\\)")))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6402 ;; This is a function or procedure definition statement
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6403 ;; We return the defined routine as module.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6404 (list
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6405 (idlwave-sintern-routine-or-method (match-string 4)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6406 (match-string 2))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6407 (if (equal (downcase (match-string 1)) "pro") 'pro 'fun)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6408 (idlwave-sintern-class (match-string 3)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6409
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6410 ;; Not a definition statement - analyze precise positon.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6411 (let* ((where (idlwave-where))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6412 (cw (nth 2 where))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6413 (pro (car (nth 0 where)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6414 (func (car (nth 1 where)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6415 (this-word (idlwave-this-word "a-zA-Z0-9$_"))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6416 (next-char (save-excursion (skip-chars-forward "a-zA-Z0-9$_")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6417 (following-char)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6418 )
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6419 (cond
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6420 ((and (eq cw 'procedure)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6421 (not (equal this-word "")))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6422 (setq this-word (idlwave-sintern-routine-or-method
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6423 this-word (nth 2 (nth 3 where))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6424 (list this-word 'pro
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6425 (idlwave-determine-class
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6426 (cons this-word (cdr (nth 3 where)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6427 'pro)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6428 ((and (eq cw 'function)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6429 (not (equal this-word ""))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6430 (or (eq next-char ?\() ; exclude arrays, vars.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6431 (looking-at "[a-zA-Z0-9_]*[ \t]*(")))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6432 (setq this-word (idlwave-sintern-routine-or-method
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6433 this-word (nth 2 (nth 3 where))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6434 (list this-word 'fun
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6435 (idlwave-determine-class
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6436 (cons this-word (cdr (nth 3 where)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6437 'fun)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6438 ((and (memq cw '(function-keyword procedure-keyword))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6439 (not (equal this-word ""))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6440 (eq next-char ?\()) ; A function!
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6441 (setq this-word (idlwave-sintern-routine this-word))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6442 (list this-word 'fun nil))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6443 (func
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6444 (list func 'fun (idlwave-determine-class (nth 1 where) 'fun)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6445 (pro
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6446 (list pro 'pro (idlwave-determine-class (nth 0 where) 'pro)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6447 (t nil)))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6448
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6449 (defun idlwave-what-module-find-class ()
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6450 "Call idlwave-what-module and find the inherited class if necessary."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6451 (let* ((module (idlwave-what-module))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6452 (class (nth 2 module))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6453 classes)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6454 (if (and (= (length module) 3)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6455 (stringp class))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6456 (list (car module)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6457 (nth 1 module)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6458 (apply 'idlwave-find-inherited-class module))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6459 module)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6460
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6461 (defun idlwave-find-inherited-class (name type class)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6462 "Find the class which defines TYPE NAME and is CLASS or inherited by CLASS."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6463 (let ((entry (idlwave-best-rinfo-assoc name type class (idlwave-routines))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6464 (if entry
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6465 (nth 2 entry)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6466 class)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6467
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6468 (defun idlwave-fix-module-if-obj_new (module)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6469 "Check if MODULE points to obj_new. If yes, and if the cursor is in the
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6470 keyword region, change to the appropriate Init method."
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6471 (let* ((name (car module))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6472 (pos (point))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6473 (case-fold-search t)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6474 string)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6475 (if (and (stringp name)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6476 (equal (downcase name) "obj_new")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6477 (save-excursion
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6478 (idlwave-beginning-of-statement)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6479 (setq string (buffer-substring (point) pos))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6480 (string-match "obj_new([^'\"]*['\"]\\([a-zA-Z0-9_]+\\)"
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6481 string)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6482 (let ((name "Init")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6483 (class (match-string 1 string)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6484 (setq module (list (idlwave-sintern-method "Init")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6485 'fun
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6486 (idlwave-sintern-class class)))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6487 module))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6488
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6489
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6490 (defun idlwave-fix-keywords (name type class keywords)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6491 ;; This fixes the list of keywords.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6492 (let ((case-fold-search t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6493 name1 type1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6494
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6495 ;; If this is the OBJ_NEW function, try to figure out the class and use
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6496 ;; the keywords from the corresponding INIT method.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6497 (if (and (equal name "OBJ_NEW")
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6498 (or (eq major-mode 'idlwave-mode)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6499 (eq major-mode 'idlwave-shell-mode)))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6500 (let* ((bos (save-excursion (idlwave-beginning-of-statement) (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6501 (string (buffer-substring bos (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6502 (case-fold-search t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6503 class)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6504 (and (string-match "obj_new([^'\"]*['\"]\\([a-zA-Z0-9_]+\\)"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6505 string)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6506 (setq class (idlwave-sintern-class (match-string 1 string)))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6507 (setq idlwave-current-obj_new-class class)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6508 (setq keywords
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6509 (append keywords
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6510 (nth 5 (idlwave-rinfo-assq
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6511 (idlwave-sintern-method "INIT")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6512 'fun
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6513 class
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6514 (idlwave-routines))))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6515
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6516 ;; If the class is `t', combine all keywords of all methods NAME
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6517 (when (eq class t)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6518 (loop for x in (idlwave-routines) do
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6519 (and (nth 2 x) ; non-nil class
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6520 (or (and (eq (nth 1 x) type) ; default type
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6521 (eq (car x) name)) ; default name
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6522 (and (eq (nth 1 x) type1) ; backup type
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6523 (eq (car x) name1))) ; backup name
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6524 (mapcar (lambda (k) (add-to-list 'keywords k))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6525 (nth 5 x))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6526 (setq keywords (idlwave-uniquify keywords)))
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6527
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6528 ;; If we have inheritance, add all keywords from superclasses
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6529 ;; :-( Taken out because JD says it does not work this way.
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6530 ; (when (and (stringp class)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6531 ; (or (assq (idlwave-sintern-keyword "_extra") keywords)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6532 ; (assq (idlwave-sintern-keyword "_ref_extra") keywords))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6533 ; (boundp 'super-classes))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6534 ; (loop for x in (idlwave-routines) do
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6535 ; (and (nth 2 x) ; non-nil class
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6536 ; (or (eq (nth 2 x) class) ; the right class
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6537 ; (memq (nth 2 x) super-classes)) ; an inherited class
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6538 ; (or (and (eq (nth 1 x) type) ; default type
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6539 ; (eq (car x) name)) ; default name
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6540 ; (and (eq (nth 1 x) type1) ; backup type
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6541 ; (eq (car x) name1))) ; backup name
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6542 ; (mapcar (lambda (k) (add-to-list 'keywords k))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6543 ; (nth 5 x))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6544 ; (setq keywords (idlwave-uniquify keywords)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6545
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6546 ;; Return the final list
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6547 keywords))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6548
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6549 (defun idlwave-expand-keyword (keyword module)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6550 "Expand KEYWORD to one of the legal keyword parameters of MODULE.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6551 KEYWORD may be an exact match or an abbreviation of a keyword.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6552 If the match is exact, KEYWORD itself is returned, even if there may be other
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6553 keywords of which KEYWORD is an abbreviation. This is necessary because some
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6554 system routines have keywords which are prefixes of other keywords.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6555 If KEYWORD is an abbreviation of several keywords, a list of all possible
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6556 completions is returned.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6557 If the abbreviation was unique, the correct keyword is returned.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6558 If it cannot be a keyword, the function return nil.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6559 If we do not know about MODULE, just return KEYWORD literally."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6560 (let* ((name (car module))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6561 (type (nth 1 module))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6562 (class (nth 2 module))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6563 (kwd (idlwave-sintern-keyword keyword))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6564 (entry (idlwave-best-rinfo-assoc name type class (idlwave-routines)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6565 (kwd-alist (nth 5 entry))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6566 (extra (or (assq (idlwave-sintern-keyword "_EXTRA") kwd-alist)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6567 (assq (idlwave-sintern-keyword "_REF_EXTRA") kwd-alist)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6568 (completion-ignore-case t)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6569 candidates)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6570 (cond ((assq kwd kwd-alist)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6571 kwd)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6572 ((setq candidates (all-completions kwd kwd-alist))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6573 (if (= (length candidates) 1)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6574 (car candidates)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6575 candidates))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6576 ((and entry extra)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6577 ;; Inheritance may cause this keyword to be correct
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6578 keyword)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6579 (entry
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6580 ;; We do know the function, which does not have the keyword.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6581 nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6582 (t
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6583 ;; We do not know the function, so this just might be a correct
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6584 ;; keyword - return it as it is.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6585 keyword))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6586
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6587 (defvar idlwave-rinfo-mouse-map (make-sparse-keymap))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6588 (defvar idlwave-rinfo-map (make-sparse-keymap))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6589 (define-key idlwave-rinfo-mouse-map
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6590 (if (featurep 'xemacs) [button2] [mouse-2])
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6591 'idlwave-mouse-active-rinfo)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6592 (define-key idlwave-rinfo-mouse-map
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6593 (if (featurep 'xemacs) [(shift button2)] [(shift mouse-2)])
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6594 'idlwave-mouse-active-rinfo-shift)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6595 (define-key idlwave-rinfo-mouse-map
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6596 (if (featurep 'xemacs) [button3] [mouse-3])
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6597 'idlwave-mouse-active-rinfo-right)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6598 (define-key idlwave-rinfo-mouse-map " " 'idlwave-active-rinfo-space)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6599 (define-key idlwave-rinfo-map "q" 'idlwave-quit-help)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6600 (define-key idlwave-rinfo-mouse-map "q" 'idlwave-quit-help)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6601 (defvar idlwave-popup-source nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6602 (defvar idlwave-rinfo-marker (make-marker))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6603
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6604 (defun idlwave-quit-help ()
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6605 (interactive)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6606 (let ((ri-window (get-buffer-window "*Help*"))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6607 (olh-window (get-buffer-window "*IDLWAVE Help*")))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6608 (when (and olh-window
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6609 (fboundp 'idlwave-help-quit))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6610 (select-window olh-window)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6611 (idlwave-help-quit))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6612 (when (window-live-p ri-window)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6613 (delete-window ri-window))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6614
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6615 (defun idlwave-display-calling-sequence (name type class
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6616 &optional initial-class)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6617 ;; Display the calling sequence of module NAME, type TYPE in class CLASS.
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6618 (let* ((initial-class (or initial-class class))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6619 (entry (or (idlwave-best-rinfo-assq name type class
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6620 (idlwave-routines))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6621 (idlwave-rinfo-assq name type class
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6622 idlwave-unresolved-routines)))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6623 (name (or (car entry) name))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6624 (class (or (nth 2 entry) class))
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6625 (superclasses (idlwave-all-class-inherits initial-class))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6626 (twins (idlwave-routine-twins entry))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6627 (dtwins (idlwave-study-twins twins))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6628 (all dtwins)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6629 (system (idlwave-rinfo-assq
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6630 name type class idlwave-system-routines))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6631 (have-sysdoc (and system (idlwave-help-directory)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6632 ;; (source (nth 3 entry))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6633 (have-olh (and (or system idlwave-extra-help-function)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6634 (idlwave-help-directory)))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6635 (calling-seq (nth 4 entry))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6636 (keywords (nth 5 entry))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6637 (olh (nth 6 entry))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6638 (help-echo-kwd
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6639 (if have-olh
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6640 "Button2: Insert KEYWORD (SHIFT=`/KEYWORD') Button3: Online Help "
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6641 "Button2: Insert KEYWORD (SHIFT=`/KEYWORD')."))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6642 (help-echo-use
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6643 (if have-olh
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6644 "Button2/3: Online Help"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6645 nil))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6646 (help-echo-src
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6647 (if (idlwave-help-directory)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6648 "Button2: Pop to source and back. Button3: Source in Help window."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6649 "Button2: Pop to source and back."))
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6650 (help-echo-class
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6651 "Button2: Display info about same method in superclass")
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6652 (col 0)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6653 (data (list name type class (current-buffer) olh initial-class))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6654 (km-prop (if (featurep 'xemacs) 'keymap 'local-map))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6655 (face 'idlwave-help-link-face)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6656 beg props win cnt total)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6657 (setq keywords (idlwave-fix-keywords name type class keywords))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6658 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6659 ((null entry)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6660 (error "No %s %s known %s" type name
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6661 (if initial-class (concat "in class " initial-class) "")))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6662 ((or (null name) (equal name ""))
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 34708
diff changeset
6663 (error "No function or procedure call at point"))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6664 ((null calling-seq)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6665 (error "Calling sequence of %s %s is not available" type name))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6666 (t
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6667 (save-excursion
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6668 (move-marker idlwave-rinfo-marker (point))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6669 (set-buffer (get-buffer-create "*Help*"))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6670 (use-local-map idlwave-rinfo-map)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6671 (setq buffer-read-only nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6672 (erase-buffer)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6673 (set (make-local-variable 'idlwave-popup-source) nil)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6674 (set (make-local-variable 'idlwave-current-obj_new-class)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6675 idlwave-current-obj_new-class)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6676 (when superclasses
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6677 (setq props (list 'mouse-face 'highlight
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6678 km-prop idlwave-rinfo-mouse-map
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6679 'help-echo help-echo-class
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6680 'data (cons 'class data)))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6681 (let ((classes (cons initial-class superclasses)) c)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6682 (insert "Classes: ")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6683 (while (setq c (pop classes))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6684 (insert " ")
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6685 (setq beg (point))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6686 (insert c)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6687 (if (equal (downcase c) (downcase class))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6688 (add-text-properties beg (point) (list 'face 'bold))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6689 (if (idlwave-rinfo-assq name type c (idlwave-routines))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6690 (add-text-properties beg (point) props))))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6691 (insert "\n")))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6692 (setq props (if have-olh
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6693 (list 'mouse-face 'highlight
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6694 km-prop idlwave-rinfo-mouse-map
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6695 'help-echo help-echo-use
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6696 'data (cons 'usage data))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6697 (if have-sysdoc (setq props (append (list 'face face) props)))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6698 (insert "Usage: ")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6699 (setq beg (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6700 (insert (if class
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6701 (format calling-seq class name)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6702 (format calling-seq name))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6703 "\n")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6704 (add-text-properties beg (point) props)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6705
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6706 (insert "Keywords:")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6707 (if (null keywords)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6708 (insert " No keywords accepted.")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6709 (setq col 9)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6710 (mapcar
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6711 (lambda (x)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6712 (if (>= (+ col 1 (length (car x)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6713 (window-width))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6714 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6715 (insert "\n ")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6716 (setq col 9)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6717 (insert " ")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6718 (setq beg (point)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6719 props (list 'mouse-face 'highlight
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6720 km-prop idlwave-rinfo-mouse-map
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6721 'data (cons 'keyword data)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6722 'help-echo help-echo-kwd
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6723 'keyword (car x)))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6724 (if have-sysdoc (setq props (append (list 'face face) props)))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6725 (insert (car x))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6726 (add-text-properties beg (point) props)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6727 (setq col (+ col 1 (length (car x)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6728 keywords))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6729
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6730 (setq cnt 1 total (length all))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6731 (while (setq entry (pop all))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6732 (setq props (list 'mouse-face 'highlight
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6733 km-prop idlwave-rinfo-mouse-map
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6734 'help-echo help-echo-src
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6735 'source (cons (car (nth 2 entry)) (nth 1 entry))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6736 'data (cons 'source data)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6737 (idlwave-insert-source-location
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6738 (format "\n%-8s %s"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6739 (if (equal cnt 1)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6740 (if (> total 1) "Sources:" "Source:")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6741 "")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6742 (if (> total 1) "- " ""))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6743 entry props)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6744 (incf cnt)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6745 (when (and all (> cnt idlwave-rinfo-max-source-lines))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6746 ;; No more source lines, please
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6747 (insert (format
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6748 "\n Source information truncated to %d entries."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6749 idlwave-rinfo-max-source-lines))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6750 (setq all nil)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6751
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6752 (setq buffer-read-only t))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6753 (display-buffer "*Help*")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6754 (if (and (setq win (get-buffer-window "*Help*"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6755 idlwave-resize-routine-help-window)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6756 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6757 (let ((ww (selected-window)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6758 (unwind-protect
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6759 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6760 (select-window win)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6761 (enlarge-window (- (/ (frame-height) 2)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6762 (window-height)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6763 (shrink-window-if-larger-than-buffer))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6764 (select-window ww)))))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6765
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6766 (defun idlwave-insert-source-location (prefix entry &optional file-props)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6767 "Insert a source location into the routine info buffer.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6768 Start line with PREFIX.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6769 If a file name is inserted, add FILE-PROPS to it."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6770
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6771 (let* ((key (car entry))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6772 (file (nth 1 entry))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6773 (types (nth 2 entry))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6774 (shell-flag (member 'compiled types))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6775 (buffer-flag (member 'buffer types))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6776 (lib-flag (member 'lib types))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6777 (ndupl (or (and buffer-flag (idlwave-count-eq 'buffer types))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6778 (and lib-flag (idlwave-count-eq 'lib types))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6779 1))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6780 (doflags t)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6781 beg special)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6782
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6783 (insert prefix)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6784
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6785 (cond
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6786 ((eq key 'system)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6787 (setq doflags nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6788 (insert "System "))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6789 ((eq key 'builtin)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6790 (setq doflags nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6791 (insert "Builtin "))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6792 ((and (not file) shell-flag)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6793 (insert "Unresolved"))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6794 ((null file) (insert "ERROR"))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6795 ((setq special (idlwave-special-lib-test file))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6796 (insert (format "%-10s" special)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6797 ((idlwave-syslib-p file)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6798 (if (string-match "obsolete" (file-name-directory file))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6799 (insert "Obsolete ")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6800 (insert "SystemLib ")))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6801 ((idlwave-lib-p file) (insert "Library "))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6802 (t (insert "Other ")))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6803
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6804 (when doflags
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6805 (insert (concat
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6806 " ["
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6807 (if lib-flag "C" "-")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6808 (if shell-flag "S" "-")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6809 (if buffer-flag "B" "-")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6810 "] ")))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6811 (when (> ndupl 1)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6812 (setq beg (point))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6813 (insert (format "(%dx) " ndupl))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6814 (add-text-properties beg (point) (list 'face 'bold)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6815 (when (and file (not (equal file "")))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6816 (setq beg (point))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6817 (insert (apply 'abbreviate-file-name
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6818 (if (featurep 'xemacs) (list file t) (list file))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6819 (if file-props
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6820 (add-text-properties beg (point) file-props)))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6821
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6822 (defun idlwave-special-lib-test (file)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6823 "Check the path of FILE against the regexps which define special libs.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6824 Return the name of the special lib if there is a match."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6825 (let ((alist idlwave-special-lib-alist)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6826 entry rtn)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6827 (cond
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6828 ((stringp file)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6829 (while (setq entry (pop alist))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6830 (if (string-match (car entry) file)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6831 (setq rtn (cdr entry)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6832 alist nil)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6833 rtn)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6834 (t nil))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6835
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6836 (defun idlwave-mouse-active-rinfo-right (ev)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6837 (interactive "e")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6838 (idlwave-mouse-active-rinfo ev 'right))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6839
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6840 (defun idlwave-mouse-active-rinfo-shift (ev)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6841 (interactive "e")
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6842 (idlwave-mouse-active-rinfo ev nil 'shift))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6843
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6844 (defun idlwave-active-rinfo-space ()
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6845 (interactive)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6846 (idlwave-mouse-active-rinfo nil 'right))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6847
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6848 (defun idlwave-mouse-active-rinfo (ev &optional right shift)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6849 "Does the mouse actions in the routine info buffer.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6850 Optional args RIGHT and SHIFT indicate, if mouse-3 was used, and if SHIFT
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6851 was pressed."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6852 (interactive "e")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6853 (if ev (mouse-set-point ev))
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6854 (let (data id name type class buf keyword bufwin source word initial-class)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6855 (setq data (get-text-property (point) 'data)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6856 source (get-text-property (point) 'source)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6857 keyword (get-text-property (point) 'keyword)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6858 id (car data)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6859 name (nth 1 data) type (nth 2 data) class (nth 3 data)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6860 buf (nth 4 data)
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6861 initial-class (nth 6 data)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6862 word (idlwave-this-word)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6863 bufwin (get-buffer-window buf t))
34433
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6864 (cond ((eq id 'class)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6865 (if (window-live-p bufwin) (select-window bufwin))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6866 (idlwave-display-calling-sequence
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6867 (idlwave-sintern-method name)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6868 type (idlwave-sintern-class word)
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6869 initial-class))
31e98a1ac98f Updated IDLWAVE to version 4.7
Carsten Dominik <dominik@science.uva.nl>
parents: 34342
diff changeset
6870 ((eq id 'usage)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6871 (idlwave-require-online-help)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6872 (idlwave-online-help nil name type class))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6873 ((eq id 'source)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6874 (if (and right (idlwave-help-directory))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6875 (let ((idlwave-extra-help-function 'idlwave-help-with-source)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6876 (idlwave-help-source-try-header nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6877 ;; Fake idlwave-routines, to make help find the right entry
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6878 (idlwave-routines
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6879 (list (list (nth 1 data) (nth 2 data) (nth 3 data) source ""))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6880 (idlwave-require-online-help)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6881 (idlwave-help-get-special-help name type class nil))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6882 (setq idlwave-popup-source (not idlwave-popup-source))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6883 (if idlwave-popup-source
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6884 (condition-case err
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6885 (idlwave-do-find-module name type class source)
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6886 (error
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6887 (setq idlwave-popup-source nil)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6888 (if (window-live-p bufwin) (select-window bufwin))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6889 (error (nth 1 err))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6890 (if bufwin
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6891 (select-window bufwin)
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6892 (pop-to-buffer buf))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6893 (goto-char (marker-position idlwave-rinfo-marker)))))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6894 ((eq id 'keyword)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
6895 (if right
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6896 (progn
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6897 (idlwave-require-online-help)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6898 (idlwave-online-help nil name type class keyword))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6899 (idlwave-rinfo-insert-keyword keyword buf shift))))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6900
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6901 (defun idlwave-rinfo-insert-keyword (keyword buffer &optional shift)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6902 "Insert KEYWORD in BUFFER. Make sure buffer is displayed in a window."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6903 (let ((bwin (get-buffer-window buffer)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6904 (if idlwave-complete-empty-string-as-lower-case
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6905 (setq keyword (downcase keyword)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6906 (if bwin
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6907 (select-window bwin)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6908 (pop-to-buffer buffer)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6909 (setq bwin (get-buffer-window buffer)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6910 (if (eq (preceding-char) ?/)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6911 (insert keyword)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6912 (unless (save-excursion
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6913 (re-search-backward
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6914 "[(,][ \t]*\\(\\$[ \t]*\\(;.*\\)?\n\\)?[ \t]*\\="
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6915 (min (- (point) 100) (point-min)) t))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6916 (insert ", "))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6917 (if shift (insert "/"))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6918 (insert keyword)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6919 (if (and (not shift)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6920 idlwave-keyword-completion-adds-equal)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6921 (insert "=")))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6922
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6923 (defun idlwave-list-buffer-load-path-shadows (&optional arg)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6924 "List the load path shadows of all routines defined in current buffer."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6925 (interactive "P")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6926 (idlwave-routines)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6927 (if (eq major-mode 'idlwave-mode)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6928 (idlwave-list-load-path-shadows
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6929 nil (idlwave-update-current-buffer-info 'save-buffer)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6930 "in current buffer")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6931 (error "Current buffer is not in idlwave-mode")))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6932
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6933 (defun idlwave-list-shell-load-path-shadows (&optional arg)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6934 "List the load path shadows of all routines compiled under the shell.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6935 This is very useful for checking an IDL application. Just compile the
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6936 application, do RESOLVE_ALL, and `C-c C-i' to compile all referenced
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6937 routines and update IDLWAVE internal info. Then check for shadowing
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6938 with this command."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6939 (interactive "P")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6940 (cond
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6941 ((or (not (fboundp 'idlwave-shell-is-running))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6942 (not (idlwave-shell-is-running)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6943 (error "Shell is not running"))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6944 ((null idlwave-compiled-routines)
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 34708
diff changeset
6945 (error "No compiled routines. Maybe you need to update with `C-c C-i'"))
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6946 (t
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6947 (idlwave-list-load-path-shadows nil idlwave-compiled-routines
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6948 "in the shell"))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6949
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6950 (defun idlwave-list-all-load-path-shadows (&optional arg)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6951 "List the load path shadows of all routines known to IDLWAVE."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6952 (interactive "P")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6953 (idlwave-list-load-path-shadows nil nil "globally"))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6954
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6955 (defun idlwave-list-load-path-shadows (arg &optional special-routines loc)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6956 "List the routines which are defined multiple times.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6957 Search the information IDLWAVE has about IDL routines for multiple
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6958 definitions.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6959 When SPECIAL-ROUTINES in non-nil, only look for shadows of these routines.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6960
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6961 When IDL hits a routine call which is not defined, it will search on
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6962 the load path in order to find a definition. The output of this
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6963 command can be used to detect possible name clashes during this process."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6964 (idlwave-routines) ; Make sure everything is loaded.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6965 (unless idlwave-library-routines
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6966 (or (y-or-n-p
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6967 "You don't have a library catalog. Continue anyway? ")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6968 (error "Abort")))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6969 (let* ((routines (append idlwave-system-routines
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6970 idlwave-compiled-routines
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6971 idlwave-library-routines
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6972 idlwave-buffer-routines
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6973 nil))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6974 (km-prop (if (featurep 'xemacs) 'keymap 'local-map))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6975 (keymap (make-sparse-keymap))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6976 (props (list 'mouse-face 'highlight
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6977 km-prop keymap
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6978 'help-echo "Mouse2: Find source"))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6979 (nroutines (length (or special-routines routines)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6980 (step (/ nroutines 99))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6981 (n 0)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6982 (next-perc 1)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6983 (cnt 0)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6984 (idlwave-sort-prefer-buffer-info nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6985 routine twins dtwins twin done props1 lroutines)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6986
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6987 (if special-routines
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6988 ;; Just looking for shadows of a few special routines
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6989 (setq lroutines routines
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6990 routines special-routines))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6991
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6992 (message "Sorting routines...")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6993 (setq routines (sort routines
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6994 (lambda (a b)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6995 (string< (downcase (idlwave-make-full-name
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6996 (nth 2 a) (car a)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6997 (downcase (idlwave-make-full-name
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6998 (nth 2 b) (car b)))))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
6999 (message "Sorting routines...done")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7000
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7001 (define-key keymap (if (featurep 'xemacs) [(button2)] [(mouse-2)])
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7002 (lambda (ev)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7003 (interactive "e")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7004 (mouse-set-point ev)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7005 (apply 'idlwave-do-find-module
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7006 (get-text-property (point) 'find-args))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7007 (define-key keymap [(return)]
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7008 (lambda ()
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7009 (interactive)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7010 (apply 'idlwave-do-find-module
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7011 (get-text-property (point) 'find-args))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7012 (message "Compiling list...( 0%%)")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7013 (save-excursion
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7014 (set-buffer (get-buffer-create "*Shadows*"))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7015 (setq buffer-read-only nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7016 (erase-buffer)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7017 (while (setq routine (pop routines))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7018 (setq n (1+ n))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7019 (if (= (* next-perc step) n)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7020 (progn
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7021 (message "Compiling list...(%2d%%)" next-perc)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7022 (setq next-perc (1+ next-perc))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7023 ;; Get a list of all twins
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7024 (setq twins (idlwave-routine-twins routine (or lroutines routines)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7025 (if (memq routine done)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7026 (setq dtwins nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7027 (setq dtwins (idlwave-study-twins twins)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7028 ;; Mark all twins as delt with
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7029 (setq done (append twins done))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7030 (when (or (> (length dtwins) 1)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7031 (> (idlwave-count-eq 'lib (nth 2 (car dtwins))) 1)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7032 (> (idlwave-count-eq 'buffer (nth 2 (car dtwins))) 1))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7033 (incf cnt)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7034 (insert (format "\n%s%s"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7035 (idlwave-make-full-name (nth 2 routine) (car routine))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7036 (if (eq (nth 1 routine) 'fun) "()" "")))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7037 (while (setq twin (pop dtwins))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7038 (setq props1 (append (list 'find-args
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7039 (list (nth 0 routine)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7040 (nth 1 routine)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7041 (nth 2 routine)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7042 (cons 'lib (nth 1 twin))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7043 props))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7044 (idlwave-insert-source-location "\n - " twin props1))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7045 (goto-char (point-min))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7046 (setq buffer-read-only t))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7047 (setq loc (or loc ""))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7048 (if (> cnt 0)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7049 (progn
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7050 (display-buffer (get-buffer "*Shadows*"))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7051 (message "%d case%s of shadowing found %s"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7052 cnt (if (= cnt 1) "" "s") loc))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7053 (message "No shadowing conflicts found %s" loc))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7054
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7055 (defun idlwave-print-source (routine)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7056 (let* ((source (nth 3 routine))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7057 (stype (car source))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7058 (sfile (cdr source)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7059 (if (and (eq stype 'lib) sfile)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7060 (progn
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7061 (setq sfile (idlwave-expand-lib-file-name sfile))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7062 (if (idlwave-syslib-p sfile) (setq stype 'syslib))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7063 (if (and (eq stype 'compiled)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7064 (or (not (stringp sfile))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7065 (not (string-match "\\S-" sfile))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7066 (setq stype 'unresolved))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7067 (princ (format " %-10s %s\n"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7068 stype
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7069 (if sfile sfile "No source code available")))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7070
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7071 (defun idlwave-routine-twins (entry &optional list)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7072 "Return all twin entries of ENTRY in LIST.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7073 LIST defaults to `idlwave-routines'.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7074 Twin entries are those which have the same name, type, and class.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7075 ENTRY will also be returned, as the first item of this list."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7076 (let* ((name (car entry))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7077 (type (nth 1 entry))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7078 (class (nth 2 entry))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7079 (candidates (idlwave-all-assq name (or list (idlwave-routines))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7080 twins candidate)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7081 (while (setq candidate (pop candidates))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7082 (if (and (not (eq candidate entry))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7083 (eq type (nth 1 candidate))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7084 (eq class (nth 2 candidate)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7085 (push candidate twins)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7086 (if (setq candidate (idlwave-rinfo-assq name type class
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7087 idlwave-unresolved-routines))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7088 (push candidate twins))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7089 (cons entry (nreverse twins))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7090
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7091 (defun idlwave-study-twins (entries)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7092 "Return dangerous twins of first entry in TWINS.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7093 Dangerous twins are routines with same name, but in different files
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7094 on the load path.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7095 If a file is in the system library and has an entry in the
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7096 `idlwave-system-routines' list, we omit the latter because many IDL
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7097 routines are implemented as library routines."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7098 (let* ((entry (car entries))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7099 (name (car entry)) ;
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7100 (type (nth 1 entry)) ; Must be bound for
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7101 (class (nth 2 entry)) ; idlwave-routine-twin-compare
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7102 (cnt 0)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7103 source type file thefile alist syslibp key)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7104 (while (setq entry (pop entries))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7105 (incf cnt)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7106 (setq source (nth 3 entry)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7107 type (car source)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7108 file (cdr source))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7109 (if (eq type 'lib)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7110 (setq file (idlwave-expand-lib-file-name file)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7111 ;; Make KEY to index entry properly
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7112 (setq key (cond ((eq type 'system) type)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7113 (file (file-truename file))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7114 (t 'unresolved)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7115 (if (and file
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7116 (not syslibp)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7117 (idlwave-syslib-p file))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7118 ;; We do have an entry in the system library
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7119 (setq syslibp t))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7120
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7121 (setq thefile (or thefile file))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7122 (if (setq entry (assoc key alist))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7123 (push type (nth 2 entry))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7124 (push (list key file (list type)) alist)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7125
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7126 (setq alist (nreverse alist))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7127
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7128 (when syslibp
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7129 ;; File is system *library* - remove any system entry
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7130 (setq alist (delq (assoc 'system alist) alist)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7131
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7132 (when (and (idlwave-syslib-scanned-p)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7133 (setq entry (assoc 'system alist)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7134 (setcar entry 'builtin))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7135 (sort alist 'idlwave-routine-twin-compare)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7136
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7137 (defvar name)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7138 (defvar type)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7139 (defvar class)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7140 (defvar idlwave-sort-prefer-buffer-info t
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7141 "Internal variable used to influence `idlwave-routine-twin-compare'.")
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7142
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7143 (defmacro idlwave-xor (a b)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7144 `(and (or ,a ,b)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7145 (not (and ,a ,b))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7146
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7147 (defun idlwave-routine-entry-compare (a b)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7148 "Compare two routine info entries for sortiung. This is the general case.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7149 It first compates class, names, and type. If it turns out that A and B
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7150 are twins (same name, class, and type), calls another routine which
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7151 compares twins on the basis of their file names and path locations."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7152 (let ((name (car a)) (type (nth 1 a)) (class (nth 2 a)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7153 (cond
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7154 ((not (equal (idlwave-downcase-safe class)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7155 (idlwave-downcase-safe (nth 2 b))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7156 ;; Class decides
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7157 (cond ((null (nth 2 b)) nil)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7158 ((null class) t)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7159 (t (string< (downcase class) (downcase (nth 2 b))))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7160 ((not (equal (downcase name) (downcase (car b))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7161 ;; Name decides
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7162 (string< (downcase name) (downcase (car b))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7163 ((not (eq type (nth 1 b)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7164 ;; Type decides
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7165 (< (if (eq type 'fun) 1 0) (if (eq (nth 1 b) 'fun) 1 0)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7166 (t
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7167 ;; A and B are twins - so the decision is more complicated.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7168 ;; Call twin-compare with the proper arguments.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7169 (idlwave-routine-entry-compare-twins a b)))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7170
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7171 (defun idlwave-routine-entry-compare-twins (a b)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7172 "Compare two routine entries, under the assumption that they are twins.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7173 This basically calles `idlwave-routine-twin-compare' with the correct args."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7174 (let ((name (car a)) (type (nth 1 a)) (class (nth 2 a)) ; needed outside
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7175 (atype (car (nth 3 a)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7176 (btype (car (nth 3 b)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7177 (afile (cdr (nth 3 a)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7178 (bfile (cdr (nth 3 b))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7179 (if (eq atype 'lib)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7180 (setq afile (idlwave-expand-lib-file-name afile)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7181 (if (eq btype 'lib)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7182 (setq bfile (idlwave-expand-lib-file-name bfile)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7183 (idlwave-routine-twin-compare
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7184 (if (stringp afile)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7185 (list (file-truename afile) afile (list atype))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7186 (list atype afile (list atype)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7187 (if (stringp bfile)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7188 (list (file-truename bfile) bfile (list btype))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7189 (list btype bfile (list btype))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7190 ))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7191
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7192 (defun idlwave-routine-twin-compare (a b)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7193 "Compare two routine twin entries for sorting.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7194 In here, A and B are not normal routine info entries, but special
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7195 lists (KEY FILENAME (TYPES...)).
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7196 This expects NAME TYPE CLASS to be bound to the right values."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7197 (let* (;; Dis-assemble entries
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7198 (akey (car a)) (bkey (car b))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7199 (afile (nth 1 a)) (bfile (nth 1 b))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7200 (atypes (nth 2 a)) (btypes (nth 2 b))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7201 ;; System routines?
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7202 (asysp (memq akey '(builtin system)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7203 (bsysp (memq bkey '(builtin system)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7204 ;; Compiled routines?
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7205 (acompp (memq 'compiled atypes))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7206 (bcompp (memq 'compiled btypes))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7207 ;; Unresolved?
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7208 (aunresp (or (eq akey 'unresolved)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7209 (and acompp (not afile))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7210 (bunresp (or (eq bkey 'unresolved)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7211 (and bcompp (not bfile))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7212 ;; Buffer info available?
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7213 (abufp (memq 'buffer atypes))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7214 (bbufp (memq 'buffer btypes))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7215 ;; On search path?
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7216 (tpath-alist (idlwave-true-path-alist))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7217 (apathp (assoc akey tpath-alist))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7218 (bpathp (assoc bkey tpath-alist))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7219 ;; How early on search path? High number means early since we
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7220 ;; measure the tail of the path list
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7221 (anpath (length (memq apathp tpath-alist)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7222 (bnpath (length (memq bpathp tpath-alist)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7223 ;; Look at file names
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7224 (aname (if (stringp afile) (downcase (file-name-nondirectory afile)) ""))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7225 (bname (if (stringp bfile) (downcase (file-name-nondirectory bfile)) ""))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7226 (fname-re (if class (format "\\`%s__\\(%s\\|define\\)\\.pro\\'"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7227 (regexp-quote (downcase class))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7228 (regexp-quote (downcase name)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7229 (format "\\`%s\\.pro" (regexp-quote (downcase name)))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7230 ;; Is file name derived from the routine name?
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7231 ;; Method file or class definition file?
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7232 (anamep (string-match fname-re aname))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7233 (adefp (and class anamep (string= "define" (match-string 1 aname))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7234 (bnamep (string-match fname-re bname))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7235 (bdefp (and class bnamep (string= "define" (match-string 1 bname)))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7236
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7237 ;; Now: follow JD's ideas about sorting. Looks really simple now,
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7238 ;; doesn't it? The difficult stuff is hidden above...
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7239 (cond
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7240 ((idlwave-xor asysp bsysp) asysp) ; System entries first
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7241 ((idlwave-xor aunresp bunresp) bunresp) ; Unresolved last
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7242 ((and idlwave-sort-prefer-buffer-info
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7243 (idlwave-xor abufp bbufp)) abufp) ; Buffers before non-buffers
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7244 ((idlwave-xor acompp bcompp) acompp) ; Compiled entries
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7245 ((idlwave-xor apathp bpathp) apathp) ; Library before non-library
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7246 ((idlwave-xor anamep bnamep) anamep) ; Correct file names first
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7247 ((and class anamep bnamep ; both file names match ->
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7248 (idlwave-xor adefp bdefp)) bdefp) ; __define after __method
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7249 ((> anpath bnpath) t) ; Who is first on path?
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7250 (t nil)))) ; Default
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7251
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7252 (defun idlwave-downcase-safe (string)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7253 "Donwcase if string, else return unchanged."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7254 (if (stringp string)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7255 (downcase string)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7256 string))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7257
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7258 (defun idlwave-count-eq (elt list)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7259 "How often is ELT in LIST?"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7260 (length (delq nil (mapcar (lambda (x) (eq x elt)) list))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7261
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7262 (defun idlwave-syslib-p (file)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7263 "Non-nil of FILE is in the system library."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7264 (let* ((true-syslib (file-name-as-directory
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7265 (file-truename
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7266 (expand-file-name "lib" (idlwave-sys-dir)))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7267 (true-file (file-truename file)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7268 (string-match (concat "^" (regexp-quote true-syslib)) true-file)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7269
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7270 (defun idlwave-lib-p (file)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7271 "Non-nil if file is in the library"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7272 (let ((true-dir (file-name-directory (file-truename file))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7273 (assoc true-dir (idlwave-true-path-alist))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7274
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7275 (defun idlwave-true-path-alist ()
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7276 "Return `idlwave-path-alist' alist with true-names.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7277 Info is cached, but relies on the functons setting `idlwave-path-alist'
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7278 to reset the variable `idlwave-true-path-alist' to nil."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7279 (or idlwave-true-path-alist
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7280 (setq idlwave-true-path-alist
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7281 (mapcar (lambda(x) (cons
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7282 (file-name-as-directory
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7283 (file-truename
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7284 (directory-file-name
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7285 (car x))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7286 (cdr x)))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7287 idlwave-path-alist))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7288
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7289 (defun idlwave-syslib-scanned-p ()
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7290 "Non-nil if the system lib file !DIR/lib has been scanned."
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7291 (let* ((true-syslib (file-name-as-directory
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7292 (file-truename
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7293 (expand-file-name "lib" (idlwave-sys-dir))))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7294 (cdr (assoc true-syslib (idlwave-true-path-alist)))))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7295
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7296 ;; ----------------------------------------------------------------------------
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7297 ;;
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7298 ;; Online Help display
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7299
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7300
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7301 ;; ----------------------------------------------------------------------------
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7302 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7303 ;; Additions for use with imenu.el and func-menu.el
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7304 ;; (pop-up a list of IDL units in the current file).
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7305 ;;
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7306
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7307 (defun idlwave-prev-index-position ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7308 "Search for the previous procedure or function.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7309 Return nil if not found. For use with imenu.el."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7310 (save-match-data
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7311 (cond
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7312 ((idlwave-find-key "\\<\\(pro\\|function\\)\\>" -1 'nomark))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7313 ;; ((idlwave-find-key idlwave-begin-unit-reg 1 'nomark)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7314 (t nil))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7315
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7316 (defun idlwave-unit-name ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7317 "Return the unit name.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7318 Assumes that point is at the beginning of the unit as found by
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7319 `idlwave-prev-index-position'."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7320 (forward-sexp 2)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7321 (forward-sexp -1)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7322 (let ((begin (point)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7323 (re-search-forward "[a-zA-Z][a-zA-Z0-9$_]+\\(::[a-zA-Z][a-zA-Z0-9$_]+\\)?")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7324 (if (fboundp 'buffer-substring-no-properties)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7325 (buffer-substring-no-properties begin (point))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7326 (buffer-substring begin (point)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7327
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7328 (defun idlwave-function-menu ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7329 "Use `imenu' or `function-menu' to jump to a procedure or function."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7330 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7331 (if (string-match "XEmacs" emacs-version)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7332 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7333 (require 'func-menu)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7334 (function-menu))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7335 (require 'imenu)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7336 (imenu (imenu-choose-buffer-index))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7337
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7338 ;; Here we kack func-menu.el in order to support this new mode.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7339 ;; The latest versions of func-menu.el already have this stuff in, so
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7340 ;; we hack only if it is not already there.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7341 (when (fboundp 'eval-after-load)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7342 (eval-after-load "func-menu"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7343 '(progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7344 (or (assq 'idlwave-mode fume-function-name-regexp-alist)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7345 (not (boundp 'fume-function-name-regexp-idl)) ; avoid problems
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7346 (setq fume-function-name-regexp-alist
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7347 (cons '(idlwave-mode . fume-function-name-regexp-idl)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7348 fume-function-name-regexp-alist)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7349 (or (assq 'idlwave-mode fume-find-function-name-method-alist)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7350 (not (fboundp 'fume-find-next-idl-function-name)) ; avoid problems
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7351 (setq fume-find-function-name-method-alist
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7352 (cons '(idlwave-mode . fume-find-next-idl-function-name)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7353 fume-find-function-name-method-alist))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7354
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7355 (defun idlwave-edit-in-idlde ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7356 "Edit the current file in IDL Development environment."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7357 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7358 (start-process "idldeclient" nil
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7359 idlwave-shell-explicit-file-name "-c" "-e"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7360 (buffer-file-name) "&"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7361
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7362 (defun idlwave-launch-idlhelp ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7363 "Start the IDLhelp application."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7364 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7365 (start-process "idlhelp" nil idlwave-help-application))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7366
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7367 ;; Menus - using easymenu.el
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7368 (defvar idlwave-mode-menu-def
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7369 `("IDLWAVE"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7370 ["PRO/FUNC menu" idlwave-function-menu t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7371 ("Motion"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7372 ["Subprogram Start" idlwave-beginning-of-subprogram t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7373 ["Subprogram End" idlwave-end-of-subprogram t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7374 ["Block Start" idlwave-beginning-of-block t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7375 ["Block End" idlwave-end-of-block t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7376 ["Up Block" idlwave-backward-up-block t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7377 ["Down Block" idlwave-down-block t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7378 ["Skip Block Backward" idlwave-backward-block t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7379 ["Skip Block Forward" idlwave-forward-block t])
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7380 ("Mark"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7381 ["Subprogram" idlwave-mark-subprogram t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7382 ["Block" idlwave-mark-block t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7383 ["Header" idlwave-mark-doclib t])
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7384 ("Format"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7385 ["Indent Subprogram" idlwave-indent-subprogram t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7386 ["(Un)Comment Region" idlwave-toggle-comment-region "C-c ;"]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7387 ["Continue/Split line" idlwave-split-line t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7388 "--"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7389 ["Toggle Auto Fill" idlwave-auto-fill-mode :style toggle
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7390 :selected (symbol-value idlwave-fill-function)])
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7391 ("Templates"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7392 ["Procedure" idlwave-procedure t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7393 ["Function" idlwave-function t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7394 ["Doc Header" idlwave-doc-header t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7395 ["Log" idlwave-doc-modification t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7396 "--"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7397 ["Case" idlwave-case t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7398 ["For" idlwave-for t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7399 ["Repeat" idlwave-repeat t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7400 ["While" idlwave-while t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7401 "--"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7402 ["Close Block" idlwave-close-block t])
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7403 ("Completion"
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7404 ["Complete" idlwave-complete t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7405 ("Complete Special"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7406 ["1 Procedure Name" (idlwave-complete 'procedure) t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7407 ["2 Procedure Keyword" (idlwave-complete 'procedure-keyword) t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7408 "--"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7409 ["3 Function Name" (idlwave-complete 'function) t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7410 ["4 Function Keyword" (idlwave-complete 'function-keyword) t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7411 "--"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7412 ["5 Procedure Method Name" (idlwave-complete 'procedure-method) t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7413 ["6 Procedure Method Keyword" (idlwave-complete 'procedure-method-keyword) t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7414 "--"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7415 ["7 Function Method Name" (idlwave-complete 'function-method) t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7416 ["8 Function Method Keyword" (idlwave-complete 'function-method-keyword) t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7417 "--"
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7418 ["9 Class Name" idlwave-complete-class t]))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7419 ("Routine Info"
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7420 ["Show Routine Info" idlwave-routine-info t]
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7421 ["Online Context Help" idlwave-context-help (idlwave-help-directory)]
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7422 "--"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7423 ["Find Routine Source" idlwave-find-module t]
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7424 ["Resolve Routine" idlwave-resolve (featurep 'idlw-shell)]
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7425 "--"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7426 ["Update Routine Info" idlwave-update-routine-info t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7427 "--"
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7428 "IDL Library Catalog"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7429 ["Select Catalog Directories" idlwave-create-libinfo-file t]
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7430 ["Scan Directories" (idlwave-update-routine-info '(16))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7431 idlwave-path-alist]
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7432 "--"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7433 "Routine Shadows"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7434 ["Check Current Buffer" idlwave-list-buffer-load-path-shadows t]
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7435 ["Check Compiled Routines" idlwave-list-shell-load-path-shadows t]
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7436 ["Check Everything" idlwave-list-all-load-path-shadows t])
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7437 ("Misc"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7438 ["Kill auto-created buffers" idlwave-kill-autoloaded-buffers t]
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7439 "--"
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7440 ["Insert TAB character" idlwave-hard-tab t])
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7441 "--"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7442 ("External"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7443 ["Generate IDL tags" idlwave-make-tags t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7444 ["Start IDL shell" idlwave-shell t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7445 ["Edit file in IDLDE" idlwave-edit-in-idlde t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7446 ["Launch IDL Help" idlwave-launch-idlhelp t])
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7447 "--"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7448 ("Customize"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7449 ["Browse IDLWAVE Group" idlwave-customize t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7450 "--"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7451 ["Build Full Customize Menu" idlwave-create-customize-menu
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7452 (fboundp 'customize-menu-create)])
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7453 ("Documentation"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7454 ["Describe Mode" describe-mode t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7455 ["Abbreviation List" idlwave-list-abbrevs t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7456 "--"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7457 ["Commentary in idlwave.el" idlwave-show-commentary t]
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
7458 ["Commentary in idlw-shell.el" idlwave-shell-show-commentary t]
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7459 "--"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7460 ["Info" idlwave-info t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7461 "--"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7462 ["Launch IDL Help" idlwave-launch-idlhelp t])))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7463
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7464 (defvar idlwave-mode-debug-menu-def
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7465 '("Debug"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7466 ["Start IDL shell" idlwave-shell t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7467 ["Save and .RUN buffer" idlwave-shell-save-and-run
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7468 (and (boundp 'idlwave-shell-automatic-start)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7469 idlwave-shell-automatic-start)]))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7470
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7471 (if (or (featurep 'easymenu) (load "easymenu" t))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7472 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7473 (easy-menu-define idlwave-mode-menu idlwave-mode-map
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7474 "IDL and WAVE CL editing menu"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7475 idlwave-mode-menu-def)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7476 (easy-menu-define idlwave-mode-debug-menu idlwave-mode-map
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7477 "IDL and WAVE CL editing menu"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7478 idlwave-mode-debug-menu-def)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7479
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7480 (defun idlwave-customize ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7481 "Call the customize function with idlwave as argument."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7482 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7483 ;; Try to load the code for the shell, so that we can customize it
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7484 ;; as well.
27185
ae5b17b9c403 fixed some bugs associated with the new file names
Carsten Dominik <dominik@science.uva.nl>
parents: 27107
diff changeset
7485 (or (featurep 'idlw-shell)
ae5b17b9c403 fixed some bugs associated with the new file names
Carsten Dominik <dominik@science.uva.nl>
parents: 27107
diff changeset
7486 (load "idlw-shell" t))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7487 (customize-browse 'idlwave))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7488
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7489 (defun idlwave-create-customize-menu ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7490 "Create a full customization menu for IDLWAVE, insert it into the menu."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7491 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7492 (if (fboundp 'customize-menu-create)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7493 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7494 ;; Try to load the code for the shell, so that we can customize it
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7495 ;; as well.
27185
ae5b17b9c403 fixed some bugs associated with the new file names
Carsten Dominik <dominik@science.uva.nl>
parents: 27107
diff changeset
7496 (or (featurep 'idlw-shell)
ae5b17b9c403 fixed some bugs associated with the new file names
Carsten Dominik <dominik@science.uva.nl>
parents: 27107
diff changeset
7497 (load "idlw-shell" t))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7498 (easy-menu-change
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7499 '("IDLWAVE") "Customize"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7500 `(["Browse IDLWAVE group" idlwave-customize t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7501 "--"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7502 ,(customize-menu-create 'idlwave)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7503 ["Set" Custom-set t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7504 ["Save" Custom-save t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7505 ["Reset to Current" Custom-reset-current t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7506 ["Reset to Saved" Custom-reset-saved t]
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7507 ["Reset to Standard Settings" Custom-reset-standard t]))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7508 (message "\"IDLWAVE\"-menu now contains full customization menu"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7509 (error "Cannot expand menu (outdated version of cus-edit.el)")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7510
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7511 (defun idlwave-show-commentary ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7512 "Use the finder to view the file documentation from `idlwave.el'."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7513 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7514 (require 'finder)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7515 (finder-commentary "idlwave.el"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7516
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7517 (defun idlwave-shell-show-commentary ()
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
7518 "Use the finder to view the file documentation from `idlw-shell.el'."
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7519 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7520 (require 'finder)
27606
0396e9e8d57b (idlwave-template): Respect `idlwave-abbrev-change-case'.
Carsten Dominik <dominik@science.uva.nl>
parents: 27185
diff changeset
7521 (finder-commentary "idlw-shell.el"))
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7522
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7523 (defun idlwave-info ()
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7524 "Read documentation for IDLWAVE in the info system."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7525 (interactive)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7526 (require 'info)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7527 (Info-goto-node "(idlwave)"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7528
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7529 (defun idlwave-list-abbrevs (arg)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7530 "Show the code abbreviations define in IDLWAVE mode.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7531 This lists all abbrevs where the replacement text differs from the input text.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7532 These are the ones the users want to learn to speed up their writing.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7533
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7534 The function does *not* list abbrevs which replace a word with itself
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7535 to call a hook. These hooks are used to change the case of words or
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7536 to blink the matching `begin', and the user does not need to know them.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7537
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7538 With arg, list all abbrevs with the corresponding hook.
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7539
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7540 This function was written since `list-abbrevs' looks terrible for IDLWAVE mode."
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7541
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7542 (interactive "P")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7543 (let ((table (symbol-value 'idlwave-mode-abbrev-table))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7544 abbrevs
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7545 str rpl func fmt (len-str 0) (len-rpl 0))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7546 (mapatoms
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7547 (lambda (sym)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7548 (if (symbol-value sym)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7549 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7550 (setq str (symbol-name sym)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7551 rpl (symbol-value sym)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7552 func (symbol-function sym))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7553 (if arg
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7554 (setq func (prin1-to-string func))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7555 (if (and (listp func) (stringp (nth 2 func)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7556 (setq rpl (concat "EVAL: " (nth 2 func))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7557 func "")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7558 (setq func "")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7559 (if (or arg (not (string= rpl str)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7560 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7561 (setq len-str (max len-str (length str)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7562 (setq len-rpl (max len-rpl (length rpl)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7563 (setq abbrevs (cons (list str rpl func) abbrevs)))))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7564 table)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7565 ;; sort the list
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7566 (setq abbrevs (sort abbrevs (lambda (a b) (string< (car a) (car b)))))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7567 ;; Make the format
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7568 (setq fmt (format "%%-%ds %%-%ds %%s\n" len-str len-rpl))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7569 (with-output-to-temp-buffer "*Help*"
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7570 (if arg
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7571 (progn
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7572 (princ "Abbreviations and Actions in IDLWAVE-Mode\n")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7573 (princ "=========================================\n\n")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7574 (princ (format fmt "KEY" "REPLACE" "HOOK"))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7575 (princ (format fmt "---" "-------" "----")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7576 (princ "Code Abbreviations and Templates in IDLWAVE-Mode\n")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7577 (princ "================================================\n\n")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7578 (princ (format fmt "KEY" "ACTION" ""))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7579 (princ (format fmt "---" "------" "")))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7580 (mapcar
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7581 (lambda (list)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7582 (setq str (car list)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7583 rpl (nth 1 list)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7584 func (nth 2 list))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7585 (princ (format fmt str rpl func)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7586 abbrevs)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7587 ;; Make sure each abbreviation uses only one display line
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7588 (save-excursion
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7589 (set-buffer "*Help*")
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7590 (setq truncate-lines t)))
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7591
29774
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7592 ;; Try to load online help, but catch any errors.
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7593 (condition-case nil
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7594 (idlwave-require-online-help)
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7595 (error nil))
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7596
8eff9cc9cbae Files re-installed, because changes are too massive to document them here.
Carsten Dominik <dominik@science.uva.nl>
parents: 27606
diff changeset
7597 ;; Run the hook
26956
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7598 (run-hooks 'idlwave-load-hook)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7599
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7600 (provide 'idlwave)
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7601
67b3331ff24c Major mode for editing files of the Interactive Data Language
Carsten Dominik <dominik@science.uva.nl>
parents:
diff changeset
7602 ;;; idlwave.el ends here