diff options
Diffstat (limited to 'emacs/settings/init-project.el')
| -rw-r--r-- | emacs/settings/init-project.el | 119 |
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 |
