Mercurial > emacs
comparison lisp/speedbar.el @ 56647:d21a8e697065
(speedbar-scan-subdirs): New option.
(speedbar-file-lists): Don't ignore file-name case on Unix and use dolist.
(speedbar-insert-files-at-point): Take an extra argument and use it to optionally find out if a subdir is empty. Also unreadable files don't get expand buttons.
(speedbar-directory-plus): New image (bitmap already existed unused).
(speedbar-expand-image-button-alist): Use it.
author | Daniel Pfeiffer <occitan@esperanto.org> |
---|---|
date | Wed, 11 Aug 2004 19:55:47 +0000 |
parents | 25ff62ff164d |
children | 5ea587a67aae |
comparison
equal
deleted
inserted
replaced
56646:b7446b6f097d | 56647:d21a8e697065 |
---|---|
687 :group 'speedbar | 687 :group 'speedbar |
688 :version "21.1" | 688 :version "21.1" |
689 :type '(repeat (regexp :tag "Extension Regexp")) | 689 :type '(repeat (regexp :tag "Extension Regexp")) |
690 :set (lambda (sym val) | 690 :set (lambda (sym val) |
691 (setq speedbar-supported-extension-expressions val | 691 (setq speedbar-supported-extension-expressions val |
692 speedbar-file-regexp (speedbar-extension-list-to-regex val))) | 692 speedbar-file-regexp (speedbar-extension-list-to-regex val)))) |
693 ) | 693 |
694 (defcustom speedbar-scan-subdirs nil | |
695 "*Non-nil means speedbar will check if subdirs are empty. | |
696 That way you don't have to click on them to find out. But this | |
697 incurs extra I/O, hence it slows down directory display | |
698 proportionally to the number of subdirs." | |
699 :group 'speedbar | |
700 :type 'boolean | |
701 :version 21.4) | |
694 | 702 |
695 (defvar speedbar-file-regexp | 703 (defvar speedbar-file-regexp |
696 (speedbar-extension-list-to-regex speedbar-supported-extension-expressions) | 704 (speedbar-extension-list-to-regex speedbar-supported-extension-expressions) |
697 "Regular expression matching files we know how to expand. | 705 "Regular expression matching files we know how to expand. |
698 Created from `speedbar-supported-extension-expression' with the | 706 Created from `speedbar-supported-extension-expression' with the |
2183 (if speedbar-power-click | 2191 (if speedbar-power-click |
2184 (adelete 'speedbar-directory-contents-alist directory)) | 2192 (adelete 'speedbar-directory-contents-alist directory)) |
2185 ;; find the directory, either in the cache, or build it. | 2193 ;; find the directory, either in the cache, or build it. |
2186 (or (cdr-safe (assoc directory speedbar-directory-contents-alist)) | 2194 (or (cdr-safe (assoc directory speedbar-directory-contents-alist)) |
2187 (let ((default-directory directory) | 2195 (let ((default-directory directory) |
2188 (dir (directory-files directory nil)) | 2196 (case-fold-search read-file-name-completion-ignore-case) |
2189 (dirs nil) | 2197 dirs files) |
2190 (files nil)) | 2198 (dolist (file (directory-files directory nil)) |
2191 (while dir | 2199 (or (string-match speedbar-file-unshown-regexp file) |
2192 (if (not | 2200 (string-match speedbar-directory-unshown-regexp file) |
2193 (or (string-match speedbar-file-unshown-regexp (car dir)) | 2201 (if (file-directory-p file) |
2194 (string-match speedbar-directory-unshown-regexp (car dir)))) | 2202 (setq dirs (cons file dirs)) |
2195 (if (file-directory-p (car dir)) | 2203 (setq files (cons file files))))) |
2196 (setq dirs (cons (car dir) dirs)) | 2204 (let ((nl `(,(nreverse dirs) ,(nreverse files)))) |
2197 (setq files (cons (car dir) files)))) | |
2198 (setq dir (cdr dir))) | |
2199 (let ((nl (cons (nreverse dirs) (list (nreverse files))))) | |
2200 (aput 'speedbar-directory-contents-alist directory nl) | 2205 (aput 'speedbar-directory-contents-alist directory nl) |
2201 nl)) | 2206 nl)))) |
2202 )) | |
2203 | 2207 |
2204 (defun speedbar-directory-buttons (directory index) | 2208 (defun speedbar-directory-buttons (directory index) |
2205 "Insert a single button group at point for DIRECTORY. | 2209 "Insert a single button group at point for DIRECTORY. |
2206 Each directory path part is a different button. If part of the path | 2210 Each directory path part is a different button. If part of the path |
2207 matches the user directory ~, then it is replaced with a ~. | 2211 matches the user directory ~, then it is replaced with a ~. |
2341 (speedbar-insert-image-button-maybe (- (point) 2) 3))))) | 2345 (speedbar-insert-image-button-maybe (- (point) 2) 3))))) |
2342 | 2346 |
2343 | 2347 |
2344 ;;; Build button lists | 2348 ;;; Build button lists |
2345 ;; | 2349 ;; |
2346 (defun speedbar-insert-files-at-point (files level) | 2350 (defun speedbar-insert-files-at-point (files level directory) |
2347 "Insert list of FILES starting at point, and indenting all files to LEVEL. | 2351 "Insert list of FILES starting at point, and indenting all files to LEVEL. |
2348 Tag expandable items with a +, otherwise a ?. Don't highlight ? as we | 2352 Tag expandable items with a +, otherwise a ?. Don't highlight ? as we |
2349 don't know how to manage them. The input parameter FILES is a cons | 2353 don't know how to manage them. The input parameter FILES is a cons |
2350 cell of the form ( 'DIRLIST . 'FILELIST )." | 2354 cell of the form ( 'DIRLIST . 'FILELIST )." |
2351 ;; Start inserting all the directories | 2355 ;; Start inserting all the directories |
2352 (let ((dirs (car files))) | 2356 (dolist (dir (car files)) |
2353 (while dirs | 2357 (if (if speedbar-scan-subdirs |
2354 (speedbar-make-tag-line 'angle ?+ 'speedbar-dired (car dirs) | 2358 (condition-case nil |
2355 (car dirs) 'speedbar-dir-follow nil | 2359 (let ((l (speedbar-file-lists (concat directory dir)))) |
2356 'speedbar-directory-face level) | 2360 (or (car l) (cadr l))) |
2357 (setq dirs (cdr dirs)))) | 2361 (file-error)) |
2358 (let ((lst (car (cdr files))) | 2362 (file-readable-p (concat directory dir))) |
2359 (case-fold-search t)) | 2363 (speedbar-make-tag-line 'angle ?+ 'speedbar-dired dir |
2360 (while lst | 2364 dir 'speedbar-dir-follow nil |
2361 (let* ((known (string-match speedbar-file-regexp (car lst))) | 2365 'speedbar-directory-face level) |
2366 (speedbar-make-tag-line 'angle ? nil dir | |
2367 dir 'speedbar-dir-follow nil | |
2368 'speedbar-directory-face level))) | |
2369 (let ((case-fold-search read-file-name-completion-ignore-case)) | |
2370 (dolist (file (cadr files)) | |
2371 (let* ((known (and (file-readable-p (concat directory file)) | |
2372 (string-match speedbar-file-regexp file))) | |
2362 (expchar (if known ?+ ??)) | 2373 (expchar (if known ?+ ??)) |
2363 (fn (if known 'speedbar-tag-file nil))) | 2374 (fn (if known 'speedbar-tag-file nil))) |
2364 (if (or speedbar-show-unknown-files (/= expchar ??)) | 2375 (if (or speedbar-show-unknown-files (/= expchar ??)) |
2365 (speedbar-make-tag-line 'bracket expchar fn (car lst) | 2376 (speedbar-make-tag-line 'bracket expchar fn file |
2366 (car lst) 'speedbar-find-file nil | 2377 file 'speedbar-find-file nil |
2367 'speedbar-file-face level))) | 2378 'speedbar-file-face level)))))) |
2368 (setq lst (cdr lst))))) | |
2369 | 2379 |
2370 (defun speedbar-default-directory-list (directory index) | 2380 (defun speedbar-default-directory-list (directory index) |
2371 "Insert files for DIRECTORY with level INDEX at point." | 2381 "Insert files for DIRECTORY with level INDEX at point." |
2372 (speedbar-insert-files-at-point | 2382 (speedbar-insert-files-at-point |
2373 (speedbar-file-lists directory) index) | 2383 (speedbar-file-lists directory) index directory) |
2374 (speedbar-reset-scanners) | 2384 (speedbar-reset-scanners) |
2375 (if (= index 0) | 2385 (if (= index 0) |
2376 ;; If the shown files variable has extra directories, then | 2386 ;; If the shown files variable has extra directories, then |
2377 ;; it is our responsibility to redraw them all | 2387 ;; it is our responsibility to redraw them all |
2378 ;; Luckilly, the nature of inserting items into this list means | 2388 ;; Luckilly, the nature of inserting items into this list means |
2916 (select-frame lastf) | 2926 (select-frame lastf) |
2917 rf))) | 2927 rf))) |
2918 (newcf (if newcfd newcfd)) | 2928 (newcf (if newcfd newcfd)) |
2919 (lastb (current-buffer)) | 2929 (lastb (current-buffer)) |
2920 (sucf-recursive (boundp 'sucf-recursive)) | 2930 (sucf-recursive (boundp 'sucf-recursive)) |
2921 (case-fold-search t)) | 2931 (case-fold-search read-file-name-completion-ignore-case)) |
2922 (if (and newcf | 2932 (if (and newcf |
2923 ;; check here, that way we won't refresh to newcf until | 2933 ;; check here, that way we won't refresh to newcf until |
2924 ;; its been written, thus saving ourselves some time | 2934 ;; its been written, thus saving ourselves some time |
2925 (file-exists-p newcf) | 2935 (file-exists-p newcf) |
2926 (not (string= newcf speedbar-last-selected-file))) | 2936 (not (string= newcf speedbar-last-selected-file))) |
4233 (make-glyph | 4243 (make-glyph |
4234 (make-image-specifier | 4244 (make-image-specifier |
4235 (speedbar-convert-emacs21-imagespec-to-xemacs (quote ,imagespec))) | 4245 (speedbar-convert-emacs21-imagespec-to-xemacs (quote ,imagespec))) |
4236 'buffer) | 4246 'buffer) |
4237 (error nil)) | 4247 (error nil)) |
4238 ,docstring)) | 4248 ,docstring))))) |
4239 | |
4240 ))) | |
4241 | 4249 |
4242 (defimage-speedbar speedbar-directory-plus | 4250 (defimage-speedbar speedbar-directory-plus |
4243 ((:type xpm :file "sb-dir-plus.xpm" :ascent center)) | 4251 ((:type xpm :file "sb-dir-plus.xpm" :ascent center)) |
4244 "Image used for closed directories with stuff in them.") | 4252 "Image used for closed directories with stuff in them.") |
4245 | 4253 |
4246 (defimage-speedbar speedbar-directory-minus | 4254 (defimage-speedbar speedbar-directory-minus |
4247 ((:type xpm :file "sb-dir-minus.xpm" :ascent center)) | 4255 ((:type xpm :file "sb-dir-minus.xpm" :ascent center)) |
4248 "Image used for open directories with stuff in them.") | 4256 "Image used for open directories with stuff in them.") |
4249 | 4257 |
4258 (defimage-speedbar speedbar-directory | |
4259 ((:type xpm :file "sb-dir.xpm" :ascent center)) | |
4260 "Image used for empty or unreadable directories.") | |
4261 | |
4250 (defimage-speedbar speedbar-page-plus | 4262 (defimage-speedbar speedbar-page-plus |
4251 ((:type xpm :file "sb-pg-plus.xpm" :ascent center)) | 4263 ((:type xpm :file "sb-pg-plus.xpm" :ascent center)) |
4252 "Image used for closed files with stuff in them.") | 4264 "Image used for closed files with stuff in them.") |
4253 | 4265 |
4254 (defimage-speedbar speedbar-page-minus | 4266 (defimage-speedbar speedbar-page-minus |
4288 "Image used for open tag groups.") | 4300 "Image used for open tag groups.") |
4289 | 4301 |
4290 (defvar speedbar-expand-image-button-alist | 4302 (defvar speedbar-expand-image-button-alist |
4291 '(("<+>" . speedbar-directory-plus) | 4303 '(("<+>" . speedbar-directory-plus) |
4292 ("<->" . speedbar-directory-minus) | 4304 ("<->" . speedbar-directory-minus) |
4305 ("< >" . speedbar-directory) | |
4293 ("[+]" . speedbar-page-plus) | 4306 ("[+]" . speedbar-page-plus) |
4294 ("[-]" . speedbar-page-minus) | 4307 ("[-]" . speedbar-page-minus) |
4295 ("[?]" . speedbar-page) | 4308 ("[?]" . speedbar-page) |
4296 ("{+}" . speedbar-tag-plus) | 4309 ("{+}" . speedbar-tag-plus) |
4297 ("{-}" . speedbar-tag-minus) | 4310 ("{-}" . speedbar-tag-minus) |