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))