comparison lisp/progmodes/ebrowse.el @ 28541:f0c234df148e

(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.
author Gerd Moellmann <gerd@gnu.org>
date Mon, 10 Apr 2000 13:35:34 +0000
parents e6096d02680f
children 19c5020c0db3
comparison
equal deleted inserted replaced
28540:8ef8c0367506 28541:f0c234df148e
914 (error "File has wrong version `%s' (`%s' expected)" 914 (error "File has wrong version `%s' (`%s' expected)"
915 (ebrowse-hs-version header) ebrowse-version-string)) 915 (ebrowse-hs-version header) ebrowse-version-string))
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))
923 (if old-root 923 (if old-root
924 (setf (car old-root) root) 924 (setf (car old-root) root)
925 (push root tree))))) 925 (push root tree)))))
926 (garbage-collect) 926 (garbage-collect)
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.
933 Optional SWITCH non-nil means switch to the tree buffer afterwards.
934 This function is normally called from a `find-file-hook'.
935 Value 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.
968 See that variable's documentation for the meaning of IGNORE-AUTO-SAVE and 932 See that variable's documentation for the meaning of IGNORE-AUTO-SAVE and
969 NOCONFIRM." 933 NOCONFIRM."
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))))) 941
978 942
979 943 (defun ebrowse-create-tree-buffer (tree tags-file header obarray pop)
980 (defun ebrowse-create-tree-buffer (tree tags-file header obarray pop
981 &optional find-file-buffer)
982 "Create a new tree buffer for tree TREE. 944 "Create a new tree buffer for tree TREE.
983 The tree was loaded from file TAGS-FILE. 945 The tree was loaded from file TAGS-FILE.
984 HEADER is the header structure of the file. 946 HEADER is the header structure of the file.
985 OBARRAY is an obarray with a symbol for each class in the tree. 947 OBARRAY is an obarray with a symbol for each class in the tree.
986 POP non-nil means popup the buffer up at the end. 948 POP non-nil means popup the buffer up at the end.
987 FIND-FILE-BUFFER, if non-nil, is the buffer from which the Lisp data
988 was read.
989 Return the buffer created." 949 Return 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
1016 966
1017 ;;; Operations for member obarrays 967 ;;; Operations for member obarrays
1175 File operations in the tree buffer work on class tree data structures. 1125 File operations in the tree buffer work on class tree data structures.
1176 E.g.\\[save-buffer] writes the tree to the file it was loaded from. 1126 E.g.\\[save-buffer] writes the tree to the file it was loaded from.
1177 1127
1178 Tree mode key bindings: 1128 Tree 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
1199 major-mode 'ebrowse-tree-mode 1162 major-mode 'ebrowse-tree-mode
1200 mode-name "Ebrowse-Tree" 1163 mode-name "Ebrowse-Tree"
1201 mode-line-buffer-identification (list ident) 1164 mode-line-buffer-identification (list ident)
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 ()
1212 "Update the tree buffer mode line." 1185 "Update the tree buffer mode line."
1213 (setf ebrowse--mode-strings 1186 (setf ebrowse--mode-strings