1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-01 11:14:55 +00:00

(imenu, imenu--flatten-index-alist): Add marker support.

(imenu--cleanup): New function.
(imenu-example--name-and-position): Now uses markers.

(imenu-add-to-menubar): New function to add an entry
to the menubar for the buffer's current local keymap.
This commit is contained in:
Richard M. Stallman 1994-08-01 07:11:43 +00:00
parent f150bd2b3e
commit 5d3b0f182f

View File

@ -5,7 +5,7 @@
;; Author: Ake Stenhoff <etxaksf@aom.ericsson.se>
;; Lars Lindberg <lli@sypro.cap.se>
;; Created: 8 Feb 1994
;; Version: 1.7
;; Version: 1.11
;; Keywords: tools
;;
;; This program is free software; you can redistribute it and/or modify
@ -43,6 +43,15 @@
;; supplied.
;;; Change Log:
;; v1.11 Jul 26 1994 Ake Stenhoff
;; Fixed bugs in 'imenu-add-to-menubar'.
;; v1.10 Jul 21 1994 Ake Stenhoff
;; Added support for markers.
;; Changed the examples to use
;; markers.
;; Thanks [alon].
;; v1.9 Jun 14 1994 Ake Stenhoff
;; Added 'imenu-add-to-menubar'.
;; v1.7 Apr 12 1994 Ake Stenhoff
;; Changed doc strings refering to symbols.
;; Require 'cl' when compiling only.
@ -77,7 +86,7 @@
;;; Thanks goes to
;; [simon] - Simon Leinen simon@lia.di.epfl.ch
;; [dean] - Dean Andrews ada@unison.com
;;
;; [alon] - Alon Albert al@mercury.co.il
;;; Code
(eval-when-compile (require 'cl))
@ -287,7 +296,25 @@ This function is called after the function pointed out by
(error "No items suitable for an index found in this buffer."))
;; Add a rescan option to the index.
(cons imenu--rescan-item imenu--index-alist))
;;;
;;; Find all markers in alist and makes
;;; them point nowhere.
;;;
(defun imenu--cleanup (&optional alist)
;; Sets the markers in imenu--index-alist
;; point nowhere.
;; if alist is provided use that list.
(and imenu--index-alist
(mapc
(function
(lambda (item)
(cond
((markerp (cdr item))
(set-marker (cdr item) nil))
((listp (cdr item))
(imenu--cleanup (cdr item))))))
(if alist alist imenu--index-alist))
t))
(defun imenu-default-create-index-function ()
"*Wrapper for index searching functions.
@ -350,7 +377,7 @@ Their results are gathered into an index alist."
(concat prefix imenu-level-separator name)
name))))
(cond
((numberp pos)
((or (markerp pos) (numberp pos))
(list (cons new-prefix pos)))
(t
(imenu--flatten-index-alist pos new-prefix))))))
@ -468,9 +495,20 @@ The returned value is on the form (INDEX-NAME . INDEX-POSITION)."
(imenu--mouse-menu index-alist last-nonmenu-event)
(imenu--completion-buffer index-alist prompt)))
(and (eq result t)
(imenu--cleanup)
(setq imenu--index-alist nil)))
result))
(defun imenu-add-to-menubar (name)
"Adds an \"imenu\" entry to the menubar for the
current local keymap.
NAME is the string naming the menu to be added.
See 'imenu' for more information."
(interactive "sMenu name: ")
(and window-system
(define-key (current-local-map) [menu-bar index]
(cons name 'imenu))))
;;;###autoload
(defun imenu ()
"Jump to a place in the buffer chosen using a buffer menu or mouse menu.
@ -480,7 +518,12 @@ See `imenu-choose-buffer-index' for more information."
(and index-item
(progn
(push-mark)
(goto-char (cdr index-item))))))
(cond
((markerp (cdr index-item))
(goto-char (marker-position (cdr index-item))))
(t
(goto-char (cdr index-item))))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;
@ -495,9 +538,11 @@ See `imenu-choose-buffer-index' for more information."
(save-excursion
(forward-sexp -1)
(let ((beg (point))
(end (progn (forward-sexp) (point))))
(end (progn (forward-sexp) (point)))
(marker (make-marker)))
(set-marker marker beg)
(cons (buffer-substring beg end)
beg))))
marker))))
;;;
;;; Lisp