.emacs.d for emacs29

93 阅读3分钟

init.el

;;; package --- Summary
;;; Commentary:

;; ------ init ------

;;; Code:

;; Emacs 29 已经内置 use-package
(use-package package
    :config
    (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))

(unless (bound-and-true-p package--initialized)
(package-initialize)))

(prefer-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)

;; Emacs builtin packages
(setq-default auto-window-vscroll nil
    default-directory "~"
    default-text-properties '(line-spacing 0 line-height 1.0) ;default line height
    frame-title-format "%b"
    help-window-select t
    initial-major-mode 'fundamental-mode
    inhibit-startup-screen t ; disable the startup screen splash
    isearch-allow-motion t
    isearch-lazy-count t
    kill-whole-line t
    mode-line-compact t
    make-backup-files nil ; disable backup file
    read-process-output-max (* 4 1024 1024)
    require-final-newline t
    scroll-conservatively 1000
    show-trailing-whitespace t
    use-short-answers t
    blink-cursor-mode nil)

;; disable cursor blinking
;; (blink-cursor-mode 0)
(set-cursor-color "#F72E96")
(set-face-font 'default "Noto Sans Mono-13")
(global-display-line-numbers-mode)
;; (setq-default line-spacing nil)
;; (set-face-attribute 'default nil :family "Noto Sans Mono" :height 130)

;; `global-auto-revert-mode' is provided by autorevert.el (builtin)
(add-hook 'after-init-hook 'global-auto-revert-mode)

;; Delete Behavior
;; `delete-selection-mode' is provided by delsel.el (builtin)
(add-hook 'after-init-hook 'delete-selection-mode)

;; visual-line-mode
(add-hook 'after-init-hook 'global-visual-line-mode)

;; pixel-scroll-precise-mode
(add-hook 'after-init-hook 'pixel-scroll-precision-mode)

(add-hook 'prog-mode-hook (lambda () (setq-local column-number-mode t)))
;; (add-hook 'prog-mode-hook 'column-number-mode) ;在ModeLine显示列号
(add-hook 'prog-mode-hook 'display-line-numbers-mode) ;显示行号
(add-hook 'prog-mode-hook 'electric-pair-mode) ;括号的配对
(add-hook 'prog-mode-hook 'flymake-mode) ;错误的提示
(add-hook 'prog-mode-hook 'hs-minor-mode) ;代码的折叠
(add-hook 'prog-mode-hook 'prettify-symbols-mode) ;会将lambda等符号美化为λ

;; Highlight Current Line
(use-package hl-line
:when (display-graphic-p)
:hook (prog-mode . hl-line-mode))

;; ibuffer
(defalias 'list-buffers 'ibuffer)
;; Org Mode
(use-package org
:hook (org-mode . org-num-mode)
:config
(setq org-hide-leading-stars t
org-hide-emphasis-markers t
org-startup-indented t))

;; Pulse the cursor line
(dolist (cmd '(recenter-top-bottom other-window))
(advice-add cmd :after (lambda (&rest _) (pulse-momentary-highlight-one-line))))

;; Show Paren Mode
(use-package paren
:config
(setq show-paren-when-point-in-periphery t
show-paren-when-point-inside-paren t
show-paren-style 'mixed))

;; Recentf
(use-package recentf
:hook (after-init . recentf-mode)
;; recentf-open since v29.1, recentf-open-files since v22
:bind (("C-c r" . #'recentf-open)))

;; 内置包
;; global-auto-revert-mode(since v25.1) 可以让你的文件内容(因为其他原因改变了的时候)自动加载到最新的内容
;; delete-selection-mode(since v20.1) 这个在编辑(删除文字)的时候有用
;; fido-vertical-mode(since v28.1) 可以让你的minibuffer变成垂直的,非常推荐
;; global-hl-line-mode(since v21.1) 高亮当前行
;; recentf-mode(since v22.1),其中v29添加了recentf-open函数,可以打开近期文件。
;; 如果你不喜欢recentf-open的行为,可以试试recentf-open-files
;; repeat-mode(since v28.1) 这个命令我不知道怎么描述,比如你想不停的撤销的时候,
;; 你就可以只按一次C-x u而之后就只按u即可,能支持很多类似的命令

;; ------ company ------
(use-package company :ensure t :defer t
:hook (after-init . global-company-mode))

(use-package afternoon-theme)
(load-theme 'afternoon t)

;; ------ exec-path-from-shell ------
;; 这个包你还真必须得安装,它可以帮助读取你的环境变量。不然很多的时候,我们会出现找不到我们〔明明就在那里〕的一些命令

;; Settings for exec-path-from-shell
;; fix the PATH environment variable issue
(use-package exec-path-from-shell
:ensure t
:when (or (memq window-system '(mac ns x))
(unless cabins--os-win
(daemonp)))

:init (exec-path-from-shell-initialize))

early-init.el

;;; package --- Summary
;;; Commentary:

;; ------ early-init ------

;;; Code:

;; 这样的代码已经被证实可以非常好的优化启动速度
(setq gc-cons-threshold most-positive-fixnum)
(add-hook 'after-init-hook #'(lambda () (setq gc-cons-threshold 800000)))

;; Clean GUI
(when (fboundp 'tool-bar-mode) (tool-bar-mode -1))
(when (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
(when (fboundp 'menu-bar-mode) (menu-bar-mode -1))

(provide 'early-init)

;;; early-init.el ends here