From d0cec17919f969483b1982cf01b7b8cdccaf575e Mon Sep 17 00:00:00 2001 From: justbur Date: Sun, 7 Feb 2016 21:13:32 -0500 Subject: [PATCH] ivy: spacemacs layouts support - port helm-perspectives - port persp switch buffer - port persp-close[kill]-other to use ivy - layouts-ts: Make help more consistent - layouts-ts: Reorganize docstring Instead of one big list, try to organize into sections to make it easier to find the right key --- layers/+completion/spacemacs-ivy/packages.el | 62 +++++++++++++++++- .../spacemacs-layouts/funcs.el | 16 ----- .../spacemacs-layouts/packages.el | 63 +++++++++++-------- 3 files changed, 98 insertions(+), 43 deletions(-) diff --git a/layers/+completion/spacemacs-ivy/packages.el b/layers/+completion/spacemacs-ivy/packages.el index 8e2d4fef8..731b4a45f 100644 --- a/layers/+completion/spacemacs-ivy/packages.el +++ b/layers/+completion/spacemacs-ivy/packages.el @@ -412,7 +412,67 @@ Current Action: %s(ivy-action-name) ("t" (setq truncate-lines (not truncate-lines))) ("f" ivy-toggle-case-fold) ("o" ivy-occur :exit t)) - (define-key ivy-minibuffer-map "\C-o" 'spacemacs/ivy-transient-state/body)))) + (define-key ivy-minibuffer-map "\C-o" 'spacemacs/ivy-transient-state/body) + + (defun spacemacs/ivy-perspectives () + "Control Panel for perspectives. Has many actions. +If match is found +\(default) Select perspective +c: Close Perspective(s) <- mark with C-SPC to close more than one-window +k: Kill Perspective(s) + +If match is not found + Creates perspective + +Closing doesn't kill buffers inside the perspective while killing +perspectives does." + (interactive) + (ivy-read "Perspective: " + (persp-names) + :caller 'spacemacs/ivy-perspectives + :action (lambda (name) + (let ((persp-reset-windows-on-nil-window-conf t)) + (persp-switch name) + (unless + (member name + (persp-names-current-frame-fast-ordered)) + (spacemacs/home)))))) + + (ivy-set-actions + 'spacemacs/ivy-perspectives + '(("c" persp-kill-without-buffers "Close perspective(s)") + ("k" persp-kill "Kill perspective(s)"))) + + (defun spacemacs/ivy-persp-buffer () + "Switch to perspective buffer using ivy." + (interactive) + (let (ivy-use-virtual-buffers) + (with-persp-buffer-list () + (call-interactively 'ivy-switch-buffer)))) + + (defun spacemacs/ivy-persp-close-other () + "Kills perspectives without killing the buffers" + (interactive) + (ivy-read (format "Close perspective [current %s]: " + (spacemacs//current-layout-name)) + (persp-names) + :action 'persp-kill-without-buffers)) + + (defun spacemacs/ivy-persp-kill-other () + "Kills perspectives with all their buffers" + (interactive) + (ivy-read (format "Kill perspective [current %s]: " + (spacemacs//current-layout-name)) + (persp-names) + :action 'persp-kill)) + + (setq spacemacs-layouts-transient-state-remove-bindings + '("b" "l" "C" "X")) + (setq spacemacs-layouts-transient-state-add-bindings + '(("b" spacemacs/ivy-persp-buffer) + ("l" spacemacs/ivy-perspectives) + ("C" spacemacs/ivy-persp-close-other :exit t) + ("X" spacemacs/ivy-persp-kill-other :exit t)))))) (defun spacemacs-ivy/init-smex () (use-package smex diff --git a/layers/+window-management/spacemacs-layouts/funcs.el b/layers/+window-management/spacemacs-layouts/funcs.el index 6b6a0f55b..59436e5f6 100644 --- a/layers/+window-management/spacemacs-layouts/funcs.el +++ b/layers/+window-management/spacemacs-layouts/funcs.el @@ -117,22 +117,6 @@ perspectives does." (projectile-switch-project-by-name project))))))) :buffer "*Helm Projectile Layouts*")) -(defun spacemacs/ivy-persp-switch-project (arg) - (interactive "P") - (ivy-read "Switch to Project Perspective:" - (if (projectile-project-p) - (cons (abbreviate-file-name (projectile-project-root)) - (projectile-relevant-known-projects)) - projectile-known-projects) - :action (lambda (project) - (let ((persp-reset-windows-on-nil-window-conf t)) - (persp-switch project) - (let ((projectile-completion-system 'ivy)) - (projectile-switch-project-by-name project)))) - ) - - ) - ;; Autosave ---------------------------------------------------------------- (defun spacemacs//layout-autosave () diff --git a/layers/+window-management/spacemacs-layouts/packages.el b/layers/+window-management/spacemacs-layouts/packages.el index 12451849b..071ff2675 100644 --- a/layers/+window-management/spacemacs-layouts/packages.el +++ b/layers/+window-management/spacemacs-layouts/packages.el @@ -88,37 +88,35 @@ (spacemacs//layout-format-name persp (position persp persp-list))) persp-list " | ")))) (concat formatted-persp-list - (when (equal 1 spacemacs--layouts-ms-doc-toggle) - spacemacs--layouts-ms-documentation)))) + (if (equal 1 spacemacs--layouts-ms-doc-toggle) + spacemacs--layouts-ms-documentation + (concat + "\n [" + (propertize "?" 'face 'hydra-face-red) + "] toggle help"))))) (spacemacs|define-transient-state layouts :title "Layouts Transient State" :additional-docs (spacemacs--layouts-ms-documentation . - " - - [_?_]^^^^ toggle this help - [_0_,_9_]^^ switch to nth layout - [__]^^^^ switch to the last - [_A_]^^^^ add all buffers from another layout - [_a_]^^^^ add all the buffers from another layout in the current one - [_b_]^^^^ select a buffer in the current layout - [_d_]^^^^ close the current layout and keep its buffers - [_D_]^^^^ close the other layouts and keep their buffers - [_h_]^^^^ go to default layout - [_l_]^^^^ select/create a layout with helm - [_L_]^^^^ load layouts from file - [_n_/_C-l_]^^ next layout in list - [_N_/_p_/_C-h_] previous layout in list - [_o_]^^^^ open a custom layout - [_r_]^^^^ remove current buffer from layout - [_R_]^^^^ rename current layout - [_s_]^^^^ save all layouts - [_S_]^^^^ save layouts by names - [_t_]^^^^ show a buffer without adding it to current layout - [_w_]^^^^ workspaces micro-state (needs eyebrowse layer enabled) - [_x_]^^^^ kill current layout with its buffers - [_X_]^^^^ kill other layouts with their buffers") + "\n + Go to^^^^^^ Add/Remove/Rename^^ +--^-^--^^^^----------------------- --^-^--------------------------- + [_b_]^^^^ buffer in layout [_a_] add buffer + [_h_]^^^^ default layout [_A_] add all from layout + [_o_]^^^^ custom layout [_r_] remove current buffer + [_l_]^^^^ layout w/helm/ivy [_d_] close current layout + [_L_]^^^^ layouts in file [_D_] close other layout + [_0_,_9_]^^ nth layout [_x_] kill current w/buffers + [_n_/_C-l_]^^ next layout [_X_] kill other w/buffers + [_N_/_p_/_C-h_] prev layout [_R_] rename current layout + [__]^^^^ last layout +--^^^^^^^^---------------------------------------------------------- + [_s_/_S_] save all layouts/save by names + [_t_]^^ show a buffer without adding it to current layout + [_w_]^^ workspaces micro-state (requires eyebrowse layer) + [_?_]^^ toggle help +") :bindings ;; need to exit in case number doesn't exist ("?" spacemacs//layouts-ms-toggle-doc) @@ -356,5 +354,18 @@ current perspective." "pl" 'spacemacs/helm-persp-switch-project)) (defun spacemacs-layouts/post-init-swiper () + (defun spacemacs/ivy-persp-switch-project (arg) + (interactive "P") + (ivy-read "Switch to Project Perspective: " + (if (projectile-project-p) + (cons (abbreviate-file-name (projectile-project-root)) + (projectile-relevant-known-projects)) + projectile-known-projects) + :action (lambda (project) + (let ((persp-reset-windows-on-nil-window-conf t)) + (persp-switch project) + (let ((projectile-completion-system 'ivy)) + (projectile-switch-project-by-name project)))))) + (spacemacs/set-leader-keys "pl" 'spacemacs/ivy-persp-switch-project))