Assimilate 8 drones
[~bandali/configs] / lisp / bandali-projectile.el
diff --git a/lisp/bandali-projectile.el b/lisp/bandali-projectile.el
new file mode 100644 (file)
index 0000000..41504e6
--- /dev/null
@@ -0,0 +1,67 @@
+;;; bandali-projectile.el --- bandali's Projectile setup  -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2020  Amin Bandali
+
+;; Author: Amin Bandali <bandali@gnu.org>
+;; Keywords: convenience
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; My Projectile setup.
+
+;;; Code:
+
+(use-package projectile
+  :disabled
+  :defer 0.5
+  :bind-keymap ("C-c p" . projectile-command-map)
+  :config
+  (projectile-mode)
+
+  (defun b/projectile-mode-line-fun ()
+  "Report project name and type in the modeline."
+  (let ((project-name (projectile-project-name))
+        (project-type (projectile-project-type)))
+    (format "%s%s"
+            projectile-mode-line-prefix
+            (if project-type
+                (format ":%s" project-type)
+              ""))))
+  (setq projectile-mode-line-function 'b/projectile-mode-line-fun)
+
+  (defun my-projectile-invalidate-cache (&rest _args)
+    ;; ignore the args to `magit-checkout'
+    (projectile-invalidate-cache nil))
+
+  (eval-after-load 'magit-branch
+    '(progn
+       (advice-add 'magit-checkout
+                   :after #'my-projectile-invalidate-cache)
+       (advice-add 'magit-branch-and-checkout
+                   :after #'my-projectile-invalidate-cache)))
+
+  (when (featurep 'which-key)
+    (which-key-add-key-based-replacements
+      "C-c p"   "projectile"
+      "C-c p s" "projectile/search"
+      "C-c p x" "projectile/execute"
+      "C-c p 4" "projectile/other-window"))
+  :custom
+  (projectile-completion-system 'ivy)
+  (projectile-mode-line-prefix " proj"))
+
+(provide 'bandali-projectile)
+;;; bandali-projectile.el ends here