comparison lisp/progmodes/ebrowse.el @ 47929:a944203778a1

(ebrowse-ts, ebrowse-view/find-file-and-search-pattern, ebrowse-draw-file-member-info): Fix typo.
author Juanma Barranquero <lekktu@gmail.com>
date Thu, 17 Oct 2002 16:57:37 +0000
parents c6a6286bc21a
children 891beaa9ee33
comparison
equal deleted inserted replaced
47928:6bbd5bfd790f 47929:a944203778a1
29 29
30 ;; - A class browser for C++ 30 ;; - A class browser for C++
31 ;; - A complete set of tags-like functions working on class trees 31 ;; - A complete set of tags-like functions working on class trees
32 ;; - An electric buffer list showing class browser buffers only 32 ;; - An electric buffer list showing class browser buffers only
33 33
34 ;; Documentation is found in a separate Info file. 34 ;; Documentation is found in a separate Info file.
35 35
36 ;;; Code: 36 ;;; Code:
37 37
38 (require 'easymenu) 38 (require 'easymenu)
39 (require 'view) 39 (require 'view)
373 ;; A slot that is filled out after the tree is loaded. This slot is 373 ;; A slot that is filled out after the tree is loaded. This slot is
374 ;; set to a hash table mapping members to lists of classes in which 374 ;; set to a hash table mapping members to lists of classes in which
375 ;; they are defined. 375 ;; they are defined.
376 member-table) 376 member-table)
377 377
378 378
379 (defstruct (ebrowse-ts (:type vector) :named) 379 (defstruct (ebrowse-ts (:type vector) :named)
380 "Tree structure. 380 "Tree structure.
381 Following the header structure, an BROWSE file contains a number 381 Following the header structure, a BROWSE file contains a number
382 of `ebrowse-ts' structures, each one describing one root class of 382 of `ebrowse-ts' structures, each one describing one root class of
383 the class hierarchy with all its subclasses." 383 the class hierarchy with all its subclasses."
384 ;; A `ebrowse-cs' structure describing the root class. 384 ;; A `ebrowse-cs' structure describing the root class.
385 class 385 class
386 ;; A list of `ebrowse-ts' structures for all subclasses. 386 ;; A list of `ebrowse-ts' structures for all subclasses.
549 549
550 550
551 (defvar ebrowse--frozen-flag nil 551 (defvar ebrowse--frozen-flag nil
552 "Non-nil means an Ebrowse buffer won't be reused. 552 "Non-nil means an Ebrowse buffer won't be reused.
553 Buffer-local in Ebrowse buffers.") 553 Buffer-local in Ebrowse buffers.")
554 554
555 555
556 (defvar ebrowse--show-file-names-flag nil 556 (defvar ebrowse--show-file-names-flag nil
557 "Non-nil means show file names in a tree buffer. 557 "Non-nil means show file names in a tree buffer.
558 Buffer-local in Ebrowse tree buffers.") 558 Buffer-local in Ebrowse tree buffers.")
559 559
570 570
571 (defvar ebrowse--column-width nil 571 (defvar ebrowse--column-width nil
572 "Width of a columns to display for short member display form. 572 "Width of a columns to display for short member display form.
573 Buffer-local in Ebrowse member buffers.") 573 Buffer-local in Ebrowse member buffers.")
574 574
575 575
576 (defvar ebrowse--virtual-display-flag nil 576 (defvar ebrowse--virtual-display-flag nil
577 "Non-nil means display virtual members in a member buffer. 577 "Non-nil means display virtual members in a member buffer.
578 Buffer-local in Ebrowse member buffers.") 578 Buffer-local in Ebrowse member buffers.")
579 579
580 580
794 found)) 794 found))
795 795
796 796
797 (defun ebrowse-base-classes (tree) 797 (defun ebrowse-base-classes (tree)
798 "Return list of base-classes of TREE by searching subclass lists. 798 "Return list of base-classes of TREE by searching subclass lists.
799 This function must be used instead of the struct slot 799 This function must be used instead of the struct slot
800 `base-classes' to access the base-class list directly because it 800 `base-classes' to access the base-class list directly because it
801 computes this information lazily." 801 computes this information lazily."
802 (or (ebrowse-ts-base-classes tree) 802 (or (ebrowse-ts-base-classes tree)
803 (setf (ebrowse-ts-base-classes tree) 803 (setf (ebrowse-ts-base-classes tree)
804 (loop with to-search = (list tree) 804 (loop with to-search = (list tree)
883 883
884 884
885 ;;; Reading a tree from disk 885 ;;; Reading a tree from disk
886 886
887 (defun ebrowse-read () 887 (defun ebrowse-read ()
888 "Read `ebrowse-hs' and `ebrowse-ts' structures in the current buffer. 888 "Read `ebrowse-hs' and `ebrowse-ts' structures in the current buffer.
889 Return a list (HEADER TREE) where HEADER is the file header read 889 Return a list (HEADER TREE) where HEADER is the file header read
890 and TREE is a list of `ebrowse-ts' structures forming the class tree." 890 and TREE is a list of `ebrowse-ts' structures forming the class tree."
891 (let ((header (condition-case nil 891 (let ((header (condition-case nil
892 (read (current-buffer)) 892 (read (current-buffer))
893 (error (error "No Ebrowse file header found")))) 893 (error (error "No Ebrowse file header found"))))
922 (erase-buffer) 922 (erase-buffer)
923 (insert-file (or buffer-file-name ebrowse--tags-file-name)) 923 (insert-file (or buffer-file-name ebrowse--tags-file-name))
924 (ebrowse-tree-mode) 924 (ebrowse-tree-mode)
925 (current-buffer))) 925 (current-buffer)))
926 926
927 927
928 (defun ebrowse-create-tree-buffer (tree tags-file header obarray pop) 928 (defun ebrowse-create-tree-buffer (tree tags-file header obarray pop)
929 "Create a new tree buffer for tree TREE. 929 "Create a new tree buffer for tree TREE.
930 The tree was loaded from file TAGS-FILE. 930 The tree was loaded from file TAGS-FILE.
931 HEADER is the header structure of the file. 931 HEADER is the header structure of the file.
932 OBARRAY is an obarray with a symbol for each class in the tree. 932 OBARRAY is an obarray with a symbol for each class in the tree.
1058 1058
1059 (when (display-mouse-p) 1059 (when (display-mouse-p)
1060 (define-key map [down-mouse-3] 'ebrowse-mouse-3-in-tree-buffer) 1060 (define-key map [down-mouse-3] 'ebrowse-mouse-3-in-tree-buffer)
1061 (define-key map [mouse-2] 'ebrowse-mouse-2-in-tree-buffer) 1061 (define-key map [mouse-2] 'ebrowse-mouse-2-in-tree-buffer)
1062 (define-key map [down-mouse-1] 'ebrowse-mouse-1-in-tree-buffer)) 1062 (define-key map [down-mouse-1] 'ebrowse-mouse-1-in-tree-buffer))
1063 1063
1064 (let ((map1 (make-sparse-keymap))) 1064 (let ((map1 (make-sparse-keymap)))
1065 (suppress-keymap map1 t) 1065 (suppress-keymap map1 t)
1066 (define-key map "L" map1) 1066 (define-key map "L" map1)
1067 (define-key map1 "d" 'ebrowse-tree-command:show-friends) 1067 (define-key map1 "d" 'ebrowse-tree-command:show-friends)
1068 (define-key map1 "f" 'ebrowse-tree-command:show-member-functions) 1068 (define-key map1 "f" 'ebrowse-tree-command:show-member-functions)
1113 Tree mode key bindings: 1113 Tree mode key bindings:
1114 \\{ebrowse-tree-mode-map}" 1114 \\{ebrowse-tree-mode-map}"
1115 (interactive) 1115 (interactive)
1116 (let* ((ident (propertized-buffer-identification "C++ Tree")) 1116 (let* ((ident (propertized-buffer-identification "C++ Tree"))
1117 header tree buffer-read-only) 1117 header tree buffer-read-only)
1118 1118
1119 (kill-all-local-variables) 1119 (kill-all-local-variables)
1120 (use-local-map ebrowse-tree-mode-map) 1120 (use-local-map ebrowse-tree-mode-map)
1121 1121
1122 (unless (zerop (buffer-size)) 1122 (unless (zerop (buffer-size))
1123 (goto-char (point-min)) 1123 (goto-char (point-min))
1124 (multiple-value-setq (header tree) (ebrowse-read)) 1124 (multiple-value-setq (header tree) (ebrowse-read))
1125 (message "Sorting. Please be patient...") 1125 (message "Sorting. Please be patient...")
1126 (setq tree (ebrowse-sort-tree-list tree)) 1126 (setq tree (ebrowse-sort-tree-list tree))
1127 (erase-buffer) 1127 (erase-buffer)
1128 (message nil)) 1128 (message nil))
1129 1129
1130 (mapcar 'make-local-variable 1130 (mapcar 'make-local-variable
1131 '(ebrowse--tags-file-name 1131 '(ebrowse--tags-file-name
1132 ebrowse--indentation 1132 ebrowse--indentation
1133 ebrowse--tree 1133 ebrowse--tree
1134 ebrowse--header 1134 ebrowse--header
1135 ebrowse--show-file-names-flag 1135 ebrowse--show-file-names-flag
1136 ebrowse--frozen-flag 1136 ebrowse--frozen-flag
1137 ebrowse--tree-obarray 1137 ebrowse--tree-obarray
1138 revert-buffer-function)) 1138 revert-buffer-function))
1139 1139
1140 (setf ebrowse--show-file-names-flag nil 1140 (setf ebrowse--show-file-names-flag nil
1141 ebrowse--tree-obarray (make-vector 127 0) 1141 ebrowse--tree-obarray (make-vector 127 0)
1142 ebrowse--frozen-flag nil 1142 ebrowse--frozen-flag nil
1143 major-mode 'ebrowse-tree-mode 1143 major-mode 'ebrowse-tree-mode
1144 mode-name "Ebrowse-Tree" 1144 mode-name "Ebrowse-Tree"
1157 (modify-syntax-entry ?_ (char-to-string (char-syntax ?a))) 1157 (modify-syntax-entry ?_ (char-to-string (char-syntax ?a)))
1158 (when tree 1158 (when tree
1159 (ebrowse-redraw-tree) 1159 (ebrowse-redraw-tree)
1160 (set-buffer-modified-p nil)) 1160 (set-buffer-modified-p nil))
1161 (run-hooks 'ebrowse-tree-mode-hook))) 1161 (run-hooks 'ebrowse-tree-mode-hook)))
1162 1162
1163 1163
1164 1164
1165 (defun ebrowse-update-tree-buffer-mode-line () 1165 (defun ebrowse-update-tree-buffer-mode-line ()
1166 "Update the tree buffer mode line." 1166 "Update the tree buffer mode line."
1167 (ebrowse-rename-buffer (if ebrowse--frozen-flag 1167 (ebrowse-rename-buffer (if ebrowse--frozen-flag
1220 ;; Get the classes whose mark must be toggled. Note that 1220 ;; Get the classes whose mark must be toggled. Note that
1221 ;; ebrowse-tree-at-point might issue an error. 1221 ;; ebrowse-tree-at-point might issue an error.
1222 (condition-case error 1222 (condition-case error
1223 (loop repeat (or n-times 1) 1223 (loop repeat (or n-times 1)
1224 as tree = (ebrowse-tree-at-point) 1224 as tree = (ebrowse-tree-at-point)
1225 do (progn 1225 do (progn
1226 (setf (ebrowse-ts-mark tree) (not (ebrowse-ts-mark tree))) 1226 (setf (ebrowse-ts-mark tree) (not (ebrowse-ts-mark tree)))
1227 (forward-line 1) 1227 (forward-line 1)
1228 (push tree to-change))) 1228 (push tree to-change)))
1229 (error nil)) 1229 (error nil))
1230 (save-excursion 1230 (save-excursion
1424 1424
1425 (defun ebrowse-pop-to-browser-buffer (arg) 1425 (defun ebrowse-pop-to-browser-buffer (arg)
1426 "Pop to a browser buffer from any other buffer. 1426 "Pop to a browser buffer from any other buffer.
1427 Pop to member buffer if no prefix ARG, to tree buffer otherwise." 1427 Pop to member buffer if no prefix ARG, to tree buffer otherwise."
1428 (interactive "P") 1428 (interactive "P")
1429 (let ((buffer (get-buffer (if arg 1429 (let ((buffer (get-buffer (if arg
1430 ebrowse-tree-buffer-name 1430 ebrowse-tree-buffer-name
1431 ebrowse-member-buffer-name)))) 1431 ebrowse-member-buffer-name))))
1432 (unless buffer 1432 (unless buffer
1433 (setq buffer 1433 (setq buffer
1434 (get-buffer (if arg 1434 (get-buffer (if arg
1435 ebrowse-member-buffer-name 1435 ebrowse-member-buffer-name
1436 ebrowse-tree-buffer-name)))) 1436 ebrowse-tree-buffer-name))))
1437 (unless buffer 1437 (unless buffer
1438 (error "No browser buffer found")) 1438 (error "No browser buffer found"))
1534 :pattern (ebrowse-cs-pattern class) 1534 :pattern (ebrowse-cs-pattern class)
1535 :flags (ebrowse-cs-flags class) 1535 :flags (ebrowse-cs-flags class)
1536 :file (ebrowse-cs-file class) 1536 :file (ebrowse-cs-file class)
1537 :point (ebrowse-cs-point class)))) 1537 :point (ebrowse-cs-point class))))
1538 (ebrowse-view/find-file-and-search-pattern 1538 (ebrowse-view/find-file-and-search-pattern
1539 browse-struct 1539 browse-struct
1540 (list ebrowse--header class nil) 1540 (list ebrowse--header class nil)
1541 file 1541 file
1542 ebrowse--tags-file-name 1542 ebrowse--tags-file-name
1543 view 1543 view
1544 where))) 1544 where)))
1636 (buf-to-view (find-file-noselect file))) 1636 (buf-to-view (find-file-noselect file)))
1637 (switch-to-buffer-other-frame buf-to-view) 1637 (switch-to-buffer-other-frame buf-to-view)
1638 (make-local-variable 'ebrowse--frame-configuration) 1638 (make-local-variable 'ebrowse--frame-configuration)
1639 (setq ebrowse--frame-configuration old-frame-configuration) 1639 (setq ebrowse--frame-configuration old-frame-configuration)
1640 (make-local-variable 'ebrowse--view-exit-action) 1640 (make-local-variable 'ebrowse--view-exit-action)
1641 (setq ebrowse--view-exit-action 1641 (setq ebrowse--view-exit-action
1642 (and (not had-a-buf) 1642 (and (not had-a-buf)
1643 (not (buffer-modified-p buf-to-view)) 1643 (not (buffer-modified-p buf-to-view))
1644 'kill-buffer)) 1644 'kill-buffer))
1645 (view-mode-enter old-arrangement 'ebrowse-view-exit-fn))) 1645 (view-mode-enter old-arrangement 'ebrowse-view-exit-fn)))
1646 1646
1651 STRUC is an `ebrowse-bs' structure (or a structure including that) 1651 STRUC is an `ebrowse-bs' structure (or a structure including that)
1652 describing what to search. 1652 describing what to search.
1653 INFO is a list (HEADER MEMBER-OR-CLASS ACCESSOR). HEADER is the 1653 INFO is a list (HEADER MEMBER-OR-CLASS ACCESSOR). HEADER is the
1654 header structure of a class tree. MEMBER-OR-CLASS is either an 1654 header structure of a class tree. MEMBER-OR-CLASS is either an
1655 `ebrowse-ms' or `ebrowse-cs' structure depending on what is searched. 1655 `ebrowse-ms' or `ebrowse-cs' structure depending on what is searched.
1656 ACCESSOR is an accessor function for the member list of an member 1656 ACCESSOR is an accessor function for the member list of a member
1657 if MEMBER-OR-CLASS is an `ebrowse-ms'. 1657 if MEMBER-OR-CLASS is an `ebrowse-ms'.
1658 FILE is the file to search the member in. 1658 FILE is the file to search the member in.
1659 FILE is not taken out of STRUC here because the filename in STRUC 1659 FILE is not taken out of STRUC here because the filename in STRUC
1660 may be nil in which case the filename of the class description is used. 1660 may be nil in which case the filename of the class description is used.
1661 TAGS-FILE-NAME is the name of the BROWSE file from which the 1661 TAGS-FILE-NAME is the name of the BROWSE file from which the
1704 (substring regexp (match-end 0))) 1704 (substring regexp (match-end 0)))
1705 start (+ (match-beginning 0) 5)))) 1705 start (+ (match-beginning 0) 5))))
1706 1706
1707 1707
1708 (defun ebrowse-class-declaration-regexp (name) 1708 (defun ebrowse-class-declaration-regexp (name)
1709 "Construct a regexp for a declaration of class NAME." 1709 "Construct a regexp for a declaration of class NAME."
1710 (concat "^[ \t]*\\(template[ \t\n]*<.*>\\)?" 1710 (concat "^[ \t]*\\(template[ \t\n]*<.*>\\)?"
1711 "[ \t\n]*\\(class\\|struct\\|union\\).*\\S_" 1711 "[ \t\n]*\\(class\\|struct\\|union\\).*\\S_"
1712 (ebrowse-symbol-regexp name) 1712 (ebrowse-symbol-regexp name)
1713 "\\S_")) 1713 "\\S_"))
1714 1714
1839 as class = (ebrowse-ts-class tree) do 1839 as class = (ebrowse-ts-class tree) do
1840 (let ((start-of-line (point)) 1840 (let ((start-of-line (point))
1841 start-of-class-name end-of-class-name) 1841 start-of-class-name end-of-class-name)
1842 ;; Insert mark 1842 ;; Insert mark
1843 (insert (if (ebrowse-ts-mark tree) ">" " ")) 1843 (insert (if (ebrowse-ts-mark tree) ">" " "))
1844 1844
1845 ;; Indent and insert class name 1845 ;; Indent and insert class name
1846 (indent-to (+ (* level ebrowse--indentation) 1846 (indent-to (+ (* level ebrowse--indentation)
1847 ebrowse-tree-left-margin)) 1847 ebrowse-tree-left-margin))
1848 (setq start (point)) 1848 (setq start (point))
1849 (insert (ebrowse-qualified-class-name class)) 1849 (insert (ebrowse-qualified-class-name class))
1850 1850
1851 ;; If template class, add <> 1851 ;; If template class, add <>
1852 (when (ebrowse-template-p class) 1852 (when (ebrowse-template-p class)
1853 (insert "<>")) 1853 (insert "<>"))
1854 (ebrowse-set-face start (point) (if (zerop level) 1854 (ebrowse-set-face start (point) (if (zerop level)
1855 'ebrowse-root-class-face 1855 'ebrowse-root-class-face
2166 (define-key map1 "b" 'ebrowse-switch-member-buffer-to-base-class) 2166 (define-key map1 "b" 'ebrowse-switch-member-buffer-to-base-class)
2167 (define-key map1 "c" 'ebrowse-switch-member-buffer-to-any-class) 2167 (define-key map1 "c" 'ebrowse-switch-member-buffer-to-any-class)
2168 (define-key map1 "d" 'ebrowse-switch-member-buffer-to-derived-class) 2168 (define-key map1 "d" 'ebrowse-switch-member-buffer-to-derived-class)
2169 (define-key map1 "n" 'ebrowse-switch-member-buffer-to-next-sibling-class) 2169 (define-key map1 "n" 'ebrowse-switch-member-buffer-to-next-sibling-class)
2170 (define-key map1 "p" 'ebrowse-switch-member-buffer-to-previous-sibling-class)) 2170 (define-key map1 "p" 'ebrowse-switch-member-buffer-to-previous-sibling-class))
2171 2171
2172 (let ((map1 (make-sparse-keymap))) 2172 (let ((map1 (make-sparse-keymap)))
2173 (suppress-keymap map1 t) 2173 (suppress-keymap map1 t)
2174 (define-key map "D" map1) 2174 (define-key map "D" map1)
2175 (define-key map1 "a" 'ebrowse-toggle-member-attributes-display) 2175 (define-key map1 "a" 'ebrowse-toggle-member-attributes-display)
2176 (define-key map1 "b" 'ebrowse-toggle-base-class-display) 2176 (define-key map1 "b" 'ebrowse-toggle-base-class-display)
2177 (define-key map1 "f" 'ebrowse-freeze-member-buffer) 2177 (define-key map1 "f" 'ebrowse-freeze-member-buffer)
2178 (define-key map1 "l" 'ebrowse-toggle-long-short-display) 2178 (define-key map1 "l" 'ebrowse-toggle-long-short-display)
2179 (define-key map1 "r" 'ebrowse-toggle-regexp-display) 2179 (define-key map1 "r" 'ebrowse-toggle-regexp-display)
2180 (define-key map1 "w" 'ebrowse-set-member-buffer-column-width)) 2180 (define-key map1 "w" 'ebrowse-set-member-buffer-column-width))
2181 2181
2182 (let ((map1 (make-sparse-keymap))) 2182 (let ((map1 (make-sparse-keymap)))
2183 (suppress-keymap map1 t) 2183 (suppress-keymap map1 t)
2184 (define-key map "F" map1) 2184 (define-key map "F" map1)
2185 (let ((map2 (make-sparse-keymap))) 2185 (let ((map2 (make-sparse-keymap)))
2186 (suppress-keymap map2 t) 2186 (suppress-keymap map2 t)
2191 (define-key map1 "c" 'ebrowse-toggle-const-member-filter) 2191 (define-key map1 "c" 'ebrowse-toggle-const-member-filter)
2192 (define-key map1 "i" 'ebrowse-toggle-inline-member-filter) 2192 (define-key map1 "i" 'ebrowse-toggle-inline-member-filter)
2193 (define-key map1 "p" 'ebrowse-toggle-pure-member-filter) 2193 (define-key map1 "p" 'ebrowse-toggle-pure-member-filter)
2194 (define-key map1 "r" 'ebrowse-remove-all-member-filters) 2194 (define-key map1 "r" 'ebrowse-remove-all-member-filters)
2195 (define-key map1 "v" 'ebrowse-toggle-virtual-member-filter)) 2195 (define-key map1 "v" 'ebrowse-toggle-virtual-member-filter))
2196 2196
2197 (let ((map1 (make-sparse-keymap))) 2197 (let ((map1 (make-sparse-keymap)))
2198 (suppress-keymap map1 t) 2198 (suppress-keymap map1 t)
2199 (define-key map "L" map1) 2199 (define-key map "L" map1)
2200 (define-key map1 "d" 'ebrowse-display-friends-member-list) 2200 (define-key map1 "d" 'ebrowse-display-friends-member-list)
2201 (define-key map1 "f" 'ebrowse-display-function-member-list) 2201 (define-key map1 "f" 'ebrowse-display-function-member-list)
2203 (define-key map1 "n" 'ebrowse-display-next-member-list) 2203 (define-key map1 "n" 'ebrowse-display-next-member-list)
2204 (define-key map1 "p" 'ebrowse-display-previous-member-list) 2204 (define-key map1 "p" 'ebrowse-display-previous-member-list)
2205 (define-key map1 "t" 'ebrowse-display-types-member-list) 2205 (define-key map1 "t" 'ebrowse-display-types-member-list)
2206 (define-key map1 "v" 'ebrowse-display-variables-member-list) 2206 (define-key map1 "v" 'ebrowse-display-variables-member-list)
2207 (define-key map1 "V" 'ebrowse-display-static-variables-member-list)) 2207 (define-key map1 "V" 'ebrowse-display-static-variables-member-list))
2208 2208
2209 (let ((map1 (make-sparse-keymap))) 2209 (let ((map1 (make-sparse-keymap)))
2210 (suppress-keymap map1 t) 2210 (suppress-keymap map1 t)
2211 (define-key map "G" map1) 2211 (define-key map "G" map1)
2212 (define-key map1 "m" 'ebrowse-goto-visible-member/all-member-lists) 2212 (define-key map1 "m" 'ebrowse-goto-visible-member/all-member-lists)
2213 (define-key map1 "n" 'ebrowse-repeat-member-search) 2213 (define-key map1 "n" 'ebrowse-repeat-member-search)
2214 (define-key map1 "v" 'ebrowse-goto-visible-member)) 2214 (define-key map1 "v" 'ebrowse-goto-visible-member))
2215 2215
2216 (define-key map "f" 'ebrowse-find-member-declaration) 2216 (define-key map "f" 'ebrowse-find-member-declaration)
2217 (define-key map "m" 'ebrowse-switch-to-next-member-buffer) 2217 (define-key map "m" 'ebrowse-switch-to-next-member-buffer)
2218 (define-key map "q" 'bury-buffer) 2218 (define-key map "q" 'bury-buffer)
2219 (define-key map "t" 'ebrowse-show-displayed-class-in-tree) 2219 (define-key map "t" 'ebrowse-show-displayed-class-in-tree)
2220 (define-key map "v" 'ebrowse-view-member-declaration) 2220 (define-key map "v" 'ebrowse-view-member-declaration)
2680 "Display the title line for a class section in the member buffer. 2680 "Display the title line for a class section in the member buffer.
2681 CLASS non-nil means display that class' title. Otherwise use 2681 CLASS non-nil means display that class' title. Otherwise use
2682 the class cursor is on." 2682 the class cursor is on."
2683 (let ((start (point)) 2683 (let ((start (point))
2684 (tree (or class ebrowse--displayed-class)) 2684 (tree (or class ebrowse--displayed-class))
2685 class-name-start 2685 class-name-start
2686 class-name-end) 2686 class-name-end)
2687 (insert "class ") 2687 (insert "class ")
2688 (setq class-name-start (point)) 2688 (setq class-name-start (point))
2689 (insert (ebrowse-qualified-class-name (ebrowse-ts-class tree))) 2689 (insert (ebrowse-qualified-class-name (ebrowse-ts-class tree)))
2690 (when (ebrowse-template-p (ebrowse-ts-class tree)) 2690 (when (ebrowse-template-p (ebrowse-ts-class tree))
2830 (start-of-column (point)) 2830 (start-of-column (point))
2831 start-of-name) 2831 start-of-name)
2832 (indent-to (* i column-width)) 2832 (indent-to (* i column-width))
2833 (put-text-property start-of-column (point) 'mouse-face nil) 2833 (put-text-property start-of-column (point) 'mouse-face nil)
2834 (setq start-of-entry (point)) 2834 (setq start-of-entry (point))
2835 ;; Show various attributes 2835 ;; Show various attributes
2836 (when ebrowse--attributes-flag 2836 (when ebrowse--attributes-flag
2837 (insert "<") 2837 (insert "<")
2838 (ebrowse-draw-member-attributes member) 2838 (ebrowse-draw-member-attributes member)
2839 (insert "> ") 2839 (insert "> ")
2840 (ebrowse-set-face start-of-entry (point) 2840 (ebrowse-set-face start-of-entry (point)
3033 (defun ebrowse-switch-member-buffer-to-derived-class (arg) 3033 (defun ebrowse-switch-member-buffer-to-derived-class (arg)
3034 "Switch member display to nth derived class. 3034 "Switch member display to nth derived class.
3035 Prefix arg ARG says which class should be displayed. Default is 3035 Prefix arg ARG says which class should be displayed. Default is
3036 the first derived class." 3036 the first derived class."
3037 (interactive "P") 3037 (interactive "P")
3038 (flet ((ebrowse-tree-obarray-as-alist () 3038 (flet ((ebrowse-tree-obarray-as-alist ()
3039 (loop for s in (ebrowse-ts-subclasses 3039 (loop for s in (ebrowse-ts-subclasses
3040 ebrowse--displayed-class) 3040 ebrowse--displayed-class)
3041 collect (cons (ebrowse-cs-name 3041 collect (cons (ebrowse-cs-name
3042 (ebrowse-ts-class s)) s)))) 3042 (ebrowse-ts-class s)) s))))
3043 (let ((subs (or (ebrowse-ts-subclasses ebrowse--displayed-class) 3043 (let ((subs (or (ebrowse-ts-subclasses ebrowse--displayed-class)
3123 :help "Search for a member of this class" 3123 :help "Search for a member of this class"
3124 :active t] 3124 :active t]
3125 ["Find in Tree" ebrowse-goto-visible-member/all-member-lists 3125 ["Find in Tree" ebrowse-goto-visible-member/all-member-lists
3126 :help "Search for a member in any class" 3126 :help "Search for a member in any class"
3127 :active t]) 3127 :active t])
3128 ("Display" 3128 ("Display"
3129 ["Inherited" ebrowse-toggle-base-class-display 3129 ["Inherited" ebrowse-toggle-base-class-display
3130 :help "Toggle display of inherited members" 3130 :help "Toggle display of inherited members"
3131 :style toggle 3131 :style toggle
3132 :selected ebrowse--show-inherited-flag 3132 :selected ebrowse--show-inherited-flag
3133 :active t] 3133 :active t]
3216 ["View" ebrowse-view-member-definition 3216 ["View" ebrowse-view-member-definition
3217 :help "View this class in the source files" 3217 :help "View this class in the source files"
3218 :active (eq (get-text-property (point) 'ebrowse-what) 'class-name)])) 3218 :active (eq (get-text-property (point) 'ebrowse-what) 'class-name)]))
3219 3219
3220 3220
3221 (easy-menu-define 3221 (easy-menu-define
3222 ebrowse-member-name-object-menu ebrowse-member-mode-map 3222 ebrowse-member-name-object-menu ebrowse-member-mode-map
3223 "Object menu for member names" 3223 "Object menu for member names"
3224 '("Ebrowse" 3224 '("Ebrowse"
3225 ["Find Definition" ebrowse-find-member-definition 3225 ["Find Definition" ebrowse-find-member-definition
3226 :help "Find this member's definition in the source files" 3226 :help "Find this member's definition in the source files"
3273 "Return information about a member in a class tree. 3273 "Return information about a member in a class tree.
3274 TREE-HEADER is the header structure of the class tree. 3274 TREE-HEADER is the header structure of the class tree.
3275 NAME is the name of the member. 3275 NAME is the name of the member.
3276 Value is an alist of elements (CLASS-NAME . (CLASS LIST NAME)), 3276 Value is an alist of elements (CLASS-NAME . (CLASS LIST NAME)),
3277 where each element describes one occurrence of member NAME in the tree. 3277 where each element describes one occurrence of member NAME in the tree.
3278 CLASS-NAME is the qualified name of the class in which the 3278 CLASS-NAME is the qualified name of the class in which the
3279 member was found. The CDR of the acons is described in function 3279 member was found. The CDR of the acons is described in function
3280 `ebrowse-class/index/member-for-member'." 3280 `ebrowse-class/index/member-for-member'."
3281 (let ((table (ebrowse-member-table tree-header)) 3281 (let ((table (ebrowse-member-table tree-header))
3282 known-classes 3282 known-classes
3283 alist) 3283 alist)
3319 (completion-result (try-completion name members))) 3319 (completion-result (try-completion name members)))
3320 ;; Cannot rely on `try-completion' returning t for exact 3320 ;; Cannot rely on `try-completion' returning t for exact
3321 ;; matches! It returns the name as a string. 3321 ;; matches! It returns the name as a string.
3322 (unless (setq member-info (gethash name members)) 3322 (unless (setq member-info (gethash name members))
3323 (if (y-or-n-p "No exact match found. Try substrings? ") 3323 (if (y-or-n-p "No exact match found. Try substrings? ")
3324 (setq name 3324 (setq name
3325 (or (first (ebrowse-list-of-matching-members 3325 (or (first (ebrowse-list-of-matching-members
3326 members (regexp-quote name) name)) 3326 members (regexp-quote name) name))
3327 (error "Sorry, nothing found"))) 3327 (error "Sorry, nothing found")))
3328 (error "Canceled"))) 3328 (error "Canceled")))
3329 (list class-name name)) 3329 (list class-name name))
3330 (list class-name (read-from-minibuffer prompt member-name))))))) 3330 (list class-name (read-from-minibuffer prompt member-name)))))))
3581 "Display a line in an the members per file info buffer. 3581 "Display a line in an the members per file info buffer.
3582 INFO describes the member. It has the form (TREE ACCESSOR MEMBER). 3582 INFO describes the member. It has the form (TREE ACCESSOR MEMBER).
3583 TREE is the class of the member to display. 3583 TREE is the class of the member to display.
3584 ACCESSOR is the accessor symbol of its member list. 3584 ACCESSOR is the accessor symbol of its member list.
3585 MEMBER is the member structure. 3585 MEMBER is the member structure.
3586 KIND is a an additional string printed in the buffer." 3586 KIND is an additional string printed in the buffer."
3587 (let* ((tree (first info)) 3587 (let* ((tree (first info))
3588 (globals-p (ebrowse-globals-tree-p tree))) 3588 (globals-p (ebrowse-globals-tree-p tree)))
3589 (unless globals-p 3589 (unless globals-p
3590 (insert (ebrowse-cs-name (ebrowse-ts-class tree)))) 3590 (insert (ebrowse-cs-name (ebrowse-ts-class tree))))
3591 (insert "::" (ebrowse-ms-name (third info))) 3591 (insert "::" (ebrowse-ms-name (third info)))
3648 ;;; Symbol completion 3648 ;;; Symbol completion
3649 3649
3650 ;;;###autoload 3650 ;;;###autoload
3651 (defun* ebrowse-tags-complete-symbol (prefix) 3651 (defun* ebrowse-tags-complete-symbol (prefix)
3652 "Perform completion on the C++ symbol preceding point. 3652 "Perform completion on the C++ symbol preceding point.
3653 A second call of this function without changing point inserts the next match. 3653 A second call of this function without changing point inserts the next match.
3654 A call with prefix PREFIX reads the symbol to insert from the minibuffer with 3654 A call with prefix PREFIX reads the symbol to insert from the minibuffer with
3655 completion." 3655 completion."
3656 (interactive "P") 3656 (interactive "P")
3657 (let* ((end (point)) 3657 (let* ((end (point))
3658 (begin (save-excursion (skip-chars-backward "a-zA-Z_0-9") (point))) 3658 (begin (save-excursion (skip-chars-backward "a-zA-Z_0-9") (point)))
3693 ((null completion) 3693 ((null completion)
3694 (error "Can't find completion for `%s'" pattern)) 3694 (error "Can't find completion for `%s'" pattern))
3695 (t 3695 (t
3696 (delete-region begin end) 3696 (delete-region begin end)
3697 (insert completion) 3697 (insert completion)
3698 3698
3699 (setf ebrowse-last-completion-location (point) 3699 (setf ebrowse-last-completion-location (point)
3700 ebrowse-last-completion-start pattern 3700 ebrowse-last-completion-start pattern
3701 ebrowse-last-completion completion 3701 ebrowse-last-completion completion
3702 ebrowse-last-completion-obarray members)))))))) 3702 ebrowse-last-completion-obarray members))))))))
3703 3703
3795 3795
3796 ;;;###autoload 3796 ;;;###autoload
3797 (defun ebrowse-tags-query-replace (from to) 3797 (defun ebrowse-tags-query-replace (from to)
3798 "Query replace FROM with TO in all files of a class tree. 3798 "Query replace FROM with TO in all files of a class tree.
3799 With prefix arg, process files of marked classes only." 3799 With prefix arg, process files of marked classes only."
3800 (interactive 3800 (interactive
3801 "sTree query replace (regexp): \nsTree query replace %s by: ") 3801 "sTree query replace (regexp): \nsTree query replace %s by: ")
3802 (setq ebrowse-tags-loop-form 3802 (setq ebrowse-tags-loop-form
3803 (list 'and (list 'save-excursion 3803 (list 'and (list 'save-excursion
3804 (list 're-search-forward from nil t)) 3804 (list 're-search-forward from nil t))
3805 (list 'not (list 'perform-replace from to t t nil)))) 3805 (list 'not (list 'perform-replace from to t t nil))))
3866 (find-file (ebrowse-position-file-name position)) 3866 (find-file (ebrowse-position-file-name position))
3867 (goto-char (ebrowse-position-point position))) 3867 (goto-char (ebrowse-position-point position)))
3868 (t 3868 (t
3869 (unwind-protect 3869 (unwind-protect
3870 (progn 3870 (progn
3871 (push (function 3871 (push (function
3872 (lambda () 3872 (lambda ()
3873 (goto-char (ebrowse-position-point position)))) 3873 (goto-char (ebrowse-position-point position))))
3874 view-mode-hook) 3874 view-mode-hook)
3875 (view-file (ebrowse-position-file-name position))) 3875 (view-file (ebrowse-position-file-name position)))
3876 (pop view-mode-hook))))) 3876 (pop view-mode-hook)))))
3892 ;; Push the position. 3892 ;; Push the position.
3893 (push (make-ebrowse-position 3893 (push (make-ebrowse-position
3894 :file-name (buffer-file-name (marker-buffer marker)) 3894 :file-name (buffer-file-name (marker-buffer marker))
3895 :point (marker-position marker) 3895 :point (marker-position marker)
3896 :target target 3896 :target target
3897 :info info) 3897 :info info)
3898 ebrowse-position-stack)))) 3898 ebrowse-position-stack))))
3899 3899
3900 3900
3901 (defun ebrowse-move-in-position-stack (increment) 3901 (defun ebrowse-move-in-position-stack (increment)
3902 "Move by INCREMENT in the position stack." 3902 "Move by INCREMENT in the position stack."
4365 (when binding 4365 (when binding
4366 (call-interactively binding))))) 4366 (call-interactively binding)))))
4367 4367
4368 4368
4369 (easy-menu-define 4369 (easy-menu-define
4370 ebrowse-tree-buffer-class-object-menu ebrowse-tree-mode-map 4370 ebrowse-tree-buffer-class-object-menu ebrowse-tree-mode-map
4371 "Object menu for classes in the tree buffer" 4371 "Object menu for classes in the tree buffer"
4372 '("Class" 4372 '("Class"
4373 ["Functions" ebrowse-tree-command:show-member-functions 4373 ["Functions" ebrowse-tree-command:show-member-functions
4374 :help "Display a list of member functions" 4374 :help "Display a list of member functions"
4375 :active t] 4375 :active t]
4407 :help "Expand subtree under class point is on" 4407 :help "Expand subtree under class point is on"
4408 :active (eq (get-text-property (point) 'ebrowse-what) 'class-name)])) 4408 :active (eq (get-text-property (point) 'ebrowse-what) 'class-name)]))
4409 4409
4410 4410
4411 (easy-menu-define 4411 (easy-menu-define
4412 ebrowse-tree-buffer-object-menu ebrowse-tree-mode-map 4412 ebrowse-tree-buffer-object-menu ebrowse-tree-mode-map
4413 "Object menu for tree buffers" 4413 "Object menu for tree buffers"
4414 '("Ebrowse" 4414 '("Ebrowse"
4415 ["Filename Display" ebrowse-toggle-file-name-display 4415 ["Filename Display" ebrowse-toggle-file-name-display
4416 :help "Toggle display of source files names" 4416 :help "Toggle display of source files names"
4417 :style toggle 4417 :style toggle