• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.9.5/emacs-92/emacs/lisp/progmodes/

Lines Matching +defs:ebrowse +defs:tags +defs:search +defs:member +defs:use

0 ;;; ebrowse.el --- Emacs C++ class browser & tags facility
9 ;; Keywords: C++ tags tools
33 ;; - A complete set of tags-like functions working on class trees
52 (defgroup ebrowse nil
57 (defcustom ebrowse-search-path nil
58 "*List of directories to search for source files in a class tree.
61 :group 'ebrowse
66 (defcustom ebrowse-view/find-hook nil
67 "*Hooks run after finding or viewing a member or class."
68 :group 'ebrowse
72 (defcustom ebrowse-not-found-hook nil
73 "*Hooks run when finding or viewing a member or class was not successful."
74 :group 'ebrowse
78 (defcustom ebrowse-electric-list-mode-hook nil
79 "*Hook called by `ebrowse-electric-position-mode'."
80 :group 'ebrowse
84 (defcustom ebrowse-max-positions 50
86 :group 'ebrowse
92 (defgroup ebrowse-tree nil
94 :group 'ebrowse)
97 (defcustom ebrowse-tree-mode-hook nil
99 :group 'ebrowse-tree
103 (defcustom ebrowse-tree-buffer-name "*Tree*"
105 :group 'ebrowse-tree
109 (defcustom ebrowse--indentation 4
111 :group 'ebrowse-tree
115 (defcustom ebrowse-source-file-column 40
117 :group 'ebrowse-tree
121 (defcustom ebrowse-tree-left-margin 2
124 :group 'ebrowse-tree
130 (defgroup ebrowse-member nil
131 "Settings for member buffers."
132 :group 'ebrowse)
135 (defcustom ebrowse-default-declaration-column 25
136 "*The column in which member declarations are displayed in member buffers."
137 :group 'ebrowse-member
141 (defcustom ebrowse-default-column-width 25
142 "*The width of the columns in member buffers (short display form)."
143 :group 'ebrowse-member
147 (defcustom ebrowse-member-buffer-name "*Members*"
148 "*The name of the buffer for member display."
149 :group 'ebrowse-member
153 (defcustom ebrowse-member-mode-hook nil
154 "*Run in each new member buffer."
155 :group 'ebrowse-member
161 (defgroup ebrowse-faces nil
163 :group 'ebrowse)
166 (defface ebrowse-tree-mark
170 :group 'ebrowse-faces)
172 (put 'ebrowse-tree-mark-face 'face-alias 'ebrowse-tree-mark)
175 (defface ebrowse-root-class
179 :group 'ebrowse-faces)
181 (put 'ebrowse-root-class-face 'face-alias 'ebrowse-root-class)
184 (defface ebrowse-file-name
187 :group 'ebrowse-faces)
189 (put 'ebrowse-file-name-face 'face-alias 'ebrowse-file-name)
192 (defface ebrowse-default
195 :group 'ebrowse-faces)
197 (put 'ebrowse-default-face 'face-alias 'ebrowse-default)
200 (defface ebrowse-member-attribute
203 "*Face used to display member attributes."
204 :group 'ebrowse-faces)
206 (put 'ebrowse-member-attribute-face 'face-alias 'ebrowse-member-attribute)
209 (defface ebrowse-member-class
211 "*Face used to display the class title in member buffers."
212 :group 'ebrowse-faces)
214 (put 'ebrowse-member-class-face 'face-alias 'ebrowse-member-class)
217 (defface ebrowse-progress
221 :group 'ebrowse-faces)
223 (put 'ebrowse-progress-face 'face-alias 'ebrowse-progress)
230 (defun ebrowse-some (predicate vector)
242 (defun ebrowse-every (predicate vector)
253 (defun ebrowse-position (item list &optional test)
270 (defun ebrowse-delete-if-not (predicate list)
283 (defmacro ebrowse-output (&rest body)
286 (let ((modified (make-symbol "--ebrowse-output--")))
293 (defmacro ebrowse-ignoring-completion-case (&rest body)
299 (defmacro ebrowse-save-selective (&rest body)
308 (defmacro ebrowse-for-all-trees (spec &rest body)
314 as ,spec-var = (get ,var 'ebrowse-root) do
320 (put 'ebrowse-output 'lisp-indent-hook 0)
321 (put 'ebrowse-ignoring-completion-case 'lisp-indent-hook 0)
322 (put 'ebrowse-save-selective 'lisp-indent-hook 0)
323 (put 'ebrowse-for-all-trees 'lisp-indent-hook 1)
326 (defsubst ebrowse-set-face (start end face)
331 (defun ebrowse-completing-read-value (prompt table initial-input)
341 (ebrowse-ignoring-completion-case
345 (defun ebrowse-value-in-buffer (sym buffer)
355 (defun ebrowse-rename-buffer (new-name)
365 (defun ebrowse-trim-string (string)
375 (defun ebrowse-width-of-drawable-area ()
377 If buffer is displayed in a window, use that window's width,
378 otherwise use the current frame's width."
388 (defstruct (ebrowse-hs (:type vector) :named)
402 member-table)
405 (defstruct (ebrowse-ts (:type vector) :named)
408 of `ebrowse-ts' structures, each one describing one root class of
410 ;; A `ebrowse-cs' structure describing the root class.
412 ;; A list of `ebrowse-ts' structures for all subclasses.
414 ;; Lists of `ebrowse-ms' structures for each member in a group of
416 member-variables member-functions static-variables static-functions
418 ;; List of `ebrowse-ts' structures for base classes. This slot is
425 (defstruct (ebrowse-bs (:type vector) :named)
429 ;; The class or member name as a string constant
438 ;; `ebrowse-ms' member description structure, and FILE is nil, then
439 ;; search for the name in the SOURCE-FILE of the members class.
441 ;; Regular expression to search for. This slot can be a number in
445 ;; expression will be generated from the class/member name.
447 ;; The buffer position at which the search for the class or member
452 (defstruct (ebrowse-cs (:include ebrowse-bs) (:type vector) :named)
454 This is the structure stored in the CLASS slot of a `ebrowse-ts'
459 (defstruct (ebrowse-ms (:include ebrowse-bs) (:type vector) :named)
461 This is the structure describing a single member. The `ebrowse-ts'
466 ;; The file in which the member's definition can be found.
468 ;; Same as PATTERN above, but for the member definition.
470 ;; Same as POINT above but for member definition.
478 (defsubst ebrowse-member-bit-set-p (member bit)
480 (/= 0 (logand (ebrowse-bs-flags member) bit)))
483 (defsubst ebrowse-virtual-p (member)
485 (ebrowse-member-bit-set-p member 1))
488 (defsubst ebrowse-inline-p (member)
490 (ebrowse-member-bit-set-p member 2))
493 (defsubst ebrowse-const-p (member)
495 (ebrowse-member-bit-set-p member 4))
498 (defsubst ebrowse-pure-virtual-p (member)
500 (ebrowse-member-bit-set-p member 8))
503 (defsubst ebrowse-mutable-p (member)
505 (ebrowse-member-bit-set-p member 16))
508 (defsubst ebrowse-template-p (member)
510 (ebrowse-member-bit-set-p member 32))
513 (defsubst ebrowse-explicit-p (member)
515 (ebrowse-member-bit-set-p member 64))
518 (defsubst ebrowse-throw-list-p (member)
520 (ebrowse-member-bit-set-p member 128))
523 (defsubst ebrowse-extern-c-p (member)
525 (ebrowse-member-bit-set-p member 256))
528 (defsubst ebrowse-define-p (member)
530 (ebrowse-member-bit-set-p member 512))
533 (defconst ebrowse-version-string "ebrowse 5.0"
537 (defconst ebrowse-globals-name "*Globals*"
539 This must be the same that `ebrowse' uses.")
542 (defvar ebrowse--last-regexp nil
543 "Last regular expression searched for in tree and member buffers.
544 Each tree and member buffer maintains its own search history.")
545 (make-variable-buffer-local 'ebrowse--last-regexp)
548 (defconst ebrowse-member-list-accessors
549 '(ebrowse-ts-member-variables
550 ebrowse-ts-member-functions
551 ebrowse-ts-static-variables
552 ebrowse-ts-static-functions
553 ebrowse-ts-friends
554 ebrowse-ts-types)
555 "List of accessors for member lists.
557 The nth element must be the accessor for the nth member list
558 in an `ebrowse-ts' structure.")
563 (defvar ebrowse--tree-obarray nil
564 "Obarray holding all `ebrowse-ts' structures of a class tree.
568 (defvar ebrowse--tags-file-name nil
573 (defvar ebrowse--header nil
574 "Header structure of type `ebrowse-hs' of a class tree.
578 (defvar ebrowse--frozen-flag nil
583 (defvar ebrowse--show-file-names-flag nil
588 (defvar ebrowse--long-display-flag nil
590 Buffer-local in Ebrowse member buffers.")
593 (defvar ebrowse--n-columns nil
594 "Number of columns to display for short member display form.
595 Buffer-local in Ebrowse member buffers.")
598 (defvar ebrowse--column-width nil
599 "Width of a columns to display for short member display form.
600 Buffer-local in Ebrowse member buffers.")
603 (defvar ebrowse--virtual-display-flag nil
604 "Non-nil means display virtual members in a member buffer.
605 Buffer-local in Ebrowse member buffers.")
608 (defvar ebrowse--inline-display-flag nil
609 "Non-nil means display inline members in a member buffer.
610 Buffer-local in Ebrowse member buffers.")
613 (defvar ebrowse--const-display-flag nil
614 "Non-nil means display const members in a member buffer.
615 Buffer-local in Ebrowse member buffers.")
618 (defvar ebrowse--pure-display-flag nil
619 "Non-nil means display pure virtual members in a member buffer.
620 Buffer-local in Ebrowse member buffers.")
623 (defvar ebrowse--filters nil
627 Buffer-local in Ebrowse member buffers.")
630 (defvar ebrowse--show-inherited-flag nil
631 "Non-nil means display inherited members in a member buffer.
632 Buffer-local in Ebrowse member buffers.")
635 (defvar ebrowse--attributes-flag nil
636 "Non-nil means display member attributes in a member buffer.
637 Buffer-local in Ebrowse member buffers.")
640 (defvar ebrowse--source-regexp-flag nil
641 "Non-nil means display member regexps in a member buffer.
642 Buffer-local in Ebrowse member buffers.")
645 (defvar ebrowse--displayed-class nil
646 "Class displayed in a member buffer, a `ebrowse-ts' structure.
647 Buffer-local in Ebrowse member buffers.")
650 (defvar ebrowse--accessor nil
651 "Member list displayed in a member buffer.
653 member list in `ebrowse-cs' structures.
654 Buffer-local in Ebrowse member buffers.")
657 (defvar ebrowse--member-list nil
658 "The list of `ebrowse-ms' structures displayed in a member buffer.
659 Buffer-local in Ebrowse member buffers.")
662 (defvar ebrowse--decl-column nil
663 "Column in which declarations are displayed in member buffers.
664 Buffer-local in Ebrowse member buffers.")
667 (defvar ebrowse--frame-configuration nil
668 "Frame configuration saved when viewing a class/member in another frame.
672 (defvar ebrowse--view-exit-action nil
673 "Action to perform after viewing a class/member.
678 (defvar ebrowse--tree nil
683 ;;; Temporaries used to communicate with `ebrowse-find-pattern'.
685 (defvar ebrowse-temp-position-to-view nil)
686 (defvar ebrowse-temp-info-to-view nil)
689 (defvar ebrowse-tree-mode-map ()
693 (defvar ebrowse--member-mode-strings nil
694 "Strings displayed in the mode line of member buffers.")
697 (defvar ebrowse-member-mode-map ()
698 "The keymap used in the member buffers.")
701 ;;; Define mode line titles for each member list.
703 (put 'ebrowse-ts-member-variables 'ebrowse-title "Member Variables")
704 (put 'ebrowse-ts-member-functions 'ebrowse-title "Member Functions")
705 (put 'ebrowse-ts-static-variables 'ebrowse-title "Static Variables")
706 (put 'ebrowse-ts-static-functions 'ebrowse-title "Static Functions")
707 (put 'ebrowse-ts-friends 'ebrowse-title "Friends")
708 (put 'ebrowse-ts-types 'ebrowse-title "Types")
710 (put 'ebrowse-ts-member-variables 'ebrowse-global-title "Global Variables")
711 (put 'ebrowse-ts-member-functions 'ebrowse-global-title "Global Functions")
712 (put 'ebrowse-ts-static-variables 'ebrowse-global-title "Static Variables")
713 (put 'ebrowse-ts-static-functions 'ebrowse-global-title "Static Functions")
714 (put 'ebrowse-ts-friends 'ebrowse-global-title "Defines")
715 (put 'ebrowse-ts-types 'ebrowse-global-title "Types")
720 ;;; Operations on `ebrowse-ts' structures
722 (defun ebrowse-files-table (&optional marked-only)
724 The tree is expected in the buffer-local variable `ebrowse--tree-obarray'.
728 (ebrowse-for-all-trees (tree ebrowse--tree-obarray)
729 (when (or (not marked-only) (ebrowse-ts-mark tree))
730 (let ((class (ebrowse-ts-class tree)))
732 (ebrowse-show-progress "Preparing file list" (zerop i)))
734 (let ((source-file (ebrowse-cs-source-file class))
735 (file (ebrowse-cs-file class)))
740 ;; For all member lists in this class
741 (loop for accessor in ebrowse-member-list-accessors do
743 for file = (ebrowse-ms-file m)
744 for def-file = (ebrowse-ms-definition-file m) do
752 (defun ebrowse-files-list (&optional marked-only)
757 (ebrowse-files-table marked-only))
761 (defun* ebrowse-marked-classes-p ()
763 (ebrowse-for-all-trees (tree ebrowse--tree-obarray)
764 (when (ebrowse-ts-mark tree)
765 (return-from ebrowse-marked-classes-p tree))))
768 (defsubst ebrowse-globals-tree-p (tree)
770 (string= (ebrowse-bs-name (ebrowse-ts-class tree))
771 ebrowse-globals-name))
774 (defsubst ebrowse-qualified-class-name (class)
776 (if (ebrowse-cs-scope class)
777 (concat (ebrowse-cs-scope class) "::" (ebrowse-cs-name class))
778 (ebrowse-cs-name class)))
781 (defun ebrowse-tree-obarray-as-alist (&optional qualified-names-p)
787 The class tree is found in the buffer-local variable `ebrowse--tree-obarray'."
790 (ebrowse-for-all-trees (tree ebrowse--tree-obarray)
792 (acons (ebrowse-qualified-class-name (ebrowse-ts-class tree))
794 (ebrowse-for-all-trees (tree ebrowse--tree-obarray)
796 (acons (ebrowse-cs-name (ebrowse-ts-class tree))
801 (defun ebrowse-sort-tree-list (list)
802 "Sort a LIST of `ebrowse-ts' structures by qualified class names."
805 (string< (ebrowse-qualified-class-name (ebrowse-ts-class a))
806 (ebrowse-qualified-class-name (ebrowse-ts-class b))))))
809 (defun ebrowse-class-in-tree (class tree)
814 (let ((tclass (ebrowse-ts-class class))
818 (when (string= (ebrowse-qualified-class-name (ebrowse-ts-class (car root-ptr)))
819 (ebrowse-qualified-class-name tclass))
825 (defun ebrowse-base-classes (tree)
830 (or (ebrowse-ts-base-classes tree)
831 (setf (ebrowse-ts-base-classes tree)
832 (loop with to-search = (list tree)
834 as search = (pop to-search)
835 while search finally return result
836 do (ebrowse-for-all-trees (ti ebrowse--tree-obarray)
837 (when (memq search (ebrowse-ts-subclasses ti))
840 (push ti to-search)))))))
843 (defun ebrowse-direct-base-classes (tree)
846 (dolist (s (ebrowse-base-classes tree))
847 (when (memq tree (ebrowse-ts-subclasses s))
856 (defun ebrowse-name/accessor-alist (tree accessor)
858 ACCESSOR is the accessor function for the member list.
860 is the member name."
861 (loop for member in (funcall accessor tree)
862 collect (cons (ebrowse-ms-name member) accessor)))
865 (defun ebrowse-name/accessor-alist-for-visible-members ()
868 where MEMBER-NAME is the member's name, and ACCESSOR is the struct
869 accessor with which the member's list can be accessed in an `ebrowse-ts'
871 (let* ((list (ebrowse-name/accessor-alist ebrowse--displayed-class
872 ebrowse--accessor)))
873 (if ebrowse--show-inherited-flag
875 (loop for tree in (ebrowse-base-classes
876 ebrowse--displayed-class)
877 nconc (ebrowse-name/accessor-alist
878 tree ebrowse--accessor)))
882 (defun ebrowse-name/accessor-alist-for-class-members ()
883 "Like `ebrowse-name/accessor-alist-for-visible-members'.
887 (dolist (func ebrowse-member-list-accessors list)
888 (setq list (nconc list (ebrowse-name/accessor-alist
889 ebrowse--displayed-class func)))
890 (when ebrowse--show-inherited-flag
891 (dolist (class (ebrowse-base-classes ebrowse--displayed-class))
893 (nconc list (ebrowse-name/accessor-alist class func))))))))
899 (defvar ebrowse-n-boxes 0)
900 (defconst ebrowse-max-boxes 60)
902 (defun ebrowse-show-progress (title &optional start)
907 (when start (setq ebrowse-n-boxes 0))
908 (setq ebrowse-n-boxes (mod (1+ ebrowse-n-boxes) ebrowse-max-boxes))
910 (propertize (make-string ebrowse-n-boxes
912 'face 'ebrowse-progress)))))
918 (defun ebrowse-read ()
919 "Read `ebrowse-hs' and `ebrowse-ts' structures in the current buffer.
921 and TREE is a list of `ebrowse-ts' structures forming the class tree."
927 (unless (ebrowse-hs-p header)
929 (unless (string= (ebrowse-hs-version header) ebrowse-version-string)
931 (ebrowse-hs-version header) ebrowse-version-string))
937 (old-root-ptr (ebrowse-class-in-tree root tree)))
938 (ebrowse-show-progress "Reading data" (null tree))
946 (defun ebrowse-revert-tree-buffer-from-file (ignore-auto-save noconfirm)
951 (loop for member-buffer in (ebrowse-same-tree-member-buffer-list)
952 do (kill-buffer member-buffer))
955 (insert-file (or buffer-file-name ebrowse--tags-file-name)))
956 (ebrowse-tree-mode)
960 (defun ebrowse-create-tree-buffer (tree tags-file header obarray pop)
967 (let ((name ebrowse-tree-buffer-name))
969 (ebrowse-tree-mode)
970 (setq ebrowse--tree tree
971 ebrowse--tags-file-name tags-file
972 ebrowse--tree-obarray obarray
973 ebrowse--header header
974 ebrowse--frozen-flag nil)
975 (ebrowse-redraw-tree)
985 ;;; Operations for member obarrays
987 (defun ebrowse-fill-member-table ()
990 For each member, a symbol is added to the obarray. Members are
991 extracted from the buffer-local tree `ebrowse--tree-obarray'.
993 Each symbol has its property `ebrowse-info' set to a list (TREE MEMBER-LIST
994 MEMBER) where TREE is the tree in which the member is defined,
995 MEMBER-LIST is a symbol describing the member list in which the member
996 is found, and MEMBER is a MEMBER structure describing the member.
998 The slot `member-table' of the buffer-local header structure of
999 type `ebrowse-hs' is set to the resulting obarray."
1002 (setf (ebrowse-hs-member-table ebrowse--header) nil)
1005 (ebrowse-for-all-trees (c ebrowse--tree-obarray)
1007 (ebrowse-show-progress "Preparing member lookup" (zerop i)))
1008 (loop for f in ebrowse-member-list-accessors do
1010 (let* ((member-name (ebrowse-ms-name m))
1011 (value (gethash member-name members)))
1013 (puthash member-name value members)))))
1014 (setf (ebrowse-hs-member-table ebrowse--header) members)))
1017 (defun ebrowse-member-table (header)
1018 "Return the member obarray. Build it it hasn't been set up yet.
1020 (when (null (ebrowse-hs-member-table header))
1021 (loop for buffer in (ebrowse-browser-buffer-list)
1022 until (eq header (ebrowse-value-in-buffer 'ebrowse--header buffer))
1026 (ebrowse-fill-member-table))))
1027 (ebrowse-hs-member-table header))
1034 (defun ebrowse-build-tree-obarray (tree)
1041 (intern (ebrowse-qualified-class-name (ebrowse-ts-class root)) classes)
1042 do (unless (get sym 'ebrowse-root)
1043 (setf (get sym 'ebrowse-root) root)))
1045 (ebrowse-insert-supers tree classes)
1049 (defun ebrowse-insert-supers (tree classes)
1053 Helper function for `ebrowse-build-tree-obarray'. Base classes should
1062 as subclasses = (ebrowse-ts-subclasses class) do
1066 (ebrowse-qualified-class-name (ebrowse-ts-class (car subclass)))
1074 ;; CAVEAT: If by some means (e.g., use of the
1079 (if (get sym 'ebrowse-root)
1080 (setf (car subclass) (get sym 'ebrowse-root))
1081 (setf (get sym 'ebrowse-root) (car subclass))))
1083 (ebrowse-insert-supers subclasses classes)))
1089 (unless ebrowse-tree-mode-map
1091 (setf ebrowse-tree-mode-map map)
1095 (define-key map [down-mouse-3] 'ebrowse-mouse-3-in-tree-buffer)
1096 (define-key map [mouse-2] 'ebrowse-mouse-2-in-tree-buffer)
1097 (define-key map [down-mouse-1] 'ebrowse-mouse-1-in-tree-buffer))
1102 (define-key map1 "d" 'ebrowse-tree-command:show-friends)
1103 (define-key map1 "f" 'ebrowse-tree-command:show-member-functions)
1104 (define-key map1 "F" 'ebrowse-tree-command:show-static-member-functions)
1105 (define-key map1 "t" 'ebrowse-tree-command:show-types)
1106 (define-key map1 "v" 'ebrowse-tree-command:show-member-variables)
1107 (define-key map1 "V" 'ebrowse-tree-command:show-static-member-variables))
1112 (define-key map1 "a" 'ebrowse-mark-all-classes)
1113 (define-key map1 "t" 'ebrowse-toggle-mark-at-point))
1118 (define-key map1 "f" 'ebrowse-toggle-file-name-display)
1119 (define-key map1 "s" 'ebrowse-show-file-name-at-point)
1120 (define-key map1 "w" 'ebrowse-set-tree-indentation)
1121 (define-key map "x" 'ebrowse-statistics))
1123 (define-key map "n" 'ebrowse-repeat-member-search)
1125 (define-key map "*" 'ebrowse-expand-all)
1126 (define-key map "+" 'ebrowse-expand-branch)
1127 (define-key map "-" 'ebrowse-collapse-branch)
1128 (define-key map "/" 'ebrowse-read-class-name-and-go)
1129 (define-key map " " 'ebrowse-view-class-declaration)
1131 (define-key map "\C-i" 'ebrowse-pop/switch-to-member-buffer-for-same-tree)
1132 (define-key map "\C-k" 'ebrowse-remove-class-at-point)
1133 (define-key map "\C-l" 'ebrowse-redraw-tree)
1134 (define-key map "\C-m" 'ebrowse-find-class-declaration)))
1142 (defun ebrowse-tree-mode ()
1150 \\{ebrowse-tree-mode-map}"
1156 (use-local-map ebrowse-tree-mode-map)
1160 (multiple-value-setq (header tree) (ebrowse-read))
1162 (setq tree (ebrowse-sort-tree-list tree))
1167 '(ebrowse--tags-file-name
1168 ebrowse--indentation
1169 ebrowse--tree
1170 ebrowse--header
1171 ebrowse--show-file-names-flag
1172 ebrowse--frozen-flag
1173 ebrowse--tree-obarray
1176 (setf ebrowse--show-file-names-flag nil
1177 ebrowse--tree-obarray (make-vector 127 0)
1178 ebrowse--frozen-flag nil
1179 major-mode 'ebrowse-tree-mode
1185 revert-buffer-function 'ebrowse-revert-tree-buffer-from-file
1186 ebrowse--header header
1187 ebrowse--tree tree
1188 ebrowse--tags-file-name (buffer-file-name)
1189 ebrowse--tree-obarray (and tree (ebrowse-build-tree-obarray tree))
1190 ebrowse--frozen-flag nil)
1192 (add-hook 'local-write-file-hooks 'ebrowse-write-file-hook-fn)
1195 (ebrowse-redraw-tree)
1197 (run-mode-hooks 'ebrowse-tree-mode-hook)))
1201 (defun ebrowse-update-tree-buffer-mode-line ()
1203 (ebrowse-rename-buffer (if ebrowse--frozen-flag
1204 (ebrowse-frozen-tree-buffer-name
1205 ebrowse--tags-file-name)
1206 ebrowse-tree-buffer-name))
1214 (defun ebrowse-remove-class-and-kill-member-buffers (tree class)
1216 Kill all member buffers still containing a reference to the class."
1217 (let ((sym (intern-soft (ebrowse-cs-name (ebrowse-ts-class class))
1218 ebrowse--tree-obarray)))
1220 (get sym 'ebrowse-root) nil)
1222 (setf (ebrowse-ts-subclasses root)
1223 (delq class (ebrowse-ts-subclasses root))
1224 (ebrowse-ts-base-classes root) nil)
1225 (ebrowse-remove-class-and-kill-member-buffers
1226 (ebrowse-ts-subclasses root) class))
1227 (ebrowse-kill-member-buffers-displaying class)
1231 (defun ebrowse-remove-class-at-point (forced)
1235 (let* ((class (ebrowse-tree-at-point))
1236 (class-name (ebrowse-cs-name (ebrowse-ts-class class)))
1237 (subclasses (ebrowse-ts-subclasses class)))
1240 (setf ebrowse--tree (ebrowse-remove-class-and-kill-member-buffers
1241 ebrowse--tree class))
1245 (ebrowse-redraw-tree))
1253 (defun ebrowse-toggle-mark-at-point (&optional n-times)
1259 ;; ebrowse-tree-at-point might issue an error.
1262 as tree = (ebrowse-tree-at-point)
1264 (setf (ebrowse-ts-mark tree) (not (ebrowse-ts-mark tree)))
1273 (ebrowse-output
1277 (ebrowse-cs-name (ebrowse-ts-class tree)))
1281 (loop while (re-search-forward regexp nil t)
1285 (insert-char (if (ebrowse-ts-mark tree) ?> ? ) 1)
1286 (ebrowse-set-mark-props (1- (point)) (point) tree)
1290 (defun ebrowse-mark-all-classes (prefix)
1293 (ebrowse-for-all-trees (tree ebrowse--tree-obarray)
1294 (setf (ebrowse-ts-mark tree) prefix))
1295 (ebrowse-redraw-marks (point-min) (point-max)))
1298 (defun ebrowse-redraw-marks (start end)
1302 (ebrowse-output
1305 (dolist (root ebrowse--tree)
1306 (ebrowse-draw-marks-fn root start end))))
1307 (ebrowse-update-tree-buffer-mode-line)))
1310 (defun ebrowse-draw-marks-fn (tree start end)
1314 (insert (if (ebrowse-ts-mark tree) ?> ? ))
1315 (ebrowse-set-mark-props (1- (point)) (point) tree))
1319 (dolist (sub (ebrowse-ts-subclasses tree))
1320 (ebrowse-draw-marks-fn sub start end)))
1327 (defun ebrowse-show-file-name-at-point (prefix)
1331 (unless ebrowse--show-file-names-flag
1332 (ebrowse-output
1334 (let ((tree (ebrowse-tree-at-point))
1343 (indent-to ebrowse-source-file-column)
1344 (insert "(" (or (ebrowse-cs-file
1345 (ebrowse-ts-class tree))
1348 (ebrowse-set-face start (point) 'ebrowse-file-name)
1353 (defun ebrowse-toggle-file-name-display ()
1356 (setf ebrowse--show-file-names-flag (not ebrowse--show-file-names-flag))
1358 (ebrowse-redraw-tree)
1364 ;;; General member and tree buffer functions
1366 (defun ebrowse-member-buffer-p (buffer)
1367 "Value is non-nil if BUFFER is a member buffer."
1369 'ebrowse-member-mode))
1372 (defun ebrowse-tree-buffer-p (buffer)
1375 'ebrowse-tree-mode))
1378 (defun ebrowse-buffer-p (buffer)
1379 "Value is non-nil if BUFFER is a tree or member buffer."
1381 '(ebrowse-tree-mode ebrowse-member-mode)))
1384 (defun ebrowse-browser-buffer-list ()
1385 "Return a list of all tree or member buffers."
1386 (ebrowse-delete-if-not 'ebrowse-buffer-p (buffer-list)))
1389 (defun ebrowse-member-buffer-list ()
1390 "Return a list of all member buffers."
1391 (ebrowse-delete-if-not 'ebrowse-member-buffer-p (buffer-list)))
1394 (defun ebrowse-tree-buffer-list ()
1396 (ebrowse-delete-if-not 'ebrowse-tree-buffer-p (buffer-list)))
1399 (defun ebrowse-known-class-trees-buffer-list ()
1402 one buffer. Prefer tree buffers over member buffers."
1403 (let ((buffers (nconc (ebrowse-tree-buffer-list)
1404 (ebrowse-member-buffer-list)))
1408 (let ((tree (ebrowse-value-in-buffer 'ebrowse--tree buffer)))
1415 (defun ebrowse-same-tree-member-buffer-list ()
1417 (ebrowse-delete-if-not
1419 (eq (ebrowse-value-in-buffer 'ebrowse--tree buffer)
1420 ebrowse--tree))
1421 (ebrowse-member-buffer-list)))
1426 (defun ebrowse-pop/switch-to-member-buffer-for-same-tree (arg)
1429 If no member buffer exists, make one."
1431 (let ((buf (or (first (ebrowse-same-tree-member-buffer-list))
1432 (get-buffer ebrowse-member-buffer-name)
1433 (ebrowse-tree-command:show-member-functions))))
1441 (defun ebrowse-switch-to-next-member-buffer ()
1442 "Switch to next member buffer."
1444 (let* ((list (ebrowse-member-buffer-list))
1453 (defun ebrowse-kill-member-buffers-displaying (tree)
1454 "Kill all member buffers displaying TREE."
1455 (loop for buffer in (ebrowse-member-buffer-list)
1456 as class = (ebrowse-value-in-buffer 'ebrowse--displayed-class buffer)
1460 (defun ebrowse-frozen-tree-buffer-name (tags-file-name)
1462 (concat ebrowse-tree-buffer-name " (" tags-file-name ")"))
1465 (defun ebrowse-pop-to-browser-buffer (arg)
1467 Pop to member buffer if no prefix ARG, to tree buffer otherwise."
1470 ebrowse-tree-buffer-name
1471 ebrowse-member-buffer-name))))
1475 ebrowse-member-buffer-name
1476 ebrowse-tree-buffer-name))))
1486 (defun ebrowse-set-tree-indentation ()
1491 (int-to-string ebrowse--indentation)
1494 (setf ebrowse--indentation width)
1495 (ebrowse-redraw-tree))))
1498 (defun ebrowse-read-class-name-and-go (&optional class)
1502 (ebrowse-ignoring-completion-case
1507 (ebrowse-tree-obarray-as-alist) nil t)))
1508 (ebrowse-save-selective
1512 (setq ebrowse--last-regexp (concat "\\b" class "\\b"))
1513 (if (re-search-forward ebrowse--last-regexp nil t)
1516 (ebrowse-unhide-base-classes))
1522 ;;; Showing various kinds of member buffers
1524 (defun ebrowse-tree-command:show-member-variables (arg)
1525 "Display member variables; with prefix ARG in frozen member buffer."
1527 (ebrowse-display-member-buffer 'ebrowse-ts-member-variables arg))
1530 (defun ebrowse-tree-command:show-member-functions (&optional arg)
1531 "Display member functions; with prefix ARG in frozen member buffer."
1533 (ebrowse-display-member-buffer 'ebrowse-ts-member-functions arg))
1536 (defun ebrowse-tree-command:show-static-member-variables (arg)
1537 "Display static member variables; with prefix ARG in frozen member buffer."
1539 (ebrowse-display-member-buffer 'ebrowse-ts-static-variables arg))
1542 (defun ebrowse-tree-command:show-static-member-functions (arg)
1543 "Display static member functions; with prefix ARG in frozen member buffer."
1545 (ebrowse-display-member-buffer 'ebrowse-ts-static-functions arg))
1548 (defun ebrowse-tree-command:show-friends (arg)
1549 "Display friend functions; with prefix ARG in frozen member buffer."
1551 (ebrowse-display-member-buffer 'ebrowse-ts-friends arg))
1554 (defun ebrowse-tree-command:show-types (arg)
1555 "Display types defined in a class; with prefix ARG in frozen member buffer."
1557 (ebrowse-display-member-buffer 'ebrowse-ts-types arg))
1564 (defun ebrowse-tree-at-point ()
1566 (or (get-text-property (point) 'ebrowse-tree)
1570 (defun* ebrowse-view/find-class-declaration (&key view where)
1573 (let* ((class (ebrowse-ts-class (ebrowse-tree-at-point)))
1574 (file (ebrowse-cs-file class))
1575 (browse-struct (make-ebrowse-bs
1576 :name (ebrowse-cs-name class)
1577 :pattern (ebrowse-cs-pattern class)
1578 :flags (ebrowse-cs-flags class)
1579 :file (ebrowse-cs-file class)
1580 :point (ebrowse-cs-point class))))
1581 (ebrowse-view/find-file-and-search-pattern
1583 (list ebrowse--header class nil)
1585 ebrowse--tags-file-name
1590 (defun ebrowse-find-class-declaration (prefix-arg)
1595 (ebrowse-view/find-class-declaration
1602 (defun ebrowse-view-class-declaration (prefix-arg)
1607 (ebrowse-view/find-class-declaration
1618 (defun ebrowse-find-source-file (file tags-file-name)
1622 and (b) in the directories named in `ebrowse-search-path'."
1625 (file-name-directory tags-file-name))))
1628 (let ((search-in ebrowse-search-path))
1629 (while (and search-in
1631 (let ((try-file (expand-file-name file (car search-in))))
1634 (setq search-in (cdr search-in))))))
1640 (defun ebrowse-view-file-other-window (file)
1655 (defun ebrowse-view-exit-fn (buffer)
1662 (setq original-frame-configuration ebrowse--frame-configuration
1663 exit-action ebrowse--view-exit-action))
1673 (defun ebrowse-view-file-other-frame (file)
1682 (make-local-variable 'ebrowse--frame-configuration)
1683 (setq ebrowse--frame-configuration old-frame-configuration)
1684 (make-local-variable 'ebrowse--view-exit-action)
1685 (setq ebrowse--view-exit-action
1689 (view-mode-enter old-arrangement 'ebrowse-view-exit-fn)))
1692 (defun ebrowse-view/find-file-and-search-pattern
1693 (struc info file tags-file-name &optional view where)
1694 "Find or view a member or class.
1695 STRUC is an `ebrowse-bs' structure (or a structure including that)
1696 describing what to search.
1699 `ebrowse-ms' or `ebrowse-cs' structure depending on what is searched.
1700 ACCESSOR is an accessor function for the member list of a member
1701 if MEMBER-OR-CLASS is an `ebrowse-ms'.
1702 FILE is the file to search the member in.
1712 (ebrowse-bs-name struc)))
1714 (setf file (ebrowse-find-source-file file tags-file-name))
1715 ;; If current window is dedicated, use another frame.
1719 (setf ebrowse-temp-position-to-view struc
1720 ebrowse-temp-info-to-view info)
1723 (push 'ebrowse-find-pattern view-mode-hook)
1725 (other-window (ebrowse-view-file-other-window file))
1726 (other-frame (ebrowse-view-file-other-frame file))
1733 (ebrowse-find-pattern struc info))))
1736 (defun ebrowse-symbol-regexp (name)
1737 "Generate a suitable regular expression for a member or class NAME.
1752 (defun ebrowse-class-declaration-regexp (name)
1756 (ebrowse-symbol-regexp name)
1760 (defun ebrowse-variable-declaration-regexp (name)
1762 (concat "\\S_" (ebrowse-symbol-regexp name) "\\S_"))
1765 (defun ebrowse-function-declaration/definition-regexp (name)
1768 (ebrowse-symbol-regexp name)
1772 (defun ebrowse-pp-define-regexp (name)
1777 (defun* ebrowse-find-pattern (&optional position info &aux viewing)
1781 a pattern. To be able to do a search in a viewed buffer,
1783 `ebrowse-temp-position-to-view' holds what to search for.
1789 position ebrowse-temp-position-to-view
1790 info ebrowse-temp-info-to-view))
1792 (let* ((pattern (ebrowse-bs-pattern position))
1793 (start (ebrowse-bs-point position))
1796 (destructuring-bind (header class-or-member member-list) info
1797 ;; If no pattern is specified, construct one from the member name.
1802 (typecase class-or-member
1803 (ebrowse-ms
1804 (case member-list
1805 ((ebrowse-ts-member-variables
1806 ebrowse-ts-static-variables
1807 ebrowse-ts-types)
1808 (setf pattern (ebrowse-variable-declaration-regexp
1809 (ebrowse-bs-name position))))
1811 (if (ebrowse-define-p class-or-member)
1812 (setf pattern (ebrowse-pp-define-regexp (ebrowse-bs-name position)))
1813 (setf pattern (ebrowse-function-declaration/definition-regexp
1814 (ebrowse-bs-name position)))))))
1815 (ebrowse-cs
1816 (setf pattern (ebrowse-class-declaration-regexp
1817 (ebrowse-bs-name position))))))
1821 ;; member definition/declaration was not seen by the parser,
1823 (when (and (boundp 'ebrowse-debug)
1824 (symbol-value 'ebrowse-debug))
1829 when (re-search-forward pattern (+ start offset) t) return t
1834 (run-hooks 'ebrowse-view/find-hook))
1835 ((numberp (ebrowse-bs-pattern position))
1837 (if ebrowse-not-found-hook
1838 (run-hooks 'ebrowse-not-found-hook)
1842 (if ebrowse-not-found-hook
1843 (run-hooks 'ebrowse-not-found-hook)
1853 (defun ebrowse-redraw-tree (&optional quietly)
1859 (ebrowse-output
1861 (ebrowse-draw-tree-fn)))
1862 (ebrowse-update-tree-buffer-mode-line)
1866 (defun ebrowse-set-mark-props (start end tree)
1871 `(mouse-face highlight ebrowse-what mark ebrowse-tree ,tree
1873 (ebrowse-set-face start end 'ebrowse-tree-mark))
1876 (defun* ebrowse-draw-tree-fn (&aux stack1 stack2 start)
1879 (setq stack1 (make-list (length ebrowse--tree) 0)
1880 stack2 (copy-sequence ebrowse--tree))
1884 as class = (ebrowse-ts-class tree) do
1888 (insert (if (ebrowse-ts-mark tree) ">" " "))
1891 (indent-to (+ (* level ebrowse--indentation)
1892 ebrowse-tree-left-margin))
1894 (insert (ebrowse-qualified-class-name class))
1897 (when (ebrowse-template-p class)
1899 (ebrowse-set-face start (point) (if (zerop level)
1900 'ebrowse-root-class
1901 'ebrowse-default))
1905 (when ebrowse--show-file-names-flag
1906 (indent-to ebrowse-source-file-column)
1909 (or (ebrowse-cs-file class)
1912 (ebrowse-set-face start (point) 'ebrowse-file-name))
1913 (ebrowse-set-mark-props start-of-line (1+ start-of-line) tree)
1916 `(mouse-face highlight ebrowse-what class-name
1917 ebrowse-tree ,tree
1918 help-echo "double-mouse-1: (un)expand tree; mouse-2: member functions, mouse-3: menu"))
1921 (when (ebrowse-ts-subclasses tree)
1923 (nconc (copy-sequence (ebrowse-ts-subclasses tree)) stack2)
1925 (nconc (make-list (length (ebrowse-ts-subclasses tree))
1933 (defun ebrowse-expand-branch (arg)
1938 (ebrowse-expand-all arg)
1939 (ebrowse-collapse-fn nil)))
1942 (defun ebrowse-collapse-branch (arg)
1947 (ebrowse-expand-all (not arg))
1948 (ebrowse-collapse-fn t)))
1951 (defun ebrowse-expand-all (collapse)
1957 (ebrowse-output
1969 (defun ebrowse-unhide-base-classes ()
1971 (ebrowse-output
1979 (re-search-backward "[\r\n][ \t]*" nil t))
1991 (defun ebrowse-hide-line (collapse)
1995 (ebrowse-output
2001 (defun ebrowse-collapse-fn (collapse)
2004 (ebrowse-output
2015 (ebrowse-hide-line collapse)
2023 (defvar ebrowse-electric-list-mode-map ()
2027 (unless ebrowse-electric-list-mode-map
2030 (setq ebrowse-electric-list-mode-map map)
2031 (fillarray (car (cdr map)) 'ebrowse-electric-list-undefined)
2032 (fillarray (car (cdr submap)) 'ebrowse-electric-list-undefined)
2038 (define-key map "\C-c\C-c" 'ebrowse-electric-list-quit)
2039 (define-key map "q" 'ebrowse-electric-list-quit)
2040 (define-key map " " 'ebrowse-electric-list-select)
2047 (define-key map "v" 'ebrowse-electric-view-buffer)
2055 (put 'ebrowse-electric-list-mode 'mode-class 'special)
2056 (put 'ebrowse-electric-list-undefined 'suppress-keymap t)
2059 (defun ebrowse-electric-list-mode ()
2062 (use-local-map ebrowse-electric-list-mode-map)
2072 major-mode 'ebrowse-electric-list-mode)
2073 (run-mode-hooks 'ebrowse-electric-list-mode-hook))
2076 (defun ebrowse-list-tree-buffers ()
2082 (dolist (buffer (ebrowse-known-class-trees-buffer-list))
2088 (defun ebrowse-electric-choose-tree ()
2091 (unless (car (ebrowse-known-class-trees-buffer-list))
2095 (save-window-excursion (ebrowse-list-tree-buffers))
2102 (ebrowse-electric-list-mode)
2104 (catch 'ebrowse-electric-list-select
2114 (Electric-command-loop 'ebrowse-electric-list-select
2117 'ebrowse-electric-list-looper
2124 (setq select (ebrowse-electric-get-buffer select)))
2129 (defun ebrowse-electric-list-looper (state condition)
2148 (defun ebrowse-electric-list-undefined ()
2155 (defun ebrowse-electric-list-quit ()
2158 (throw 'ebrowse-electric-list-select nil))
2161 (defun ebrowse-electric-list-select ()
2164 (throw 'ebrowse-electric-list-select (point)))
2167 (defun ebrowse-electric-get-buffer (point)
2170 (nth index (ebrowse-known-class-trees-buffer-list))))
2175 (defun ebrowse-electric-view-buffer ()
2178 (let ((buffer (ebrowse-electric-get-buffer (point))))
2185 (defun ebrowse-choose-from-browser-buffers ()
2187 (let* ((buffers (ebrowse-known-class-trees-buffer-list)))
2191 (or (ebrowse-electric-choose-tree) (error "No tree buffer")))
2202 (unless ebrowse-member-mode-map
2204 (setf ebrowse-member-mode-map map)
2208 (define-key map [down-mouse-3] 'ebrowse-member-mouse-3)
2209 (define-key map [mouse-2] 'ebrowse-member-mouse-2))
2214 (define-key map1 "b" 'ebrowse-switch-member-buffer-to-base-class)
2215 (define-key map1 "c" 'ebrowse-switch-member-buffer-to-any-class)
2216 (define-key map1 "d" 'ebrowse-switch-member-buffer-to-derived-class)
2217 (define-key map1 "n" 'ebrowse-switch-member-buffer-to-next-sibling-class)
2218 (define-key map1 "p" 'ebrowse-switch-member-buffer-to-previous-sibling-class))
2223 (define-key map1 "a" 'ebrowse-toggle-member-attributes-display)
2224 (define-key map1 "b" 'ebrowse-toggle-base-class-display)
2225 (define-key map1 "f" 'ebrowse-freeze-member-buffer)
2226 (define-key map1 "l" 'ebrowse-toggle-long-short-display)
2227 (define-key map1 "r" 'ebrowse-toggle-regexp-display)
2228 (define-key map1 "w" 'ebrowse-set-member-buffer-column-width))
2236 (define-key map2 "i" 'ebrowse-toggle-private-member-filter)
2237 (define-key map2 "o" 'ebrowse-toggle-protected-member-filter)
2238 (define-key map2 "u" 'ebrowse-toggle-public-member-filter))
2239 (define-key map1 "c" 'ebrowse-toggle-const-member-filter)
2240 (define-key map1 "i" 'ebrowse-toggle-inline-member-filter)
2241 (define-key map1 "p" 'ebrowse-toggle-pure-member-filter)
2242 (define-key map1 "r" 'ebrowse-remove-all-member-filters)
2243 (define-key map1 "v" 'ebrowse-toggle-virtual-member-filter))
2248 (define-key map1 "d" 'ebrowse-display-friends-member-list)
2249 (define-key map1 "f" 'ebrowse-display-function-member-list)
2250 (define-key map1 "F" 'ebrowse-display-static-functions-member-list)
2251 (define-key map1 "n" 'ebrowse-display-next-member-list)
2252 (define-key map1 "p" 'ebrowse-display-previous-member-list)
2253 (define-key map1 "t" 'ebrowse-display-types-member-list)
2254 (define-key map1 "v" 'ebrowse-display-variables-member-list)
2255 (define-key map1 "V" 'ebrowse-display-static-variables-member-list))
2260 (define-key map1 "m" 'ebrowse-goto-visible-member/all-member-lists)
2261 (define-key map1 "n" 'ebrowse-repeat-member-search)
2262 (define-key map1 "v" 'ebrowse-goto-visible-member))
2264 (define-key map "f" 'ebrowse-find-member-declaration)
2265 (define-key map "m" 'ebrowse-switch-to-next-member-buffer)
2267 (define-key map "t" 'ebrowse-show-displayed-class-in-tree)
2268 (define-key map "v" 'ebrowse-view-member-declaration)
2269 (define-key map " " 'ebrowse-view-member-definition)
2271 (define-key map "\C-i" 'ebrowse-pop-from-member-to-tree-buffer)
2272 (define-key map "\C-l" 'ebrowse-redisplay-member-buffer)
2273 (define-key map "\C-m" 'ebrowse-find-member-definition)))
2281 (defun ebrowse-member-mode ()
2282 "Major mode for Ebrowse member buffers.
2284 \\{ebrowse-member-mode-map}"
2286 (use-local-map ebrowse-member-mode-map)
2287 (setq major-mode 'ebrowse-member-mode)
2289 '(ebrowse--decl-column ;display column
2290 ebrowse--n-columns ;number of short columns
2291 ebrowse--column-width ;width of columns above
2292 ebrowse--show-inherited-flag ;include inherited members?
2293 ebrowse--filters ;public, protected, private
2294 ebrowse--accessor ;vars, functions, friends
2295 ebrowse--displayed-class ;class displayed
2296 ebrowse--long-display-flag ;display with regexps?
2297 ebrowse--source-regexp-flag ;show source regexp?
2298 ebrowse--attributes-flag ;show `virtual' and `inline'
2299 ebrowse--member-list ;list of members displayed
2300 ebrowse--tree ;the class tree
2301 ebrowse--member-mode-strings ;part of mode line
2302 ebrowse--tags-file-name ;
2303 ebrowse--header
2304 ebrowse--tree-obarray
2305 ebrowse--virtual-display-flag
2306 ebrowse--inline-display-flag
2307 ebrowse--const-display-flag
2308 ebrowse--pure-display-flag
2309 ebrowse--frozen-flag)) ;buffer not automagically reused
2314 ebrowse--long-display-flag nil
2315 ebrowse--attributes-flag t
2316 ebrowse--show-inherited-flag t
2317 ebrowse--source-regexp-flag nil
2318 ebrowse--filters [0 1 2]
2319 ebrowse--decl-column ebrowse-default-declaration-column
2320 ebrowse--column-width ebrowse-default-column-width
2321 ebrowse--virtual-display-flag nil
2322 ebrowse--inline-display-flag nil
2323 ebrowse--const-display-flag nil
2324 ebrowse--pure-display-flag nil)
2326 (run-mode-hooks 'ebrowse-member-mode-hook))
2333 (defsubst ebrowse-class-name-displayed-in-member-buffer ()
2334 "Return the name of the class displayed in the member buffer."
2335 (ebrowse-cs-name (ebrowse-ts-class ebrowse--displayed-class)))
2338 (defsubst ebrowse-member-list-name ()
2339 "Return a string describing what is displayed in the member buffer."
2340 (get ebrowse--accessor (if (ebrowse-globals-tree-p ebrowse--displayed-class)
2341 'ebrowse-global-title
2342 'ebrowse-title)))
2345 (defun ebrowse-update-member-buffer-mode-line ()
2346 "Update the mode line of member buffers."
2347 (let* ((name (when ebrowse--frozen-flag
2348 (concat (ebrowse-class-name-displayed-in-member-buffer)
2350 (ident (concat name (ebrowse-member-list-name))))
2353 (ebrowse-rename-buffer (if name ident ebrowse-member-buffer-name))
2357 ;;; Misc member buffer commands
2359 (defun ebrowse-freeze-member-buffer ()
2362 (setq ebrowse--frozen-flag (not ebrowse--frozen-flag))
2363 (ebrowse-redisplay-member-buffer))
2366 (defun ebrowse-show-displayed-class-in-tree (arg)
2370 (let ((class-name (ebrowse-class-name-displayed-in-member-buffer)))
2371 (when (ebrowse-pop-from-member-to-tree-buffer arg)
2372 (ebrowse-read-class-name-and-go class-name))))
2375 (defun ebrowse-set-member-buffer-column-width ()
2376 "Set the column width of the member display.
2382 (int-to-string (if ebrowse--long-display-flag
2383 ebrowse--decl-column
2384 ebrowse--column-width))
2387 (if ebrowse--long-display-flag
2388 (setq ebrowse--decl-column width)
2389 (setq ebrowse--column-width width))
2390 (ebrowse-redisplay-member-buffer))))
2393 (defun ebrowse-pop-from-member-to-tree-buffer (arg)
2394 "Pop from a member buffer to the matching tree buffer.
2398 (let ((buf (or (get-buffer (ebrowse-frozen-tree-buffer-name
2399 ebrowse--tags-file-name))
2400 (get-buffer ebrowse-tree-buffer-name)
2401 (ebrowse-create-tree-buffer ebrowse--tree
2402 ebrowse--tags-file-name
2403 ebrowse--header
2404 ebrowse--tree-obarray
2413 ;;; Switching between member lists
2415 (defun ebrowse-display-member-list-for-accessor (accessor)
2416 "Switch the member buffer to display the member list for ACCESSOR."
2417 (setf ebrowse--accessor accessor
2418 ebrowse--member-list (funcall accessor ebrowse--displayed-class))
2419 (ebrowse-redisplay-member-buffer))
2422 (defun ebrowse-cyclic-display-next/previous-member-list (incr)
2424 (let ((index (ebrowse-position ebrowse--accessor
2425 ebrowse-member-list-accessors)))
2426 (setf ebrowse--accessor
2429 ebrowse-member-list-accessors)
2430 (first ebrowse-member-list-accessors)))
2434 ebrowse-member-list-accessors))
2435 (first (last ebrowse-member-list-accessors))))))
2436 (ebrowse-display-member-list-for-accessor ebrowse--accessor)))
2439 (defun ebrowse-display-next-member-list ()
2440 "Switch buffer to next member list."
2442 (ebrowse-cyclic-display-next/previous-member-list 1))
2445 (defun ebrowse-display-previous-member-list ()
2446 "Switch buffer to previous member list."
2448 (ebrowse-cyclic-display-next/previous-member-list -1))
2451 (defun ebrowse-display-function-member-list ()
2452 "Display the list of member functions."
2454 (ebrowse-display-member-list-for-accessor 'ebrowse-ts-member-functions))
2457 (defun ebrowse-display-variables-member-list ()
2458 "Display the list of member variables."
2460 (ebrowse-display-member-list-for-accessor 'ebrowse-ts-member-variables))
2463 (defun ebrowse-display-static-variables-member-list ()
2464 "Display the list of static member variables."
2466 (ebrowse-display-member-list-for-accessor 'ebrowse-ts-static-variables))
2469 (defun ebrowse-display-static-functions-member-list ()
2470 "Display the list of static member functions."
2472 (ebrowse-display-member-list-for-accessor 'ebrowse-ts-static-functions))
2475 (defun ebrowse-display-friends-member-list ()
2478 (ebrowse-display-member-list-for-accessor 'ebrowse-ts-friends))
2481 (defun ebrowse-display-types-member-list ()
2484 (ebrowse-display-member-list-for-accessor 'ebrowse-ts-types))
2491 (defun ebrowse-toggle-member-attributes-display ()
2494 (setq ebrowse--attributes-flag (not ebrowse--attributes-flag))
2495 (ebrowse-redisplay-member-buffer))
2498 (defun ebrowse-toggle-base-class-display ()
2501 (setf ebrowse--show-inherited-flag (not ebrowse--show-inherited-flag))
2502 (ebrowse-redisplay-member-buffer))
2505 (defun ebrowse-toggle-pure-member-filter ()
2508 (setf ebrowse--pure-display-flag (not ebrowse--pure-display-flag))
2509 (ebrowse-redisplay-member-buffer))
2512 (defun ebrowse-toggle-const-member-filter ()
2515 (setf ebrowse--const-display-flag (not ebrowse--const-display-flag))
2516 (ebrowse-redisplay-member-buffer))
2519 (defun ebrowse-toggle-inline-member-filter ()
2522 (setf ebrowse--inline-display-flag (not ebrowse--inline-display-flag))
2523 (ebrowse-redisplay-member-buffer))
2526 (defun ebrowse-toggle-virtual-member-filter ()
2529 (setf ebrowse--virtual-display-flag (not ebrowse--virtual-display-flag))
2530 (ebrowse-redisplay-member-buffer))
2533 (defun ebrowse-remove-all-member-filters ()
2537 (aset ebrowse--filters i i))
2538 (setq ebrowse--pure-display-flag nil
2539 ebrowse--const-display-flag nil
2540 ebrowse--virtual-display-flag nil
2541 ebrowse--inline-display-flag nil)
2542 (ebrowse-redisplay-member-buffer))
2545 (defun ebrowse-toggle-public-member-filter ()
2548 (ebrowse-set-member-access-visibility 0)
2549 (ebrowse-redisplay-member-buffer))
2552 (defun ebrowse-toggle-protected-member-filter ()
2555 (ebrowse-set-member-access-visibility 1)
2556 (ebrowse-redisplay-member-buffer))
2559 (defun ebrowse-toggle-private-member-filter ()
2562 (ebrowse-set-member-access-visibility 2)
2563 (ebrowse-redisplay-member-buffer))
2566 (defun ebrowse-set-member-access-visibility (vis)
2567 (setf (aref ebrowse--filters vis)
2568 (if (aref ebrowse--filters vis) nil vis)))
2571 (defun ebrowse-toggle-long-short-display ()
2572 "Toggle between long and short display form of member buffers."
2574 (setf ebrowse--long-display-flag (not ebrowse--long-display-flag))
2575 (ebrowse-redisplay-member-buffer))
2578 (defun ebrowse-toggle-regexp-display ()
2580 Used in member buffers showing the long display form."
2582 (setf ebrowse--source-regexp-flag (not ebrowse--source-regexp-flag))
2583 (ebrowse-redisplay-member-buffer))
2590 (defun ebrowse-find-member-definition (&optional prefix)
2591 "Find the file containing a member definition.
2595 (ebrowse-view/find-member-declaration/definition prefix nil t))
2598 (defun ebrowse-view-member-definition (prefix)
2599 "View the file containing a member definition.
2603 (ebrowse-view/find-member-declaration/definition prefix t t))
2606 (defun ebrowse-find-member-declaration (prefix)
2607 "Find the file containing a member's declaration.
2611 (ebrowse-view/find-member-declaration/definition prefix nil))
2614 (defun ebrowse-view-member-declaration (prefix)
2615 "View the file containing a member's declaration.
2619 (ebrowse-view/find-member-declaration/definition prefix t))
2622 (defun* ebrowse-view/find-member-declaration/definition
2623 (prefix view &optional definition info header tags-file-name)
2624 "Find or view a member declaration or definition.
2629 INFO is a list (TREE ACCESSOR MEMBER) describing the member to
2630 search.
2633 (setq header ebrowse--header))
2634 (unless tags-file-name
2635 (setq tags-file-name ebrowse--tags-file-name))
2636 (let (tree member accessor file on-class
2640 ;; out of the member buffer.
2644 member (third info))
2645 (multiple-value-setq (tree member on-class)
2646 (ebrowse-member-info-from-point))
2647 (setq accessor ebrowse--accessor))
2650 (return-from ebrowse-view/find-member-declaration/definition
2651 (ebrowse-view/find-file-and-search-pattern
2652 (ebrowse-ts-class tree)
2653 (list ebrowse--header (ebrowse-ts-class tree) nil)
2654 (ebrowse-cs-file (ebrowse-ts-class tree))
2655 tags-file-name view where)))
2656 ;; For some member lists, it doesn't make sense to search for
2657 ;; a definition. If this is requested, silently search for the
2660 (eq accessor 'ebrowse-ts-member-variables))
2664 (setf member (make-ebrowse-ms
2665 :name (ebrowse-ms-name member)
2666 :file (ebrowse-ms-definition-file member)
2667 :pattern (ebrowse-ms-definition-pattern
2668 member)
2669 :flags (ebrowse-ms-flags member)
2670 :point (ebrowse-ms-definition-point
2671 member))))
2672 ;; When no file information in member, use that of the class
2673 (setf file (or (ebrowse-ms-file member)
2675 (ebrowse-cs-source-file (ebrowse-ts-class tree))
2676 (ebrowse-cs-file (ebrowse-ts-class tree)))))
2679 ;; is that the search start point will be zero.
2680 (if (or (null file) (zerop (ebrowse-ms-point member)))
2686 (ebrowse-ms-name member)
2691 (ebrowse-view/find-member-declaration/definition
2692 prefix view (not definition) info header tags-file-name))
2695 (ebrowse-view/find-file-and-search-pattern
2696 (make-ebrowse-bs :name (ebrowse-ms-name member)
2697 :pattern (ebrowse-ms-pattern member)
2698 :file (ebrowse-ms-file member)
2699 :flags (ebrowse-ms-flags member)
2700 :point (ebrowse-ms-point member))
2701 (list header member accessor)
2703 tags-file-name
2710 ;;; Drawing the member buffer
2712 (defun ebrowse-redisplay-member-buffer ()
2715 (let ((display-fn (if ebrowse--long-display-flag
2716 'ebrowse-draw-member-long-fn
2717 'ebrowse-draw-member-short-fn)))
2718 (ebrowse-output
2721 (ebrowse-draw-member-buffer-class-line)
2722 (funcall display-fn ebrowse--member-list ebrowse--displayed-class)
2724 (when ebrowse--show-inherited-flag
2725 (dolist (super (ebrowse-base-classes ebrowse--displayed-class))
2728 (ebrowse-draw-member-buffer-class-line super)
2729 (funcall display-fn (funcall ebrowse--accessor super) super)))
2730 (ebrowse-update-member-buffer-mode-line))))
2733 (defun ebrowse-draw-member-buffer-class-line (&optional class)
2734 "Display the title line for a class section in the member buffer.
2735 CLASS non-nil means display that class' title. Otherwise use
2738 (tree (or class ebrowse--displayed-class))
2743 (insert (ebrowse-qualified-class-name (ebrowse-ts-class tree)))
2744 (when (ebrowse-template-p (ebrowse-ts-class tree))
2748 (ebrowse-set-face start (point) 'ebrowse-member-class)
2751 '(ebrowse-what class-name
2754 (put-text-property start class-name-end 'ebrowse-tree tree)))
2757 (defun ebrowse-display-member-buffer (list &optional stand-alone class)
2758 "Start point for member buffer creation.
2759 LIST is the member list to display. STAND-ALONE non-nil
2760 means the member buffer is standalone. CLASS is its class."
2761 (let* ((classes ebrowse--tree-obarray)
2762 (tree ebrowse--tree)
2763 (tags-file-name ebrowse--tags-file-name)
2764 (header ebrowse--header)
2766 (temp-buffer (get-buffer ebrowse-member-buffer-name)))
2770 (setq class (ebrowse-tree-at-point)))
2774 (pop-to-buffer (get-buffer-create ebrowse-member-buffer-name))
2776 (ebrowse-member-mode))
2778 (setq ebrowse--member-list (funcall list class)
2779 ebrowse--displayed-class class
2780 ebrowse--accessor list
2781 ebrowse--tree-obarray classes
2782 ebrowse--frozen-flag stand-alone
2783 ebrowse--tags-file-name tags-file-name
2784 ebrowse--header header
2785 ebrowse--tree tree
2787 (ebrowse-redisplay-member-buffer)
2791 (defun ebrowse-member-display-p (member)
2793 (if (and (aref ebrowse--filters (ebrowse-ms-visibility member))
2794 (or (null ebrowse--const-display-flag)
2795 (ebrowse-const-p member))
2796 (or (null ebrowse--inline-display-flag)
2797 (ebrowse-inline-p member))
2798 (or (null ebrowse--pure-display-flag)
2799 (ebrowse-bs-p member))
2800 (or (null ebrowse--virtual-display-flag)
2801 (ebrowse-virtual-p member)))
2802 member))
2805 (defun ebrowse-draw-member-attributes (member)
2807 (insert (if (ebrowse-template-p member) "T" "-")
2808 (if (ebrowse-extern-c-p member) "C" "-")
2809 (if (ebrowse-virtual-p member) "v" "-")
2810 (if (ebrowse-inline-p member) "i" "-")
2811 (if (ebrowse-const-p member) "c" "-")
2812 (if (ebrowse-pure-virtual-p member) "0" "-")
2813 (if (ebrowse-mutable-p member) "m" "-")
2814 (if (ebrowse-explicit-p member) "e" "-")
2815 (if (ebrowse-throw-list-p member) "t" "-")))
2818 (defun ebrowse-draw-member-regexp (member-struc)
2820 (let ((pattern (if ebrowse--source-regexp-flag
2821 (ebrowse-ms-definition-pattern
2822 member-struc)
2823 (ebrowse-ms-pattern member-struc))))
2825 (insert (ebrowse-trim-string pattern) "...\n")
2827 (move-to-column (+ 4 ebrowse--decl-column))
2828 (while (re-search-forward "[ \t]+" nil t)
2836 (defun ebrowse-draw-member-long-fn (member-list tree)
2837 "Display member buffer for MEMBER-LIST in long form.
2839 (dolist (member-struc (mapcar 'ebrowse-member-display-p member-list))
2840 (when member-struc
2841 (let ((name (ebrowse-ms-name member-struc))
2843 ;; Insert member name truncated to the right length
2847 (1- ebrowse--decl-column))))
2850 `(mouse-face highlight ebrowse-what member-name
2851 ebrowse-member ,member-struc
2852 ebrowse-tree ,tree
2856 (indent-to ebrowse--decl-column)
2858 (when ebrowse--attributes-flag
2861 (ebrowse-draw-member-attributes member-struc)
2863 (ebrowse-set-face start (point)
2864 'ebrowse-member-attribute)))
2866 (ebrowse-draw-member-regexp member-struc))))
2871 (defun ebrowse-draw-member-short-fn (member-list tree)
2875 (column-width (+ ebrowse--column-width
2876 (if ebrowse--attributes-flag 12 0))))
2878 (setq ebrowse--n-columns
2879 (max 1 (/ (ebrowse-width-of-drawable-area) column-width)))
2880 (dolist (member (mapcar #'ebrowse-member-display-p member-list))
2881 (when member
2882 (let ((name (ebrowse-ms-name member))
2890 (when ebrowse--attributes-flag
2892 (ebrowse-draw-member-attributes member)
2894 (ebrowse-set-face start-of-entry (point)
2895 'ebrowse-member-attribute))
2896 ;; insert member name truncated to column width
2900 (1- ebrowse--column-width))))
2904 `(ebrowse-what member-name
2905 ebrowse-member ,member
2907 ebrowse-tree ,tree
2910 (when (>= i ebrowse--n-columns)
2922 (defun ebrowse-member-info-from-point ()
2923 "Ger information about the member at point.
2925 we're in, MEMBER is the member we're on. NULL-P is t if MEMBER
2927 (let ((tree (or (get-text-property (point) 'ebrowse-tree)
2929 (member (get-text-property (point) 'ebrowse-member)))
2930 (list tree member (null member))))
2935 ;;; Switching member buffer to display a selected member
2937 (defun ebrowse-goto-visible-member/all-member-lists (prefix)
2938 "Position cursor on a member read from the minibuffer.
2939 With PREFIX, search all members in the tree. Otherwise consider
2942 (ebrowse-ignoring-completion-case
2943 (let* ((completion-list (ebrowse-name/accessor-alist-for-class-members))
2944 (member (completing-read "Goto member: " completion-list nil t))
2945 (accessor (cdr (assoc member completion-list))))
2947 (error "`%s' not found" member))
2948 (unless (eq accessor ebrowse--accessor)
2949 (setf ebrowse--accessor accessor
2950 ebrowse--member-list (funcall accessor ebrowse--displayed-class))
2951 (ebrowse-redisplay-member-buffer))
2952 (ebrowse-move-point-to-member member))))
2955 (defun ebrowse-goto-visible-member (repeat)
2956 "Position point on a member.
2957 Read the member's name from the minibuffer. Consider only members
2958 visible in the member buffer.
2959 REPEAT non-nil means repeat the search that number of times."
2961 (ebrowse-ignoring-completion-case
2962 ;; Read member name
2963 (let* ((completion-list (ebrowse-name/accessor-alist-for-visible-members))
2964 (member (completing-read "Goto member: " completion-list nil t)))
2965 (ebrowse-move-point-to-member member repeat))))
2970 ;;; Searching a member in the member buffer
2972 (defun ebrowse-repeat-member-search (repeat)
2973 "Repeat the last regular expression search.
2974 REPEAT, if specified, says repeat the search REPEAT times."
2976 (unless ebrowse--last-regexp
2981 (if (re-search-forward ebrowse--last-regexp nil t repeat)
2985 ;; If not found above, repeat search from buffer start
2987 (if (re-search-forward ebrowse--last-regexp nil t)
2994 (defun* ebrowse-move-point-to-member (name &optional count &aux member)
2995 "Set point on member NAME in the member buffer
2996 COUNT, if specified, says search the COUNT'th member with the same name."
2999 (setq member
3000 (substring name 0 (min (length name) (1- ebrowse--column-width)))
3001 ebrowse--last-regexp
3002 (concat "[ \t\n]" (regexp-quote member) "[ \n\t]"))
3003 (if (re-search-forward ebrowse--last-regexp nil t count)
3010 ;;; Switching member buffer to another class.
3012 (defun ebrowse-switch-member-buffer-to-other-class (title compl-list)
3013 "Switch member buffer to a class read from the minibuffer.
3015 COMPL-LIST is a completion list to use."
3018 (class (or (ebrowse-completing-read-value title compl-list initial)
3020 (setf ebrowse--displayed-class class
3021 ebrowse--member-list (funcall ebrowse--accessor ebrowse--displayed-class))
3022 (ebrowse-redisplay-member-buffer)))
3025 (defun ebrowse-switch-member-buffer-to-any-class ()
3026 "Switch member buffer to a class read from the minibuffer."
3028 (ebrowse-switch-member-buffer-to-other-class
3029 "Goto class: " (ebrowse-tree-obarray-as-alist)))
3032 (defun ebrowse-switch-member-buffer-to-base-class (arg)
3035 (let ((supers (or (ebrowse-direct-base-classes ebrowse--displayed-class)
3039 collect (cons (ebrowse-qualified-class-name
3040 (ebrowse-ts-class s))
3042 (ebrowse-switch-member-buffer-to-other-class
3044 (setq ebrowse--displayed-class (first supers)
3045 ebrowse--member-list
3046 (funcall ebrowse--accessor ebrowse--displayed-class))
3047 (ebrowse-redisplay-member-buffer))))
3049 (defun ebrowse-switch-member-buffer-to-next-sibling-class (arg)
3052 (ebrowse-switch-member-buffer-to-sibling-class arg))
3055 (defun ebrowse-switch-member-buffer-to-previous-sibling-class (arg)
3058 (ebrowse-switch-member-buffer-to-sibling-class (- arg)))
3061 (defun ebrowse-switch-member-buffer-to-sibling-class (inc)
3062 "Switch member display to nth sibling class.
3065 (let ((containing-list ebrowse--tree)
3067 (supers (ebrowse-direct-base-classes ebrowse--displayed-class)))
3070 collect (cons (ebrowse-cs-name
3071 (ebrowse-ts-class tr)) tr))))
3074 (ebrowse-completing-read-value
3079 (setq containing-list (ebrowse-ts-subclasses tree)))))
3080 (setq index (+ inc (ebrowse-position ebrowse--displayed-class
3086 (setf ebrowse--displayed-class cls
3087 ebrowse--member-list (funcall ebrowse--accessor cls))
3088 (ebrowse-redisplay-member-buffer)))
3091 (defun ebrowse-switch-member-buffer-to-derived-class (arg)
3092 "Switch member display to nth derived class.
3096 (flet ((ebrowse-tree-obarray-as-alist ()
3097 (loop for s in (ebrowse-ts-subclasses
3098 ebrowse--displayed-class)
3099 collect (cons (ebrowse-cs-name
3100 (ebrowse-ts-class s)) s))))
3101 (let ((subs (or (ebrowse-ts-subclasses ebrowse--displayed-class)
3104 (ebrowse-switch-member-buffer-to-other-class
3105 "Goto derived class: " (ebrowse-tree-obarray-as-alist))
3106 (setq ebrowse--displayed-class (first subs)
3107 ebrowse--member-list
3108 (funcall ebrowse--accessor ebrowse--displayed-class))
3109 (ebrowse-redisplay-member-buffer)))))
3116 (defun ebrowse-displaying-functions ()
3117 (eq ebrowse--accessor 'ebrowse-ts-member-functions))
3118 (defun ebrowse-displaying-variables ()
3119 (eq ebrowse--accessor 'ebrowse-ts-member-variables))
3120 (defun ebrowse-displaying-static-functions ()
3122 (defun ebrowse-displaying-static-variables ()
3124 (defun ebrowse-displaying-types ()
3125 (eq ebrowse--accessor 'ebrowse-ts-types))
3126 (defun ebrowse-displaying-friends ()
3127 (eq ebrowse--accessor 'ebrowse-ts-friends))
3130 ebrowse-member-buffer-object-menu ebrowse-member-mode-map
3131 "Object menu for the member buffer itself."
3134 ["Functions" ebrowse-display-function-member-list
3135 :help "Show the list of member functions"
3137 :selected (eq ebrowse--accessor 'ebrowse-ts-member-functions)
3139 ["Variables" ebrowse-display-variables-member-list
3140 :help "Show the list of member variables"
3142 :selected (eq ebrowse--accessor 'ebrowse-ts-member-variables)
3144 ["Static Functions" ebrowse-display-static-functions-member-list
3145 :help "Show the list of static member functions"
3147 :selected (eq ebrowse--accessor 'ebrowse-ts-static-functions)
3149 ["Static Variables" ebrowse-display-static-variables-member-list
3150 :help "Show the list of static member variables"
3152 :selected (eq ebrowse--accessor 'ebrowse-ts-static-variables)
3154 ["Types" ebrowse-display-types-member-list
3157 :selected (eq ebrowse--accessor 'ebrowse-ts-types)
3159 ["Friends/Defines" ebrowse-display-friends-member-list
3162 :selected (eq ebrowse--accessor 'ebrowse-ts-friends)
3165 ["Up" ebrowse-switch-member-buffer-to-base-class
3168 ["Down" ebrowse-switch-member-buffer-to-derived-class
3171 ["Next Sibling" ebrowse-switch-member-buffer-to-next-sibling-class
3174 ["Previous Sibling" ebrowse-switch-member-buffer-to-previous-sibling-class
3178 ["Show in Tree" ebrowse-show-displayed-class-in-tree
3181 ["Find in this Class" ebrowse-goto-visible-member
3182 :help "Search for a member of this class"
3184 ["Find in Tree" ebrowse-goto-visible-member/all-member-lists
3185 :help "Search for a member in any class"
3188 ["Inherited" ebrowse-toggle-base-class-display
3191 :selected ebrowse--show-inherited-flag
3193 ["Attributes" ebrowse-toggle-member-attributes-display
3194 :help "Show member attributes"
3196 :selected ebrowse--attributes-flag
3198 ["Long Display" ebrowse-toggle-long-short-display
3199 :help "Toggle the member display format"
3201 :selected ebrowse--long-display-flag
3203 ["Column Width" ebrowse-set-member-buffer-column-width
3207 ["Public" ebrowse-toggle-public-member-filter
3210 :selected (not (aref ebrowse--filters 0))
3212 ["Protected" ebrowse-toggle-protected-member-filter
3215 :selected (not (aref ebrowse--filters 1))
3217 ["Private" ebrowse-toggle-private-member-filter
3220 :selected (not (aref ebrowse--filters 2))
3222 ["Virtual" ebrowse-toggle-virtual-member-filter
3225 :selected ebrowse--virtual-display-flag
3227 ["Inline" ebrowse-toggle-inline-member-filter
3230 :selected ebrowse--inline-display-flag
3232 ["Const" ebrowse-toggle-const-member-filter
3235 :selected ebrowse--const-display-flag
3237 ["Pure" ebrowse-toggle-pure-member-filter
3240 :selected ebrowse--pure-display-flag
3243 ["Show all" ebrowse-remove-all-member-filters
3247 ["Tree" ebrowse-pop-from-member-to-tree-buffer
3250 ["Next Member Buffer" ebrowse-switch-to-next-member-buffer
3251 :help "Switch to the next member buffer of this class tree"
3253 ["Freeze" ebrowse-freeze-member-buffer
3254 :help "Freeze (do not reuse) this member buffer"
3258 (defun ebrowse-on-class-name ()
3260 (eq (get-text-property (point) 'ebrowse-what) 'class-name))
3263 (defun ebrowse-on-member-name ()
3264 "Value is non-nil if point is on a member name."
3265 (eq (get-text-property (point) 'ebrowse-what) 'member-name))
3269 ebrowse-member-class-name-object-menu ebrowse-member-mode-map
3270 "Object menu for class names in member buffer."
3272 ["Find" ebrowse-find-member-definition
3274 :active (eq (get-text-property (point) 'ebrowse-what) 'class-name)]
3275 ["View" ebrowse-view-member-definition
3277 :active (eq (get-text-property (point) 'ebrowse-what) 'class-name)]))
3281 ebrowse-member-name-object-menu ebrowse-member-mode-map
3282 "Object menu for member names"
3284 ["Find Definition" ebrowse-find-member-definition
3285 :help "Find this member's definition in the source files"
3286 :active (ebrowse-on-member-name)]
3287 ["Find Declaration" ebrowse-find-member-declaration
3288 :help "Find this member's declaration in the source files"
3289 :active (ebrowse-on-member-name)]
3290 ["View Definition" ebrowse-view-member-definition
3291 :help "View this member's definition in the source files"
3292 :active (ebrowse-on-member-name)]
3293 ["View Declaration" ebrowse-view-member-declaration
3294 :help "View this member's declaration in the source files"
3295 :active (ebrowse-on-member-name)]))
3298 (defun ebrowse-member-mouse-3 (event)
3299 "Handle `mouse-3' events in member buffers.
3304 (2 (ebrowse-find-member-definition))
3306 'ebrowse-what)
3307 (member-name
3308 (ebrowse-popup-menu ebrowse-member-name-object-menu event))
3310 (ebrowse-popup-menu ebrowse-member-class-name-object-menu event))
3312 (ebrowse-popup-menu ebrowse-member-buffer-object-menu event))))))
3315 (defun ebrowse-member-mouse-2 (event)
3316 "Handle `mouse-2' events in member buffers.
3321 (2 (ebrowse-find-member-definition))
3323 'ebrowse-what)
3324 (member-name
3325 (ebrowse-view-member-definition 0))))))
3332 (defun ebrowse-class-alist-for-member (tree-header name)
3333 "Return information about a member in a class tree.
3335 NAME is the name of the member.
3337 where each element describes one occurrence of member NAME in the tree.
3339 member was found. The CDR of the acons is described in function
3340 `ebrowse-class/index/member-for-member'."
3341 (let ((table (ebrowse-member-table tree-header))
3347 (setf alist (acons (ebrowse-qualified-class-name
3348 (ebrowse-ts-class (first info)))
3353 (defun ebrowse-choose-tree ()
3354 "Choose a class tree to use.
3358 being the tree or member buffer containing the tree."
3359 (let* ((buffer (ebrowse-choose-from-browser-buffers)))
3360 (if buffer (list (ebrowse-value-in-buffer 'ebrowse--tree buffer)
3361 (ebrowse-value-in-buffer 'ebrowse--header buffer)
3365 (defun ebrowse-tags-read-name (header prompt)
3367 HEADER is the `ebrowse-hs' structure of the class tree.
3371 (let* (start member-info (members (ebrowse-member-table header)))
3372 (multiple-value-bind (class-name member-name)
3373 (ebrowse-tags-read-member+class-name)
3374 (unless member-name
3375 (error "No member name at point"))
3377 (let* ((name (ebrowse-ignoring-completion-case
3378 (completing-read prompt members nil nil member-name)))
3382 (unless (setq member-info (gethash name members))
3385 (or (first (ebrowse-list-of-matching-members
3390 (list class-name (read-from-minibuffer prompt member-name)))))))
3393 (defun ebrowse-tags-read-member+class-name ()
3398 MEMBER-NAME is the name of the member found."
3408 (defun ebrowse-tags-choose-class (tree header name initial-class-name)
3409 "Read a class name for a member from the minibuffer.
3412 NAME is the name of the member.
3414 Value is a list (TREE ACCESSOR MEMBER) for the member."
3415 (let ((alist (or (ebrowse-class-alist-for-member header name)
3416 (error "No classes with member `%s' found" name))))
3417 (ebrowse-ignoring-completion-case
3426 (defun* ebrowse-tags-view/find-member-decl/defn
3427 (prefix &key view definition member-name)
3430 If DEFINITION is t, find or view the member definition else its
3431 declaration. This function reads the member's name from the
3433 of all classes containing a member with the given name and lets
3434 the user choose the class to use. As a last step, a tags search
3435 is performed that positions point on the member declaration or
3438 (tree header tree-buffer) (ebrowse-choose-tree)
3442 (name member-name)
3446 (ebrowse-tags-read-name
3448 (concat (if view "View" "Find") " member "
3450 (setq info (ebrowse-tags-choose-class tree header name class-name))
3451 (ebrowse-push-position marker info)
3452 ;; Goto the occurrence of the member
3453 (ebrowse-view/find-member-declaration/definition
3456 (ebrowse-value-in-buffer 'ebrowse--tags-file-name tree-buffer))
3458 (ebrowse-push-position (point-marker) info t))))
3462 (defun ebrowse-tags-view-declaration ()
3463 "View declaration of member at point."
3465 (ebrowse-tags-view/find-member-decl/defn 0 :view t :definition nil))
3469 (defun ebrowse-tags-find-declaration ()
3470 "Find declaration of member at point."
3472 (ebrowse-tags-view/find-member-decl/defn 0 :view nil :definition nil))
3476 (defun ebrowse-tags-view-definition ()
3477 "View definition of member at point."
3479 (ebrowse-tags-view/find-member-decl/defn 0 :view t :definition t))
3483 (defun ebrowse-tags-find-definition ()
3484 "Find definition of member at point."
3486 (ebrowse-tags-view/find-member-decl/defn 0 :view nil :definition t))
3489 (defun ebrowse-tags-view-declaration-other-window ()
3490 "View declaration of member at point in other window."
3492 (ebrowse-tags-view/find-member-decl/defn 4 :view t :definition nil))
3496 (defun ebrowse-tags-find-declaration-other-window ()
3497 "Find declaration of member at point in other window."
3499 (ebrowse-tags-view/find-member-decl/defn 4 :view nil :definition nil))
3503 (defun ebrowse-tags-view-definition-other-window ()
3504 "View definition of member at point in other window."
3506 (ebrowse-tags-view/find-member-decl/defn 4 :view t :definition t))
3510 (defun ebrowse-tags-find-definition-other-window ()
3511 "Find definition of member at point in other window."
3513 (ebrowse-tags-view/find-member-decl/defn 4 :view nil :definition t))
3516 (defun ebrowse-tags-view-declaration-other-frame ()
3517 "View definition of member at point in other frame."
3519 (ebrowse-tags-view/find-member-decl/defn 5 :view t :definition nil))
3523 (defun ebrowse-tags-find-declaration-other-frame ()
3524 "Find definition of member at point in other frame."
3526 (ebrowse-tags-view/find-member-decl/defn 5 :view nil :definition nil))
3530 (defun ebrowse-tags-view-definition-other-frame ()
3531 "View definition of member at point in other frame."
3533 (ebrowse-tags-view/find-member-decl/defn 5 :view t :definition t))
3537 (defun ebrowse-tags-find-definition-other-frame ()
3538 "Find definition of member at point in other frame."
3540 (ebrowse-tags-view/find-member-decl/defn 5 :view nil :definition t))
3543 (defun ebrowse-tags-select/create-member-buffer (tree-buffer info)
3544 "Select or create member buffer.
3545 TREE-BUFFER specifies the tree to use. INFO describes the member.
3547 (let ((buffer (get-buffer ebrowse-member-buffer-name)))
3550 (switch-to-buffer (ebrowse-display-member-buffer
3554 (setq ebrowse--displayed-class (first info)
3555 ebrowse--accessor (second info)
3556 ebrowse--member-list (funcall ebrowse--accessor ebrowse--displayed-class))
3557 (ebrowse-redisplay-member-buffer)))
3558 (ebrowse-move-point-to-member (ebrowse-ms-name (third info)))))
3561 (defun ebrowse-tags-display-member-buffer (&optional fix-name)
3562 "Display a member buffer for a member.
3563 FIX-NAME non-nil means display the buffer for that member.
3564 Otherwise read a member name from point."
3567 (tree header tree-buffer) (ebrowse-choose-tree)
3572 (ebrowse-tags-read-name header
3573 (concat "Find member list of: "))))
3574 (setq info (ebrowse-tags-choose-class tree header name class-name))
3575 (ebrowse-push-position marker info)
3576 (ebrowse-tags-select/create-member-buffer tree-buffer info))))
3579 (defun ebrowse-list-of-matching-members (members regexp &optional name)
3585 (maphash #'(lambda (member-name info)
3586 (when (or (and name (string= name member-name))
3587 (and regexp (string-match regexp member-name)))
3588 (setq list (cons member-name list))))
3593 (defun ebrowse-tags-apropos ()
3596 (let* ((buffer (or (ebrowse-choose-from-browser-buffers)
3598 (header (ebrowse-value-in-buffer 'ebrowse--header buffer))
3599 (members (ebrowse-member-table header))
3606 (loop for s in (ebrowse-list-of-matching-members members regexp) do
3608 (ebrowse-draw-file-member-info info))))))
3611 (defun ebrowse-tags-list-members-in-file ()
3615 (let* ((buffer (or (ebrowse-choose-from-browser-buffers)
3617 (files (save-excursion (set-buffer buffer) (ebrowse-files-table)))
3619 (header (ebrowse-value-in-buffer 'ebrowse--header buffer))
3621 (members (ebrowse-member-table header)))
3625 #'(lambda (member-name list)
3627 as member = (third info)
3628 as class = (ebrowse-ts-class (first info))
3629 when (or (and (null (ebrowse-ms-file member))
3630 (string= (ebrowse-cs-file class) file))
3631 (string= file (ebrowse-ms-file member)))
3632 do (ebrowse-draw-file-member-info info "decl.")
3633 when (or (and (null (ebrowse-ms-definition-file member))
3634 (string= (ebrowse-cs-source-file class) file))
3635 (string= file (ebrowse-ms-definition-file member)))
3636 do (ebrowse-draw-file-member-info info "defn.")))
3640 (defun* ebrowse-draw-file-member-info (info &optional (kind ""))
3642 INFO describes the member. It has the form (TREE ACCESSOR MEMBER).
3643 TREE is the class of the member to display.
3644 ACCESSOR is the accessor symbol of its member list.
3645 MEMBER is the member structure.
3648 (globals-p (ebrowse-globals-tree-p tree)))
3650 (insert (ebrowse-cs-name (ebrowse-ts-class tree))))
3651 (insert "::" (ebrowse-ms-name (third info)))
3656 ('ebrowse-ts-member-functions "member function")
3657 ('ebrowse-ts-member-variables "member variable")
3658 ('ebrowse-ts-static-functions "static function")
3659 ('ebrowse-ts-static-variables "static variable")
3660 ('ebrowse-ts-friends (if globals-p "define" "friend"))
3661 ('ebrowse-ts-types "type")
3665 (defvar ebrowse-last-completion nil
3669 (defvar ebrowse-last-completion-start nil
3673 (defvar ebrowse-last-completion-location nil
3677 (defvar ebrowse-last-completion-obarray nil
3681 (make-variable-buffer-local 'ebrowse-last-completion-obarray)
3682 (make-variable-buffer-local 'ebrowse-last-completion-location)
3683 (make-variable-buffer-local 'ebrowse-last-completion)
3684 (make-variable-buffer-local 'ebrowse-last-completion-start)
3689 (defun ebrowse-some-member-table ()
3691 If there's only one tree loaded, use that. Otherwise let the
3692 use choose a tree."
3693 (let* ((buffers (ebrowse-known-class-trees-buffer-list))
3696 (t (or (ebrowse-electric-choose-tree)
3698 (header (ebrowse-value-in-buffer 'ebrowse--header buffer)))
3699 (ebrowse-member-table header)))
3702 (defun ebrowse-cyclic-successor-in-string-list (string list)
3705 (or (nth (1+ (ebrowse-position string list 'string=)) list)
3713 (defun* ebrowse-tags-complete-symbol (prefix)
3726 (let* ((members (ebrowse-some-member-table))
3727 (completion (completing-read "Insert member: "
3730 (setf ebrowse-last-completion-location nil)
3735 ((eq (point) ebrowse-last-completion-location)
3736 (setf list (all-completions ebrowse-last-completion-start
3737 ebrowse-last-completion-obarray)
3738 completion (ebrowse-cyclic-successor-in-string-list
3739 ebrowse-last-completion list))
3747 (setf ebrowse-last-completion completion
3748 ebrowse-last-completion-location (point)))))
3752 (let* ((members (ebrowse-some-member-table))
3761 (setf ebrowse-last-completion-location (point)
3762 ebrowse-last-completion-start pattern
3763 ebrowse-last-completion completion
3764 ebrowse-last-completion-obarray members))))))))
3768 ;;; Tags query replace & search
3770 (defvar ebrowse-tags-loop-form ()
3771 "Form for `ebrowse-loop-continue'.
3775 (defvar ebrowse-tags-next-file-list ()
3779 (defvar ebrowse-tags-next-file-path nil
3783 (defvar ebrowse-tags-loop-last-file nil
3784 "The last file visited via `ebrowse-tags-loop'.")
3787 (defun ebrowse-tags-next-file (&optional initialize tree-buffer)
3797 (let ((buffer (or tree-buffer (ebrowse-choose-from-browser-buffers))))
3800 (setq ebrowse-tags-next-file-list
3801 (ebrowse-files-list (ebrowse-marked-classes-p))
3802 ebrowse-tags-loop-last-file
3804 ebrowse-tags-next-file-path
3805 (file-name-directory ebrowse--tags-file-name)))))
3807 (unless ebrowse-tags-next-file-list
3809 ;; ebrowse-tags-loop-last-file is the last file that was visited due
3813 (when ebrowse-tags-loop-last-file
3814 (let ((buffer (get-file-buffer ebrowse-tags-loop-last-file)))
3820 (let ((file (expand-file-name (car ebrowse-tags-next-file-list)
3821 ebrowse-tags-next-file-path)))
3822 (setq ebrowse-tags-loop-last-file (if (get-file-buffer file) nil file))
3827 (pop ebrowse-tags-next-file-list)
3832 (defun ebrowse-tags-loop-continue (&optional first-time tree-buffer)
3838 (ebrowse-tags-next-file first-time tree-buffer)
3840 (while (not (eval ebrowse-tags-loop-form))
3841 (ebrowse-tags-next-file)
3847 (defun ebrowse-tags-search (regexp)
3850 If regular expression is nil, repeat last search."
3851 (interactive "sTree search (regexp): ")
3853 (eq (car ebrowse-tags-loop-form) 're-search-forward))
3854 (ebrowse-tags-loop-continue)
3855 (setq ebrowse-tags-loop-form (list 're-search-forward regexp nil t))
3856 (ebrowse-tags-loop-continue 'first-time)))
3860 (defun ebrowse-tags-query-replace (from to)
3865 (setq ebrowse-tags-loop-form
3867 (list 're-search-forward from nil t))
3869 (ebrowse-tags-loop-continue 'first-time))
3873 (defun ebrowse-tags-search-member-use (&optional fix-name)
3874 "Search for call sites of a member.
3875 If FIX-NAME is specified, search uses of that member.
3876 Otherwise, read a member name from the minibuffer.
3878 looks like a function call to the member."
3880 ;; Choose the tree to use if there is more than one.
3882 (ebrowse-choose-tree)
3885 ;; Get the member name NAME (class-name is ignored).
3889 (ebrowse-tags-read-name header "Find calls of: ")))
3890 ;; Set tags loop form to search for member and begin loop.
3892 ebrowse-tags-loop-form (list 're-search-forward regexp nil t))
3893 (ebrowse-tags-loop-continue 'first-time tree-buffer))))
3902 (defstruct (ebrowse-position (:type vector) :named)
3909 (defvar ebrowse-position-stack ()
3910 "Stack of `ebrowse-position' structured.")
3913 (defvar ebrowse-position-index 0
3917 (defun ebrowse-position-name (position)
3920 (let ((info (ebrowse-position-info position)))
3921 (concat (if (ebrowse-position-target position) "at " "to ")
3922 (ebrowse-cs-name (ebrowse-ts-class (first info)))
3923 "::" (ebrowse-ms-name (third info)))))
3926 (defun ebrowse-view/find-position (position &optional view)
3930 (find-file (ebrowse-position-file-name position))
3931 (goto-char (ebrowse-position-point position)))
3937 (goto-char (ebrowse-position-point position))))
3939 (view-file (ebrowse-position-file-name position)))
3943 (defun ebrowse-push-position (marker info &optional target)
3950 (let ((too-much (- (length ebrowse-position-stack)
3951 ebrowse-max-positions)))
3954 (setq ebrowse-position-stack
3955 (butlast ebrowse-position-stack too-much)))
3957 (push (make-ebrowse-position
3962 ebrowse-position-stack))))
3965 (defun ebrowse-move-in-position-stack (increment)
3967 (let ((length (length ebrowse-position-stack)))
3970 (setq ebrowse-position-index
3971 (mod (+ increment ebrowse-position-index) length))
3972 (message "Position %d of %d " ebrowse-position-index length)
3973 (ebrowse-view/find-position (nth ebrowse-position-index
3974 ebrowse-position-stack))))
3978 (defun ebrowse-back-in-position-stack (arg)
3982 (ebrowse-move-in-position-stack (max 1 arg)))
3986 (defun ebrowse-forward-in-position-stack (arg)
3990 (ebrowse-move-in-position-stack (min -1 (- arg))))
3997 (defvar ebrowse-electric-position-mode-map ()
4001 (defvar ebrowse-electric-position-mode-hook nil
4002 "If non-nil, its value is called by `ebrowse-electric-position-mode'.")
4005 (unless ebrowse-electric-position-mode-map
4008 (setq ebrowse-electric-position-mode-map map)
4009 (fillarray (car (cdr map)) 'ebrowse-electric-position-undefined)
4010 (fillarray (car (cdr submap)) 'ebrowse-electric-position-undefined)
4016 (define-key map "\C-c\C-c" 'ebrowse-electric-position-quit)
4017 (define-key map "q" 'ebrowse-electric-position-quit)
4018 (define-key map " " 'ebrowse-electric-select-position)
4025 (define-key map "v" 'ebrowse-electric-view-position)
4033 (put 'ebrowse-electric-position-mode 'mode-class 'special)
4034 (put 'ebrowse-electric-position-undefined 'suppress-keymap t)
4037 (defun ebrowse-electric-position-mode ()
4039 Runs the hook `ebrowse-electric-position-mode-hook'."
4041 (use-local-map ebrowse-electric-position-mode-map)
4051 major-mode 'ebrowse-electric-position-mode)
4052 (run-mode-hooks 'ebrowse-electric-position-mode-hook))
4055 (defun ebrowse-draw-position-buffer ()
4062 (dolist (position ebrowse-position-stack)
4063 (insert (file-name-nondirectory (ebrowse-position-file-name position)))
4065 (insert (int-to-string (ebrowse-position-point position)))
4067 (insert (ebrowse-position-name position) "\n"))
4072 (defun ebrowse-electric-position-menu ()
4075 (unless ebrowse-position-stack
4079 (save-window-excursion (ebrowse-draw-position-buffer))
4086 (ebrowse-electric-position-mode)
4088 (catch 'ebrowse-electric-select-position
4098 (Electric-command-loop 'ebrowse-electric-select-position
4100 'ebrowse-electric-position-looper
4107 (ebrowse-electric-find-position select))
4111 (defun ebrowse-electric-position-looper (state condition)
4130 (defun ebrowse-electric-position-undefined ()
4137 (defun ebrowse-electric-position-quit ()
4140 (throw 'ebrowse-electric-select-position nil))
4143 (defun ebrowse-electric-select-position ()
4146 (throw 'ebrowse-electric-select-position (point)))
4149 (defun ebrowse-electric-find-position (point &optional view)
4153 (ebrowse-view/find-position (nth index
4154 ebrowse-position-stack) view)))
4157 (defun ebrowse-electric-view-position ()
4160 (ebrowse-electric-find-position (point) t))
4167 (defun ebrowse-write-file-hook-fn ()
4170 (ebrowse-save-tree)
4175 (defun ebrowse-save-tree ()
4178 (ebrowse-save-tree-as (or buffer-file-name ebrowse--tags-file-name)))
4182 (defun ebrowse-save-tree-as (&optional file-name)
4189 (header (copy-ebrowse-hs ebrowse--header))
4190 (tree ebrowse--tree))
4195 (setf (ebrowse-hs-member-table header) nil)
4197 (mapcar 'ebrowse-save-class tree)
4202 (ebrowse-update-tree-buffer-mode-line)
4206 (defun ebrowse-save-class (class)
4208 (message "%s..." (ebrowse-cs-name (ebrowse-ts-class class)))
4209 (insert "[ebrowse-ts ")
4210 (prin1 (ebrowse-ts-class class)) ;class name
4212 (mapcar 'ebrowse-save-class (ebrowse-ts-subclasses class))
4214 (dolist (func ebrowse-member-list-accessors)
4218 (prin1 (ebrowse-ts-mark class))
4227 (defun ebrowse-statistics ()
4233 (multiple-value-bind (classes member-functions member-variables
4235 (ebrowse-gather-statistics)
4239 (ebrowse-print-statistics-line "Number of classes:" classes)
4240 (ebrowse-print-statistics-line "Number of member functions:"
4241 member-functions)
4242 (ebrowse-print-statistics-line "Number of member variables:"
4243 member-variables)
4244 (ebrowse-print-statistics-line "Number of static functions:"
4246 (ebrowse-print-statistics-line "Number of static variables:"
4250 (defun ebrowse-print-statistics-line (title value)
4259 (defun ebrowse-gather-statistics ()
4264 (let ((classes 0) (member-functions 0) (member-variables 0)
4266 (ebrowse-for-all-trees (tree ebrowse--tree-obarray)
4268 (incf member-functions (length (ebrowse-ts-member-functions tree)))
4269 (incf member-variables (length (ebrowse-ts-member-variables tree)))
4270 (incf static-functions (length (ebrowse-ts-static-functions tree)))
4271 (incf static-variables (length (ebrowse-ts-static-variables tree))))
4272 (list classes member-functions member-variables
4283 (defvar ebrowse-global-map nil
4287 (defvar ebrowse-global-prefix-key "\C-c\C-m"
4291 (defvar ebrowse-global-submap-4 nil
4292 "Keymap used for `ebrowse-global-prefix' followed by `4'.")
4295 (defvar ebrowse-global-submap-5 nil
4296 "Keymap used for `ebrowse-global-prefix' followed by `5'.")
4299 (unless ebrowse-global-map
4300 (setq ebrowse-global-map (make-sparse-keymap))
4301 (setq ebrowse-global-submap-4 (make-sparse-keymap))
4302 (setq ebrowse-global-submap-5 (make-sparse-keymap))
4303 (define-key ebrowse-global-map "a" 'ebrowse-tags-apropos)
4304 (define-key ebrowse-global-map "b" 'ebrowse-pop-to-browser-buffer)
4305 (define-key ebrowse-global-map "-" 'ebrowse-back-in-position-stack)
4306 (define-key ebrowse-global-map "+" 'ebrowse-forward-in-position-stack)
4307 (define-key ebrowse-global-map "l" 'ebrowse-tags-list-members-in-file)
4308 (define-key ebrowse-global-map "m" 'ebrowse-tags-display-member-buffer)
4309 (define-key ebrowse-global-map "n" 'ebrowse-tags-next-file)
4310 (define-key ebrowse-global-map "p" 'ebrowse-electric-position-menu)
4311 (define-key ebrowse-global-map "s" 'ebrowse-tags-search)
4312 (define-key ebrowse-global-map "u" 'ebrowse-tags-search-member-use)
4313 (define-key ebrowse-global-map "v" 'ebrowse-tags-view-definition)
4314 (define-key ebrowse-global-map "V" 'ebrowse-tags-view-declaration)
4315 (define-key ebrowse-global-map "%" 'ebrowse-tags-query-replace)
4316 (define-key ebrowse-global-map "." 'ebrowse-tags-find-definition)
4317 (define-key ebrowse-global-map "f" 'ebrowse-tags-find-definition)
4318 (define-key ebrowse-global-map "F" 'ebrowse-tags-find-declaration)
4319 (define-key ebrowse-global-map "," 'ebrowse-tags-loop-continue)
4320 (define-key ebrowse-global-map " " 'ebrowse-electric-buffer-list)
4321 (define-key ebrowse-global-map "\t" 'ebrowse-tags-complete-symbol)
4322 (define-key ebrowse-global-map "4" ebrowse-global-submap-4)
4323 (define-key ebrowse-global-submap-4 "." 'ebrowse-tags-find-definition-other-window)
4324 (define-key ebrowse-global-submap-4 "f" 'ebrowse-tags-find-definition-other-window)
4325 (define-key ebrowse-global-submap-4 "v" 'ebrowse-tags-find-declaration-other-window)
4326 (define-key ebrowse-global-submap-4 "F" 'ebrowse-tags-view-definition-other-window)
4327 (define-key ebrowse-global-submap-4 "V" 'ebrowse-tags-view-declaration-other-window)
4328 (define-key ebrowse-global-map "5" ebrowse-global-submap-5)
4329 (define-key ebrowse-global-submap-5 "." 'ebrowse-tags-find-definition-other-frame)
4330 (define-key ebrowse-global-submap-5 "f" 'ebrowse-tags-find-definition-other-frame)
4331 (define-key ebrowse-global-submap-5 "v" 'ebrowse-tags-find-declaration-other-frame)
4332 (define-key ebrowse-global-submap-5 "F" 'ebrowse-tags-view-definition-other-frame)
4333 (define-key ebrowse-global-submap-5 "V" 'ebrowse-tags-view-declaration-other-frame)
4334 (define-key global-map ebrowse-global-prefix-key ebrowse-global-map))
4353 (defun ebrowse-hack-electric-buffer-menu ()
4363 (if (or (ebrowse-buffer-p b)
4378 (defun ebrowse-select-1st-to-9nth ()
4387 (defun ebrowse-install-1-to-9-keys ()
4391 'ebrowse-select-1st-to-9nth)))
4394 (defun ebrowse-electric-buffer-list ()
4400 'ebrowse-hack-electric-buffer-menu)
4402 'ebrowse-install-1-to-9-keys)
4405 'ebrowse-hack-electric-buffer-menu)))
4411 (defun ebrowse-mouse-find-member (event)
4412 "Find the member clicked on in another frame.
4422 (ebrowse-tags-view/find-member-decl/defn
4423 5 :view nil :definition t :member-name name)))
4426 (defun ebrowse-popup-menu (menu event)
4440 ebrowse-tree-buffer-class-object-menu ebrowse-tree-mode-map
4443 ["Functions" ebrowse-tree-command:show-member-functions
4444 :help "Display a list of member functions"
4446 ["Variables" ebrowse-tree-command:show-member-variables
4447 :help "Display a list of member variables"
4449 ["Static Functions" ebrowse-tree-command:show-static-member-functions
4450 :help "Display a list of static member functions"
4452 ["Static Variables" ebrowse-tree-command:show-static-member-variables
4453 :help "Display a list of static member variables"
4455 ["Friends/ Defines" ebrowse-tree-command:show-friends
4458 ["Types" ebrowse-tree-command:show-types
4462 ["View" ebrowse-view-class-declaration
4464 :active (eq (get-text-property (point) 'ebrowse-what) 'class-name)]
4465 ["Find" ebrowse-find-class-declaration
4467 :active (eq (get-text-property (point) 'ebrowse-what) 'class-name)]
4469 ["Mark" ebrowse-toggle-mark-at-point
4471 :active (eq (get-text-property (point) 'ebrowse-what) 'class-name)]
4473 ["Collapse" ebrowse-collapse-branch
4475 :active (eq (get-text-property (point) 'ebrowse-what) 'class-name)]
4476 ["Expand" ebrowse-expand-branch
4478 :active (eq (get-text-property (point) 'ebrowse-what) 'class-name)]))
4482 ebrowse-tree-buffer-object-menu ebrowse-tree-mode-map
4485 ["Filename Display" ebrowse-toggle-file-name-display
4488 :selected ebrowse--show-file-names-flag
4490 ["Tree Indentation" ebrowse-set-tree-indentation
4493 ["Unmark All Classes" ebrowse-mark-all-classes
4496 ["Expand All" ebrowse-expand-all
4499 ["Statistics" ebrowse-statistics
4502 ["Find Class" ebrowse-read-class-name-and-go
4505 ["Member Buffer" ebrowse-pop/switch-to-member-buffer-for-same-tree
4506 :help "Show a member buffer for this class tree"
4510 (defun ebrowse-mouse-3-in-tree-buffer (event)
4516 (property (get-text-property where 'ebrowse-what)))
4521 (ebrowse-popup-menu ebrowse-tree-buffer-class-object-menu event))
4523 (ebrowse-popup-menu ebrowse-tree-buffer-object-menu event)))))))
4526 (defun ebrowse-mouse-2-in-tree-buffer (event)
4532 (property (get-text-property where 'ebrowse-what)))
4536 (ebrowse-tree-command:show-member-functions)))))))
4539 (defun ebrowse-mouse-1-in-tree-buffer (event)
4545 (property (get-text-property where 'ebrowse-what)))
4551 (ebrowse-collapse-fn (not collapsed))))
4553 (ebrowse-toggle-mark-at-point 1)))))))
4558 (provide 'ebrowse)
4561 ;;; eval:(put 'ebrowse-output 'lisp-indent-hook 0)
4562 ;;; eval:(put 'ebrowse-ignoring-completion-case 'lisp-indent-hook 0)
4563 ;;; eval:(put 'ebrowse-save-selective 'lisp-indent-hook 0)
4564 ;;; eval:(put 'ebrowse-for-all-trees 'lisp-indent-hook 1)
4568 ;;; ebrowse.el ends here