]> code.delx.au - gnu-emacs/blobdiff - lisp/progmodes/ebrowse.el
Merge from mainline.
[gnu-emacs] / lisp / progmodes / ebrowse.el
index 7e53ec8a5f6c900a10a4b4f40179ed6e67ff81fe..d674484345abc753f434f5e7558a662dc5cffd0d 100644 (file)
@@ -1,8 +1,6 @@
 ;;; ebrowse.el --- Emacs C++ class browser & tags facility
 
-;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-;; 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-;; Free Software Foundation Inc.
+;; Copyright (C) 1992-2011  Free Software Foundation, Inc.
 
 ;; Author: Gerd Moellmann <gerd@gnu.org>
 ;; Maintainer: FSF
@@ -162,8 +160,7 @@ This space is used to display markers."
     (t (:foreground "red")))
   "*The face used for the mark character in the tree."
   :group 'ebrowse-faces)
-;; backward-compatibility alias
-(put 'ebrowse-tree-mark-face 'face-alias 'ebrowse-tree-mark)
+(define-obsolete-face-alias 'ebrowse-tree-mark-face 'ebrowse-tree-mark "22.1")
 
 
 (defface ebrowse-root-class
@@ -171,24 +168,21 @@ This space is used to display markers."
     (t (:weight bold :foreground "blue")))
   "*The face used for root classes in the tree."
   :group 'ebrowse-faces)
-;; backward-compatibility alias
-(put 'ebrowse-root-class-face 'face-alias 'ebrowse-root-class)
+(define-obsolete-face-alias 'ebrowse-root-class-face 'ebrowse-root-class "22.1")
 
 
 (defface ebrowse-file-name
   '((t (:italic t)))
   "*The face for filenames displayed in the tree."
   :group 'ebrowse-faces)
-;; backward-compatibility alias
-(put 'ebrowse-file-name-face 'face-alias 'ebrowse-file-name)
+(define-obsolete-face-alias 'ebrowse-file-name-face 'ebrowse-file-name "22.1")
 
 
 (defface ebrowse-default
   '((t nil))
   "*Face for everything else in the tree not having other faces."
   :group 'ebrowse-faces)
-;; backward-compatibility alias
-(put 'ebrowse-default-face 'face-alias 'ebrowse-default)
+(define-obsolete-face-alias 'ebrowse-default-face 'ebrowse-default "22.1")
 
 
 (defface ebrowse-member-attribute
@@ -196,16 +190,16 @@ This space is used to display markers."
     (t (:foreground "red")))
   "*Face used to display member attributes."
   :group 'ebrowse-faces)
-;; backward-compatibility alias
-(put 'ebrowse-member-attribute-face 'face-alias 'ebrowse-member-attribute)
+(define-obsolete-face-alias 'ebrowse-member-attribute-face
+  'ebrowse-member-attribute "22.1")
 
 
 (defface ebrowse-member-class
   '((t (:foreground "purple")))
   "*Face used to display the class title in member buffers."
   :group 'ebrowse-faces)
-;; backward-compatibility alias
-(put 'ebrowse-member-class-face 'face-alias 'ebrowse-member-class)
+(define-obsolete-face-alias 'ebrowse-member-class-face
+  'ebrowse-member-class "22.1")
 
 
 (defface ebrowse-progress
@@ -213,8 +207,7 @@ This space is used to display markers."
     (t (:background "blue")))
   "*Face for progress indicator."
   :group 'ebrowse-faces)
-;; backward-compatibility alias
-(put 'ebrowse-progress-face 'face-alias 'ebrowse-progress)
+(define-obsolete-face-alias 'ebrowse-progress-face 'ebrowse-progress "22.1")
 
 
 \f
@@ -1007,8 +1000,7 @@ HEADER is the tree header structure of the class tree."
     (loop for buffer in (ebrowse-browser-buffer-list)
          until (eq header (ebrowse-value-in-buffer 'ebrowse--header buffer))
          finally do
-         (save-excursion
-           (set-buffer buffer)
+         (with-current-buffer buffer
            (ebrowse-fill-member-table))))
   (ebrowse-hs-member-table header))
 
@@ -1122,7 +1114,7 @@ if for some reason a circle is in the inheritance graph."
 ;;; Tree-mode - mode for tree buffers
 
 ;;;###autoload
-(defun ebrowse-tree-mode ()
+(define-derived-mode ebrowse-tree-mode special-mode "Ebrowse-Tree"
   "Major mode for Ebrowse class tree buffers.
 Each line corresponds to a class in a class tree.
 Letters do not insert themselves, they are commands.
@@ -1131,12 +1123,10 @@ E.g.\\[save-buffer] writes the tree to the file it was loaded from.
 
 Tree mode key bindings:
 \\{ebrowse-tree-mode-map}"
-  (interactive)
   (let* ((ident (propertized-buffer-identification "C++ Tree"))
-        header tree buffer-read-only)
+        (inhibit-read-only t)
+         header tree)
 
-    (kill-all-local-variables)
-    (use-local-map ebrowse-tree-mode-map)
     (buffer-disable-undo)
 
     (unless (zerop (buffer-size))
@@ -1147,38 +1137,27 @@ Tree mode key bindings:
       (erase-buffer)
       (message nil))
 
-    (mapc 'make-local-variable
-         '(ebrowse--tags-file-name
-           ebrowse--indentation
-           ebrowse--tree
-           ebrowse--header
-           ebrowse--show-file-names-flag
-           ebrowse--frozen-flag
-           ebrowse--tree-obarray
-           revert-buffer-function))
-
-    (setf ebrowse--show-file-names-flag nil
-         ebrowse--tree-obarray (make-vector 127 0)
-         ebrowse--frozen-flag nil
-         major-mode 'ebrowse-tree-mode
-         mode-name "Ebrowse-Tree"
-         mode-line-buffer-identification ident
-         buffer-read-only t
-         selective-display t
-         selective-display-ellipses t
-         revert-buffer-function 'ebrowse-revert-tree-buffer-from-file
-         ebrowse--header header
-         ebrowse--tree tree
-         ebrowse--tags-file-name (buffer-file-name)
-         ebrowse--tree-obarray (and tree (ebrowse-build-tree-obarray tree))
-         ebrowse--frozen-flag nil)
-
-    (add-hook 'local-write-file-hooks 'ebrowse-write-file-hook-fn)
+    (set (make-local-variable 'ebrowse--show-file-names-flag) nil)
+    (set (make-local-variable 'ebrowse--tree-obarray) (make-vector 127 0))
+    (set (make-local-variable 'ebrowse--frozen-flag) nil)
+    (setq mode-line-buffer-identification ident)
+    (setq buffer-read-only t)
+    (setq selective-display t)
+    (setq selective-display-ellipses t)
+    (set (make-local-variable 'revert-buffer-function)
+         #'ebrowse-revert-tree-buffer-from-file)
+    (set (make-local-variable 'ebrowse--header) header)
+    (set (make-local-variable 'ebrowse--tree) tree)
+    (set (make-local-variable 'ebrowse--tags-file-name) buffer-file-name)
+    (set (make-local-variable 'ebrowse--tree-obarray)
+         (and tree (ebrowse-build-tree-obarray tree)))
+    (set (make-local-variable 'ebrowse--frozen-flag) nil)
+
+    (add-hook 'local-write-file-hooks 'ebrowse-write-file-hook-fn nil t)
     (modify-syntax-entry ?_ (char-to-string (char-syntax ?a)))
     (when tree
       (ebrowse-redraw-tree)
-      (set-buffer-modified-p nil))
-    (run-mode-hooks 'ebrowse-tree-mode-hook)))
+      (set-buffer-modified-p nil))))
 
 
 
@@ -1319,7 +1298,7 @@ With PREFIX, insert that many filenames."
          (skip-chars-forward " \t*a-zA-Z0-9_")
          (setq start (point)
                file-name-existing (looking-at "("))
-         (delete-region start (save-excursion (end-of-line) (point)))
+         (delete-region start (line-end-position))
          (unless file-name-existing
            (indent-to ebrowse-source-file-column)
            (insert "(" (or (ebrowse-cs-file
@@ -1337,7 +1316,8 @@ With PREFIX, insert that many filenames."
   (setf ebrowse--show-file-names-flag (not ebrowse--show-file-names-flag))
   (let ((old-line (count-lines (point-min) (point))))
     (ebrowse-redraw-tree)
-    (goto-line old-line)))
+    (goto-char (point-min))
+    (forward-line (1- old-line))))
 
 
 \f
@@ -1345,6 +1325,7 @@ With PREFIX, insert that many filenames."
 
 (defun ebrowse-member-buffer-p (buffer)
   "Value is non-nil if BUFFER is a member buffer."
+  ;; FIXME: Why not (buffer-local-value 'major-mode buffer)?
   (eq (cdr (assoc 'major-mode (buffer-local-variables buffer)))
       'ebrowse-member-mode))
 
@@ -1464,12 +1445,13 @@ Pop to member buffer if no prefix ARG, to tree buffer otherwise."
 (defun ebrowse-set-tree-indentation ()
   "Set the indentation width of the tree display."
   (interactive)
-  (let ((width (string-to-number (read-from-minibuffer
-                                  (concat "Indentation ("
+  (let ((width (string-to-number (read-string
+                                  (concat "Indentation (default "
                                           (int-to-string ebrowse--indentation)
-                                          "): ")))))
+                                          "): ")
+                                  nil nil ebrowse--indentation))))
     (when (plusp width)
-      (setf ebrowse--indentation width)
+      (set (make-local-variable 'ebrowse--indentation) width)
       (ebrowse-redraw-tree))))
 
 
@@ -1617,8 +1599,7 @@ and (b) in the directories named in `ebrowse-search-path'."
 Restore frame configuration active before viewing the file,
 and possibly kill the viewed buffer."
   (let (exit-action original-frame-configuration)
-    (save-excursion
-      (set-buffer buffer)
+    (with-current-buffer buffer
       (setq original-frame-configuration ebrowse--frame-configuration
            exit-action ebrowse--view-exit-action))
     ;; Delete the frame in which we viewed.
@@ -1638,13 +1619,12 @@ The new frame is deleted when you quit viewing the file in that frame."
        (had-a-buf (get-file-buffer file))
        (buf-to-view (find-file-noselect file)))
     (switch-to-buffer-other-frame buf-to-view)
-    (make-local-variable 'ebrowse--frame-configuration)
-    (setq ebrowse--frame-configuration old-frame-configuration)
-    (make-local-variable 'ebrowse--view-exit-action)
-    (setq ebrowse--view-exit-action
-         (and (not had-a-buf)
-              (not (buffer-modified-p buf-to-view))
-              'kill-buffer))
+    (set (make-local-variable 'ebrowse--frame-configuration)
+         old-frame-configuration)
+    (set (make-local-variable 'ebrowse--view-exit-action)
+         (and (not had-a-buf)
+              (not (buffer-modified-p buf-to-view))
+              'kill-buffer))
     (view-mode-enter (cons (selected-window) (cons (selected-window) t))
                     'ebrowse-view-exit-fn)))
 
@@ -2012,21 +1992,16 @@ COLLAPSE non-nil means collapse the branch."
 (put 'ebrowse-electric-list-undefined 'suppress-keymap t)
 
 
-(defun ebrowse-electric-list-mode ()
+(define-derived-mode ebrowse-electric-list-mode
+  fundamental-mode "Electric Position Menu"
   "Mode for electric tree list mode."
-  (kill-all-local-variables)
-  (use-local-map ebrowse-electric-list-mode-map)
-  (setq mode-name "Electric Position Menu"
-       mode-line-buffer-identification "Electric Tree Menu")
+  (setq mode-line-buffer-identification "Electric Tree Menu")
   (when (memq 'mode-name mode-line-format)
     (setq mode-line-format (copy-sequence mode-line-format))
     (setcar (memq 'mode-name mode-line-format) "Tree Buffers"))
-  (make-local-variable 'Helper-return-blurb)
-  (setq Helper-return-blurb "return to buffer editing"
-       truncate-lines t
-       buffer-read-only t
-       major-mode 'ebrowse-electric-list-mode)
-  (run-mode-hooks 'ebrowse-electric-list-mode-hook))
+  (set (make-local-variable 'Helper-return-blurb) "return to buffer editing")
+  (setq truncate-lines t
+       buffer-read-only t))
 
 
 (defun ebrowse-list-tree-buffers ()
@@ -2232,13 +2207,8 @@ See 'Electric-command-loop' for a description of STATE and CONDITION."
 ;;; Member mode
 
 ;;;###autoload
-(defun ebrowse-member-mode ()
-  "Major mode for Ebrowse member buffers.
-
-\\{ebrowse-member-mode-map}"
-  (kill-all-local-variables)
-  (use-local-map ebrowse-member-mode-map)
-  (setq major-mode 'ebrowse-member-mode)
+(define-derived-mode ebrowse-member-mode special-mode "Ebrowse-Members"
+  "Major mode for Ebrowse member buffers."
   (mapc 'make-local-variable
        '(ebrowse--decl-column          ;display column
          ebrowse--n-columns            ;number of short columns
@@ -2261,8 +2231,7 @@ See 'Electric-command-loop' for a description of STATE and CONDITION."
          ebrowse--const-display-flag
          ebrowse--pure-display-flag
          ebrowse--frozen-flag))        ;buffer not automagically reused
-  (setq mode-name "Ebrowse-Members"
-       mode-line-buffer-identification
+  (setq mode-line-buffer-identification
        (propertized-buffer-identification "C++ Members")
        buffer-read-only t
        ebrowse--long-display-flag nil
@@ -2276,8 +2245,7 @@ See 'Electric-command-loop' for a description of STATE and CONDITION."
        ebrowse--inline-display-flag nil
        ebrowse--const-display-flag nil
        ebrowse--pure-display-flag nil)
-  (modify-syntax-entry ?_ (char-to-string (char-syntax ?a)))
-  (run-mode-hooks 'ebrowse-member-mode-hook))
+  (modify-syntax-entry ?_ (char-to-string (char-syntax ?a))))
 
 
 \f
@@ -3559,7 +3527,7 @@ The file name is read from the minibuffer."
   (interactive)
   (let* ((buffer (or (ebrowse-choose-from-browser-buffers)
                     (error "No tree buffer")))
-        (files (save-excursion (set-buffer buffer) (ebrowse-files-table)))
+        (files (with-current-buffer buffer (ebrowse-files-table)))
         (file (completing-read "List members in file: " files nil t))
         (header (ebrowse-value-in-buffer 'ebrowse--header buffer))
         temp-buffer-setup-hook
@@ -3737,8 +3705,7 @@ TREE-BUFFER specifies the class tree we operate on."
   ;; on which tree (s)he wants to operate.
   (when initialize
     (let ((buffer (or tree-buffer (ebrowse-choose-from-browser-buffers))))
-      (save-excursion
-       (set-buffer buffer)
+      (with-current-buffer buffer
        (setq ebrowse-tags-next-file-list
              (ebrowse-files-list (ebrowse-marked-classes-p))
              ebrowse-tags-loop-last-file
@@ -3974,22 +3941,17 @@ Prefix arg ARG says how much."
 (put 'ebrowse-electric-position-undefined 'suppress-keymap t)
 
 
-(defun ebrowse-electric-position-mode ()
+(define-derived-mode ebrowse-electric-position-mode
+  fundamental-mode "Electric Position Menu"
   "Mode for electric position buffers.
 Runs the hook `ebrowse-electric-position-mode-hook'."
-  (kill-all-local-variables)
-  (use-local-map ebrowse-electric-position-mode-map)
-  (setq mode-name "Electric Position Menu"
-       mode-line-buffer-identification "Electric Position Menu")
+  (setq mode-line-buffer-identification "Electric Position Menu")
   (when (memq 'mode-name mode-line-format)
     (setq mode-line-format (copy-sequence mode-line-format))
     (setcar (memq 'mode-name mode-line-format) "Positions"))
-  (make-local-variable 'Helper-return-blurb)
-  (setq Helper-return-blurb "return to buffer editing"
-       truncate-lines t
-       buffer-read-only t
-       major-mode 'ebrowse-electric-position-mode)
-  (run-mode-hooks 'ebrowse-electric-position-mode-hook))
+  (set (make-local-variable 'Helper-return-blurb) "return to buffer editing")
+  (setq truncate-lines t
+       buffer-read-only t))
 
 
 (defun ebrowse-draw-position-buffer ()
@@ -4128,8 +4090,7 @@ Otherwise, FILE-NAME specifies the file to save the tree in."
        (header (copy-ebrowse-hs ebrowse--header))
        (tree ebrowse--tree))
     (unwind-protect
-       (save-excursion
-         (set-buffer (setq standard-output temp-buffer))
+       (with-current-buffer (setq standard-output temp-buffer)
          (erase-buffer)
          (setf (ebrowse-hs-member-table header) nil)
          (insert (prin1-to-string header) " ")
@@ -4214,8 +4175,8 @@ NUMBER-OF-STATIC-VARIABLES:"
 \f
 ;;; Global key bindings
 
-;;; The following can be used to bind key sequences starting with
-;;; prefix `\C-c\C-m' to browse commands.
+;; The following can be used to bind key sequences starting with
+;; prefix `\C-c\C-m' to browse commands.
 
 (defvar ebrowse-global-map nil
   "*Keymap for Ebrowse commands.")
@@ -4274,14 +4235,14 @@ NUMBER-OF-STATIC-VARIABLES:"
 \f
 ;;; Electric C++ browser buffer menu
 
-;;; Electric buffer menu customization to display only some buffers
-;;; (in this case Tree buffers).  There is only one problem with this:
-;;; If the very first character typed in the buffer menu is a space,
-;;; this will select the buffer from which the buffer menu was
-;;; invoked.  But this buffer is not displayed in the buffer list if
-;;; it isn't a tree buffer.  I therefore let the buffer menu command
-;;; loop read the command `p' via `unread-command-char'.  This command
-;;; has no effect since we are on the first line of the buffer.
+;; Electric buffer menu customization to display only some buffers
+;; (in this case Tree buffers).  There is only one problem with this:
+;; If the very first character typed in the buffer menu is a space,
+;; this will select the buffer from which the buffer menu was
+;; invoked.  But this buffer is not displayed in the buffer list if
+;; it isn't a tree buffer.  I therefore let the buffer menu command
+;; loop read the command `p' via `unread-command-char'.  This command
+;; has no effect since we are on the first line of the buffer.
 
 (defvar electric-buffer-menu-mode-hook nil)
 
@@ -4316,7 +4277,8 @@ NUMBER-OF-STATIC-VARIABLES:"
   (interactive)
   (let* ((maxlin (count-lines (point-min) (point-max)))
         (n (min maxlin (+ 2 (string-to-number (this-command-keys))))))
-    (goto-line n)
+    (goto-char (point-min))
+    (forward-line (1- n))
     (throw 'electric-buffer-menu-select (point))))
 
 
@@ -4498,5 +4460,4 @@ EVENT is the mouse event."
 ;; eval:(put 'ebrowse-for-all-trees 'lisp-indent-hook 1)
 ;; End:
 
-;; arch-tag: 4fa3c8bf-1771-479b-bcd7-b029c7c9677b
 ;;; ebrowse.el ends here