init-terminal.el (10123B)
1 ;;; init-terminal.el --- minimum config -*- lexical-binding: t -*- 2 3 ;;; Commentary: 4 5 ;;; Code: 6 7 (global-display-line-numbers-mode 1) 8 9 (set-selection-coding-system 'utf-8) 10 (when (fboundp 'set-charset-priority) 11 (set-charset-priority 'unicode)) 12 (set-default-coding-systems 'utf-8) 13 (set-buffer-file-coding-system 'utf-8) 14 (set-clipboard-coding-system 'utf-8) 15 (set-file-name-coding-system 'utf-8) 16 (set-keyboard-coding-system 'utf-8) 17 (set-next-selection-coding-system 'utf-8) 18 (set-terminal-coding-system 'utf-8) 19 (setq locale-coding-system 'utf-8) 20 (setq system-time-locale "C") 21 22 (setq backup-directory-alist 23 `((".*" . ,(expand-file-name "backup/" user-emacs-directory))) 24 backup-by-copying t 25 delete-old-versions t 26 kept-new-versions 6 27 kept-old-versions 2 28 version-control t) 29 30 (setq auto-save-file-name-transforms 31 `((".*" ,(expand-file-name "auto-save-list/" user-emacs-directory) t))) 32 33 (put 'narrow-to-region 'disabled nil) 34 (put 'scroll-left 'disabled nil) 35 36 (setq create-lockfiles nil) 37 38 (setq ring-bell-function 'ignore) 39 40 (delete-selection-mode 1) 41 42 (setq initial-scratch-message 43 "") 44 45 (setq native-comp-async-report-warnings-errors 'silent) 46 47 (if (boundp 'use-short-answers) 48 (setq use-short-answers t) 49 (fset 'yes-or-no-p 'y-or-n-p)) 50 51 (setq delete-by-moving-to-trash t) 52 53 (setq word-wrap-by-category t) 54 55 (setq-default indent-tabs-mode nil) 56 57 (setq kill-whole-line t) 58 59 (setq epg-pinentry-mode 'loopback) 60 61 (add-hook 'emacs-startup-hook 62 (lambda () 63 (setq gc-cons-threshold 4000000))) 64 65 (use-package recentf 66 :hook 67 (after-init . recentf-mode) 68 :init 69 (setq recentf-max-saved-items 30) 70 :config 71 (with-eval-after-load 'bookmark 72 (add-to-list 'recentf-exclude bookmark-default-file))) 73 74 (use-package savehist 75 :hook 76 (after-init . savehist-mode) 77 :init 78 (setq enable-recursive-minibuffers t 79 history-length 50 80 savehist-additional-variables '(mark-ring 81 global-mark-ring 82 search-ring 83 regexp-search-ring 84 extended-command-history) 85 savehist-autosave-interval 300)) 86 87 (use-package saveplace 88 :hook 89 (after-init . save-place-mode)) 90 91 (use-package autorevert 92 :hook 93 (after-init . global-auto-revert-mode)) 94 95 (use-package icomplete 96 :hook 97 (after-init . fido-mode) 98 :config 99 (keymap-unset minibuffer-local-completion-map "TAB") 100 (keymap-set minibuffer-local-completion-map "TAB" 'icomplete-force-complete)) 101 102 ;; display file size in mode line 103 (size-indication-mode 1) 104 105 ;; display column number in mode line 106 (column-number-mode 1) 107 108 ;; mouse support 109 (xterm-mouse-mode 1) 110 111 ;; show isearch match numbers 112 (setq isearch-lazy-count t) 113 114 ;; theme 115 (when (>= (display-color-cells) 16777216) 116 (defvar my-base03 "#062624") 117 (defvar my-base02 "#0c2b29") 118 (defvar my-base01 "#4d6967") 119 (defvar my-base00 "#728e8c") 120 (defvar my-base1 "#7f9b99") 121 (defvar my-cyan "#01928d") 122 (defvar my-blue "#2570cd") 123 (defvar my-green "#3a9c36") 124 (defvar my-magenta "#d33682") 125 (defvar my-yellow "#a87c04") 126 (defvar my-orange "#c24713") 127 (defvar my-red "#ce2825") 128 129 (custom-set-faces 130 `(default ((t (:foreground ,my-base00 :background ,my-base03)))) 131 `(cursor ((t (:inverse t)))) 132 `(region ((t (:extend t :foreground ,my-base03 :background ,my-base00)))) 133 `(shadow ((t (:foreground ,my-base01)))) 134 `(error ((t (:foreground ,my-orange)))) 135 `(warning ((t (:foreground ,my-yellow)))) 136 `(font-lock-builtin-face ((t (:foreground ,my-base00 :weight bold :slant normal)))) 137 `(font-lock-comment-face ((t (:foreground ,my-base01)))) 138 `(font-lock-keyword-face ((t (:foreground ,my-cyan :weight bold)))) 139 `(font-lock-variable-name-face ((t (:foreground ,my-blue)))) 140 `(font-lock-constant-face ((t (:foreground ,my-blue :weight bold)))) 141 `(font-lock-string-face ((t (:foreground ,my-green)))) 142 `(font-lock-type-face ((t (:foreground ,my-yellow)))) 143 `(font-lock-function-name-face ((t (:foreground ,my-blue)))) 144 `(hl-line ((t (:background ,my-base02 :extend t)))) 145 `(show-paren-match ((t (:foreground ,my-magenta :weight bold)))) 146 `(show-paren-mismatch ((t (:foreground ,my-base03 :background ,my-red)))) 147 `(icomplete-first-match ((t (:foreground ,my-yellow :weight bold)))) 148 `(completions-common-part ((t (:foreground ,my-blue)))) 149 `(minibuffer-prompt ((t (:foreground ,my-base01 :weight bold)))) 150 `(line-number ((t (:foreground ,my-base01 :weight extra-light)))) 151 `(button ((t (:foreground ,my-base00 :underline t)))) 152 `(mode-line ((t (:background ,my-base00 :foreground ,my-base03)))) 153 `(mode-line-inactive ((t (:background ,my-base02 :foreground ,my-base00)))) 154 `(dired-header ((t (:foreground ,my-green)))) 155 `(dired-directory ((t (:foreground ,my-blue)))) 156 `(dired-ignored ((t (:foreground ,my-base01)))) 157 `(isearch ((t (:background ,my-magenta :foreground ,my-base03)))) 158 `(lazy-highlight ((t (:background ,my-yellow :foreground ,my-base03)))) 159 `(isearch-fail ((t (:foreground ,my-red)))) 160 `(org-block ((t (:inherit default)))) 161 `(org-document-title ((t (:inherit default :weight bold)))) 162 `(org-document-info ((t (:inherit org-document-title)))) 163 `(eshell-prompt ((t (:foreground ,my-yellow :weight bold)))) 164 `(diff-header ((t (:foreground ,my-base00 :background ,my-base02)))) 165 `(diff-file-header ((t (:inherit: diff-header :weight bold)))) 166 `(diff-hunk-header ((t (:foreground "#c1a059" :background "#253224")))) 167 `(diff-added ((t (:foreground "#73b971" :background "#103628")))) 168 `(diff-refine-added ((t (:foreground "#8cc78d" :background "#1d522e")))) 169 `(diff-removed ((t (:foreground "#e17360" :background "#2d2c25")))) 170 `(diff-refine-removed ((t (:foreground "#e7917f" :background "#5c3225")))) 171 `(xref-file-header ((t (:foreground ,my-base01)))) 172 `(xref-line-number ((t (:foreground ,my-green)))) 173 `(match ((t (:foreground ,my-base1 :background ,my-base02 :weight bold))))) 174 (global-hl-line-mode 1)) 175 176 (defun my-open-init-file() 177 "Open user's init.el file." 178 (interactive) 179 (find-file user-init-file)) 180 181 (defun my-scratch-buffer (&optional arg) 182 "Switch to the *scratch* buffer. 183 With a prefix ARG create a new *scratch* buffer." 184 (interactive "P") 185 (if arg 186 (let ((buf (generate-new-buffer "*scratch*"))) 187 (switch-to-buffer buf) 188 (funcall initial-major-mode)) 189 (scratch-buffer))) 190 191 (defun my-get-positions-of-line-or-region () 192 "Return positions (beg . end) of the current line or region." 193 (let (beg end) 194 (if (and mark-active (> (point) (mark))) 195 (exchange-point-and-mark)) 196 (setq beg (line-beginning-position)) 197 (if mark-active 198 (exchange-point-and-mark)) 199 (setq end (line-end-position)) 200 (cons beg end))) 201 202 (defun my-duplicate-current-line-or-region (arg) 203 "Duplicates the current line or region ARG times. 204 If there's no region, the current line will be duplicated. However, if 205 there's a region, all lines that region covers will be duplicated." 206 (interactive "p") 207 (pcase-let* ((origin (point)) 208 (`(,beg . ,end) (my-get-positions-of-line-or-region)) 209 (region (buffer-substring-no-properties beg end))) 210 (dotimes (_i arg) 211 (goto-char end) 212 (newline) 213 (insert region) 214 (setq end (point))) 215 (goto-char (+ origin (* (length region) arg) arg)))) 216 217 (defun my-bounds-of-next-thing (thing) 218 "Return the bounds of THING at or after point." 219 (or (bounds-of-thing-at-point thing) 220 (save-excursion (ignore-errors (forward-thing thing 1)) 221 (bounds-of-thing-at-point thing)))) 222 223 (defun my-bounds-of-symbol-at-point-or-next-sexp () 224 (let* ((symbol (my-bounds-of-next-thing 'symbol)) 225 (sexp (my-bounds-of-next-thing 'sexp)) 226 (at-point-p (bounds-of-thing-at-point 'symbol))) 227 (if at-point-p 228 symbol 229 sexp))) 230 231 (defun my-mark-sexp-hack (&optional arg allow-extend) 232 (unless (and allow-extend 233 (or (and (eq last-command this-command) (mark t)) 234 (and transient-mark-mode mark-active))) 235 (when-let* ((bounds (or (my-bounds-of-symbol-at-point-or-next-sexp) 236 (bounds-of-thing-at-point 'sexp))) 237 (pos (car bounds))) 238 (goto-char pos)))) 239 (advice-add #'mark-sexp :before #'my-mark-sexp-hack) 240 241 (defun my-mark-word-hack (&optional arg allow-extend) 242 (unless (and allow-extend 243 (or (and (eq last-command this-command) (mark t)) 244 (region-active-p))) 245 (when-let* ((pos (car (my-bounds-of-next-thing 'word)))) 246 (goto-char pos)))) 247 (advice-add #'mark-word :before #'my-mark-word-hack) 248 249 ;; scratch buffer 250 (if (eq system-type 'darwin) 251 (keymap-global-set "C-c <f12>" #'my-scratch-buffer) 252 (keymap-global-set "C-c <delete>" #'my-scratch-buffer) 253 (keymap-global-set "C-c <deletechar>" #'my-scratch-buffer)) 254 255 ;; diff 256 (with-eval-after-load 'diff-mode 257 (keymap-set diff-mode-map "M-o" #'other-window)) 258 259 ;; dired 260 (with-eval-after-load 'dired 261 (keymap-set dired-mode-map "b" #'dired-up-directory)) 262 263 264 ;; global map 265 266 ;; buffer, file, and window 267 (keymap-global-set "<f2>" #'my-open-init-file) 268 (keymap-global-set "C-x C-b" #'ibuffer-other-window) 269 270 ;; edit 271 (keymap-global-set "M-c" #'capitalize-dwim) 272 (keymap-global-set "M-u" #'upcase-dwim) 273 (keymap-global-set "M-l" #'downcase-dwim) 274 (keymap-global-set "C-," #'my-duplicate-current-line-or-region) 275 (keymap-global-set "M-y" #'yank-from-kill-ring) 276 (keymap-global-set "C-M-h" #'backward-kill-sexp) 277 (keymap-global-set "C-c k" #'comment-line) 278 279 ;; undo 280 (keymap-global-set "C-/" #'undo) 281 (keymap-global-set "C-M-_" #'undo-redo) 282 283 ;; navigate 284 (keymap-global-set "M-p" #'backward-paragraph) 285 (keymap-global-set "M-n" #'forward-paragraph) 286 287 ;; window 288 (keymap-global-set "M-<left>" #'shrink-window-horizontally) 289 (keymap-global-set "M-<right>" #'enlarge-window-horizontally) 290 (keymap-global-set "M-<down>" #'shrink-window) 291 (keymap-global-set "M-<up>" #'enlarge-window) 292 (keymap-global-set "M-o" #'other-window) 293 294 ;; other 295 (keymap-global-set "C-c f r" #'recentf) 296 297 (provide 'init-terminal) 298 ;;; init-terminal.el ends here