changeset 22950:606be1490be7

(speedbar-edit-line, speedbar-buffer-kill-buffer, speedbar-buffer-revert-buffer): Updated buffer finding regex to handle the [?] tag. (speedbar-find-selected-file): New function. (speedbar-clear-current-file): Uses `speedbar-find-selected-file' (speedbar-update-current-file): Uses `speedbar-find-selected-file', and now `speedbar-last-selected-file' is defined as the path name to the file, not just the file itself. (speedbar-center-buffer-smartly): Fixed center error to handle the whole buffer. (speedbar-delete-subblock): Rewrote to be more robust, less clever. (speedbar-timer-fn): Removed short display time for messages.
author Eric M. Ludlam <zappo@gnu.org>
date Sat, 08 Aug 1998 21:20:51 +0000
parents 3f75d6c8ef33
children 19b3899582b4
files lisp/speedbar.el
diffstat 1 files changed, 47 insertions(+), 37 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/speedbar.el	Sat Aug 08 20:45:28 1998 +0000
+++ b/lisp/speedbar.el	Sat Aug 08 21:20:51 1998 +0000
@@ -3,9 +3,9 @@
 ;;; Copyright (C) 1996, 97, 98 Free Software Foundation
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
-;; Version: 0.7.1
+;; Version: 0.7.2
 ;; Keywords: file, tags, tools
-;; X-RCS: $Id: speedbar.el,v 1.5 1998/08/03 17:47:39 zappo Exp zappo $
+;; X-RCS: $Id: speedbar.el,v 1.6 1998/08/04 13:58:39 zappo Exp zappo $
 
 ;; This file is part of GNU Emacs.
 
@@ -2551,7 +2551,6 @@
 			(progn
 			  (message "Updating speedbar to special mode: %s...done"
 				   major-mode)
-			  (sit-for 1)
 			  (message nil))))
 		;; Update all the contents if directories change!
 		(if (or (member (expand-file-name default-directory)
@@ -2572,7 +2571,6 @@
 		      (progn
 			(message "Updating speedbar to: %s...done"
 				 default-directory)
-			(sit-for 1)
 			(message nil)))))
 	      (select-frame af))
 	    ;; Now run stealthy updates of time-consuming items
@@ -2609,19 +2607,36 @@
   (run-hooks 'speedbar-scanner-reset-hook)
   )
 
+(defun speedbar-find-selected-file (file)
+  "Goto the line where FILE is."
+  (goto-char (point-min))
+  (let ((m nil))
+    (while (and (setq m (re-search-forward
+			 (concat " \\(" (file-name-nondirectory file)
+				 "\\)\\(" speedbar-indicator-regex "\\)?\n")
+			 nil t))
+		(not (string= file
+			      (concat
+			       (speedbar-line-path
+				(save-excursion
+				  (goto-char (match-beginning 0))
+				  (beginning-of-line)
+				  (save-match-data
+				    (looking-at "[0-9]+:")
+				    (string-to-number (match-string 0)))))
+			       (match-string 1))))))
+    (if m
+	(progn
+	  (goto-char (match-beginning 1))
+	  (match-string 1)))))
+
 (defun speedbar-clear-current-file ()
   "Locate the file thought to be current, and remove its highlighting."
   (save-excursion
     (set-buffer speedbar-buffer)
     (if speedbar-last-selected-file
 	(speedbar-with-writable
-	  (goto-char (point-min))
-	  (if (and
-	       speedbar-last-selected-file
-	       (re-search-forward
-		(concat " \\(" (regexp-quote speedbar-last-selected-file)
-			"\\)\\(" speedbar-indicator-regex "\\)?\n")
-		nil t))
+	  (if (speedbar-find-selected-file speedbar-last-selected-file)
 	      (put-text-property (match-beginning 1)
 				 (match-end 1)
 				 'face
@@ -2640,7 +2655,7 @@
 			       nil)))
 		     (select-frame lastf)
 		     rf)))
-	 (newcf (if newcfd (file-name-nondirectory newcfd)))
+	 (newcf (if newcfd newcfd))
 	 (lastb (current-buffer))
 	 (sucf-recursive (boundp 'sucf-recursive))
 	 (case-fold-search t))
@@ -2659,15 +2674,12 @@
 	  ;; now highlight the new one.
 	  (set-buffer speedbar-buffer)
 	  (speedbar-with-writable
-	    (goto-char (point-min))
-	    (if (re-search-forward
-		 (concat " \\(" (regexp-quote newcf) "\\)\\("
-			 speedbar-indicator-regex "\\)?$") nil t)
-		  ;; put the property on it
-		  (put-text-property (match-beginning 1)
-				     (match-end 1)
-				     'face
-				     'speedbar-selected-face)
+	    (if (speedbar-find-selected-file newcf)
+		;; put the property on it
+		(put-text-property (match-beginning 1)
+				   (match-end 1)
+				   'face
+				   'speedbar-selected-face)
 	      ;; Oops, it's not in the list.  Should it be?
 	      (if (and (string-match speedbar-file-regexp newcf)
 		       (string= (file-name-directory newcfd)
@@ -2675,8 +2687,7 @@
 		  ;; yes, it is (we will ignore unknowns for now...)
 		  (progn
 		    (speedbar-refresh)
-		    (if (re-search-forward
-			 (concat " \\(" (regexp-quote newcf) "\\)\n") nil t)
+		    (if (speedbar-find-selected-file newcf)
 			;; put the property on it
 			(put-text-property (match-beginning 1)
 					   (match-end 1)
@@ -3089,7 +3100,7 @@
 	(beginning-of-line)
 	;; If this fails, then it is a non-standard click, and as such,
 	;; perfectly allowed.
-	(if (re-search-forward "[]>}] [a-zA-Z0-9]"
+	(if (re-search-forward "[]>?}] [^ ]"
 			       (save-excursion (end-of-line) (point))
 			       t)
 	    (speedbar-do-function-pointer)
@@ -3168,16 +3179,15 @@
   "Delete text from point to indentation level INDENT or greater.
 Handles end-of-sublist smartly."
   (speedbar-with-writable
-    (save-excursion
-      (end-of-line) (forward-char 1)
-      (while (and (not (save-excursion
-			 (re-search-forward (format "^%d:" indent)
-					    nil t)))
-		  (>= indent 0))
-	(setq indent (1- indent)))
-      (delete-region (point) (if (>= indent 0)
-				 (match-beginning 0)
-			       (point-max))))))
+   (save-excursion
+     (end-of-line) (forward-char 1)
+     (let ((start (point)))
+       (while (and (looking-at "^\\([0-9]+\\):")
+		   (> (string-to-int (match-string 1)) indent)
+		   (not (eobp)))
+	 (forward-line 1)
+	 (beginning-of-line))
+       (delete-region start (point))))))
 
 (defun speedbar-dired (text token indent)
   "Speedbar click handler for directory expand button.
@@ -3337,7 +3347,7 @@
 	(end-of-line)
 	(if (re-search-backward exp nil t)
 	    (setq start (point))
-	  (error "Center error"))
+	  (setq start (point-min)))
 	(save-excursion			;Not sure about this part.
 	  (end-of-line)
 	  (setq p (point))
@@ -3665,7 +3675,7 @@
 	(beginning-of-line)
 	;; If this fails, then it is a non-standard click, and as such,
 	;; perfectly allowed.
-	(if (re-search-forward "[]>}] [a-zA-Z0-9]"
+	(if (re-search-forward "[]>?}] [^ ]"
 			       (save-excursion (end-of-line) (point))
 			       t)
 	    (let ((text (progn
@@ -3685,7 +3695,7 @@
     (beginning-of-line)
     ;; If this fails, then it is a non-standard click, and as such,
     ;; perfectly allowed
-    (if (re-search-forward "[]>}] [a-zA-Z0-9]"
+    (if (re-search-forward "[]>?}] [^ ]"
 			   (save-excursion (end-of-line) (point))
 			   t)
 	(let ((text (progn