;;; -------------------- ;; 界面定制 ;; 禁用菜单栏、滚动条和工具栏 (menu-bar-mode -1) (scroll-bar-mode -1) (tool-bar-mode -1) ;; 禁用启动首屏并设置最大化 (setq inhibit-startup-screen t) (toggle-frame-maximized) ;; 全局高亮当前行 (global-hl-line-mode t) ;; 高亮匹配括号 (show-paren-mode t) ;; 获取当前显示器的DPI (defun my-dpi () (let* ((attrs (car (display-monitor-attributes-list))) (size (assoc 'mm-size attrs)) (sizex (cadr size)) (res (cdr (assoc 'geometry attrs))) (resx (- (caddr res) (car res))) dpi) (catch 'exit ;; in terminal (unless sizex (throw 'exit 10)) ;; on big screen (when (> sizex 1000) (throw 'exit 10)) ;; DPI (* (/ (float resx) sizex) 25.4)))) ;; 设置中英文字体大小,使两者字体宽度相等 ;; shzhzhyiwezitidaxi, shlizhzitikuduxide (defun zos/font/seperate-font (default-size cjk-size high-dpi-cjk-size) (let* ((z/default-size default-size) ; 判断DPI, 如果DPI<=120, 使用cjk-size(较小的值)作为cjk字体大小, 否则使用high-dpi-cjk-size(较大的值)作为cjk字体大小 (z/cjk-size (if (<= (my-dpi) 145) cjk-size high-dpi-cjk-size))) (progn ;; 设置默认的字体大小,由于height表示 1/10pt,所以要*10 (set-face-attribute 'default nil :family "Sarasa Mono SC" :height (* z/default-size 10) :weight 'normal :width 'normal) (set-face-attribute 'fixed-pitch nil :family "Sarasa Mono SC") ;; 给相应的字符集设置中文字体,这里的字体是冬青黑体简体中文 W3。 (dolist (charset '(han cjk-misc chinese-gbk)) (set-fontset-font "fontset-default" charset (font-spec :name "Sarasa Mono SC" :size z/cjk-size)))))) (zos/font/seperate-font 12 16 24) ;; 设置默认编码 (prefer-coding-system 'utf-8) (set-default-coding-systems 'utf-8) (set-terminal-coding-system 'utf-8) (set-keyboard-coding-system 'utf-8) ;; 设置主题 (load-theme 'wombat) ;; 包仓库 ; (require 'package) ; (add-to-list 'package-archives ; '("melpa-stable" . "https://stable.melpa.org/packages/")) ; (package-initialize) ;;; -------------------- ;; 功能定制 ;; 修改询问函数为 y or n (fset 'yes-or-no-p 'y-or-n-p) ;; 不要自动补全和备份文件 (setq make-backup-files nil) (setq auto-save-default nil) (setq create-lockfiles nil) ;; 粘贴的文字替换选中region而不是追加到region最后 (delete-selection-mode 1) ;; 保存文件时删除尾部空行 (setq delete-traling-lines t) (add-hook 'before-save-hook 'delete-trailing-whitespace) ;; 某些模式显示行号 (defun zos/enable-linum-mode () (linum-mode t)) (dolist (mode '(prog-mode-hook text-mode-hook)) (add-hook mode 'zos/enable-linum-mode)) ;; 高级echo补全 (icomplete-mode t) ;; minibuffer文件名补全忽略大小写 (setq read-file-name-completion-ignore-case t) ;; dired 排序将 . 开头的文件排前面 (setq ls-lisp-UCA-like-collation nil) ;;; -------------------- ;; 快捷键定制 ;; 窗口操作 M-h/j/k/l 上下左右移动焦点 (dolist (key-func-bind '(("M-h" . windmove-left) ("M-l" . windmove-right) ("M-j" . windmove-down) ("M-k" . windmove-up))) (let ((key (car key-func-bind)) (func (cdr key-func-bind))) (global-set-key (kbd key) func))) (global-unset-key (kbd "C-M-l")) (global-set-key (kbd "C-M-l") 'format-all-buffer) ;;; -------------------- ;; 文件关联 ;; (add-to-list 'auto-mode-alist ;; ("\\.vbs\\'" . vbs-mode)) ;;; -------------------- ;; 扩展功能 ;; 扩展目录 (let* ((z/arg-pos (seq-position command-line-args "--load")) (z/initel-path (if (number-or-marker-p z/arg-pos) (nth (+ z/arg-pos 1) command-line-args)))) (if (char-or-string-p z/initel-path) (progn (message z/initel-path) (add-to-list 'load-path (file-name-concat (file-name-directory z/initel-path) "elisp"))) )) ;; Cygwin 配置 (setq cygwin-mount-cygwin-bin-directory "C:/cygwin64/bin") (if (and (require 'cygwin-mount nil t) (require 'setup-cygwin nil t)) (progn (add-to-list 'exec-path (expand-file-name "/stlink-1.7.0-x86_64-w64-mingw32/bin" cygwin-root-directory)) (setenv "PATH" (concat (expand-file-name "/stlink-1.7.0-x86_64-w64-mingw32/bin" cygwin-root-directory) ";" (getenv "PATH"))) (add-to-list 'exec-path (expand-file-name "/openocd-v0.11.0-i686-w64-mingw32/bin" cygwin-root-directory)) (setenv "PATH" (concat (expand-file-name "/openocd-v0.11.0-i686-w64-mingw32/bin" cygwin-root-directory) ";" (getenv "PATH"))) (add-to-list 'exec-path (expand-file-name "/gcc-arm-11.2-2022.02-mingw-w64-i686-arm-none-eabi/bin" cygwin-root-directory)) (setenv "PATH" (concat (expand-file-name "/gcc-arm-11.2-2022.02-mingw-w64-i686-arm-none-eabi/bin" cygwin-root-directory) ";" (getenv "PATH"))))) ;; 文件浏览 (require 'neotree) ;; 格式化 (require 'format-all) (defun z/format-all-enable () "Enable format-all on some mode" (progn (format-all-ensure-formatter) (format-all-mode))) (add-hook 'prog-mode-hook 'z/format-all-enable) ;; Latex格式化 (defun zos/latex/format-file () "在保存时格式化LaTeX文件" (interactive) (let ((latex-indent "d:/texlive/2021/bin/win32/latexindent.exe") (buffer-encoding buffer-file-coding-system) (filepath (buffer-file-name))) (call-process latex-indent nil "*scratch*" nil "-w" "-y=defaultIndent:' '" filepath) (let ((coding-system-for-read buffer-encoding)) (revert-buffer t t t)))) ;; Markdown mode (require 'markdown-mode) (add-to-list 'process-coding-system-alist ; 修复prettier乱码问题 '("prettier" utf-8-auto)) (add-hook 'markdown-mode-hook 'z/format-all-enable) ;; YAML mode (require 'yaml-mode)