diff options
Diffstat (limited to 'lisp/ravi-init-vc.el')
| -rw-r--r-- | lisp/ravi-init-vc.el | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/lisp/ravi-init-vc.el b/lisp/ravi-init-vc.el new file mode 100644 index 0000000..e4b273e --- /dev/null +++ b/lisp/ravi-init-vc.el @@ -0,0 +1,185 @@ +;;; ravi-init-vc.el --- vc control + +;; Copyright (C) 2013 + +;; Author: <ravi@nero.lan> +;; Keywords: vc + +;; 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 <http://www.gnu.org/licenses/>. + +;;; Commentary: + +;; Version control initialization + +;;; Code: + +;; Git +(use-package magit + :bind (("<M-f3>" . magit-status) + ("C-x v F" . magit-file-log)) + :config + (progn + (setq-default + magit-process-popup-time 10 + magit-diff-refine-hunk t + magit-completing-read-function 'magit-ido-completing-read + ) + + ; Since magit-mode-quit-window is used by all magit windows (such as logs), + ; and since mucking with magit's keymap also leads to the same results, we + ; avoid showing magit-status in a fullscreen window until another solution + ; is found. + ;(require 'fullframe) + ;(fullframe magit-status magit-mode-quit-window :magit-fullscreen nil) + + (setq magit-restore-window-configuration t) + (diminish 'magit-auto-revert-mode) + + (use-package vc-git + :defer t + :bind ("C-x v f" . vc-git-grep) + :config + (progn + (global-magit-wip-save-mode) + (diminish 'magit-wip-save-mode) + ) + ) + + ;(after-load 'magit-key-mode + ; (require 'magit-svn)) + + (after-load 'compile + (dolist (defn (list '(git-svn-updated "^\t[A-Z]\t\\(.*\\)$" 1 nil nil 0 1) + '(git-svn-needs-update "^\\(.*\\): needs update$" 1 nil nil 2 1))) + (add-to-list 'compilation-error-regexp-alist-alist defn) + (add-to-list 'compilation-error-regexp-alist (car defn)))) + + (use-package magit-svn + :config (add-hook 'magit-mode-hook 'turn-on-magit-svn) + :ensure t + ) + + (defvar git-svn--available-commands nil "Cached list of git svn subcommands") + + (defun git-svn (dir) + "Run a git svn subcommand in DIR." + (interactive "DSelect directory: ") + (unless git-svn--available-commands + (setq git-svn--available-commands + (sanityinc/string-all-matches + "^ \\([a-z\\-]+\\) +" + (shell-command-to-string "git svn help") 1))) + (let* ((default-directory (vc-git-root dir)) + (compilation-buffer-name-function (lambda (major-mode-name) "*git-svn*"))) + (compile (concat "git svn " + (ido-completing-read "git-svn command: " + git-svn--available-commands nil t)))) + ) + + (defun magit-toggle-whitespace () + (interactive) + (if (member "-w" magit-diff-options) + (magit-dont-ignore-whitespace) + (magit-ignore-whitespace))) + + (defun magit-ignore-whitespace () + (interactive) + (add-to-list 'magit-diff-options "-w") + (magit-refresh)) + + (defun magit-dont-ignore-whitespace () + (interactive) + (setq magit-diff-options (remove "-w" magit-diff-options)) + (magit-refresh)) + + (bind-key "W" 'magit-toggle-whitespace magit-status-mode-map) + + (defun magit-just-amend () + (interactive) + (save-window-excursion + (magit-with-refresh + (shell-command "git --no-pager commit --amend --reuse-message=HEAD")))) + (bind-key "C-a" 'magit-just-amend magit-status-mode-map) + + ) + :ensure t + ) +(use-package git-gutter + :config + (progn + (use-package git-gutter-fringe + :ensure t + ) + (global-git-gutter-mode 1) + ) + :ensure t + :diminish git-gutter-mode + ) +(use-package git-commit-mode + :ensure t + ) +(use-package git-rebase-mode + :ensure t + ) +(use-package gitignore-mode + :ensure t + ) +(use-package gitconfig-mode + :ensure t + ) +(use-package git-messenger + :ensure t + :bind ("C-x v p" . git-messenger:popup-message) + ) +(use-package git-timemachine + :ensure t + :bind ("C-x v t" . git-timemachine) + ) +(use-package magit-blame + :bind (("C-x v B" . magit-blame-mode))) + +;; Stolen almost entirely from Fuco (Matus Goljer) +(use-package ediff + :config + (progn + (defvar my-ediff-before-config nil "Window configuration before ediff.") + (defvar my-ediff-after-config nil "Window configuration after ediff.") + + (defun my-ediff-before-setup () + "Function to be called before any buffers or window setup for + ediff." + (setq my-ediff-before-config (current-window-configuration)) + (set-register ?b (list my-ediff-before-config (point-marker)))) + + (defun my-ediff-after-setup () + "Function to be called after buffers and window setup for ediff." + (setq my-ediff-after-config (current-window-configuration)) + (set-register ?e (list my-ediff-after-config (point-marker)))) + + (defun my-ediff-quit () + "Function to be called when ediff quits." + (when my-ediff-before-config + (set-window-configuration my-ediff-before-config)) + ;; clean up ediff bullshit + (->> (buffer-list) + (-map 'buffer-name) + (--select (string-match-p "\\*[Ee]diff" it)) + (-map 'kill-buffer))) + + (add-hook 'ediff-before-setup-hook 'my-ediff-before-setup) + (add-hook 'ediff-after-setup-windows-hook 'my-ediff-after-setup 'append) + (add-hook 'ediff-quit-hook 'my-ediff-quit))) + +(provide 'ravi-init-vc) +;;; ravi-init-vc.el ends here |
