((eq side 'left) 1)
(t 2))))
+(defun mdw-horizontal-window-overhead ()
+ "Computes the horizontal window overhead.
+This is the number of columns used by fringes, scroll bars and other such
+cruft."
+ (if (not window-system)
+ 1
+ (let ((tot 0))
+ (dolist (what '(scroll-bar fringe))
+ (dolist (side '(left right))
+ (incf tot (funcall (intern (concat (symbol-name what) "-columns"))
+ side))))
+ tot)))
+
+(defun mdw-split-window-horizontally (&optional width)
+ "Split a window horizontally.
+Without a numeric argument, split the window approximately in
+half. With a numeric argument WIDTH, allocate WIDTH columns to
+the left-hand window (if positive) or -WIDTH columns to the
+right-hand window (if negative). Space for scroll bars and
+fringes is not taken out of the allowance for WIDTH, unlike
+\\[split-window-horizontally]."
+ (interactive "P")
+ (split-window-horizontally
+ (cond ((null width) nil)
+ ((>= width 0) (+ width (mdw-horizontal-window-overhead)))
+ ((< width 0) width))))
+
(defun mdw-divvy-window (&optional width)
"Split a wide window into appropriate widths."
(interactive "P")
77)
(t 78)))
(let* ((win (selected-window))
- (sb-width (if (not window-system)
- 1
- (let ((tot 0))
- (dolist (what '(scroll-bar fringe))
- (dolist (side '(left right))
- (incf tot
- (funcall (intern (concat (symbol-name what)
- "-columns"))
- side))))
- tot)))
+ (sb-width (mdw-horizontal-window-overhead))
(c (/ (+ (window-width) sb-width)
(+ width sb-width))))
(while (> c 1)