.emacs.d

the most bloated Emacs config on this planet
git clone https://git.trogloxene.org/.emacs.d.git
Log | Files | Refs

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