From b257c7d20619a8dc4b7bbf73b6749eac5d4f5a5c Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Mon, 27 Jan 2020 03:55:12 +0000 Subject: [PATCH] feat(projects): Get treemacs working nicely with helm And also better configured treemacs in general. --- core/siren-core-modules.el | 5 +- modules/navigation/siren-helm.el | 34 +++++++++-- modules/projects/siren-projectile.el | 5 +- modules/projects/siren-treemacs.el | 80 +++++++++++++++----------- modules/version-control/siren-magit.el | 1 + modules/workspaces/siren-persp-mode.el | 1 + 6 files changed, 84 insertions(+), 42 deletions(-) diff --git a/core/siren-core-modules.el b/core/siren-core-modules.el index 4cc11b2..69b29d2 100644 --- a/core/siren-core-modules.el +++ b/core/siren-core-modules.el @@ -65,8 +65,9 @@ ;; Project management (require 'siren-editorconfig) (require 'siren-helm-projectile) -(require 'siren-neotree) (require 'siren-projectile) +(require 'siren-treemacs) +;; (require 'siren-neotree) ;; Language Servers (require 'siren-lsp) @@ -126,6 +127,7 @@ (require 'siren-writeroom) ;; Languages +(require 'siren-prog-mode) (require 'siren-coffee) (require 'siren-conf) (require 'siren-css) @@ -147,7 +149,6 @@ (require 'siren-markdown) (require 'siren-php) (require 'siren-plantuml) -(require 'siren-prog-mode) (require 'siren-ruby) (require 'siren-rust) (require 'siren-sass) diff --git a/modules/navigation/siren-helm.el b/modules/navigation/siren-helm.el index 9dfdb49..8f812d5 100644 --- a/modules/navigation/siren-helm.el +++ b/modules/navigation/siren-helm.el @@ -8,11 +8,13 @@ (use-package helm :defer t - :hook ((helm-minibuffer-set-up . siren-helm--hide-minibuffer-maybe) - (helm-after-initialize . siren-helm--toggle-source-header-line) - (helm-minibuffer-set-up . siren-helm--popwin-help-mode-off) - (helm-cleanup . siren-helm--popwin-help-mode-on) - (helm-cleanup . siren-helm--show-neotree-maybe)) + :hook + (helm-minibuffer-set-up . siren-helm--hide-minibuffer-maybe) + (helm-after-initialize . siren-helm--toggle-source-header-line) + (helm-minibuffer-set-up . siren-helm--popwin-help-mode-off) + (helm-cleanup . siren-helm--popwin-help-mode-on) + (helm-cleanup . siren-helm--show-neotree-maybe) + (helm-cleanup . siren-helm--show-treemacs-maybe) :custom (helm-autoresize-max-height 30) @@ -24,6 +26,7 @@ (helm-file-name-case-fold-search 'smart) (helm-split-window-default-side 'below) (siren-helm--did-hide-neotree nil) + (siren-helm--did-hide-treemacs nil) :init ;; From: https://www.reddit.com/r/emacs/comments/3asbyn/new_and_very_useful_helm_feature_enter_search/ @@ -68,8 +71,27 @@ (setq siren-helm--did-hide-neotree nil) (run-with-timer 0.01 nil #'neotree-show))) + (defun siren-helm--hide-treemacs (&rest plist) + (when (fboundp 'treemacs-get-local-window) + (let ((win (treemacs-get-local-window))) + (when win + (setq siren-helm--did-hide-treemacs t) + (delete-window win))))) + + (defun siren-helm--show-treemacs-maybe () + (when siren-helm--did-hide-treemacs + (setq siren-helm--did-hide-treemacs nil) + (run-with-timer 0.01 nil #'siren-helm--show-treemacs))) + + (defun siren-helm--show-treemacs () + (when (fboundp 'treemacs-select-window) + (let ((win (selected-window))) + (treemacs-select-window) + (select-window win)))) + :config - (advice-add 'helm :before 'siren-helm--hide-neotree)) + (advice-add 'helm :before 'siren-helm--hide-neotree) + (advice-add 'helm :before 'siren-helm--hide-treemacs)) (use-package helm-config :ensure helm diff --git a/modules/projects/siren-projectile.el b/modules/projects/siren-projectile.el index b7d34b0..3c45fe9 100644 --- a/modules/projects/siren-projectile.el +++ b/modules/projects/siren-projectile.el @@ -7,6 +7,7 @@ ;;; Code: (use-package projectile + :demand :bind ("C-c p p" . projectile-switch-project) ("C-c p k" . projectile-kill-buffers) @@ -52,8 +53,8 @@ (projectile-sort-order 'recently-active) :config - ;; Treat separate directories with Gemfiles within a single git repo as separate - ;; projects. + ;; Treat separate directories with Gemfiles within a single git repo as + ;; separate projects. (push "Gemfile" projectile-project-root-files-bottom-up) (projectile-mode t)) diff --git a/modules/projects/siren-treemacs.el b/modules/projects/siren-treemacs.el index e9bf217..0e4d2e6 100644 --- a/modules/projects/siren-treemacs.el +++ b/modules/projects/siren-treemacs.el @@ -6,48 +6,64 @@ ;;; Code: +(require 'siren-dired) +(require 'siren-lsp) +(require 'siren-magit) +(require 'siren-persp-mode) +(require 'siren-projectile) + (use-package treemacs - :defer t + :demand :bind - ([f8] . treemacs-toggle) - ("M-0" . treemacs-select-window) - ("C-c 1" . treemacs-delete-other-windows) - ;; ("M-m ft" . treemacs-toggle) - ;; ("M-m fT" . treemacs) - ;; ("M-m fB" . treemacs-bookmark) - ;; ("M-m f C-t" . treemacs-find-file) - ;; ("M-m f M-t" . treemacs-find-tag) + ("C-x C-p" . treemacs) + ("C-x p" . treemacs-select-window) + + :custom + (treemacs-change-root-without-asking t) + (treemacs-collapse-dirs 3) + (treemacs-follow-after-init t) + (treemacs-git-integration t) + (treemacs-goto-tag-strategy 'refetch-index) + (treemacs-indentation 2) + (treemacs-is-never-other-window nil) + (treemacs-never-persist nil) + (treemacs-show-hidden-files t) + (treemacs-silent-refresh nil) + (treemacs-sorting 'alphabetic-asc) + (treemacs-width 40) :config - (progn - (use-package treemacs-evil - :ensure t - :demand t) - (setq treemacs-follow-after-init t - treemacs-width 35 - treemacs-indentation 2 - treemacs-git-integration t - treemacs-collapse-dirs 3 - treemacs-silent-refresh nil - treemacs-change-root-without-asking t - treemacs-sorting 'alphabetic-desc - treemacs-show-hidden-files t - treemacs-never-persist nil - treemacs-is-never-other-window nil - treemacs-goto-tag-strategy 'refetch-index) + (treemacs-follow-mode t) + (treemacs-filewatch-mode t) - (treemacs-follow-mode t) - (treemacs-filewatch-mode t))) + (treemacs-define-doubleclick-action + 'file-node-open #'treemacs-visit-node-in-most-recently-used-window) + (treemacs-define-doubleclick-action + 'file-node-closed #'treemacs-visit-node-in-most-recently-used-window) + (treemacs-define-RET-action + 'file-node-open #'treemacs-visit-node-in-most-recently-used-window) + (treemacs-define-RET-action + 'file-node-closed #'treemacs-visit-node-in-most-recently-used-window)) (use-package treemacs-projectile - :defer t - :bind - ("C-x C-p" . treemacs-projectile) - ("C-x C-p" . treemacs-projectile-toggle) - + :demand + :requires (treemacs projectile) :custom (treemacs-header-function #'treemacs-projectile-create-header)) +(use-package treemacs-persp + :demand + :requires treemacs persp-mode) + +(use-package treemacs-magit + :demand + :requires treemacs magit) + +(use-package lsp-treemacs + :config + (lsp-treemacs-sync-mode 1) + (setq lsp-metals-treeview-show-when-views-received t)) + (provide 'siren-treemacs) ;;; siren-treemacs.el ends here diff --git a/modules/version-control/siren-magit.el b/modules/version-control/siren-magit.el index 48985e0..d344c1a 100644 --- a/modules/version-control/siren-magit.el +++ b/modules/version-control/siren-magit.el @@ -11,6 +11,7 @@ (require 'siren-flyspell) (use-package magit + :demand :bind ("C-x g". magit-status) diff --git a/modules/workspaces/siren-persp-mode.el b/modules/workspaces/siren-persp-mode.el index 2e44202..5165f56 100644 --- a/modules/workspaces/siren-persp-mode.el +++ b/modules/workspaces/siren-persp-mode.el @@ -7,6 +7,7 @@ ;;; Code: (use-package persp-mode + :demand :hook (after-init . persp-mode)