Here's a slightly upgraded version of bbdb-screen.el. It adds the
ability to toggle the separate screen functionality by typing a "T" in
the *BBDB* buffer. The code is also a bit cleaner.
Anyway, enjoy :-)
Feedback is appreciated.
8<-----------8<-----------8<-----------8<-----------8<-----------
;;
;; Author: Michael D. Carney
;; Module: bbdb-screen.el
;; Version: 1.0
;; Created: Jan 19, 1995
;; Description:
;; Puts the *BBDB* buffer into a separate screen and uses that screen to
;; display the *BBDB* buffer whenever it needs to.
;;
(require 'advice)
(defvar bbdb-screen-parameter-alist nil
"*Alist of screen parameters used for creating the BBDB screen.")
(defvar bbdb-screen nil)
(defvar bbdb-screen-name "BBDB"
"Used to name the screen that holds the *BBDB* buffer")
(defun bbdb-resolve (var arg)
(if (or (and (symbolp var) (fboundp var))
(and (listp var) (eq (car var) 'lambda)))
(funcall var arg)
var))
(defvar bbdb-separate-screen t
"If true, then put the *BBDB* buffer in its own screen")
(defun bbdb-toggle-separate-screen (&optional onoff)
"Toggle the separate screen functionality."
(interactive "P")
(setq bbdb-separate-screen (if onoff
(> (if (numberp onoff) onoff
(prefix-numeric-value onoff))
0)
(not bbdb-separate-screen)))
(if bbdb-separate-screen
(progn
(define-key bbdb-mode-map "q" 'bbdb-iconify))
(if bbdb-screen
(progn
(delete-screen bbdb-screen)
(setq bbdb-screen nil)))
(define-key bbdb-mode-map "q" 'bbdb-bury-buffer)))
(defun bbdb-select-screen ()
"Create and/or select and raise the BBDB screen for the *BBDB* buffer."
(interactive)
(if bbdb-separate-screen
(let* ((fname (expand-file-name bbdb-file))
(new-screen (not (screen-live-p bbdb-screen))))
(if new-screen
(setq bbdb-screen (make-screen
(append (bbdb-resolve bbdb-screen-parameter-alist
(file-name-nondirectory fname))
(list (cons 'name bbdb-screen-name))))))
(select-screen bbdb-screen)
(make-screen-visible bbdb-screen)
(switch-to-buffer bbdb-buffer-name)
(raise-screen bbdb-screen)
)))
(defadvice bbdb-display-records-1 (before
screen-bbdb-activate
first
activate)
"BBDB is started inside its own screen (bbdb-screen)."
(bbdb-select-screen))
(defun bbdb-iconify ()
"Saves the current folder and iconifies the current frame."
(interactive)
(bbdb-save-db)
(and (screen-live-p (selected-screen))
(iconify-screen (selected-screen))))
(setq bbdb-screen-parameter-alist '((width . 80)
(height . 20)
(left . 100)
(top . 100)))
(define-key bbdb-mode-map "T" 'bbdb-toggle-separate-screen)
(bbdb-toggle-separate-screen 1)
(provide 'bbdb-screen)
;; end bbdb-screen.el
8<-----------8<-----------8<-----------8<-----------8<-----------
Mike