f9c74e2b58
Update current layout's workspaces before saving layouts to file (fixes 7214). Load current layout's workspaces after loading layouts from file, if it's one of the loaded layouts (fixes 6979).
223 lines
9.7 KiB
EmacsLisp
223 lines
9.7 KiB
EmacsLisp
;;; packages.el --- Spacemacs Layouts Layer packages File for Spacemacs
|
||
;;
|
||
;; Copyright (c) 2012-2016 Sylvain Benner & Contributors
|
||
;;
|
||
;; Author: Sylvain Benner <sylvain.benner@gmail.com>
|
||
;; URL: https://github.com/syl20bnr/spacemacs
|
||
;;
|
||
;; This file is not part of GNU Emacs.
|
||
;;
|
||
;;; License: GPLv3
|
||
|
||
(setq spacemacs-layouts-packages
|
||
'(eyebrowse
|
||
helm
|
||
persp-mode
|
||
spaceline
|
||
swiper))
|
||
|
||
|
||
|
||
(defun spacemacs-layouts/init-eyebrowse ()
|
||
(use-package eyebrowse
|
||
:init
|
||
(progn
|
||
(setq eyebrowse-wrap-around t)
|
||
(eyebrowse-mode)
|
||
;; transient state
|
||
(spacemacs|transient-state-format-hint workspaces
|
||
spacemacs--workspaces-ts-full-hint
|
||
"\n\n
|
||
Go to^^^^^^ Actions^^
|
||
─────^^^^^^─────────────────────── ───────^^──────────────────────
|
||
[_0_,_9_]^^ nth/new workspace [_d_] close current workspace
|
||
[_C-0_,_C-9_]^^ nth/new workspace [_R_] rename current workspace
|
||
[_<tab>_]^^^^ last workspace [_?_] toggle help\n
|
||
[_l_]^^^^ layouts
|
||
[_n_/_C-l_]^^ next workspace
|
||
[_N_/_p_/_C-h_] prev workspace\n")
|
||
|
||
(spacemacs|define-transient-state workspaces
|
||
:title "Workspaces Transient State"
|
||
:hint-is-doc t
|
||
:dynamic-hint (spacemacs//workspaces-ts-hint)
|
||
:bindings
|
||
("?" spacemacs//workspaces-ts-toggle-hint)
|
||
("0" eyebrowse-switch-to-window-config-0 :exit t)
|
||
("1" eyebrowse-switch-to-window-config-1 :exit t)
|
||
("2" eyebrowse-switch-to-window-config-2 :exit t)
|
||
("3" eyebrowse-switch-to-window-config-3 :exit t)
|
||
("4" eyebrowse-switch-to-window-config-4 :exit t)
|
||
("5" eyebrowse-switch-to-window-config-5 :exit t)
|
||
("6" eyebrowse-switch-to-window-config-6 :exit t)
|
||
("7" eyebrowse-switch-to-window-config-7 :exit t)
|
||
("8" eyebrowse-switch-to-window-config-8 :exit t)
|
||
("9" eyebrowse-switch-to-window-config-9 :exit t)
|
||
("C-0" eyebrowse-switch-to-window-config-0)
|
||
("C-1" eyebrowse-switch-to-window-config-1)
|
||
("C-2" eyebrowse-switch-to-window-config-2)
|
||
("C-3" eyebrowse-switch-to-window-config-3)
|
||
("C-4" eyebrowse-switch-to-window-config-4)
|
||
("C-5" eyebrowse-switch-to-window-config-5)
|
||
("C-6" eyebrowse-switch-to-window-config-6)
|
||
("C-7" eyebrowse-switch-to-window-config-7)
|
||
("C-8" eyebrowse-switch-to-window-config-8)
|
||
("C-9" eyebrowse-switch-to-window-config-9)
|
||
("<tab>" eyebrowse-last-window-config)
|
||
("C-h" eyebrowse-prev-window-config)
|
||
("C-i" eyebrowse-last-window-config)
|
||
("C-l" eyebrowse-next-window-config)
|
||
("d" eyebrowse-close-window-config)
|
||
("l" spacemacs/layouts-transient-state/body :exit t)
|
||
("n" eyebrowse-next-window-config)
|
||
("N" eyebrowse-prev-window-config)
|
||
("p" eyebrowse-prev-window-config)
|
||
("R" spacemacs/workspaces-ts-rename :exit t)
|
||
("w" eyebrowse-switch-to-window-config :exit t))
|
||
;; note: we don't need to declare the `SPC l w' binding, it is
|
||
;; declare in the layout transient state
|
||
(spacemacs/set-leader-keys "bW" 'spacemacs/goto-buffer-workspace)
|
||
;; hooks
|
||
(add-hook 'persp-before-switch-functions
|
||
#'spacemacs/update-eyebrowse-for-perspective)
|
||
(add-hook 'eyebrowse-post-window-switch-hook
|
||
#'spacemacs/save-eyebrowse-for-perspective)
|
||
(add-hook 'persp-activated-functions
|
||
#'spacemacs/load-eyebrowse-for-perspective)
|
||
(add-hook 'persp-before-save-state-to-file-functions #'spacemacs/update-eyebrowse-for-perspective)
|
||
(add-hook 'persp-after-load-state-functions #'spacemacs/load-eyebrowse-after-loading-layout)
|
||
;; vim-style tab switching
|
||
(define-key evil-motion-state-map "gt" 'eyebrowse-next-window-config)
|
||
(define-key evil-motion-state-map "gT" 'eyebrowse-prev-window-config))))
|
||
|
||
|
||
|
||
(defun spacemacs-layouts/post-init-helm ()
|
||
(spacemacs/set-leader-keys
|
||
"pl" 'spacemacs/helm-persp-switch-project))
|
||
|
||
|
||
|
||
(defun spacemacs-layouts/init-persp-mode ()
|
||
(use-package persp-mode
|
||
:diminish persp-mode
|
||
:init
|
||
(progn
|
||
(setq persp-auto-resume-time (if (or dotspacemacs-auto-resume-layouts
|
||
spacemacs-force-resume-layouts)
|
||
1 -1)
|
||
persp-nil-name dotspacemacs-default-layout-name
|
||
persp-reset-windows-on-nil-window-conf nil
|
||
persp-set-last-persp-for-new-frames nil
|
||
persp-save-dir spacemacs-layouts-directory
|
||
persp-set-ido-hooks t)
|
||
|
||
(defun spacemacs//activate-persp-mode ()
|
||
"Always activate persp-mode, unless it is already active.
|
||
(e.g. don't re-activate during `dotspacemacs/sync-configuration-layers' -
|
||
see issues #5925 and #3875)"
|
||
(unless (bound-and-true-p persp-mode)
|
||
(persp-mode)))
|
||
(spacemacs/defer-until-after-user-config #'spacemacs//activate-persp-mode)
|
||
|
||
;; layouts transient state
|
||
;; TODO move helm specific key bindings to helm layer
|
||
;; (see ivy for how to do it)
|
||
(spacemacs|transient-state-format-hint layouts
|
||
spacemacs--layouts-ts-full-hint
|
||
"\n\n
|
||
Go to^^^^^^ Actions^^
|
||
─────^^^^^^────────────────────────────── ───────^^──────────────────────────────────────────────────
|
||
[_0_,_9_]^^ nth/new layout [_a_]^^ add buffer
|
||
[_C-0_,_C-9_]^^ nth/new layout [_A_]^^ add all from layout
|
||
[_<tab>_]^^^^ last layout [_d_]^^ close current layout
|
||
[_b_]^^^^ buffer in layout [_D_]^^ close other layout
|
||
[_h_]^^^^ default layout [_r_]^^ remove current buffer
|
||
[_l_]^^^^ layout w/helm/ivy [_R_]^^ rename current layout
|
||
[_L_]^^^^ layouts in file [_s_/_S_] save all layouts/save by names
|
||
[_n_/_C-l_]^^ next layout [_t_]^^ show a buffer without adding it to current layout
|
||
[_N_/_p_/_C-h_] prev layout [_x_]^^ kill current w/buffers
|
||
[_o_]^^^^ custom layout [_X_]^^ kill other w/buffers
|
||
[_w_]^^^^ workspaces transient state [_?_]^^ toggle help\n")
|
||
|
||
(spacemacs|define-transient-state layouts
|
||
:title "Layouts Transient State"
|
||
:hint-is-doc t
|
||
:dynamic-hint (spacemacs//layouts-ts-hint)
|
||
:bindings
|
||
;; need to exit in case number doesn't exist
|
||
("?" spacemacs//layouts-ts-toggle-hint)
|
||
("1" spacemacs/persp-switch-to-1 :exit t)
|
||
("2" spacemacs/persp-switch-to-2 :exit t)
|
||
("3" spacemacs/persp-switch-to-3 :exit t)
|
||
("4" spacemacs/persp-switch-to-4 :exit t)
|
||
("5" spacemacs/persp-switch-to-5 :exit t)
|
||
("6" spacemacs/persp-switch-to-6 :exit t)
|
||
("7" spacemacs/persp-switch-to-7 :exit t)
|
||
("8" spacemacs/persp-switch-to-8 :exit t)
|
||
("9" spacemacs/persp-switch-to-9 :exit t)
|
||
("0" spacemacs/persp-switch-to-0 :exit t)
|
||
("C-1" spacemacs/persp-switch-to-1)
|
||
("C-2" spacemacs/persp-switch-to-2)
|
||
("C-3" spacemacs/persp-switch-to-3)
|
||
("C-4" spacemacs/persp-switch-to-4)
|
||
("C-5" spacemacs/persp-switch-to-5)
|
||
("C-6" spacemacs/persp-switch-to-6)
|
||
("C-7" spacemacs/persp-switch-to-7)
|
||
("C-8" spacemacs/persp-switch-to-8)
|
||
("C-9" spacemacs/persp-switch-to-9)
|
||
("C-0" spacemacs/persp-switch-to-0)
|
||
("<tab>" spacemacs/jump-to-last-layout)
|
||
("<return>" nil :exit t)
|
||
("C-h" persp-prev)
|
||
("C-l" persp-next)
|
||
("a" persp-add-buffer :exit t)
|
||
("A" persp-import-buffers :exit t)
|
||
("b" spacemacs/persp-helm-mini :exit t)
|
||
("d" spacemacs/layouts-ts-close)
|
||
("D" spacemacs/layouts-ts-close-other :exit t)
|
||
("h" spacemacs/layout-goto-default :exit t)
|
||
("l" spacemacs/helm-perspectives :exit t)
|
||
("L" persp-load-state-from-file :exit t)
|
||
("n" persp-next)
|
||
("N" persp-prev)
|
||
("o" spacemacs/select-custom-layout :exit t)
|
||
("p" persp-prev)
|
||
("r" persp-remove-buffer :exit t)
|
||
("R" spacemacs/layouts-ts-rename :exit t)
|
||
("s" persp-save-state-to-file :exit t)
|
||
("S" persp-save-to-file-by-names :exit t)
|
||
("t" persp-temporarily-display-buffer :exit t)
|
||
("w" spacemacs/workspaces-transient-state/body :exit t)
|
||
("x" spacemacs/layouts-ts-kill)
|
||
("X" spacemacs/layouts-ts-kill-other :exit t))
|
||
(spacemacs/set-leader-keys "l" 'spacemacs/layouts-transient-state/body)
|
||
;; custom layouts
|
||
(spacemacs|define-custom-layout "@Spacemacs"
|
||
:binding "e"
|
||
:body
|
||
(spacemacs/find-dotfile)))
|
||
:config
|
||
(progn
|
||
(defadvice persp-activate (before spacemacs//save-toggle-layout activate)
|
||
(setq spacemacs--last-selected-layout persp-last-persp-name))
|
||
(add-hook 'persp-mode-hook 'spacemacs//layout-autosave)
|
||
(spacemacs/declare-prefix "b" "persp-buffers")
|
||
(spacemacs/declare-prefix "B" "global-buffers")
|
||
;; Override SPC TAB to only change buffers in perspective
|
||
(spacemacs/set-leader-keys
|
||
"TAB" 'spacemacs/alternate-buffer-in-persp
|
||
"ba" 'persp-add-buffer
|
||
"br" 'persp-remove-buffer
|
||
"Bb" 'spacemacs-layouts/non-restricted-buffer-list))))
|
||
|
||
|
||
|
||
(defun spacemacs-layouts/post-init-spaceline ()
|
||
(setq spaceline-display-default-perspective
|
||
dotspacemacs-display-default-layout))
|
||
|
||
|
||
|
||
(defun spacemacs-layouts/post-init-swiper ()
|
||
(spacemacs/set-leader-keys "pl" 'spacemacs/ivy-persp-switch-project))
|