Mercurial > emacs
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 |