From 51c9e0a8e712670cb494c78b9eb8cf422914aa23 Mon Sep 17 00:00:00 2001 From: Zelong Kuang Date: Sat, 20 Dec 2025 15:13:13 +1100 Subject: [PATCH] Update --- .gitignore | 1 + init.el | 3 ++ lisp/init-better-default.el | 40 +++++++++++++++++++-------- lisp/init-treemacs.el | 55 +++++++++++++++++++++++++++++++++++++ lisp/init-workspace.el | 50 +++++++++++++++++++++++++++++++++ 5 files changed, 137 insertions(+), 12 deletions(-) create mode 100644 lisp/init-treemacs.el create mode 100644 lisp/init-workspace.el diff --git a/.gitignore b/.gitignore index e71cc7a..3b2b9b3 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,7 @@ .tern-port .yas-compiled-snippets.el flycheck_*.el +tabsession.el # generated by elisp packages at root /.local/ diff --git a/init.el b/init.el index 9b7e365..093141a 100644 --- a/init.el +++ b/init.el @@ -8,7 +8,10 @@ (require 'init-ui) (require 'init-bindings) +(require 'init-workspace) + (require 'init-dired) +(require 'init-treemacs) ;; (require 'init-dashboard) (require 'init-llm) diff --git a/lisp/init-better-default.el b/lisp/init-better-default.el index 138c2bf..04684ee 100644 --- a/lisp/init-better-default.el +++ b/lisp/init-better-default.el @@ -15,23 +15,39 @@ (setq custom-file (expand-file-name "~/.emacs.d/custom.el")) (add-hook 'elpaca-after-init-hook (lambda () (load custom-file 'no-error 'no-message))) -(server-mode 1) +(use-package server + :ensure nil + :hook (elpaca-after-init . server-mode)) -(global-display-line-numbers-mode) -(dolist (mode '(erc-mode-hook - circe-mode-hook - help-mode-hook - gud-mode-hook - vterm-mode-hook)) - (add-hook mode (lambda () (display-line-numbers-mode -1)))) -(setq display-line-numbers-type 'relative) +(use-package display-line-numbers + :ensure nil + :hook (elpaca-after-init . global-display-line-numbers-mode) + :config + (dolist (mode '(erc-mode-hook + circe-mode-hook + help-mode-hook + gud-mode-hook + treemacs-mode-hook + vterm-mode-hook)) + (add-hook mode (lambda () (display-line-numbers-mode -1)))) + (setq display-line-numbers-type 'relative) + ) (column-number-mode 1) -(global-subword-mode 1) -(show-paren-mode t) +(use-package subword + :ensure nil + :hook (elpaca-after-init . global-subword-mode)) + +(use-package paren + :ensure nil + :hook (elpaca-after-init . show-paren-mode)) (recentf-mode 1) -(setq recentf-max-saved-items 500) +(use-package recentf + :ensure nil + :hook (elpaca-after-init . recentf-mode) + :custom + (recentf-max-saved-items 500)) (setq-default cursor-type 'bar) (setq make-backup-files nil) diff --git a/lisp/init-treemacs.el b/lisp/init-treemacs.el new file mode 100644 index 0000000..961df53 --- /dev/null +++ b/lisp/init-treemacs.el @@ -0,0 +1,55 @@ +;; -*- lexical-binding: t; -*- +(use-package treemacs + :ensure t + :defer t + :custom-face + (cfrs-border-color ((t (:inherit posframe-border)))) + :init + (with-eval-after-load 'winum + (define-key winum-keymap (kbd "M-0") #'treemacs-select-window)) + :config + (treemacs-follow-mode t) + (treemacs-filewatch-mode t) + (treemacs-fringe-indicator-mode 'always) + (pcase (cons (not (null (executable-find "git"))) + (not (null (executable-find "python3")))) + (`(t . t) + (treemacs-git-mode 'deferred)) + (`(t . _) + (treemacs-git-mode 'simple))) + (treemacs-git-commit-diff-mode t) + (treemacs-hide-gitignored-files-mode t) + (setq treemacs-collapse-dirs (if treemacs-python-executable 3 0) + treemacs-missing-project-action 'remove + treemacs-user-mode-line-format 'none + treemacs-sorting 'alphabetic-asc + treemacs-follow-after-init t + treemacs-width 30 + treemacs-no-png-images 1) + :bind + (:map global-map + ("M-0" . treemacs-select-window) + ("C-x t 1" . treemacs-delete-other-windows) + ("C-c o p" . treemacs) + ("C-x t d" . treemacs-select-directory) + ("C-x t B" . treemacs-bookmark) + ("C-x t C-t" . treemacs-find-file) + ("C-x t M-t" . treemacs-find-tag))) + +(use-package treemacs-magit + :hook ((magit-post-commit + git-commit-post-finish + magit-post-stage + magit-post-unstage) + . treemacs-magit--schedule-update)) + +(use-package treemacs-tab-bar ;;treemacs-tab-bar if you use tab-bar-mode + :after (treemacs) + :ensure t + :config (treemacs-set-scope-type 'Tabs)) + +(use-package treemacs-nerd-icons + :demand t + :config (treemacs-nerd-icons-config)) + +(provide 'init-treemacs) diff --git a/lisp/init-workspace.el b/lisp/init-workspace.el new file mode 100644 index 0000000..3c31da8 --- /dev/null +++ b/lisp/init-workspace.el @@ -0,0 +1,50 @@ +;; -*- lexical-binding: t; -*- + +(use-package tabspaces + :functions tabspaces-mode + :hook (elpaca-after-init . tabspaces-mode) + :custom + (tab-bar-show nil) + + (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) + :config + (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)