dotfiles

Alpine Linux dotfiles

git clone git://git.lin.moe/dotfiles.git

  1;;; package --- Emacs 编辑器内置配置
  2;;; Commentary:
  3
  4;;; 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))
 10
 11(defun scroll-up-half ()
 12  (interactive)
 13  (scroll-up (window-half-height)))
 14
 15(defun scroll-down-half ()
 16  (interactive)
 17  (scroll-down (window-half-height)))
 18
 19(defun pixel-scroll-down-half ()
 20  (interactive)
 21  (if pixel-scroll-precision-interpolate-page
 22      (pixel-scroll-precision-interpolate (pixel-window-half-height)
 23                                          nil 1)
 24    (cua-scroll-down)))
 25
 26(defun pixel-scroll-up-half ()
 27  (interactive)
 28  (if pixel-scroll-precision-interpolate-page
 29      (pixel-scroll-precision-interpolate (- (pixel-window-half-height))
 30                                          nil 1)
 31    (cua-scroll-up)))
 32
 33(use-package emacs
 34  ;; 内置模式的 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  :init
 39  (setq backup-directory-alist `(("." . "~/.saves"))
 40        tramp-auto-save-directory "~/.saves")
 41
 42  (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)
 47  
 48  (when window-system
 49    (tool-bar-mode -1))
 50  (setq tool-bar-mode nil
 51        memu-bar-mode nil)
 52
 53  ;; line number
 54  (global-display-line-numbers-mode t)
 55  (global-auto-revert-mode t)
 56  (global-visual-line-mode t)
 57
 58  ;; charset
 59  (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")
 64
 65  ;; tab mode
 66  (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)
 70
 71  ;; switch mode-lin-modes and mode-line-misc-info, to show which-function
 72  (setq-default mode-line-format '("%e" mode-line-front-space
 73                                   (:propertize
 74                                    ("" mode-line-mule-info mode-line-client mode-line-modified mode-line-remote)
 75                                    display
 76                                    (min-width
 77                                     (5.0)))
 78                                   mode-line-frame-identification mode-line-buffer-identification "   " mode-line-position
 79                                   (vc-mode vc-mode)
 80                                   "  " mode-line-misc-info mode-line-modes mode-line-end-spaces))
 81  
 82
 83  (auth-source-pass-enable)
 84  :config
 85  ;; theme
 86  (load-theme 'modus-operandi t)
 87  (setq display-buffer-alist '())
 88
 89  ;; font
 90  ;; disabled: I use TUI
 91  ;; (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-functions
 99  ;;             (lambda (frame)
100  ;;               (with-selected-frame frame
101  ;;                 (when window-system
102  ;;                 (styling/set-font))))))
103
104  (windmove-default-keybindings 'meta)
105
106  (pixel-scroll-mode 1)
107  (setq pixel-scroll-precision-interpolate-page t)
108  (setq alert-default-style 'libnotify)
109  :bind
110  ("<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))))))
121
122(use-package term-title
123  :load-path "lisp/lib"
124  :init
125  (setq frame-title-format
126        '((:eval (if (buffer-file-name)
127                     (abbreviate-file-name (buffer-file-name))
128                   "%b"))
129          (:eval (if (buffer-modified-p)
130                     " •"))
131          " Emacs"))
132  :hook
133  (after-init . term-title-mode))
134
135(use-package window-numbering
136  :hook (after-init . window-numbering-mode))
137
138(use-package god-mode
139  :config
140  (defun my-god-mode-update-mode-line ()
141    (cond
142     (god-local-mode
143      (set-face-attribute 'mode-line nil
144                          :foreground "#604000"
145                          :background "#fff29a")
146      (set-face-attribute 'mode-line-inactive nil
147                          :foreground "#3f3000"
148                          :background "#fff3da"))
149     (t
150      (set-face-attribute 'mode-line nil
151			  :foreground "#0a0a0a"
152			  :background "#d7d7d7")
153      (set-face-attribute 'mode-line-inactive nil
154			  :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)
159
160  :hook
161  ((post-command . my-god-mode-update-mode-line))
162  :bind
163  ("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)
168
169  (:map god-local-mode-map
170        ("i" . #'god-local-mode)
171        ("[" . #'backward-paragraph)
172        ("]" . #'forward-paragraph)))
173
174(use-package ibuffer :ensure nil
175  :config
176  (setq ibuffer-expert t
177        ibuffer-display-summary nil
178        ibuffer-use-other-window nil
179        ibuffer-show-empty-filter-groups nil
180        ibuffer-default-sorting-mode 'filename/process
181        ibuffer-use-header-line t
182        ibuffer-default-shrink-to-minimum-size nil)
183  (setq ibuffer-formats
184        '((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-groups
195        '(("Main"
196           ("Directories" (mode . dired-mode))
197           ("C++" (or
198                   (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" (or
204                      (mode . go-mode)))
205           ("Python" (or
206                      (mode . python-ts-mode)
207                      (mode . c-mode)
208                      (mode . python-mode)))
209           ("Build" (or
210                     (mode . make-mode)
211                     (mode . makefile-gmake-mode)
212                     (name . "^Makefile$")
213                     (mode . change-log-mode)))
214           ("Scripts" (or
215                       (mode . shell-script-mode)
216                       (mode . shell-mode)
217                       (mode . sh-mode)
218                       (mode . lua-mode)
219                       (mode . bat-mode)))
220           ("Config" (or
221                      (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" (or
231                   (mode . mhtml-mode)
232                   (mode . html-mode)
233                   (mode . web-mode)
234                   (mode . nxml-mode)))
235           ("CSS" (or
236                   (mode . css-mode)
237                   (mode . sass-mode)))
238           ("JS" (or
239                  (mode . js-mode)
240                  (mode . rjsx-mode)))
241           ("Markup" (or
242                   (mode . markdown-mode)
243                   (mode . adoc-mode)))
244           ("Org" (mode . org-mode))
245           ("LaTeX" (name . "\.tex$"))
246           ("Magit" (or
247                     (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" (or
254                    (mode . elfeed-search-mode)
255                    (mode . elfeed-show-mode)))
256           ("Fundamental" (or
257                           (mode . fundamental-mode)
258                           (mode . text-mode)))
259           ("IRC" (mode . erc-mode))
260           ("Emacs" (or
261                     (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  :hook
270  (ibuffer-mode . (lambda ()
271                    (ibuffer-switch-to-saved-filter-groups "Main"))))
272
273(use-package ibuffer-sidebar
274  :commands (ibuffer-sidebar-toggle-sidebar))
275(use-package dired-sidebar
276  :commands  (dired-sidebar-toggle-sidebar)
277  :init
278  (defun +sidebar-toggle ()
279    "Toggle both `dired-sidebar' and `ibuffer-sidebar'."
280    (interactive)
281    (dired-sidebar-toggle-sidebar)
282    (ibuffer-sidebar-toggle-sidebar))
283  :bind
284  ("<f5>" . '+sidebar-toggle)
285)
286
287(provide 'init-preference)
288;;; init-preference.el ends here
289