doomemacs/core/core-project.el

156 lines
5.8 KiB
EmacsLisp
Raw Normal View History

2015-06-15 15:05:52 +08:00
;;; core-project.el --- all your (basic) project navigational needs
2016-05-03 03:58:21 +08:00
(setq ;; Always copy/delete recursively
dired-recursive-copies 'always
dired-recursive-deletes 'top
;; Auto refresh dired, but be quiet about it
global-auto-revert-non-file-buffers t
2016-04-06 11:58:32 +08:00
auto-revert-verbose nil)
2016-05-03 03:58:21 +08:00
(add-hook 'dired-mode-hook 'dired-omit-mode)
2016-02-02 18:44:07 +08:00
;; List directories first
2016-05-21 10:37:30 +08:00
(defun doom|dired-sort ()
2016-02-02 18:44:07 +08:00
"Dired sort hook to list directories first."
(save-excursion
(let (buffer-read-only)
(forward-line 2) ;; beyond dir. header
(sort-regexp-fields t "^.*$" "[ ]*." (point) (point-max))))
(and (featurep 'xemacs)
(fboundp 'dired-insert-set-properties)
(dired-insert-set-properties (point-min) (point-max)))
(set-buffer-modified-p nil))
2016-05-21 10:37:30 +08:00
(add-hook 'dired-after-readin-hook 'doom|dired-sort)
2016-02-02 18:44:07 +08:00
;; Automatically create missing directories when creating new files
2016-05-21 10:37:30 +08:00
(defun doom|create-non-existent-directory ()
2016-02-02 18:44:07 +08:00
(let ((parent-directory (file-name-directory buffer-file-name)))
(when (and (not (file-exists-p parent-directory))
(y-or-n-p (format "Directory `%s' does not exist! Create it?" parent-directory)))
(make-directory parent-directory t))))
2016-05-21 10:37:30 +08:00
(push 'doom|create-non-existent-directory find-file-not-found-functions)
2016-02-02 18:44:07 +08:00
2015-06-15 15:05:52 +08:00
(use-package ido
:functions (ido-to-end)
:init
(setq ido-ignore-buffers
'("\\` " "^\\*ESS\\*" "^\\*Messages\\*" "^\\*Help\\*" "^\\*Buffer"
"^\\*.*Completions\\*$" "^\\*Ediff" "^\\*tramp" "^\\*cvs-"
"_region_" " output\\*$" "^TAGS$" "^\*Ido")
ido-use-faces nil
ido-enable-flex-matching t
2015-06-15 15:05:52 +08:00
ido-confirm-unique-completion t
ido-case-fold t
ido-create-new-buffer 'always
2016-04-06 11:58:32 +08:00
ido-enable-flex-matching t
2015-06-15 15:05:52 +08:00
ido-enable-last-directory-history t
2016-04-06 11:58:32 +08:00
ido-enable-tramp-completion nil
ido-enable-tramp-completion t
ido-use-filename-at-point 'guess
2015-11-20 17:00:38 +08:00
ido-cr+-max-items 10000
2016-05-21 10:37:30 +08:00
ido-save-directory-list-file (concat doom-temp-dir "/ido.last"))
(add-hook 'ido-setup-hook 'doom|ido-setup-home-keybind)
2015-06-15 15:05:52 +08:00
:config
2015-06-24 21:37:09 +08:00
(add-hook! ido-setup
(push "\\`.DS_Store$" ido-ignore-files)
(push "Icon\\?$" ido-ignore-files)
2016-05-21 10:37:30 +08:00
(advice-add 'ido-sort-mtime :override 'doom*ido-sort-mtime)
2016-03-28 06:18:43 +08:00
2015-06-24 21:37:09 +08:00
(require 'ido-vertical-mode)
(ido-vertical-mode 1)
(require 'flx-ido)
(flx-ido-mode 1)
(map! :map (ido-common-completion-map
ido-completion-map
ido-file-completion-map)
"C-n" 'ido-next-match
"C-p" 'ido-prev-match
"C-w" 'ido-delete-backward-word-updir
"C-u" 'ido-up-directory))
2015-06-24 21:37:09 +08:00
2016-05-21 10:37:30 +08:00
(add-hook! (ido-make-file-list ido-make-dir-list) 'doom*ido-sort-mtime))
2015-06-15 15:05:52 +08:00
(use-package neotree
:commands (neotree-show
neotree-hide
neotree-toggle
neotree-dir
neotree-find
neo-global--window-exists-p)
:init
(setq neo-create-file-auto-open t
neo-auto-indent-point t
2015-06-15 15:05:52 +08:00
neo-mode-line-type 'none
neo-persist-show nil
neo-window-width 28
2015-06-15 15:05:52 +08:00
neo-show-updir-line nil
neo-auto-indent-point t
neo-theme 'nerd ; fallback
neo-banner-message nil)
2015-06-15 15:05:52 +08:00
:config
(evil-set-initial-state 'neotree-mode 'motion)
2016-05-21 10:37:30 +08:00
(add-hook 'neo-after-create-hook 'doom|hide-mode-line)
;; Don't mess with neotree on wg-related window-config changes
(advice-add 'doom/undo-window-change :around 'doom*save-neotree)
(advice-add 'doom/redo-window-change :around 'doom*save-neotree)
;; A custom and simple theme for neotree
2016-05-21 10:37:30 +08:00
(advice-add 'neo-buffer--insert-fold-symbol :override 'doom*neo-theme)
;; Shorter pwd in neotree
2016-05-21 10:37:30 +08:00
(advice-add 'neo-buffer--insert-root-entry :filter-args 'doom*neotree-shorten-pwd)
;; Don't ask for confirmation when creating files
2016-05-21 10:37:30 +08:00
(advice-add 'neotree-create-node :around 'doom*neotree-create-node)
;; Prevents messing up the neotree buffer on window changes
2016-05-21 10:37:30 +08:00
(advice-add 'doom/evil-window-move :around 'doom*save-neotree)
2016-05-25 12:11:50 +08:00
(defun doom*neotree-no-fringes ()
(set-window-fringes neo-global--window 1 0))
(advice-add 'neo-global--select-window :after 'doom*neotree-no-fringes)
(add-hook! neotree-mode
(set (make-local-variable 'hl-line-sticky-flag) t)
(hl-line-mode +1))
(map! :map neotree-mode-map
:m "\\\\" 'evil-window-prev
"ESC ESC" 'neotree-hide
"q" 'neotree-hide
"RET" 'neotree-enter
"J" 'neotree-select-next-sibling-node
"K" 'neotree-select-previous-sibling-node
"H" 'neotree-select-up-node
"L" 'neotree-select-down-node
"v" 'neotree-enter-vertical-split
"s" 'neotree-enter-horizontal-split
"c" 'neotree-create-node
"d" 'neotree-delete-node
"g" 'neotree-refresh
"r" 'neotree-rename-node
"R" 'neotree-change-root))
2015-06-15 15:05:52 +08:00
2016-03-31 15:19:30 +08:00
(use-package projectile
:config
(setq projectile-require-project-root nil
projectile-enable-caching t
2016-05-21 10:37:30 +08:00
projectile-cache-file (concat doom-temp-dir "/projectile.cache")
projectile-known-projects-file (concat doom-temp-dir "/projectile.projects")
2016-03-31 15:19:30 +08:00
projectile-indexing-method 'alien
2016-05-21 10:37:30 +08:00
projectile-project-root-files doom-project-root-files
2016-03-31 15:19:30 +08:00
projectile-file-exists-remote-cache-expire nil)
;; Don't cache ignored files!
2016-05-21 10:37:30 +08:00
(defun doom*projectile-cache-current-file (orig-fun &rest args)
(unless (--any (f-descendant-of? buffer-file-name it) (projectile-ignored-directories))
(apply orig-fun args)))
2016-05-21 10:37:30 +08:00
(advice-add 'projectile-cache-current-file :around 'doom*projectile-cache-current-file)
2016-03-31 15:19:30 +08:00
(push "ido.last" projectile-globally-ignored-files)
(push "assets" projectile-globally-ignored-directories)
(push ".cask" projectile-globally-ignored-directories)
2016-05-24 08:56:19 +08:00
(push ".elc" projectile-globally-ignored-file-suffixes)
(push doom-temp-dir projectile-globally-ignored-directories)
2016-03-31 15:19:30 +08:00
(projectile-global-mode +1))
2015-06-15 15:05:52 +08:00
(provide 'core-project)
;;; core-project.el ends here