Mercurial > emacs
annotate lisp/progmodes/ada-xref.el @ 26090:63fd40a97a75
s/usg5-4.h:
(NSIG): Remove.
(NSIG_MINIMUM): New macro.
s/gnu-linux.h, s/hpux.h, s/iris3-5.h, s/iris3-6.h,
s/umips.h, s/usg5-4.h:
(SIGIO): Do not undef.
(BROKEN_SIGIO): New macro.
* s/gnu-linux.h:
(SIGPOLL, SIGURG): Do not undef.
(BROKEN_SIGPOLL, BROKEN_SIGURG): New macros.
* s/ptx4.h:
(SIGINFO): Do not undef.
(BROKEN_SIGINFO): New macros.
* s/ptx.h, s/template.h: Doc fix.
* s/aix3-1.h, s/bsd4-1.h, s/dgux.h, s/gnu-linux.h, s/hiuxmpp.h,
s/hpux.h, s/iris3-5.h, s/iris3-6.h, s/irix3-3.h, s/osf1.h, s/rtu.h,
s/sunos4-1.h, s/unipl5-0.h, s/unipl5-2.h, s/usg5-0.h, s/usg5-2-2.h,
s/usg5-2.h, s/usg5-3.h, s/xenix.h:
(open, close, read, write, INTERRUPTIBLE_OPEN,
INTERRUPTIBLE_CLOSE, INTERRUPTIBLE_IO): Remove.
* s/sol2-5.h (_LARGEFILE_SOURCE, _FILE_OFFSET_BITS): New macros.
author | Paul Eggert <eggert@twinsun.com> |
---|---|
date | Tue, 19 Oct 1999 07:28:36 +0000 |
parents | e5e3310746eb |
children | 1be4a89d81d3 |
rev | line source |
---|---|
25899
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1 ;; @(#) ada-xref.el --- use Gnat 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
|
2 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
3 ;; Copyright (C) 1994-1999 Free Software Foundation, Inc. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
4 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
5 ;; 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
|
6 ;; 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
|
7 ;; 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
|
8 ;; Maintainer: 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 ;; Ada Core Technologies's version: $Revision: 1.75 $ |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
10 ;; Keywords: languages ada xref |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
11 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
12 ;; This file is not part of GNU Emacs. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
13 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
14 ;; This program is free software; you can redistribute it and/or modify |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
15 ;; 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
|
16 ;; 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
|
17 ;; any later version. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
18 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
19 ;; This program is distributed in the hope that it will be useful, |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
20 ;; 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
|
21 ;; 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
|
22 ;; 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
|
23 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
24 ;; You should have received a copy of the GNU General Public License |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
25 ;; along with GNU Emacs; see the file COPYING. If not, write to |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
26 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
27 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
28 ;;; Commentary: |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
29 ;;; 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
|
30 ;;; 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
|
31 ;;; 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
|
32 ;;; |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
33 ;;; The functions provided are the following ones : |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
34 ;;; - `ada-complete-identifier': completes the current identifier as much as |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
35 ;;; possible, depending of the known identifier in the unit |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
36 ;;; - `ada-point-and-xref': moves the mouse pointer and shows the declaration |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
37 ;;; of the selected identifier (either in the same buffer or in another |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
38 ;;; buffer |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
39 ;;; - `ada-goto-declaration': shows the declaration of the selected |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
40 ;;; identifier (the one under the cursor), either in the same buffer or in |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
41 ;;; another buffer |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
42 ;;; - `ada-goto-declaration-other-frame': same as previous, but opens a new |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
43 ;; frame to show the declaration |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
44 ;;; - `ada-compile-application': recompile your whole application, provided |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
45 ;;; that a project file exists in your directory |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
46 ;;; - `ada-run-application': run your application directly from emacs |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
47 ;;; - `ada-reread-prj-file': force emacs to read your project file again. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
48 ;;; Otherwise, this file is only read the first time emacs needs some |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
49 ;;; informations, which are then kept in memory |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
50 ;;; - `ada-change-prj': change the prj file associated with a buffer |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
51 ;;; - `ada-change-default-prj': change the default project file used for |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
52 ;;; every new buffer |
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 ;;; 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
|
55 ;;; 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
|
56 ;;; 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
|
57 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
58 ;;; 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
|
59 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
60 ;; ----- Requirements ----------------------------------------------------- |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
61 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
62 (require 'compile) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
63 (require 'comint) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
64 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
65 ;; ----- Dynamic byte compilation ----------------------------------------- |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
66 (defvar byte-compile-dynamic nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
67 (make-local-variable 'byte-compile-dynamic) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
68 (setq byte-compile-dynamic t) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
69 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
70 ;; ------ Use variables |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
71 (defcustom ada-xref-other-buffer t |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
72 "*if non-nil then either use a buffer in the same frame or another frame. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
73 If Nil, always jump to the declaration in the same buffer" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
74 :type 'boolean :group 'ada) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
75 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
76 (defcustom ada-xref-create-ali t |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
77 "*if non-nil, run gcc whenever it is needed |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
78 if nil, the cross-reference mode will never run gcc" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
79 :type 'boolean :group 'ada) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
80 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
81 (defcustom ada-xref-confirm-compile nil |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
82 "*if non-nil, ask for command confirmation before compiling or |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
83 running the application" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
84 :type 'boolean :group 'ada) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
85 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
86 (defcustom ada-krunch-args "0" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
87 "*Maximum number of characters for filename create by gnatkr |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
88 Set to 0, if you don't use crunched filenames." |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
89 :type 'string :group 'ada) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
90 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
91 (defcustom ada-prj-default-comp-cmd "${cross_prefix}gcc -c -g -gnatq ${comp_opt} -I${src_dir}" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
92 "*Default command to be used to compile a single file. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
93 Emacs will add the filename at the end of this command. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
94 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
|
95 :type 'string :group 'ada) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
96 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
97 (defcustom ada-prj-default-make-cmd |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
98 (concat "${cross_prefix}gnatmake ${main} -aI${src_dir} -aO${obj_dir} " |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
99 "-g -gnatq -cargs ${comp_opt} " |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
100 "-bargs ${bind_opt} -largs ${link_opt}") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
101 "*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
|
102 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
|
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-project-file "" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
106 "*Non nil means always use this project file, no matter what the |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
107 directory is. Emacs will not try to use the standard algorithm to |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
108 find the project file. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
109 Note: you can use M-<TAB> in the customization buffer for completion" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
110 :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
|
111 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
112 (defcustom ada-gnatstub-opts "-q -I${src_dir}" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
113 "*List of the options to pass to gnatsub when generating the body from |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
114 a spec file. This has the same syntax as in the project file (with |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
115 variable substitution" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
116 :type 'string :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-always-ask-project nil |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
119 "*Non-nil means ask for the name of a project file to use when none is |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
120 found by the standard algorithm. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
121 Nil means use default values when no project file was found") |
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 ;; ------- 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
|
124 (defvar ada-last-prj-file "" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
125 "Name of the last project file entered by the user, when the |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
126 default algorithm did not find any possible project file") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
127 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
128 (defvar ada-check-switch " -gnats " |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
129 "Switch added to the command line to check the current file") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
130 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
131 (defvar ada-project-file-extension ".adp" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
132 "The extension used for project files") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
133 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
134 (defconst is-windows (memq system-type (quote (windows-nt))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
135 "true if we are running on windows NT or windows 95") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
136 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
137 (defvar ada-xref-pos-ring '() |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
138 "This is the list of all the positions we went to with the |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
139 cross-references features. This is used to go back to these positions.") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
140 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
141 (defconst ada-xref-pos-ring-max 16 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
142 "Number of positions kept in the list ada-xref-pos-ring") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
143 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
144 (defvar ada-operator-re |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
145 "\\+\\|-\\|/\\|\\*\\|=\\|mod\\|and\\|not\\|or\\|xor\\|<=\\|<\\|>=\\|>" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
146 "Regexp to match for operators") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
147 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
148 (defvar ada-xref-default-prj-file nil |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
149 "name of the default prj file, per directory. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
150 Every directory is potentially associated with a default project file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
151 If it is nil, then the first prj file loaded will be the default for this |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
152 emacs session") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
153 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
154 ;; These variables will be overwritted by buffer-local variables |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
155 (defvar ada-prj-prj-file nil |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
156 "Name of the project file for the current ada buffer") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
157 (defvar ada-prj-src-dir nil |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
158 "List of directories to look into for ada sources") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
159 (defvar ada-prj-obj-dir nil |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
160 "List of directories to look into for object and .ali files") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
161 (defvar ada-prj-comp-opt nil |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
162 "Switches to use on the command line for the default compile |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
163 command (gcc)") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
164 (defvar ada-prj-bind-opt nil |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
165 "Switches to use on the command line for the default bind |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
166 command (gnatbind)") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
167 (defvar ada-prj-link-opt nil |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
168 "Switches to use on the command line for the default link |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
169 command (gnatlink)") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
170 (defvar ada-prj-comp-cmd nil |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
171 "Command to use to compile the current file only") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
172 (defvar ada-prj-make-cmd nil |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
173 "Command to use to compile the whole current application") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
174 (defvar ada-prj-run-cmd nil |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
175 "Command to use to run the current application") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
176 (defvar ada-prj-debug-cmd nil |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
177 "Command to use to run the debugger") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
178 (defvar ada-prj-main nil |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
179 "Name of the main programm of the current application") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
180 (defvar ada-prj-remote-machine nil |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
181 "Name of the machine to log on before a compilation") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
182 (defvar ada-prj-cross-prefix nil |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
183 "Prefix to be added to the gnatmake, gcc, ... commands when |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
184 using a cross-compilation environment. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
185 A '-' is automatically added at the end if not already present. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
186 For instance, the compiler is called `ada-prj-cross-prefix'gnatmake") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
187 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
188 ;; ----- Keybindings ------------------------------------------------------ |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
189 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
190 (defun ada-add-keymap () |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
191 "Add new key bindings when using ada-xrel.el" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
192 (interactive) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
193 (if ada-xemacs |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
194 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
195 (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
|
196 (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
|
197 (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
|
198 (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
|
199 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
200 (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
|
201 (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
|
202 (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
|
203 (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
|
204 (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
|
205 (define-key ada-mode-map [f10] 'next-error) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
206 (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
|
207 (define-key ada-mode-map "\C-cb" 'ada-buffer-list) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
208 (define-key ada-mode-map "\C-cc" 'ada-change-prj) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
209 (define-key ada-mode-map "\C-cd" 'ada-change-default-prj) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
210 (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
|
211 (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
|
212 (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
|
213 (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
|
214 (define-key ada-mode-map "\C-c\C-v" 'ada-check-current) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
215 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
216 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
217 ;; ----- Menus -------------------------------------------------------------- |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
218 (defun ada-add-ada-menu () |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
219 "Add some items to the standard Ada mode menu (the menu defined in |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
220 ada-mode.el)" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
221 (interactive) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
222 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
223 (if ada-xemacs |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
224 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
225 (add-menu-button '("Ada") ["Check file" ada-check-current t] "Goto") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
226 (add-menu-button '("Ada") ["Compile file" ada-compile-current t] "Goto") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
227 (add-menu-button '("Ada") ["Build" ada-compile-application t] "Goto") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
228 (add-menu-button '("Ada") ["Run" ada-run-application t] "Goto") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
229 (add-menu-button '("Ada") ["Debug" ada-gdb-application t] "Goto") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
230 (add-menu-button '("Ada") ["--" nil t] "Goto") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
231 (add-submenu '("Ada") '("Project" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
232 ["Associate" ada-change-prj t] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
233 ["Set Default" ada-set-default-project-file t] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
234 ["List" ada-buffer-list t]) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
235 "Goto") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
236 (add-menu-button '("Ada" "Goto") ["Goto Parent Unit" ada-goto-parent t] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
237 "Next compilation error") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
238 (add-menu-button '("Ada" "Goto") ["Goto References to any entity" ada-find-any-references t] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
239 "Next compilation error") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
240 (add-menu-button '("Ada" "Goto") ["List References" ada-find-references t] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
241 "Next compilation error") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
242 (add-menu-button '("Ada" "Goto") ["Goto Declaration Other Frame" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
243 ada-goto-declaration-other-frame t] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
244 "Next compilation error") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
245 (add-menu-button '("Ada" "Goto") ["Goto Declaration/Body" ada-goto-declaration t] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
246 "Next compilation error") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
247 (add-menu-button '("Ada" "Goto") ["Goto Previous Reference" ada-xref-goto-previous-reference t] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
248 "Next compilation error") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
249 (add-menu-button '("Ada" "Goto") ["--" nil t] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
250 "Next compilation error") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
251 (add-menu-button '("Ada" "Edit") ["Complete Identifier" ada-complete-identifier t] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
252 "Indent Line") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
253 (add-menu-button '("Ada" "Edit") ["--------" nil t] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
254 "Indent Line") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
255 (add-menu-button '("Ada" "Help") ["Gnat User Guide" (info "gnat_ug")]) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
256 (add-menu-button '("Ada" "Help") ["Gnat Reference Manual" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
257 (info "gnat_rm")]) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
258 (add-menu-button '("Ada" "Help") ["Gcc Documentation" (info "gcc")]) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
259 (add-menu-button '("Ada" "Help") ["Gdb Documentation" (info "gdb")]) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
260 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
261 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
262 ;; for Emacs |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
263 (define-key-after (lookup-key ada-mode-map [menu-bar Ada]) [Check] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
264 '("Check file" . ada-check-current) 'Customize) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
265 (define-key-after (lookup-key ada-mode-map [menu-bar Ada]) [Compile] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
266 '("Compile file" . ada-compile-current) 'Check) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
267 (define-key-after (lookup-key ada-mode-map [menu-bar Ada]) [Build] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
268 '("Build" . ada-compile-application) 'Compile) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
269 (define-key-after (lookup-key ada-mode-map [menu-bar Ada]) [Run] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
270 '("Run" . ada-run-application) 'Build) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
271 (define-key-after (lookup-key ada-mode-map [menu-bar Ada]) [Debug] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
272 '("Debug" . ada-gdb-application) 'Run) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
273 (define-key-after (lookup-key ada-mode-map [menu-bar Ada]) [rem] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
274 '("--" . nil) 'Debug) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
275 (define-key-after (lookup-key ada-mode-map [menu-bar Ada]) [Project] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
276 (cons "Project" (easy-menu-create-menu |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
277 "Project" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
278 '(["Associate" ada-change-prj t] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
279 ["Set Default" ada-set-default-project-file t] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
280 ["List" ada-buffer-list t]))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
281 'rem) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
282 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
283 (let ((help-submenu (lookup-key ada-mode-map [menu-bar Ada Help])) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
284 (goto-submenu (lookup-key ada-mode-map [menu-bar Ada Goto])) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
285 (edit-submenu (lookup-key ada-mode-map [menu-bar Ada Edit]))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
286 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
287 (define-key help-submenu [Gnat_ug] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
288 '("Gnat User Guide" . (lambda() (interactive) (info "gnat_ug")))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
289 (define-key help-submenu [Gnat_rm] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
290 '("Gnat Reference Manual" . (lambda() (interactive) (info "gnat_rm")))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
291 (define-key help-submenu [Gcc] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
292 '("Gcc Documentation" . (lambda() (interactive) (info "gcc")))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
293 (define-key help-submenu [gdb] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
294 '("Ada Aware Gdb Documentation" . (lambda() (interactive) (info "gdb")))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
295 (define-key goto-submenu [rem] '("----" . nil)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
296 (define-key goto-submenu [Parent] '("Goto Parent Unit" . ada-goto-parent)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
297 (define-key goto-submenu [References-any] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
298 '("Goto References to any entity" . ada-find-any-references)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
299 (define-key goto-submenu [References] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
300 '("List References" . ada-find-references)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
301 (define-key goto-submenu [Prev] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
302 '("Goto Previous Reference" . 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
|
303 (define-key goto-submenu [Decl-other] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
304 '("Goto Declaration Other Frame" . 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
|
305 (define-key goto-submenu [Decl] |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
306 '("Goto Declaration/Body" . ada-goto-declaration)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
307 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
308 (define-key edit-submenu [rem] '("----" . nil)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
309 (define-key edit-submenu [Complete] '("Complete Identifier" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
310 . ada-complete-identifier)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
311 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
312 )) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
313 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
314 ;; ----- Utilities ------------------------------------------------- |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
315 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
316 (defun ada-require-project-file () |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
317 "If no project file is assigned to this buffer, load one" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
318 (if (not ( my-local-variable-if-set-p 'ada-prj-src-dir (current-buffer))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
319 (ada-parse-prj-file (ada-prj-find-prj-file)))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
320 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
321 (defun my-local-variable-if-set-p (variable &optional buffer) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
322 (and (local-variable-p variable buffer) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
323 (save-excursion |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
324 (set-buffer buffer) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
325 (symbol-value variable)))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
326 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
327 (defun ada-xref-push-pos (filename position) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
328 "Push (FILENAME, POSITION) on the position ring for cross-references" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
329 (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
|
330 (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
|
331 (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
|
332 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
333 (defun 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
|
334 "Go to the previous cross-reference we were on" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
335 (interactive) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
336 (if ada-xref-pos-ring |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
337 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
338 (let ((pos (car ada-xref-pos-ring))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
339 (setq ada-xref-pos-ring (cdr ada-xref-pos-ring)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
340 (find-file (car (cdr pos))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
341 (goto-char (car pos)))))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
342 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
343 (defun ada-convert-file-name (name) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
344 "Function to convert from the buffer file name to the name given in |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
345 argument to the ada-compile-current function. This function is |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
346 overridden on VMS to convert from VMS filename to Unix filenames" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
347 name) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
348 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
349 (defun ada-set-default-project-file (name) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
350 (interactive "fName of project file:") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
351 (set 'ada-prj-default-project-file name) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
352 (ada-reread-prj-file t) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
353 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
354 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
355 ;; ------ Handling the project file ----------------------------- |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
356 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
357 (defun ada-replace-substring (cmd-string search-for replace-with) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
358 "Replace all instances of SEARCH-FOR with REPLACE-WITH in |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
359 string CMD-STRING" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
360 (while (string-match search-for cmd-string) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
361 (setq cmd-string (replace-match replace-with t t cmd-string))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
362 cmd-string) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
363 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
364 (defun ada-treat-cmd-string (cmd-string) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
365 "Replace meta-sequences like ${...} with the appropriate value in CMD-STRING. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
366 The current buffer must be the one where all local variable are definied (that |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
367 is the ada source)" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
368 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
369 (if ( my-local-variable-if-set-p 'ada-prj-src-dir (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
370 (if (string-match "\\(-[^-\$I]*I\\)\${src_dir}" cmd-string) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
371 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
372 (let ((str-def (substring cmd-string (match-beginning 1) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
373 (match-end 1)))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
374 (setq cmd-string |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
375 (ada-replace-substring cmd-string |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
376 "\\(-[^-\$I]*I\\)\${src_dir}" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
377 (mapconcat |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
378 (lambda (x) (concat str-def x)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
379 ada-prj-src-dir " "))))))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
380 (if ( my-local-variable-if-set-p 'ada-prj-obj-dir (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
381 (if (string-match "\\(-[^-\$O]*O\\)\${obj_dir}" cmd-string) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
382 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
383 (let ((str-def (substring cmd-string (match-beginning 1) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
384 (match-end 1)))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
385 (setq cmd-string |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
386 (ada-replace-substring cmd-string |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
387 "\\(-[^-\$O]*O\\)\${obj_dir}" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
388 (mapconcat |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
389 (lambda (x) (concat str-def x)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
390 ada-prj-obj-dir |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
391 " "))))))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
392 (if ( my-local-variable-if-set-p 'ada-prj-remote-machine (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
393 (setq cmd-string |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
394 (ada-replace-substring cmd-string "\${remote_machine}" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
395 ada-prj-remote-machine))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
396 (if ( my-local-variable-if-set-p 'ada-prj-comp-opt (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
397 (setq cmd-string |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
398 (ada-replace-substring cmd-string "\${comp_opt}" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
399 ada-prj-comp-opt))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
400 (if ( my-local-variable-if-set-p 'ada-prj-bind-opt (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
401 (setq cmd-string |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
402 (ada-replace-substring cmd-string "\${bind_opt}" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
403 ada-prj-bind-opt))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
404 (if ( my-local-variable-if-set-p 'ada-prj-link-opt (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
405 (setq cmd-string |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
406 (ada-replace-substring cmd-string "\${link_opt}" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
407 ada-prj-link-opt))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
408 (if ( my-local-variable-if-set-p 'ada-prj-main (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
409 (setq cmd-string |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
410 (ada-replace-substring cmd-string "\${main}" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
411 ada-prj-main))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
412 (if ( my-local-variable-if-set-p 'ada-prj-cross-prefix (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
413 (setq cmd-string |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
414 (ada-replace-substring cmd-string "\${cross_prefix}" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
415 ada-prj-cross-prefix))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
416 cmd-string) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
417 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
418 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
419 (defun ada-prj-find-prj-file (&optional no-user-question) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
420 "Find the prj file associated with the current buffer |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
421 The rules are the following ones : |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
422 - If the buffer is already associated with a prj file, use this one |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
423 - else if there's a default prj file for the same directory use it |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
424 - else if a prj file with the same filename exists, use it |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
425 - else if there's only one prj file in the directory, use it |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
426 - else if there are more than one prj file, ask the user |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
427 - else if there is no prj file and no-user-question is nil, ask the user |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
428 for the project file to use." |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
429 (let* ((current-file (buffer-file-name)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
430 (first-choice (concat |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
431 (file-name-sans-extension current-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
432 ada-project-file-extension)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
433 (dir (file-name-directory current-file)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
434 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
435 ;; on Emacs 20.2, directory-files does not work if |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
436 ;; parse-sexp-lookup-properties is set |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
437 (parse-sexp-lookup-properties nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
438 (prj-files (directory-files |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
439 dir t |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
440 (concat ".*" (regexp-quote ada-project-file-extension) "$"))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
441 (choice nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
442 (default (assoc dir ada-xref-default-prj-file)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
443 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
444 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
445 (cond |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
446 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
447 ((my-local-variable-if-set-p 'ada-prj-prj-file (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
448 ada-prj-prj-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
449 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
450 (default ;; directory default project file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
451 (cdr default)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
452 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
453 ;; global default project file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
454 ((and ada-prj-default-project-file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
455 (not (string= ada-prj-default-project-file ""))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
456 ada-prj-default-project-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
457 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
458 ((file-exists-p first-choice) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
459 first-choice) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
460 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
461 ((= (length prj-files) 1) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
462 (car prj-files)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
463 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
464 ((> (length prj-files) 1) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
465 ;; more than one possible prj file => ask the user |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
466 (with-output-to-temp-buffer "*choice list*" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
467 (princ "There are more than one possible project file. Which one should\n") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
468 (princ "I use ?\n\n") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
469 (princ " no. file name \n") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
470 (princ " --- ------------------------\n") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
471 (let ((counter 1)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
472 (while (<= counter (length prj-files)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
473 (princ (format " %2d) %s\n" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
474 counter |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
475 (nth (1- counter) prj-files))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
476 (setq counter (1+ counter)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
477 ) ; end of while |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
478 ) ; end of let |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
479 ) ; end of with-output-to ... |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
480 (setq choice nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
481 (while (or |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
482 (not choice) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
483 (not (integerp choice)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
484 (< choice 1) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
485 (> choice (length prj-files))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
486 (setq choice (string-to-int |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
487 (read-from-minibuffer "Enter No. of your choice: " |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
488 )))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
489 (nth (1- choice) prj-files)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
490 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
491 ((= (length prj-files) 0) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
492 ;; no project file found. Ask the user about it (the default value |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
493 ;; is the last one the user entered. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
494 (if (or no-user-question (not ada-always-ask-project)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
495 nil |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
496 (setq ada-last-prj-file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
497 (read-file-name "project file:" nil ada-last-prj-file)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
498 (if (string= ada-last-prj-file "") nil ada-last-prj-file)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
499 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
500 ))) |
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 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
503 (defun ada-parse-prj-file (prj-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
504 "Reads and parses the PRJ-FILE file if it was found. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
505 The current buffer should be the ada-file buffer" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
506 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
507 (let ((tmp-src-dir nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
508 (tmp-obj-dir nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
509 (tmp-comp-opt nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
510 (tmp-bind-opt nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
511 (tmp-link-opt nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
512 (tmp-main nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
513 (tmp-comp-cmd nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
514 (tmp-make-cmd nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
515 (tmp-run-cmd nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
516 (tmp-debug-cmd nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
517 (tmp-remote-machine nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
518 (tmp-cross-prefix nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
519 (tmp-cd-cmd (if prj-file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
520 (concat "cd " (file-name-directory prj-file) " && ") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
521 (concat "cd " (file-name-directory (buffer-file-name (current-buffer))) " && "))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
522 (ada-buffer (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
523 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
524 ;; tries to find a project file in the current directory |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
525 (if prj-file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
526 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
527 (find-file prj-file) |
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 ;; first look for the src_dir lines |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
530 (widen) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
531 (goto-char (point-min)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
532 (while |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
533 (re-search-forward "^src_dir=\\(.*\\)" nil t) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
534 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
535 (setq tmp-src-dir (cons |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
536 (file-name-as-directory |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
537 (match-string 1)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
538 tmp-src-dir |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
539 )))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
540 ;; then for the obj_dir lines |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
541 (goto-char (point-min)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
542 (while (re-search-forward "^obj_dir=\\(.*\\)" nil t) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
543 (setq tmp-obj-dir (cons |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
544 (file-name-as-directory |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
545 (match-string 1)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
546 tmp-obj-dir |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
547 ))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
548 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
549 ;; then for the options lines |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
550 (goto-char (point-min)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
551 (if (re-search-forward "^comp_opt=\\(.*\\)" nil t) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
552 (setq tmp-comp-opt (match-string 1))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
553 (goto-char (point-min)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
554 (if (re-search-forward "^bind_opt=\\(.*\\)" nil t) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
555 (setq tmp-bind-opt (match-string 1))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
556 (goto-char (point-min)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
557 (if (re-search-forward "^link_opt=\\(.*\\)" nil t) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
558 (setq tmp-link-opt (match-string 1))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
559 (goto-char (point-min)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
560 (if (re-search-forward "^main=\\(.*\\)" nil t) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
561 (setq tmp-main (match-string 1))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
562 (goto-char (point-min)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
563 (if (re-search-forward "^comp_cmd=\\(.*\\)" nil t) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
564 (setq tmp-comp-cmd (match-string 1))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
565 (goto-char (point-min)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
566 (if (re-search-forward "^remote_machine=\\(.*\\)" nil t) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
567 (setq tmp-remote-machine (match-string 1))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
568 (goto-char (point-min)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
569 (if (re-search-forward "^cross_prefix=\\(.*\\)" nil t) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
570 (setq tmp-cross-prefix (match-string 1))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
571 (goto-char (point-min)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
572 (if (re-search-forward "^make_cmd=\\(.*\\)" nil t) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
573 (setq tmp-make-cmd (match-string 1))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
574 (goto-char (point-min)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
575 (if (re-search-forward "^run_cmd=\\(.*\\)" nil t) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
576 (setq tmp-run-cmd (match-string 1))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
577 (goto-char (point-min)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
578 (if (re-search-forward "^debug_cmd=\\(.*\\)" nil t) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
579 (setq tmp-debug-cmd (match-string 1))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
580 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
581 ;; kills the project file buffer, and go back to the ada buffer |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
582 (kill-buffer nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
583 (set-buffer ada-buffer) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
584 )) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
585 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
586 ;; creates local variables (with default values if needed) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
587 (set (make-local-variable 'ada-prj-prj-file) prj-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
588 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
589 (set (make-local-variable 'ada-prj-src-dir) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
590 (if tmp-src-dir (reverse tmp-src-dir) '("./"))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
591 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
592 (set (make-local-variable 'ada-prj-obj-dir) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
593 (if tmp-obj-dir (reverse tmp-obj-dir) '("./"))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
594 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
595 (set (make-local-variable 'ada-prj-comp-opt) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
596 (if tmp-comp-opt tmp-comp-opt "")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
597 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
598 (set (make-local-variable 'ada-prj-bind-opt) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
599 (if tmp-bind-opt tmp-bind-opt "")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
600 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
601 (set (make-local-variable 'ada-prj-link-opt) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
602 (if tmp-link-opt tmp-link-opt "")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
603 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
604 (set (make-local-variable 'ada-prj-cross-prefix) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
605 (if tmp-cross-prefix |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
606 (if (or (string= tmp-cross-prefix "") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
607 (= (aref tmp-cross-prefix (1- (length tmp-cross-prefix))) ?-)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
608 tmp-cross-prefix |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
609 (concat tmp-cross-prefix "-")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
610 "")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
611 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
612 (set (make-local-variable 'ada-prj-main) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
613 (if tmp-main tmp-main |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
614 (substring (buffer-file-name) 0 -4))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
615 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
616 (set (make-local-variable 'ada-prj-remote-machine) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
617 (ada-treat-cmd-string |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
618 (if tmp-remote-machine tmp-remote-machine ""))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
619 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
620 (set (make-local-variable 'ada-prj-comp-cmd) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
621 (ada-treat-cmd-string |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
622 (if tmp-comp-cmd tmp-comp-cmd |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
623 (concat tmp-cd-cmd ada-prj-default-comp-cmd)))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
624 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
625 (set (make-local-variable 'ada-prj-make-cmd) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
626 (ada-treat-cmd-string |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
627 (if tmp-make-cmd tmp-make-cmd |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
628 (concat tmp-cd-cmd ada-prj-default-make-cmd)))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
629 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
630 (set (make-local-variable 'ada-prj-run-cmd) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
631 (ada-treat-cmd-string |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
632 (if tmp-run-cmd tmp-run-cmd |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
633 (if is-windows "${main}.exe" "${main}")))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
634 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
635 (set (make-local-variable 'ada-prj-debug-cmd) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
636 (ada-treat-cmd-string |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
637 (if tmp-debug-cmd tmp-debug-cmd |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
638 (if is-windows |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
639 "${cross_prefix}gdb ${main}.exe" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
640 "${cross_prefix}gdb ${main}")))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
641 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
642 ;; Add each directory in src_dir to the default prj list |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
643 (if prj-file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
644 (mapcar (lambda (x) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
645 (if (not (assoc (expand-file-name x) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
646 ada-xref-default-prj-file)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
647 (setq ada-xref-default-prj-file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
648 (cons (cons (expand-file-name x) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
649 prj-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
650 ada-xref-default-prj-file)))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
651 ada-prj-src-dir)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
652 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
653 ;; Add the directories to the search path for ff-find-other-file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
654 ;; Do not add the '/' or '\' at the end |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
655 (set (make-local-variable 'ff-search-directories) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
656 (append (mapcar 'directory-file-name ada-prj-src-dir) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
657 ada-search-directories)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
658 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
659 ;; Sets up the compilation-search-path so that Emacs is able to |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
660 ;; go to the source of the errors in a compilation buffer |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
661 (setq compilation-search-path ada-prj-src-dir) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
662 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
663 )) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
664 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
665 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
666 (defun ada-find-references (&optional pos) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
667 "Find every references to the entity under POS |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
668 Calls gnatfind to find every references" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
669 (interactive "") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
670 (unless pos |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
671 (set 'pos (point))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
672 (ada-require-project-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
673 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
674 (let* ((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
|
675 (alifile (ada-get-ali-file-name (ada-file-of identlist)))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
676 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
677 (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
|
678 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
679 ;; 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
|
680 (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
|
681 (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
|
682 (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
|
683 (ada-file-of identlist) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
684 nil nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
685 (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
|
686 (ada-file-of identlist) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
687 (ada-line-of identlist) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
688 (ada-column-of identlist)))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
689 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
690 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
691 (defun ada-find-any-references (entity &optional file line column) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
692 "Search for references to any entity" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
693 (interactive "sEntity name: ") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
694 (ada-require-project-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
695 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
696 (let* ((command (concat "gnatfind -rf " entity |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
697 (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
|
698 (if line (concat ":" line)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
699 (if column (concat ":" column))))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
700 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
701 ;; If a project file is defined, use it |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
702 (if (my-local-variable-if-set-p 'ada-prj-prj-file (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
703 (setq command (concat command " -p" ada-prj-prj-file))) |
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 (compile-internal command |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
706 "No more references" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
707 "gnatfind") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
708 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
709 ;; Hide the "Compilation" menu |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
710 (save-excursion |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
711 (set-buffer "*gnatfind*") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
712 (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
|
713 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
714 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
715 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
716 (defun ada-buffer-list () |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
717 "Display a buffer with all the ada-mode buffers and their associated prj file" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
718 (interactive) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
719 (save-excursion |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
720 (set-buffer (get-buffer-create "*Buffer List*")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
721 (setq buffer-read-only nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
722 (erase-buffer) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
723 (setq standard-output (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
724 (princ "The following line is a list showing the associations between |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
725 directories and project file. It has the format : ((directory_1 . project_file1) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
726 (directory2 . project_file2)...)\n\n") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
727 (princ ada-xref-default-prj-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
728 (princ "\n |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
729 Buffer Mode Project file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
730 ------ ---- ------------ |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
731 \n") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
732 (let ((bl (buffer-list))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
733 (while bl |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
734 (let* ((buffer (car bl)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
735 (buffer-name (buffer-name buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
736 this-buffer-mode-name |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
737 this-buffer-project-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
738 (save-excursion |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
739 (set-buffer buffer) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
740 (setq this-buffer-mode-name |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
741 (if (eq buffer standard-output) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
742 "Buffer Menu" mode-name)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
743 (if (string= this-buffer-mode-name |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
744 "Ada") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
745 (setq this-buffer-project-file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
746 (if ( my-local-variable-if-set-p 'ada-prj-prj-file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
747 (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
748 (expand-file-name ada-prj-prj-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
749 "")))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
750 (if (string= this-buffer-mode-name |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
751 "Ada") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
752 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
753 (princ (format "%-19s " buffer-name)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
754 (princ (format "%-6s " this-buffer-mode-name)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
755 (princ this-buffer-project-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
756 (princ "\n") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
757 )) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
758 ) ;; end let* |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
759 (setq bl (cdr bl)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
760 ) ;; end while |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
761 );; end let |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
762 ) ;; end save-excursion |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
763 (display-buffer "*Buffer List*") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
764 (other-window 1) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
765 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
766 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
767 (defun ada-change-prj (filename) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
768 "Change the project file associated with the current buffer" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
769 (interactive "fproject file:") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
770 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
771 ;; make sure we are using an Ada file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
772 (if (not (string= mode-name "Ada")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
773 (error "You must be in ada-mode to use this function")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
774 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
775 ;; create the local variable if necessay |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
776 (if (not ( my-local-variable-if-set-p 'ada-prj-prj-file (current-buffer))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
777 (make-local-variable 'ada-prj-prj-file)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
778 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
779 ;; ask the user for the new file name |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
780 (setq ada-prj-prj-file filename) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
781 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
782 ;; force emacs to reread the prj file next-time |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
783 (ada-reread-prj-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
784 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
785 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
786 (defun ada-change-default-prj (filename) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
787 "Change the default project file used for all ada files from the |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
788 current directory" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
789 (interactive "ffile name:") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
790 (let ((dir (file-name-directory (buffer-file-name))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
791 (prj (expand-file-name filename))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
792 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
793 ;; If the directory is already associated with a project file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
794 (if (assoc dir ada-xref-default-prj-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
795 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
796 (setcdr (assoc dir ada-xref-default-prj-file) prj) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
797 ;; Else create a new element in the list |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
798 (add-to-list 'ada-xref-default-prj-file (list dir prj))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
799 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
800 ;; Reparse the project file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
801 (ada-parse-prj-file ada-prj-default-project-file))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
802 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
803 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
804 ;; ----- Identlist manipulation ------------------------------------------- |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
805 ;; 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
|
806 ;; 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
|
807 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
808 (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
|
809 (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
|
810 (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
|
811 (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
|
812 (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
|
813 (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
|
814 (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
|
815 (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
|
816 (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
|
817 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
818 (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
|
819 (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
|
820 (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
|
821 (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
|
822 (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
|
823 (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
|
824 (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
|
825 (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
|
826 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
827 (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
|
828 "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
|
829 (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
|
830 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
831 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
832 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
833 ;; ----- Identifier Completion -------------------------------------------- |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
834 (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
|
835 "Tries to complete the identifier around POS. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
836 The feature is only available if the files where compiled not using the -gnatx |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
837 option" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
838 (interactive "d") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
839 (ada-require-project-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
840 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
841 ;; Initialize function-local variablesand jump to the .ali buffer |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
842 ;; 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
|
843 (let* ((curbuf (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
844 (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
|
845 (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
|
846 (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
|
847 "[a-zA-Z0-9_]*\\)")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
848 (completed nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
849 (symalist nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
850 (insertpos nil)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
851 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
852 ;; we are already in the .ali buffer |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
853 (goto-char (point-max)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
854 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
855 ;; 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
|
856 (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
|
857 (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
|
858 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
859 (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
|
860 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
861 ;; kills .ali buffer |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
862 (kill-buffer nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
863 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
864 ;; 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
|
865 (set-buffer curbuf) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
866 (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
|
867 (replace-match "") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
868 ;; inserts the completed symbol |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
869 (insert completed) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
870 )) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
871 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
872 ;; ----- Cross-referencing ---------------------------------------- |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
873 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
874 (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
|
875 "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
|
876 (interactive) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
877 (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
|
878 (ada-goto-declaration (point))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
879 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
880 (defun ada-goto-declaration (pos) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
881 "Displays the declaration of the identifier around POS. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
882 The declaration is shown in another buffer if `ada-xref-other-buffer' is non-nil" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
883 (interactive "d") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
884 (ada-require-project-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
885 (push-mark pos) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
886 (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
|
887 (ada-find-in-ali (ada-read-identifier pos))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
888 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
889 (defun ada-goto-declaration-other-frame (pos) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
890 "Displays the declaration of the identifier around point. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
891 The declation is shown in another frame if `ada-xref-other-buffer' is non-nil" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
892 (interactive "d") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
893 (ada-require-project-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
894 (push-mark pos) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
895 (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
|
896 (ada-find-in-ali (ada-read-identifier pos) t)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
897 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
898 (defun ada-compile (command) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
899 "Start a compilation, on the machine specified in the project file, |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
900 using command COMMAND" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
901 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
902 (if (and (my-local-variable-if-set-p 'ada-prj-remote-machine (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
903 (not (string= ada-prj-remote-machine ""))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
904 (set 'command |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
905 (concat "rsh " ada-prj-remote-machine " '" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
906 command "'"))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
907 (compile command)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
908 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
909 (defun ada-compile-application () |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
910 "Compiles the whole application, using the command find in the gnat.prj file" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
911 (interactive) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
912 (ada-require-project-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
913 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
914 ;; prompt for command to execute |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
915 (ada-compile |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
916 (if ada-xref-confirm-compile |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
917 (read-from-minibuffer "enter command to compile: " |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
918 ada-prj-make-cmd) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
919 ada-prj-make-cmd)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
920 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
921 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
922 (defun ada-compile-current () |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
923 "Recompile the current file" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
924 (interactive) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
925 (ada-require-project-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
926 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
927 ;; prompt for command to execute |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
928 (ada-compile |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
929 (if ada-xref-confirm-compile |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
930 (read-from-minibuffer "enter command to compile: " |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
931 (concat |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
932 ada-prj-comp-cmd " " (ada-convert-file-name (buffer-file-name)))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
933 (concat ada-prj-comp-cmd " " (ada-convert-file-name (buffer-file-name))))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
934 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
935 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
936 (defun ada-check-current () |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
937 "Recompile the current file" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
938 (interactive) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
939 (ada-require-project-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
940 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
941 ;; prompt for command to execute |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
942 (let ((command (concat ada-prj-comp-cmd ada-check-switch |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
943 (ada-convert-file-name (buffer-file-name))))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
944 (compile |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
945 (if ada-xref-confirm-compile |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
946 (read-from-minibuffer "enter command to compile: " command) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
947 command)))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
948 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
949 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
950 (defun ada-run-application () |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
951 "Run the application" |
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 (ada-require-project-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
954 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
955 (if (and (my-local-variable-if-set-p 'ada-prj-cross-prefix (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
956 (not (string= ada-prj-cross-prefix ""))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
957 (error "This feature is not supported yet for cross-compilation environments")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
958 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
959 (let ((command ada-prj-run-cmd) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
960 (buffer (current-buffer))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
961 ;; Search the command name if necessary |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
962 (if (not (my-local-variable-if-set-p 'ada-prj-run-cmd (current-buffer))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
963 (setq command (file-name-sans-extension (buffer-name))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
964 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
965 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
966 ;; Ask for the arguments to the command |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
967 (setq command |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
968 (read-from-minibuffer "Enter command to execute: " |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
969 command)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
970 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
971 ;; Run the command |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
972 (save-excursion |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
973 (set-buffer (get-buffer-create "*run*")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
974 (goto-char (point-max)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
975 (insert "\nRunning " command "\n\n") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
976 (make-comint "run" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
977 (comint-arguments command 0 0) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
978 nil |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
979 (comint-arguments command 1 nil)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
980 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
981 (display-buffer "*run*") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
982 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
983 ;; 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
|
984 (other-window 1) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
985 (switch-to-buffer "*run*") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
986 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
987 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
988 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
989 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
990 (defun ada-gdb-application () |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
991 "Run the application" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
992 (interactive) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
993 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
994 (require 'gud) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
995 (let ((buffer (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
996 gdb-buffer) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
997 (ada-require-project-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
998 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
999 (if (and (my-local-variable-if-set-p 'ada-prj-cross-prefix buffer) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1000 (not (string= ada-prj-cross-prefix ""))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1001 (error "This feature is not supported yet for cross-compilation environments")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1002 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1003 ;; If the command to use was given in the project file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1004 (if (my-local-variable-if-set-p 'ada-prj-debug-cmd buffer) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1005 (gdb ada-prj-debug-cmd) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1006 ;; Else the user will have to enter the command himself |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1007 (gdb "") |
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 (set 'gdb-buffer (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1011 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1012 ;; Switch back to the source buffer |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1013 ;; and Activate the debug part in the contextual menu |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1014 (switch-to-buffer buffer) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1015 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1016 (if (functionp 'gud-make-debug-menu) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1017 (gud-make-debug-menu)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1018 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1019 ;; Warning: on Emacs >= 20.3.8, same-window-regexps includes gud-*, |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1020 ;; so the following call to display buffer will select the |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1021 ;; buffer instead of displaying it in another window |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1022 ;; This is why the second argument to display-buffer is 't' |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1023 (display-buffer gdb-buffer t) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1024 )) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1025 |
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 (defun ada-reread-prj-file (&optional for-all-buffer) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1028 "Forces emacs to read the project file again. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1029 Otherwise, this file is only read once, and never read again |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1030 If `for-all-buffer' is non-nil, or the function was called with \C-u prefix, |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1031 then do this for every opened buffer" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1032 (interactive "P") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1033 (if for-all-buffer |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1034 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1035 ;; do this for every buffer |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1036 (mapcar (lambda (x) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1037 (save-excursion |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1038 (set-buffer x) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1039 ;; if we have the ada-mode and there is a real file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1040 ;; associated with the buffer |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1041 (if (and (string= mode-name "Ada") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1042 (buffer-file-name)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1043 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1044 (kill-local-variable 'ada-prj-src-dir) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1045 (kill-local-variable 'ada-prj-obj-dir) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1046 (ada-parse-prj-file (ada-prj-find-prj-file)))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1047 )) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1048 (buffer-list)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1049 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1050 ;; else do this just for the current buffer |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1051 (kill-local-variable 'ada-prj-src-dir) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1052 (kill-local-variable 'ada-prj-obj-dir) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1053 (ada-parse-prj-file (ada-prj-find-prj-file))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1054 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1055 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1056 ;; ------ Private routines |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1057 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1058 (defun ada-xref-current (file &optional ali-file-name) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1059 "Creates a new ali file from the FILE source file, |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1060 assuming the ali file will be called ALI-FILE-NAME. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1061 Uses the function `compile' to execute the commands |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1062 defined in the project file." |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1063 ;; kill old buffer |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1064 (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
|
1065 (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
|
1066 (kill-buffer (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
|
1067 ;; prompt for command to execute |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1068 (setq compile-command (concat ada-prj-comp-cmd |
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 file)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1071 (compile |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1072 (if ada-xref-confirm-compile |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1073 (read-from-minibuffer "enter command to execute gcc: " |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1074 compile-command) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1075 compile-command)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1076 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1077 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1078 (defun ada-first-non-nil (list) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1079 "Returns the first non-nil element of the list" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1080 (cond |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1081 ((not list) nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1082 ((car list) (car list)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1083 (t (ada-first-non-nil (cdr list))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1084 )) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1085 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1086 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1087 (defun ada-find-ali-file-in-dir (file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1088 "Search for FILE in obj_dir |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1089 The current buffer must be the Ada file" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1090 (ada-first-non-nil |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1091 (mapcar (lambda (x) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1092 (if (file-exists-p (concat (file-name-directory x) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1093 file)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1094 (concat (file-name-directory x) file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1095 nil)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1096 ada-prj-obj-dir)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1097 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1098 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1099 (defun 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
|
1100 "create the ali file name for the ada-file FILE |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1101 The file is searched for in every directory shown in the |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1102 obj_dir lines of the project file" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1103 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1104 ;; 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
|
1105 ;; 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
|
1106 ;; 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
|
1107 ;; 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
|
1108 ;; 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
|
1109 ;; 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
|
1110 ;; 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
|
1111 ;; .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
|
1112 ;; 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
|
1113 ;; 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
|
1114 ;; for its associated .ali file by subtituing the extension |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1115 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1116 (save-excursion |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1117 (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
|
1118 (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
|
1119 (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
|
1120 ".ali")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1121 (ali-file-name "")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1122 ;; First step |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1123 ;; we take the first possible completion |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1124 (setq ali-file-name (ada-find-ali-file-in-dir short-ali-file-name)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1125 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1126 ;; If we have found the .ali file, but the source file was a spec |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1127 ;; with a non-standard name, search the .ali file for the body if any, |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1128 ;; since the xref information is more complete in that one |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1129 (unless ali-file-name |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1130 (if (not (string= (file-name-extension file) ".ads")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1131 (let ((is-spec nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1132 (specs ada-spec-suffixes) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1133 body-ali) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1134 (while specs |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1135 (if (string-match (concat (regexp-quote (car specs)) "$") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1136 file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1137 (set 'is-spec t)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1138 (set 'specs (cdr specs))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1139 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1140 (if is-spec |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1141 (set 'body-ali |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1142 (ada-find-ali-file-in-dir |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1143 (concat (file-name-sans-extension |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1144 (file-name-nondirectory |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1145 (ada-other-file-name))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1146 ".ali")))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1147 (if body-ali |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1148 (set 'ali-file-name body-ali)))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1149 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1150 ;; else we did not find the .ali file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1151 ;; Second chance: in case the files do not have standard names (such |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1152 ;; as for instance file_s.ada and file_b.ada), try to go to the |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1153 ;; other file and look for its ali file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1154 (setq short-ali-file-name |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1155 (concat (file-name-sans-extension |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1156 (file-name-nondirectory (ada-other-file-name))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1157 ".ali")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1158 (setq ali-file-name (ada-find-ali-file-in-dir short-ali-file-name)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1159 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1160 ;; If still not found, try to recompile the file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1161 (if (not ali-file-name) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1162 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1163 ;; recompile only if the user asked for this |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1164 (if ada-xref-create-ali |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1165 (ada-xref-current file ali-file-name)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1166 (error "Ali file not found. Recompile your file"))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1167 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1168 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1169 ;; same if the .ali file is too old and we must recompile it |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1170 (if (and (file-newer-than-file-p file ali-file-name) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1171 ada-xref-create-ali) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1172 (ada-xref-current file ali-file-name)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1173 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1174 ;; else returns the correct absolute file name |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1175 (expand-file-name ali-file-name)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1176 )) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1177 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1178 (defun ada-get-ada-file-name (file original-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1179 "Create the complete file name (+directory) for FILE |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1180 The original file (where the user was) is ORIGINAL-FILE. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1181 Search in project file for possible paths" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1182 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1183 (save-excursion |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1184 (set-buffer (get-file-buffer original-file)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1185 ;; 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
|
1186 ;; return the absolute file name |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1187 (let ((filename |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1188 (ada-first-non-nil (mapcar (lambda (x) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1189 (if (file-exists-p (concat (file-name-directory x) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1190 (file-name-nondirectory file))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1191 (concat (file-name-directory x) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1192 (file-name-nondirectory file)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1193 nil)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1194 ada-prj-src-dir)))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1195 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1196 (if filename |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1197 (expand-file-name filename) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1198 (error (concat |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1199 (file-name-nondirectory file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1200 " 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
|
1201 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1202 ))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1203 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1204 (defun ada-find-file-number-in-ali (file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1205 "Returns the file number for FILE in the associated ali file" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1206 (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
|
1207 (goto-char (point-min)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1208 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1209 (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
|
1210 (beginning-of-line) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1211 (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
|
1212 (count-lines begin (point)))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1213 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1214 (defun ada-read-identifier (pos) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1215 "Returns the identlist around POS and switch to the .ali buffer" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1216 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1217 ;; If there's a compilation in progress, it's probably because the |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1218 ;; .ali file didn't exist. So we should wait... |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1219 (if compilation-in-progress |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1220 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1221 (message "Compilation in progress. Try again when it is finished") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1222 (set 'quit-flag t))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1223 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1224 ;; 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
|
1225 (if (>= (point) (point-max)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1226 (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
|
1227 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1228 ;; 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
|
1229 ;; 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
|
1230 (goto-char pos) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1231 (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
|
1232 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1233 ;; 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
|
1234 (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
|
1235 (error "Inside comment")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1236 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1237 (let (identifier identlist) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1238 ;; 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
|
1239 ;; as in "+", "-", .. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1240 (if (= (char-after) ?\") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1241 (forward-char 1)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1242 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1243 ;; if looking at an operator |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1244 (if (looking-at ada-operator-re) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1245 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1246 (if (and (= (char-before) ?\") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1247 (= (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
|
1248 (forward-char -1)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1249 (set 'identifier (concat "\"" (match-string 0) "\""))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1250 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1251 (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
|
1252 (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
|
1253 (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
|
1254 (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
|
1255 (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
|
1256 (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
|
1257 (error "No identifier around"))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1258 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1259 ;; Build the identlist |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1260 (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
|
1261 (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
|
1262 (ada-set-line identlist |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1263 (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
|
1264 (ada-set-column identlist |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1265 (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
|
1266 (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
|
1267 identlist |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1268 )) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1269 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1270 (defun 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
|
1271 "Completes and returns the identlist with the information extracted |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1272 from the ali file (definition file and places where it is referenced)" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1273 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1274 (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
|
1275 declaration-found) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1276 (set-buffer ali-buffer) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1277 (goto-char (point-min)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1278 (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
|
1279 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1280 ;; 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
|
1281 ;; 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
|
1282 ;; 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
|
1283 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1284 (if (re-search-forward |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1285 (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
|
1286 nil t) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1287 (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
|
1288 (set 'declaration-found |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1289 (re-search-forward |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1290 (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
|
1291 "." (ada-column-of identlist) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1292 "[ *]" (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
|
1293 " \\(.*\\)$") bound t)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1294 (if declaration-found |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1295 (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
|
1296 )) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1297 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1298 ;; 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
|
1299 ;; 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
|
1300 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1301 (unless declaration-found |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1302 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1303 ;; 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
|
1304 ;; reference to it |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1305 (goto-char (point-min)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1306 (set 'declaration-found t) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1307 (ada-set-ali-index |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1308 identlist |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1309 (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
|
1310 (ada-file-of identlist)))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1311 (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
|
1312 "|\\([0-9]+.[0-9]+ \\)*" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1313 (ada-line-of identlist) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1314 "[^0-9]" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1315 (ada-column-of identlist)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1316 nil t) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1317 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1318 ;; 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
|
1319 ;; 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
|
1320 ;; Or maybe we are already on the declaration... |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1321 (unless (re-search-forward (concat "^\\([a-zA-Z0-9_.\"]+[ *]\\)*" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1322 (ada-line-of identlist) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1323 "[^0-9]" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1324 (ada-column-of identlist)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1325 nil t) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1326 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1327 ;; 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
|
1328 ;; 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
|
1329 ;; created |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1330 (set 'declaration-found nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1331 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1332 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1333 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1334 ;; 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
|
1335 ;; 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
|
1336 (if declaration-found |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1337 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1338 (beginning-of-line) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1339 ;; 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
|
1340 (while (looking-at "^\\.") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1341 (previous-line 1)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1342 (unless (looking-at (concat "[0-9]+.[0-9]+[ *]" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1343 (ada-name-of identlist) " ")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1344 (set 'declaration-found nil)))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1345 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1346 ;; 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
|
1347 ;; 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
|
1348 ;; 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
|
1349 ;; automatically |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1350 (unless declaration-found |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1351 (unless (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
|
1352 ;; 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
|
1353 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1354 (kill-buffer ali-buffer) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1355 (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
|
1356 " found.")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1357 ))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1358 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1359 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1360 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1361 ;; 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
|
1362 ;; information available |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1363 (beginning-of-line) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1364 (if declaration-found |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1365 (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
|
1366 (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
|
1367 (save-excursion |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1368 (next-line 1) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1369 (beginning-of-line) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1370 (while (looking-at "^\\.\\(.*\\)") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1371 (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
|
1372 (next-line 1)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1373 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1374 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1375 (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
|
1376 (ada-set-declare-file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1377 identlist |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1378 (ada-get-ada-file-name (match-string 1) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1379 (ada-file-of identlist)))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1380 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1381 (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
|
1382 )) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1383 )) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1384 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1385 (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
|
1386 "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
|
1387 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
|
1388 to make some guesses. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1389 This function is disabled for operators, and only works for identifiers" |
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 (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
|
1392 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1393 (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
|
1394 (my-regexp (concat "[ *]" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1395 (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
|
1396 (line-ada "--") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1397 (col-ada "--") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1398 (line-ali 0) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1399 (len 0) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1400 (choice 0)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1401 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1402 (goto-char (point-max)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1403 (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
|
1404 (save-excursion |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1405 (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
|
1406 (beginning-of-line) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1407 ;; 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
|
1408 (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
|
1409 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1410 (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
|
1411 (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
|
1412 (setq line-ada "--") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1413 (setq col-ada "--") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1414 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1415 ;; 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
|
1416 (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
|
1417 (add-to-list |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1418 '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
|
1419 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1420 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1421 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1422 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1423 ;; 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
|
1424 (setq len (length declist)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1425 (cond |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1426 ;; none => error |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1427 ((= len 0) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1428 (kill-buffer (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1429 (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
|
1430 (ada-name-of identlist) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1431 " recorded in .ali file"))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1432 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1433 ;; 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
|
1434 ((= len 1) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1435 (goto-line (caar declist))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1436 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1437 ;; 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
|
1438 (t |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1439 (with-output-to-temp-buffer "*choice list*" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1440 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1441 (princ "Identifier is overloaded and Xref information is not up to date.\n") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1442 (princ "Possible declarations are:\n\n") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1443 (princ " no. in file at line col\n") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1444 (princ " --- --------------------- ---- ----\n") |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1445 (let ((counter 1)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1446 (while (<= counter len) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1447 (princ (format " %2d) %-21s %4s %4s\n" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1448 counter |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1449 (ada-get-ada-file-name |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1450 (nth 1 (nth (1- counter) declist)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1451 (ada-file-of identlist)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1452 (nth 2 (nth (1- counter) declist)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1453 (nth 3 (nth (1- counter) declist)) |
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 (setq counter (1+ counter)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1456 ) ; end of while |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1457 ) ; end of let |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1458 ) ; end of with-output-to ... |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1459 (setq choice nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1460 (while (or |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1461 (not choice) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1462 (not (integerp choice)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1463 (< choice 1) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1464 (> choice len)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1465 (setq choice (string-to-int |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1466 (read-from-minibuffer "Enter No. of your choice: ")))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1467 (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
|
1468 )))))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1469 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1470 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1471 (defun ada-find-in-ali (identlist &optional other-frame) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1472 "Look in the .ali file for the definition of the identifier |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1473 if OTHER-FRAME is non nil, and `ada-xref-other-buffer' is non nil, |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1474 opens a new window to show the declaration" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1475 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1476 (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
|
1477 (let ((ali-line (ada-references-of identlist)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1478 file line col) |
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 ;; If we were on a declaration, go to the body |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1481 (if (ada-on-declaration identlist) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1482 (if (string-match "\\([0-9]+\\)[bc]\\([0-9]+\\)" ali-line) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1483 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1484 (setq line (match-string 1 ali-line) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1485 col (match-string 2 ali-line)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1486 ;; it there was a file number in the same line |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1487 (if (string-match "\\([0-9]+\\)|\\([^|bc]+\\)?[bc]" ali-line) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1488 (let ((file-number (match-string 1 ali-line))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1489 (goto-char (point-min)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1490 (re-search-forward "^D \\([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
|
1491 (string-to-number file-number)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1492 (set 'file (match-string 1)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1493 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1494 ;; Else get the nearest file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1495 (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
|
1496 (set 'file (match-string 1)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1497 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1498 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1499 (error "No body found")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1500 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1501 ;; Else we were not on the declaration, find the place for it |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1502 (string-match "\\([0-9]+\\)[a-zA-Z+]\\([0-9]+\\)[ *]" ali-line) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1503 (setq line (match-string 1 ali-line) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1504 col (match-string 2 ali-line) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1505 file (ada-declare-file-of identlist)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1506 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1507 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1508 ;; Now go to the buffer |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1509 (ada-xref-change-buffer |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1510 (ada-get-ada-file-name file (ada-file-of identlist)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1511 (string-to-number line) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1512 (1- (string-to-number col)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1513 identlist |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1514 other-frame) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1515 )) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1516 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1517 (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
|
1518 (file line column identlist &optional other-frame) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1519 "Select and display FILE, at LINE and COLUMN. The new file is |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1520 associated with the same project file as the one for IDENTLIST. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1521 If we do not end on the same identifier as IDENTLIST, find the closest |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1522 match. Kills the .ali buffer at the end" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1523 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1524 (let (prj-file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1525 declaration-buffer |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1526 (ali-buffer (current-buffer))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1527 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1528 ;; get the current project file for the source ada file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1529 (save-excursion |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1530 (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
|
1531 (set 'prj-file ada-prj-prj-file)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1532 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1533 ;; 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
|
1534 (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
|
1535 (if other-frame |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1536 (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
|
1537 (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
|
1538 (set-buffer declaration-buffer) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1539 (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
|
1540 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1541 (find-file file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1542 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1543 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1544 ;; If the new buffer is not already associated with a project file, do it |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1545 (unless (my-local-variable-if-set-p 'ada-prj-prj-file (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1546 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1547 (make-local-variable 'ada-prj-prj-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1548 (set 'ada-prj-prj-file prj-file))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1549 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1550 ;; 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
|
1551 (push-mark) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1552 (goto-line line) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1553 (move-to-column column) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1554 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1555 ;; 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
|
1556 ;; 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
|
1557 ;; 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
|
1558 (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
|
1559 (ada-xref-search-nearest (ada-name-of identlist))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1560 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1561 (kill-buffer ali-buffer))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1562 |
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-xref-search-nearest (name) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1565 "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
|
1566 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
|
1567 (let ((orgpos (point)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1568 (newpos nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1569 (diff nil)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1570 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1571 (goto-char (point-max)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1572 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1573 ;; 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
|
1574 (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
|
1575 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1576 ;; 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
|
1577 (if (and |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1578 (not (save-excursion |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1579 (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
|
1580 (looking-at "_"))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1581 (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
|
1582 (or |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1583 ;; variable declaration ? |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1584 (save-excursion |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1585 (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
|
1586 (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
|
1587 (looking-at ":[^=]")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1588 ;; 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
|
1589 (save-excursion |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1590 (ada-goto-previous-word) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1591 (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
|
1592 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1593 ;; 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
|
1594 (if (or (not diff) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1595 (< (abs (- (point) orgpos)) diff)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1596 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1597 (setq newpos (point) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1598 diff (abs (- newpos orgpos)))))) |
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 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1601 (if newpos |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1602 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1603 (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
|
1604 (goto-char newpos)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1605 nil))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1606 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1607 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1608 ;; 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
|
1609 (defun ada-goto-parent () |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1610 "go to the parent library file" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1611 (interactive) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1612 (ada-require-project-file) |
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 (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
|
1615 (unit-name nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1616 (body-name nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1617 (ali-name nil)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1618 (save-excursion |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1619 (set-buffer buffer) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1620 (goto-char (point-min)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1621 (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
|
1622 (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
|
1623 (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
|
1624 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1625 (kill-buffer buffer) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1626 (error "No parent unit !")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1627 (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
|
1628 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1629 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1630 ;; 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
|
1631 (goto-char (point-min)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1632 (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
|
1633 "%s[ \t]+\\([^ \t]+\\)[ \t]+" |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1634 "\\([^ \t\n]+\\)")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1635 (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
|
1636 (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
|
1637 (kill-buffer buffer) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1638 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1639 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1640 (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
|
1641 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1642 (save-excursion |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1643 ;; 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
|
1644 (if ali-name |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1645 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1646 (find-file ali-name) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1647 (goto-char (point-min)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1648 (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
|
1649 "\\([^ \t]+\\)")) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1650 (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
|
1651 (kill-buffer (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1652 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1653 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1654 ) |
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 (find-file body-name) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1657 )) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1658 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1659 (defun ada-make-filename-from-adaname (adaname) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1660 "Determine the filename of a package/procedure from its own Ada name." |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1661 ;; this is done simply by calling `gnatkr', when we work with GNAT. It |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1662 ;; must be a more complex function in other compiler environments. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1663 (let (krunch-buf) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1664 (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
|
1665 (save-excursion |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1666 (set-buffer krunch-buf) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1667 ;; 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
|
1668 (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
|
1669 adaname ada-krunch-args) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1670 ;; 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
|
1671 (setq adaname (buffer-substring |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1672 (point-min) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1673 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1674 (goto-char (point-min)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1675 (end-of-line) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1676 (point)))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1677 (kill-buffer krunch-buf))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1678 adaname |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1679 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1680 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1681 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1682 (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
|
1683 "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
|
1684 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
|
1685 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
|
1686 (interactive) |
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 (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
|
1689 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1690 (ada-require-project-file) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1691 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1692 (delete-region (point-min) (point-max)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1693 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1694 ;; 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
|
1695 (let* ((gnatstub-opts (ada-treat-cmd-string ada-gnatstub-opts)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1696 (filename (buffer-file-name (car (cdr (buffer-list))))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1697 (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
|
1698 (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
|
1699 (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
|
1700 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1701 (save-excursion |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1702 (set-buffer buffer) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1703 (compilation-minor-mode 1) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1704 (erase-buffer) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1705 (insert gnatstub-cmd) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1706 (newline) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1707 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1708 ;; 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
|
1709 (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
|
1710 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1711 (if (save-excursion |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1712 (set-buffer buffer) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1713 (goto-char (point-min)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1714 (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
|
1715 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1716 (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
|
1717 (sleep-for 2) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1718 (kill-buffer buffer) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1719 (ada-make-body)) |
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 ;; 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
|
1722 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1723 ;; Kill the temporary buffer created by find-file |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1724 (set-buffer-modified-p nil) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1725 (kill-buffer (current-buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1726 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1727 (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
|
1728 (progn |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1729 (find-file output) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1730 (kill-buffer buffer)) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1731 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1732 ;; display the error buffer |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1733 (display-buffer buffer) |
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 ))) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1736 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1737 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1738 (defun ada-xref-initialize () |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1739 "Function called by ada-mode-hook to initialize the ada-xref.el package. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1740 For instance, it creates the gnat-specific menus, set some hooks for |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1741 find-file...." |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1742 (ada-add-ada-menu) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1743 (make-local-hook 'ff-file-created-hooks) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1744 (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
|
1745 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1746 ;; 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
|
1747 ;; 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
|
1748 (make-local-hook 'ff-pre-find-hooks) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1749 (add-hook 'ff-pre-find-hooks 'ada-require-project-file) |
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 ;; 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
|
1752 (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
|
1753 ) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1754 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1755 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1756 ;; ----- 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
|
1757 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1758 ;; 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
|
1759 ;; config file are not overwritten every time we open a new file. |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1760 (ada-add-keymap) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1761 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1762 (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
|
1763 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1764 (provide 'ada-xref) |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1765 |
e5e3310746eb
New file. Use Gnat for lookup and completion in Ada mode
Gerd Moellmann <gerd@gnu.org>
parents:
diff
changeset
|
1766 ;;; ada-xref.el ends here |