• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10.1/emacs-93/emacs/lisp/progmodes/

Lines Matching +defs:electric +defs:buffer +defs:menu +defs:select

34 ;; - An electric buffer list showing class browser buffers only
42 (require 'ebuff-menu)
78 (defcustom ebrowse-electric-list-mode-hook nil
79 "*Hook called by `ebrowse-electric-position-mode'."
85 "*Number of markers saved on electric position stack."
98 "*Hook run in each new tree buffer."
103 (defcustom ebrowse-tree-buffer-name "*Tree*"
147 (defcustom ebrowse-member-buffer-name "*Members*"
148 "*The name of the buffer for member display."
154 "*Run in each new member buffer."
284 "Eval BODY with a writable current buffer.
285 Preserve buffer's modified state."
287 `(let (buffer-read-only (,modified (buffer-modified-p)))
290 (set-buffer-modified-p ,modified)))))
345 (defun ebrowse-value-in-buffer (sym buffer)
347 (let ((old-buffer (current-buffer)))
350 (set-buffer buffer)
352 (set-buffer old-buffer))))
355 (defun ebrowse-rename-buffer (new-name)
356 "Rename current buffer to NEW-NAME.
357 If a buffer with name NEW-NAME already exists, delete it first."
358 (let ((old-buffer (get-buffer new-name)))
359 (unless (eq old-buffer (current-buffer))
360 (when old-buffer
361 (save-excursion (kill-buffer old-buffer)))
362 (rename-buffer new-name))))
376 "Return the width of the display area for the current buffer.
377 If buffer is displayed in a window, use that window's width,
379 (let ((window (get-buffer-window (current-buffer))))
421 ;; A marker slot used in the tree buffer (can be saved back to disk.
447 ;; The buffer position at which the search for the class or member
544 Each tree and member buffer maintains its own search history.")
545 (make-variable-buffer-local 'ebrowse--last-regexp)
561 ;;; FIXME: Add more doc strings for the buffer-local variables below.
579 "Non-nil means an Ebrowse buffer won't be reused.
584 "Non-nil means show file names in a tree buffer.
604 "Non-nil means display virtual members in a member buffer.
609 "Non-nil means display inline members in a member buffer.
614 "Non-nil means display const members in a member buffer.
619 "Non-nil means display pure virtual members in a member buffer.
631 "Non-nil means display inherited members in a member buffer.
636 "Non-nil means display member attributes in a member buffer.
641 "Non-nil means display member regexps in a member buffer.
646 "Class displayed in a member buffer, a `ebrowse-ts' structure.
651 "Member list displayed in a member buffer.
658 "The list of `ebrowse-ms' structures displayed in a member buffer.
674 Either `kill-buffer' or nil.
724 The tree is expected in the buffer-local variable `ebrowse--tree-obarray'.
787 The class tree is found in the buffer-local variable `ebrowse--tree-obarray'."
866 "Return an alist describing all members visible in the current buffer.
885 are visible in the buffer."
919 "Read `ebrowse-hs' and `ebrowse-ts' structures in the current buffer.
923 (read (current-buffer))
936 (let* ((root (read (current-buffer)))
946 (defun ebrowse-revert-tree-buffer-from-file (ignore-auto-save noconfirm)
947 "Function installed as `revert-buffer-function' in tree buffers.
951 (loop for member-buffer in (ebrowse-same-tree-member-buffer-list)
952 do (kill-buffer member-buffer))
953 (erase-buffer)
955 (insert-file (or buffer-file-name ebrowse--tags-file-name)))
957 (current-buffer)))
960 (defun ebrowse-create-tree-buffer (tree tags-file header obarray pop)
961 "Create a new tree buffer for tree TREE.
965 POP non-nil means popup the buffer up at the end.
966 Return the buffer created."
967 (let ((name ebrowse-tree-buffer-name))
968 (set-buffer (get-buffer-create name))
976 (set-buffer-modified-p nil)
978 (switch (switch-to-buffer name))
979 (pop (pop-to-buffer name)))
980 (current-buffer)))
991 extracted from the buffer-local tree `ebrowse--tree-obarray'.
998 The slot `member-table' of the buffer-local header structure of
1021 (loop for buffer in (ebrowse-browser-buffer-list)
1022 until (eq header (ebrowse-value-in-buffer 'ebrowse--header buffer))
1025 (set-buffer buffer)
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))
1124 (define-key map "q" 'bury-buffer)
1131 (define-key map "\C-i" 'ebrowse-pop/switch-to-member-buffer-for-same-tree)
1146 File operations in the tree buffer work on class tree data structures.
1147 E.g.\\[save-buffer] writes the tree to the file it was loaded from.
1152 (let* ((ident (propertized-buffer-identification "C++ Tree"))
1153 header tree buffer-read-only)
1158 (unless (zerop (buffer-size))
1163 (erase-buffer)
1174 revert-buffer-function))
1181 mode-line-buffer-identification ident
1182 buffer-read-only t
1185 revert-buffer-function 'ebrowse-revert-tree-buffer-from-file
1188 ebrowse--tags-file-name (buffer-file-name)
1196 (set-buffer-modified-p nil))
1201 (defun ebrowse-update-tree-buffer-mode-line ()
1202 "Update the tree buffer mode line."
1203 (ebrowse-rename-buffer (if ebrowse--frozen-flag
1204 (ebrowse-frozen-tree-buffer-name
1206 ebrowse-tree-buffer-name))
1242 (set-buffer-modified-p t)
1251 ;;; Marking classes in the tree buffer
1270 ;; by a regexp replace over the whole buffer. The reason for this
1307 (ebrowse-update-tree-buffer-mode-line)))
1354 "Toggle display of filenames in tree buffer."
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."
1368 (eq (cdr (assoc 'major-mode (buffer-local-variables buffer)))
1372 (defun ebrowse-tree-buffer-p (buffer)
1373 "Value is non-nil if BUFFER is a class tree buffer."
1374 (eq (cdr (assoc 'major-mode (buffer-local-variables buffer)))
1378 (defun ebrowse-buffer-p (buffer)
1379 "Value is non-nil if BUFFER is a tree or member buffer."
1380 (memq (cdr (assoc 'major-mode (buffer-local-variables buffer)))
1384 (defun ebrowse-browser-buffer-list ()
1386 (ebrowse-delete-if-not 'ebrowse-buffer-p (buffer-list)))
1389 (defun ebrowse-member-buffer-list ()
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)))
1407 (dolist (buffer buffers)
1408 (let ((tree (ebrowse-value-in-buffer 'ebrowse--tree buffer)))
1410 (push buffer result))
1415 (defun ebrowse-same-tree-member-buffer-list ()
1416 "Return a list of members buffers with same tree as current buffer."
1418 #'(lambda (buffer)
1419 (eq (ebrowse-value-in-buffer 'ebrowse--tree buffer)
1421 (ebrowse-member-buffer-list)))
1426 (defun ebrowse-pop/switch-to-member-buffer-for-same-tree (arg)
1427 "Pop to the buffer displaying members.
1428 Switch to buffer if prefix 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)
1436 (switch-to-buffer buf)
1437 (pop-to-buffer buf)))
1441 (defun ebrowse-switch-to-next-member-buffer ()
1442 "Switch to next member buffer."
1444 (let* ((list (ebrowse-member-buffer-list))
1445 (next-list (cdr (memq (current-buffer) list)))
1446 (next-buffer (if next-list (car next-list) (car list))))
1447 (if (eq next-buffer (current-buffer))
1448 (error "No next buffer")
1449 (bury-buffer)
1450 (switch-to-buffer next-buffer))))
1455 (loop for buffer in (ebrowse-member-buffer-list)
1456 as class = (ebrowse-value-in-buffer 'ebrowse--displayed-class buffer)
1457 when (eq class tree) do (kill-buffer buffer)))
1460 (defun ebrowse-frozen-tree-buffer-name (tags-file-name)
1461 "Return the buffer name of a tree which is associated TAGS-FILE-NAME."
1462 (concat ebrowse-tree-buffer-name " (" tags-file-name ")"))
1465 (defun ebrowse-pop-to-browser-buffer (arg)
1466 "Pop to a browser buffer from any other buffer.
1467 Pop to member buffer if no prefix ARG, to tree buffer otherwise."
1469 (let ((buffer (get-buffer (if arg
1470 ebrowse-tree-buffer-name
1471 ebrowse-member-buffer-name))))
1472 (unless buffer
1473 (setq buffer
1474 (get-buffer (if arg
1475 ebrowse-member-buffer-name
1476 ebrowse-tree-buffer-name))))
1477 (unless buffer
1478 (error "No browser buffer found"))
1479 (pop-to-buffer buffer)))
1484 ;;; Misc tree buffer commands
1503 ;; If no class specified, read the class name from mini-buffer
1525 "Display member variables; with prefix ARG in frozen member buffer."
1527 (ebrowse-display-member-buffer 'ebrowse-ts-member-variables arg))
1531 "Display member functions; with prefix ARG in frozen member buffer."
1533 (ebrowse-display-member-buffer 'ebrowse-ts-member-functions arg))
1537 "Display static member variables; with prefix ARG in frozen member buffer."
1539 (ebrowse-display-member-buffer 'ebrowse-ts-static-variables arg))
1543 "Display static member functions; with prefix ARG in frozen member buffer."
1545 (ebrowse-display-member-buffer 'ebrowse-ts-static-functions arg))
1549 "Display friend functions; with prefix ARG in frozen member buffer."
1551 (ebrowse-display-member-buffer 'ebrowse-ts-friends arg))
1555 "Display types defined in a class; with prefix ARG in frozen member buffer."
1557 (ebrowse-display-member-buffer 'ebrowse-ts-types arg))
1646 (had-a-buf (get-file-buffer file))
1648 (switch-to-buffer-other-window buf-to-view)
1651 (not (buffer-modified-p buf-to-view))
1652 'kill-buffer))))
1655 (defun ebrowse-view-exit-fn (buffer)
1658 and possibly kill the viewed buffer."
1661 (set-buffer buffer)
1670 (funcall exit-action buffer))))
1679 (had-a-buf (get-file-buffer file))
1681 (switch-to-buffer-other-frame buf-to-view)
1687 (not (buffer-modified-p buf-to-view))
1688 'kill-buffer))
1781 a pattern. To be able to do a search in a viewed buffer,
1860 (erase-buffer)
1862 (ebrowse-update-tree-buffer-mode-line)
1918 help-echo "double-mouse-1: (un)expand tree; mouse-2: member functions, mouse-3: menu"))
1944 \(The class cursor is on.) With prefix ARG, fold all trees in the buffer."
1952 "Expand or fold all trees in the buffer.
2023 (defvar ebrowse-electric-list-mode-map ()
2024 "Keymap used in electric Ebrowse buffer list window.")
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)
2051 (define-key map "\e>" 'end-of-buffer)
2052 (define-key map "\e<" 'beginning-of-buffer)
2053 (define-key map "\e>" 'end-of-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 ()
2060 "Mode for electric tree list mode."
2062 (use-local-map ebrowse-electric-list-mode-map)
2064 mode-line-buffer-identification "Electric Tree Menu")
2069 (setq Helper-return-blurb "return to buffer editing"
2071 buffer-read-only t
2072 major-mode 'ebrowse-electric-list-mode)
2073 (run-mode-hooks 'ebrowse-electric-list-mode-hook))
2078 (set-buffer (get-buffer-create "*Tree Buffers*"))
2079 (setq buffer-read-only nil)
2080 (erase-buffer)
2082 (dolist (buffer (ebrowse-known-class-trees-buffer-list))
2083 (insert (buffer-name buffer) "\n"))
2084 (setq buffer-read-only t))
2088 (defun ebrowse-electric-choose-tree ()
2089 "Return a buffer containing a tree or nil if no tree found or canceled."
2091 (unless (car (ebrowse-known-class-trees-buffer-list))
2093 (let (select buffer window)
2097 buffer (window-buffer window))
2098 (shrink-window-if-larger-than-buffer window)
2101 (set-buffer buffer)
2102 (ebrowse-electric-list-mode)
2103 (setq select
2104 (catch 'ebrowse-electric-list-select
2114 (Electric-command-loop 'ebrowse-electric-list-select
2117 'ebrowse-electric-list-looper
2119 (set-buffer buffer)
2120 (bury-buffer buffer)
2122 (when select
2123 (set-buffer buffer)
2124 (setq select (ebrowse-electric-get-buffer select)))
2125 (kill-buffer buffer)
2126 select))
2129 (defun ebrowse-electric-list-looper (state condition)
2130 "Prevent cursor from moving beyond the buffer end.
2135 '(buffer-read-only end-of-buffer
2136 beginning-of-buffer))))
2148 (defun ebrowse-electric-list-undefined ()
2151 (message "Type C-h for help, ? for commands, q to quit, Space to select.")
2155 (defun ebrowse-electric-list-quit ()
2156 "Discard the buffer list."
2158 (throw 'ebrowse-electric-list-select nil))
2161 (defun ebrowse-electric-list-select ()
2162 "Select a buffer from the buffer list."
2164 (throw 'ebrowse-electric-list-select (point)))
2167 (defun ebrowse-electric-get-buffer (point)
2168 "Get a buffer corresponding to the line POINT is in."
2170 (nth index (ebrowse-known-class-trees-buffer-list))))
2173 ;;; View a buffer for a tree.
2175 (defun ebrowse-electric-view-buffer ()
2176 "View buffer point is on."
2178 (let ((buffer (ebrowse-electric-get-buffer (point))))
2179 (cond (buffer
2180 (view-buffer buffer))
2186 "Read a browser buffer name from the minibuffer and return that buffer."
2187 (let* ((buffers (ebrowse-known-class-trees-buffer-list)))
2191 (or (ebrowse-electric-choose-tree) (error "No tree buffer")))
2196 (find-buffer-visiting file)))))
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))
2225 (define-key map1 "f" 'ebrowse-freeze-member-buffer)
2228 (define-key map1 "w" 'ebrowse-set-member-buffer-column-width))
2265 (define-key map "m" 'ebrowse-switch-to-next-member-buffer)
2266 (define-key map "q" 'bury-buffer)
2271 (define-key map "\C-i" 'ebrowse-pop-from-member-to-tree-buffer)
2272 (define-key map "\C-l" 'ebrowse-redisplay-member-buffer)
2309 ebrowse--frozen-flag)) ;buffer not automagically reused
2311 mode-line-buffer-identification
2312 (propertized-buffer-identification "C++ Members")
2313 buffer-read-only t
2333 (defsubst ebrowse-class-name-displayed-in-member-buffer ()
2334 "Return the name of the class displayed in the member buffer."
2339 "Return a string describing what is displayed in the member buffer."
2345 (defun ebrowse-update-member-buffer-mode-line ()
2348 (concat (ebrowse-class-name-displayed-in-member-buffer)
2351 (setq mode-line-buffer-identification
2352 (propertized-buffer-identification ident))
2353 (ebrowse-rename-buffer (if name ident ebrowse-member-buffer-name))
2357 ;;; Misc member buffer commands
2359 (defun ebrowse-freeze-member-buffer ()
2360 "Toggle frozen status of current buffer."
2363 (ebrowse-redisplay-member-buffer))
2368 With prefix ARG, switch to the tree buffer else pop to it."
2370 (let ((class-name (ebrowse-class-name-displayed-in-member-buffer)))
2371 (when (ebrowse-pop-from-member-to-tree-buffer arg)
2375 (defun ebrowse-set-member-buffer-column-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.
2395 Switch to the buffer if prefix ARG. If no tree buffer exists,
2398 (let ((buf (or (get-buffer (ebrowse-frozen-tree-buffer-name
2400 (get-buffer ebrowse-tree-buffer-name)
2401 (ebrowse-create-tree-buffer ebrowse--tree
2407 (funcall (if arg 'switch-to-buffer 'pop-to-buffer) buf))
2416 "Switch the member buffer to display the member list for ACCESSOR."
2419 (ebrowse-redisplay-member-buffer))
2423 "Switch buffer to INCR'th next/previous list of members."
2440 "Switch buffer to next member list."
2446 "Switch buffer to previous member list."
2495 (ebrowse-redisplay-member-buffer))
2502 (ebrowse-redisplay-member-buffer))
2509 (ebrowse-redisplay-member-buffer))
2516 (ebrowse-redisplay-member-buffer))
2523 (ebrowse-redisplay-member-buffer))
2530 (ebrowse-redisplay-member-buffer))
2542 (ebrowse-redisplay-member-buffer))
2549 (ebrowse-redisplay-member-buffer))
2556 (ebrowse-redisplay-member-buffer))
2563 (ebrowse-redisplay-member-buffer))
2575 (ebrowse-redisplay-member-buffer))
2583 (ebrowse-redisplay-member-buffer))
2640 ;; out of the member buffer.
2710 ;;; Drawing the member buffer
2712 (defun ebrowse-redisplay-member-buffer ()
2713 "Force buffer redisplay."
2719 (erase-buffer)
2721 (ebrowse-draw-member-buffer-class-line)
2728 (ebrowse-draw-member-buffer-class-line 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.
2753 help-echo "mouse-3: menu"))
2757 (defun ebrowse-display-member-buffer (list &optional stand-alone class)
2758 "Start point for member buffer creation.
2760 means the member buffer is standalone. CLASS is its class."
2765 temp-buffer-setup-hook
2766 (temp-buffer (get-buffer ebrowse-member-buffer-name)))
2772 (if temp-buffer
2773 (pop-to-buffer temp-buffer)
2774 (pop-to-buffer (get-buffer-create ebrowse-member-buffer-name))
2775 ;; If new buffer, set the mode and initial values of locals
2786 buffer-read-only t)
2787 (ebrowse-redisplay-member-buffer)
2788 (current-buffer))))
2837 "Display member buffer for MEMBER-LIST in long form.
2853 help-echo "mouse-2: view definition; mouse-3: menu"))
2908 help-echo "mouse-2: view definition; mouse-3: menu"))
2935 ;;; Switching member buffer to display a selected member
2940 only members visible in the buffer."
2951 (ebrowse-redisplay-member-buffer))
2958 visible in the member buffer.
2970 ;;; Searching a member in the member buffer
2985 ;; If not found above, repeat search from buffer start
2995 "Set point on member NAME in the member buffer
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.
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
3032 (defun ebrowse-switch-member-buffer-to-base-class (arg)
3033 "Switch buffer to ARG'th base class."
3042 (ebrowse-switch-member-buffer-to-other-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)
3088 (ebrowse-redisplay-member-buffer)))
3091 (defun ebrowse-switch-member-buffer-to-derived-class (arg)
3104 (ebrowse-switch-member-buffer-to-other-class
3109 (ebrowse-redisplay-member-buffer)))))
3114 ;;; Member buffer mouse functions
3129 (easy-menu-define
3130 ebrowse-member-buffer-object-menu ebrowse-member-mode-map
3131 "Object menu for the member buffer itself."
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
3203 ["Column Width" ebrowse-set-member-buffer-column-width
3247 ["Tree" ebrowse-pop-from-member-to-tree-buffer
3248 :help "Pop to the class 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"
3268 (easy-menu-define
3269 ebrowse-member-class-name-object-menu ebrowse-member-mode-map
3270 "Object menu for class names in member buffer."
3280 (easy-menu-define
3281 ebrowse-member-name-object-menu ebrowse-member-mode-map
3282 "Object menu for member names"
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))))))
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)
3362 buffer))))
3403 (buffer-substring start (point))))
3432 current buffer like FIND-TAG. It then prepares a completion list
3438 (tree header tree-buffer) (ebrowse-choose-tree)
3456 (ebrowse-value-in-buffer 'ebrowse--tags-file-name tree-buffer))
3543 (defun ebrowse-tags-select/create-member-buffer (tree-buffer info)
3544 "Select or create member buffer.
3547 (let ((buffer (get-buffer ebrowse-member-buffer-name)))
3548 (cond ((null buffer)
3549 (set-buffer tree-buffer)
3550 (switch-to-buffer (ebrowse-display-member-buffer
3553 (switch-to-buffer buffer)
3557 (ebrowse-redisplay-member-buffer)))
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.
3567 (tree header tree-buffer) (ebrowse-choose-tree)
3576 (ebrowse-tags-select/create-member-buffer tree-buffer info))))
3596 (let* ((buffer (or (ebrowse-choose-from-browser-buffers)
3597 (error "No tree buffer")))
3598 (header (ebrowse-value-in-buffer 'ebrowse--header buffer))
3600 temp-buffer-setup-hook
3602 (with-output-to-temp-buffer (concat "*Apropos Members*")
3603 (set-buffer standard-output)
3604 (erase-buffer)
3615 (let* ((buffer (or (ebrowse-choose-from-browser-buffers)
3616 (error "No tree buffer")))
3617 (files (save-excursion (set-buffer buffer) (ebrowse-files-table)))
3619 (header (ebrowse-value-in-buffer 'ebrowse--header buffer))
3620 temp-buffer-setup-hook
3622 (with-output-to-temp-buffer (concat "*Members in file " file "*")
3623 (set-buffer standard-output)
3641 "Display a line in an the members per file info buffer.
3646 KIND is an additional string printed in the buffer."
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)
3693 (let* ((buffers (ebrowse-known-class-trees-buffer-list))
3694 (buffer (cond ((and (first buffers) (not (second buffers)))
3696 (t (or (ebrowse-electric-choose-tree)
3697 (error "No tree buffer")))))
3698 (header (ebrowse-value-in-buffer 'ebrowse--header buffer)))
3721 (pattern (buffer-substring begin end))
3750 ;; buffer: Start new completion.
3787 (defun ebrowse-tags-next-file (&optional initialize tree-buffer)
3794 ;; If more than one tree buffer is loaded, let the user choose
3797 (let ((buffer (or tree-buffer (ebrowse-choose-from-browser-buffers))))
3799 (set-buffer buffer)
3811 ;; in memory, and it wasn't modified, throw its buffer away to
3812 ;; prevent cluttering up the buffer list.
3814 (let ((buffer (get-file-buffer ebrowse-tags-loop-last-file)))
3815 (when (and buffer
3816 (not (buffer-modified-p buffer)))
3817 (kill-buffer buffer))))
3818 ;; Remember this buffer file name for later deletion, if it
3822 (setq ebrowse-tags-loop-last-file (if (get-file-buffer file) nil file))
3832 (defun ebrowse-tags-loop-continue (&optional first-time tree-buffer)
3838 (ebrowse-tags-next-file first-time tree-buffer)
3842 (message "Scanning file `%s'..." buffer-file-name)
3881 (multiple-value-bind (tree header tree-buffer)
3893 (ebrowse-tags-loop-continue 'first-time tree-buffer))))
3919 The string is printed in the electric position list buffer."
3949 (when (buffer-file-name (marker-buffer marker))
3958 :file-name (buffer-file-name (marker-buffer marker))
3997 (defvar ebrowse-electric-position-mode-map ()
3998 "Keymap used in electric position stack window.")
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)
4029 (define-key map "\e>" 'end-of-buffer)
4030 (define-key map "\e<" 'beginning-of-buffer)
4031 (define-key map "\e>" 'end-of-buffer)))
4033 (put 'ebrowse-electric-position-mode 'mode-class 'special)
4034 (put 'ebrowse-electric-position-undefined 'suppress-keymap t)
4037 (defun ebrowse-electric-position-mode ()
4038 "Mode for electric position buffers.
4039 Runs the hook `ebrowse-electric-position-mode-hook'."
4041 (use-local-map ebrowse-electric-position-mode-map)
4043 mode-line-buffer-identification "Electric Position Menu")
4048 (setq Helper-return-blurb "return to buffer editing"
4050 buffer-read-only t
4051 major-mode 'ebrowse-electric-position-mode)
4052 (run-mode-hooks 'ebrowse-electric-position-mode-hook))
4055 (defun ebrowse-draw-position-buffer ()
4056 "Display positions in buffer *Positions*."
4057 (set-buffer (get-buffer-create "*Positions*"))
4058 (setq buffer-read-only nil)
4059 (erase-buffer)
4068 (setq buffer-read-only t))
4072 (defun ebrowse-electric-position-menu ()
4073 "List positions in the position stack in an electric buffer."
4077 (let (select buffer window)
4079 (save-window-excursion (ebrowse-draw-position-buffer))
4081 buffer (window-buffer window))
4082 (shrink-window-if-larger-than-buffer window)
4085 (set-buffer buffer)
4086 (ebrowse-electric-position-mode)
4087 (setq select
4088 (catch 'ebrowse-electric-select-position
4098 (Electric-command-loop 'ebrowse-electric-select-position
4100 'ebrowse-electric-position-looper
4102 (set-buffer buffer)
4103 (bury-buffer buffer)
4105 (when select
4106 (set-buffer buffer)
4107 (ebrowse-electric-find-position select))
4108 (kill-buffer buffer)))
4111 (defun ebrowse-electric-position-looper (state condition)
4116 (not (memq (car condition) '(buffer-read-only
4117 end-of-buffer
4118 beginning-of-buffer))))
4130 (defun ebrowse-electric-position-undefined ()
4137 (defun ebrowse-electric-position-quit ()
4138 "Leave the electric position list."
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)
4157 (defun ebrowse-electric-view-position ()
4160 (ebrowse-electric-find-position (point) t))
4168 "Write current buffer as a class tree.
4178 (ebrowse-save-tree-as (or buffer-file-name ebrowse--tags-file-name)))
4187 (let ((temp-buffer (get-buffer-create "*Tree Output"))
4193 (set-buffer (setq standard-output temp-buffer))
4194 (erase-buffer)
4200 (kill-buffer temp-buffer)
4201 (set-buffer-modified-p nil)
4202 (ebrowse-update-tree-buffer-mode-line)
4207 "Write single class CLASS to current buffer."
4230 (let ((tree-file (buffer-file-name))
4231 temp-buffer-setup-hook)
4232 (with-output-to-temp-buffer "*Tree Statistics*"
4236 (set-buffer standard-output)
4237 (erase-buffer)
4251 "Print a line in the statistics buffer.
4304 (define-key ebrowse-global-map "b" 'ebrowse-pop-to-browser-buffer)
4308 (define-key ebrowse-global-map "m" 'ebrowse-tags-display-member-buffer)
4310 (define-key ebrowse-global-map "p" 'ebrowse-electric-position-menu)
4320 (define-key ebrowse-global-map " " 'ebrowse-electric-buffer-list)
4339 ;;; Electric C++ browser buffer menu
4341 ;;; Electric buffer menu customization to display only some buffers
4343 ;;; If the very first character typed in the buffer menu is a space,
4344 ;;; this will select the buffer from which the buffer menu was
4345 ;;; invoked. But this buffer is not displayed in the buffer list if
4346 ;;; it isn't a tree buffer. I therefore let the buffer menu command
4348 ;;; has no effect since we are on the first line of the buffer.
4350 (defvar electric-buffer-menu-mode-hook nil)
4353 (defun ebrowse-hack-electric-buffer-menu ()
4354 "Hack the electric buffer menu to display browser buffers."
4358 (setq buffer-read-only nil)
4362 (let ((b (Buffer-menu-buffer nil)))
4363 (if (or (ebrowse-buffer-p b)
4364 (string= (buffer-name b) "*Apropos Members*"))
4374 (shrink-window-if-larger-than-buffer (selected-window))
4375 (setq buffer-read-only t))))
4378 (defun ebrowse-select-1st-to-9nth ()
4384 (throw 'electric-buffer-menu-select (point))))
4388 "Define keys 1..9 to select the 1st to 9nth entry in the list."
4391 'ebrowse-select-1st-to-9nth)))
4394 (defun ebrowse-electric-buffer-list ()
4395 "Display an electric list of Ebrowse buffers."
4399 (add-hook 'electric-buffer-menu-mode-hook
4400 'ebrowse-hack-electric-buffer-menu)
4401 (add-hook 'electric-buffer-menu-mode-hook
4403 (call-interactively 'electric-buffer-list))
4404 (remove-hook 'electric-buffer-menu-mode-hook
4405 'ebrowse-hack-electric-buffer-menu)))
4421 (setq name (buffer-substring start (point))))
4426 (defun ebrowse-popup-menu (menu event)
4430 (select-window (posn-window (event-start event)))
4431 (let ((selection (x-popup-menu event menu)) binding)
4433 (setq binding (lookup-key (or binding menu) (vector (car selection)))
4439 (easy-menu-define
4440 ebrowse-tree-buffer-class-object-menu ebrowse-tree-mode-map
4441 "Object menu for classes in the tree buffer"
4481 (easy-menu-define
4482 ebrowse-tree-buffer-object-menu ebrowse-tree-mode-map
4483 "Object menu for tree buffers"
4500 :help "Show a buffer with class hierarchy statistics"
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)
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)
4539 (defun ebrowse-mouse-1-in-tree-buffer (event)