here is the complete patch:
basically, I sacrifice the failed attempt to only split the mua windows
for the sake of robustness.
diff --git a/ChangeLog b/ChangeLog
index 6bbbe47..29b211c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2011-12-29 Sam Steingold <
sds@gnu....>
+ * lisp/bbdb.el (bbdb-display-records)
+ (bbdb-display-records-internal): Do not accept horiz-p.
+ (bbdb-tallest-window): Extract from `bbdb-pop-up-window'.
+ (bbdb-pop-up-window): Do not accept horiz-p; always split the
+ tallest window when possible, whether horizontally or vertically.
+ * lisp/bbdb-mua.el (bbdb-mua-auto-update):
+ Do not pass horiz-p to `bbdb-display-records-internal'.
+
2011-12-28 Sam Steingold <
sds@gnu....>
* lisp/bbdb.el (bbdb-pop-up-window):
Shrink the vertical *BBDB* window when possible.
diff --git a/lisp/bbdb-mua.el b/lisp/bbdb-mua.el
index e0059a1..2f93b6f 100644
--- a/lisp/bbdb-mua.el
+++ b/lisp/bbdb-mua.el
@@ -786,22 +786,11 @@ See `bbdb-mua-display-records' and friends for interactive commands."
(records (bbdb-mua-update-records header-class
(or update-p
bbdb-mua-auto-update-p))))
- (if bbdb-message-pop-up
- (let* ((mua (bbdb-mua))
- (mode (cond ((eq mua 'vm) 'vm-mode)
- ((eq mua 'gnus) 'gnus-article-mode)
- ((eq mua 'rmail) 'rmail-mode)
- ((eq mua 'mh) 'mh-folder-mode)
- ((eq mua 'message) 'message-mode)
- ((eq mua 'mail) 'mail-mode))))
- (if records
- (bbdb-display-records-internal
- records nil nil nil
- `(lambda (window)
- (with-current-buffer (window-buffer window)
- (eq major-mode ',mode))))
- ;; If there are no records, empty the BBDB window.
- (bbdb-undisplay-records))))
+ (when bbdb-message-pop-up
+ (if records
+ (bbdb-display-records-internal records)
+ ;; If there are no records, empty the BBDB window.
+ (bbdb-undisplay-records)))
records))
;; Should the following be replaced by a minor mode??
diff --git a/lisp/bbdb.el b/lisp/bbdb.el
index 87f6c9f..ab6ace2 100644
--- a/lisp/bbdb.el
+++ b/lisp/bbdb.el
@@ -2801,7 +2801,7 @@ Move point to the end of the inserted record."
(put-text-property beg (point) 'bbdb-record-number number))))
(defun bbdb-display-records (&optional records layout append
- select horiz-p electric-p)
+ select electric-p)
"Display RECORDS using LAYOUT."
(interactive (list (bbdb-completing-read-records "Display records: ")
(bbdb-layout-prefix)))
@@ -2812,14 +2812,13 @@ Move point to the end of the inserted record."
(progn
(define-key bbdb-mode-map " " 'bbdb-electric-done)
(bbdb-electric-display-records records))
- (bbdb-display-records-internal records layout append select horiz-p)
+ (bbdb-display-records-internal records layout append select)
;; do not smash keybinding if they invoked `bbdb-display'
;; from inside an electric loop.
(unless bbdb-inside-electric-display
(define-key bbdb-mode-map " " 'undefined)))))
-(defun bbdb-display-records-internal (records &optional layout append
- select horiz-p)
+(defun bbdb-display-records-internal (records &optional layout append select)
"Low-level function overlooking the setup of the *BBDB* buffer."
(if (bbdb-append-display-p) (setq append t))
@@ -2852,7 +2851,7 @@ Move point to the end of the inserted record."
(set (make-local-variable 'bbdb-buffer-name) new-name)))))
(unless (get-buffer-window bbdb-buffer-name)
- (bbdb-pop-up-window select horiz-p))
+ (bbdb-pop-up-window select))
(set-buffer bbdb-buffer-name) ;; *BBDB*
;; If we're appending RECORDS to the ones already displayed,
@@ -2982,40 +2981,43 @@ The *BBDB* buffer must be current when this is called."
+(defun bbdb-tallest-window ()
+ "Find the tallest window."
+ (let ((tallest-window (selected-window)))
+ (dolist (window (window-list) tallest-window)
+ (when (> (window-height window) (window-height tallest-window))
+ (setq tallest-window window)))))
+
;;; window configuration hackery
-(defun bbdb-pop-up-window (&optional select horiz-p)
+(defun bbdb-pop-up-window (&optional select)
"Find the largest window on the screen, and split it, displaying the
*BBDB* buffer in the bottom `bbdb-pop-up-window-size' lines (unless
the *BBDB* buffer is already visible, in which case do nothing.)
Select this window if SELECT is non-nil.
-If `bbdb-message-pop-up' is 'horiz, and the first window matching
-HORIZ-P is sufficiently wide (> 112 columns) then the window
+If `bbdb-message-pop-up' is 'horiz, and the tallest window
+is sufficiently wide (see bbdb-horiz-pop-up-window-size) then the window
will be split vertically rather than horizontally."
(cond (;; We already have a BBDB window so that nothing needs to be done
(get-buffer-window bbdb-buffer-name))
;; try horizontal split
((and (eq bbdb-message-pop-up 'horiz)
- horiz-p
(>= (frame-width) (car bbdb-horiz-pop-up-window-size))
(let ((cbuffer (current-buffer))
- (window-list (window-list))
(selected-window (selected-window))
(b-width (cdr bbdb-horiz-pop-up-window-size))
- (search t) window)
- (while (and (setq window (pop window-list))
- (setq search (funcall horiz-p window))))
- (unless (or search (<= (window-width window)
- (car bbdb-horiz-pop-up-window-size)))
- (select-window window)
+ (tallest-window (bbdb-tallest-window)))
+ (when (> (window-width tallest-window)
+ (car bbdb-horiz-pop-up-window-size))
+ (select-window tallest-window)
(condition-case nil ; `split-window-horizontally' might fail
(progn
(split-window-horizontally
(if (integerp b-width)
- (- (window-width window) b-width)
- (round (* (- 1 b-width) (window-width window)))))
- (select-window (next-window window))
+ (- (window-width tallest-window) b-width)
+ (round (* (- 1 b-width) (window-width tallest-window)))))
+ (select-window (next-window tallest-window))
(let (pop-up-windows)
(switch-to-buffer (get-buffer-create bbdb-buffer-name)))
(unless select
@@ -3025,13 +3027,9 @@ will be split vertically rather than horizontally."
(error nil))))))
(t ;; vertical split
- (let* ((cbuffer (current-buffer))
- (selected-window (selected-window))
- (tallest-window selected-window))
- ;; find the tallest window...
- (dolist (window (window-list))
- (if (> (window-height window) (window-height tallest-window))
- (setq tallest-window window)))
+ (let ((cbuffer (current-buffer))
+ (selected-window (selected-window))
+ (tallest-window (bbdb-tallest-window)))
(select-window tallest-window) ; select it and split it...
(if (eql bbdb-pop-up-window-size 1.0)
;; select `bbdb-buffer-name'
--
Sam Steingold (
http://sds.podval.org/) on Ubuntu 11.10 (oneiric) X 11.0.11004000
http://camera.org http://palestinefacts.org http://mideasttruth.com
http://dhimmi.com http://thereligionofpeace.com http://www.memritv.org
If you think big enough, you'll never have to do it.
------------------------------------------------------------------------------
Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a complex
infrastructure or vast IT resources to deliver seamless, secure access to
virtual desktops. With this all-in-one solution, easily deploy virtual
desktops for less than the cost of PCs and save 60% on VDI infrastructure
costs. Try it free!
http://p.sf.net/sfu/Citrix-VDIinabox
_______________________________________________
bbdb-info@list...
https://lists.sourceforge.net/lists/listinfo/bbdb-info
BBDB Home Page:
http://bbdb.sourceforge.net/
opensubscriber is not affiliated with the authors of this message nor responsible for its content.