SrSpeedbar is a mode that makes SpeedBar show in the Current Frame, by SebastianRose.
(require 'sr-speedbar)
sr-speedbar-open | Open sr-speedbar window. |
sr-speedbar-close | Close sr-speedbar window. |
sr-speedbar-toggle | Toggle sr-speedbar window. |
sr-speedbar-select-window | select sr-speedbar window. |
sr-speedbar-refresh-turn-on | Turn on refresh speedbar content. |
sr-speedbar-refresh-turn-off | Turn off refresh speedbar content. |
sr-speedbar-refresh-toggle | Toggle refresh speedbar content. |
(If it simply duplicates the current buffer the first time you open it, make sure you’ve closed normal SpeedBar’s frame first.)
All below setup can customize by: M-x customize-group RET sr-speedbar RET
sr-speedbar-width-x | The sr-speedbar window width under WINDOW system. |
sr-speedbar-width-console | The sr-speedbar window width under CONSOLE. |
sr-speedbar-max-width | The max window width allowed remember. |
sr-speedbar-delete-windows | Whether delete other window before showing up. |
sr-speedbar-skip-other-window-p | Whether skip sr-speedbar window when use command other-window select window in cyclic ordering of windows. |
sr-speedbar-auto-refresh | Control status of refresh speedbar content. |
How can I disable the icons? I only want ASCII, even in GUI Emacs.
Answer:
(setq speedbar-use-images nil)
– Charles Strahan
Can I set the default font size for just the sr-speedbar buffer to something other than my other buffers/windows? I tried setting default-frame-alist as suggested by the speedbar-article, but that just caused all my frames to change font size whenever speedbar spawns. It wold be nice if sr-speedbar could default to a small font so that I can get a better overview over large code bases easily.
To answer my own question, I read the wikipage on FacesPerBuffer and came up with this:
(make-face 'speedbar-face) (set-face-font 'speedbar-face "Inconsolata-12") (setq speedbar-mode-hook '(lambda () (buffer-face-set 'speedbar-face)))
which solved my problem.
– Jeff
Even with (setq sr-speedbar-skip-other-window-p t) in .emacs file, the behavior of delete-other-windows is still weird in current version of sr-speedbar.el. In detail, suppose 2 windows opened, in either of them ^ X 1, there is still chance to select the SPEEDBAR window to be active, which is not usually the user want – the user want the original window be selected. After some experiment, I come up with following elisp code to further advice delete-other-windows not to select the SPEEDBAR window.
(defadvice delete-other-windows (after my-sr-speedbar-delete-other-window-advice activate) "Check whether we are in speedbar, if it is, jump to next window." (let () (when (and (sr-speedbar-window-exist-p sr-speedbar-window) (eq sr-speedbar-window (selected-window))) (other-window 1) ))) (ad-enable-advice 'delete-other-windows 'after 'my-sr-speedbar-delete-other-window-advice) (ad-activate 'delete-other-windows)
just place them after the elisp lines you use to load sr-speedbar.
– liyu1981
How to keep speed bar window width after resizing?
add
(with-current-buffer sr-speedbar-buffer-name (setq window-size-fixed 'width))
to your .emacs after calling
sr-speedbar-open
â Chen Xian’an
How to keep speed bar window width after resizing? (alternative)
Setting window-size-fixed permanently on the sr-speedbar buffer prevents you from manually resizing that window with the mouse. Here is a snippet that advises `delete-window` to temporarily set this variable.
(defun jjf-sr-speedbar-protect-speedbar-size (orig &rest args) (let ((b (get-buffer sr-speedbar-buffer-name))) (when b (with-current-buffer b (setq window-size-fixed 'width))) (apply orig args) (when b (with-current-buffer b (setq window-size-fixed nil))))) (eval-after-load 'sr-speedbar '(advice-add 'delete-window :around #'jjf-sr-speedbar-protect-speedbar-size))
How to integrate sr-speedbar with ERC’s erc-speedbar-browser?
There is a bug when using multiple frames
C-x 5 2
C-x 5 o (I’m in origial frame with speedbar)
C-x 5 o (I’m in 2nd frame without speedbar)
Now when I page up and page down it also moves the first frame.
I don’t get this when using regular speedbar. It seems like multiple sr-speedbars would be desired (one for each window).
With emacs 24.4+, ad-advised-definition-p function has been removed. You can add it back to fix the problem:
(defun ad-advised-definition-p (definition) "Return non-nil if DEFINITION was generated from advice information." (if (or (ad-lambda-p definition) (macrop definition) (ad-compiled-p definition)) (let ((docstring (ad-docstring definition))) (and (stringp docstring) (get-text-property 0 'dynamic-docstring-function docstring)))))
I’m not versed enough in emacs lisp to modify the sr-speedbar code to use some other function.
Hope it helps.
Sr-speedbar doesn't appear to control Speedbar:
I had this problem using Emacs on OSX (25.1) and found the solution here: http://emacs-leuven.readthedocs.io/en/stable/#speedbar-frames
With a little modification from their code, put this in your init.el:
(require 'sr-speedbar) ;; fix so speedbar is in same window (with-eval-after-load "speedbar" (autoload 'sr-speedbar-toggle "sr-speedbar" nil t) (global-set-key (kbd "s-s") 'sr-speedbar-toggle) )