Skip to content

Instantly share code, notes, and snippets.

@cwndrws
Created August 13, 2014 02:33
Show Gist options
  • Select an option

  • Save cwndrws/d97633fd7053a172989e to your computer and use it in GitHub Desktop.

Select an option

Save cwndrws/d97633fd7053a172989e to your computer and use it in GitHub Desktop.
(defcustom ftw-leader-key "C-a"
"Customizable contol key for ftw navigation")
(defun left-edge (win)
(let ((edges (window-edges win)))
(nth 0 edges)))
(defun right-edge (win)
(let ((edges (window-edges win)))
(nth 2 edges)))
(defun top-edge (win)
(let ((edges (window-edges win)))
(nth 1 edges)))
(defun bottom-edge (win)
(let ((edges (window-edges win)))
(nth 3 edges)))
(defun win-width (win)
(- (right-edge win)
(left-edge win)))
(defun win-height (win)
(- (bottom-edge win)
(top-edge win)))
(defun find-left (win)
(let ((lwin))
(walk-windows
(lambda (wwin)
(if (= (right-edge wwin)
(left-edge win))
(setq lwin wwin))))
lwin))
(defun find-right (win)
(let ((rwin))
(walk-windows
(lambda (wwin)
(if (= (left-edge wwin)
(right-edge win))
(setq rwin wwin))))
rwin))
(defun find-up (win)
(let ((uwin))
(walk-windows
(lambda (wwin)
(if (= (bottom-edge wwin)
(top-edge win))
(setq uwin wwin))))
uwin))
(defun find-down (win)
(let ((dwin))
(walk-windows
(lambda (wwin)
(if (= (top-edge wwin)
(bottom-edge win))
(setq dwin wwin))))
dwin))
(defun ftw-v ()
(interactive)
(split-window (selected-window) (/ (win-width (selected-window)) 2) t))
(defun ftw-h ()
(interactive)
(split-window (selected-window) (/ (win-height (selected-window)) 2)))
(defun ftw-del ()
(interactive)
(delete-window (selected-window)))
(defun ftw-right ()
(interactive)
(let ((rwin (find-right (selected-window))))
(if rwin
(select-window rwin))))
(defun ftw-left ()
(interactive)
(let ((lwin (find-left (selected-window))))
(if lwin
(select-window lwin))))
(defun ftw-up ()
(interactive)
(let ((uwin (find-up (selected-window))))
(if uwin
(select-window uwin))))
(defun ftw-down ()
(interactive)
(let ((dwin (find-down (selected-window))))
(if dwin
(select-window dwin))))
;;;###autoload
(define-minor-mode ftw-mode
"For the window navigation"
:global T
:lighter " ftw"
:keymap (let ((map (make-sparse-keymap)))
(define-key map (kbd (format "%s V" ftw-leader-key)) 'ftw-v)
(define-key map (kbd (format "%s H" ftw-leader-key)) 'ftw-h)
(define-key map (kbd (format "%s x" ftw-leader-key)) 'ftw-del)
(define-key map (kbd (format "%s h" ftw-leader-key)) 'ftw-left)
(define-key map (kbd (format "%s l" ftw-leader-key)) 'ftw-right)
(define-key map (kbd (format "%s k" ftw-leader-key)) 'ftw-up)
(define-key map (kbd (format "%s j" ftw-leader-key)) 'ftw-down)
map))
(provide 'ftw)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment