From 213c53f02058763d6815e80e1f6fe9a84b098b13 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sun, 8 Nov 2015 17:57:41 -0500 Subject: [PATCH] Polish workgroups2 integration: tie frames to workgroups --- core/core-workgroups.el | 2 ++ core/lib/defuns-workgroup.el | 15 ++++++++++++++- private/my-bindings.el | 26 +++++++++++++++++++------- private/my-commands.el | 6 +++--- 4 files changed, 38 insertions(+), 11 deletions(-) diff --git a/core/core-workgroups.el b/core/core-workgroups.el index e8c3ec2a6..ee27b8507 100644 --- a/core/core-workgroups.el +++ b/core/core-workgroups.el @@ -28,6 +28,8 @@ (candidates . wg-workgroup-names) (action . narf/wg-helm-switch-to-workgroup))) + (defvar narf-wg-frames '()) + (after! projectile ;; Turns projectile switch-project interface (or helm's interface to it) ;; create a new workgroup for the new project. diff --git a/core/lib/defuns-workgroup.el b/core/lib/defuns-workgroup.el index 2f942f3e4..0362c915e 100644 --- a/core/lib/defuns-workgroup.el +++ b/core/lib/defuns-workgroup.el @@ -32,6 +32,7 @@ ;;;###autoload (autoload 'narf:workgroup-new "defuns-workgroup" nil t) (evil-define-command narf:workgroup-new (bang name) + "Create a new workgroup. If BANG, clone the current one to it." (interactive "") (unless name (user-error "No name specified for new workgroup")) @@ -44,6 +45,18 @@ (interactive "") (wg-rename-workgroup new-name)) +;;;###autoload (autoload 'narf:workgroup-delete "defuns-workgroup" nil t) +(evil-define-command narf:workgroup-delete (bang &optional name) + (interactive "") + (let ((wg-name name)) + (when (or bang (eq name "")) + (setq wg-name (wg-read-workgroup-name))) + (let ((wg (wg-get-workgroup name))) + (if (eq wg (wg-current-workgroup)) + (wg-kill-workgroup) + (wg-delete-workgroup wg)) + (message "Deleted workgroup: %s" name)))) + ;;;###autoload (defun narf:kill-other-workgroups () "Kill all other workgroups." @@ -63,7 +76,7 @@ (if (not workgroup) wg-nowg-string (wg-element-display workgroup - (format "%d %s" index (wg-workgroup-name workgroup)) + (format "%d %s" (1+ index) (wg-workgroup-name workgroup)) 'wg-current-workgroup-p 'wg-previous-workgroup-p))) (wg-workgroup-list))))) diff --git a/private/my-bindings.el b/private/my-bindings.el index c4c49630d..8cb4b17aa 100644 --- a/private/my-bindings.el +++ b/private/my-bindings.el @@ -18,19 +18,31 @@ "M-;" 'eval-expression "M-=" 'text-scale-increase "M--" 'text-scale-decrease - "M-w" 'evil-window-delete "M-/" 'evil-commentary-line "M-b" 'narf:build "M-t" 'helm-projectile-find-file "A-`" 'narf-switch-to-iterm "C-`" 'narf/popwin-toggle - "M-n" (λ (switch-to-buffer (generate-new-buffer "*new*"))) - ;; Disable nlinum to fix elusive "invalid face linum" bug - "M-N" (λ (let ((nlinum-p (and (featurep 'nlinum) global-nlinum-mode))) - (if nlinum-p (global-nlinum-mode -1)) - (new-frame) - (if nlinum-p (global-nlinum-mode 1)))) + "M-w" 'evil-window-delete + "M-W" (λ (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)))) + + "M-n" (λ (switch-to-buffer (generate-new-buffer "*new*"))) + "M-N" (λ (let ((nlinum-p (and (featurep 'nlinum) + (memq 'nlinum--setup-window window-configuration-change-hook)))) + ;; Disable nlinum to fix elusive "invalid face linum" bug + (remove-hook 'window-configuration-change-hook 'nlinum--setup-window t) + (let ((frame (new-frame)) + (frame-name (format "*new-%s*" (length narf-wg-frames)))) + (with-selected-frame frame + (wg-create-workgroup frame-name t) + (add-to-list 'narf-wg-frames (cons frame frame-name)))) + (when nlinum-p + (add-hook 'window-configuration-change-hook 'nlinum--setup-window nil t)))) ;; Simpler window navigation "C-j" 'evil-window-down diff --git a/private/my-commands.el b/private/my-commands.el index 94ad94ae8..ccaeab480 100644 --- a/private/my-commands.el +++ b/private/my-commands.el @@ -52,12 +52,12 @@ (exmap "ss[ave]" 'narf:save-session) (exmap "wg" 'narf:workgroup-display) (exmap "tab" 'narf:workgroup-display) - (exmap "t[ab]new" 'narf:workgroup-new) - (exmap "tabre[name]" 'narf:workgroup-rename) + (exmap "tabn[ew]" 'narf:workgroup-new) + (exmap "tabr[ename]" 'narf:workgroup-rename) (exmap "tabn[ext]" 'wg-switch-to-workgroup-right) (exmap "tabp[rev]" 'wg-switch-to-workgroup-left) (exmap "tabl[ast]" 'wg-switch-to-previous-workgroup) - (exmap "tabc[lose]" 'wg-kill-workgroup) + (exmap "tabq[uit]" 'narf:workgroup-delete) (exmap "k[ill]w" 'wg-kill-workgroup) (exmap "k[ill]ow" 'narf:kill-other-workgroups))