aboutsummaryrefslogtreecommitdiffstats
path: root/modules/init-neotree.el
blob: dfa5d44e48b21998348a1dfd47bbafd2e37f863c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
;;; init-neotree.el --- .Emacs Configuration -*- lexical-binding: t -*-
;;; Commentary:
;;

;;; Code:
;;-----------------------------------
;; Neotree - NerdTree for Vim
;;-----------------------------------

(use-package shrink-path
  :ensure t)

(use-package neotree
  :ensure t
  :pin "MELPA"
  :commands (neotree-show
             neotree-hide
             neotree-toggle
             neotree-dir
             neotree-find
             neo-global--with-buffer
             neo-global--window-exists-p)
  :bind (([f8] . neotree-toggle)
         (:map neotree-mode-map
               ("<C-return>" . neotree-change-root)
               ("C" . neotree-change-root)
               ("c" . neotree-create-node)
               ("+" . neotree-create-node)
               ("d" . neotree-delete-node)
               ("r" . neotree-rename-node)))
  :config
  (when (and (require 'neotree nil t)
             (fboundp 'off-p))
    (setq neo-create-file-auto-open nil
          neo-auto-indent-point nil
          neo-autorefresh t
          neo-smart-open nil
          neo-mode-line-type 'none
          neo-window-width 25
          neo-window-fixed-size nil
          neo-show-updir-line nil
          neo-theme (if (display-graphic-p) 'icons 'arrow)
          neo-banner-message nil
          neo-confirm-create-file #'off-p
          neo-confirm-create-directory #'off-p
          neo-show-hidden-files nil
          neo-keymap-style 'concise
          neo-hidden-regexp-list
          '(;; vcs folders
            "^\\.\\(git\\|hg\\|svn\\)$"
            ;; compiled files
            "\\.\\(pyc\\|o\\|elc\\|lock\\|css.map\\)$"
            ;; generated files, caches or local pkgs
            "^\\(node_modules\\|.\\(project\\|cask\\|yardoc\\|sass-cache\\)\\)$"
            ;; org-mode folders
            "^\\.\\(sync\\|export\\|attach\\)$"
            "~$"
            "^#.*#$")))

  (when (bound-and-true-p winner-mode)
    (push neo-buffer-name winner-boring-buffers))

  (defun shrink-root-entry (node)
    "shrink-print pwd in neotree"
    (when (and (require 'neotree nil t)
               (fboundp 'shrink-path-dirs))
      (insert (propertize (concat (shrink-path-dirs node) "\n") 'face `(:inherit (,neo-root-dir-face))))))

  (when (and (require 'neotree nil t)
             (fboundp 'neo-buffer--insert-root-entry)
             (fboundp 'shrink-root-entry))
    (advice-add #'neo-buffer--insert-root-entry :override #'shrink-root-entry))
  )

(defun neotree-project-dir-toggle ()
  "Open NeoTree using the project root, using find-file-in-project or the current buffer directory."
  (interactive)
  (when (and (require 'neotree nil t)
             (fboundp 'projectile-project-root))
    (let ((project-dir
           (ignore-errors
             ;;; Pick one: projectile or find-file-in-project
             (projectile-project-root)))
          (file-name (buffer-file-name)))
      (if (and (fboundp 'neo-global--window-exists-p)
               (neo-global--window-exists-p))
          (neotree-hide)
        (progn
          (neotree-show)
          (if project-dir
              (neotree-dir project-dir))
          (if file-name
              (neotree-find file-name)))))))

(provide 'init-neotree)

;; Local Variables:
;; byte-compile-warnings: (not free-vars)
;; End:
;;; init-neotree.el ends here