annotate lisp/progmodes/ada-support.el @ 25923:dcafaf809fac

Require dired when compiling. (ange-ftp-normal-login): Allow EFS-style port specification.
author Dave Love <fx@gnu.org>
date Fri, 08 Oct 1999 11:44:38 +0000
parents 5a88e84b63a4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25904
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1 ;; @(#) ada-support.el --- Override some standard Emacs functions
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3 ;; Copyright (C) 1994-1999 Free Software Foundation, Inc.
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
4
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
5 ;; Author: Emmanuel Briot <briot@gnat.com>
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
6 ;; Maintainer: Emmanuel Briot <briot@gnat.com>
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
7 ;; Ada Core Technologies's version: $Revision: 1.3 $
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
8 ;; Keywords: languages ada xref
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
9
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
10 ;; This file is not part of GNU Emacs.
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
11
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
12 ;; This program is free software; you can redistribute it and/or modify
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
15 ;; any later version.
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
16
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
17 ;; This program is distributed in the hope that it will be useful,
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
21
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
23 ;; along with GNU Emacs; see the file COPYING. If not, write to
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
24 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
25
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
26 ;;; Commentary:
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
27 ;;; This file overrides some functions that are defined in Emacs/XEmacs,
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
28 ;;; since some of them have known bugs in old versions.
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
29 ;;; This is intended as a support package for older Emacs versions, and
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
30 ;;; should not be needed for the latest version of Emacs (currently 20.4)
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
31 ;;; where these bugs have been fixed
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
32
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
33
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
34
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
35 ;;; Some functions have been renamed from one version to the other
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
36 ;;; `easy-menu-create-keymaps' has been renamed `easy-menu-create-menu'
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
37 ;;; from Emacs >= 20.3
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
38 ;;; Do nothing for XEmacs
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
39
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
40 (unless (or (ada-check-emacs-version 20 3)
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
41 (not (ada-check-emacs-version 1 1 t)))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
42
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
43 (if (and (not (fboundp 'easy-menu-create-menu))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
44 (fboundp 'easy-menu-create-keymaps))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
45 (defun easy-menu-create-menu (menu-name menu-items)
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
46 "Alias redefined in ada-support.el"
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
47 (easy-menu-create-keymaps menu-name menu-items))))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
48
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
49
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
50
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
51 ;;; A fix for Emacs <= 20.3
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
52 ;;; Imenu does not support name overriding in submenus (the first such name
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
53 ;;; is always selected, whichever the user actually chose).
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
54 ;;; This has been fixed in Emacs 20.4
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
55 ;;; Fix was: use assq instead of assoc in the submenus
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
56
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
57 (unless (ada-check-emacs-version 20 4)
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
58
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
59 (defun imenu--mouse-menu (index-alist event &optional title)
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
60 "Overrides the default imenu--mouse-menu from imenu.el, that has a bug.
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
61 The default one does not know anything about overriding in submenus, since
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
62 it is using assoc instead of assq"
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
63 (set 'index-alist (imenu--split-submenus index-alist))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
64 (let* ((menu (imenu--split-menu index-alist
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
65 (or title (buffer-name))))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
66 position)
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
67 (set 'menu (imenu--create-keymap-1 (car menu)
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
68 (if (< 1 (length (cdr menu)))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
69 (cdr menu)
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
70 (cdr (car (cdr menu))))))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
71 (set 'position (x-popup-menu event menu))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
72 (cond ((eq position nil)
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
73 position)
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
74 ;; If one call to x-popup-menu handled the nested menus,
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
75 ;; find the result by looking down the menus here.
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
76 ((and (listp position)
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
77 (numberp (car position))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
78 (stringp (nth (1- (length position)) position)))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
79 (let ((final menu))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
80 (while position
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
81 (set 'final (assq (car position) final))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
82 (set 'position (cdr position)))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
83 (or (string= (car final) (car imenu--rescan-item))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
84 (nthcdr 3 final))))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
85 ;; If x-popup-menu went just one level and found a leaf item,
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
86 ;; return the INDEX-ALIST element for that.
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
87 ((and (consp position)
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
88 (stringp (car position))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
89 (null (cdr position)))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
90 (or (string= (car position) (car imenu--rescan-item))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
91 (assq (car position) index-alist)))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
92 ;; If x-popup-menu went just one level
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
93 ;; and found a non-leaf item (a submenu),
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
94 ;; recurse to handle the rest.
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
95 ((listp position)
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
96 (imenu--mouse-menu position event
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
97 (if title
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
98 (concat title imenu-level-separator
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
99 (car (rassq position index-alist)))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
100 (car (rassq position index-alist))))))))
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
101 )
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
102
5a88e84b63a4 New file.
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
103 (provide 'ada-support)