diff --git a/modules/private/default/+bindings.el b/modules/private/default/+bindings.el index d03f58a6b..317453f44 100644 --- a/modules/private/default/+bindings.el +++ b/modules/private/default/+bindings.el @@ -233,7 +233,8 @@ :desc "Debugger" :n "d" #'+debug/open :desc "REPL" :n "r" #'+eval/open-repl :v "r" #'+eval:repl - :desc "Neotree" :n "n" #'+neotree/toggle + :desc "Neotree" :n "n" #'+neotree/open + :desc "Neotree: on this file" :n "N" #'+neotree/find-this-file :desc "Imenu sidebar" :nv "i" #'imenu-list-minor-mode :desc "Terminal" :n "t" #'+term/open-popup :desc "Terminal in project" :n "T" #'+term/open-popup-in-project diff --git a/modules/tools/neotree/autoload.el b/modules/tools/neotree/autoload.el index 4495b0480..917e0ed8e 100644 --- a/modules/tools/neotree/autoload.el +++ b/modules/tools/neotree/autoload.el @@ -1,8 +1,23 @@ ;;; tools/neotree/autoload.el -*- lexical-binding: t; -*- +;; `neotree-show' and `neotree-find' don't respect the current project, and open +;; neotree in `default-directory'. `+neotree/open' and `neotree/find-this-file' +;; will ensure the neotree pane is always rooted in the project root. + ;;;###autoload -(defun +neotree/toggle () - "Toggle the neotree window." +(defun +neotree/open () + "Open the neotree window in the current project." + (interactive) + (let ((path buffer-file-name) + (project-root (doom-project-root 'nocache))) + (require 'neotree) + (if (neo-global--window-exists-p) + (neotree-hide) + (neotree-dir project-root)))) + +;;;###autoload +(defun +neotree/find-this-file () + "Open the neotree window in the current project, and find the current file." (interactive) (let ((path buffer-file-name) (project-root (doom-project-root 'nocache)))