From ba7722d425a24c18112d790a43df8752cbaed0eb Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Thu, 19 May 2016 03:14:02 -0400 Subject: [PATCH] narf/evil-window-move-* => narf/evil-window-move; add narf/evil-window-resize --- core/core-project.el | 3 +-- core/defuns/defuns-window.el | 48 +++++++++++------------------------- private/my-bindings.el | 13 +++++++--- 3 files changed, 25 insertions(+), 39 deletions(-) diff --git a/core/core-project.el b/core/core-project.el index 15f14630b..9d55a9aa6 100644 --- a/core/core-project.el +++ b/core/core-project.el @@ -99,8 +99,7 @@ ;; Don't ask for confirmation when creating files (advice-add 'neotree-create-node :around 'narf*neotree-create-node) ;; Prevents messing up the neotree buffer on window changes - (advice-add 'narf--evil-window-move :around 'narf*save-neotree) - (advice-add 'narf--evil-swap-windows :around 'narf*save-neotree) + (advice-add 'narf/evil-window-move :around 'narf*save-neotree) (add-hook 'neotree-mode-hook 'narf|neotree-init-keymap) (defun narf|neotree-init-keymap () diff --git a/core/defuns/defuns-window.el b/core/defuns/defuns-window.el index 8b05e5f7c..f1d010136 100644 --- a/core/defuns/defuns-window.el +++ b/core/defuns/defuns-window.el @@ -12,16 +12,8 @@ (call-interactively 'evil-window-vsplit) (evil-window-right 1)) -(defun narf--evil-swap-windows (a b) - (let ((a-buffer (window-buffer a)) - (b-buffer (window-buffer b))) - (with-selected-window b - (switch-to-buffer a-buffer)) - (with-selected-window a - (switch-to-buffer b-buffer)) - (select-window b))) - -(defun narf--evil-window-move (direction) +;;;###autoload +(defun narf/evil-window-move (direction) "Move current window to the next window in DIRECTION. If there are no windows there and there is only one window, split in that direction and place this window there. If there are no windows and this isn't the only window, use @@ -76,32 +68,22 @@ evil-window-move-* (e.g. `evil-window-move-far-left')" ;;;###autoload (defun narf/close-frame () (interactive) - (let ((data (assq (selected-frame) narf-wg-frames))) - (if data - (progn (wg-delete-workgroup (wg-get-workgroup (cdr data))) - (delete-frame (car data))) - (delete-frame)))) + (aif (assq (selected-frame) narf-wg-frames) + (progn (wg-delete-workgroup (wg-get-workgroup (cdr it))) + (delete-frame (car it))) + (delete-frame))) ;;;###autoload -(defun narf/evil-window-move-left () - "See `narf--evil-window-move'" +(defun narf/evil-window-resize (direction &optional count) (interactive) - (narf--evil-window-move 'left)) -;;;###autoload -(defun narf/evil-window-move-down () - "See `narf--evil-window-move'" - (interactive) - (narf--evil-window-move 'down)) -;;;###autoload -(defun narf/evil-window-move-up () - "See `narf--evil-window-move'" - (interactive) - (narf--evil-window-move 'up)) -;;;###autoload -(defun narf/evil-window-move-right () - "See `narf--evil-window-move'" - (interactive) - (narf--evil-window-move 'right)) + (let ((count (or count 1)) + (next-window (window-in-direction direction))) + (when (or (not next-window) (not (narf/real-buffer-p (window-buffer next-window)))) + (setq count (- count))) + (cond ((memq direction '(left right)) + (evil-window-increase-width count)) + ((memq direction '(above below)) + (evil-window-increase-height count))))) ;;;###autoload (defun narf/window-reorient () diff --git a/private/my-bindings.el b/private/my-bindings.el index c2b1656d9..e98b63410 100644 --- a/private/my-bindings.el +++ b/private/my-bindings.el @@ -46,6 +46,11 @@ "C-h" 'evil-window-left "C-l" 'evil-window-right + "A-j" (λ! (narf/evil-window-resize 'below)) + "A-k" (λ! (narf/evil-window-resize 'above)) + "A-h" (λ! (narf/evil-window-resize 'left)) + "A-l" (λ! (narf/evil-window-resize 'right)) + "C-" 'evil-emacs-state :e "C-" 'evil-normal-state @@ -276,10 +281,10 @@ "v" 'narf/evil-window-vsplit ;; Move window in one step - "H" 'narf/evil-window-move-left - "J" 'narf/evil-window-move-down - "K" 'narf/evil-window-move-up - "L" 'narf/evil-window-move-right + "H" (λ! (narf/evil-window-move 'left)) + "J" (λ! (narf/evil-window-move 'down)) + "K" (λ! (narf/evil-window-move 'up)) + "L" (λ! (narf/evil-window-move 'right)) "C-u" 'narf/undo-window-change "C-r" 'narf/redo-window-change