03/12/2006
Intégrer la speedbar d'Emacs dans la fenêtre principale
Il y a quelque temps, j'ai réussi à faire ce que tout le monde rêve de faire mais que personne n'arrive à faire... il s'agit bien sûr d'intégrer la speedbar d'Emacs directement dans la fenêtre principale ! (vous pensiez à quoi ? devenir maître du monde ? mais c'est tout comme :-) regardez plutôt la copie d'écran ci-dessous !).

Cela est possible grâce au code suivant, à insérer dans le fichier ~/.emacs. Notez le gros hack pour éviter un bug vicieux avec le module Tramp !
(require 'tramp) (defconst my-junk-buffer-name "Junk") (setq junk-buffer (get-buffer-create my-junk-buffer-name) ) (require 'speedbar) (defconst my-speedbar-buffer-name "SPEEDBAR") (setq speedbar-buffer (get-buffer-create my-speedbar-buffer-name) speedbar-frame (selected-frame) dframe-attached-frame (selected-frame) speedbar-select-frame-method 'attached speedbar-verbosity-level 0 speedbar-last-selected-file nil) (setq right-window (split-window-horizontally 24)) (setq left-window (frame-first-window)) ;(walk-windows (lambda (w) (setq left-window w)) "nominibuffer" t) (set-buffer speedbar-buffer) (speedbar-mode) (speedbar-reconfigure-keymaps) (speedbar-update-contents) (speedbar-set-timer 1) (set-window-buffer left-window "SPEEDBAR") (set-window-dedicated-p left-window t) (toggle-read-only) ; HACK, REQUIRED for Tramp to work ???? (select-window right-window) (defun select-right-window () (select-window right-window)) ;(defun reset-window-config () (interactive) ; (walk-windows (lambda (w) (when (not (or (eq w left-window) (eq w right-window))) (delete-window w))) "nominibuffer" t) ; ) (defun reset-window-config () (interactive) (delete-other-windows) (setq right-window (split-window-horizontally 24)) (setq left-window (frame-first-window)) (set-window-buffer left-window speedbar-buffer) (set-window-dedicated-p left-window t) (select-window right-window) (set-window-dedicated-p right-window nil) (when (eq speedbar-buffer (window-buffer right-window)) (set-window-buffer right-window (next-buffer))) (set-window-dedicated-p right-window nil) ) (global-set-key "\C-x1" 'reset-window-config)