É um bug conhecido aparentemente ... até que uma correção seja lançada , a solução mais fácil seria rodar o emacs21.
Se você estiver disposto a corrigir & recompilar, também encontrei um possível patch aqui , embora eu não pode confirmar se funciona ou não.
-----------------------
diff -c /tmp/sr-speedbar.el\~ /tmp/sr-speedbar.el
--- /tmp/sr-speedbar.el~ 2008-11-06 07:57:08.000000000 -0800
+++ /tmp/sr-speedbar.el 2008-11-06 07:59:21.000000000 -0800
@@ -270,16 +270,17 @@
(interactive)
(let ((current-window (selected-window)))
(if (and sr-speedbar-window
- speedbar-buffer
- (window-live-p sr-speedbar-window) ;when 'sr-speedbar-window' visible
- (buffer-live-p speedbar-buffer)) ;and contain 'speedbar-buffer'
- (sr-speedbar-select-window)
- (if (> (current-window-take-width) 1) ;if width of 'sr-speedbar-window' is a valid value
- (setq sr-speedbar-width (current-window-take-width))) ;remember it make next restore same width
- (bury-buffer)
- (if (and current-window
- (window-live-p current-window))
- (select-window current-window)))))
+ speedbar-buffer
+ (window-live-p sr-speedbar-window) ;when 'sr-speedbar-window' visible
+ (buffer-live-p speedbar-buffer)) ;and contain 'speedbar-buffer'
+ (progn
+ (sr-speedbar-select-window)
+ (if (> (current-window-take-width) 1) ;if width of 'sr-speedbar-window' is a valid value
+ (setq sr-speedbar-width (current-window-take-width))) ;remember it make next restore same width
+ (bury-buffer)
+ (if (and current-window
+ (window-live-p current-window))
+ (select-window current-window))))))