aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/progmodes/ebrowse.el
diff options
context:
space:
mode:
authorGerd Moellmann <[email protected]>2000-04-10 13:35:34 +0000
committerGerd Moellmann <[email protected]>2000-04-10 13:35:34 +0000
commit86b5834669d941bb8a40192f74c39f75eb63423e (patch)
tree2e2ab5e34a18c3a2347a0e83c2aa1b145b07ea50 /lisp/progmodes/ebrowse.el
parent01fae1df89555e7cc9f68366f0c667808387f10f (diff)
(ebrowse-read): Skip forward over white
space before testing for end of buffer. (ebrowse-load): Removed. (ebrowse-revert-tree-buffer-from-file): Rewritten. (ebrowse-create-tree-buffer): Rewritten. (ebrowse-tree-mode): Read tree from buffer.
Diffstat (limited to 'lisp/progmodes/ebrowse.el')
-rw-r--r--lisp/progmodes/ebrowse.el145
1 files changed, 59 insertions, 86 deletions
diff --git a/lisp/progmodes/ebrowse.el b/lisp/progmodes/ebrowse.el
index e28fb67747..478b9a0718 100644
--- a/lisp/progmodes/ebrowse.el
+++ b/lisp/progmodes/ebrowse.el
@@ -916,7 +916,7 @@ and TREE is a list of `ebrowse-ts' structures forming the class tree."
;; Read Lisp objects. Temporarily increase `gc-cons-threshold' to
;; prevent a GC that would not free any memory.
(let ((gc-cons-threshold 2000000))
- (while (not (eobp))
+ (while (not (progn (skip-chars-forward " \t\n\r") (eobp)))
(let* ((root (read (current-buffer)))
(old-root (ebrowse-class-in-tree root tree)))
(ebrowse-show-progress "Reading data" (null tree))
@@ -927,89 +927,39 @@ and TREE is a list of `ebrowse-ts' structures forming the class tree."
(list header tree)))
-;;;###autoload
-(defun ebrowse-load (file &optional switch)
- "Load an Ebrowse file FILE into memory and make a tree buffer.
-Optional SWITCH non-nil means switch to the tree buffer afterwards.
-This function is normally called from a `find-file-hook'.
-Value is the tree buffer created."
- (let (tree
- header
- (buffer (get-file-buffer file))
- tree-buffer)
- (if buffer
- (multiple-value-setq (header tree)
- (ebrowse-read))
- (save-excursion
- ;; Since find-file hooks may be involved, we must visit the
- ;; file in a way that these hooks are not called.
- (set-buffer (create-file-buffer file))
- (erase-buffer)
- (insert-file file)
- (set-buffer-modified-p nil)
- (unwind-protect
- (multiple-value-setq (header tree)
- (ebrowse-read))
- (kill-buffer (current-buffer)))))
- (when tree
- (message "Sorting. Please be patient...")
- (setf tree (ebrowse-sort-tree-list tree))
- ;; Create tree buffer
- (setf tree-buffer
- (ebrowse-create-tree-buffer tree file header
- (ebrowse-build-tree-obarray tree)
- switch buffer))
- (message nil)
- tree-buffer)))
-
-
(defun ebrowse-revert-tree-buffer-from-file (ignore-auto-save noconfirm)
"Function installed as `revert-buffer-function' in tree buffers.
See that variable's documentation for the meaning of IGNORE-AUTO-SAVE and
NOCONFIRM."
- (interactive)
- (when (or noconfirm
- (yes-or-no-p "Revert tree from disk? "))
- (let ((ebrowse-file (or buffer-file-name ebrowse--tags-file-name)))
- (loop for member-buffer in (ebrowse-same-tree-member-buffer-list)
- do (kill-buffer member-buffer))
- (kill-buffer (current-buffer))
- (switch-to-buffer (ebrowse-load ebrowse-file)))))
-
+ (when (or noconfirm (yes-or-no-p "Revert tree from disk? "))
+ (loop for member-buffer in (ebrowse-same-tree-member-buffer-list)
+ do (kill-buffer member-buffer))
+ (erase-buffer)
+ (insert-file (or buffer-file-name ebrowse--tags-file-name))
+ (ebrowse-tree-mode)
+ (current-buffer)))
-(defun ebrowse-create-tree-buffer (tree tags-file header obarray pop
- &optional find-file-buffer)
+
+(defun ebrowse-create-tree-buffer (tree tags-file header obarray pop)
"Create a new tree buffer for tree TREE.
The tree was loaded from file TAGS-FILE.
HEADER is the header structure of the file.
OBARRAY is an obarray with a symbol for each class in the tree.
POP non-nil means popup the buffer up at the end.
-FIND-FILE-BUFFER, if non-nil, is the buffer from which the Lisp data
-was read.
Return the buffer created."
- (let (name)
- (cond (find-file-buffer
- (set-buffer find-file-buffer)
- (erase-buffer)
- (setq name (ebrowse-frozen-tree-buffer-name tags-file))
- (ebrowse-rename-buffer name))
- (t
- (setq name ebrowse-tree-buffer-name)
- (set-buffer (get-buffer-create name))))
- ;; Switch to tree mode and initialize buffer local variables.
+ (let ((name ebrowse-tree-buffer-name))
+ (set-buffer (get-buffer-create name))
(ebrowse-tree-mode)
- (setf ebrowse--tree tree
+ (setq ebrowse--tree tree
ebrowse--tags-file-name tags-file
- ebrowse--tree-obarray obarray
- ebrowse--header header
- ebrowse--frozen-flag (not (null find-file-buffer)))
- ;; Switch or pop to the tree buffer; display the tree and return the
- ;; buffer.
- (case pop
- (switch (switch-to-buffer name))
- (pop (pop-to-buffer name)))
+ ebrowse--tree-obarray obarray
+ ebrowse--header header
+ ebrowse--frozen-flag nil)
(ebrowse-redraw-tree)
(set-buffer-modified-p nil)
+ (case pop
+ (switch (switch-to-buffer name))
+ (pop (pop-to-buffer name)))
(current-buffer)))
@@ -1177,22 +1127,35 @@ E.g.\\[save-buffer] writes the tree to the file it was loaded from.
Tree mode key bindings:
\\{ebrowse-tree-mode-map}"
- (kill-all-local-variables)
- (mapcar 'make-local-variable
- '(ebrowse--tags-file-name
- ebrowse--indentation
- ebrowse--tree
- ebrowse--header
- ebrowse--show-file-names-flag
- ebrowse--frozen-flag
- ebrowse--tree-obarray
- ebrowse--mode-strings
- revert-buffer-function))
- (use-local-map ebrowse-tree-mode-map)
+ (interactive)
(let* ((props (text-properties-at
0
(car (default-value 'mode-line-buffer-identification))))
- (ident (apply #'propertize "C++ Tree" props)))
+ (ident (apply #'propertize "C++ Tree" props))
+ header tree buffer-read-only)
+
+ (kill-all-local-variables)
+ (use-local-map ebrowse-tree-mode-map)
+
+ (unless (zerop (buffer-size))
+ (goto-char (point-min))
+ (multiple-value-setq (header tree) (ebrowse-read))
+ (message "Sorting. Please be patient...")
+ (setq tree (ebrowse-sort-tree-list tree))
+ (erase-buffer)
+ (message nil))
+
+ (mapcar 'make-local-variable
+ '(ebrowse--tags-file-name
+ ebrowse--indentation
+ ebrowse--tree
+ ebrowse--header
+ ebrowse--show-file-names-flag
+ ebrowse--frozen-flag
+ ebrowse--tree-obarray
+ ebrowse--mode-strings
+ revert-buffer-function))
+
(setf ebrowse--show-file-names-flag nil
ebrowse--tree-obarray (make-vector 127 0)
ebrowse--frozen-flag nil
@@ -1202,10 +1165,20 @@ Tree mode key bindings:
buffer-read-only t
selective-display t
selective-display-ellipses t
- revert-buffer-function 'ebrowse-revert-tree-buffer-from-file))
- (add-hook 'local-write-file-hooks 'ebrowse-write-file-hook-fn)
- (modify-syntax-entry ?_ (char-to-string (char-syntax ?a)))
- (run-hooks 'ebrowse-tree-mode-hook))
+ revert-buffer-function 'ebrowse-revert-tree-buffer-from-file
+ ebrowse--header header
+ ebrowse--tree tree
+ ebrowse--tags-file-name (buffer-file-name)
+ ebrowse--tree-obarray (and tree (ebrowse-build-tree-obarray tree))
+ ebrowse--frozen-flag nil)
+
+ (add-hook 'local-write-file-hooks 'ebrowse-write-file-hook-fn)
+ (modify-syntax-entry ?_ (char-to-string (char-syntax ?a)))
+ (when tree
+ (ebrowse-redraw-tree)
+ (set-buffer-modified-p nil))
+ (run-hooks 'ebrowse-tree-mode-hook)))
+
(defun ebrowse-update-tree-buffer-mode-line ()