aboutsummaryrefslogtreecommitdiff
path: root/emacs/settings/init-project.el
diff options
context:
space:
mode:
authorMiquel Sabaté Solà <msabate@suse.com>2016-11-17 12:50:00 +0100
committerMiquel Sabaté Solà <msabate@suse.com>2016-11-17 12:50:00 +0100
commit44a504dc3c8e6171dc066b2c19b7769525388896 (patch)
treedba04234c2268a094c6a1ce8d33e0abc24218788 /emacs/settings/init-project.el
parent3e5d6e81072b11c6d7a719cb3f3e484dc61d4c7e (diff)
downloaddotfiles-44a504dc3c8e6171dc066b2c19b7769525388896.tar.gz
dotfiles-44a504dc3c8e6171dc066b2c19b7769525388896.zip
emacs: split init.el into different files
The init.el was about to surpass the 1000 LoC threshold, and it was no longer easy to structure the code. Thus, I've moved the different pieces into new files. Signed-off-by: Miquel Sabaté Solà <msabate@suse.com>
Diffstat (limited to 'emacs/settings/init-project.el')
-rw-r--r--emacs/settings/init-project.el119
1 files changed, 119 insertions, 0 deletions
diff --git a/emacs/settings/init-project.el b/emacs/settings/init-project.el
new file mode 100644
index 0000000..36b9199
--- /dev/null
+++ b/emacs/settings/init-project.el
@@ -0,0 +1,119 @@
+;;; init-project.el --- Packages for interacting with projects
+
+;; Copyright (C) 2016 Miquel Sabaté Solà <mikisabate@gmail.com>
+;;
+;; 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.
+
+;;; Commentary:
+;;
+;; Set of packages and their configurations for managing projects inside of
+;; GNU Emacs.
+
+;;; Code:
+
+(require 'use-package)
+
+;;; Ayo silver!
+
+(use-package ag
+ :ensure t
+ :config
+
+ (eval-after-load 'evil
+ '(progn
+ (add-hook 'ag-mode-hook
+ (lambda ()
+ (define-key ag-mode-map (kbd "n") 'evil-search-next)
+ (define-key ag-mode-map (kbd "N") 'evil-search-previous)
+ (define-key ag-mode-map (kbd "gg") 'evil-goto-first-line)))))
+ (setq ag-reuse-buffers t)
+ (setq ag-reuse-window t))
+
+;;; Projectile & Helm
+
+(use-package projectile
+ :ensure t
+ :config
+ (projectile-global-mode +1)
+ (setq projectile-mode-line
+ '(:eval (format " %s" (projectile-project-name)))))
+
+(use-package helm
+ :ensure t
+ :config
+ (setq projectile-completion-system 'helm)
+
+ ; Allow the search pattern to be on the header. Taken from this Reddit thread:
+ ; https://www.reddit.com/r/emacs/comments/3asbyn/new_and_very_useful_helm_feature_enter_search/
+ (setq helm-echo-input-in-header-line t)
+
+ (defun helm-hide-minibuffer-maybe ()
+ "Hide the minibuffer if we are in a Helm session"
+
+ (when (with-helm-buffer helm-echo-input-in-header-line)
+ (let ((ov (make-overlay (point-min) (point-max) nil nil t)))
+ (overlay-put ov 'window (selected-window))
+ (overlay-put ov 'face (let ((bg-color (face-background 'default nil)))
+ `(:background ,bg-color :foreground ,bg-color)))
+ (setq-local cursor-type nil))))
+
+ (add-hook 'helm-minibuffer-set-up-hook 'helm-hide-minibuffer-maybe)
+ (setq helm-split-window-in-side-p t)
+
+ ; Preview files with tab
+ (define-key helm-map (kbd "<tab>") 'helm-execute-persistent-action)
+
+ ; Show available options
+ (define-key helm-map (kbd "C-a") 'helm-select-action)
+
+ ; Some vim-like bindings
+ (define-key helm-map (kbd "C-j") 'helm-next-line)
+ (define-key helm-map (kbd "C-k") 'helm-previous-line)
+
+ (use-package helm-ag
+ :ensure t))
+
+(use-package helm-projectile
+ :ensure t
+ :config
+ (helm-projectile-on))
+
+;;; Finally setup the bindings for Evil mode
+
+(defun mssola-helm-ag ()
+ "Call the right ag command for helm-ag."
+
+ (interactive)
+
+ (condition-case nil
+ (helm-ag-project-root)
+ (error (helm-ag))))
+
+(defun mssola-find-file ()
+ "Call the proper Helm function for finding files."
+
+ (interactive)
+
+ (condition-case nil
+ (helm-projectile-find-file)
+ (error
+ (helm-find-files nil))))
+
+(eval-after-load 'evil
+ '(progn
+ (define-key evil-normal-state-map (kbd "C-p") 'mssola-find-file)))
+
+(eval-after-load 'evil-leader
+ '(progn
+ (evil-leader/set-key "a" 'mssola-helm-ag)))
+
+(provide 'init-project)
+;;; init-project.el ends here