Emacs settings.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

191 lines
5.9 KiB

2 years ago
;;; --------------------
;; 界面定制
;; 禁用菜单栏、滚动条和工具栏
(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)