From 2e3d7df705f0857ab40bf5b179f0b6b65f9e5a64 Mon Sep 17 00:00:00 2001 From: Maciej Szlosarczyk Date: Fri, 6 Oct 2017 16:39:49 +0300 Subject: [PATCH] Fix projectile tag regeneration to happen after project switch --- behaviour.el | 69 ++++++++++++++++++++++++++++++++--------------- key-bindings.el | 4 +-- languages/ruby.el | 2 +- 3 files changed, 50 insertions(+), 25 deletions(-) diff --git a/behaviour.el b/behaviour.el index 146f4d4..970f017 100644 --- a/behaviour.el +++ b/behaviour.el @@ -160,28 +160,6 @@ ;; Do not required match to continue typing (setq company-require-match 'never) -; Add project management -(require 'projectile) -(projectile-mode) -(setq projectile-enable-caching t) -(setq projectile-globally-ignored-directories ( - append '("node_modules" ".svn") projectile-globally-ignored-directories)) -(projectile-mode t) -(require 'helm-projectile) - -;; Reload tags when switching projects -(setq tags-revert-without-query 1) - -(with-eval-after-load 'helm-projectile - (defvar helm-source-file-not-found - (helm-build-dummy-source - "Create file" - :action (lambda (cand) (find-file cand)))) - (add-to-list 'helm-projectile-sources-list helm-source-file-not-found t)) - -;; Show projectile lists by most recently active -(setq projectile-sort-order (quote recently-active)) - ; Use VIM mode (require 'evil) (require 'evil-leader) @@ -191,4 +169,51 @@ ;; Add magit for git (require 'evil-magit) + +;;;;;;;;;;;;;;;;;;;;;;;; Projectile ;;;;;;;;;;;;;;;;;;;;;;;;;;; +(require 'projectile) +(projectile-mode) + + +(defun projectile-regenerate-tags-if-exist () + "Only regenerate tags if a tag file is present in the folder." + (interactive) + (let ((default-directory (projectile-project-root))) + (when (or (file-exists-p (expand-file-name "TAGS")) + (file-exists-p (expand-file-name projectile-tags-file-name))) + (projectile-regenerate-tags)))) + +(setq projectile-enable-caching t) +;; Expire cache after 5 minutes +(setq projectile-file-exists-local-cache-expire (* 2 60)) + +;; Always create a new tag table list and reload without asking +(setq tags-revert-without-query t) +(setq tags-add-tables nil) + +;; Enable idle timer +;; TODO: Does not work properly +(setq projectile-enable-idle-timer t) +(add-hook 'projectile-idle-timer-hook 'projectile-regenerate-tags-if-exist) +(setq projectile-idle-timer-seconds 15) + +;; Run the tags if project was changed +(add-hook 'projectile-after-switch-project-hook + 'projectile-regenerate-tags-if-exist) + +;; Show projectile lists by most recently active +(setq projectile-sort-order (quote recently-active)) + +(setq projectile-globally-ignored-directories + (append '("node_modules" ".svn") projectile-globally-ignored-directories)) + +(require 'helm-projectile) + +(with-eval-after-load 'helm-projectile + (defvar helm-source-file-not-found + (helm-build-dummy-source + "Create file" + :action (lambda (cand) (find-file cand)))) + (add-to-list 'helm-projectile-sources-list helm-source-file-not-found t)) + ;;; behaviour.el ends here diff --git a/key-bindings.el b/key-bindings.el index c016c14..8ad5224 100644 --- a/key-bindings.el +++ b/key-bindings.el @@ -48,8 +48,8 @@ (evil-leader/set-key "pc" 'projectile-invalidate-cache) (evil-leader/set-key "b" 'helm-buffers-list) -(evil-leader/set-key "jl" 'etags-select-find-tag-at-point); Jump to declaration -(evil-leader/set-key "jh" 'pop-tag-mark); Jump back from declaration +(evil-leader/set-key "j;" 'dumb-jump-go); Jump to declaration +(evil-leader/set-key "jh" 'dumb-jump-back); Jump back from declaration ;; Dash integration (require 'dash-at-point) diff --git a/languages/ruby.el b/languages/ruby.el index ac325b1..264c314 100644 --- a/languages/ruby.el +++ b/languages/ruby.el @@ -48,7 +48,7 @@ ;; Initalize completion (set (make-local-variable 'company-backends) - '((company-robe company-dabbrev-code company-yasnippet company-etags)))) + '((company-etags company-yasnippet company-files)))) ;;========== Hooks ================================ (add-hook 'ruby-mode-hook 'editor-ruby-mode-config)