;;; speedbar --- quick access to files and tags in a frame
-;; Copyright (C) 1996-2012 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2014 Free Software Foundation, Inc.
;; Author: Eric M. Ludlam <zappo@gnu.org>
;; Keywords: file, tags, tools
;; `speedbar-insert-generic-list'. If you use
;; `speedbar-insert-generic-list', also read the doc for
;; `speedbar-tag-hierarchy-method' in case you wish to override it.
-;; The macro `speedbar-with-attached-buffer' brings you back to the
+;; The macro `dframe-with-attached-buffer' brings you back to the
;; buffer speedbar is displaying for.
;;
;; For those functions that make buttons, the "function" should be a
:group 'etags
:group 'tools
:group 'convenience
+ :link '(custom-manual "(speedbar) Top")
+ :link '(info-link "(speedbar) Customizing")
; :version "20.3"
)
(defgroup speedbar-faces nil
"Faces used in speedbar."
:prefix "speedbar-"
+ :link '(info-link "(speedbar) Frames and Faces")
:group 'speedbar
:group 'faces)
(defgroup speedbar-vc nil
"Version control display in speedbar."
+ :link '(info-link "(speedbar) Version Control")
:prefix "speedbar-"
:group 'speedbar)
(defcustom speedbar-query-confirmation-method 'all
"Query control for file operations.
-The 'always flag means to always query before file operations.
+The 'all flag means to always query before file operations.
The 'none-but-delete flag means to not query before any file
operations, except before a file deletion."
:group 'speedbar
;; with the selected frame.
(list 'parent (selected-frame)))
speedbar-frame-parameters)
- speedbar-before-delete-hook
- speedbar-before-popup-hook
- speedbar-after-create-hook)
+ 'speedbar-before-delete-hook
+ 'speedbar-before-popup-hook
+ 'speedbar-after-create-hook)
;; Start up the timer
(if (not speedbar-frame)
(speedbar-set-timer nil)
dframe-mouse-position-function #'speedbar-position-cursor-on-line))
speedbar-buffer)
-(defmacro speedbar-message (fmt &rest args)
- "Like `message', but for use in the speedbar frame.
-Argument FMT is the format string, and ARGS are the arguments for message."
- `(dframe-message ,fmt ,@args))
+(define-obsolete-function-alias 'speedbar-message 'dframe-message "24.4")
(defsubst speedbar-y-or-n-p (prompt &optional deleting)
"Like `y-or-n-p', but for use in the speedbar frame.
(dframe-select-attached-frame (speedbar-current-frame)))
;; Backwards compatibility
-(defalias 'speedbar-with-attached-buffer 'dframe-with-attached-buffer)
-(defalias 'speedbar-maybee-jump-to-attached-frame 'dframe-maybee-jump-to-attached-frame)
+(define-obsolete-function-alias 'speedbar-with-attached-buffer
+ 'dframe-with-attached-buffer "24.4") ; macro
+(define-obsolete-function-alias 'speedbar-maybee-jump-to-attached-frame
+ 'dframe-maybee-jump-to-attached-frame "24.4")
(defun speedbar-set-mode-line-format ()
"Set the format of the mode line based on the current speedbar environment.
(if (eq major-mode 'speedbar-mode)
;; XEmacs may let us get in here in other mode buffers.
(speedbar-item-info)))
- (error (speedbar-message nil)))))))
+ (error (dframe-message nil)))))))
(defun speedbar-show-info-under-mouse ()
"Call the info function for the line under the mouse."
(delq (assoc d speedbar-directory-contents-alist)
speedbar-directory-contents-alist)))
(if (<= 1 speedbar-verbosity-level)
- (speedbar-message "Refreshing speedbar..."))
+ (dframe-message "Refreshing speedbar..."))
(speedbar-update-contents)
(speedbar-stealthy-updates)
;; Reset the timer in case it got really hosed for some reason...
(speedbar-set-timer dframe-update-speed)
(if (<= 1 speedbar-verbosity-level)
- (speedbar-message "Refreshing speedbar...done"))))
+ (dframe-message "Refreshing speedbar...done"))))
(defun speedbar-item-load ()
"Load the item under the cursor or mouse if it is a Lisp file."
;; Skip items in "folder" type text characters.
(if (looking-at "\\s-*[[<({].[]>)}] ") (goto-char (match-end 0)))
;; Get the text
- (speedbar-message "Text: %s" (buffer-substring-no-properties
+ (dframe-message "Text: %s" (buffer-substring-no-properties
(point) (line-end-position)))))
(defun speedbar-item-info ()
instead of reading it from the speedbar buffer."
(let* ((item (or filename (speedbar-line-file)))
(attr (if item (file-attributes item) nil)))
- (if (and item attr) (speedbar-message "%s %-6d %s" (nth 8 attr)
+ (if (and item attr) (dframe-message "%s %-6d %s" (nth 8 attr)
(nth 7 attr) item)
nil)))
(when (and (semantic-tag-overlay attr)
(semantic-tag-buffer attr))
(set-buffer (semantic-tag-buffer attr)))
- (speedbar-message
+ (dframe-message
(funcall semantic-sb-info-format-tag-function attr)
)))
(looking-at "\\([0-9]+\\):")
(setq item (file-name-nondirectory (speedbar-line-directory)))
- (speedbar-message "Tag: %s in %s" tag item)))
+ (dframe-message "Tag: %s in %s" tag item)))
(if (re-search-forward "{[+-]} \\([^\n]+\\)$" (line-end-position) t)
- (speedbar-message "Group of tags \"%s\"" (match-string 1))
+ (dframe-message "Group of tags \"%s\"" (match-string 1))
(if (re-search-forward " [+-]?[()|@] \\([^\n]+\\)$" nil t)
(let* ((detailtext (match-string 1))
(detail (or (speedbar-line-token) detailtext))
(if (featurep 'semantic)
(with-no-warnings
(if (semantic-tag-p detail)
- (speedbar-message
+ (dframe-message
(funcall semantic-sb-info-format-tag-function detail parent))
(if parent
- (speedbar-message "Detail: %s of tag %s" detail
+ (dframe-message "Detail: %s of tag %s" detail
(if (semantic-tag-p parent)
(semantic-format-tag-name parent nil t)
parent))
- (speedbar-message "Detail: %s" detail))))
+ (dframe-message "Detail: %s" detail))))
;; Not using `semantic':
(if parent
- (speedbar-message "Detail: %s of tag %s" detail parent)
- (speedbar-message "Detail: %s" detail))))
+ (dframe-message "Detail: %s of tag %s" detail parent)
+ (dframe-message "Detail: %s" detail))))
nil)))))
(defun speedbar-files-item-info ()
(if (file-directory-p f)
(delete-directory f t t)
(delete-file f t))
- (speedbar-message "Okie dokie.")
+ (dframe-message "Okie dokie.")
(let ((p (point)))
(speedbar-refresh)
(goto-char p))
(defmacro speedbar-with-writable (&rest forms)
"Allow the buffer to be writable and evaluate FORMS."
- (list 'let '((inhibit-read-only t))
- (cons 'progn forms)))
-(put 'speedbar-with-writable 'lisp-indent-function 0)
+ (declare (indent 0))
+ `(let ((inhibit-read-only t))
+ ,@forms))
(defun speedbar-insert-button (text face mouse function
&optional token prevline)
(car (car lst)) ;button name
nil nil 'speedbar-tag-face
(1+ level)))
- (t (speedbar-message "speedbar-insert-generic-list: malformed list!")
+ (t (dframe-message "speedbar-insert-generic-list: malformed list!")
))
(setq lst (cdr lst)))))
(expand-file-name default-directory))))
nil
(if (<= 1 speedbar-verbosity-level)
- (speedbar-message "Updating speedbar to: %s..."
+ (dframe-message "Updating speedbar to: %s..."
default-directory))
(speedbar-update-directory-contents)
(if (<= 1 speedbar-verbosity-level)
(progn
- (speedbar-message "Updating speedbar to: %s...done"
+ (dframe-message "Updating speedbar to: %s...done"
default-directory)
- (speedbar-message nil))))
+ (dframe-message nil))))
;; Else, we can do a short cut. No text cache.
(let ((cbd (expand-file-name default-directory)))
(set-buffer speedbar-buffer)
(dframe-select-attached-frame speedbar-frame)
;; make sure we at least choose a window to
;; get a good directory from
- (if (window-minibuffer-p (selected-window))
+ (if (window-minibuffer-p)
nil
;; Check for special modes
(speedbar-maybe-add-localized-support (current-buffer))
;;(eq (get major-mode 'mode-class 'special)))
(progn
(if (<= 2 speedbar-verbosity-level)
- (speedbar-message
+ (dframe-message
"Updating speedbar to special mode: %s..."
major-mode))
(speedbar-update-special-contents)
(if (<= 2 speedbar-verbosity-level)
(progn
- (speedbar-message
+ (dframe-message
"Updating speedbar to special mode: %s...done"
major-mode)
- (speedbar-message nil))))
+ (dframe-message nil))))
;; Update all the contents if directories change!
(unless (and (or (member major-mode speedbar-ignored-modes)
(while (and l (funcall (car l)))
;;(sit-for 0)
(setq l (cdr l))))
- ;;(speedbar-message "Exit with %S" (car l))
+ ;;(dframe-message "Exit with %S" (car l))
))))
(defun speedbar-reset-scanners ()
(point))))
(fulln (concat f fn)))
(if (<= 2 speedbar-verbosity-level)
- (speedbar-message "Speedbar vc check...%s" fulln))
+ (dframe-message "Speedbar vc check...%s" fulln))
(and (file-writable-p fulln)
(speedbar-this-file-in-vc f fn))))
(run-hook-with-args 'speedbar-vc-in-control-hook directory name)
))
-;; Objet File scanning
+;; Object File scanning
(defun speedbar-check-objects ()
"Scan all files in a directory, and for each see if there is an object.
See `speedbar-check-obj-this-line' and `speedbar-obj-alist' for how
(point))))
(fulln (concat f fn)))
(if (<= 2 speedbar-verbosity-level)
- (speedbar-message "Speedbar obj check...%s" fulln))
+ (dframe-message "Speedbar obj check...%s" fulln))
(let ((oa speedbar-obj-alist))
(while (and oa (not (string-match (car (car oa)) fulln)))
(setq oa (cdr oa)))
(buffer-substring-no-properties
(match-beginning 0) (match-end 0))
"0")))))
- ;;(speedbar-message "%S:%S:%S:%s" fn tok txt dent)
+ ;;(dframe-message "%S:%S:%S:%s" fn tok txt dent)
(and fn (funcall fn txt tok dent)))
(speedbar-position-cursor-on-line))
\f
(set-buffer speedbar-buffer)
(if (<= (count-lines (point-min) (point-max))
- (1- (window-height (selected-window))))
+ (1- (window-height)))
;; whole buffer fits
(let ((cp (point)))
(setq end (point-max)))))
;; Now work out the details of centering
(let ((nl (count-lines start end))
- (wl (1- (window-height (selected-window))))
+ (wl (1- (window-height)))
(cp (point)))
(if (> nl wl)
;; We can't fit it all, so just center on cursor
nil
;; we need to do something...
(goto-char start)
- (let ((newcent (/ (- (window-height (selected-window)) nl) 2))
+ (let ((newcent (/ (- (window-height) nl) 2))
(lte (count-lines start (point-max))))
- (if (and (< (+ newcent lte) (window-height (selected-window)))
- (> (- (window-height (selected-window)) lte 1)
+ (if (and (< (+ newcent lte) (window-height))
+ (> (- (window-height) lte 1)
newcent))
- (setq newcent (- (window-height (selected-window))
+ (setq newcent (- (window-height)
lte 1)))
(recenter newcent))))
(goto-char cp))))))
(if (get-buffer "*etags tmp*")
(kill-buffer "*etags tmp*")) ;kill to clean it up
(if (<= 1 speedbar-verbosity-level)
- (speedbar-message "Fetching etags..."))
+ (dframe-message "Fetching etags..."))
(set-buffer (get-buffer-create "*etags tmp*"))
(apply 'call-process speedbar-fetch-etags-command nil
(current-buffer) nil
(append speedbar-fetch-etags-arguments (list file)))
(goto-char (point-min))
(if (<= 1 speedbar-verbosity-level)
- (speedbar-message "Fetching etags..."))
+ (dframe-message "Fetching etags..."))
(let ((expr
(let ((exprlst speedbar-fetch-etags-parse-list)
(ans nil))
(setq tnl (speedbar-extract-one-symbol expr)))
(if tnl (setq newlist (cons tnl newlist)))
(forward-line 1)))
- (speedbar-message
+ (dframe-message
"Sorry, no support for a file of that extension"))))
)
(if speedbar-sort-tags
(let* ((item (speedbar-line-text))
(buffer (if item (get-buffer item) nil)))
(and buffer
- (speedbar-message "%s%s %S %d %s"
+ (dframe-message "%s%s %S %d %s"
(if (buffer-modified-p buffer) "* " "")
item
(with-current-buffer buffer major-mode)
(defun speedbar-recenter ()
"Recenter the current buffer so point is in the center of the window."
- (recenter (/ (window-height (selected-window)) 2)))
+ (recenter (/ (window-height) 2)))
\f
;;; Color loading section.