aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesús <heckyel@hyperbola.info>2019-01-08 17:08:58 -0500
committerJesús <heckyel@hyperbola.info>2019-01-08 17:08:58 -0500
commit0cfbe1a462722775da18553eab7d4b041a2e5774 (patch)
tree184ec29a3c3497c435bebd973a8ea6d0e517b802
parent5f494a38d3216b337228c79da524b7b85d6a3926 (diff)
downloademacs-personal-0cfbe1a462722775da18553eab7d4b041a2e5774.tar.lz
emacs-personal-0cfbe1a462722775da18553eab7d4b041a2e5774.tar.xz
emacs-personal-0cfbe1a462722775da18553eab7d4b041a2e5774.zip
added support git
-rw-r--r--custom.el2
-rw-r--r--init.el1
-rw-r--r--lisp/init-git.el97
3 files changed, 99 insertions, 1 deletions
diff --git a/custom.el b/custom.el
index 9c39597..0dc861f 100644
--- a/custom.el
+++ b/custom.el
@@ -11,7 +11,7 @@
'(ecb-options-version "2.50")
'(package-selected-packages
(quote
- (company-php php-refactor-mode php-mode dokuwiki-mode web-mode rainbow-mode yaml-mode scss-mode sass-mode less-css-mode pkgbuild-mode pip-requirements jedi markdown-mode crystal-mode nginx-mode emmet-mode whitespace-cleanup-mode flycheck neotree all-the-icons highlight-indent-guides anzu sml-modeline smart-mode-line-powerline-theme smart-mode-line ecb diminish undo-tree nlinum sublime-themes use-package))))
+ (git-gutter-fringe git-timemachine gitattributes-mode gitignore-mode gitconfig-mode yaml-mode whitespace-cleanup-mode web-mode use-package undo-tree sublime-themes sml-modeline smart-mode-line-powerline-theme scss-mode sass-mode rainbow-mode pkgbuild-mode pip-requirements php-refactor-mode nlinum nginx-mode neotree markdown-mode less-css-mode jedi highlight-indent-guides flycheck emmet-mode ecb dokuwiki-mode diminish crystal-mode company-php anzu all-the-icons))))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
diff --git a/init.el b/init.el
index f2247b1..58a3547 100644
--- a/init.el
+++ b/init.el
@@ -44,6 +44,7 @@
(require 'init-whitespace)
(require 'init-emmet-mode)
(require 'init-nginx)
+(require 'init-git)
;;(require 'init-editorconfig)
;; Languages
(require 'init-ccc)
diff --git a/lisp/init-git.el b/lisp/init-git.el
new file mode 100644
index 0000000..ef7acc1
--- /dev/null
+++ b/lisp/init-git.el
@@ -0,0 +1,97 @@
+;;; init-git.el --- .Emacs Configuration -*- lexical-binding: t -*-
+;;; Commentary:
+;;
+
+;;; Code:
+(setq vc-follows-symlinks t
+ find-file-visit-truename t
+ vc-handled-backends nil)
+
+(if (display-graphic-p)
+ (use-package git-gutter-fringe
+ :ensure t
+ :config
+ (global-git-gutter-mode t)
+ (setq-default fringes-outside-margins t)
+ (setq-default left-fringe-width 10)
+ (setq indicate-empty-lines nil)
+ (set-face-foreground 'git-gutter-fr:modified "purple")
+ (set-face-foreground 'git-gutter-fr:added "green")
+ (set-face-foreground 'git-gutter-fr:deleted "red")
+
+ (defun my-reshape-git-gutter (gutter)
+ "Re-shape gutter for `ivy-read'."
+ (let* ((linenum-start (aref gutter 3))
+ (linenum-end (aref gutter 4))
+ (target-line "")
+ (target-linenum 1)
+ (tmp-line "")
+ (max-line-length 0))
+ (save-excursion
+ (while (<= linenum-start linenum-end)
+ (goto-line linenum-start)
+ (setq tmp-line (replace-regexp-in-string "^[ \t]*" ""
+ (buffer-substring (line-beginning-position)
+ (line-end-position))))
+ (when (> (length tmp-line) max-line-length)
+ (setq target-linenum linenum-start)
+ (setq target-line tmp-line)
+ (setq max-line-length (length tmp-line)))
+
+ (setq linenum-start (1+ linenum-start))))
+ ;; build (key . linenum-start)
+ (cons (format "%s %d: %s"
+ (if (eq 'deleted (aref gutter 1)) "-" "+")
+ target-linenum target-line)
+ target-linenum)))
+
+ (defun my-goto-git-gutter ()
+ (interactive)
+ (if git-gutter-fr:diffinfos
+ (ivy-read "git-gutters-fr:"
+ (mapcar 'my-reshape-git-gutter git-gutter-fr:diffinfos)
+ :action (lambda (e)
+ ;; ivy9+ keep `(car e)'
+ ;; ivy8- strip the `(car e)'
+ ;; we handle both data structure
+ (unless (numberp e) (setq e (cdr e)))
+ (goto-line e)))
+ (message "NO git-gutters-fringe!")))))
+
+(use-package gitconfig-mode
+ :ensure t
+ :mode ("/\\.?git/?config$"
+ "/\\.gitmodules$")
+ :init (add-hook 'gitconfig-mode-hook 'flyspell-mode))
+
+(use-package gitignore-mode
+ :ensure t
+ :mode ("/\\.gitignore$"
+ "/\\.git/info/exclude$"
+ "/git/ignore$"))
+
+(use-package gitattributes-mode
+ :ensure t
+ :defer t)
+
+(use-package git-timemachine
+ :ensure t
+ :commands git-timemachine
+ :bind (:map git-timemachine-mode
+ ("c" . git-timemachine-show-current-revision)
+ ("b" . git-timemachine-switch-branch)))
+
+;;; smerge-mode video explain https://emacsgifs.github.io/public/videos/758861381898637313.mp4
+(use-package smerge-mode
+ :ensure t
+ :config
+ (defun enable-smerge-maybe ()
+ (when (and buffer-file-name (vc-backend buffer-file-name))
+ (save-excursion
+ (goto-char (point-min))
+ (when (re-search-forward "^<<<<<<< " nil t)
+ (smerge-mode +1)))))
+ (add-hook 'buffer-list-update-hook #'enable-smerge-maybe))
+
+(provide 'init-git)
+;;; init-git.el ends here