From 016ee8a225ef656bff6c46bef0fb12c1b4797d6f Mon Sep 17 00:00:00 2001 From: Zelong Kuang Date: Sun, 21 Dec 2025 12:57:53 +1100 Subject: [PATCH] Tabspaces --- init.el | 3 +-- lisp/init-workspace.el | 57 +++++++++++++++++++++++++++++++++--------- 2 files changed, 46 insertions(+), 14 deletions(-) diff --git a/init.el b/init.el index 10812e8..e85e23e 100644 --- a/init.el +++ b/init.el @@ -8,8 +8,7 @@ (require 'init-ui) (require 'init-bindings) -;; (require 'init-workspace) - +(require 'init-workspace) (require 'init-dired) ;; (require 'init-treemacs) ;; (require 'init-dashboard) diff --git a/lisp/init-workspace.el b/lisp/init-workspace.el index eb5314b..bd268d8 100644 --- a/lisp/init-workspace.el +++ b/lisp/init-workspace.el @@ -1,18 +1,51 @@ ;; -*- lexical-binding: t; -*- - -(use-package persp-mode - :hook (elpaca-after-init . persp-mode) + +(use-package tabspaces + :functions tabspaces-mode + :hook (elpaca-after-init . tabspaces-mode) :custom - (persp-keymap-prefix "w") - :config - (setq wg-morph-on nil) - (setq persp-autokill-buffer-on-remove 'kill-weak) - (add-hook 'window-setup-hook #'(lambda () (persp-mode 1)))) + (tab-bar-show nil) -(use-package projectile - :hook (elpaca-after-init . projectile-mode) + (tabspaces-use-filtered-buffers-as-default t) + (tabspaces-default-tab "Default") + (tabspaces-remove-to-default t) + (tabspaces-include-buffers '("*scratch*" "*Messages*")) + (tabspaces-exclude-buffers '("*eat*" "*vterm*" "*shell*" "*eshell*")) + ;; sessions + (tabspaces-session t) + (tabspaces-session-auto-restore t) + (tabspaces-keymap-prefix "C-c w") :config - ;; Recommended keymap prefix on Windows/Linux - (define-key projectile-mode-map (kbd "C-c p") 'projectile-command-map)) + (with-no-warnings + ;; Filter Buffers for Consult-Buffer + (with-eval-after-load 'consult + ;; hide full buffer list (still available with "b" prefix) + (consult-customize consult--source-buffer :hidden t :default nil) + ;; set consult-workspace buffer list + (defvar consult--source-workspace + (list :name "Workspace Buffer" + :narrow ?w + :history 'buffer-name-history + :category 'buffer + :state #'consult--buffer-state + :default t + :items (lambda () (consult--buffer-query + :predicate #'tabspaces--local-buffer-p + :sort 'visibility + :as #'buffer-name))) + "Set workspace buffer list for consult-buffer.") + (add-to-list 'consult-buffer-sources 'consult--source-workspace)) + + (defun my-tabspaces-delete-childframe (&rest _) + "Delete all child frames." + (ignore-errors + (posframe-delete-all))) + (advice-add #'tabspaces-save-session :before #'my-tabspaces-delete-childframe) + + (defun my-tabspaces-burry-window (&rest _) + "Burry *Messages* buffer." + (ignore-errors + (quit-windows-on messages-buffer-name))) + (advice-add #'tabspaces-restore-session :after #'my-tabspaces-burry-window))) (provide 'init-workspace)