mirror of
https://github.com/jimeh/.emacs.d.git
synced 2026-02-19 13:46:41 +00:00
Persp-mode doesn't quite manage to restore magit buffers correctly, so I've opted to have it ignore any and all magit buffers when performing it's auto-save. It is possible to configure it to know how to save and load the magit-status buffer for example, but the snippet for it from persp-mode's readme doesn't fully restore the buffer as is. And magit has many different kinds of buffers, so I've simply opted for having all ignored.
93 lines
3.1 KiB
EmacsLisp
93 lines
3.1 KiB
EmacsLisp
;;; siren-persp-mode.el --- jimeh's Emacs Siren: persp-mode configuration.
|
|
|
|
;;; Commentary:
|
|
|
|
;; Basic configuration for persp-mode.
|
|
|
|
;;; Code:
|
|
|
|
(use-package persp-mode
|
|
:hook
|
|
(after-init . persp-mode)
|
|
|
|
:bind
|
|
("s-}" . persp-next)
|
|
("s-{" . persp-prev)
|
|
(:map persp-mode-map
|
|
("C-z n" . persp-next)
|
|
("C-z C-n" . persp-next)
|
|
("C-z p" . persp-prev)
|
|
("C-z C-p" . persp-prev)
|
|
("C-z s" . persp-frame-switch)
|
|
("C-z C-s" . persp-frame-switch)
|
|
("C-z S" . persp-window-switch)
|
|
("C-z r" . persp-rename)
|
|
("C-z C-r" . persp-rename)
|
|
("C-z c" . persp-copy)
|
|
("C-z C-c" . persp-copy)
|
|
("C-z C" . persp-kill)
|
|
("C-z z" . persp-save-and-kill)
|
|
("C-z a" . persp-add-buffer)
|
|
("C-z C-a" . persp-add-buffer)
|
|
("C-z b" . persp-switch-to-buffer)
|
|
("C-z C-b" . siren-persp-mode-ibuffer)
|
|
("C-z t" . persp-temporarily-display-buffer)
|
|
("C-z i" . persp-import-buffers)
|
|
("C-z I" . persp-import-win-conf)
|
|
("C-z k" . persp-remove-buffer)
|
|
("C-z C-k" . persp-remove-buffer)
|
|
("C-z K" . persp-kill-buffer)
|
|
("C-z w" . persp-save-state-to-file)
|
|
("C-z W" . persp-save-to-file-by-names)
|
|
("C-z l" . persp-load-state-from-file)
|
|
("C-z L" . persp-load-from-file-by-names)
|
|
("C-z ;" . siren-persp-mode-show-current-perspective-name)
|
|
("C-z C-;" . siren-persp-mode-show-current-perspective-name))
|
|
|
|
:custom
|
|
(persp-auto-save-num-of-backups 10)
|
|
(persp-autokill-buffer-on-remove 'kill-weak)
|
|
(persp-interactive-completion-system 'ido)
|
|
(persp-keymap-prefix "")
|
|
(persp-nil-name "nil")
|
|
|
|
:init
|
|
;; Do not auto save/load in terminal. My main instance of Emacs runs in GUI,
|
|
;; terminal based instances are for smaller random things.
|
|
(when (not window-system)
|
|
(setq persp-auto-resume-time -1
|
|
persp-auto-save-opt 0))
|
|
|
|
(defun siren-persp-mode-filter-magit-buffers (buf)
|
|
(string-match "^magit.*:" (buffer-name buf)))
|
|
|
|
(defun siren-persp-mode-ibuffer (arg)
|
|
(interactive "P")
|
|
(with-persp-buffer-list () (ibuffer arg)))
|
|
|
|
(defun siren-persp-mode-show-current-perspective-name (&rest _)
|
|
"Show current perspectives, highlighting the active one."
|
|
(interactive)
|
|
(let ((perspectives (persp-names-current-frame-fast-ordered))
|
|
(active-persp-name (safe-persp-name (get-current-persp)))
|
|
(output ""))
|
|
(dolist (current-name perspectives)
|
|
(message "%s" current-name)
|
|
(setq output
|
|
(concat output (if (string= active-persp-name current-name)
|
|
(propertize current-name
|
|
'face 'persp-face-lighter-default)
|
|
current-name)
|
|
" ")))
|
|
(message "perspectives: %s" output)))
|
|
|
|
:config
|
|
(add-to-list 'persp-common-buffer-filter-functions
|
|
'siren-persp-mode-filter-magit-buffers)
|
|
|
|
(add-hook 'persp-activated-functions
|
|
#'siren-persp-mode-show-current-perspective-name))
|
|
|
|
(provide 'siren-persp-mode)
|
|
;;; siren-persp-mode.el ends here
|