aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerd Moellmann2000-04-10 13:35:34 +0000
committerGerd Moellmann2000-04-10 13:35:34 +0000
commit86b5834669d941bb8a40192f74c39f75eb63423e (patch)
tree2e2ab5e34a18c3a2347a0e83c2aa1b145b07ea50
parent01fae1df89555e7cc9f68366f0c667808387f10f (diff)
downloademacs-86b5834669d941bb8a40192f74c39f75eb63423e.tar.gz
emacs-86b5834669d941bb8a40192f74c39f75eb63423e.zip
(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.
-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 e28fb67747e..478b9a07184 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."
916 ;; Read Lisp objects. Temporarily increase `gc-cons-threshold' to 916 ;; Read Lisp objects. Temporarily increase `gc-cons-threshold' to
917 ;; prevent a GC that would not free any memory. 917 ;; prevent a GC that would not free any memory.
918 (let ((gc-cons-threshold 2000000)) 918 (let ((gc-cons-threshold 2000000))
919 (while (not (eobp)) 919 (while (not (progn (skip-chars-forward " \t\n\r") (eobp)))
920 (let* ((root (read (current-buffer))) 920 (let* ((root (read (current-buffer)))
921 (old-root (ebrowse-class-in-tree root tree))) 921 (old-root (ebrowse-class-in-tree root tree)))
922 (ebrowse-show-progress "Reading data" (null tree)) 922 (ebrowse-show-progress "Reading data" (null tree))
@@ -927,89 +927,39 @@ and TREE is a list of `ebrowse-ts' structures forming the class tree."
927 (list header tree))) 927 (list header tree)))
928 928
929 929
930;;;###autoload
931(defun ebrowse-load (file &optional switch)
932 "Load an Ebrowse file FILE into memory and make a tree buffer.
933Optional SWITCH non-nil means switch to the tree buffer afterwards.
934This function is normally called from a `find-file-hook'.
935Value is the tree buffer created."
936 (let (tree
937 header
938 (buffer (get-file-buffer file))
939 tree-buffer)
940 (if buffer
941 (multiple-value-setq (header tree)
942 (ebrowse-read))
943 (save-excursion
944 ;; Since find-file hooks may be involved, we must visit the
945 ;; file in a way that these hooks are not called.
946 (set-buffer (create-file-buffer file))
947 (erase-buffer)
948 (insert-file file)
949 (set-buffer-modified-p nil)
950 (unwind-protect
951 (multiple-value-setq (header tree)
952 (ebrowse-read))
953 (kill-buffer (current-buffer)))))
954 (when tree
955 (message "Sorting. Please be patient...")
956 (setf tree (ebrowse-sort-tree-list tree))
957 ;; Create tree buffer
958 (setf tree-buffer
959 (ebrowse-create-tree-buffer tree file header
960 (ebrowse-build-tree-obarray tree)
961 switch buffer))
962 (message nil)
963 tree-buffer)))
964
965
966(defun ebrowse-revert-tree-buffer-from-file (ignore-auto-save noconfirm) 930(defun ebrowse-revert-tree-buffer-from-file (ignore-auto-save noconfirm)
967 "Function installed as `revert-buffer-function' in tree buffers. 931 "Function installed as `revert-buffer-function' in tree buffers.
968See that variable's documentation for the meaning of IGNORE-AUTO-SAVE and 932See that variable's documentation for the meaning of IGNORE-AUTO-SAVE and
969NOCONFIRM." 933NOCONFIRM."
970 (interactive) 934 (when (or noconfirm (yes-or-no-p "Revert tree from disk? "))
971 (when (or noconfirm 935 (loop for member-buffer in (ebrowse-same-tree-member-buffer-list)
972 (yes-or-no-p "Revert tree from disk? ")) 936 do (kill-buffer member-buffer))
973 (let ((ebrowse-file (or buffer-file-name ebrowse--tags-file-name))) 937 (erase-buffer)
974 (loop for member-buffer in (ebrowse-same-tree-member-buffer-list) 938 (insert-file (or buffer-file-name ebrowse--tags-file-name))
975 do (kill-buffer member-buffer)) 939 (ebrowse-tree-mode)
976 (kill-buffer (current-buffer)) 940 (current-buffer)))
977 (switch-to-buffer (ebrowse-load ebrowse-file)))))
978
979 941
980(defun ebrowse-create-tree-buffer (tree tags-file header obarray pop 942
981 &optional find-file-buffer) 943(defun ebrowse-create-tree-buffer (tree tags-file header obarray pop)
982 "Create a new tree buffer for tree TREE. 944 "Create a new tree buffer for tree TREE.
983The tree was loaded from file TAGS-FILE. 945The tree was loaded from file TAGS-FILE.
984HEADER is the header structure of the file. 946HEADER is the header structure of the file.
985OBARRAY is an obarray with a symbol for each class in the tree. 947OBARRAY is an obarray with a symbol for each class in the tree.
986POP non-nil means popup the buffer up at the end. 948POP non-nil means popup the buffer up at the end.
987FIND-FILE-BUFFER, if non-nil, is the buffer from which the Lisp data
988was read.
989Return the buffer created." 949Return the buffer created."
990 (let (name) 950 (let ((name ebrowse-tree-buffer-name))
991 (cond (find-file-buffer 951 (set-buffer (get-buffer-create name))
992 (set-buffer find-file-buffer)
993 (erase-buffer)
994 (setq name (ebrowse-frozen-tree-buffer-name tags-file))
995 (ebrowse-rename-buffer name))
996 (t
997 (setq name ebrowse-tree-buffer-name)
998 (set-buffer (get-buffer-create name))))
999 ;; Switch to tree mode and initialize buffer local variables.
1000 (ebrowse-tree-mode) 952 (ebrowse-tree-mode)
1001 (setf ebrowse--tree tree 953 (setq ebrowse--tree tree
1002 ebrowse--tags-file-name tags-file 954 ebrowse--tags-file-name tags-file
1003 ebrowse--tree-obarray obarray 955 ebrowse--tree-obarray obarray
1004 ebrowse--header header 956 ebrowse--header header
1005 ebrowse--frozen-flag (not (null find-file-buffer))) 957 ebrowse--frozen-flag nil)
1006 ;; Switch or pop to the tree buffer; display the tree and return the
1007 ;; buffer.
1008 (case pop
1009 (switch (switch-to-buffer name))
1010 (pop (pop-to-buffer name)))
1011 (ebrowse-redraw-tree) 958 (ebrowse-redraw-tree)
1012 (set-buffer-modified-p nil) 959 (set-buffer-modified-p nil)
960 (case pop
961 (switch (switch-to-buffer name))
962 (pop (pop-to-buffer name)))
1013 (current-buffer))) 963 (current-buffer)))
1014 964
1015 965
@@ -1177,22 +1127,35 @@ E.g.\\[save-buffer] writes the tree to the file it was loaded from.
1177 1127
1178Tree mode key bindings: 1128Tree mode key bindings:
1179\\{ebrowse-tree-mode-map}" 1129\\{ebrowse-tree-mode-map}"
1180 (kill-all-local-variables) 1130 (interactive)
1181 (mapcar 'make-local-variable
1182 '(ebrowse--tags-file-name
1183 ebrowse--indentation
1184 ebrowse--tree
1185 ebrowse--header
1186 ebrowse--show-file-names-flag
1187 ebrowse--frozen-flag
1188 ebrowse--tree-obarray
1189 ebrowse--mode-strings
1190 revert-buffer-function))
1191 (use-local-map ebrowse-tree-mode-map)
1192 (let* ((props (text-properties-at 1131 (let* ((props (text-properties-at
1193 0 1132 0
1194 (car (default-value 'mode-line-buffer-identification)))) 1133 (car (default-value 'mode-line-buffer-identification))))
1195 (ident (apply #'propertize "C++ Tree" props))) 1134 (ident (apply #'propertize "C++ Tree" props))
1135 header tree buffer-read-only)
1136
1137 (kill-all-local-variables)
1138 (use-local-map ebrowse-tree-mode-map)
1139
1140 (unless (zerop (buffer-size))
1141 (goto-char (point-min))
1142 (multiple-value-setq (header tree) (ebrowse-read))
1143 (message "Sorting. Please be patient...")
1144 (setq tree (ebrowse-sort-tree-list tree))
1145 (erase-buffer)
1146 (message nil))
1147
1148 (mapcar 'make-local-variable
1149 '(ebrowse--tags-file-name
1150 ebrowse--indentation
1151 ebrowse--tree
1152 ebrowse--header
1153 ebrowse--show-file-names-flag
1154 ebrowse--frozen-flag
1155 ebrowse--tree-obarray
1156 ebrowse--mode-strings
1157 revert-buffer-function))
1158
1196 (setf ebrowse--show-file-names-flag nil 1159 (setf ebrowse--show-file-names-flag nil
1197 ebrowse--tree-obarray (make-vector 127 0) 1160 ebrowse--tree-obarray (make-vector 127 0)
1198 ebrowse--frozen-flag nil 1161 ebrowse--frozen-flag nil
@@ -1202,10 +1165,20 @@ Tree mode key bindings:
1202 buffer-read-only t 1165 buffer-read-only t
1203 selective-display t 1166 selective-display t
1204 selective-display-ellipses t 1167 selective-display-ellipses t
1205 revert-buffer-function 'ebrowse-revert-tree-buffer-from-file)) 1168 revert-buffer-function 'ebrowse-revert-tree-buffer-from-file
1206 (add-hook 'local-write-file-hooks 'ebrowse-write-file-hook-fn) 1169 ebrowse--header header
1207 (modify-syntax-entry ?_ (char-to-string (char-syntax ?a))) 1170 ebrowse--tree tree
1208 (run-hooks 'ebrowse-tree-mode-hook)) 1171 ebrowse--tags-file-name (buffer-file-name)
1172 ebrowse--tree-obarray (and tree (ebrowse-build-tree-obarray tree))
1173 ebrowse--frozen-flag nil)
1174
1175 (add-hook 'local-write-file-hooks 'ebrowse-write-file-hook-fn)
1176 (modify-syntax-entry ?_ (char-to-string (char-syntax ?a)))
1177 (when tree
1178 (ebrowse-redraw-tree)
1179 (set-buffer-modified-p nil))
1180 (run-hooks 'ebrowse-tree-mode-hook)))
1181
1209 1182
1210 1183
1211(defun ebrowse-update-tree-buffer-mode-line () 1184(defun ebrowse-update-tree-buffer-mode-line ()