Mercurial > emacs
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 |