Commit b04fa5c5 authored by Karl Heuer's avatar Karl Heuer
Browse files

No longer depends on speedbspec for byte compile.

(rmail-speedbar-match-folder-regexp) new variable.
(rmail-speedbar-menu-items) Updated speedbar menu items.
(rmail-speedbar-key-map) New keymap.
(rmail-install-speedbar-variables) New function.
Install speedbar keymap only when speedbar is loaded.
(rmail-speedbar-buttons) Use `rmail-speedbar-match-folder-regexp'.
parent f8f34fa2
......@@ -3170,20 +3170,45 @@ This has an effect only if a summary buffer exists."
(add-text-properties (point-min) (point-max) '(rmail-fontified t))
(font-lock-fontify-region (point-min) (point-max))
(and (not modified) (buffer-modified-p) (set-buffer-modified-p nil)))))))
;;; Speedbar support for RMAIL files.
(eval-when-compile (require 'speedbspec))
(eval-when-compile (require 'speedbar))
(defvar rmail-speedbar-match-folder-regexp "^[A-Z0-9]+\\(\\.[A-Z0-9]+\\)?$"
"*This regex us used to match folder names to be displayed in speedbar.
Enabling this will permit speedbar to display your folders for easy
browsing, and moving of messages.")
(defvar rmail-speedbar-last-user nil
"The last user to be displayed in the speedbar.")
(defvar rmail-speedbar-key-map nil
"Keymap used when in rmail display mode.")
(defun rmail-install-speedbar-variables ()
"Install those variables used by speedbar to enhance rmail."
(if rmail-speedbar-key-map
(setq rmail-speedbar-key-map (speedbar-make-specialized-keymap))
(define-key rmail-speedbar-key-map "e" 'speedbar-edit-line)
(define-key rmail-speedbar-key-map "r" 'speedbar-edit-line)
(define-key rmail-speedbar-key-map "\C-m" 'speedbar-edit-line)
(define-key rmail-speedbar-key-map "M"
(defvar rmail-speedbar-menu-items
'(["Browse Item On Line" speedbar-edit-line t]
["Move message to folder" rmail-move-message-to-folder-on-line
'(["Read Folder" speedbar-edit-line t]
["Move message to folder" rmail-speedbar-move-message-to-folder-on-line
(save-excursion (beginning-of-line)
(looking-at "<M> "))])
"Additional menu-items to add to speedbar frame.")
;; Make sure our special speedbar major mode is loaded
(if (featurep 'speedbar)
(add-hook 'speedbar-load-hook 'rmail-install-speedbar-variables))
(defun rmail-speedbar-buttons (buffer)
"Create buttons for BUFFER containing rmail messages.
Click on the address under Reply to: to reply to this person.
......@@ -3215,7 +3240,7 @@ current message into that RMAIL folder."
(let* ((case-fold-search nil)
(df (directory-files (save-excursion (set-buffer buffer)
nil "^[A-Z0-9]+\\(\\.[A-Z0-9]+\\)?$")))
nil rmail-speedbar-match-folder-regexp)))
(while df
(speedbar-insert-button "<M>" 'speedbar-button-face 'highlight
'rmail-speedbar-move-message (car df))
......@@ -3236,7 +3261,7 @@ TOKEN and INDENT are not used."
(message "Loading in RMAIL file %s..." text)
(find-file text)))
(defun rmail-move-message-to-folder-on-line ()
(defun rmail-speedbar-move-message-to-folder-on-line ()
"If the current line is a folder, move current message to it."
;;; speedbspec --- Buffer specialized configurations for speedbar
;; Copyright (C) 1997, 1998 Free Software Foundation
;; Author: Eric M. Ludlam <>
;; Version: 0.2
;; Keywords: file, tags, tools
;; This file is part of GNU Emacs.
;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; Speedbar provides a frame in which files, and locations in
;; files are displayed. These functions provide some mode-specific
;; displays for some existing emacs modes.
;; To provide special service to all the modes supported by this file,
;; put the following in your .emacs file.
;; (require 'speedbspec)
;; This will load in the known functions, and the mode-enabling code
;; into 'change-major-mode-hook.
;; You can interactivly try to enable speedbar specialized modes by
;; calling the function `speedbar-add-localized-speedbar-support' and
;; disable it with `speedbar-remove-localized-speedbar-support'.
;; This file requires speedbar.
;;; Change log:
;; 0.1 - Initial revision requiring speedbar 0.5
;; 0.1.1 - `buffer-live-p' replacement on old emacsen
;; 0.2 - Moved actual work code into their own files.
;; Check and load files that need loading before checking for the
;; menu variable.
;; Made the functions to turn on/off speedbar support interactive.
;; It is *not* a minor-mode, it mearly enables special speedbar
;; behaviors.
;; 0.2.1 - Fix for emacs 20 when checking for autoload functions.
;;; Code:
(require 'speedbar)
;;; Compatibility:
;; Thanks:
(if (fboundp 'buffer-live-p)
(defun buffer-live-p (buffer)
"Determine if the buffer is alive."
(memq buffer (buffer-list))))
;;; Generic add-new-special-mode stuff
(defvar speedbar-localized-buffer-queue nil
"List of buffers to localize for speedbar.")
(defun speedbar-add-localized-speedbar-support-to-q ()
"Add speedbar support to all buffers in `speedbar-localized-buffer-queue'."
(remove-hook 'post-command-hook
(while speedbar-localized-buffer-queue
(car speedbar-localized-buffer-queue))
(setq speedbar-localized-buffer-queue
(cdr speedbar-localized-buffer-queue))))
(defun speedbar-add-localized-speedbar-support (buffer)
"Add localized speedbar support to BUFFER's mode if it is available."
(interactive "bBuffer: ")
(if (stringp buffer) (setq buffer (get-buffer buffer)))
(if (not (buffer-live-p buffer))
(set-buffer buffer)
(let ((ms (symbol-name major-mode))
v tmp)
(if (not (string-match "-mode$" ms))
nil ;; do nothing to broken mode
(setq ms (substring ms 0 (match-beginning 0)))
(setq v (intern-soft (concat ms "-speedbar-buttons")))
(if (not v)
nil ;; do nothing if not defined
;; If it is autoloaded, we need to load it now so that
;; we have access to the varialbe -speedbar-menu-items.
;; Is this XEmacs safe?
(let ((sf (symbol-function v)))
(if (and (listp sf) (eq (car sf) 'autoload))
(load-library (car (cdr sf)))))
(set (make-local-variable 'speedbar-special-mode-expansion-list)
(list v))
(setq v (intern-soft (concat ms "-speedbar-menu-items")))
(if (not v)
nil ;; don't add special menus
(make-local-variable 'speedbar-easymenu-definition-special)
(setq speedbar-easymenu-definition-special
(symbol-value v))))))))))
(defun speedbar-remove-localized-speedbar-support (buffer)
"Remove any traces that BUFFER supports speedbar in a specialized way."
(set-buffer buffer)
(kill-local-variable 'speedbar-special-mode-expansion-list)
(kill-local-variable 'speedbar-easymenu-definition-special)))
(defun speedbar-change-major-mode ()
"Run when the major mode is changed."
(setq speedbar-localized-buffer-queue
(add-to-list 'speedbar-localized-buffer-queue (current-buffer)))
(add-hook 'post-command-hook 'speedbar-add-localized-speedbar-support-to-q))
(add-hook 'change-major-mode-hook 'speedbar-change-major-mode)
(add-hook 'find-file-hooks 'speedbar-change-major-mode)
(provide 'speedbspec)
;;; speedbspec ends here
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment