summaryrefslogtreecommitdiff
path: root/.config/emacs/lisp/toggle-window/toggle-window.el
blob: c518159b91520cd8a9a0ca3db14d3ac2812d005e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
(defvar toggle-window-configuration nil
  "Stores the window configuration")

(defun toggle-window ()
  (interactive)
  (if (count-windows)
	  (if (one-window-p)
		  ;; reset configuration if single window
		  (if toggle-window-configuration
			  (let* ((current-window (selected-window))
					 (current-buffer (window-buffer current-window)))
				(progn
				  (set-window-configuration toggle-window-configuration)
				  (set-window-buffer current-window current-buffer)
				  ;; make sure current window keeps state
				  (window-state-put current-window-state)
				  (setq toggle-window-configuration nil))
				)
			(message "No previous window layout to restore."))
		;; if multiple windows save configuration
		(setq toggle-window-configuration (current-window-configuration))
		;; delete current or other window
		(if (derived-mode-p 'compilation-mode)
			(delete-window)
		  (delete-other-windows)))))

(provide 'toggle-window)