-
-
Save cwndrws/d97633fd7053a172989e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| (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