Skip to content

Instantly share code, notes, and snippets.

@stathissideris
Created March 9, 2017 09:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stathissideris/d35ea8ec3df9e91ff0e6080f247e7ba9 to your computer and use it in GitHub Desktop.
Save stathissideris/d35ea8ec3df9e91ff0e6080f247e7ba9 to your computer and use it in GitHub Desktop.
(require 'hydra)
(global-set-key (kbd "§") 'hydra-windows/body)
(make-face 'move-window-buffer-face)
(set-face-attribute 'move-window-buffer-face nil
:background "#073642")
(setq ss/window-move-remap-cookie nil)
(defun remove-window-move-indicator ()
(if ss/window-move-remap-cookie
(face-remap-remove-relative
ss/window-move-remap-cookie)))
(defun add-window-move-indicator ()
(setq
ss/window-move-remap-cookie
(face-remap-add-relative 'default 'move-window-buffer-face)))
(defun window-move (direction)
(let ((fun (cond ((eq direction 'up) 'windmove-up)
((eq direction 'down) 'windmove-down)
((eq direction 'left) 'windmove-left)
((eq direction 'right) 'windmove-right))))
(remove-window-move-indicator)
(funcall fun)
(add-window-move-indicator)))
(defun buffer-swap (direction)
(let* ((other-window (windmove-find-other-window direction))
(other-buffer (window-buffer other-window))
(this-buffer (current-buffer))
(this-window (selected-window)))
(set-window-buffer other-window this-buffer)
(set-window-buffer this-window other-buffer)
(window-move direction)))
(defhydra hydra-windows (global-map "C-M-s"
:foreign-keys warn
:pre add-window-move-indicator
:post remove-window-move-indicator)
"windows"
("<up>" (progn (window-move 'up)))
("<down>" (progn (window-move 'down)))
("<left>" (progn (window-move 'left)))
("<right>" (progn (window-move 'right)))
("C-<up>" (progn (buffer-swap 'up)))
("C-<down>" (progn (buffer-swap 'down)))
("C-<left>" (progn (buffer-swap 'left)))
("C-<right>" (progn (buffer-swap 'right)))
("§" nil "exit")
("q" nil "exit"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment