1;;; package --- Emacs 编辑器内置配置2;;; Commentary:34;;; Code:5;; 设置 C-v/A-v 滚半屏幕6(defun window-half-height ()7 (max 1 (/ (1- (window-height (selected-window))) 2)))8(defun pixel-window-half-height()9 (/ (1- (window-text-height (selected-window) t)) 2))1011(defun scroll-up-half ()12 (interactive)13 (scroll-up (window-half-height)))1415(defun scroll-down-half ()16 (interactive)17 (scroll-down (window-half-height)))1819(defun pixel-scroll-down-half ()20 (interactive)21 (if pixel-scroll-precision-interpolate-page22 (pixel-scroll-precision-interpolate (pixel-window-half-height)23 nil 1)24 (cua-scroll-down)))2526(defun pixel-scroll-up-half ()27 (interactive)28 (if pixel-scroll-precision-interpolate-page29 (pixel-scroll-precision-interpolate (- (pixel-window-half-height))30 nil 1)31 (cua-scroll-up)))3233(use-package emacs34 ;; 内置模式的 indent 设置35 :hook ((eshell-mode . (lambda () (display-line-numbers-mode 0)))36 (vterm-mode . (lambda () (display-line-numbers-mode 0)))37 (inferior-python-mode . (lambda () (display-line-numbers-mode 0))))38 :init39 (setq backup-directory-alist `(("." . "~/.saves"))40 tramp-auto-save-directory "~/.saves")4142 (unless (display-graphic-p)43 (xterm-mouse-mode 1)44 (global-set-key (kbd "<mouse-4>") 'scroll-down-line)45 (global-set-key (kbd "<mouse-5>") 'scroll-up-line))46 (menu-bar-mode -1)4748 (when window-system49 (tool-bar-mode -1))50 (setq tool-bar-mode nil51 memu-bar-mode nil)5253 ;; line number54 (global-display-line-numbers-mode t)55 (global-auto-revert-mode t)56 (global-visual-line-mode t)5758 ;; charset59 (prefer-coding-system 'utf-8)60 (set-default-coding-systems 'utf-8)61 (set-terminal-coding-system 'utf-8)62 (set-keyboard-coding-system 'utf-8)63 (set-language-environment "UTF-8")6465 ;; tab mode66 (setq-default indent-tabs-mode nil)67 (setq-default tab-width 8)68 (setq-default c-basic-offset 8)69 (setq-default js-indent-level 2)7071 ;; switch mode-lin-modes and mode-line-misc-info, to show which-function72 (setq-default mode-line-format '("%e" mode-line-front-space73 (:propertize74 ("" mode-line-mule-info mode-line-client mode-line-modified mode-line-remote)75 display76 (min-width77 (5.0)))78 mode-line-frame-identification mode-line-buffer-identification " " mode-line-position79 (vc-mode vc-mode)80 " " mode-line-misc-info mode-line-modes mode-line-end-spaces))818283 (auth-source-pass-enable)84 :config85 ;; theme86 (load-theme 'modus-operandi t)87 (setq display-buffer-alist '())8889 ;; font90 ;; disabled: I use TUI91 ;; (defun styling/set-font ()92 ;; "Set fonts"93 ;; (set-face-attribute 'default nil :font (font-spec :family "Noto Sans Mono" :size 14))94 ;; (set-fontset-font t 'unicode (font-spec :family "OpenMoji" :size 14))95 ;; (set-fontset-font t 'cjk-misc (font-spec :family "Noto Sans Mono CJK SC" :size 14) nil 'prepend))96 ;; (when window-system (styling/set-font))97 ;; (if (daemonp)98 ;; (add-hook 'after-make-frame-functions99 ;; (lambda (frame)100 ;; (with-selected-frame frame101 ;; (when window-system102 ;; (styling/set-font))))))103104 (windmove-default-keybindings 'meta)105106 (pixel-scroll-mode 1)107 (setq pixel-scroll-precision-interpolate-page t)108 (setq alert-default-style 'libnotify)109 :bind110 ("<next>" . 'pixel-scroll-interpolate-down)111 ("<prior>" . 'pixel-scroll-interpolate-up)112 ;; ("C-v" . 'pixel-scroll-up-half)113 ("C-v" . (lambda () (interactive)114 (scroll-up (max 1 (/ (* (1- (window-height (selected-window)))3) 4)))))115 ("C-x u" . (lambda () (interactive)116 (let ((default-directory "/doas::/"))117 (call-interactively 'find-file))))118 ;;("M-v" . 'pixel-scroll-down-half))119 ("M-v" . (lambda () (interactive)120 (scroll-down (max 1 (/ (* (1- (window-height (selected-window)))3) 4))))))121122(use-package term-title123 :load-path "lisp/lib"124 :init125 (setq frame-title-format126 '((:eval (if (buffer-file-name)127 (abbreviate-file-name (buffer-file-name))128 "%b"))129 (:eval (if (buffer-modified-p)130 " •"))131 " Emacs"))132 :hook133 (after-init . term-title-mode))134135(use-package window-numbering136 :hook (after-init . window-numbering-mode))137138(use-package god-mode139 :config140 (defun my-god-mode-update-mode-line ()141 (cond142 (god-local-mode143 (set-face-attribute 'mode-line nil144 :foreground "#604000"145 :background "#fff29a")146 (set-face-attribute 'mode-line-inactive nil147 :foreground "#3f3000"148 :background "#fff3da"))149 (t150 (set-face-attribute 'mode-line nil151 :foreground "#0a0a0a"152 :background "#d7d7d7")153 (set-face-attribute 'mode-line-inactive nil154 :foreground "#404148"155 :background "#efefef"))))156 (add-to-list 'god-exempt-major-modes 'vterm-mode)157 (add-to-list 'god-exempt-major-modes 'erc-mode)158 (add-to-list 'god-exempt-major-modes 'lisp-interaction-mode)159160 :hook161 ((post-command . my-god-mode-update-mode-line))162 :bind163 ("C-j" . god-local-mode)164 ("C-x C-1" . #'delete-other-windows)165 ("C-x C-2" . #'split-window-below)166 ("C-x C-3" . #'split-window-right)167 ("C-x C-0" . #'delete-window)168169 (:map god-local-mode-map170 ("i" . #'god-local-mode)171 ("[" . #'backward-paragraph)172 ("]" . #'forward-paragraph)))173174(use-package ibuffer :ensure nil175 :config176 (setq ibuffer-expert t177 ibuffer-display-summary nil178 ibuffer-use-other-window nil179 ibuffer-show-empty-filter-groups nil180 ibuffer-default-sorting-mode 'filename/process181 ibuffer-use-header-line t182 ibuffer-default-shrink-to-minimum-size nil)183 (setq ibuffer-formats184 '((mark modified read-only locked " "185 (name 30 30 :left :elide)186 " "187 (size 9 -1 :right)188 " "189 (mode 16 16 :left :elide)190 " " filename-and-process)191 (mark " "192 (name 16 -1)193 " " filename)))194 (setq ibuffer-saved-filter-groups195 '(("Main"196 ("Directories" (mode . dired-mode))197 ("C++" (or198 (mode . c++-mode)199 (mode . c++-ts-mode)200 (mode . c-mode)201 (mode . c-ts-mode)202 (mode . c-or-c++-ts-mode)))203 ("Golang" (or204 (mode . go-mode)))205 ("Python" (or206 (mode . python-ts-mode)207 (mode . c-mode)208 (mode . python-mode)))209 ("Build" (or210 (mode . make-mode)211 (mode . makefile-gmake-mode)212 (name . "^Makefile$")213 (mode . change-log-mode)))214 ("Scripts" (or215 (mode . shell-script-mode)216 (mode . shell-mode)217 (mode . sh-mode)218 (mode . lua-mode)219 (mode . bat-mode)))220 ("Config" (or221 (mode . conf-mode)222 (mode . conf-toml-mode)223 (mode . toml-ts-mode)224 (mode . conf-windows-mode)225 (name . "^\\.clangd$")226 (name . "^\\.gitignore$")227 (name . "^Doxyfile$")228 (name . "^config\\.toml$")229 (mode . yaml-mode)))230 ("Web" (or231 (mode . mhtml-mode)232 (mode . html-mode)233 (mode . web-mode)234 (mode . nxml-mode)))235 ("CSS" (or236 (mode . css-mode)237 (mode . sass-mode)))238 ("JS" (or239 (mode . js-mode)240 (mode . rjsx-mode)))241 ("Markup" (or242 (mode . markdown-mode)243 (mode . adoc-mode)))244 ("Org" (mode . org-mode))245 ("LaTeX" (name . "\.tex$"))246 ("Magit" (or247 (mode . magit-blame-mode)248 (mode . magit-cherry-mode)249 (mode . magit-diff-mode)250 (mode . magit-log-mode)251 (mode . magit-process-mode)252 (mode . magit-status-mode)))253 ("Apps" (or254 (mode . elfeed-search-mode)255 (mode . elfeed-show-mode)))256 ("Fundamental" (or257 (mode . fundamental-mode)258 (mode . text-mode)))259 ("IRC" (mode . erc-mode))260 ("Emacs" (or261 (mode . emacs-lisp-mode)262 (name . "^\\*Help\\*$")263 (name . "^\\*Custom.*")264 (name . "^\\*Org Agenda\\*$")265 (name . "^\\*info\\*$")266 (name . "^\\*scratch\\*$")267 (name . "^\\*Backtrace\\*$")268 (name . "^\\*Messages\\*$"))))))269 :hook270 (ibuffer-mode . (lambda ()271 (ibuffer-switch-to-saved-filter-groups "Main"))))272273(use-package ibuffer-sidebar274 :commands (ibuffer-sidebar-toggle-sidebar))275(use-package dired-sidebar276 :commands (dired-sidebar-toggle-sidebar)277 :init278 (defun +sidebar-toggle ()279 "Toggle both `dired-sidebar' and `ibuffer-sidebar'."280 (interactive)281 (dired-sidebar-toggle-sidebar)282 (ibuffer-sidebar-toggle-sidebar))283 :bind284 ("<f5>" . '+sidebar-toggle)285)286287(provide 'init-preference)288;;; init-preference.el ends here289