* Make it possible to scroll (up/down) and bury window buffers * Map window selectors back to the defaults (numbers) * Make dispatcher run always, even for only two windows
		
			
				
	
	
		
			57 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			EmacsLisp
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			EmacsLisp
		
	
	
	
	
	
(defun transpose-windows (arg)
 | 
						|
  "Transpose the buffers shown in two windows."
 | 
						|
  (interactive "p")
 | 
						|
  (let ((selector (if (>= arg 0) 'next-window 'previous-window)))
 | 
						|
    (while (/= arg 0)
 | 
						|
      (let ((this-win (window-buffer))
 | 
						|
            (next-win (window-buffer (funcall selector))))
 | 
						|
        (set-window-buffer (selected-window) next-win)
 | 
						|
        (set-window-buffer (funcall selector) this-win)
 | 
						|
        (select-window (funcall selector)))
 | 
						|
      (setq arg (if (plusp arg) (1- arg) (1+ arg))))))
 | 
						|
 | 
						|
(defun toggle-window-split ()
 | 
						|
  (interactive)
 | 
						|
  (if (= (count-windows) 2)
 | 
						|
      (let* ((this-win-buffer (window-buffer))
 | 
						|
             (next-win-buffer (window-buffer (next-window)))
 | 
						|
             (this-win-edges (window-edges (selected-window)))
 | 
						|
             (next-win-edges (window-edges (next-window)))
 | 
						|
             (this-win-2nd (not (and (<= (car this-win-edges)
 | 
						|
                                         (car next-win-edges))
 | 
						|
                                     (<= (cadr this-win-edges)
 | 
						|
                                         (cadr next-win-edges)))))
 | 
						|
             (splitter
 | 
						|
              (if (= (car this-win-edges)
 | 
						|
                     (car (window-edges (next-window))))
 | 
						|
                  'split-window-horizontally
 | 
						|
                'split-window-vertically)))
 | 
						|
        (delete-other-windows)
 | 
						|
        (let ((first-win (selected-window)))
 | 
						|
          (funcall splitter)
 | 
						|
          (if this-win-2nd (other-window 1))
 | 
						|
          (set-window-buffer (selected-window) this-win-buffer)
 | 
						|
          (set-window-buffer (next-window) next-win-buffer)
 | 
						|
          (select-window first-win)
 | 
						|
          (if this-win-2nd (other-window 1))))
 | 
						|
    (error "This works only for two windows!")))
 | 
						|
 | 
						|
(defun gpolonkai/scroll-window-up (window)
 | 
						|
  "Scroll WINDOW up as `scroll-up-command' would."
 | 
						|
  (interactive)
 | 
						|
  (save-selected-window
 | 
						|
    (select-window window)
 | 
						|
    (scroll-up)))
 | 
						|
 | 
						|
(defun gpolonkai/scroll-window-down (window)
 | 
						|
  "Scroll WINDOW down as `scroll-down-command' would."
 | 
						|
  (interactive)
 | 
						|
  (save-selected-window
 | 
						|
    (select-window window)
 | 
						|
    (scroll-down)))
 | 
						|
 | 
						|
(defun gpolonkai/bury-window (window)
 | 
						|
  "Quit WINDOW without killing it."
 | 
						|
  (interactive)
 | 
						|
  (quit-window nil window))
 |