init-terminal.el (11020B)
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 (cond 41 (*is-windows* 42 (add-to-list 'exec-path (expand-file-name "H/appppppppppp/scoop/apps/")) 43 (setenv "PATH" (concat (expand-file-name "H/appppppppppp/scoop/apps/") ";" (getenv "PATH")))) 44 (*is-mac* 45 (add-to-list 'exec-path (expand-file-name "/opt/homebrew/bin/")) 46 (setenv "PATH" (concat (expand-file-name "/opt/homebrew/bin/") ":" (getenv "PATH")))) 47 (*is-linux* 48 (add-to-list 'exec-path (expand-file-name "~/.guix-home/profile/bin/")) 49 (setenv "PATH" (concat (expand-file-name "~/.guix-home/profile/bin/") ":" (getenv "PATH"))))) 50 51 (delete-selection-mode 1) 52 53 (setq initial-scratch-message 54 "") 55 56 (setq native-comp-async-warnings-errors-kind 'silent) 57 58 (if (boundp 'use-short-answers) 59 (setq use-short-answers t) 60 (fset 'yes-or-no-p 'y-or-n-p)) 61 62 (setq delete-by-moving-to-trash t) 63 64 (setq xref-search-program 65 (cond 66 ((or (executable-find "ripgrep") 67 (executable-find "rg")) 68 'ripgrep) 69 (t 'grep))) 70 71 (setq word-wrap-by-category t) 72 73 (setq-default indent-tabs-mode nil) 74 75 (setq kill-whole-line t) 76 77 (setq epg-pinentry-mode 'loopback) 78 79 (add-hook 'emacs-startup-hook 80 (lambda () 81 (setq gc-cons-threshold 4000000))) 82 83 (use-package recentf 84 :hook 85 (after-init . recentf-mode) 86 :init 87 (setq recentf-max-saved-items 30) 88 :config 89 (add-to-list 'recentf-exclude "~/org/my-org-note/journal/.*\\.org\\'") 90 (add-to-list 'recentf-exclude "~/org/my-org-note/20260509T232442==agenda--all-my-todos\\.org") 91 (add-to-list 'recentf-exclude "~/org/my-org-note/20260810T233455==agenda--all-about-game__game\\.org") 92 (add-to-list 'recentf-exclude "~/.emacs.d/emms/history") 93 (add-to-list 'recentf-exclude "~/.emacs.d/bookmarks")) 94 95 (use-package savehist 96 :hook 97 (after-init . savehist-mode) 98 :init 99 (setq enable-recursive-minibuffers t 100 history-length 50 101 savehist-additional-variables '(mark-ring 102 global-mark-ring 103 search-ring 104 regexp-search-ring 105 extended-command-history) 106 savehist-autosave-interval 300)) 107 108 (use-package saveplace 109 :hook 110 (after-init . save-place-mode)) 111 112 (use-package autorevert 113 :delight 114 :hook 115 (after-init . global-auto-revert-mode)) 116 117 (use-package icomplete 118 :hook 119 (after-init . fido-mode) 120 :config 121 (keymap-unset minibuffer-local-completion-map "TAB") 122 (keymap-set minibuffer-local-completion-map "TAB" 'icomplete-force-complete)) 123 124 ;; display file size in mode line 125 (size-indication-mode 1) 126 127 ;; display column number in mode line 128 (column-number-mode 1) 129 130 ;; highlight current line 131 (global-hl-line-mode 1) 132 133 ;; mouse support 134 (xterm-mouse-mode 1) 135 136 ;; show isearch match numbers 137 (setq isearch-lazy-count t) 138 139 ;; theme 140 (if (>= (display-color-cells) 16777216) 141 (progn 142 (defvar my-base03 "#062624") 143 (defvar my-base02 "#0c2b29") 144 (defvar my-base01 "#4d6967") 145 (defvar my-base00 "#728e8c") 146 (defvar my-base1 "#7f9b99") 147 (defvar my-cyan "#01928d") 148 (defvar my-blue "#2570cd") 149 (defvar my-green "#3a9c36") 150 (defvar my-magenta "#d33682") 151 (defvar my-yellow "#a87c04") 152 (defvar my-orange "#c24713") 153 (defvar my-red "#ce2825") 154 155 (custom-set-faces 156 `(default ((t (:foreground ,my-base00 :background ,my-base03)))) 157 `(cursor ((t (:inverse t)))) 158 `(region ((t (:extend t :foreground ,my-base03 :background ,my-base00)))) 159 `(shadow ((t (:foreground ,my-base01)))) 160 `(error ((t (:foreground ,my-orange)))) 161 `(warning ((t (:foreground ,my-yellow)))) 162 `(font-lock-builtin-face ((t (:foreground ,my-base00 :weight bold :slant normal)))) 163 `(font-lock-comment-face ((t (:foreground ,my-base01)))) 164 `(font-lock-keyword-face ((t (:foreground ,my-cyan :weight bold)))) 165 `(font-lock-variable-name-face ((t (:foreground ,my-blue)))) 166 `(font-lock-constant-face ((t (:foreground ,my-blue :weight bold)))) 167 `(font-lock-string-face ((t (:foreground ,my-green)))) 168 `(font-lock-type-face ((t (:foreground ,my-yellow)))) 169 `(font-lock-function-name-face ((t (:foreground ,my-blue)))) 170 `(hl-line ((t (:background ,my-base02 :extend t)))) 171 `(show-paren-match ((t (:foreground ,my-magenta :weight bold)))) 172 `(show-paren-mismatch ((t (:foreground ,my-base03 :background ,my-red)))) 173 `(icomplete-first-match ((t (:foreground ,my-yellow :weight bold)))) 174 `(completions-common-part ((t (:foreground ,my-blue)))) 175 `(minibuffer-prompt ((t (:foreground ,my-base01 :weight bold)))) 176 `(line-number ((t (:foreground ,my-base01 :weight extra-light)))) 177 `(button ((t (:foreground ,my-base00 :underline t)))) 178 `(mode-line ((t (:background ,my-base00 :foreground ,my-base03)))) 179 `(mode-line-inactive ((t (:background ,my-base02 :foreground ,my-base00)))) 180 `(dired-header ((t (:foreground ,my-green)))) 181 `(dired-directory ((t (:foreground ,my-blue)))) 182 `(dired-ignored ((t (:foreground ,my-base01)))) 183 `(isearch ((t (:background ,my-magenta :foreground ,my-base03)))) 184 `(lazy-highlight ((t (:background ,my-yellow :foreground ,my-base03)))) 185 `(isearch-fail ((t (:foreground ,my-red)))) 186 `(org-block ((t (:inherit default)))) 187 `(org-document-title ((t (:inherit default :weight bold)))) 188 `(org-document-info ((t (:inherit org-document-title)))) 189 `(eshell-prompt ((t (:foreground ,my-yellow :weight bold)))) 190 `(diff-header ((t (:foreground ,my-base00 :background ,my-base02)))) 191 `(diff-file-header ((t (:inherit: diff-header :weight bold)))) 192 `(diff-hunk-header ((t (:foreground "#c1a059" :background "#253224")))) 193 `(diff-added ((t (:foreground "#73b971" :background "#103628")))) 194 `(diff-refine-added ((t (:foreground "#8cc78d" :background "#1d522e")))) 195 `(diff-removed ((t (:foreground "#e17360" :background "#2d2c25")))) 196 `(diff-refine-removed ((t (:foreground "#e7917f" :background "#5c3225")))) 197 `(xref-file-header ((t (:foreground ,my-base01)))) 198 `(xref-line-number ((t (:foreground ,my-green)))) 199 `(match ((t (:foreground ,my-base1 :background ,my-base02 :weight bold)))))) 200 201 (progn 202 (global-hl-line-mode -1))) 203 204 (defun open-init-file() 205 "Open user's init.el file in ~/.emacs.d ." 206 (interactive) 207 (find-file "~/.emacs.d/init.el")) 208 209 (defun my-scratch-buffer (&optional arg) 210 "Switch to the *scratch* buffer. 211 With a prefix ARG create a new *scratch* buffer." 212 (interactive "P") 213 (if arg 214 (let ((buf (generate-new-buffer "*scratch*"))) 215 (switch-to-buffer buf) 216 (funcall initial-major-mode)) 217 (scratch-buffer))) 218 219 (defun crux-get-positions-of-line-or-region () 220 "Return positions (beg . end) of the current line or region." 221 (let (beg end) 222 (if (and mark-active (> (point) (mark))) 223 (exchange-point-and-mark)) 224 (setq beg (line-beginning-position)) 225 (if mark-active 226 (exchange-point-and-mark)) 227 (setq end (line-end-position)) 228 (cons beg end))) 229 230 (defun crux-duplicate-current-line-or-region (arg) 231 "Duplicates the current line or region ARG times. 232 If there's no region, the current line will be duplicated. However, if 233 there's a region, all lines that region covers will be duplicated." 234 (interactive "p") 235 (pcase-let* ((origin (point)) 236 (`(,beg . ,end) (crux-get-positions-of-line-or-region)) 237 (region (buffer-substring-no-properties beg end))) 238 (dotimes (_i arg) 239 (goto-char end) 240 (newline) 241 (insert region) 242 (setq end (point))) 243 (goto-char (+ origin (* (length region) arg) arg)))) 244 245 (defun er/looking-back-on-line (regexp) 246 "Version of `looking-back' that only checks current line." 247 (looking-back regexp (line-beginning-position))) 248 249 (defun er/mark-symbol () 250 "Mark the entire symbol around or in front of point." 251 (interactive) 252 (let ((symbol-regexp "\\s_\\|\\sw")) 253 (when (or (looking-at symbol-regexp) 254 (er/looking-back-on-line symbol-regexp)) 255 (skip-syntax-forward "_w") 256 (set-mark (point)) 257 (skip-syntax-backward "_w")))) 258 259 (defun er/mark-word () 260 "Mark the entire word around or in front of point." 261 (interactive) 262 (let ((word-regexp "\\sw")) 263 (when (or (looking-at word-regexp) 264 (er/looking-back-on-line word-regexp)) 265 (skip-syntax-forward "w") 266 (set-mark (point)) 267 (skip-syntax-backward "w")))) 268 269 ;; scratch buffer 270 (if *is-mac* 271 (keymap-global-set "C-c <f12>" #'my-scratch-buffer) 272 (keymap-global-set "C-c <delete>" #'my-scratch-buffer) 273 (keymap-global-set "C-c <deletechar>" #'my-scratch-buffer)) 274 275 ;; diff 276 (with-eval-after-load 'diff-mode 277 (keymap-set diff-mode-map "M-o" #'other-window)) 278 279 ;; dired 280 (with-eval-after-load 'dired 281 (keymap-set dired-mode-map "b" #'dired-up-directory)) 282 283 284 ;; global map 285 286 ;; buffer, file, and window 287 (keymap-global-set "<f2>" #'open-init-file) 288 (keymap-global-set "C-x C-b" #'ibuffer-other-window) 289 290 ;; edit 291 (keymap-global-set "M-c" #'capitalize-dwim) 292 (keymap-global-set "M-u" #'upcase-dwim) 293 (keymap-global-set "M-l" #'downcase-dwim) 294 (keymap-global-set "C-," #'crux-duplicate-current-line-or-region) 295 (keymap-global-set "M-y" #'yank-from-kill-ring) 296 (keymap-global-set "C-M-@" #'er/mark-symbol) 297 (keymap-global-set "M-@" #'er/mark-word) 298 (keymap-global-set "C-M-h" #'backward-kill-sexp) 299 (keymap-global-set "C-c k" #'comment-line) 300 301 ;; undo 302 (keymap-global-set "C-/" #'undo) 303 (keymap-global-set "C-M-_" #'undo-redo) 304 305 ;; navigate 306 (keymap-global-set "M-p" #'backward-paragraph) 307 (keymap-global-set "M-n" #'forward-paragraph) 308 309 ;; window 310 (keymap-global-set "M-<left>" #'shrink-window-horizontally) 311 (keymap-global-set "M-<right>" #'enlarge-window-horizontally) 312 (keymap-global-set "M-<down>" #'shrink-window) 313 (keymap-global-set "M-<up>" #'enlarge-window) 314 (keymap-global-set "M-o" #'other-window) 315 316 ;; other 317 (keymap-global-set "C-c f r" #'recentf) 318 319 (provide 'init-terminal) 320 ;;; init-terminal.el ends here