2015-06-15 09:05:52 +02:00
|
|
|
;;; core-project.el --- all your (basic) project navigational needs
|
|
|
|
|
2016-03-03 15:04:14 -05:00
|
|
|
;;
|
|
|
|
;; Dired
|
|
|
|
;;
|
|
|
|
|
2016-02-02 05:44:07 -05:00
|
|
|
;; Always copy/delete recursively
|
2016-04-05 23:58:32 -04:00
|
|
|
(setq dired-recursive-copies (quote always)
|
|
|
|
dired-recursive-deletes (quote top))
|
2016-02-02 05:44:07 -05:00
|
|
|
|
|
|
|
;; Auto refresh dired, but be quiet about it
|
2016-04-05 23:58:32 -04:00
|
|
|
(setq global-auto-revert-non-file-buffers t
|
|
|
|
auto-revert-verbose nil)
|
2016-02-02 05:44:07 -05:00
|
|
|
|
|
|
|
(setq dired-omit-mode t)
|
|
|
|
|
|
|
|
;; List directories first
|
|
|
|
(defun narf|dired-sort ()
|
|
|
|
"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))
|
|
|
|
(add-hook 'dired-after-readin-hook 'narf|dired-sort)
|
|
|
|
|
|
|
|
;; Automatically create missing directories when creating new files
|
|
|
|
(defun narf|create-non-existent-directory ()
|
|
|
|
(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-04-05 23:58:32 -04:00
|
|
|
(push 'narf|create-non-existent-directory find-file-not-found-functions)
|
2016-02-02 05:44:07 -05:00
|
|
|
|
2016-03-03 15:04:14 -05:00
|
|
|
;;
|
2015-06-15 09:05:52 +02:00
|
|
|
(use-package ido
|
|
|
|
:defines (flx-ido-mode ido-ubiquitous-debug-mode ido-context-switch-command ido-temp-list)
|
|
|
|
: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-confirm-unique-completion t
|
|
|
|
ido-case-fold t
|
|
|
|
ido-create-new-buffer 'always
|
2016-04-05 23:58:32 -04:00
|
|
|
ido-enable-flex-matching t
|
2015-06-15 09:05:52 +02:00
|
|
|
ido-enable-last-directory-history t
|
2016-04-05 23:58:32 -04:00
|
|
|
ido-enable-tramp-completion nil
|
|
|
|
ido-enable-tramp-completion t
|
2015-11-20 04:00:38 -05:00
|
|
|
ido-cr+-max-items 10000
|
2016-03-27 00:49:52 -04:00
|
|
|
ido-save-directory-list-file (concat narf-temp-dir "/ido.last"))
|
2016-04-05 23:58:32 -04:00
|
|
|
(add-hook 'ido-setup-hook 'narf|ido-setup-home-keybind)
|
2015-06-15 09:05:52 +02:00
|
|
|
:config
|
2015-06-24 15:37:09 +02:00
|
|
|
(add-hook! ido-setup
|
2016-03-27 18:18:43 -04:00
|
|
|
(add-to-list 'ido-ignore-files "\\`.DS_Store$")
|
|
|
|
(add-to-list 'ido-ignore-files "Icon\\?$")
|
|
|
|
(advice-add 'ido-sort-mtime :override 'narf*ido-sort-mtime)
|
|
|
|
|
2015-06-24 15:37:09 +02:00
|
|
|
(require 'ido-vertical-mode)
|
|
|
|
(ido-vertical-mode 1)
|
|
|
|
(require 'flx-ido)
|
|
|
|
(flx-ido-mode 1)
|
2015-11-30 05:31:20 -05:00
|
|
|
(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 15:37:09 +02:00
|
|
|
|
2016-04-05 23:58:32 -04:00
|
|
|
(add-hook! (ido-make-file-list ido-make-dir-list) 'narf*ido-sort-mtime))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
2016-03-03 15:04:14 -05:00
|
|
|
;;
|
2015-06-15 09:05:52 +02:00
|
|
|
(use-package neotree
|
|
|
|
:commands (neotree-show
|
|
|
|
neotree-hide
|
|
|
|
neotree-toggle
|
|
|
|
neotree-dir
|
|
|
|
neotree-find
|
|
|
|
neo-global--window-exists-p)
|
|
|
|
:functions (neo-buffer--unlock-width neo-buffer--lock-width)
|
|
|
|
:init
|
|
|
|
(setq neo-create-file-auto-open t
|
2015-12-23 03:38:18 -05:00
|
|
|
neo-auto-indent-point t
|
2015-06-15 09:05:52 +02:00
|
|
|
neo-mode-line-type 'none
|
2015-12-23 03:38:18 -05:00
|
|
|
neo-persist-show nil
|
2016-04-16 21:27:59 -04:00
|
|
|
neo-window-width 26
|
2015-06-15 09:05:52 +02:00
|
|
|
neo-show-updir-line nil
|
|
|
|
neo-auto-indent-point t
|
2015-12-23 03:38:18 -05:00
|
|
|
neo-banner-message nil)
|
2015-06-15 09:05:52 +02:00
|
|
|
:config
|
2015-12-23 03:38:18 -05:00
|
|
|
(evil-set-initial-state 'neotree-mode 'motion)
|
2016-04-16 21:27:59 -04:00
|
|
|
(add-hook 'neotree-mode-hook 'narf|neotree-init-keymap)
|
2015-06-15 09:05:52 +02:00
|
|
|
(defun narf|neotree-init-keymap ()
|
2016-04-04 12:06:47 -04:00
|
|
|
(map! :map evil-motion-state-local-map
|
|
|
|
"ESC" 'neotree-hide
|
|
|
|
[escape] '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 09:05:52 +02:00
|
|
|
|
|
|
|
(after! projectile
|
|
|
|
(setq projectile-switch-project-action 'neotree-projectile-action))
|
|
|
|
|
2016-03-01 02:00:54 -05:00
|
|
|
;; Don't ask for confirmation when creating files
|
|
|
|
(defun narf*neotree-create-node (orig-fun &rest args)
|
|
|
|
(cl-letf (((symbol-function 'yes-or-no-p) (lambda (&rest _) t)))
|
|
|
|
(apply orig-fun args)))
|
|
|
|
(advice-add 'neotree-create-node :around 'narf*neotree-create-node)
|
|
|
|
|
2016-03-01 01:59:36 -05:00
|
|
|
;; Shorter file names for org files
|
|
|
|
(defun narf*neo-path--file-short-name (orig-fun &rest args)
|
|
|
|
(let ((file (car args)))
|
|
|
|
(if (f-ext? file "org")
|
|
|
|
(s-replace "-" " " (f-base file))
|
|
|
|
(apply orig-fun args))))
|
|
|
|
(advice-add 'neo-path--file-short-name :around 'narf*neo-path--file-short-name)
|
|
|
|
|
2016-03-01 02:00:54 -05:00
|
|
|
(advice-add 'narf--evil-window-move :before 'narf|neotree-close-on-window-change)
|
|
|
|
(advice-add 'narf--evil-swap-windows :before 'narf|neotree-close-on-window-change)
|
|
|
|
|
2015-12-23 03:38:18 -05:00
|
|
|
;; A custom and simple theme for neotree
|
2015-06-15 09:05:52 +02:00
|
|
|
(advice-add 'neo-buffer--insert-fold-symbol :override 'narf*neo-buffer-fold-symbol))
|
|
|
|
|
2016-03-31 03:19:30 -04:00
|
|
|
(use-package projectile
|
|
|
|
:config
|
|
|
|
(setq projectile-require-project-root nil
|
|
|
|
projectile-enable-caching t
|
|
|
|
projectile-cache-file (concat narf-temp-dir "/projectile.cache")
|
|
|
|
projectile-known-projects-file (concat narf-temp-dir "/projectile.projects")
|
|
|
|
projectile-indexing-method 'alien
|
|
|
|
projectile-project-root-files narf-project-root-files
|
|
|
|
projectile-file-exists-remote-cache-expire nil)
|
|
|
|
|
|
|
|
(push "ido.last" projectile-globally-ignored-files)
|
|
|
|
(push "assets" projectile-globally-ignored-directories)
|
|
|
|
(push ".cask" projectile-globally-ignored-directories)
|
|
|
|
(push ".export" projectile-globally-ignored-directories)
|
|
|
|
(push ".attach" projectile-globally-ignored-directories)
|
|
|
|
(push '("scss" "css") projectile-other-file-alist)
|
|
|
|
(push '("css" "scss") projectile-other-file-alist)
|
|
|
|
|
|
|
|
(projectile-global-mode +1))
|
|
|
|
|
2015-06-15 09:05:52 +02:00
|
|
|
(provide 'core-project)
|
|
|
|
;;; core-project.el ends here
|