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)109110 (setq vc-ignore-dir-regexp111 (format "\\(%s\\)\\|\\(%s\\)"112 vc-ignore-dir-regexp113 tramp-file-name-regexp))114 :bind115 ("<next>" . 'pixel-scroll-interpolate-down)116 ("<prior>" . 'pixel-scroll-interpolate-up)117 ;; ("C-v" . 'pixel-scroll-up-half)118 ("C-v" . (lambda () (interactive)119 (scroll-up (max 1 (/ (* (1- (window-height (selected-window)))3) 4)))))120 ("C-x u" . (lambda () (interactive)121 (let ((default-directory "/doas::/"))122 (call-interactively 'find-file))))123 ;;("M-v" . 'pixel-scroll-down-half))124 ("M-v" . (lambda () (interactive)125 (scroll-down (max 1 (/ (* (1- (window-height (selected-window)))3) 4))))))126127(use-package term-title128 :load-path "lisp/lib"129 :init130 (setq frame-title-format131 '((:eval (if (buffer-file-name)132 (abbreviate-file-name (buffer-file-name))133 "%b"))134 (:eval (if (buffer-modified-p)135 " •"))136 (:eval (if (getenv "SSH_CLIENT") (concat " [" (system-name) "]" )))137 " Emacs"))138 :hook139 (after-init . term-title-mode))140141(use-package window-numbering142 :hook (after-init . window-numbering-mode))143144(use-package buffer-focus-hook145 :demand t146 :load-path "lisp/lib")147148(use-package god-mode149 :config150 (defun my-god-mode-update-mode-line ()151 (cond152 (god-local-mode153 (set-face-attribute 'mode-line nil154 :foreground "#604000"155 :background "#fff29a")156 (set-face-attribute 'mode-line-inactive nil157 :foreground "#3f3000"158 :background "#fff3da"))159 (t160 (set-face-attribute 'mode-line nil161 :foreground "#0a0a0a"162 :background "#d7d7d7")163 (set-face-attribute 'mode-line-inactive nil164 :foreground "#404148"165 :background "#efefef"))))166 (add-to-list 'god-exempt-major-modes 'vterm-mode)167 (add-to-list 'god-exempt-major-modes 'erc-mode)168 (add-to-list 'god-exempt-major-modes 'lisp-interaction-mode)169170 :hook171 ((post-command . my-god-mode-update-mode-line)172 (after-init . god-mode-all)173 (buffer-focus-out . (lambda () (when (and174 god-global-mode175 (god-passes-predicates-p)176 (not (god-exempt-mode-p)))177 (god-mode-maybe-activate)))))178 :bind179 ("M-i" . god-local-mode)180 ("<end>" . god-local-mode)181 ("C-x C-1" . #'delete-other-windows)182 ("C-x C-2" . #'split-window-below)183 ("C-x C-3" . #'split-window-right)184 ("C-x C-0" . #'delete-window)185186 (:map god-local-mode-map187 ("DEL" . #'backward-char)188 ("o" . (lambda ()(interactive) (progn (end-of-line) (newline-and-indent) (god-local-mode -1))))189 ("i" . #'god-local-mode)190 ("[" . #'backward-paragraph)191 ("]" . #'forward-paragraph)))192193194(use-package ibuffer :ensure nil195 :config196 (setq ibuffer-expert t197 ibuffer-display-summary nil198 ibuffer-use-other-window nil199 ibuffer-show-empty-filter-groups nil200 ibuffer-default-sorting-mode 'filename/process201 ibuffer-use-header-line t202 ibuffer-default-shrink-to-minimum-size nil)203 (setq ibuffer-formats204 '((mark modified read-only locked " "205 (name 30 30 :left :elide)206 " "207 (size 9 -1 :right)208 " "209 (mode 16 16 :left :elide)210 " " filename-and-process)211 (mark " "212 (name 16 -1)213 " " filename)))214 (setq ibuffer-saved-filter-groups215 '(("Main"216 ("Directories" (mode . dired-mode))217 ("C++" (or218 (mode . c++-mode)219 (mode . c++-ts-mode)220 (mode . c-mode)221 (mode . c-ts-mode)222 (mode . c-or-c++-ts-mode)))223 ("Golang" (or224 (mode . go-mode)))225 ("Python" (or226 (mode . python-ts-mode)227 (mode . cython-mode)228 (mode . python-mode)))229 ("Build" (or230 (mode . make-mode)231 (mode . makefile-gmake-mode)232 (name . "^Makefile$")233 (mode . change-log-mode)))234 ("Scripts" (or235 (mode . shell-script-mode)236 (mode . shell-mode)237 (mode . sh-mode)238 (mode . lua-mode)239 (mode . bat-mode)))240 ("Config" (or241 (mode . conf-mode)242 (mode . conf-toml-mode)243 (mode . toml-ts-mode)244 (mode . conf-windows-mode)245 (name . "^\\.clangd$")246 (name . "^\\.gitignore$")247 (name . "^Doxyfile$")248 (name . "^config\\.toml$")249 (mode . yaml-mode)))250 ("Web" (or251 (mode . mhtml-mode)252 (mode . html-mode)253 (mode . web-mode)254 (mode . nxml-mode)))255 ("CSS" (or256 (mode . css-mode)257 (mode . sass-mode)))258 ("JS" (or259 (mode . js-mode)260 (mode . rjsx-mode)))261 ("Markup" (or262 (mode . markdown-mode)263 (mode . adoc-mode)))264 ("Org" (mode . org-mode))265 ("LaTeX" (name . "\.tex$"))266 ("Magit" (or267 (mode . magit-blame-mode)268 (mode . magit-cherry-mode)269 (mode . magit-diff-mode)270 (mode . magit-log-mode)271 (mode . magit-process-mode)272 (mode . magit-status-mode)))273 ("Apps" (or274 (mode . elfeed-search-mode)275 (mode . elfeed-show-mode)))276 ("Fundamental" (or277 (mode . fundamental-mode)278 (mode . text-mode)))279 ("IRC" (or280 (mode . erc-mode)281 (mode . circe-mode)282 (mode . circe-server-mode)283 (mode . circe-channel-mode)284 (mode . circe-chat-mode)285 (mode . circe-display-MODE)286 (mode . circe-lagmon-mode)287 (mode . circe-query-mode)))288 ("XMPP" (or289 (mode . jabber-chat-mode)290 (mode . jabber-roster-mode)291 (mode . jabber-browse-mode)292 (mode . jabber-console-mode)))293 ("Terminal" (or294 (mode . vterm-mode)295 (mode . term-mode)296 (mode . eshell-mode)))297 ("Emacs" (or298 (mode . emacs-lisp-mode)299 (name . "^\\*Help\\*$")300 (name . "^\\*Custom.*")301 (name . "^\\*Org Agenda\\*$")302 (name . "^\\*info\\*$")303 (name . "^\\*scratch\\*$")304 (name . "^\\*Backtrace\\*$")305 (name . "^\\*Messages\\*$"))))))306 :hook307 (ibuffer-mode . (lambda ()308 (ibuffer-switch-to-saved-filter-groups "Main"))))309310(provide 'init-preference)311;;; init-preference.el ends here312