Skip to content

Instantly share code, notes, and snippets.

@ardggy
Last active March 29, 2019 16:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ardggy/3b8519a505d479e97c1d6dfc0926d07d to your computer and use it in GitHub Desktop.
Save ardggy/3b8519a505d479e97c1d6dfc0926d07d to your computer and use it in GitHub Desktop.
[ardggy] init.el for GNU Emacs
;;; -*- mode: emacs-lisp -*-
;;; .emacs
(eval-when-compile
(require 'cl-lib))
(setq gc-cons-threshold (* 128 1024 1024))
(setq garbage-collection-messages t)
(when (require 'server nil t)
(unless (server-running-p)
(server-start)))
;; Added by Package.el. This must come before configurations of
;; installed packages. Don't delete this line. If you don't want it,
;; just comment it out by adding a semicolon to the start of the line.
;; You may delete these explanatory comments.
(when (require 'package nil t)
(setq package-archives
'(("gnu" . "http://elpa.gnu.org/packages/")
("melpa" . "http://melpa.org/packages/")
("org" . "http://orgmode.org/elpa/")))
(package-initialize)
)
(unless (package-installed-p 'benchmark-init)
(package-install 'benchmark-init))
(when (and nil (require 'benchmark-init nil t))
(add-hook 'after-init-hook 'benchmark-init/deactivate))
(add-hook 'after-init-hook
(lambda ()
(call-interactively 'emacs-init-time)))
(setq scroll-step 1
scroll-conservatively 50
scroll-margin 0)
;; (setq initial-major-mode 'emacs-lisp-mode)
(setq byte-compile-warnings '(not free-vars obsolete make-local interactive-only unresolved))
(setq confirm-kill-emacs 'y-or-n-p)
(with-eval-after-load "init"
(global-set-key (kbd "C-h") #'delete-backward-char)
(global-set-key (kbd "M-h") #'backward-kill-word)
(global-set-key (kbd "M-?") #'help)
(global-set-key (kbd "M-ESC ESC") #'keyboard-quit))
(when load-file-name
(setq user-emacs-directory (file-name-directory load-file-name)))
(unless (require 'use-package nil t)
(package-install 'use-package))
;; theme
(add-hook 'window-setup-hook #'my-theme)
(add-hook 'window-setup-hook #'title-bar)
(when (eval-when-compile (eq window-system 'ns))
(add-to-list 'default-frame-alist '(ns-transparent-titlebar . t))
(add-to-list 'default-frame-alist '(ns-appearance . dark)))
(defun title-bar ()
(setq
frame-title-format
'("" global-mode-string (:eval (if (buffer-file-name) " %f" " %b")))))
(defun my-theme ()
(load-theme 'atom-one-dark t))
(use-package atom-one-dark-theme
:no-require t
:ensure t :pin melpa
:defer t
:commands (atom-one-dark)
)
;;; init.elc
;; Compile on kill-emacs
;; Delete `init.elc' after init
(add-hook 'kill-emacs-hook 'byte-compile-init-file)
(add-hook 'after-init-hook 'delete-compiled-init-file)
(defun byte-compile-init-file ()
(interactive)
(byte-compile-file (locate-user-emacs-file "init.el")))
(defun delete-compiled-init-file ()
(interactive)
(when (file-writable-p (locate-user-emacs-file "init.elc"))
(delete-file (locate-user-emacs-file "init.elc") nil)))
;; last-frame
(add-hook 'after-init-hook #'load-last-frame)
(add-hook 'kill-emacs-hook #'save-last-frame)
(defvar last-frame-file "last-frame-alist.el")
(defvar last-frame-properties '(top left width height))
(defun save-last-frame ()
(let ((file (locate-user-emacs-file last-frame-file)))
(with-temp-buffer
(erase-buffer)
(setq-local buffer-file-coding-system 'utf-8)
(let ((parameters (frame-parameters)))
(pp (mapcar (lambda (key) (assoc key parameters))
last-frame-properties)
(current-buffer))
(insert "\n")
(write-file file nil)))))
(defun load-last-frame ()
(let ((file (locate-user-emacs-file last-frame-file)))
(when (file-readable-p file)
(with-temp-buffer
(erase-buffer)
(insert-file-contents file)
(let ((parameters (read (current-buffer))))
(modify-frame-parameters nil parameters)
(setq initial-frame-alist (append parameters initial-frame-alist))
;; (setq default-frame-alist initial-frame-alist)
)))))
(use-package hideshow
:no-require t
:defer t
:init (add-hook 'prog-mode-hook 'hs-minor-mode)
:config
(define-key hs-minor-mode-map (kbd "C-c [ [") #'hs-toggle-hiding)
(define-key hs-minor-mode-map (kbd "C-c [ h") #'hs-hide-block)
(define-key hs-minor-mode-map (kbd "C-c [ s") #'hs-show-block)
(define-key hs-minor-mode-map (kbd "C-c [ l") #'hs-hide-level)
(define-key hs-minor-mode-map (kbd "C-c [ M-h") #'hs-hide-all)
(define-key hs-minor-mode-map (kbd "C-c [ M-s") #'hs-show-all)
(let ((ruby-mode-hs-info
'(ruby-mode
"class\\|module\\|def\\|if\\|unless\\|case\\|while\\|until\\|for\\|begin\\|do"
"end"
"#"
ruby-move-to-block
nil)))
(unless (member ruby-mode-hs-info hs-special-modes-alist)
(add-to-list 'hs-special-modes-alist ruby-mode-hs-info)))
)
(use-package display-line-numbers
:no-require t
:defer t
:init (add-hook 'emacs-startup-hook 'global-display-line-numbers-mode)
:config
(custom-set-variables '(display-line-numbers-width 4)))
(with-eval-after-load "python"
(defun python-shell-parse-command () "python3 -i"))
(use-package highlight-symbol
:no-require t
:ensure t :pin melpa
:defer t
:commands (highlight-symbol-mode)
:init
(run-at-time 1.5 nil 'require 'highlight-symbol)
(add-hook 'prog-mode-hook #'highlight-symbol-mode)
(add-hook 'prog-mode-hook #'highlight-symbol-nav-mode)
:config
(setq highlight-symbol-idle-delay 0.75)
(set-face-attribute 'highlight-symbol-face nil :foreground "yellow")
)
(use-package dimmer
:no-require t
:ensure t :pin melpa
:defer t
:commands (dimmer-mode)
:init
(add-hook 'emacs-startup-hook #'dimmer-mode)
:config)
(use-package rainbow-delimiters
:no-require t
:ensure t :pin melpa
:commands (rainbow-delimiters-mode)
:defer t
:init (run-with-idle-timer 1.5 nil #'rainbow-delimiters-mode)
:config
)
(defadvice mark-word (before mark-word-around activate)
"mark, around word."
(beginning-of-thing 'word))
(defadvice subword-mark (before mark-subword-around activate)
"mark, around subword."
(let ((prev-forward-op (get 'word 'forward-op)))
(put 'word 'forward-op 'subword-forward)
(beginning-of-thing 'word)
(put 'word 'forward-op prev-forward-op)))
(use-package csv-mode
:no-require t
:ensure t :pin gnu
:defer t
:commands (csv-mode)
:mode (("\\.csv$" . csv-mode))
:config
(add-hook 'csv-mode-hook #'csv-mode-config))
(defun csv-mode-config ()
(setq-local csv-header-lines 1)
(setq-local require-final-newline nil))
(use-package exec-path-from-shell
:no-require t
:ensure t :pin melpa
:init
(run-at-time 0.25 nil #'exec-path-from-shell-initialize)
:config
(setq exec-path-from-shell-check-startup-files nil))
(use-package editorconfig
:ensure t
:if nil
:commands (editorconfig-mode)
:after (exec-path-from-shell)
:defer t
:init
(run-with-idle-timer 2.5 nil 'require 'editorconfig)
)
(use-package popwin
:no-require t
:ensure t :pin melpa
:commands (popwin-mode)
:defer t
:init
(add-hook 'emacs-startup-hook 'popwin-mode)
)
(use-package ggtags
:no-require t
:ensure t :pin melpa
:defer t
:init
(add-hook 'c-mode-hook 'ggtags-mode)
(add-hook 'cc-mode-hook 'ggtags-mode)
(add-hook 'php-mode-hook 'ggtags-mode)
:config
(setq-default ggtags-enable-navigation-keys nil)
(setq ggtags-enable-navigation-keys nil)
)
(use-package ido
:no-require t
:defer t
:init
(add-hook 'emacs-startup-hook 'ido-mode)
:config
(define-key ido-common-completion-map (kbd "C-n") 'ido-next-match)
(define-key ido-common-completion-map (kbd "C-p") 'ido-prev-match)
(setq ido-enable-flex-matching t)
(setq ido-everywhere t)
)
(use-package ido-completing-read+
:ensure t :pin melpa
:after ido
:config
(ido-ubiquitous-mode))
(use-package smex
:no-require t
:ensure t :pin melpa
:defer t
:init
(add-hook 'emacs-startup-hook 'smex-initialize)
:config
(global-set-key (kbd "M-x") 'smex)
(global-set-key (kbd "M-X") 'smex-major-mode-commands)
(global-set-key (kbd "C-c M-x") 'execute-extended-command)
)
(use-package vc
:no-require t
:defer t
:config
(setq vc-follow-symlinks t)
(setq vc-diff-switches '("-Bbu")))
(defun vc-mode-when-responsible ()
(interactive)
(when (ignore-errors
(vc-responsible-backend (buffer-file-name)))
(vc-mode)))
(use-package magit
:disabled
:after (exec-path-from-shell)
:no-require t
:ensure t :pin melpa
:defer t
:config
(setq magit-diff-refine-hunk 'all)
(setq magit-auto-revert-mode t)
(setq smerge-refine-ignore-whitespace nil))
(use-package flymake
:no-require t
:commands (flymake-mode)
:defer t
:config
(unless (eval-when-compile (eq system-type 'windows-nt))
(add-hook 'c-mode-common-hook 'flymake-mode))
)
(use-package flymake-cursor
:no-require t
:ensure t
:require flymake
:disabled)
(defun c-stroustrup-style ()
(c-set-style "stroustrup"))
(use-package cc-mode
:no-require t
:ensure t :pin manual
:commands (cc-mode)
:defer t
:init
:config
(add-hook 'c-mode-hook 'c-stroustrup-style)
(add-hook 'c-mode-hook 'c-mode-indent)
)
(defun c-mode-indent ()
(setq-local tab-width 4)
(setq-local indent-tabs-mode nil)
(setq-local require-final-newline t)
(setq-local c-basic-offset 4))
(setq php-doc-directory (concat (getenv "HOME") "/Documents/php-chunked-xhtml"))
(defun php-mode-doc ()
(setq-local eldoc-documentation-function 'php-doc-eldoc-function))
(defun php-mode-indent ()
(setq-local c-basic-offset 4)
(setq-local indent-tabs-mode nil)
(setq-local tab-width 4)
(setq-local require-final-newline t))
(use-package php-mode
:no-require t
:ensure t :pin melpa
:defer t
:mode (("\\.php$" . php-mode))
:init
(run-at-time 4.0 nil 'require 'php-mode)
:config
(add-hook 'php-mode-hook 'auto-revert-mode)
(add-hook 'php-mode-hook 'editorconfig-mode)
(add-hook 'php-mode-hook 'hs-minor-mode)
(add-hook 'php-mode-hook 'prettify-symbols-mode)
(add-hook 'php-mode-hook 'rainbow-delimiters-mode)
(add-hook 'php-mode-hook 'show-paren-mode) ;(
(add-hook 'php-mode-hook 'subword-mode)
(add-hook 'php-mode-hook 'which-function-mode)
(add-hook 'php-mode-hook 'php-enable-default-coding-style)
(add-hook 'php-mode-hook 'php-mode-indent)
(when (eval-when-compile (executable-find "php"))
;; (add-hook 'php-mode-hook 'flymake-mode)
;; (add-hook 'php-mode-hook 'flymake-php-init)
)
;; (add-hook 'php-mode-hook 'php-eldoc-enable) ;; depend on `auto-complete-mode'
)
(defun web-mode-hook ()
(setq-local indent-tabs-mode nil)
(setq-local web-mode-markup-indent-offset 2)
(setq-local web-mode-script-padding 0)
(setq-local web-mode-style-padding 0)
(setq-local web-mode-css-indent-offset 2)
(setq-local web-mode-enable-css-colorization t)
(setq-local web-mode-enable-current-element-highlight t)
(web-mode-set-engine 'django)
)
(use-package web-mode
:no-require t
:ensure t :pin melpa
:defer t
:mode (("\\.tpl$" . web-mode)
("views?/\\(?:../\\)*.*\\.php$" . web-mode)
("\\.html$" . web-mode)
("\\.twig$" . web-mode))
:init (run-at-time 5.0 nil 'require 'web-mode)
:config
(add-hook 'web-mode-hook 'web-mode-hook)
(add-hook 'web-mode-hook 'hs-minor-mode)
)
(use-package whitespace
:no-require t
:commands (whitespace-mode)
:defer t
:init
(add-hook 'after-change-major-mode-hook 'whitespace-mode)
(add-hook 'before-save-hook 'delete-trailing-whitespace)
:config
(setq-default show-trailing-whitespace t)
(setq whitespace-style '(face spaces space-mark tabs tab-mark newline newline-mark))
(setq whitespace-space-regexp "\\(\u3000+\\)")
(setq whitespace-display-mappings
'((space-mark ?\u3000 [?\u25a1])
(tab-mark ?\t [?\u00BB ?\t])
(newline-mark ?\n [?\u21B2 ?\n])))
(set-face-attribute 'whitespace-tab nil
:foreground "grey22")
(set-face-attribute 'whitespace-newline nil
:foreground "slate grey")
(set-face-attribute 'whitespace-space nil
:foreground "green" :bold t)
)
(use-package projectile
:no-require t
:ensure t :pin melpa
:defer t
:init (run-at-time 2.0 nil 'require 'projectile)
:config
(projectile-mode)
(define-key global-map (kbd "C-c p") projectile-command-map)
(setq projectile-enable-caching nil)
(setq projectile-indexing-method (eval-when-compile (if (eq system-type 'windows-nt) 'native 'alien)))
(setq projectile-file-exists-local-cache-expire nil)
(setq projectile-mode-line '(:eval (format " Pj[%s]" (projectile-project-name))))
;; require ggtags-mode
;; (setq projectile-tags-command "gtags -qi")
;; (setq projectile-tags-file-name "GTAGS")
(when (featurep 'perspective)
(require 'persp-projectile))
(add-hook 'projectile-mode-hook 'auto-revert-mode)
)
(use-package ggtags
:no-require t
:after projectile
:ensure t :pin melpa
:defer t
:init (add-hook 'projectile-mode-hook 'ggtags-mode)
)
(with-eval-after-load "sql"
(sql-set-product 'mysql)
)
(defun my-sql-indent ()
(setq-local sql-indent-offset 2)
(setq-local sql-indent-maybe-tab nil))
(defun mysql-syntax ()
(setq-local syntax-propertize-function 'mysql-syntax-propertize-function)
)
(defun mysql-syntax-propertize-function (begin end)
(funcall
(syntax-propertize-rules
("\\(#\\).*\\(\n\\)" (1 "<") (2 ">")))
begin
end))
(setq-default indicate-buffer-boundaries '((top . left) (t . left)))
(setq inhibit-startup-screen t)
(setq-default require-final-newline t)
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq visible-bell nil)
(setq ring-bell-function 'ignore)
(setq initial-scratch-message "")
(when window-system
(run-at-time 0.125 nil 'scroll-bar-mode -1))
;;; on Mac OS X
;; $ defaults write org.gnu.Emacs ToolBar -string no
;; $ defaults write org.gnu.Emacs MenuBar -string no
;; (run-with-idle-timer 0.5 nil 'tool-bar-mode -1)
(run-at-time 0.5 nil 'menu-bar-mode -1)
(set-language-environment "Japanese")
(set-locale-environment "ja_JP.UTF-8")
(setq system-time-locale "C")
;; (setq default-process-coding-system 'utf-8-unix)
;; (setq default-buffer-file-coding-system 'utf-8-unix)
(prefer-coding-system 'utf-8-unix)
(setq eol-mnemonic-dos "(CRLF)")
(setq eol-mnemonic-mac "(CR)")
(setq eol-mnemonic-unix "(LF)")
(when (eval-when-compile (eq window-system 'ns))
(set-file-name-coding-system 'utf-8-hfs))
(when (eval-when-compile (eq system-type 'windows-nt))
(prefer-coding-system 'japanese-cp932) ; third
(prefer-coding-system 'euc-jp) ; second (alias of japanese-iso-8bit)
(prefer-coding-system 'utf-8-unix) ; first
;; priority list -> (coding-system-priority-list)
(setq default-process-coding-system '(cp932-dos . cp932-dos))
(set-terminal-coding-system 'cp932-dos)
(set-file-name-coding-system 'cp932-dos)
)
(global-set-key (kbd "M-s %") 'replace-string)
(use-package git-gutter-fringe+
:no-require t
:when window-system
:ensure t :pin melpa
:commands (git-gutter+-enable-fringe-display-mode)
:defer t
:init (add-hook 'prog-mode-hook 'git-gutter+-enable-fringe-display-mode)
)
(use-package fringe-current-line
:no-require t
:when window-system
:ensure t :pin melpa
:defer t
:commands (global-fringe-current-line-mode)
:init (add-hook 'emacs-startup-hook 'global-fringe-current-line-mode)
)
(defun vc-svn-coding-system ()
(when (eval-when-compile (eq system-type 'windows-nt))
(setq-local buffer-file-coding-system 'cp932-dos)))
(with-eval-after-load "vc"
(setf vc-make-backup-files nil)
(when (featurep 'popwin)
(push '("\\*Annotate.*\\*" :regexp t) popwin:special-display-config)
(push '"*vc*" popwin:special-display-config)
)
(when (eval-when-compile (and t (eq system-type 'windows-nt)))
(add-to-list 'process-coding-system-alist '("[sS][vV][nN]" . (cp932-dos . cp932-dos)))))
(use-package paren
:defer t
:init (add-hook 'after-init-hook 'show-paren-mode)
:config
(setf blink-matching-paren t)
(setf blick-matching-delay 1)
(setf blink-matching-paren-distance 102400))
(use-package elec-pair
:no-require t
:init (run-at-time 0.5 nil 'electric-pair-mode -1)
:defer t
)
(setf use-dialog-box nil)
(setf auto-save-default t)
(setq-default make-backup-files nil)
(setq backup-inhibited t)
(with-eval-after-load 'prog-mode
(push '("<=" . ?≦) prettify-symbols-alist)
(push '(">=" . ?≧) prettify-symbols-alist)
(push '("!=" . ?≠) prettify-symbols-alist)
)
(with-eval-after-load 'lisp-mode
(add-hook 'lisp-mode-hook 'check-parens-before-save))
(with-eval-after-load 'elisp-mode
(add-hook 'emacs-lisp-mode-hook 'hs-minor-mode)
;; (add-hook 'emacs-lisp-mode-hook 'prettify-symbols-mode)
(add-hook 'emacs-lisp-mode-hook 'el-prettify-symbol)
(add-hook 'emacs-lisp-mode-hook 'superword-mode)
;; (add-hook 'emacs-lisp-mode-hook 'flymake-mode)
(add-hook 'emacs-lisp-mode-hook 'eldoc-mode)
(add-hook 'emacs-lisp-mode-hook 'highlight-symbol-mode)
;; (add-hook 'emacs-lisp-mode-hook 'find-function-setup-keys)
(add-hook 'emacs-lisp-mode-hook 'auto-revert-mode)
(add-hook 'emacs-lisp-mode-hook 'el-config)
(add-hook 'emacs-lisp-mode-hook 'check-parens-before-save)
)
(defun el-prettify-symbol ()
(make-local-variable 'prettify-symbols-alist)
(push '("<=" . ?≦) prettify-symbols-alist)
(push '(">=" . ?≧) prettify-symbols-alist)
(push '("lambda" . ?λ) prettify-symbols-alist)
)
(defun el-config ()
(setq-local mode-name "el")
(setq-local lisp-indent-offset nil)
(setq-local indent-tabs-mode nil)
)
(defun check-parens-before-save ()
"Run `check-parens' function before saving a buffer."
(add-hook 'write-contents-functions 'check-parens nil t))
;; scheme
(autoload 'gauche-manual "gauche-manual" t)
(setq browse-url-browser-function 'eww-browse-url)
(use-package cmuscheme
:mode (("\\.scm$" . scheme-mode))
:defer t
:init
:config
(add-to-list 'process-coding-system-alist '("gosh" utf-8-unix . utf-8-unix))
(add-hook 'scheme-mode-hook 'fontify-gauche-regexp-literal)
(add-hook 'scheme-mode-hook 'gauche-syntax)
(add-hook 'scheme-mode-hook 'check-parens-before-save)
(setq scheme-program-name "gosh -i")
;; (define-key inferior-scheme-mode-map (kbd "M-g i") 'gauche-manual)
)
;;; from shiro
(defun gauche-info-index (topic)
(interactive
(list (read-string (concat "Gauche help topic : ") (current-word))))
(switch-to-buffer-other-window (get-buffer-create "*info*"))
(info "/usr/local/share/info/gauche-refe.info.gz")
(Info-index topic))
(defun gauche-syntax ()
(setq-local syntax-propertize-function 'gauche-syntax-propertize-function)
)
(defun gauche-syntax-propertize-function (start end)
(let ((case-fold-search nil))
(goto-char start)
(funcall
(syntax-propertize-rules
("#/.*?/i?" (0 "."))
("\\(#\\);" (1 (prog1 "< cn"
(scheme-syntax-propertize-sexp-comment (point) end)))))
(point) end)))
(defun fontify-gauche-regexp-literal ()
(font-lock-add-keywords 'scheme-mode
'(("#/.*?/" (0 font-lock-builtin-face t))
(",|.*?|" (0 font-lock-variable-name-face t))
)))
;; (define-key key-translation-map [?\C-h] [?\C-?])
(defun minibuffer-delete-backward-char ()
(local-set-key (kbd "C-h") 'delete-backward-char))
(add-hook 'minibuffer-setup-hook 'minibuffer-delete-backward-char)
(define-key minibuffer-local-map (kbd "C-p") 'previous-history-element)
(define-key minibuffer-local-map (kbd "C-n") 'next-history-element)
(define-key minibuffer-local-map (kbd "C-h") 'delete-backward-char)
(define-key isearch-mode-map (kbd "C-h") 'isearch-delete-char)
(define-key global-map (kbd "C-M-s") 'isearch-forward-symbol-at-point)
(defun my-org-mode-locale ()
"Change `system-time-locale' locally in org-mode."
(setq-local system-time-locale "C")
)
(defun my-org-timestamp-hook ()
"Change `time-stamp-start' in org-mode"
(setq-local time-stamp-start "#\\+DATE: 2")
(setq-local time-stamp-end "\$")
)
(defun org-capture-journal-filename ()
(format-time-string "~/org/journal/%Y%m%d.org"))
(use-package org
:disabled nil
:commands (org-mode)
:defer t
:mode ((".notes" . org-mode) ("\\.txt$" . org-mode))
:config
(setq org-agenda-sticky t)
(setq org-directory (expand-file-name "~/org"))
(setq org-journal-dir "~/org/journal")
(setq org-agenda-file-regexp "201[56].*\\.org")
(setq org-agenda-files '("~/org/gtd.org" "~/org/journal" "~/org/done.org" "~/org/games.org"))
(setq org-default-notes-file (expand-file-name "~/org/journal.org"))
(setq org-agenda-span 'day)
(setq org-time-stamp-custom-formats org-display-custom-times)
(setq org-agenda-time-leading-zero t)
(setq org-log-done t)
(setq org-todo-keywords
'("INBOX(i)" "TODO(t)" "PROGRESS(i)" "WAIT(w)" "|" "DONE(d)" "SOMEDAY(s)"))
(setq org-capture-templates
'(
("m" "Memo" entry (file (org-capture-journal-filename))
"* %T %?"
)
("t" "TODO" entry (file "~/org/gtd.org")
"* INBOX %?\n - %u\n"
)
("r" "REST" entry (file (org-capture-journal-filename))
"* %T トイレ")
("c" "Cach" plain (file "~/org/2016.lgr")
"\n%<%Y-%m-%d> %^{Payee}
%^{Account} %^{Amount}
%^{Debit}")
))
(setq org-refile-targets '(("~/org/gtd.org" :maxlevel . 1)))
(global-set-key (kbd "C-c o l") 'org-store-link)
(global-set-key (kbd "C-c o c") 'org-capture)
(global-set-key (kbd "C-c o a") 'org-agenda)
(global-set-key (kbd "C-c o b") 'org-iswitchb)
(add-hook 'org-mode-hook 'my-org-mode-locale)
(add-hook 'org-mode-hook 'my-org-timestamp-hook)
(with-eval-after-load 'popwin
(push '(org-mode) popwin:special-display-config)
(push '(org-agenda-mode) popwin:special-display-config)
(push '("\\.org$" :regexp t) popwin:special-display-config)
(push '("^CAPTURE-.+\\*.org$" :regexp t) popwin:special-display-config)
(push "*Shell Command Output*" popwin:special-display-config)
(push "*Org Agenda*" popwin:special-display-config)
(push "*Org Agenda(a)*" popwin:special-display-config)
(push "*Agenda Commands*" popwin:special-display-config)
(push "*Pp Macroexpand Output*" popwin:special-display-config)
)
)
(defun sh-mode-indent ()
(setq-local indent-tabs-mode nil)
(setq-local sh-indentation 2)
(setq-local sh-basic-offset 2)
)
(with-eval-after-load "sh-script"
(add-hook 'sh-mode-hook 'sh-mode-indent)
(set-face-attribute 'sh-heredoc nil :foreground "lightgreen" :bold nil)
)
(with-eval-after-load 'saveplace
(progn
(setq-default save-place t)))
;; instead of 'abort-recursive-edit' (C-x X a)
;; (add-hook 'find-file-hook 'view-mode)
(add-hook 'find-function-after-hook 'find-el-hook)
(add-hook 'xref-after-jump-hook 'find-el-hook)
(with-eval-after-load "mule-cmd"
(define-key global-map (kbd "C-\\") 'view-mode)
)
(with-eval-after-load "view"
(define-key view-mode-map (kbd "e") nil)
(define-key view-mode-map (kbd "E") nil)
;; (global-set-key (kbd "C-x C-q") nil)
;; (global-set-key (kbd "C-x C-q") 'view-mode)
)
(defun find-el-hook ()
(when (or
(string-suffix-p ".el.gz" (buffer-file-name))
(string-suffix-p ".el" (buffer-file-name)))
(view-mode 1)))
(define-key global-map (kbd "C-]") 'top-level)
; (mouse-avoidance-mode 'none)
(defun ime-cursor-color ()
(set-cursor-color "yellow"))
(defun normal-cursor-color ()
(set-cursor-color "white"))
(add-hook 'input-method-activate-hook 'ime-cursor-color)
(add-hook 'input-method-deactivate-hook 'normal-cursor-color)
(global-unset-key (kbd "C-x o"))
(global-set-key (kbd "C-x <up>") 'windmove-up)
(global-set-key (kbd "C-x <down>") 'windmove-down)
(global-set-key (kbd "C-x <right>") 'windmove-right)
(global-set-key (kbd "C-x <left>") 'windmove-left)
(global-set-key (kbd "C-x C-n") 'other-window)
(global-set-key (kbd "C-x C-p") (lambda () (interactive) (other-window -1)))
(with-eval-after-load "grep"
(grep-apply-setting 'grep-find-use-xargs 'gnu)
;; ignore binary
(grep-apply-setting 'grep-find-command "find . -type f -print0 | xargs -0 grep --null -nIH -E ")
;; (grep-apply-setting 'grep-find-template "find <D> <X> -type f <F> -print0 | xargs -0 grep <C> -nIH --null -E <R>")
(grep-apply-setting 'grep-command "grep -nIH --null -E ")
;; (grep-apply-setting 'grep-template "grep <X> <C> -n --null -e <R> <F>")
(define-key global-map (kbd "M-s g") 'grep)
(define-key global-map (kbd "M-s f") 'find-grep))
(with-eval-after-load "find-dired"
(setq find-ls-option '("-exec ls -ldh {} +" . "-ldh"))
)
;; M-g prefixed
(define-key goto-map (kbd "l") 'find-library)
(define-key goto-map (kbd "f") 'find-function-at-point)
(define-key goto-map (kbd "v") 'find-variable-at-point)
(use-package migemo
;; :no-require t
:ensure t
:after (exec-path-from-shell)
:when (eval-when-compile (executable-find "cmigemo"))
:commands (migemo-init)
:defer t
:init
(add-hook 'emacs-startup-hook 'migemo-init)
:config
(setq migemo-command "cmigemo")
(setq migemo-options '("-q" "--emacs"))
(setq migemo-dictionary
(eval-when-compile
(cond ((eq system-type 'windows-nt)
(expand-file-name "~/cmigemo-default-win64/dict/utf-8/migemo-dict"))
((eq system-type 'darwin) "/usr/local/Cellar/cmigemo/20110227/share/migemo/utf-8/migemo-dict")
)))
(setq migemo-user-dictionary nil)
(setq migemo-regex-dictionaryel nil)
(setq migemo-coding-system 'utf-8-unix))
(with-eval-after-load "js"
(add-hook 'js-mode-hook 'js-indent)
'js)
(defun js-indent ()
(setq-local indent-tabs-mode nil)
(setq-local js-indent-level 4))
(use-package json-mode
:no-require t
:ensure t
:commands (json-mode)
:mode (("\\.json$" . json-mode) (".babelrc" . json-mode) (".eslintrc" . json-mode))
:defer t
:config
(add-hook 'json-mode-hook 'auto-revert-mode)
(add-hook 'json-mode-hook 'hs-minor-mode)
(add-hook 'json-mode-hook 'json-mode-config)
)
(use-package json
:commands (json-pretty-print-buffer)
:defer t
)
(defun json-validate ()
(let ((buffer (current-buffer)))
(save-excursion
(with-temp-buffer
(erase-buffer)
(insert-buffer-substring buffer)
(json-pretty-print-buffer)
nil))))
(defun json-mode-config ()
(setq-local indent-tabs-mode nil)
(setq-local js-indent-level 2)
;; local-hook
(add-hook 'write-contents-functions 'json-validate nil t)
)
(defalias '** 'expt)
(use-package markdown-mode
:no-require t
:ensure t
:after (exec-path-from-shell)
:when (eval-when-compile (executable-find "markdown"))
:defer t
:mode (("\\.md$" . markdown-mode))
:config
(setq markdown-command "markdown")
(setq markdown-open-command "markdown")
)
(use-package js2-mode
:ensure t
:mode (("\\.es6$" . js2-mode) ("\\.js$" . js2-mode))
:defer t
:config
(progn
;; setting per project (.dir-local.el)
(setq js2-strict-trailing-comma-warning nil)
(setq js2-strict-inconsistent-return-warning nil))
(setq js2-global-externs '("describe" "context" "it" "require" "exports" "module" "process" "after" "before" "afterEach" "beforeEach"))
(add-hook 'js2-mode-hook 'js2-indent)
(add-hook 'js2-mode-hook 'which-function-mode)
(add-hook 'js2-mode-hook 'highlight-symbol-mode)
)
(defun js2-indent ()
(setq-local indent-tabs-mode nil)
(setq-local js2-basic-offset 4)
(setq-local tab-width 4))
(with-eval-after-load "eshell"
(when (require 'ansi-color nil t)
(add-hook 'eshell-load-hook 'ansi-color-for-comint-mode-on)
(defun eshell-handle-ansi-color ()
(ansi-color-apply-on-region eshell-last-output-start
eshell-last-output-end))
(add-to-list 'eshell-output-filter-functions 'eshell-handle-ansi-color)))
(defun rust-indent ()
(setq-local indent-tabs-mode nil)
(setq-local rust-indent-offset 4)
(setq-local rust-indent-method-chain nil)
(setq-local rust-indent-where-clause t)
)
(use-package rust-mode
:no-require t
:ensure t
:after (exec-path-from-shell)
:if (eval-when-compile (executable-find "rustc"))
:mode (("\\.rs$" . rust-mode) ("\\.rlib$" . rust-mode))
:defer t
:init
(add-hook 'rust-mode-hook 'rust-indent)
(add-hook 'rust-mode-hook 'which-function-mode)
(add-hook 'rust-mode-hook 'highlight-symbol-mode)
)
(defun git-config-indent ()
(setq-local indent-tabs-mode t)
(setq-local tab-width 4))
(use-package git-config-mode
:no-require t
:mode (("\\.gitconfig$" . git-config-mode))
:defer t
:config
(add-hook 'git-config-mode-hook 'git-config-indent))
(use-package css-mode
:no-require t
:commands (css-mode)
:defer t
:mode (("\\.css$" . css-mode))
:init
(add-hook 'css-mode-hook 'css-mode-indent))
(defun css-mode-indent ()
(setq-local indent-tabs-mode nil)
(setq-local css-indent-offset 4))
(defun yaml-mode-indent ()
(setq-local indent-tabs-mode nil)
(setq-local tab-width 2))
(use-package yaml-mode
:no-require t
:ensure t
:commands (yaml-mode)
:mode (("\\.ya?ml" . yaml-mode))
:defer t
:init
(add-hook 'yaml-mode-hook 'yaml-mode-indent)
:config
)
(use-package undo-tree
:no-require t
:ensure t
:defer t
:init
(add-hook 'emacs-startup-hook 'global-undo-tree-mode)
:config
(define-key global-map (kbd "C-/") 'undo-tree-redo)
)
(use-package anzu
:requires (migemo)
:no-require t
:ensure t
:defer t
:init
(add-hook 'emacs-startup-hook 'global-anzu-mode)
:config
(setq anzu-use-migemo t)
(setq anzu-mode-lighter "")
(setq anzu-deactivate-region t)
(setq anzu-search-threshold 1000)
)
(use-package uniquify
:no-require t
:defer t
:init (run-at-time 1.0 nil 'require 'uniquify)
:config
(setq uniquify-buffer-name-style 'post-forward-angle-brackets)
)
;; like vim's '<,'>!
(when (eval-when-compile (executable-find "perl"))
(defadvice shell-command-on-region (before shell-command-on-region-like-vim activate)
(let* ((command-format "{ cat; echo; } | %s | perl -pe 'chomp if eof'")
(new-command (format command-format (ad-get-arg 2))))
(ad-set-arg 2 new-command))))
;; repository
(defvar gist-repository "git@gist.github.com:3b8519a505d479e97c1d6dfc0926d07d.git")
(when (eval-when-compile (eq window-system 'ns))
(add-hook 'focus-in-hook 'ns-input-source-us)
(add-hook 'after-init-hook 'ns-input-source-us)
(defun ns-input-source-us ()
(interactive)
(do-applescript
"tell application \"System Events\" to key code 102")))
(when (eval-when-compile (eq window-system 'ns))
(setq ns-command-modifier 'meta))
(with-eval-after-load "battery"
(add-hook 'emacs-startup-hook 'display-battery-mode))
(with-eval-after-load "repeat"
(define-key global-map (kbd "C-x C-z") 'repeat))
(use-package thingopt
:no-require t
:ensure t :pin melpa
:commands (define-thing-commands)
:init (add-hook 'emacs-startup-hook 'define-thing-commands)
:config
(defvar mark-thing-map (make-sparse-keymap))
(define-key global-map (kbd "M-@") mark-thing-map)
(define-key mark-thing-map (kbd "@") 'mark-email)
(define-key mark-thing-map (kbd "w") 'mark-word*)
(define-key mark-thing-map (kbd "$") 'mark-line)
(define-key mark-thing-map (kbd "/") 'mark-url)
(define-key mark-thing-map (kbd ".") 'mark-sentence)
(define-key mark-thing-map (kbd ")") 'mark-list)
(define-key mark-thing-map (kbd "e") 'mark-sexp*)
(define-key mark-thing-map (kbd "\"") 'mark-string))
(use-package ssh-config-mode
:no-require t
:ensure t :pin melpa
:defer t
)
(use-package dockerfile-mode
:no-require t
:ensure t :pin melpa
:defer t
)
(use-package haskell-mode
:no-require t
:ensure t :pin melpa
:defer t
)
;; custom
(setq custom-file (locate-user-emacs-file "custom.el"))
(run-at-time 0.75 nil 'load custom-file 'noerr)
;; user specific
(run-at-time 1.0 nil 'load (locate-user-emacs-file "user") 'noerr)
(define-key global-map (kbd "C-z") nil)
(define-key global-map (kbd "C-x C-z") nil)
;; Local Variables:
;; coding: utf-8-unix
;; End:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment