From 375b80cdf48ae2d8336d4693e9b3f7a21c1ff162 Mon Sep 17 00:00:00 2001 From: Vasilij Schneidermann Date: Sat, 25 Jun 2016 11:01:57 +0200 Subject: [PATCH] =?UTF-8?q?Add=20command=20for=20creating=20window=20confi?= =?UTF-8?q?gs=20=C3=A0=20la=20tmux?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- eyebrowse.el | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/eyebrowse.el b/eyebrowse.el index 06398f3..ddc6bde 100644 --- a/eyebrowse.el +++ b/eyebrowse.el @@ -186,6 +186,8 @@ If t, ask for confirmation." (define-key prefix-map (kbd "7") 'eyebrowse-switch-to-window-config-7) (define-key prefix-map (kbd "8") 'eyebrowse-switch-to-window-config-8) (define-key prefix-map (kbd "9") 'eyebrowse-switch-to-window-config-9) + (define-key prefix-map (kbd "c") 'eyebrowse-create-window-config) + (define-key prefix-map (kbd "C-c") 'eyebrowse-create-window-config) (define-key map eyebrowse-keymap-prefix prefix-map)) map) "Initial key map for `eyebrowse-mode'.") @@ -449,6 +451,30 @@ prefix argument to select a slot by its number." (interactive) (eyebrowse-switch-to-window-config 9)) +(defun eyebrowse-free-slot (slots) + "Returns a yet unoccupied slot. +The specific behaviour is tmux-like." + (let ((min (car slots))) + (if (> min 1) + 1 + (let (last cur done) + (while (and slots (not done)) + (setq last (car slots) + cur (cadr slots)) + (when (and last cur + (> (- cur last) 1)) + (setq done t)) + (setq slots (cdr slots))) + (1+ last))))) + +(defun eyebrowse-create-window-config () + "Creates a window config at a yet unoccupied slot." + (interactive) + (let* ((window-configs (eyebrowse--get 'window-configs)) + (slots (mapcar 'car window-configs)) + (slot (eyebrowse-free-slot slots))) + (eyebrowse-switch-to-window-config slot))) + ;;;###autoload (defun eyebrowse-setup-evil-keys () "Set up key bindings specific to Evil.