annotate lisp/progmodes/ada-xref.el @ 44728:7a3ac6c387fe

CC Mode update to version 5.29. This is for testing; it's not a released version.
author Martin Stjernholm <mast@lysator.liu.se>
date Mon, 22 Apr 2002 00:35:36 +0000
parents f200fce92816
children fc042127981b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38422
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 38401
diff changeset
1 ;;; ada-xref.el --- for lookup and completion in Ada mode
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
3 ;; Copyright (C) 1994, 95, 96, 97, 98, 99, 2000, 2001
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
4 ;; Free Software Foundation, Inc.
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
5
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
6 ;; Author: Markus Heritsch <Markus.Heritsch@studbox.uni-stuttgart.de>
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
7 ;; Rolf Ebert <ebert@inf.enst.fr>
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
8 ;; Emmanuel Briot <briot@gnat.com>
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
9 ;; Maintainer: Emmanuel Briot <briot@gnat.com>
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
10 ;; Ada Core Technologies's version: $Revision: 1.150 $
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
11 ;; Keywords: languages ada xref
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
12
38361
d42c9135a92d Say that the file _is_ part of Emacs.
Eli Zaretskii <eliz@gnu.org>
parents: 32301
diff changeset
13 ;; This file is part of GNU Emacs.
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
14
38401
64d8d90d180d Fix license commentary.
Gerd Moellmann <gerd@gnu.org>
parents: 38361
diff changeset
15 ;; GNU Emacs is free software; you can redistribute it and/or modify
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
16 ;; it under the terms of the GNU General Public License as published by
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
17 ;; the Free Software Foundation; either version 2, or (at your option)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
18 ;; any later version.
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
19
38401
64d8d90d180d Fix license commentary.
Gerd Moellmann <gerd@gnu.org>
parents: 38361
diff changeset
20 ;; GNU Emacs is distributed in the hope that it will be useful,
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
21 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
22 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
23 ;; GNU General Public License for more details.
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
24
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
25 ;; You should have received a copy of the GNU General Public License
38401
64d8d90d180d Fix license commentary.
Gerd Moellmann <gerd@gnu.org>
parents: 38361
diff changeset
26 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64d8d90d180d Fix license commentary.
Gerd Moellmann <gerd@gnu.org>
parents: 38361
diff changeset
27 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
64d8d90d180d Fix license commentary.
Gerd Moellmann <gerd@gnu.org>
parents: 38361
diff changeset
28 ;; Boston, MA 02111-1307, USA.
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
29
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
30 ;;; Commentary:
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
31 ;;; This Package provides a set of functions to use the output of the
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
32 ;;; cross reference capabilities of the GNAT Ada compiler
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
33 ;;; for lookup and completion in Ada mode.
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
34 ;;;
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
35 ;;; If a file *.`adp' exists in the ada-file directory, then it is
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
36 ;;; read for configuration informations. It is read only the first
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
37 ;;; time a cross-reference is asked for, and is not read later.
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
38
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
39 ;;; You need Emacs >= 20.2 to run this package
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
40
38422
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 38401
diff changeset
41 ;;; Code:
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 38401
diff changeset
42
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
43 ;; ----- Requirements -----------------------------------------------------
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
44
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
45 (require 'compile)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
46 (require 'comint)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
47
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
48 ;; ------ Use variables
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
49 (defcustom ada-xref-other-buffer t
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
50 "*If nil, always display the cross-references in the same buffer.
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
51 Otherwise create either a new buffer or a new frame."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
52 :type 'boolean :group 'ada)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
53
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
54 (defcustom ada-xref-create-ali t
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
55 "*If non-nil, run gcc whenever the cross-references are not up-to-date.
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
56 If nil, the cross-reference mode will never run gcc."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
57 :type 'boolean :group 'ada)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
58
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
59 (defcustom ada-xref-confirm-compile nil
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
60 "*If non-nil, always ask for user confirmation before compiling or running
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
61 the application."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
62 :type 'boolean :group 'ada)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
63
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
64 (defcustom ada-krunch-args "0"
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
65 "*Maximum number of characters for filenames created by gnatkr.
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
66 Set to 0, if you don't use crunched filenames. This should be a string."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
67 :type 'string :group 'ada)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
68
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
69 (defcustom ada-prj-default-comp-opt "-gnatq -gnatQ"
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
70 "Default compilation options."
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
71 :type 'string :group 'ada)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
72
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
73 (defcustom ada-prj-default-bind-opt ""
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
74 "Default binder options."
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
75 :type 'string :group 'ada)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
76
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
77 (defcustom ada-prj-default-link-opt ""
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
78 "Default linker options."
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
79 :type 'string :group 'ada)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
80
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
81 (defcustom ada-prj-default-gnatmake-opt "-g"
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
82 "Default options for gnatmake."
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
83 :type 'string :group 'ada)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
84
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
85 (defcustom ada-prj-gnatfind-switches "-rf"
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
86 "Default switches to use for gnatfind.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
87 You should modify this variable, for instance to add -a, if you are working
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
88 in an environment where most ALI files are write-protected.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
89 The command gnatfind is used every time you choose the menu
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
90 \"Show all references\"."
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
91 :type 'string :group 'ada)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
92
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
93 (defcustom ada-prj-default-comp-cmd
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
94 "${cross_prefix}gcc -x ada -c ${comp_opt} ${full_current}"
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
95 "*Default command to be used to compile a single file.
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
96 Emacs will add the filename at the end of this command. This is the same
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
97 syntax as in the project file."
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
98 :type 'string :group 'ada)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
99
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
100 (defcustom ada-prj-default-debugger "${cross_prefix}gdb"
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
101 "*Default name of the debugger. We recommend either `gdb',
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
102 `gdb --emacs_gdbtk' or `ddd --tty -fullname'."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
103 :type 'string :group 'ada)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
104
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
105 (defcustom ada-prj-default-make-cmd
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
106 (concat "${cross_prefix}gnatmake -o ${main} ${main_unit} ${gnatmake_opt} "
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
107 "-cargs ${comp_opt} -bargs ${bind_opt} -largs ${link_opt}")
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
108 "*Default command to be used to compile the application.
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
109 This is the same syntax as in the project file."
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
110 :type 'string :group 'ada)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
111
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
112 (defcustom ada-prj-default-project-file ""
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
113 "*Name of the project file to use for every Ada file.
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
114 Emacs will not try to use the standard algorithm to find the project file if
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
115 this string is not empty."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
116 :type '(file :must-match t) :group 'ada)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
117
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
118 (defcustom ada-gnatstub-opts "-q -I${src_dir}"
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
119 "*List of the options to pass to gnatsub to generate the body of a package.
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
120 This has the same syntax as in the project file (with variable substitution)."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
121 :type 'string :group 'ada)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
122
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
123 (defcustom ada-always-ask-project nil
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
124 "*If nil, use default values when no project file was found.
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
125 Otherwise, ask the user for the name of the project file to use."
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
126 :type 'boolean :group 'ada)
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
127
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
128 (defconst is-windows (memq system-type (quote (windows-nt)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
129 "True if we are running on windows NT or windows 95.")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
130
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
131 (defcustom ada-tight-gvd-integration nil
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
132 "*If non-nil, a new Emacs frame will be swallowed in GVD when debugging.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
133 If GVD is not the debugger used, nothing happens.")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
134
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
135 ;; ------- Nothing to be modified by the user below this
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
136 (defvar ada-last-prj-file ""
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
137 "Name of the last project file entered by the user.")
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
138
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
139 (defvar ada-check-switch "-gnats"
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
140 "Switch added to the command line to check the current file.")
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
141
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
142 (defconst ada-project-file-extension ".adp"
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
143 "The extension used for project files.")
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
144
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
145 (defvar ada-xref-runtime-library-specs-path '()
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
146 "Directories where the specs for the standard library is found.
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
147 This is used for cross-references.")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
148
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
149 (defvar ada-xref-runtime-library-ali-path '()
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
150 "Directories where the ali for the standard library is found.
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
151 This is used for cross-references.")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
152
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
153 (defvar ada-xref-pos-ring '()
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
154 "List of positions selected by the cross-references functions.
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
155 Used to go back to these positions.")
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
156
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
157 (defvar ada-cd-command
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
158 (if (string-match "cmdproxy.exe" shell-file-name)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
159 "cd /d"
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
160 "cd")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
161 "Command to use to change to a specific directory. On windows systems
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
162 using cmdproxy.exe as the shell, we need to use /d or the drive is never
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
163 changed.")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
164
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
165 (defvar ada-command-separator (if is-windows " && " "\n")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
166 "Separator to use when sending multiple commands to `compile' or
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
167 `start-process'.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
168 cmdproxy.exe doesn't recognize multiple-line commands, so we have to use
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
169 \"&&\" for now.")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
170
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
171 (defconst ada-xref-pos-ring-max 16
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
172 "Number of positions kept in the list ada-xref-pos-ring.")
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
173
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
174 (defvar ada-operator-re
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
175 "\\+\\|-\\|/\\|\\*\\*\\|\\*\\|=\\|&\\|abs\\|mod\\|rem\\|and\\|not\\|or\\|xor\\|<=\\|<\\|>=\\|>"
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
176 "Regexp to match for operators.")
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
177
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
178 (defvar ada-xref-project-files '()
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
179 "Associative list of project files.
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
180 It has the following format:
38441
ceb40bd97a77 (ada-xref-initialize): Fix call to add-hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38422
diff changeset
181 \((project_name . value) (project_name . value) ...)
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
182 As always, the values of the project file are defined through properties.")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
183
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
184 (defun ada-quote-cmd (cmd)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
185 "Duplicates all \\ characters in CMD so that it can be passed to `compile'"
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
186 (mapconcat 'identity (split-string cmd "\\\\") "\\\\"))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
187
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
188 (defun ada-initialize-runtime-library (cross-prefix)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
189 "Initializes the variables for the runtime library location.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
190 CROSS-PREFIX is the prefix to use for the gnatls command"
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
191 (save-excursion
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
192 (setq ada-xref-runtime-library-specs-path '()
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
193 ada-xref-runtime-library-ali-path '())
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
194 (set-buffer (get-buffer-create "*gnatls*"))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
195 (widen)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
196 (erase-buffer)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
197 ;; Catch any error in the following form (i.e gnatls was not found)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
198 (condition-case nil
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
199 ;; Even if we get an error, delete the *gnatls* buffer
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
200 (unwind-protect
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
201 (progn
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
202 (call-process (concat cross-prefix "gnatls")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
203 nil t nil "-v")
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
204 (goto-char (point-min))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
205
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
206 ;; Source path
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
207
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
208 (search-forward "Source Search Path:")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
209 (forward-line 1)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
210 (while (not (looking-at "^$"))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
211 (back-to-indentation)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
212 (unless (looking-at "<Current_Directory>")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
213 (add-to-list 'ada-xref-runtime-library-specs-path
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
214 (buffer-substring-no-properties
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
215 (point)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
216 (save-excursion (end-of-line) (point)))))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
217 (forward-line 1))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
218
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
219 ;; Object path
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
220
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
221 (search-forward "Object Search Path:")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
222 (forward-line 1)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
223 (while (not (looking-at "^$"))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
224 (back-to-indentation)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
225 (unless (looking-at "<Current_Directory>")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
226 (add-to-list 'ada-xref-runtime-library-ali-path
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
227 (buffer-substring-no-properties
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
228 (point)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
229 (save-excursion (end-of-line) (point)))))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
230 (forward-line 1))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
231 )
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
232 (kill-buffer nil))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
233 (error nil))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
234 (set 'ada-xref-runtime-library-specs-path
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
235 (reverse ada-xref-runtime-library-specs-path))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
236 (set 'ada-xref-runtime-library-ali-path
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
237 (reverse ada-xref-runtime-library-ali-path))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
238 ))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
239
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
240
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
241 (defun ada-treat-cmd-string (cmd-string)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
242 "Replace meta-sequences like ${...} in CMD-STRING with the appropriate value.
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
243 The project file must have been loaded first.
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
244 As a special case, ${current} is replaced with the name of the currently
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
245 edited file, minus extension but with directory, and ${full_current} is
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
246 replaced by the name including the extension."
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
247
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
248 (while (string-match "\\(-[^-\$IO]*[IO]\\)?\${\\([^}]+\\)}" cmd-string)
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
249 (let (value
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
250 (name (match-string 2 cmd-string)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
251 (cond
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
252 ((string= name "current")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
253 (setq value (file-name-sans-extension (buffer-file-name))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
254 ((string= name "full_current")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
255 (setq value (buffer-file-name)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
256 (t
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
257 (save-match-data
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
258 (setq value (ada-xref-get-project-field (intern name))))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
259
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
260 ;; Check if there is an environment variable with the same name
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
261 (if (null value)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
262 (if (not (setq value (getenv name)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
263 (message (concat "No environment variable " name " found"))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
264
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
265 (cond
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
266 ((null value)
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
267 (setq cmd-string (replace-match "" t t cmd-string)))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
268 ((stringp value)
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
269 (setq cmd-string (replace-match value t t cmd-string)))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
270 ((listp value)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
271 (let ((prefix (match-string 1 cmd-string)))
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
272 (setq cmd-string (replace-match
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
273 (mapconcat (lambda(x) (concat prefix x)) value " ")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
274 t t cmd-string)))))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
275 ))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
276 cmd-string)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
277
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
278 (defun ada-xref-set-default-prj-values (symbol ada-buffer)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
279 "Reset the properties in SYMBOL to the default values for ADA-BUFFER."
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
280
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
281 (let ((file (buffer-file-name ada-buffer))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
282 plist)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
283 (save-excursion
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
284 (set-buffer ada-buffer)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
285
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
286 (set 'plist
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
287 ;; Try hard to find a default value for filename, so that the user
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
288 ;; can edit his project file even if the current buffer is not an
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
289 ;; Ada file or not even associated with a file
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
290 (list 'filename (expand-file-name
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
291 (cond
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
292 (file
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
293 (ada-prj-get-prj-dir file))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
294 (ada-prj-default-project-file
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
295 ada-prj-default-project-file)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
296 (t
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
297 (message (concat "Not editing an Ada file,"
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
298 "and no default project "
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
299 "file specified!"))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
300 "")))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
301 'build_dir (file-name-as-directory (expand-file-name "."))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
302 'src_dir (list ".")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
303 'obj_dir (list ".")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
304 'casing (if (listp ada-case-exception-file)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
305 ada-case-exception-file
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
306 (list ada-case-exception-file))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
307 'comp_opt ada-prj-default-comp-opt
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
308 'bind_opt ada-prj-default-bind-opt
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
309 'link_opt ada-prj-default-link-opt
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
310 'gnatmake_opt ada-prj-default-gnatmake-opt
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
311 'gnatfind_opt ada-prj-gnatfind-switches
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
312 'main (if file
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
313 (file-name-nondirectory
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
314 (file-name-sans-extension file))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
315 "")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
316 'main_unit (if file
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
317 (file-name-nondirectory
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
318 (file-name-sans-extension file))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
319 "")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
320 'cross_prefix ""
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
321 'remote_machine ""
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
322 'comp_cmd (list (concat ada-cd-command " ${build_dir}")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
323 ada-prj-default-comp-cmd)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
324 'check_cmd (list (concat ada-prj-default-comp-cmd " "
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
325 ada-check-switch))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
326 'make_cmd (list (concat ada-cd-command " ${build_dir}")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
327 ada-prj-default-make-cmd)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
328 'run_cmd (list (concat ada-cd-command " ${build_dir}")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
329 (concat "${main}"
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
330 (if is-windows ".exe")))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
331 'debug_pre_cmd (list (concat ada-cd-command
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
332 " ${build_dir}"))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
333 'debug_cmd (concat ada-prj-default-debugger
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
334 (if is-windows " ${main}.exe"
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
335 " ${main}"))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
336 'debug_post_cmd (list nil)))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
337 )
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
338 (set symbol plist)))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
339
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
340 (defun ada-xref-get-project-field (field)
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
341 "Extract the value of FIELD from the current project file.
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
342 The project file must have been loaded first.
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
343 A default value is returned if the file was not found.
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
344
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
345 Note that for src_dir and obj_dir, you should rather use
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
346 `ada-xref-get-src-dir-field' or `ada-xref-get-obj-dir-field' which will in
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
347 addition return the default paths."
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
348
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
349 (let ((file-name ada-prj-default-project-file)
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
350 file value)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
351
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
352 ;; Get the project file (either the current one, or a default one)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
353 (setq file (or (assoc file-name ada-xref-project-files)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
354 (assoc nil ada-xref-project-files)))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
355
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
356 ;; If the file was not found, use the default values
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
357 (if file
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
358 ;; Get the value from the file
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
359 (set 'value (plist-get (cdr file) field))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
360
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
361 ;; Create a default nil file that contains the default values
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
362 (ada-xref-set-default-prj-values 'value (current-buffer))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
363 (add-to-list 'ada-xref-project-files (cons nil value))
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
364 (ada-xref-update-project-menu)
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
365 (set 'value (plist-get value field))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
366 )
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
367
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
368 ;; Substitute the ${...} constructs in all the strings, including
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
369 ;; inside lists
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
370 (cond
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
371 ((stringp value)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
372 (ada-treat-cmd-string value))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
373 ((null value)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
374 nil)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
375 ((listp value)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
376 (mapcar (lambda(x) (if x (ada-treat-cmd-string x) x)) value))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
377 (t
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
378 value)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
379 )
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
380 ))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
381
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
382
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
383 (defun ada-xref-get-src-dir-field ()
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
384 "Return the full value for src_dir, including the default directories.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
385 All the directories are returned as absolute directories."
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
386
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
387 (let ((build-dir (ada-xref-get-project-field 'build_dir)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
388 (append
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
389 ;; Add ${build_dir} in front of the path
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
390 (list build-dir)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
391
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
392 (ada-get-absolute-dir-list (ada-xref-get-project-field 'src_dir)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
393 build-dir)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
394
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
395 ;; Add the standard runtime at the end
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
396 ada-xref-runtime-library-specs-path)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
397
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
398 (defun ada-xref-get-obj-dir-field ()
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
399 "Return the full value for obj_dir, including the default directories.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
400 All the directories are returned as absolute directories."
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
401
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
402 (let ((build-dir (ada-xref-get-project-field 'build_dir)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
403 (append
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
404 ;; Add ${build_dir} in front of the path
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
405 (list build-dir)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
406
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
407 (ada-get-absolute-dir-list (ada-xref-get-project-field 'obj_dir)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
408 build-dir)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
409
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
410 ;; Add the standard runtime at the end
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
411 ada-xref-runtime-library-ali-path)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
412
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
413 (defun ada-xref-update-project-menu ()
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
414 "Update the menu Ada->Project, with the list of available project files."
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
415 (interactive)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
416 (let (submenu)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
417
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
418 ;; Create the standard items
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
419 (set 'submenu (list (cons 'Load (cons "Load..."
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
420 'ada-set-default-project-file))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
421 (cons 'New (cons "New..." 'ada-prj-new))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
422 (cons 'Edit (cons "Edit..." 'ada-prj-edit))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
423 (cons 'sep (cons "---" nil))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
424
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
425 ;; Add the new items
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
426 (mapcar
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
427 (lambda (x)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
428 (let ((name (or (car x) "<default>"))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
429 (command `(lambda ()
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
430 "Change the active project file."
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
431 (interactive)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
432 (ada-parse-prj-file ,(car x))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
433 (set 'ada-prj-default-project-file ,(car x))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
434 (ada-xref-update-project-menu))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
435 (set 'submenu
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
436 (append submenu
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
437 (list (cons (intern name)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
438 (list
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
439 'menu-item (file-name-sans-extension
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
440 (file-name-nondirectory name))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
441 command
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
442 :button (cons
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
443 :toggle
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
444 (equal ada-prj-default-project-file
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
445 (car x))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
446 ))))))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
447
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
448 ;; Parses all the known project files, and insert at least the default
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
449 ;; one (in case ada-xref-project-files is nil)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
450 (or ada-xref-project-files '(nil)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
451
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
452 (if (not ada-xemacs)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
453 (if (lookup-key ada-mode-map [menu-bar Ada Project])
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
454 (setcdr (lookup-key ada-mode-map [menu-bar Ada Project])
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
455 submenu)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
456 ))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
457
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
458
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
459 ;;-------------------------------------------------------------
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
460 ;;-- Searching a file anywhere on the source path.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
461 ;;--
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
462 ;;-- The following functions provide support for finding a file anywhere
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
463 ;;-- on the source path, without providing an explicit directory.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
464 ;;-- They also provide file name completion in the minibuffer.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
465 ;;--
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
466 ;;-- Public subprograms: ada-find-file
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
467 ;;--
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
468 ;;-------------------------------------------------------------
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
469
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
470 (defun ada-do-file-completion (string predicate flag)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
471 "Completion function when reading a file from the minibuffer.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
472 Completion is attempted in all the directories in the source path, as
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
473 defined in the project file."
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
474 (let (list
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
475 (dirs (ada-xref-get-src-dir-field)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
476
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
477 (while dirs
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
478 (if (file-directory-p (car dirs))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
479 (set 'list (append list (file-name-all-completions string (car dirs)))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
480 (set 'dirs (cdr dirs)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
481 (cond ((equal flag 'lambda)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
482 (assoc string list))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
483 (flag
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
484 list)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
485 (t
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
486 (try-completion string
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
487 (mapcar (lambda (x) (cons x 1)) list)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
488 predicate)))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
489
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
490 ;;;###autoload
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
491 (defun ada-find-file (filename)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
492 "Open a file anywhere in the source path.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
493 Completion is available."
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
494 (interactive
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
495 (list (completing-read "File: " 'ada-do-file-completion)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
496 (let ((file (ada-find-src-file-in-dir filename)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
497 (if file
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
498 (find-file file)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
499 (error (concat filename " not found in src_dir")))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
500
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
501
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
502 ;; ----- Keybindings ------------------------------------------------------
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
503
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
504 (defun ada-add-keymap ()
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
505 "Add new key bindings when using `ada-xrel.el'."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
506 (interactive)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
507 (if ada-xemacs
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
508 (progn
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
509 (define-key ada-mode-map '(shift button3) 'ada-point-and-xref)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
510 (define-key ada-mode-map '(control tab) 'ada-complete-identifier))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
511 (define-key ada-mode-map [C-tab] 'ada-complete-identifier)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
512 (define-key ada-mode-map [S-mouse-3] 'ada-point-and-xref))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
513
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
514 (define-key ada-mode-map "\C-co" 'ff-find-other-file)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
515 (define-key ada-mode-map "\C-c5\C-d" 'ada-goto-declaration-other-frame)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
516 (define-key ada-mode-map "\C-c\C-d" 'ada-goto-declaration)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
517 (define-key ada-mode-map "\C-c\C-s" 'ada-xref-goto-previous-reference)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
518 (define-key ada-mode-map "\C-c\C-x" 'ada-reread-prj-file)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
519 (define-key ada-mode-map "\C-c\C-c" 'ada-compile-application)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
520 (define-key ada-mode-map "\C-cc" 'ada-change-prj)
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
521 (define-key ada-mode-map "\C-cd" 'ada-set-default-project-file)
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
522 (define-key ada-mode-map "\C-cg" 'ada-gdb-application)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
523 (define-key ada-mode-map "\C-cr" 'ada-run-application)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
524 (define-key ada-mode-map "\C-c\C-o" 'ada-goto-parent)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
525 (define-key ada-mode-map "\C-c\C-r" 'ada-find-references)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
526 (define-key ada-mode-map "\C-c\C-v" 'ada-check-current)
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
527 (define-key ada-mode-map "\C-c\C-f" 'ada-find-file)
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
528 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
529
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
530 ;; ----- Menus --------------------------------------------------------------
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
531 (defun ada-add-ada-menu ()
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
532 "Add some items to the standard Ada mode menu.
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
533 The items are added to the menu called NAME, which should be the same
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
534 name as was passed to `ada-create-menu'."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
535 (interactive)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
536 (if ada-xemacs
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
537 (let* ((menu-list '("Ada"))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
538 (goto-menu '("Ada" "Goto"))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
539 (edit-menu '("Ada" "Edit"))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
540 (help-menu '("Ada" "Help"))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
541 (options-menu (list "Ada" "Options")))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
542 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
543 menu-list ["Check file" ada-check-current
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
544 (string= mode-name "Ada")] "Goto")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
545 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
546 menu-list ["Compile file" ada-compile-current
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
547 (string= mode-name "Ada")] "Goto")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
548 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
549 menu-list ["Build" ada-compile-application t] "Goto")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
550 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
551 menu-list ["Run" ada-run-application t] "Goto")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
552 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
553 menu-list ["Debug" ada-gdb-application t] "Goto")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
554 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
555 menu-list ["--" nil t] "Goto")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
556 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
557 goto-menu ["Goto Parent Unit" ada-goto-parent t]
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
558 "Next compilation error")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
559 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
560 goto-menu ["Goto References to any entity"
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
561 ada-find-any-references t]
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
562 "Next compilation error")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
563 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
564 goto-menu ["List References" ada-find-references t]
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
565 "Next compilation error")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
566 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
567 goto-menu ["Goto Declaration Other Frame"
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
568 ada-goto-declaration-other-frame t]
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
569 "Next compilation error")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
570 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
571 goto-menu ["Goto Declaration/Body"
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
572 ada-goto-declaration t]
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
573 "Next compilation error")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
574 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
575 goto-menu ["Goto Previous Reference"
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
576 ada-xref-goto-previous-reference t]
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
577 "Next compilation error")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
578 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
579 goto-menu ["--" nil t] "Next compilation error")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
580 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
581 edit-menu ["Complete Identifier"
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
582 ada-complete-identifier t]
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
583 "Indent Line")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
584 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
585 edit-menu ["--------" nil t] "Indent Line")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
586 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
587 help-menu ["Gnat User Guide" (info "gnat_ug")])
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
588 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
589 help-menu ["Gnat Reference Manual" (info "gnat_rm")])
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
590 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
591 help-menu ["Gcc Documentation" (info "gcc")])
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
592 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
593 help-menu ["Gdb Documentation" (info "gdb")])
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
594 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
595 help-menu ["Ada95 Reference Manual" (info "arm95")])
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
596 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
597 options-menu
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
598 ["Show Cross-References in Other Buffer"
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
599 (setq ada-xref-other-buffer
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
600 (not ada-xref-other-buffer))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
601 :style toggle :selected ada-xref-other-buffer])
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
602 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
603 options-menu
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
604 ["Automatically Recompile for Cross-References"
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
605 (setq ada-xref-create-ali (not ada-xref-create-ali))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
606 :style toggle :selected ada-xref-create-ali])
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
607 (funcall (symbol-function 'add-menu-button)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
608 options-menu
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
609 ["Confirm Commands"
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
610 (setq ada-xref-confirm-compile
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
611 (not ada-xref-confirm-compile))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
612 :style toggle :selected ada-xref-confirm-compile])
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
613 (if (string-match "gvd" ada-prj-default-debugger)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
614 (funcall (symbol-function 'add-menu-button)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
615 options-menu
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
616 ["Tight Integration With Gnu Visual Debugger"
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
617 (setq ada-tight-gvd-integration
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
618 (not ada-tight-gvd-integration))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
619 :style toggle :selected ada-tight-gvd-integration]))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
620 )
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
621
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
622 ;; for Emacs
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
623 (let* ((menu (lookup-key ada-mode-map [menu-bar Ada]))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
624 (edit-menu (lookup-key ada-mode-map [menu-bar Ada Edit]))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
625 (help-menu (lookup-key ada-mode-map [menu-bar Ada Help]))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
626 (goto-menu (lookup-key ada-mode-map [menu-bar Ada Goto]))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
627 (options-menu (lookup-key ada-mode-map [menu-bar Ada Options])))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
628
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
629 (define-key-after menu [Check] '("Check file" . ada-check-current)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
630 'Customize)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
631 (define-key-after menu [Compile] '("Compile file" . ada-compile-current)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
632 'Check)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
633 (define-key-after menu [Build] '("Build" . ada-compile-application)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
634 'Compile)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
635 (define-key-after menu [Run] '("Run" . ada-run-application) 'Build)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
636 (define-key-after menu [Debug] '("Debug" . ada-gdb-application) 'Run)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
637 (define-key-after menu [rem] '("--" . nil) 'Debug)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
638 (define-key-after menu [Project]
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
639 (cons "Project" (make-sparse-keymap)) 'rem)
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
640
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
641 (define-key help-menu [Gnat_ug]
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
642 '("Gnat User Guide" . (lambda() (interactive) (info "gnat_ug"))))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
643 (define-key help-menu [Gnat_rm]
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
644 '("Gnat Reference Manual" . (lambda() (interactive) (info "gnat_rm"))))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
645 (define-key help-menu [Gcc]
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
646 '("Gcc Documentation" . (lambda() (interactive) (info "gcc"))))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
647 (define-key help-menu [gdb]
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
648 '("Gdb Documentation" . (lambda() (interactive) (info "gdb"))))
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
649 (define-key help-menu [arm95]
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
650 '("Ada95 Reference Manual" . (lambda() (interactive) (info "arm95"))))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
651
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
652 (define-key goto-menu [rem] '("----" . nil))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
653 (define-key goto-menu [Parent] '("Goto Parent Unit"
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
654 . ada-goto-parent))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
655 (define-key goto-menu [References-any]
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
656 '("Goto References to any entity" . ada-find-any-references))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
657 (define-key goto-menu [References]
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
658 '("List References" . ada-find-references))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
659 (define-key goto-menu [Prev]
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
660 '("Goto Previous Reference" . ada-xref-goto-previous-reference))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
661 (define-key goto-menu [Decl-other]
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
662 '("Goto Declaration Other Frame" . ada-goto-declaration-other-frame))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
663 (define-key goto-menu [Decl]
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
664 '("Goto Declaration/Body" . ada-goto-declaration))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
665
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
666 (define-key edit-menu [rem] '("----" . nil))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
667 (define-key edit-menu [Complete] '("Complete Identifier"
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
668 . ada-complete-identifier))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
669
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
670 (define-key-after options-menu [xrefrecompile]
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
671 '(menu-item "Automatically Recompile for Cross-References"
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
672 (lambda()(interactive)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
673 (setq ada-xref-create-ali (not ada-xref-create-ali)))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
674 :button (:toggle . ada-xref-create-ali)) t)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
675 (define-key-after options-menu [xrefconfirm]
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
676 '(menu-item "Confirm Commands"
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
677 (lambda()(interactive)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
678 (setq ada-xref-confirm-compile
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
679 (not ada-xref-confirm-compile)))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
680 :button (:toggle . ada-xref-confirm-compile)) t)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
681 (define-key-after options-menu [xrefother]
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
682 '(menu-item "Show Cross-References in Other Buffer"
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
683 (lambda()(interactive)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
684 (setq ada-xref-other-buffer (not ada-xref-other-buffer)))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
685 :button (:toggle . ada-xref-other-buffer)) t)
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
686
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
687 (if (string-match "gvd" ada-prj-default-debugger)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
688 (define-key-after options-menu [tightgvd]
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
689 '(menu-item "Tight Integration With Gnu Visual Debugger"
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
690 (lambda()(interactive)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
691 (setq ada-tight-gvd-integration
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
692 (not ada-tight-gvd-integration)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
693 :button (:toggle . ada-tight-gvd-integration)) t))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
694
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
695 (define-key ada-mode-map [menu-bar Ada Edit rem3] '("------------" . nil))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
696 (define-key ada-mode-map [menu-bar Ada Edit open-file-from-src-path]
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
697 '("Search File on source path..." . ada-find-file))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
698 )
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
699 )
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
700 (ada-xref-update-project-menu)
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
701 )
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
702
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
703 ;; ----- Utilities -------------------------------------------------
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
704
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
705 (defun ada-require-project-file ()
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
706 "If no project file is currently active, load a default one."
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
707 (if (or (not ada-prj-default-project-file)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
708 (not ada-xref-project-files)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
709 (string= ada-prj-default-project-file ""))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
710 (ada-reread-prj-file)))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
711
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
712 (defun ada-xref-push-pos (filename position)
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
713 "Push (FILENAME, POSITION) on the position ring for cross-references."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
714 (setq ada-xref-pos-ring (cons (list position filename) ada-xref-pos-ring))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
715 (if (> (length ada-xref-pos-ring) ada-xref-pos-ring-max)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
716 (setcdr (nthcdr (1- ada-xref-pos-ring-max) ada-xref-pos-ring) nil)))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
717
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
718 (defun ada-xref-goto-previous-reference ()
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
719 "Go to the previous cross-reference we were on."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
720 (interactive)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
721 (if ada-xref-pos-ring
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
722 (let ((pos (car ada-xref-pos-ring)))
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
723 (setq ada-xref-pos-ring (cdr ada-xref-pos-ring))
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
724 (find-file (car (cdr pos)))
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
725 (goto-char (car pos)))))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
726
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
727 (defun ada-convert-file-name (name)
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
728 "Converts from NAME to a name that can be used by the compilation commands.
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
729 This is overriden on VMS to convert from VMS filenames to Unix filenames."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
730 name)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
731
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
732 (defun ada-set-default-project-file (name)
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
733 "Set the file whose name is NAME as the default project file."
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
734 (interactive "fProject file:")
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
735 (set 'ada-prj-default-project-file name)
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
736 (ada-reread-prj-file name)
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
737 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
738
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
739 ;; ------ Handling the project file -----------------------------
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
740
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
741 (defun ada-prj-find-prj-file (&optional no-user-question)
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
742 "Find the prj file associated with the current buffer.
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
743 If NO-USER-QUESTION is non-nil, use a default file if not project file was
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
744 found, and do not ask the user.
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
745 If the buffer is not an Ada buffer, associate it with the default project
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
746 file. If none is set, return nil."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
747
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
748 (let (selected)
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
749
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
750 ;; Use the active project file if there is one.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
751 ;; This is also valid if we don't currently have an Ada buffer, or if
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
752 ;; the current buffer is not a real file (for instance an emerge buffer)
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
753
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
754 (if (or (not (string= mode-name "Ada"))
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
755 (not (buffer-file-name))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
756 (and ada-prj-default-project-file
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
757 (not (string= ada-prj-default-project-file ""))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
758 (set 'selected ada-prj-default-project-file)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
759
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
760 ;; other cases: use a more complex algorithm
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
761
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
762 (let* ((current-file (buffer-file-name))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
763 (first-choice (concat
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
764 (file-name-sans-extension current-file)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
765 ada-project-file-extension))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
766 (dir (file-name-directory current-file))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
767
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
768 ;; on Emacs 20.2, directory-files does not work if
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
769 ;; parse-sexp-lookup-properties is set
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
770 (parse-sexp-lookup-properties nil)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
771 (prj-files (directory-files
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
772 dir t
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
773 (concat ".*" (regexp-quote
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
774 ada-project-file-extension) "$")))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
775 (choice nil))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
776
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
777 (cond
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
778
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
779 ;; Else if there is a project file with the same name as the Ada
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
780 ;; file, but not the same extension.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
781 ((file-exists-p first-choice)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
782 (set 'selected first-choice))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
783
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
784 ;; Else if only one project file was found in the current directory
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
785 ((= (length prj-files) 1)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
786 (set 'selected (car prj-files)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
787
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
788 ;; Else if there are multiple files, ask the user
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
789 ((and (> (length prj-files) 1) (not no-user-question))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
790 (save-window-excursion
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
791 (with-output-to-temp-buffer "*choice list*"
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
792 (princ "There are more than one possible project file.\n")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
793 (princ "Which one should we use ?\n\n")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
794 (princ " no. file name \n")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
795 (princ " --- ------------------------\n")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
796 (let ((counter 1))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
797 (while (<= counter (length prj-files))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
798 (princ (format " %2d) %s\n"
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
799 counter
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
800 (nth (1- counter) prj-files)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
801 (setq counter (1+ counter))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
802 ))) ; end of with-output-to ...
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
803 (setq choice nil)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
804 (while (or
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
805 (not choice)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
806 (not (integerp choice))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
807 (< choice 1)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
808 (> choice (length prj-files)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
809 (setq choice (string-to-int
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
810 (read-from-minibuffer "Enter No. of your choice: "))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
811 (set 'selected (nth (1- choice) prj-files))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
812
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
813 ;; Else if no project file was found in the directory, ask a name
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
814 ;; to the user, using as a default value the last one entered by
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
815 ;; the user
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
816 ((= (length prj-files) 0)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
817 (unless (or no-user-question (not ada-always-ask-project))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
818 (setq ada-last-prj-file
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
819 (read-file-name
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
820 (concat "project file [" ada-last-prj-file "]:")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
821 nil ada-last-prj-file))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
822 (unless (string= ada-last-prj-file "")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
823 (set 'selected ada-last-prj-file))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
824 )))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
825 selected
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
826 ))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
827
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
828
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
829 (defun ada-parse-prj-file (prj-file)
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
830 "Reads and parses the PRJ-FILE file if it was found.
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
831 The current buffer should be the ada-file buffer."
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
832 (if prj-file
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
833 (let (project src_dir obj_dir make_cmd comp_cmd check_cmd casing
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
834 run_cmd debug_pre_cmd debug_post_cmd
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
835 (ada-buffer (current-buffer)))
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
836 (setq prj-file (expand-file-name prj-file))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
837
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
838 ;; Initialize the project with the default values
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
839 (ada-xref-set-default-prj-values 'project (current-buffer))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
840
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
841 ;; Do not use find-file below, since we don't want to show this
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
842 ;; buffer. If the file is open through speedbar, we can't use
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
843 ;; find-file anyway, since the speedbar frame is special and does not
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
844 ;; allow the selection of a file in it.
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
845
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
846 (set-buffer (find-file-noselect prj-file))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
847
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
848 (widen)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
849 (goto-char (point-min))
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
850
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
851 ;; Now overrides these values with the project file
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
852 (while (not (eobp))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
853 (if (looking-at "^\\([^=]+\\)=\\(.*\\)")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
854 (cond
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
855 ((string= (match-string 1) "src_dir")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
856 (add-to-list 'src_dir
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
857 (file-name-as-directory (match-string 2))))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
858 ((string= (match-string 1) "obj_dir")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
859 (add-to-list 'obj_dir
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
860 (file-name-as-directory (match-string 2))))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
861 ((string= (match-string 1) "casing")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
862 (set 'casing (cons (match-string 2) casing)))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
863 ((string= (match-string 1) "build_dir")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
864 (set 'project
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
865 (plist-put project 'build_dir
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
866 (file-name-as-directory (match-string 2)))))
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
867 ((string= (match-string 1) "make_cmd")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
868 (add-to-list 'make_cmd (match-string 2)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
869 ((string= (match-string 1) "comp_cmd")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
870 (add-to-list 'comp_cmd (match-string 2)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
871 ((string= (match-string 1) "check_cmd")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
872 (add-to-list 'check_cmd (match-string 2)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
873 ((string= (match-string 1) "run_cmd")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
874 (add-to-list 'run_cmd (match-string 2)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
875 ((string= (match-string 1) "debug_pre_cmd")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
876 (add-to-list 'debug_pre_cmd (match-string 2)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
877 ((string= (match-string 1) "debug_post_cmd")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
878 (add-to-list 'debug_post_cmd (match-string 2)))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
879 (t
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
880 (set 'project (plist-put project (intern (match-string 1))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
881 (match-string 2))))))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
882 (forward-line 1))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
883
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
884 (if src_dir (set 'project (plist-put project 'src_dir
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
885 (reverse src_dir))))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
886 (if obj_dir (set 'project (plist-put project 'obj_dir
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
887 (reverse obj_dir))))
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
888 (if casing (set 'project (plist-put project 'casing
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
889 (reverse casing))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
890 (if make_cmd (set 'project (plist-put project 'make_cmd
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
891 (reverse make_cmd))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
892 (if comp_cmd (set 'project (plist-put project 'comp_cmd
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
893 (reverse comp_cmd))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
894 (if check_cmd (set 'project (plist-put project 'check_cmd
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
895 (reverse check_cmd))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
896 (if run_cmd (set 'project (plist-put project 'run_cmd
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
897 (reverse run_cmd))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
898 (set 'project (plist-put project 'debug_post_cmd
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
899 (reverse debug_post_cmd)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
900 (set 'project (plist-put project 'debug_pre_cmd
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
901 (reverse debug_pre_cmd)))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
902
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
903 ;; Delete the default project file from the list, if it is there.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
904 ;; Note that in that case, this default project is the only one in
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
905 ;; the list
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
906 (if (assoc nil ada-xref-project-files)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
907 (setq ada-xref-project-files nil))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
908
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
909 ;; Memorize the newly read project file
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
910 (if (assoc prj-file ada-xref-project-files)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
911 (setcdr (assoc prj-file ada-xref-project-files) project)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
912 (add-to-list 'ada-xref-project-files (cons prj-file project)))
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
913
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
914 ;; Set the project file as the active one.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
915 (setq ada-prj-default-project-file prj-file)
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
916
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
917 ;; Sets up the compilation-search-path so that Emacs is able to
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
918 ;; go to the source of the errors in a compilation buffer
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
919 (setq compilation-search-path (ada-xref-get-src-dir-field))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
920
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
921 ;; Set the casing exceptions file list
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
922 (if casing
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
923 (progn
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
924 (setq ada-case-exception-file (reverse casing))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
925 (ada-case-read-exceptions)))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
926
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
927 ;; Add the directories to the search path for ff-find-other-file
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
928 ;; Do not add the '/' or '\' at the end
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
929 (setq ada-search-directories
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
930 (append (mapcar 'directory-file-name compilation-search-path)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
931 ada-search-directories))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
932
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
933 ;; Kill the .ali buffer
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
934 (kill-buffer nil)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
935 (set-buffer ada-buffer)
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
936
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
937 (ada-xref-update-project-menu)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
938 )
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
939
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
940 ;; No prj file ? => Setup default values
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
941 ;; Note that nil means that all compilation modes will first look in the
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
942 ;; current directory, and only then in the current file's directory. This
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
943 ;; current file is assumed at this point to be in the common source
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
944 ;; directory.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
945 (setq compilation-search-path (list nil default-directory))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
946 ))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
947
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
948
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
949 (defun ada-find-references (&optional pos)
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
950 "Find all references to the entity under POS.
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
951 Calls gnatfind to find the references."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
952 (interactive "")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
953 (unless pos
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
954 (set 'pos (point)))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
955 (ada-require-project-file)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
956
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
957 (let* ((identlist (ada-read-identifier pos))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
958 (alifile (ada-get-ali-file-name (ada-file-of identlist)))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
959 (process-environment (ada-set-environment)))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
960
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
961 (set-buffer (get-file-buffer (ada-file-of identlist)))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
962
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
963 ;; if the file is more recent than the executable
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
964 (if (or (buffer-modified-p (current-buffer))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
965 (file-newer-than-file-p (ada-file-of identlist) alifile))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
966 (ada-find-any-references (ada-name-of identlist)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
967 (ada-file-of identlist)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
968 nil nil)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
969 (ada-find-any-references (ada-name-of identlist)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
970 (ada-file-of identlist)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
971 (ada-line-of identlist)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
972 (ada-column-of identlist))))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
973 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
974
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
975 (defun ada-find-any-references (entity &optional file line column)
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
976 "Search for references to any entity whose name is ENTITY.
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
977 ENTITY was first found the location given by FILE, LINE and COLUMN."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
978 (interactive "sEntity name: ")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
979 (ada-require-project-file)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
980
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
981 ;; Prepare the gnatfind command. Note that we must protect the quotes
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
982 ;; around operators, so that they are correctly handled and can be
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
983 ;; processed (gnatfind \"+\":...).
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
984 (let* ((quote-entity
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
985 (if (= (aref entity 0) ?\")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
986 (if is-windows
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
987 (concat "\\\"" (substring entity 1 -1) "\\\"")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
988 (concat "'\"" (substring entity 1 -1) "\"'"))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
989 entity))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
990 (switches (ada-xref-get-project-field 'gnatfind_opt))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
991 (command (concat "gnatfind " switches " "
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
992 quote-entity
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
993 (if file (concat ":" (file-name-nondirectory file)))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
994 (if line (concat ":" line))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
995 (if column (concat ":" column)))))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
996
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
997 ;; If a project file is defined, use it
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
998 (if (and ada-prj-default-project-file
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
999 (not (string= ada-prj-default-project-file "")))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1000 (setq command (concat command " -p" ada-prj-default-project-file)))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1001
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
1002 (compile-internal command "No more references" "gnatfind")
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1003
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1004 ;; Hide the "Compilation" menu
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1005 (save-excursion
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1006 (set-buffer "*gnatfind*")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1007 (local-unset-key [menu-bar compilation-menu]))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1008 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1009 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1010
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1011 (defalias 'ada-change-prj (symbol-function 'ada-set-default-project-file))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1012
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1013 ;; ----- Identlist manipulation -------------------------------------------
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1014 ;; An identlist is a vector that is used internally to reference an identifier
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1015 ;; To facilitate its use, we provide the following macros
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1016
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1017 (defmacro ada-make-identlist () (make-vector 8 nil))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1018 (defmacro ada-name-of (identlist) (list 'aref identlist 0))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1019 (defmacro ada-line-of (identlist) (list 'aref identlist 1))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1020 (defmacro ada-column-of (identlist) (list 'aref identlist 2))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1021 (defmacro ada-file-of (identlist) (list 'aref identlist 3))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1022 (defmacro ada-ali-index-of (identlist) (list 'aref identlist 4))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1023 (defmacro ada-declare-file-of (identlist) (list 'aref identlist 5))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1024 (defmacro ada-references-of (identlist) (list 'aref identlist 6))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1025 (defmacro ada-on-declaration (identlist) (list 'aref identlist 7))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1026
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1027 (defmacro ada-set-name (identlist name) (list 'aset identlist 0 name))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1028 (defmacro ada-set-line (identlist line) (list 'aset identlist 1 line))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1029 (defmacro ada-set-column (identlist col) (list 'aset identlist 2 col))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1030 (defmacro ada-set-file (identlist file) (list 'aset identlist 3 file))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1031 (defmacro ada-set-ali-index (identlist index) (list 'aset identlist 4 index))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1032 (defmacro ada-set-declare-file (identlist file) (list 'aset identlist 5 file))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1033 (defmacro ada-set-references (identlist ref) (list 'aset identlist 6 ref))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1034 (defmacro ada-set-on-declaration (ident value) (list 'aset ident 7 value))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1035
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1036 (defsubst ada-get-ali-buffer (file)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1037 "Reads the ali file into a new buffer, and returns this buffer's name"
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1038 (find-file-noselect (ada-get-ali-file-name file)))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1039
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1040
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1041
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1042 ;; ----- Identifier Completion --------------------------------------------
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1043 (defun ada-complete-identifier (pos)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1044 "Tries to complete the identifier around POS.
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1045 The feature is only available if the files where compiled not using the -gnatx
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
1046 option."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1047 (interactive "d")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1048 (ada-require-project-file)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1049
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1050 ;; Initialize function-local variables and jump to the .ali buffer
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1051 ;; Note that for regexp search is case insensitive too
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1052 (let* ((curbuf (current-buffer))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1053 (identlist (ada-read-identifier pos))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1054 (sofar (concat "^[0-9]+[a-zA-Z][0-9]+[ *]\\("
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1055 (regexp-quote (ada-name-of identlist))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1056 "[a-zA-Z0-9_]*\\)"))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1057 (completed nil)
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1058 (symalist nil))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1059
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1060 ;; Open the .ali file
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1061 (set-buffer (ada-get-ali-buffer (buffer-file-name)))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1062 (goto-char (point-max))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1063
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1064 ;; build an alist of possible completions
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1065 (while (re-search-backward sofar nil t)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1066 (setq symalist (cons (cons (match-string 1) nil) symalist)))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1067
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1068 (setq completed (try-completion "" symalist))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1069
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1070 ;; kills .ali buffer
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1071 (kill-buffer nil)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1072
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1073 ;; deletes the incomplete identifier in the buffer
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1074 (set-buffer curbuf)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1075 (looking-at "[a-zA-Z0-9_]+")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1076 (replace-match "")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1077 ;; inserts the completed symbol
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1078 (insert completed)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1079 ))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1080
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1081 ;; ----- Cross-referencing ----------------------------------------
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1082
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1083 (defun ada-point-and-xref ()
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1084 "Calls `mouse-set-point' and then `ada-goto-declaration'."
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1085 (interactive)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1086 (mouse-set-point last-input-event)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1087 (ada-goto-declaration (point)))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1088
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1089 (defun ada-goto-declaration (pos &optional other-frame)
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
1090 "Display the declaration of the identifier around POS.
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
1091 The declaration is shown in another buffer if `ada-xref-other-buffer' is
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1092 non-nil.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1093 If OTHER-FRAME is non-nil, display the cross-reference in another frame."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1094 (interactive "d")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1095 (ada-require-project-file)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1096 (push-mark pos)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1097 (ada-xref-push-pos (buffer-file-name) pos)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1098
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1099 ;; First try the standard algorithm by looking into the .ali file, but if
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1100 ;; that file was too old or even did not exist, try to look in the whole
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1101 ;; object path for a possible location.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1102 (let ((identlist (ada-read-identifier pos)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1103 (condition-case nil
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1104 (ada-find-in-ali identlist other-frame)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1105 (error (ada-find-in-src-path identlist other-frame)))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1106
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1107 (defun ada-goto-declaration-other-frame (pos &optional other-frame)
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
1108 "Display the declaration of the identifier around POS.
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
1109 The declation is shown in another frame if `ada-xref-other-buffer' is non-nil."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1110 (interactive "d")
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1111 (ada-goto-declaration pos t))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1112
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1113 (defun ada-remote (command)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1114 "Return the remote version of COMMAND, or COMMAND if remote_machine is nil."
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1115 (let ((machine (ada-xref-get-project-field 'remote_machine)))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1116 (if (or (not machine) (string= machine ""))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1117 command
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1118 (format "%s %s '(%s)'"
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1119 remote-shell-program
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1120 machine
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1121 command))))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1122
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1123 (defun ada-get-absolute-dir-list (dir-list root-dir)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1124 "Returns the list of absolute directories found in dir-list.
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1125 If a directory is a relative directory, the value of ROOT-DIR is added in
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1126 front."
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1127 (mapcar (lambda (x) (expand-file-name x root-dir)) dir-list))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1128
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1129 (defun ada-set-environment ()
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1130 "Return the new value for process-environment.
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1131 It modifies the source path and object path with the values found in the
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1132 project file."
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1133 (let ((include (getenv "ADA_INCLUDE_PATH"))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1134 (objects (getenv "ADA_OBJECTS_PATH"))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1135 (build-dir (ada-xref-get-project-field 'build_dir)))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1136 (if include
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1137 (set 'include (concat path-separator include)))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1138 (if objects
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1139 (set 'objects (concat path-separator objects)))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1140 (cons
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1141 (concat "ADA_INCLUDE_PATH="
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1142 (mapconcat (lambda(x) (expand-file-name x build-dir))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1143 (ada-xref-get-project-field 'src_dir)
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1144 path-separator)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1145 include)
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1146 (cons
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1147 (concat "ADA_OBJECTS_PATH="
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1148 (mapconcat (lambda(x) (expand-file-name x build-dir))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1149 (ada-xref-get-project-field 'obj_dir)
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1150 path-separator)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1151 objects)
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1152 process-environment))))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1153
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1154 (defun ada-compile-application (&optional arg)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1155 "Compiles the application, using the command found in the project file.
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1156 If ARG is not nil, ask for user confirmation."
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1157 (interactive "P")
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1158 (ada-require-project-file)
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1159 (let ((cmd (ada-xref-get-project-field 'make_cmd))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1160 (process-environment (ada-set-environment))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1161 (compilation-scroll-output t))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1162
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1163 (setq compilation-search-path (ada-xref-get-src-dir-field))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1164
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1165 ;; If no project file was found, ask the user
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1166 (unless cmd
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1167 (setq cmd '("") arg t))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1168
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1169 ;; Make a single command from the list of commands, including the
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1170 ;; commands to run it on a remote machine.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1171 (setq cmd (ada-remote (mapconcat 'identity cmd ada-command-separator)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1172
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1173 (if (or ada-xref-confirm-compile arg)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1174 (setq cmd (read-from-minibuffer "enter command to compile: " cmd)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1175
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1176 ;; Insert newlines so as to separate the name of the commands to run
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1177 ;; and the output of the commands. this doesn't work with cmdproxy.exe,
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1178 ;; which gets confused by newline characters.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1179 (if (not (string-match "cmdproxy.exe" shell-file-name))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1180 (setq cmd (concat cmd "\n\n")))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1181
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1182 (compile (ada-quote-cmd cmd))))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1183
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1184 (defun ada-compile-current (&optional arg prj-field)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1185 "Recompile the current file.
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1186 If ARG is not nil, ask for user confirmation of the command.
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1187 PRJ-FIELD is the name of the field to use in the project file to get the
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1188 command, and should be either comp_cmd (default) or check_cmd."
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1189 (interactive "P")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1190 (ada-require-project-file)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1191 (let* ((field (if prj-field prj-field 'comp_cmd))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1192 (cmd (ada-xref-get-project-field field))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1193 (process-environment (ada-set-environment))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1194 (compilation-scroll-output t))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1195
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1196 (setq compilation-search-path (ada-xref-get-src-dir-field))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1197
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1198 (unless cmd
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1199 (setq cmd '("") arg t))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1200
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1201 ;; Make a single command from the list of commands, including the
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1202 ;; commands to run it on a remote machine.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1203 (setq cmd (ada-remote (mapconcat 'identity cmd ada-command-separator)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1204
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1205 ;; If no project file was found, ask the user
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1206 (if (or ada-xref-confirm-compile arg)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1207 (setq cmd (read-from-minibuffer "enter command to compile: " cmd)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1208
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1209 ;; Insert newlines so as to separate the name of the commands to run
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1210 ;; and the output of the commands. this doesn't work with cmdproxy.exe,
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1211 ;; which gets confused by newline characters.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1212 (if (not (string-match "cmdproxy.exe" shell-file-name))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1213 (setq cmd (concat cmd "\n\n")))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1214
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1215 (compile (ada-quote-cmd cmd))))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1216
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1217 (defun ada-check-current (&optional arg)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1218 "Recompile the current file.
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1219 If ARG is not nil, ask for user confirmation of the command."
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1220 (interactive "P")
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1221 (ada-compile-current arg 'check_cmd))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1222
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1223 (defun ada-run-application (&optional arg)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1224 "Run the application.
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1225 if ARG is not-nil, asks for user confirmation."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1226 (interactive)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1227 (ada-require-project-file)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1228
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1229 (let ((machine (ada-xref-get-project-field 'cross_prefix)))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1230 (if (and machine (not (string= machine "")))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1231 (error "This feature is not supported yet for cross environments")))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1232
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1233 (let ((command (ada-xref-get-project-field 'run_cmd)))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1234
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1235 ;; Guess the command if it wasn't specified
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1236 (if (not command)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1237 (set 'command (list (file-name-sans-extension (buffer-name)))))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1238
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1239 ;; Modify the command to run remotely
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1240 (setq command (ada-remote (mapconcat 'identity command
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1241 ada-command-separator)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1242
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1243 ;; Ask for the arguments to the command if required
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1244 (if (or ada-xref-confirm-compile arg)
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1245 (setq command (read-from-minibuffer "Enter command to execute: "
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1246 command)))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1247
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1248 ;; Run the command
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1249 (save-excursion
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1250 (set-buffer (get-buffer-create "*run*"))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1251 (set 'buffer-read-only nil)
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1252
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1253 (erase-buffer)
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1254 (start-process "run" (current-buffer) shell-file-name
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1255 "-c" command)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1256 (comint-mode)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1257 ;; Set these two variables to their default values, since otherwise
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1258 ;; the output buffer is scrolled so that only the last output line
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1259 ;; is visible at the top of the buffer.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1260 (set (make-local-variable 'scroll-step) 0)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1261 (set (make-local-variable 'scroll-conservatively) 0)
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1262 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1263 (display-buffer "*run*")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1264
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1265 ;; change to buffer *run* for interactive programs
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1266 (other-window 1)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1267 (switch-to-buffer "*run*")
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1268 ))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1269
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1270 (defun ada-gdb-application (&optional arg executable-name)
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1271 "Start the debugger on the application.
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1272 EXECUTABLE-NAME, if non-nil, is debugged instead of the file specified in the
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1273 project file.
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1274 If ARG is non-nil, ask the user to confirm the command."
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1275 (interactive "P")
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1276 (let ((buffer (current-buffer))
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1277 cmd pre-cmd post-cmd)
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1278 (ada-require-project-file)
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1279 (setq cmd (if executable-name
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1280 (concat ada-prj-default-debugger " " executable-name)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1281 (ada-xref-get-project-field 'debug_cmd))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1282 pre-cmd (ada-xref-get-project-field 'debug_pre_cmd)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1283 post-cmd (ada-xref-get-project-field 'debug_post_cmd))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1284
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1285 ;; If the command was not given in the project file, start a bare gdb
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1286 (if (not cmd)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1287 (set 'cmd (concat ada-prj-default-debugger
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1288 " "
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1289 (or executable-name
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1290 (file-name-sans-extension (buffer-file-name))))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1291
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1292 ;; For gvd, add an extra switch so that the Emacs window is completly
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1293 ;; swallowed inside the Gvd one
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1294 (if (and ada-tight-gvd-integration
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1295 (string-match "^[^ \t]*gvd" cmd))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1296 ;; Start a new frame, so that when gvd exists we do not kill Emacs
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1297 ;; We make sure that gvd swallows the new frame, not the one the
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1298 ;; user has been using until now
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1299 ;; The frame is made invisible initially, so that GtkPlug gets a
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1300 ;; chance to fully manage it. Then it works fine with Enlightenment
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1301 ;; as well
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1302 (let ((frame (make-frame '((visibility . nil)))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1303 (set 'cmd (concat
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1304 cmd " --editor-window="
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1305 (cdr (assoc 'outer-window-id (frame-parameters frame)))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1306 (select-frame frame)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1307
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1308 ;; Add a -fullname switch
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1309 ;; Use the remote machine
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1310 (set 'cmd (ada-remote (concat cmd " -fullname ")))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1311
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1312 ;; Ask for confirmation if required
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1313 (if (or arg ada-xref-confirm-compile)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1314 (set 'cmd (read-from-minibuffer "enter command to debug: " cmd)))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1315
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1316 (let (comint-exec
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1317 in-post-mode
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1318 gud-gdb-massage-args)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1319
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1320 ;; Do not add -fullname, since we can have a 'rsh' command in front.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1321 (fset 'gud-gdb-massage-args (lambda (file args) args))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1322
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1323 (set 'pre-cmd (mapconcat 'identity pre-cmd ada-command-separator))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1324 (if (not (equal pre-cmd ""))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1325 (setq pre-cmd (concat pre-cmd ada-command-separator)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1326
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1327 (set 'post-cmd (mapconcat 'identity post-cmd "\n"))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1328 (if post-cmd
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1329 (set 'post-cmd (concat post-cmd "\n")))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1330
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1331 ;; Temporarily replaces the definition of `comint-exec' so that we
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1332 ;; can execute commands before running gdb.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1333 (fset 'comint-exec
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1334 `(lambda (buffer name command startfile switches)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1335 (let (compilation-buffer-name-function)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1336 (save-excursion
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1337 (set 'compilation-buffer-name-function
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1338 (lambda(x) (buffer-name buffer)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1339 (compile (ada-quote-cmd
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1340 (concat ,pre-cmd
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1341 command " "
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1342 (mapconcat 'identity switches " "))))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1343 ))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1344
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1345 ;; Tight integration should force the tty mode
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1346 (if (and (string-match "gvd" (comint-arguments cmd 0 0))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1347 ada-tight-gvd-integration
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1348 (not (string-match "--tty" cmd)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1349 (setq cmd (concat cmd "--tty")))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1350
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1351 (if (and (string-match "jdb" (comint-arguments cmd 0 0))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1352 (boundp 'jdb))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1353 (funcall (symbol-function 'jdb) cmd)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1354 (gdb cmd))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1355
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1356 ;; Send post-commands to the debugger
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1357 (process-send-string (get-buffer-process (current-buffer)) post-cmd)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1358
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1359 ;; Move to the end of the debugger buffer, so that it is automatically
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1360 ;; scrolled from then on.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1361 (end-of-buffer)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1362
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1363 ;; Display both the source window and the debugger window (the former
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1364 ;; above the latter). No need to show the debugger window unless it
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1365 ;; is going to have some relevant information.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1366 (if (or (not (string-match "gvd" (comint-arguments cmd 0 0)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1367 (string-match "--tty" cmd))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1368 (split-window-vertically))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1369 (switch-to-buffer buffer)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1370 )))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1371
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1372
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1373 (defun ada-reread-prj-file (&optional filename)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1374 "Forces Emacs to read either FILENAME or the project file associated
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1375 with the current buffer.
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1376 Otherwise, this file is only read once, and never read again.
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1377 Since the information in the project file is shared between all buffers, this
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1378 automatically modifies the setup for all the Ada buffer that use this file."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1379 (interactive "P")
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1380 (if filename
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1381 (ada-parse-prj-file filename)
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1382 (ada-parse-prj-file (ada-prj-find-prj-file)))
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1383
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1384 ;; Reread the location of the standard runtime library
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1385 (ada-initialize-runtime-library
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1386 (or (ada-xref-get-project-field 'cross-prefix) ""))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1387 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1388
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1389 ;; ------ Private routines
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1390
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1391 (defun ada-xref-current (file &optional ali-file-name)
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
1392 "Update the cross-references for FILE.
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1393 This in fact recompiles FILE to create ALI-FILE-NAME.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1394 This function returns the name of the file that was recompiled to generate
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1395 the cross-reference information. Note that the ali file can then be deduced by
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1396 replacing the file extension with .ali"
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1397 ;; kill old buffer
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1398 (if (and ali-file-name
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1399 (get-file-buffer ali-file-name))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1400 (kill-buffer (get-file-buffer ali-file-name)))
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1401
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1402 (let* ((name (ada-convert-file-name file))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1403 (body-name (or (ada-get-body-name name) name)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1404
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1405 ;; Always recompile the body when we can. We thus temporarily switch to a
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1406 ;; buffer than contains the body of the unit
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1407 (save-excursion
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1408 (let ((body-visible (find-buffer-visiting body-name))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1409 process)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1410 (if body-visible
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1411 (set-buffer body-visible)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1412 (find-file body-name))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1413
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1414 ;; Execute the compilation. Note that we must wait for the end of the
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1415 ;; process, or the ALI file would still not be available.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1416 ;; Unfortunately, the underlying `compile' command that we use is
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1417 ;; asynchronous.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1418 (ada-compile-current)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1419 (setq process (get-buffer-process "*compilation*"))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1420
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1421 (while (and process
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1422 (not (equal (process-status process) 'exit)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1423 (sit-for 1))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1424
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1425 ;; remove the buffer for the body if it wasn't there before
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1426 (unless body-visible
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1427 (kill-buffer (find-buffer-visiting body-name)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1428 ))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1429 body-name))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1430
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1431 (defun ada-find-file-in-dir (file dir-list)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1432 "Search for FILE in DIR-LIST."
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1433 (let (found)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1434 (while (and (not found) dir-list)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1435 (set 'found (concat (file-name-as-directory (car dir-list))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1436 (file-name-nondirectory file)))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1437
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1438 (unless (file-exists-p found)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1439 (set 'found nil))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1440 (set 'dir-list (cdr dir-list)))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1441 found))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1442
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1443 (defun ada-find-ali-file-in-dir (file)
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1444 "Find an .ali file in obj_dir. The current buffer must be the Ada file.
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1445 Adds build_dir in front of the search path to conform to gnatmake's behavior,
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1446 and the standard runtime location at the end."
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1447 (ada-find-file-in-dir file (ada-xref-get-obj-dir-field)))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1448
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1449 (defun ada-find-src-file-in-dir (file)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1450 "Find a source file in src_dir. The current buffer must be the Ada file.
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1451 Adds src_dir in front of the search path to conform to gnatmake's behavior,
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1452 and the standard runtime location at the end."
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1453 (ada-find-file-in-dir file (ada-xref-get-src-dir-field)))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1454
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1455 (defun ada-get-ali-file-name (file)
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
1456 "Create the ali file name for the ada-file FILE.
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
1457 The file is searched for in every directory shown in the obj_dir lines of
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
1458 the project file."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1459
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1460 ;; This function has to handle the special case of non-standard
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1461 ;; file names (i.e. not .adb or .ads)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1462 ;; The trick is the following:
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1463 ;; 1- replace the extension of the current file with .ali,
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1464 ;; and look for this file
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1465 ;; 2- If this file is found:
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1466 ;; grep the "^U" lines, and make sure we are not reading the
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1467 ;; .ali file for a spec file. If we are, go to step 3.
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1468 ;; 3- If the file is not found or step 2 failed:
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1469 ;; find the name of the "other file", ie the body, and look
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1470 ;; for its associated .ali file by subtituing the extension
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1471 ;;
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1472 ;; We must also handle the case of separate packages and subprograms:
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1473 ;; 4- If no ali file was found, we try to modify the file name by removing
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1474 ;; everything after the last '-' or '.' character, so as to get the
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1475 ;; ali file for the parent unit. If we found an ali file, we check that
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1476 ;; it indeed contains the definition for the separate entity by checking
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1477 ;; the 'D' lines. This is done repeatedly, in case the direct parent is
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1478 ;; also a separate.
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1479
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1480 (save-excursion
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1481 (set-buffer (get-file-buffer file))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1482 (let ((short-ali-file-name
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1483 (concat (file-name-sans-extension (file-name-nondirectory file))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1484 ".ali"))
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1485 ali-file-name
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1486 is-spec)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1487
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1488 ;; If we have a non-standard file name, and this is a spec, we first
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1489 ;; look for the .ali file of the body, since this is the one that
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1490 ;; contains the most complete information. If not found, we will do what
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1491 ;; we can with the .ali file for the spec...
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1492
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1493 (if (not (string= (file-name-extension file) "ads"))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1494 (let ((specs ada-spec-suffixes))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1495 (while specs
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1496 (if (string-match (concat (regexp-quote (car specs)) "$")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1497 file)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1498 (set 'is-spec t))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1499 (set 'specs (cdr specs)))))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1500
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1501 (if is-spec
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1502 (set 'ali-file-name
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1503 (ada-find-ali-file-in-dir
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1504 (concat (file-name-sans-extension
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1505 (file-name-nondirectory
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1506 (ada-other-file-name)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1507 ".ali"))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1508
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1509
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1510 (setq ali-file-name
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1511 (or ali-file-name
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1512
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1513 ;; Else we take the .ali file associated with the unit
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1514 (ada-find-ali-file-in-dir short-ali-file-name)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1515
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1516
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1517 ;; else we did not find the .ali file Second chance: in case
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1518 ;; the files do not have standard names (such as for instance
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1519 ;; file_s.ada and file_b.ada), try to go to the other file
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1520 ;; and look for its ali file
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1521 (ada-find-ali-file-in-dir
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1522 (concat (file-name-sans-extension
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1523 (file-name-nondirectory (ada-other-file-name)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1524 ".ali"))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1525
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1526
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1527 ;; If we still don't have an ali file, try to get the one
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1528 ;; from the parent unit, in case we have a separate entity.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1529 (let ((parent-name (file-name-sans-extension
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1530 (file-name-nondirectory file))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1531
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1532 (while (and (not ali-file-name)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1533 (string-match "^\\(.*\\)[.-][^.-]*" parent-name))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1534
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1535 (set 'parent-name (match-string 1 parent-name))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1536 (set 'ali-file-name (ada-find-ali-file-in-dir
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1537 (concat parent-name ".ali")))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1538 )
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1539 ali-file-name)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1540
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1541 ;; If still not found, try to recompile the file
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1542 (if (not ali-file-name)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1543 ;; recompile only if the user asked for this. and search the ali
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1544 ;; filename again. We avoid a possible infinite recursion by
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1545 ;; temporarily disabling the automatic compilation.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1546
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1547 (if ada-xref-create-ali
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1548 (setq ali-file-name
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1549 (concat (file-name-sans-extension (ada-xref-current file))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1550 ".ali"))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1551
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1552 (error "Ali file not found. Recompile your file"))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1553
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1554
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1555 ;; same if the .ali file is too old and we must recompile it
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1556 (if (and (file-newer-than-file-p file ali-file-name)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1557 ada-xref-create-ali)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1558 (ada-xref-current file ali-file-name)))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1559
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1560 ;; Always return the correct absolute file name
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1561 (expand-file-name ali-file-name))
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1562 ))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1563
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1564 (defun ada-get-ada-file-name (file original-file)
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
1565 "Create the complete file name (+directory) for FILE.
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
1566 The original file (where the user was) is ORIGINAL-FILE. Search in project
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
1567 file for possible paths."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1568
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1569 (save-excursion
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1570
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1571 ;; If the buffer for original-file, use it to get the values from the
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1572 ;; project file, otherwise load the file and its project file
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1573 (let ((buffer (get-file-buffer original-file)))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1574 (if buffer
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1575 (set-buffer buffer)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1576 (find-file original-file)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1577 (ada-require-project-file)))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1578
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1579 ;; we choose the first possible completion and we
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1580 ;; return the absolute file name
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1581 (let ((filename (ada-find-src-file-in-dir file)))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1582 (if filename
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1583 (expand-file-name filename)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1584 (error (concat
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1585 (file-name-nondirectory file)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1586 " not found in src_dir. Please check your project file")))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1587
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1588 )))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1589
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1590 (defun ada-find-file-number-in-ali (file)
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
1591 "Returns the file number for FILE in the associated ali file."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1592 (set-buffer (ada-get-ali-buffer file))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1593 (goto-char (point-min))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1594
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1595 (let ((begin (re-search-forward "^D")))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1596 (beginning-of-line)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1597 (re-search-forward (concat "^D " (file-name-nondirectory file)))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1598 (count-lines begin (point))))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1599
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1600 (defun ada-read-identifier (pos)
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1601 "Returns the identlist around POS and switch to the .ali buffer.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1602 The returned list represents the entity, and can be manipulated through the
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1603 macros `ada-name-of', `ada-line-of', `ada-column-of', `ada-file-of',..."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1604
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1605 ;; If at end of buffer (e.g the buffer is empty), error
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1606 (if (>= (point) (point-max))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1607 (error "No identifier on point"))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1608
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1609 ;; goto first character of the identifier/operator (skip backward < and >
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1610 ;; since they are part of multiple character operators
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1611 (goto-char pos)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1612 (skip-chars-backward "a-zA-Z0-9_<>")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1613
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1614 ;; check if it really is an identifier
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1615 (if (ada-in-comment-p)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1616 (error "Inside comment"))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1617
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1618 (let (identifier identlist)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1619 ;; Just in front of a string => we could have an operator declaration,
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1620 ;; as in "+", "-", ..
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1621 (if (= (char-after) ?\")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1622 (forward-char 1))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1623
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1624 ;; if looking at an operator
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1625 ;; This is only true if:
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1626 ;; - the symbol is +, -, ...
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1627 ;; - the symbol is made of letters, and not followed by _ or a letter
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1628 (if (and (looking-at ada-operator-re)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1629 (or (not (= (char-syntax (char-after)) ?w))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1630 (not (or (= (char-syntax (char-after (match-end 0))) ?w)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1631 (= (char-after (match-end 0)) ?_)))))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1632 (progn
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1633 (if (and (= (char-before) ?\")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1634 (= (char-after (+ (length (match-string 0)) (point))) ?\"))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1635 (forward-char -1))
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1636 (set 'identifier (regexp-quote (concat "\"" (match-string 0) "\""))))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1637
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1638 (if (ada-in-string-p)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1639 (error "Inside string or character constant"))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1640 (if (looking-at (concat ada-keywords "[^a-zA-Z_]"))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1641 (error "No cross-reference available for reserved keyword"))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1642 (if (looking-at "[a-zA-Z0-9_]+")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1643 (set 'identifier (match-string 0))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1644 (error "No identifier around")))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1645
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1646 ;; Build the identlist
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1647 (set 'identlist (ada-make-identlist))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1648 (ada-set-name identlist (downcase identifier))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1649 (ada-set-line identlist
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1650 (number-to-string (count-lines (point-min) (point))))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1651 (ada-set-column identlist
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1652 (number-to-string (1+ (current-column))))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1653 (ada-set-file identlist (buffer-file-name))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1654 identlist
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1655 ))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1656
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1657 (defun ada-get-all-references (identlist)
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1658 "Completes and returns IDENTLIST with the information extracted
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
1659 from the ali file (definition file and places where it is referenced)."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1660
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1661 (let ((ali-buffer (ada-get-ali-buffer (ada-file-of identlist)))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1662 declaration-found)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1663 (set-buffer ali-buffer)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1664 (goto-char (point-min))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1665 (ada-set-on-declaration identlist nil)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1666
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1667 ;; First attempt: we might already be on the declaration of the identifier
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1668 ;; We want to look for the declaration only in a definite interval (after
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1669 ;; the "^X ..." line for the current file, and before the next "^X" line
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1670
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1671 (if (re-search-forward
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1672 (concat "^X [0-9]+ " (file-name-nondirectory (ada-file-of identlist)))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1673 nil t)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1674 (let ((bound (save-excursion (re-search-forward "^X " nil t))))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1675 (set 'declaration-found
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1676 (re-search-forward
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1677 (concat "^" (ada-line-of identlist)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1678 "." (ada-column-of identlist)
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1679 "[ *]" (ada-name-of identlist)
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1680 " \\(.*\\)$") bound t))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1681 (if declaration-found
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1682 (ada-set-on-declaration identlist t))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1683 ))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1684
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1685 ;; If declaration is still nil, then we were not on a declaration, and
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1686 ;; have to fall back on other algorithms
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1687
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1688 (unless declaration-found
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1689
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1690 ;; Since we alread know the number of the file, search for a direct
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1691 ;; reference to it
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1692 (goto-char (point-min))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1693 (set 'declaration-found t)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1694 (ada-set-ali-index
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1695 identlist
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1696 (number-to-string (ada-find-file-number-in-ali
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1697 (ada-file-of identlist))))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1698 (unless (re-search-forward (concat (ada-ali-index-of identlist)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1699 "|\\([0-9]+.[0-9]+ \\)*"
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1700 (ada-line-of identlist)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1701 "[^0-9]"
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1702 (ada-column-of identlist))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1703 nil t)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1704
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1705 ;; if we did not find it, it may be because the first reference
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1706 ;; is not required to have a 'unit_number|' item included.
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1707 ;; Or maybe we are already on the declaration...
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1708 (unless (re-search-forward
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1709 (concat
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1710 "^\\(\\([a-zA-Z0-9_.]+\\|\"[<>=+*-/a-z]\"\\)[ *]\\)*"
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1711 (ada-line-of identlist)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1712 "[^0-9]"
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1713 (ada-column-of identlist))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1714 nil t)
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1715
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1716 ;; If still not found, then either the declaration is unknown
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1717 ;; or the source file has been modified since the ali file was
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1718 ;; created
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1719 (set 'declaration-found nil)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1720 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1721 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1722
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1723 ;; Last check to be completly sure we have found the correct line (the
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1724 ;; ali might not be up to date for instance)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1725 (if declaration-found
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1726 (progn
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1727 (beginning-of-line)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1728 ;; while we have a continuation line, go up one line
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1729 (while (looking-at "^\\.")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1730 (previous-line 1))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1731 (unless (looking-at (concat "[0-9]+.[0-9]+[ *]"
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1732 (ada-name-of identlist) "[ <]"))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1733 (set 'declaration-found nil))))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1734
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1735 ;; Still no success ! The ali file must be too old, and we need to
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1736 ;; use a basic algorithm based on guesses. Note that this only happens
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1737 ;; if the user does not want us to automatically recompile files
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1738 ;; automatically
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1739 (unless declaration-found
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1740 (if (ada-xref-find-in-modified-ali identlist)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1741 (set 'declaration-found t)
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1742 ;; no more idea to find the declaration. Give up
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1743 (progn
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1744 (kill-buffer ali-buffer)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1745 (error (concat "No declaration of " (ada-name-of identlist)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1746 " found."))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1747 )))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1748 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1749
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1750
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1751 ;; Now that we have found a suitable line in the .ali file, get the
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1752 ;; information available
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1753 (beginning-of-line)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1754 (if declaration-found
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1755 (let ((current-line (buffer-substring
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1756 (point) (save-excursion (end-of-line) (point)))))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1757 (save-excursion
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1758 (next-line 1)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1759 (beginning-of-line)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1760 (while (looking-at "^\\.\\(.*\\)")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1761 (set 'current-line (concat current-line (match-string 1)))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1762 (next-line 1))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1763 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1764
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1765 (if (re-search-backward "^X [0-9]+ \\([a-zA-Z0-9_.-]+\\)" nil t)
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1766
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1767 ;; If we can find the file
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1768 (condition-case err
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1769 (ada-set-declare-file
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1770 identlist
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1771 (ada-get-ada-file-name (match-string 1)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1772 (ada-file-of identlist)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1773
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1774 ;; Else clean up the ali file
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1775 (error
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1776 (kill-buffer ali-buffer)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1777 (error (error-message-string err)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1778 ))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1779
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1780 (ada-set-references identlist current-line)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1781 ))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1782 ))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1783
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1784 (defun ada-xref-find-in-modified-ali (identlist)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1785 "Find the matching position for IDENTLIST in the current ali buffer.
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1786 This function is only called when the file was not up-to-date, so we need
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1787 to make some guesses.
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
1788 This function is disabled for operators, and only works for identifiers."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1789
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1790 (unless (= (string-to-char (ada-name-of identlist)) ?\")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1791 (progn
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1792 (let ((declist '()) ;;; ( (line_in_ali_file line_in_ada) ( ... ))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1793 (my-regexp (concat "[ *]"
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1794 (regexp-quote (ada-name-of identlist)) " "))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1795 (line-ada "--")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1796 (col-ada "--")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1797 (line-ali 0)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1798 (len 0)
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1799 (choice 0)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1800 (ali-buffer (current-buffer)))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1801
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1802 (goto-char (point-max))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1803 (while (re-search-backward my-regexp nil t)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1804 (save-excursion
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1805 (set 'line-ali (count-lines (point-min) (point)))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1806 (beginning-of-line)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1807 ;; have a look at the line and column numbers
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1808 (if (looking-at "^\\([0-9]+\\).\\([0-9]+\\)[ *]")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1809 (progn
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1810 (setq line-ada (match-string 1))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1811 (setq col-ada (match-string 2)))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1812 (setq line-ada "--")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1813 (setq col-ada "--")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1814 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1815 ;; construct a list with the file names and the positions within
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1816 (if (re-search-backward "^X [0-9]+ \\([a-zA-Z0-9._-]+\\)" nil t)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1817 (add-to-list
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1818 'declist (list line-ali (match-string 1) line-ada col-ada))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1819 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1820 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1821 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1822
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1823 ;; how many possible declarations have we found ?
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1824 (setq len (length declist))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1825 (cond
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1826 ;; none => error
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1827 ((= len 0)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1828 (kill-buffer (current-buffer))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1829 (error (concat "No declaration of "
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1830 (ada-name-of identlist)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1831 " recorded in .ali file")))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1832
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1833 ;; one => should be the right one
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1834 ((= len 1)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1835 (goto-line (caar declist)))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1836
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1837 ;; more than one => display choice list
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1838 (t
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1839 (save-window-excursion
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1840 (with-output-to-temp-buffer "*choice list*"
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1841
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1842 (princ "Identifier is overloaded and Xref information is not up to date.\n")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1843 (princ "Possible declarations are:\n\n")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1844 (princ " no. in file at line col\n")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1845 (princ " --- --------------------- ---- ----\n")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1846 (let ((counter 0))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1847 (while (< counter len)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1848 (princ (format " %2d) %-21s %4s %4s\n"
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1849 (1+ counter)
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1850 (ada-get-ada-file-name
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1851 (nth 1 (nth counter declist))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1852 (ada-file-of identlist))
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1853 (nth 2 (nth counter declist))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1854 (nth 3 (nth counter declist))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1855 ))
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1856 (setq counter (1+ counter))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1857 ) ; end of while
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1858 ) ; end of let
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1859 ) ; end of with-output-to ...
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1860 (setq choice nil)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1861 (while (or
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1862 (not choice)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1863 (not (integerp choice))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1864 (< choice 1)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1865 (> choice len))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1866 (setq choice
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1867 (string-to-int
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1868 (read-from-minibuffer "Enter No. of your choice: "))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1869 )
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
1870 (set-buffer ali-buffer)
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1871 (goto-line (car (nth (1- choice) declist)))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1872 ))))))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1873
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1874
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1875 (defun ada-find-in-ali (identlist &optional other-frame)
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
1876 "Look in the .ali file for the definition of the identifier in IDENTLIST.
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
1877 If OTHER-FRAME is non nil, and `ada-xref-other-buffer' is non nil,
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
1878 opens a new window to show the declaration."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1879
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1880 (ada-get-all-references identlist)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1881 (let ((ali-line (ada-references-of identlist))
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1882 (locations nil)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1883 (start 0)
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1884 file line col)
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1885
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1886 ;; Note: in some cases, an entity can have multiple references to the
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1887 ;; bodies (this is for instance the case for a separate subprogram, that
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1888 ;; has a reference both to the stub and to the real body).
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1889 ;; In that case, we simply go to each one in turn.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1890
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1891 ;; Get all the possible locations
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1892 (string-match "^\\([0-9]+\\)[a-zA-Z+]\\([0-9]+\\)[ *]" ali-line)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1893 (set 'locations (list (list (match-string 1 ali-line) ;; line
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1894 (match-string 2 ali-line) ;; column
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1895 (ada-declare-file-of identlist))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1896 (while (string-match "\\([0-9]+\\)[bc]\\([0-9]+\\)" ali-line start)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1897 (setq line (match-string 1 ali-line)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1898 col (match-string 2 ali-line)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1899 start (match-end 2))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1900
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1901 ;; it there was a file number in the same line
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1902 (if (string-match (concat "\\([0-9]+\\)|\\([^|bc]+\\)?"
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1903 (match-string 0 ali-line))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1904 ali-line)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1905 (let ((file-number (match-string 1 ali-line)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1906 (goto-char (point-min))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1907 (re-search-forward "^D \\([a-zA-Z0-9_.-]+\\)" nil t
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1908 (string-to-number file-number))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1909 (set 'file (match-string 1))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1910 )
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1911 ;; Else get the nearest file
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1912 (set 'file (ada-declare-file-of identlist)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1913
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1914 (set 'locations (append locations (list (list line col file)))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1915
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1916 ;; Add the specs at the end again, so that from the last body we go to
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1917 ;; the specs
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1918 (set 'locations (append locations (list (car locations))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1919
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1920 ;; Find the new location we want to go to.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1921 ;; If we are on none of the locations listed, we simply go to the specs.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1922
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1923 (setq line (caar locations)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1924 col (nth 1 (car locations))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1925 file (nth 2 (car locations)))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1926
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1927 (while locations
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1928 (if (and (string= (caar locations) (ada-line-of identlist))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1929 (string= (nth 1 (car locations)) (ada-column-of identlist))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1930 (string= (file-name-nondirectory (nth 2 (car locations)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1931 (file-name-nondirectory (ada-file-of identlist))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1932 (setq locations (cadr locations)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1933 line (car locations)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1934 col (nth 1 locations)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1935 file (nth 2 locations)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1936 locations nil)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1937 (set 'locations (cdr locations))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1938
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1939 ;; Find the file in the source path
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1940 (set 'file (ada-get-ada-file-name file (ada-file-of identlist)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1941
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1942 ;; Kill the .ali buffer
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1943 (kill-buffer (current-buffer))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1944
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1945 ;; Now go to the buffer
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1946 (ada-xref-change-buffer file
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1947 (string-to-number line)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1948 (1- (string-to-number col))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1949 identlist
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1950 other-frame)
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1951 ))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1952
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1953 (defun ada-find-in-src-path (identlist &optional other-frame)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1954 "More general function for cross-references.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1955 This function should be used when the standard algorithm that parses the
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1956 .ali file has failed, either because that file was too old or even did not
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1957 exist.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1958 This function attempts to find the possible declarations for the identifier
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1959 anywhere in the object path.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1960 This command requires the external `egrep' program to be available.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1961
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1962 This works well when one is using an external librarie and wants
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1963 to find the declaration and documentation of the subprograms one is
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1964 is using."
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1965
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1966 (let (list
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1967 (dirs (ada-xref-get-obj-dir-field))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1968 (regexp (concat "[ *]" (ada-name-of identlist)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1969 line column
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1970 choice
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1971 file)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1972
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1973 (save-excursion
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1974
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1975 ;; Do the grep in all the directories. We do multiple shell
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1976 ;; commands instead of one in case there is no .ali file in one
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1977 ;; of the directory and the shell stops because of that.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1978
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1979 (set-buffer (get-buffer-create "*grep*"))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1980 (while dirs
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1981 (insert (shell-command-to-string
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1982 (concat "egrep -i -h '^X|" regexp "( |$)' "
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1983 (file-name-as-directory (car dirs)) "*.ali")))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1984 (set 'dirs (cdr dirs)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1985
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1986 ;; Now parse the output
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1987 (set 'case-fold-search t)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1988 (goto-char (point-min))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1989 (while (re-search-forward regexp nil t)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1990 (save-excursion
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1991 (beginning-of-line)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1992 (if (not (= (char-after) ?X))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1993 (progn
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1994 (looking-at "\\([0-9]+\\).\\([0-9]+\\)")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1995 (setq line (match-string 1)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1996 column (match-string 2))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1997 (re-search-backward "^X [0-9]+ \\(.*\\)$")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1998 (set 'file (list (match-string 1) line column))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
1999
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2000 ;; There could be duplicate choices, because of the structure
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2001 ;; of the .ali files
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2002 (unless (member file list)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2003 (set 'list (append list (list file))))))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2004
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2005 ;; Current buffer is still "*grep*"
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2006 (kill-buffer "*grep*")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2007 )
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2008
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2009 ;; Now display the list of possible matches
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2010 (cond
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2011
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2012 ;; No choice found => Error
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2013 ((null list)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2014 (error "No cross-reference found, please recompile your file"))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2015
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2016 ;; Only one choice => Do the cross-reference
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2017 ((= (length list) 1)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2018 (set 'file (ada-find-src-file-in-dir (caar list)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2019 (if file
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2020 (ada-xref-change-buffer file
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2021 (string-to-number (nth 1 (car list)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2022 (string-to-number (nth 2 (car list)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2023 identlist
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2024 other-frame)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2025 (error (concat (caar list) " not found in src_dir")))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2026 (message "This is only a (good) guess at the cross-reference.")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2027 )
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2028
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2029 ;; Else, ask the user
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2030 (t
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2031 (save-window-excursion
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2032 (with-output-to-temp-buffer "*choice list*"
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2033
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2034 (princ "Identifier is overloaded and Xref information is not up to date.\n")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2035 (princ "Possible declarations are:\n\n")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2036 (princ " no. in file at line col\n")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2037 (princ " --- --------------------- ---- ----\n")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2038 (let ((counter 0))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2039 (while (< counter (length list))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2040 (princ (format " %2d) %-21s %4s %4s\n"
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2041 (1+ counter)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2042 (nth 0 (nth counter list))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2043 (nth 1 (nth counter list))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2044 (nth 2 (nth counter list))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2045 ))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2046 (setq counter (1+ counter))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2047 )))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2048 (setq choice nil)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2049 (while (or (not choice)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2050 (not (integerp choice))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2051 (< choice 1)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2052 (> choice (length list)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2053 (setq choice
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2054 (string-to-int
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2055 (read-from-minibuffer "Enter No. of your choice: "))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2056 )
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2057 (set 'choice (1- choice))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2058 (kill-buffer "*choice list*")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2059
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2060 (set 'file (ada-find-src-file-in-dir (car (nth choice list))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2061 (if file
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2062 (ada-xref-change-buffer file
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2063 (string-to-number (nth 1 (nth choice list)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2064 (string-to-number (nth 2 (nth choice list)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2065 identlist
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2066 other-frame)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2067 (error (concat (car (nth choice list)) " not found in src_dir")))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2068 (message "This is only a (good) guess at the cross-reference.")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2069 ))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2070
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2071 (defun ada-xref-change-buffer
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2072 (file line column identlist &optional other-frame)
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2073 "Select and display FILE, at LINE and COLUMN.
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2074 If we do not end on the same identifier as IDENTLIST, find the closest
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
2075 match. Kills the .ali buffer at the end.
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
2076 If OTHER-FRAME is non-nil, creates a new frame to show the file."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2077
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2078 (let (declaration-buffer)
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2079
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2080 ;; Select and display the destination buffer
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2081 (if ada-xref-other-buffer
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2082 (if other-frame
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2083 (find-file-other-frame file)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2084 (set 'declaration-buffer (find-file-noselect file))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2085 (set-buffer declaration-buffer)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2086 (switch-to-buffer-other-window declaration-buffer)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2087 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2088 (find-file file)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2089 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2090
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2091 ;; move the cursor to the correct position
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2092 (push-mark)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2093 (goto-line line)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2094 (move-to-column column)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2095
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2096 ;; If we are not on the identifier, the ali file was not up-to-date.
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2097 ;; Try to find the nearest position where the identifier is found,
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2098 ;; this is probably the right one.
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2099 (unless (looking-at (ada-name-of identlist))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2100 (ada-xref-search-nearest (ada-name-of identlist)))
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2101 ))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2102
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2103
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2104 (defun ada-xref-search-nearest (name)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2105 "Searches for NAME nearest to the position recorded in the Xref file.
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2106 It returns the position of the declaration in the buffer or nil if not found."
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2107 (let ((orgpos (point))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2108 (newpos nil)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2109 (diff nil))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2110
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2111 (goto-char (point-max))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2112
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2113 ;; loop - look for all declarations of name in this file
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2114 (while (search-backward name nil t)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2115
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2116 ;; check if it really is a complete Ada identifier
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2117 (if (and
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2118 (not (save-excursion
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2119 (goto-char (match-end 0))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2120 (looking-at "_")))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2121 (not (ada-in-string-or-comment-p))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2122 (or
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2123 ;; variable declaration ?
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2124 (save-excursion
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2125 (skip-chars-forward "a-zA-Z_0-9" )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2126 (ada-goto-next-non-ws)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2127 (looking-at ":[^=]"))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2128 ;; procedure, function, task or package declaration ?
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2129 (save-excursion
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2130 (ada-goto-previous-word)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2131 (looking-at "\\<[pP][rR][oO][cC][eE][dD][uU][rR][eE]\\>\\|\\<[fF][uU][nN][cC][tT][iI][oO][nN]\\>\\|\\<[tT][yY][pP][eE]\\>\\|\\<[tT][aA][sS][kK]\\>\\|\\<[pP][aA][cC][kK][aA][gG][eE]\\>\\|\\<[bB][oO][dD][yY]\\>"))))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2132
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2133 ;; check if it is nearer than the ones before if any
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2134 (if (or (not diff)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2135 (< (abs (- (point) orgpos)) diff))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2136 (progn
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2137 (setq newpos (point)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2138 diff (abs (- newpos orgpos))))))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2139 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2140
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2141 (if newpos
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2142 (progn
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2143 (message "ATTENTION: this declaration is only a (good) guess ...")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2144 (goto-char newpos))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2145 nil)))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2146
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2147
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2148 ;; Find the parent library file of the current file
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2149 (defun ada-goto-parent ()
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
2150 "Go to the parent library file."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2151 (interactive)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2152 (ada-require-project-file)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2153
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2154 (let ((buffer (ada-get-ali-buffer (buffer-file-name)))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2155 (unit-name nil)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2156 (body-name nil)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2157 (ali-name nil))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2158 (save-excursion
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2159 (set-buffer buffer)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2160 (goto-char (point-min))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2161 (re-search-forward "^U \\([^ \t%]+\\)%[bs][ \t]+\\([^ \t]+\\)")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2162 (setq unit-name (match-string 1))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2163 (if (not (string-match "\\(.*\\)\\.[^.]+" unit-name))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2164 (progn
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2165 (kill-buffer buffer)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2166 (error "No parent unit !"))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2167 (setq unit-name (match-string 1 unit-name))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2168 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2169
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2170 ;; look for the file name for the parent unit specification
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2171 (goto-char (point-min))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2172 (re-search-forward (concat "^W " unit-name
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2173 "%s[ \t]+\\([^ \t]+\\)[ \t]+"
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2174 "\\([^ \t\n]+\\)"))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2175 (setq body-name (match-string 1))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2176 (setq ali-name (match-string 2))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2177 (kill-buffer buffer)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2178 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2179
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2180 (setq ali-name (ada-find-ali-file-in-dir ali-name))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2181
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2182 (save-excursion
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2183 ;; Tries to open the new ali file to find the spec file
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2184 (if ali-name
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2185 (progn
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2186 (find-file ali-name)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2187 (goto-char (point-min))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2188 (re-search-forward (concat "^U " unit-name "%s[ \t]+"
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2189 "\\([^ \t]+\\)"))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2190 (setq body-name (match-string 1))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2191 (kill-buffer (current-buffer))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2192 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2193 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2194 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2195
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2196 (find-file body-name)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2197 ))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2198
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2199 (defun ada-make-filename-from-adaname (adaname)
26227
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
2200 "Determine the filename in which ADANAME is found.
1be4a89d81d3 Doc-string fixes.
Gerd Moellmann <gerd@gnu.org>
parents: 25899
diff changeset
2201 This is a GNAT specific function that uses gnatkrunch."
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2202 (let (krunch-buf)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2203 (setq krunch-buf (generate-new-buffer "*gkrunch*"))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2204 (save-excursion
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2205 (set-buffer krunch-buf)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2206 ;; send adaname to external process `gnatkr'.
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2207 (call-process "gnatkr" nil krunch-buf nil
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2208 adaname ada-krunch-args)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2209 ;; fetch output of that process
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2210 (setq adaname (buffer-substring
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2211 (point-min)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2212 (progn
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2213 (goto-char (point-min))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2214 (end-of-line)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2215 (point))))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2216 (kill-buffer krunch-buf)))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2217 adaname
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2218 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2219
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2220 (defun ada-make-body-gnatstub ()
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2221 "Create an Ada package body in the current buffer.
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2222 This function uses the `gnatstub' program to create the body.
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2223 This function typically is to be hooked into `ff-file-created-hooks'."
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2224 (interactive)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2225
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2226 (save-some-buffers nil nil)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2227
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2228 ;; If the current buffer is the body (as is the case when calling this
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2229 ;; function from ff-file-created-hooks), then kill this temporary buffer
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2230 (unless (interactive-p)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2231 (progn
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2232 (set-buffer-modified-p nil)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2233 (kill-buffer (current-buffer))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2234
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2235
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2236 ;; Make sure the current buffer is the spec (this might not be the case
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2237 ;; if for instance the user was asked for a project file)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2238
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2239 (unless (buffer-file-name (car (buffer-list)))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2240 (set-buffer (cadr (buffer-list))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2241
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2242 ;; Make sure we have a project file (for parameters to gnatstub). Note that
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2243 ;; this might have already been done if we have been called from the hook,
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2244 ;; but this is not an expensive call)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2245 (ada-require-project-file)
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2246
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2247 ;; Call the external process gnatstub
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2248 (let* ((gnatstub-opts (ada-treat-cmd-string ada-gnatstub-opts))
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2249 (filename (buffer-file-name (car (buffer-list))))
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2250 (output (concat (file-name-sans-extension filename) ".adb"))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2251 (gnatstub-cmd (concat "gnatstub " gnatstub-opts " " filename))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2252 (buffer (get-buffer-create "*gnatstub*")))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2253
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2254 (save-excursion
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2255 (set-buffer buffer)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2256 (compilation-minor-mode 1)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2257 (erase-buffer)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2258 (insert gnatstub-cmd)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2259 (newline)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2260 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2261 ;; call gnatstub to create the body file
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2262 (call-process shell-file-name nil buffer nil "-c" gnatstub-cmd)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2263
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2264 (if (save-excursion
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2265 (set-buffer buffer)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2266 (goto-char (point-min))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2267 (search-forward "command not found" nil t))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2268 (progn
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2269 (message "gnatstub was not found -- using the basic algorithm")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2270 (sleep-for 2)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2271 (kill-buffer buffer)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2272 (ada-make-body))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2273
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2274 ;; Else clean up the output
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2275
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2276 (if (file-exists-p output)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2277 (progn
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2278 (find-file output)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2279 (kill-buffer buffer))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2280
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2281 ;; display the error buffer
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2282 (display-buffer buffer)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2283 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2284 )))
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2285
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2286 (defun ada-xref-initialize ()
38441
ceb40bd97a77 (ada-xref-initialize): Fix call to add-hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38422
diff changeset
2287 "Function called by `ada-mode-hook' to initialize the ada-xref.el package.
ceb40bd97a77 (ada-xref-initialize): Fix call to add-hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38422
diff changeset
2288 For instance, it creates the gnat-specific menus, sets some hooks for
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2289 find-file...."
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2290 (make-local-hook 'ff-file-created-hooks)
38441
ceb40bd97a77 (ada-xref-initialize): Fix call to add-hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38422
diff changeset
2291 ;; This should really be an `add-hook'. -stef
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2292 (setq ff-file-created-hooks 'ada-make-body-gnatstub)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2293
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2294 ;; Read the project file and update the search path
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2295 ;; before looking for the other file
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2296 (make-local-hook 'ff-pre-find-hooks)
38441
ceb40bd97a77 (ada-xref-initialize): Fix call to add-hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38422
diff changeset
2297 (add-hook 'ff-pre-find-hooks 'ada-require-project-file nil t)
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2298
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2299 ;; Completion for file names in the mini buffer should ignore .ali files
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2300 (add-to-list 'completion-ignored-extensions ".ali")
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2301 )
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2302
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2303
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2304 ;; ----- Add to ada-mode-hook ---------------------------------------------
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2305
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2306 ;; Use gvd or ddd as the default debugger if it was found
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2307 ;; On windows, do not use the --tty switch for GVD, since this is
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2308 ;; not supported. Actually, we do not use this on Unix either, since otherwise
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2309 ;; there is no console window left in GVD, and people have to use the
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2310 ;; Emacs one.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2311 ;; This must be done before initializing the Ada menu.
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2312 (if (ada-find-file-in-dir "gvd" exec-path)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2313 (set 'ada-prj-default-debugger "gvd ")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2314 (if (ada-find-file-in-dir "gvd.exe" exec-path)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2315 (set 'ada-prj-default-debugger "gvd ")
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2316 (if (ada-find-file-in-dir "ddd" exec-path)
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2317 (set 'ada-prj-default-debugger "ddd --tty -fullname -toolbar"))))
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2318
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2319 ;; Set the keymap once and for all, so that the keys set by the user in his
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2320 ;; config file are not overwritten every time we open a new file.
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
2321 (ada-add-ada-menu)
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2322 (ada-add-keymap)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2323
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2324 (add-hook 'ada-mode-hook 'ada-xref-initialize)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2325
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
2326 ;; Initializes the cross references to the runtime library
44466
f200fce92816 ada-mode no longer supports a different
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38441
diff changeset
2327 (ada-initialize-runtime-library "")
30408
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
2328
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
2329 ;; Add these standard directories to the search path
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
2330 (set 'ada-search-directories
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
2331 (append (mapcar 'directory-file-name ada-xref-runtime-library-specs-path)
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
2332 ada-search-directories))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
2333
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
2334 ;; Make sure that the files are always associated with a project file. Since
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
2335 ;; the project file has some fields that are used for the editor (like the
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
2336 ;; casing exceptions), it has to be read before the user edits a file).
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
2337 (add-hook 'ada-mode-hook
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
2338 (lambda()
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
2339 (let ((file (ada-prj-find-prj-file t)))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
2340 (if file (ada-reread-prj-file file)))))
e3e2c9051c5f Got rid of all byte-compiler warnings on Emacs.
Gerd Moellmann <gerd@gnu.org>
parents: 26227
diff changeset
2341
25899
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2342 (provide 'ada-xref)
e5e3310746eb New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2343
32301
0f1f7e931493 Fix header line, copyright notice.
Dave Love <fx@gnu.org>
parents: 30408
diff changeset
2344 ;;; ada-xref.el ends here