| @@ -51,14 +51,13 @@ Otherwize hook it." | |||
| (lambda () | |||
| ,@body)))) | |||
| ;; TODO: Remove: Just checking fboundp should be enough for most cases | |||
| (defmacro safe-require-or-eval (feature) | |||
| "Require FEATURE if available. | |||
| ;; (defmacro safe-require-or-eval (feature) | |||
| ;; "Require FEATURE if available. | |||
| At compile time the feature will be loaded immediately." | |||
| `(eval-and-compile | |||
| (message "safe-require-or-eval: Trying to require %s" ,feature) | |||
| (require ,feature nil t))) | |||
| ;; At compile time the feature will be loaded immediately." | |||
| ;; `(eval-and-compile | |||
| ;; (message "safe-require-or-eval: Trying to require %s" ,feature) | |||
| ;; (require ,feature nil t))) | |||
| ;; TODO: Remove: Defining autoload is no more needed for most cases | |||
| (defmacro autoload-eval-lazily (feature &optional functions &rest body) | |||
| @@ -189,23 +188,22 @@ found, otherwise returns nil." | |||
| )) | |||
| (when (safe-require-or-eval 'package) | |||
| (setq package-archives | |||
| `(,@package-archives | |||
| ("melpa" . "https://melpa.org/packages/") | |||
| ;; Somehow fails to download via https | |||
| ("10sr-el" . "http://10sr.github.io/emacs-lisp/elpa/"))) | |||
| (package-initialize) | |||
| (require 'package) | |||
| (set-variable 'package-archives | |||
| `(,@package-archives | |||
| ("melpa" . "https://melpa.org/packages/") | |||
| ;; Somehow fails to download via https | |||
| ("10sr-el" . "http://10sr.github.io/emacs-lisp/elpa/"))) | |||
| (package-initialize) | |||
| (defun my-auto-install-package () | |||
| "Install packages semi-automatically." | |||
| (interactive) | |||
| (package-refresh-contents) | |||
| (mapc (lambda (pkg) | |||
| (or (package-installed-p pkg) | |||
| (package-install pkg))) | |||
| 10sr-package-list)) | |||
| ) | |||
| (defun my-auto-install-package () | |||
| "Install packages semi-automatically." | |||
| (interactive) | |||
| (package-refresh-contents) | |||
| (mapc (lambda (pkg) | |||
| (or (package-installed-p pkg) | |||
| (package-install pkg))) | |||
| 10sr-package-list)) | |||
| ;; (lazy-load-eval 'sudoku) | |||
| @@ -300,7 +298,7 @@ found, otherwise returns nil." | |||
| (file-readable-p user-init-file)) | |||
| (load-file user-init-file))) | |||
| (safe-require-or-eval 'session) | |||
| (require 'session nil t) | |||
| ;; server | |||
| @@ -365,7 +363,7 @@ found, otherwise returns nil." | |||
| ;; Interactively evaluate Emacs Lisp expressions | |||
| (define-key ctl-x-map "i" 'ielm) | |||
| (when (safe-require-or-eval 'which-key) | |||
| (when (fboundp 'which-key-mode) | |||
| (which-key-mode)) | |||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||
| @@ -465,10 +463,14 @@ found, otherwise returns nil." | |||
| (require 'page-ext nil t) | |||
| (when (safe-require-or-eval 'page-break-lines) | |||
| (global-page-break-lines-mode 1)) | |||
| (when (fboundp 'global-page-break-lines-mode) | |||
| (add-hook 'after-first-visit-hook | |||
| 'global-page-break-lines-mode)) | |||
| (when (safe-require-or-eval 'git-gutter) | |||
| (when (fboundp 'global-git-gutter-mode) | |||
| (add-hook 'after-first-visit-hook | |||
| 'global-git-gutter-mode)) | |||
| (with-eval-after-load 'git-gutter | |||
| (declare-function global-git-gutter-mode "git-gutter") | |||
| (custom-set-variables | |||
| '(git-gutter:lighter " Gttr")) | |||
| @@ -482,17 +484,16 @@ found, otherwise returns nil." | |||
| (set-face-background 'git-gutter:modified c) | |||
| (set-face-background 'git-gutter:added c) | |||
| (set-face-background 'git-gutter:deleted c) | |||
| (set-face-background 'git-gutter:unchanged c))) | |||
| (global-git-gutter-mode 1) | |||
| ) | |||
| (set-face-background 'git-gutter:unchanged c)))) | |||
| ;; (when (safe-require-or-eval 'fancy-narrow) | |||
| ;; (fancy-narrow-mode 1)) | |||
| ;; (when (fboundp 'fancy-narrow-mode) | |||
| ;; (add-hook 'after-first-visit-hook | |||
| ;; 'fancy-narrow-mode)) | |||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||
| ;; title and mode-line | |||
| (when (safe-require-or-eval 'terminal-title) | |||
| (when (require 'terminal-title nil t) | |||
| ;; if TERM is not screen use default value | |||
| (if (getenv "TMUX") | |||
| ;; if use tmux locally just basename of current dir | |||
| @@ -540,7 +541,7 @@ found, otherwise returns nil." | |||
| "") | |||
| ))) | |||
| (when (safe-require-or-eval 'diminish) | |||
| (when (require 'diminish nil t) | |||
| ;; FIXME: Eval after enabling mode | |||
| (eval-after-init | |||
| (diminish 'recently-mode) | |||
| @@ -633,7 +634,7 @@ found, otherwise returns nil." | |||
| (define-key minibuffer-local-map (kbd "C-p") (kbd "ESC p")) | |||
| (define-key minibuffer-local-map (kbd "C-n") (kbd "ESC n")) | |||
| (when (safe-require-or-eval 'minibuffer-line) | |||
| (when (require 'minibuffer-line nil t) | |||
| (set-face-underline 'minibuffer-line nil) | |||
| (set-variable 'minibuffer-line-refresh-interval | |||
| 25) | |||
| @@ -668,7 +669,7 @@ found, otherwise returns nil." | |||
| (minibuffer-line-mode 1) | |||
| ) | |||
| (when (safe-require-or-eval 'prompt-text) | |||
| (when (require 'prompt-text nil t) | |||
| (set-variable 'prompt-text-format | |||
| `(,(concat "" | |||
| @@ -727,18 +728,18 @@ found, otherwise returns nil." | |||
| (add-hook 'input-method-inactivate-hook | |||
| (lambda () (set-cursor-color "black")))) | |||
| (when (safe-require-or-eval 'paren) | |||
| (show-paren-mode 1) | |||
| (setq show-paren-delay 0.5 | |||
| show-paren-style 'parenthesis) ; mixed is hard to read | |||
| ;; (set-face-background 'show-paren-match | |||
| ;; "black") | |||
| ;; ;; (face-foreground 'default)) | |||
| ;; (set-face-foreground 'show-paren-match | |||
| ;; "white") | |||
| ;; (set-face-inverse-video-p 'show-paren-match | |||
| ;; t) | |||
| ) | |||
| (when (fboundp 'show-paren-mode) | |||
| (add-hook 'after-first-visit-hook | |||
| 'show-paren-mode)) | |||
| (set-variable 'show-paren-delay 0.5) | |||
| (set-variable 'show-paren-style 'parenthesis) ; mixed is hard to read | |||
| ;; (set-face-background 'show-paren-match | |||
| ;; "black") | |||
| ;; ;; (face-foreground 'default)) | |||
| ;; (set-face-foreground 'show-paren-match | |||
| ;; "white") | |||
| ;; (set-face-inverse-video-p 'show-paren-match | |||
| ;; t) | |||
| (transient-mark-mode 1) | |||
| @@ -767,25 +768,31 @@ found, otherwise returns nil." | |||
| (font-lock-add-keywords nil my-jspace-face) | |||
| )) | |||
| (when (safe-require-or-eval 'whitespace) | |||
| (when (fboundp 'global-whitespace-mode) | |||
| (add-hook 'after-first-visit-hook | |||
| 'global-whitespace-mode)) | |||
| (with-eval-after-load 'whitespace | |||
| (defvar whitespace-display-mappings) | |||
| (defvar whitespace-mode) | |||
| (add-to-list 'whitespace-display-mappings | |||
| ;; We need t since last one takes precedence | |||
| `(tab-mark ?\t ,(vconcat "|>\t")) t) | |||
| ;; (add-to-list 'whitespace-display-mappings | |||
| ;; `(newline-mark ?\n ,(vconcat "$\n"))) | |||
| (setq whitespace-style '(face | |||
| trailing ; trailing blanks | |||
| ;; tabs | |||
| ;; spaces | |||
| ;; lines | |||
| lines-tail ; lines over 80 | |||
| newline ; newlines | |||
| ;; empty ; empty lines at beg or end of buffer | |||
| ;; big-indent | |||
| ;; space-mark | |||
| tab-mark | |||
| newline-mark ; use display table for newline | |||
| )) | |||
| (set-variable 'whitespace-style '(face | |||
| trailing ; trailing blanks | |||
| ;; tabs | |||
| ;; spaces | |||
| ;; lines | |||
| lines-tail ; lines over 80 | |||
| newline ; newlines | |||
| ;; empty ; empty lines at beg or end of buffer | |||
| ;; big-indent | |||
| ;; space-mark | |||
| tab-mark | |||
| newline-mark ; use display table for newline | |||
| )) | |||
| ;; (setq whitespace-newline 'font-lock-comment-face) | |||
| ;; (setq whitespace-style (delq 'newline-mark whitespace-style)) | |||
| (defun my-whitesspace-mode-reload () | |||
| @@ -796,10 +803,9 @@ found, otherwise returns nil." | |||
| (whitespace-mode 1))) | |||
| (set-variable 'whitespace-line-column nil) | |||
| (global-whitespace-mode t) | |||
| (add-hook 'dired-mode-hook | |||
| (lambda () | |||
| (set (make-local-variable 'whitespace-style) nil))) | |||
| (set-variable 'whitespace-style nil t))) | |||
| (if (>= (display-color-cells) | |||
| 256) | |||
| (set-face-foreground 'whitespace-newline "color-109") | |||
| @@ -808,7 +814,7 @@ found, otherwise returns nil." | |||
| ;; t)) | |||
| )) | |||
| (and nil | |||
| '(safe-require-or-eval 'fill-column-indicator) | |||
| '(require 'fill-column-indicator nil t) | |||
| (setq fill-column-indicator)) | |||
| (defun my-gen-hl-line-color-dark () | |||
| @@ -850,7 +856,7 @@ found, otherwise returns nil." | |||
| (set-face-foreground 'font-lock-regexp-grouping-backslash "#666") | |||
| (set-face-foreground 'font-lock-regexp-grouping-construct "#f60") | |||
| ;;(safe-require-or-eval 'set-modeline-color) | |||
| ;;(require 'set-modeline-color nil t) | |||
| ;; (let ((fg (face-foreground 'default)) | |||
| ;; (bg (face-background 'default))) | |||
| @@ -863,7 +869,7 @@ found, otherwise returns nil." | |||
| ;; (set-face-underline 'vertical-border | |||
| ;; nil) | |||
| ;; (when (safe-require-or-eval 'end-mark) | |||
| ;; (when (require 'end-mark nil t) | |||
| ;; (global-end-mark-mode)) | |||
| ;; M-x highlight-* to highlight things | |||
| @@ -877,13 +883,13 @@ found, otherwise returns nil." | |||
| end))) | |||
| (setq deactivate-mark t))) | |||
| (when (safe-require-or-eval 'auto-highlight-symbol) | |||
| (set-variable 'ahs-idle-interval 0.6) | |||
| (global-auto-highlight-symbol-mode 1)) | |||
| (when (fboundp 'global-auto-highlight-symbol-mode) | |||
| (add-hook 'after-first-visit-hook | |||
| 'global-auto-highlight-symbol-mode)) | |||
| (set-variable 'ahs-idle-interval 0.6) | |||
| (when (safe-require-or-eval 'highlight-indentation) | |||
| (set-face-background 'highlight-indentation-face "color-236") | |||
| (when (fboundp 'highlight-indentation-mode) | |||
| (dolist (hook | |||
| '( | |||
| prog-mode-hook | |||
| @@ -891,6 +897,8 @@ found, otherwise returns nil." | |||
| )) | |||
| (add-hook hook | |||
| 'highlight-indentation-mode))) | |||
| (with-eval-after-load 'highlight-indentation | |||
| (set-face-background 'highlight-indentation-face "color-236")) | |||
| ;; (set-face-background 'highlight-indentation-current-column-face "#c3b3b3") | |||
| (when (fboundp 'fic-mode) | |||
| @@ -965,7 +973,8 @@ found, otherwise returns nil." | |||
| ;; recently | |||
| (when (safe-require-or-eval 'recently) | |||
| ;; TODO: Enable after first visit file? | |||
| (when (require 'recently nil t) | |||
| (define-key ctl-x-map (kbd "C-r") 'recently-show) | |||
| (set-variable 'recently-max 1000) | |||
| (defvar recently-excludes) | |||
| @@ -1042,10 +1051,11 @@ found, otherwise returns nil." | |||
| (setq revert-without-query '(".+")) | |||
| ;; save cursor position | |||
| (when (safe-require-or-eval 'saveplace) | |||
| (setq-default save-place t) | |||
| (setq save-place-file (concat user-emacs-directory | |||
| "places"))) | |||
| (when (fboundp 'save-place-mode) | |||
| (add-hook 'after-first-visit-hook | |||
| 'save-place-mode)) | |||
| (set-variable 'save-place-file (concat user-emacs-directory | |||
| "places")) | |||
| ;; http://www.bookshelf.jp/soft/meadow_24.html#SEC260 | |||
| (setq make-backup-files t) | |||
| @@ -1089,12 +1099,12 @@ found, otherwise returns nil." | |||
| (add-to-list 'recentf-exclude | |||
| (regexp-quote bookmark-default-file))) | |||
| (when (safe-require-or-eval 'smart-revert) | |||
| (when (fboundp 'smart-revert-on) | |||
| (smart-revert-on)) | |||
| ;; autosave | |||
| ;; auto-save-visited-mode can be used instead? | |||
| ;; (when (safe-require-or-eval 'autosave) | |||
| ;; (when (require 'autosave nil t) | |||
| ;; (autosave-set 8)) | |||
| @@ -1122,12 +1132,12 @@ found, otherwise returns nil." | |||
| (not (equal (getenv "DISPLAY") "")) | |||
| (executable-find "xclip") | |||
| ;; (< emacs-major-version 24) | |||
| '(safe-require-or-eval 'xclip) | |||
| '(require 'xclip nil t) | |||
| nil | |||
| (turn-on-xclip)) | |||
| (and (eq system-type 'darwin) | |||
| (safe-require-or-eval 'pasteboard) | |||
| (require 'pasteboard nil t) | |||
| (turn-on-pasteboard)) | |||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||
| @@ -1252,18 +1262,20 @@ found, otherwise returns nil." | |||
| (add-to-list 'auto-mode-alist | |||
| `(,git-rebase-filename-regexp . text-mode))) | |||
| (when (safe-require-or-eval 'aggressive-indent) | |||
| (when (fboundp 'global-aggressive-indent-mode) | |||
| (add-hook 'after-first-visit-hook | |||
| 'global-aggressive-indent-mode)) | |||
| (with-eval-after-load 'aggressive-indent | |||
| (defvar aggressive-indent-excluded-modes) | |||
| (setq aggressive-indent-excluded-modes | |||
| `(web-mode | |||
| diff-mode | |||
| toml-mode | |||
| conf-mode | |||
| dockerfile-mode | |||
| groovy-mode | |||
| scala-mode | |||
| ,@aggressive-indent-excluded-modes)) | |||
| (global-aggressive-indent-mode 1)) | |||
| (set-variable 'aggressive-indent-excluded-modes | |||
| `(web-mode | |||
| diff-mode | |||
| toml-mode | |||
| conf-mode | |||
| dockerfile-mode | |||
| groovy-mode | |||
| scala-mode | |||
| ,@aggressive-indent-excluded-modes))) | |||
| (when (fboundp 'ggtags-mode) | |||
| (add-hook 'c-mode-common-hook | |||
| @@ -1314,10 +1326,12 @@ found, otherwise returns nil." | |||
| '("^\\([^ \n]+\\):\\([0-9]+\\) " 1 2)) | |||
| ) | |||
| (when (safe-require-or-eval 'company) | |||
| (when (fboundp 'global-company-mode) | |||
| (add-hook 'after-first-visit-hook | |||
| 'global-company-mode)) | |||
| (with-eval-after-load 'company | |||
| ;; http://qiita.com/sune2/items/b73037f9e85962f5afb7 | |||
| ;; https://qiita.com/yuze/items/a145b1e3edb6d0c24cbf | |||
| (global-company-mode) | |||
| (set-variable 'company-idle-delay nil) | |||
| (set-variable 'company-minimum-prefix-length 2) | |||
| (set-variable 'company-selection-wrap-around t) | |||
| @@ -1399,8 +1413,9 @@ found, otherwise returns nil." | |||
| ;; https://github.com/lunaryorn/flycheck | |||
| ;; TODO: Any way to disable auto check? | |||
| ;; Update flycheck-hooks-alist? | |||
| (when (safe-require-or-eval 'flycheck) | |||
| (eval-after-init (global-flycheck-mode))) | |||
| (when (fboundp 'global-flycheck-mode) | |||
| (add-hook 'after-first-visit-hook | |||
| 'global-flycheck-mode)) | |||
| ;; (set-variable 'flycheck-display-errors-delay 2.0) | |||
| ;; (fset 'flycheck-display-error-at-point-soon 'ignore) | |||
| @@ -1501,7 +1516,7 @@ found, otherwise returns nil." | |||
| ;; http://fukuyama.co/foreign-regexp | |||
| '(and (safe-require-or-eval 'foreign-regexp) | |||
| '(and (require 'foreign-regexp nil t) | |||
| (progn | |||
| (setq foreign-regexp/regexp-type 'perl) | |||
| '(setq reb-re-syntax 'foreign-regexp) | |||
| @@ -1520,8 +1535,9 @@ found, otherwise returns nil." | |||
| ;; (define-key ctl-x-map (kbd "C-g") 'gited-list)) | |||
| (defalias 'gited 'gited-list) | |||
| (when (safe-require-or-eval 'git-commit) | |||
| (global-git-commit-mode 1)) | |||
| (when (fboundp 'global-git-commit-mode) | |||
| (add-hook 'after-first-visit-hook | |||
| 'global-git-commit-mode)) | |||
| (with-eval-after-load 'git-commit | |||
| (add-hook 'git-commit-setup-hook | |||
| 'turn-off-auto-fill t)) | |||
| @@ -1544,7 +1560,7 @@ found, otherwise returns nil." | |||
| ;; (when (autoload-eval-lazily 'malabar-mode) | |||
| ;; (add-to-list 'load-path | |||
| ;; (expand-file-name (concat user-emacs-directory "/cedet"))) | |||
| ;; (safe-require-or-eval 'cedet-devel-load) | |||
| ;; (require 'cedet-devel-load nil t) | |||
| ;; (eval-after-init (activate-malabar-mode))) | |||
| (with-eval-after-load 'make-mode | |||
| @@ -2066,7 +2082,7 @@ ARG is num to show, or defaults to 7." | |||
| ;; 'my-replace-nasi-none) | |||
| (with-eval-after-load 'dired | |||
| (safe-require-or-eval 'ls-lisp) | |||
| (require 'ls-lisp nil t) | |||
| (defvar dired-mode-map (make-sparse-keymap)) | |||
| ;; dired-do-chgrp sometimes cause system hung | |||
| (define-key dired-mode-map "G" 'ignore) | |||
| @@ -2300,7 +2316,7 @@ and search from projectile root (if projectile is available)." | |||
| (error "My-Rgrep: Command for rgrep not found") | |||
| ))) | |||
| (if (and current-prefix-arg | |||
| (safe-require-or-eval 'projectile) | |||
| (eval-and-compile (require 'projectile nil t)) | |||
| (projectile-project-p)) | |||
| (projectile-with-default-dir (projectile-project-root) | |||
| (compilation-start command-args | |||
| @@ -2319,7 +2335,7 @@ and search from projectile root (if projectile is available)." | |||
| (or (thing-at-point 'symbol t) | |||
| (error "No symbol at point"))) | |||
| (error "My-Rgrep: Command for rgrep not found")))) | |||
| (if (safe-require-or-eval 'projectile) | |||
| (if (eval-and-compile (require 'projectile nil t)) | |||
| (projectile-with-default-dir (or (projectile-project-root) | |||
| default-directory) | |||
| (compilation-start command-args | |||