(defconst setup-my-windows-junk-buffers
'("*scratch*" "*Messages*" "*Calculator" "*Calc Trail*" "*compilation*" "*fetchmail*"))
-(defun setup-my-windows ()
- (interactive)
- (let ((width 100) (min 100) (distribute t)
- (currentbuffer (current-buffer))
- (currentwindow (selected-window))
- topwindows firstwindow newwindow newtopwindows)
+(defvar my-windows-count nil)
+
+(defun setup-my-windows (&optional n)
+ (interactive "P")
+ (if n
+ (if (integerp n)
+ (setq my-windows-count n)
+ (setq my-windows-count nil)))
+ (let* ((width (if my-windows-count
+ (- (/ (frame-width) my-windows-count) 4)
+ (or whitespace-line-column 100)))
+ (min width) (distribute t)
+ (currentbuffer (current-buffer))
+ (currentwindow (selected-window))
+ topwindows firstwindow newwindow newtopwindows)
(walk-windows (function (lambda (w)
(let ((e (window-edges w)))
(if (< (nth 1 e) window-min-height)
if (and (= (aref name 0) ?*)
(not (member name setup-my-windows-precious-buffers))) return w)
firstwindow))
- (if (and distribute (> (length newtopwindows) 1))
- (balance-windows firstwindow))
+ (when (and distribute (> (length newtopwindows) 1))
+ (pjb-balance-windows t))
(select-window newwindow)
(if (not (member (buffer-name currentbuffer) setup-my-windows-junk-buffers))
(switch-to-buffer currentbuffer))))
(global-set-key "\C-x7" 'split-window-3-horizontally)
(global-set-key "\C-x8" (lambda () (interactive) (split-window-n-horizontally 100 50)))
(global-set-key "\C-x9" 'setup-my-windows)
-(global-set-key "\C-xp" 'other-window-reverse)
(global-set-key "\C-\M-_" (lambda () (interactive) (safe-shrink-window 5)))
-(defun my-swap-window-to-right (&optional stay)
+(defun my-swap-window-to-right (&optional below)
+ "If swap buffer in this window with buffer on the right. If BELOW is set,
+instead move current buffer to right and replace it with the next buffer from
+the buffer stack in the current window."
(interactive "P")
(let ((cb (current-buffer))
(cw (selected-window)))
+ (if below
+ (switch-to-buffer nil))
(windmove-right)
- (set-window-buffer cw (current-buffer))
- (switch-to-buffer cb)
- (if stay
- (select-window cw))))
+ (if (not below)
+ (set-window-buffer cw (current-buffer)))
+ (switch-to-buffer cb)))
-(defun my-swap-window-to-left (&optional stay)
+(defun my-swap-window-to-left (&optional below)
(interactive "P")
(let ((cb (current-buffer))
(cw (selected-window)))
+ (if below
+ (switch-to-buffer nil))
(windmove-left)
- (set-window-buffer cw (current-buffer))
- (switch-to-buffer cb)
- (if stay
- (select-window cw))))
+ (if (not below)
+ (set-window-buffer cw (current-buffer)))
+ (switch-to-buffer cb)))
(global-set-key "\C-x>" 'my-swap-window-to-right)
(global-set-key "\C-x<" 'my-swap-window-to-left)
(shrink-window-horizontally (- (- width (window-width) (* window-min-width (1- count)))))))
(global-set-key "\C-x=" 'safe-max-window-horizontally)
+(global-set-key "\C-x-" 'maximize-window-15)