Skip to content

Instantly share code, notes, and snippets.

@syohex
Last active December 24, 2018 21:13
Show Gist options
  • Save syohex/4ce917a26b94f6e723064a86bc62f7af to your computer and use it in GitHub Desktop.
Save syohex/4ce917a26b94f6e723064a86bc62f7af to your computer and use it in GitHub Desktop.
My simple Emacs configuration
(source gnu)
(source melpa)
(depends-on "evil")
;; company-mode
(depends-on "company")
;; region
(depends-on "wrap-region")
;; undo
(depends-on "undo-tree")
;; highlight
(depends-on "vline")
(depends-on "col-highlight")
;; snippet
(depends-on "yasnippet")
;; cursor
(depends-on "goto-chg")
;; buffer
(depends-on "popwin")
(depends-on "buffer-move")
;; Key utility
(depends-on "smartrep")
;; Python
(depends-on "company-jedi")
;; Emacs Lisp
(depends-on "paredit")
;;;; Ocaml
;;(depends-on "tuareg")
;;
;;;; Haskell
;;(depends-on "haskell-mode")
;;(depends-on "ghc")
;; go
(depends-on "go-mode")
(depends-on "company-go")
(depends-on "go-eldoc")
(depends-on "helm-godoc" :git "https://github.com/syohex/emacs-helm-godoc.git")
(depends-on "golint")
;; helm
(depends-on "helm")
;; Directory
(depends-on "dired-k")
;; Search
(depends-on "anzu")
;;;; popwin
(depends-on "import-popwin")
;;;; helm
(depends-on "helm-swoop")
(depends-on "helm-gtags")
(depends-on "helm-descbinds")
(depends-on "helm-ag")
;; git
(depends-on "magit")
(depends-on "git-gutter")
;; cmake
(depends-on "cmake-mode")
;; markdown
(depends-on "markdown-mode")
;; Perl6
(depends-on "perl6-mode")
;; Ruby
(depends-on "inf-ruby")
;; My own tools
(depends-on "editutil" :git "https://github.com/syohex/emacs-editutil.git")
(depends-on "eshellutil" :git "https://github.com/syohex/emacs-eshellutil.git")
;; (package-initialize)
(set-language-environment "Japanese")
(prefer-coding-system 'utf-8-unix)
(require 'cl-lib)
(custom-set-variables
'(electric-indent-mode nil)
'(parens-require-spaces nil))
;; configuration based on Cask
(require 'cask "~/.cask/cask.el")
(cask-initialize)
(custom-set-variables
'(evil-move-cursor-back nil)
'(evil-search-module 'evil-search))
;; eldoc
(custom-set-variables
'(eldoc-idle-delay 0.2))
;;(evil-mode +1)
;;(global-evil-surround-mode +1)
;; paredit
(dolist (hook '(emacs-lisp-mode-hook lisp-interaction-mode-hook lisp-mode-hook))
(add-hook hook 'enable-paredit-mode))
;; electric-pair(like autopair)
(defvar my/electric-pair-enabled-modes
'(c-mode
c++-mode
java-mode
python-mode
ruby-mode
erlang-mode
elixir-mode
prolog-mode
haskell-mode
inferior-haskell-mode
sh-mode
js-mode
go-mode
css-mode
cmake-mode
coffee-mode
tuareg-mode
tuareg-interactive-mode
cperl-mode
perl6-mode
markdown-mode
gfm-mode))
(dolist (mode my/electric-pair-enabled-modes)
(add-hook (intern (format "%s-hook" mode)) 'electric-pair-local-mode))
;; smartrep
(require 'smartrep)
;; for GC
(setq gc-cons-threshold (* gc-cons-threshold 10)
echo-keystrokes 0
large-file-warning-threshold (* 25 1024 1024))
(setq-default indent-tabs-mode nil)
;; saveplace
(savehist-mode 1)
(load "saveplace")
(setq-default save-place t)
;; hippie-expand
(custom-set-variables
'(hippie-expand-verbose nil)
'(hippie-expand-try-functions-list
'(try-expand-dabbrev
try-complete-file-name
try-complete-file-name-partially
try-expand-dabbrev-all-buffers)))
;; my key mapping
(global-set-key (kbd "M-ESC ESC") 'keyboard-quit)
(global-set-key (kbd "C-s") 'isearch-forward-regexp)
(global-set-key (kbd "C-r") 'isearch-backward-regexp)
(global-set-key (kbd "M-%") 'anzu-query-replace-regexp)
(global-set-key (kbd "ESC M-%") 'anzu-query-replace-at-cursor)
(global-set-key (kbd "C-x %") 'anzu-replace-at-cursor-thing)
(global-set-key (kbd "C-M-l") 'goto-line)
(global-set-key (kbd "C-M-z") 'helm-resume)
(global-set-key (kbd "C-x C-i") 'helm-imenu)
(global-set-key (kbd "C-x C-c") 'helm-M-x)
(global-set-key (kbd "M-g .") 'helm-ag)
(global-set-key (kbd "M-g ,") 'helm-ag-pop-stack)
(global-set-key (kbd "M-g M-f") 'ffap)
(setq dabbrev-case-fold-search nil)
;; info for japanese
(auto-compression-mode t)
;; Coloring
(global-font-lock-mode t)
;; not highlight region
(transient-mark-mode nil)
;; indicate last line
(setq-default indicate-empty-lines t
indicate-buffer-boundaries 'right)
;; not create backup file
(setq backup-inhibited t
delete-auto-save-files t)
;; Disable menu bar
(menu-bar-mode -1)
;; show paren
(show-paren-mode 1)
(custom-set-variables
'(show-paren-delay 0)
'(show-paren-style 'expression))
;; not beep
(setq ring-bell-function #'ignore)
;; not display start message
(setq inhibit-startup-message t)
;; display line infomation
(line-number-mode 1)
(column-number-mode 1)
;; server start for emacs-client
(require 'server)
(unless (server-running-p)
(server-start))
(defalias 'exit 'save-buffers-kill-emacs)
;; ignore upper or lower
(setq read-file-name-completion-ignore-case t)
;; Delete key
(global-set-key [delete] 'delete-char)
;; backspace
(when (not window-system)
(normal-erase-is-backspace-mode 0))
(custom-set-variables
'(c-basic-offset 8))
(with-eval-after-load 'cc-mode
(define-key c-mode-map (kbd "M-q") 'nil)
(define-key c-mode-map (kbd "C-c o") 'ff-find-other-file))
(defun my/c-mode-hook ()
(c-set-style "k&r")
(hs-minor-mode 1)
(c-toggle-electric-state -1)
(setq c-basic-offset 8)
(setq indent-tabs-mode t)
;; company
(add-to-list 'company-backends 'company-clang)
(helm-gtags-mode))
(add-hook 'c-mode-hook 'my/c-mode-hook)
;; C++ coding style
(add-hook 'c++-mode-hook 'my/c-mode-hook)
;; asm-mode
(add-hook 'asm-mode-hook 'helm-gtags-mode)
;; ibuffer
(defalias 'list-buffers 'ibuffer)
(require 'undo-tree)
(setq undo-no-redo t
undo-limit 600000
undo-strong-limit 900000)
(global-set-key (kbd "M-/") 'undo-tree-redo)
(smartrep-define-key
undo-tree-map "C-x" '(("u" . 'undo-tree-undo)
("U" . 'undo-tree-redo)))
;;;; dired
(require 'dired)
;; Not create new buffer, if you chenge directory in dired
(put 'dired-find-alternate-file 'disabled nil)
(define-key dired-mode-map (kbd "RET") 'dired-find-alternate-file)
(define-key dired-mode-map (kbd "r") 'wdired-change-to-wdired-mode)
(define-key dired-mode-map (kbd "C-M-u") 'dired-up-directory)
(define-key dired-mode-map (kbd "K") 'dired-k)
;; display directories by first
(load-library "ls-lisp")
;; recursive copy, remove
(custom-set-variables
'(dired-recursive-copies 'always)
'(dired-recursive-deletes 'always)
'(dired-auto-revert-buffer t)
'(dired-dwim-target t)
'(ls-lisp-dirs-first t))
;; dired-x
(load "dired-x")
;; helm
(require 'helm-config)
(require 'helm)
(define-key helm-map (kbd "C-q") 'helm-execute-persistent-action)
(custom-set-variables
'(helm-input-idle-delay 0)
'(helm-exit-idle-delay 0)
'(helm-command-prefix-key nil)
'(helm-candidate-number-limit 500))
(require 'helm-descbinds)
(helm-descbinds-install)
;; gtags
(custom-set-variables
'(helm-gtags-pulse-at-cursor nil))
(with-eval-after-load 'helm-gtags
(define-key helm-gtags-mode-map (kbd "M-t") 'helm-gtags-find-tag)
(define-key helm-gtags-mode-map (kbd "M-r") 'helm-gtags-find-rtag)
(define-key helm-gtags-mode-map (kbd "M-s") 'helm-gtags-find-symbol)
(define-key helm-gtags-mode-map (kbd "C-c >") 'helm-gtags-next-history)
(define-key helm-gtags-mode-map (kbd "C-c <") 'helm-gtags-previous-history)
(define-key helm-gtags-mode-map (kbd "C-t") 'helm-gtags-pop-stack))
(custom-set-variables
'(helm-ag-insert-at-point 'symbol))
;; helm in dired
(setq-default split-width-threshold 0)
(define-key helm-map (kbd "C-p") 'helm-previous-line)
(define-key helm-map (kbd "C-n") 'helm-next-line)
(define-key helm-map (kbd "C-M-p") 'helm-previous-source)
(define-key helm-map (kbd "C-M-n") 'helm-next-source)
;; helm-show-kill-ring
(global-set-key (kbd "C-M-y") 'helm-show-kill-ring)
;; apropos with helm
(global-set-key (kbd "C-h a") 'helm-apropos)
(global-set-key (kbd "M-g M-i") 'import-popwin)
;; helm faces
(require 'helm-files)
(setq helm-find-files-doc-header "")
;; naming of same name file
(require 'uniquify)
(setq uniquify-buffer-name-style 'post-forward-angle-brackets)
(setq recentf-max-saved-items 1000)
(require 'recentf)
(run-at-time t 600 'recentf-save-list)
(setq recentf-exclude '(".recentf" "/repos/" "/elpa/" "CMakeCache.txt"
"\\.mime-example" "\\.ido.last" "/tmp/gomi/" "/.cpanm/"))
(recentf-mode +1)
;; for virsion control system
(global-auto-revert-mode 1)
(setq auto-revert-interval 10
vc-follow-symlinks t
auto-revert-check-vc-info t)
;; disable vc-mode
(setq vc-handled-backends '(Git))
;; which-func
(require 'which-func)
(set-face-foreground 'which-func "chocolate4")
(set-face-bold-p 'which-func t)
(which-func-mode t)
;; view-mode
(setq view-read-only t)
;; for regexp color
(set-face-foreground 'font-lock-regexp-grouping-backslash "#ff1493")
(set-face-foreground 'font-lock-regexp-grouping-construct "#ff8c00")
;; popwin
(require 'popwin)
(global-set-key (kbd "M-z") popwin:keymap)
(defvar popwin:special-display-config-backup popwin:special-display-config)
(setq display-buffer-function 'popwin:display-buffer)
(setq popwin:special-display-config
(append '(("*Apropos*") ("*sdic*") ("*Faces*") ("*Colors*"))
popwin:special-display-config))
;; use popwin
(push '(Man-mode :stick t :height 20) popwin:special-display-config)
;; fixed line position after scrollup, scrolldown
(defadvice scroll-up (around scroll-up-relative activate)
"Scroll up relatively without move of cursor."
(let ((orig-line (count-lines (window-start) (point))))
ad-do-it
(move-to-window-line orig-line)))
(defadvice scroll-down (around scroll-down-relative activate)
"Scroll down relatively without move of cursor."
(let ((orig-line (count-lines (window-start) (point))))
ad-do-it
(move-to-window-line orig-line)))
;; for symboliclink
(setq-default find-file-visit-truename t)
(global-set-key (kbd "M-9") 'bs-cycle-next)
(global-set-key (kbd "M-0") 'bs-cycle-previous)
;; Ctrl-q map
(defvar my/ctrl-q-map (make-sparse-keymap)
"My original keymap binded to C-q.")
(defalias 'my/ctrl-q-prefix my/ctrl-q-map)
(define-key global-map (kbd "C-q") 'my/ctrl-q-prefix)
(define-key my/ctrl-q-map (kbd "C-q") 'quoted-insert)
;; goto-chg
(smartrep-define-key
global-map "C-q" '(("-" . 'goto-last-change)
("+" . 'goto-last-change-reverse)))
(global-set-key (kbd "C-x v d") 'vc-diff)
;; company-mode
(require 'company)
(custom-set-variables
'(company-idle-delay nil))
(global-company-mode +1)
(global-set-key (kbd "C-M-i") 'company-complete)
(define-key company-active-map (kbd "C-n") 'company-select-next)
(define-key company-active-map (kbd "C-p") 'company-select-previous)
(define-key company-active-map (kbd "C-s") 'company-filter-candidates)
(define-key company-active-map (kbd "C-i") 'company-complete-selection)
(define-key lisp-interaction-mode-map (kbd "C-M-i") 'company-elisp)
(define-key emacs-lisp-mode-map (kbd "C-M-i") 'company-complete)
(set-face-attribute 'company-tooltip nil
:foreground "black" :background "lightgrey")
(set-face-attribute 'company-tooltip-common nil
:foreground "black" :background "lightgrey")
(set-face-attribute 'company-tooltip-common-selection nil
:foreground "white" :background "steelblue")
(set-face-attribute 'company-tooltip-selection nil
:foreground "black" :background "steelblue")
(set-face-attribute 'company-preview-common nil
:background nil :foreground "lightgrey" :underline t)
(set-face-attribute 'company-scrollbar-fg nil
:background "orange")
(set-face-attribute 'company-scrollbar-bg nil
:background "gray40")
;; yasnippet
(autoload 'yas-minor-mode-on "yasnippet" nil t)
(with-eval-after-load 'yasnippet
(setq yas-snippet-dirs (list (concat user-emacs-directory "my_snippets"))
yas-prompt-functions '(my-yas/prompt))
(yas-reload-all))
;; enable yasnippet mode
(dolist (hook '(c-mode-hook
c++-mode-hook
sh-mode-hook))
(add-hook hook 'yas-minor-mode-on))
;; buffer-mode
(global-set-key (kbd "M-g h") 'buf-move-left)
(global-set-key (kbd "M-g j") 'buf-move-down)
(global-set-key (kbd "M-g i") 'buf-move-up)
(global-set-key (kbd "M-g l") 'buf-move-right)
;; anzu
(global-anzu-mode +1)
(custom-set-variables
'(anzu-mode-lighter "")
'(anzu-deactivate-region t)
'(anzu-replace-to-string-separator " => "))
(set-face-attribute 'anzu-mode-line nil :foreground nil)
;; editutil
(require 'editutil)
(editutil-default-setup)
;; (makeunbound 'overriding-minor-mode-map)
(define-minor-mode overriding-minor-mode
""
t
""
`((,(kbd "M-q") . editutil-zap-to-char)
(,(kbd "M-Q") . editutil-zap-to-char-backward)
(,(kbd "M-a") . editutil-backward-char)
(,(kbd "M-e") . editutil-forward-char)))
;; view-mode
(custom-set-variables
'(view-read-only t))
(with-eval-after-load 'view
(define-key view-mode-map (kbd "N") 'View-search-last-regexp-backward)
(define-key view-mode-map (kbd "?") 'View-search-regexp-backward?)
(define-key view-mode-map (kbd "g") 'View-goto-line)
(define-key view-mode-map (kbd "G") 'editutil-goto-last-line)
(define-key view-mode-map (kbd "f") 'editutil-forward-char)
(define-key view-mode-map (kbd "F") 'editutil-backward-char)
(define-key view-mode-map (kbd "w") 'forward-word)
(define-key view-mode-map (kbd "b") 'backward-word)
(define-key view-mode-map (kbd "i") 'editutil-view-insert)
(define-key view-mode-map (kbd "a") 'editutil-view-insert-at-next)
(define-key view-mode-map (kbd "I") 'editutil-view-insert-at-bol)
(define-key view-mode-map (kbd "A") 'editutil-view-insert-at-eol)
(define-key view-mode-map (kbd "h") 'backward-char)
(define-key view-mode-map (kbd "j") 'next-line)
(define-key view-mode-map (kbd "k") 'previous-line)
(define-key view-mode-map (kbd "l") 'forward-char)
(define-key view-mode-map (kbd "[") 'backward-paragraph)
(define-key view-mode-map (kbd "]") 'forward-paragraph))
;; magit
(global-set-key (kbd "M-g M-g") 'magit-status)
(custom-set-variables
'(magit-auto-revert-mode-lighter ""))
(with-eval-after-load 'magit
(defadvice magit-status (around magit-fullscreen activate)
(window-configuration-to-register :magit-fullscreen)
ad-do-it
(delete-other-windows))
(define-key magit-status-mode-map (kbd "q") 'my/magit-quit-session)
(set-face-attribute 'secondary-selection nil
:background nil))
(with-eval-after-load 'magit-diff
(set-face-attribute 'magit-diff-added nil
:background nil)
(set-face-attribute 'magit-diff-added-highlight nil
:background nil)
(set-face-attribute 'magit-diff-base nil
:background nil)
(set-face-attribute 'magit-diff-base-highlight nil
:background nil)
(set-face-attribute 'magit-diff-file-heading-highlight nil
:background nil)
(set-face-attribute 'magit-diff-file-heading-selection nil
:background nil)
(set-face-attribute 'magit-diff-hunk-heading nil
:foreground "white"
:background nil)
(set-face-attribute 'magit-diff-hunk-heading-selection nil
:background nil)
(set-face-attribute 'magit-diff-hunk-heading-highlight nil
:foreground "white"
:background nil)
(set-face-attribute 'magit-diff-lines-boundary nil
:background nil)
(set-face-attribute 'magit-diff-lines-heading nil
:background nil)
(set-face-attribute 'magit-diff-our nil
:background nil)
(set-face-attribute 'magit-diff-our-highlight nil
:background nil)
(set-face-attribute 'magit-diff-removed nil
:background nil)
(set-face-attribute 'magit-diff-removed-highlight nil
:background nil)
(set-face-attribute 'magit-section-highlight nil
:background nil)
(set-face-attribute 'magit-diff-context-highlight nil
:background nil)
(set-face-attribute 'magit-diff-file-heading-highlight nil
:background nil))
(defun my/magit-quit-session ()
(interactive)
(kill-buffer)
(jump-to-register :magit-fullscreen)
(dolist (win (window-list))
(let ((buf (window-buffer win)))
(with-current-buffer buf
(when git-gutter-mode
(git-gutter))))))
(custom-set-variables
'(git-commit-fill-column 80))
(defun my/git-commit-mode-hook ()
(when (looking-at "\n")
(open-line 1)))
(with-eval-after-load 'git-commit-mode
(add-hook 'git-commit-mode-hook 'my/git-commit-mode-hook))
(defadvice git-commit-commit (after move-to-magit-buffer activate)
(delete-window))
;; git-gutter
(global-git-gutter-mode t)
(custom-set-variables
'(git-gutter:lighter " GG"))
(global-set-key (kbd "C-x v =") 'git-gutter:popup-hunk)
(global-set-key (kbd "C-x v u") 'git-gutter)
(smartrep-define-key
global-map "C-x" '(("n" . 'git-gutter:next-hunk)
("p" . 'git-gutter:previous-hunk)))
;; eshell
(custom-set-variables
'(eshell-banner-message "")
'(eshell-cmpl-cycle-completions nil)
'(eshell-hist-ignoredups t)
'(eshell-scroll-show-maximum-output nil))
(defun my/eshell-mode-hook ()
(define-key eshell-mode-map (kbd "M-r") 'helm-eshell-history))
(add-hook 'eshell-mode-hook 'my/eshell-mode-hook)
(global-set-key (kbd "C-\\") 'eshellutil-popup)
(with-eval-after-load 'diff-mode
(set-face-attribute 'diff-added nil
:background nil :foreground "green"
:weight 'normal)
(set-face-attribute 'diff-removed nil
:background nil :foreground "red"
:weight 'normal)
(set-face-attribute 'diff-refine-change nil
:background nil :foreground "yellow"
:weight 'normal)
(set-face-attribute 'diff-file-header nil
:foreground "white"
:background nil :weight 'extra-bold)
(set-face-attribute 'diff-function nil
:foreground "cyan"
:background nil
:underline nil)
(set-face-attribute 'diff-header nil
:background nil
:underline nil)
(set-face-attribute 'diff-hunk-header nil
:foreground "yellow"
:background nil
:weight 'bold
:underline t))
(progn
(set-face-attribute 'helm-selection nil
:foreground "pink" :background "black")
(set-face-attribute 'helm-ff-file nil
:foreground "white" :weight 'normal)
(set-face-attribute 'helm-ff-directory nil
:foreground "cyan" :background nil)
(set-face-attribute 'show-paren-match nil
:background nil :foreground nil
:underline t :weight 'bold)
(set-face-background 'show-paren-match nil))
;; Go Lang
(custom-set-variables
'(gofmt-command "goimports"))
(with-eval-after-load 'go-mode
(add-hook 'go-mode-hook 'my/go-mode-hook)
(add-hook 'go-mode-hook 'go-eldoc-setup)
(add-to-list 'company-backends 'company-go)
(define-key go-mode-map (kbd "C-c C-a") 'helm-godoc-import)
(define-key go-mode-map (kbd "C-c C-j") 'go-direx-pop-to-buffer)
(define-key go-mode-map (kbd "C-c C-c") 'my/flycheck-list-errors)
(define-key go-mode-map (kbd "C-c C-s") 'my/gofmt)
(define-key go-mode-map (kbd "C-c C-t") 'ff-find-other-file)
(define-key go-mode-map (kbd "C-c C-d") 'helm-godoc)
(define-key go-mode-map (kbd "C-c ?") 'my/godoc-type-at-cursor)
(define-key go-mode-map (kbd "M-.") 'godef-jump)
(define-key go-mode-map (kbd "M-,") 'pop-tag-mark)
(define-key go-mode-map (kbd ":") nil))
(defun my/godoc-type-at-cursor ()
(interactive)
(save-excursion
(unless (looking-at-p "\\>")
(forward-word 1))
(let ((cand (go-eldoc--invoke-autocomplete)))
(when (and cand (string-match "\\`\\([^,]+\\),,\\(.+\\)$" cand))
(let ((name (match-string-no-properties 1 cand))
(type (match-string-no-properties 2 cand)))
(when (string-match "\\`var\\(.+\\)" type)
(setq type (match-string-no-properties 1 type)))
(message "%s:%s" (propertize name 'face 'font-lock-type-face) type))))))
(defun my/gofmt ()
(interactive)
(when (buffer-modified-p)
(save-buffer))
(gofmt)
(when (buffer-modified-p)
(save-buffer)))
(defun my/go-mode-hook ()
(setq compile-command "go test"))
(add-to-list 'auto-mode-alist
'("\\.\\(pl\\|pm\\|cgi\\|t\\|psgi\\)\\'" . cperl-mode))
(add-to-list 'auto-mode-alist '("cpanfile\\'" . cperl-mode))
(defalias 'perl-mode 'cperl-mode)
(with-eval-after-load 'cperl-mode
(cperl-set-style "PerlStyle")
(setq cperl-auto-newline nil)
;; bindings
(define-key cperl-mode-map "\177" nil)
(define-key cperl-mode-map (kbd ";") nil)
(define-key cperl-mode-map (kbd ":") nil)
(define-key cperl-mode-map (kbd "(") nil)
(define-key cperl-mode-map (kbd "{") nil)
(define-key cperl-mode-map (kbd "}") nil)
(define-key cperl-mode-map (kbd "[") nil))
(custom-set-variables
'(cperl-indent-parens-as-block t)
'(cperl-close-paren-offset -4)
'(cperl-indent-subs-specially nil))
;; python
(defun my/python-mode-hook ()
(add-to-list 'company-backends 'company-jedi))
(add-hook 'python-mode-hook 'my/python-mode-hook)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment