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
110  (setq vc-ignore-dir-regexp
111        (format "\\(%s\\)\\|\\(%s\\)"
112                vc-ignore-dir-regexp
113                tramp-file-name-regexp))
114  :bind
115  ("<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))))))
126
127(use-package term-title
128  :load-path "lisp/lib"
129  :init
130  (setq frame-title-format
131        '((: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  :hook
139  (after-init . term-title-mode))
140
141(use-package window-numbering
142  :hook (after-init . window-numbering-mode))
143
144(use-package buffer-focus-hook
145  :demand t
146  :load-path "lisp/lib")
147
148(use-package god-mode
149  :config
150  (defun my-god-mode-update-mode-line ()
151    (cond
152     (god-local-mode
153      (set-face-attribute 'mode-line nil
154                          :foreground "#604000"
155                          :background "#fff29a")
156      (set-face-attribute 'mode-line-inactive nil
157                          :foreground "#3f3000"
158                          :background "#fff3da"))
159     (t
160      (set-face-attribute 'mode-line nil
161			  :foreground "#0a0a0a"
162			  :background "#d7d7d7")
163      (set-face-attribute 'mode-line-inactive nil
164			  :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)
169
170  :hook
171  ((post-command . my-god-mode-update-mode-line)
172   (after-init . god-mode-all)
173   (buffer-focus-out . (lambda () (when (and
174                                         god-global-mode
175                                         (god-passes-predicates-p)
176                                         (not (god-exempt-mode-p)))
177                                    (god-mode-maybe-activate)))))
178  :bind
179  ("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)
185
186  (:map god-local-mode-map
187        ("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)))
192
193
194(use-package ibuffer :ensure nil
195  :config
196  (setq ibuffer-expert t
197        ibuffer-display-summary nil
198        ibuffer-use-other-window nil
199        ibuffer-show-empty-filter-groups nil
200        ibuffer-default-sorting-mode 'filename/process
201        ibuffer-use-header-line t
202        ibuffer-default-shrink-to-minimum-size nil)
203  (setq ibuffer-formats
204        '((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-groups
215        '(("Main"
216           ("Directories" (mode . dired-mode))
217           ("C++" (or
218                   (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" (or
224                      (mode . go-mode)))
225           ("Python" (or
226                      (mode . python-ts-mode)
227                      (mode . cython-mode)
228                      (mode . python-mode)))
229           ("Build" (or
230                     (mode . make-mode)
231                     (mode . makefile-gmake-mode)
232                     (name . "^Makefile$")
233                     (mode . change-log-mode)))
234           ("Scripts" (or
235                       (mode . shell-script-mode)
236                       (mode . shell-mode)
237                       (mode . sh-mode)
238                       (mode . lua-mode)
239                       (mode . bat-mode)))
240           ("Config" (or
241                      (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" (or
251                   (mode . mhtml-mode)
252                   (mode . html-mode)
253                   (mode . web-mode)
254                   (mode . nxml-mode)))
255           ("CSS" (or
256                   (mode . css-mode)
257                   (mode . sass-mode)))
258           ("JS" (or
259                  (mode . js-mode)
260                  (mode . rjsx-mode)))
261           ("Markup" (or
262                   (mode . markdown-mode)
263                   (mode . adoc-mode)))
264           ("Org" (mode . org-mode))
265           ("LaTeX" (name . "\.tex$"))
266           ("Magit" (or
267                     (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" (or
274                    (mode . elfeed-search-mode)
275                    (mode . elfeed-show-mode)))
276           ("Fundamental" (or
277                           (mode . fundamental-mode)
278                           (mode . text-mode)))
279           ("IRC" (or
280                   (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" (or
289                    (mode . jabber-chat-mode)
290                    (mode . jabber-roster-mode)
291                    (mode . jabber-browse-mode)
292                    (mode . jabber-console-mode)))
293           ("Terminal" (or
294                        (mode . vterm-mode)
295                        (mode . term-mode)
296                        (mode . eshell-mode)))
297           ("Emacs" (or
298                     (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  :hook
307  (ibuffer-mode . (lambda ()
308                    (ibuffer-switch-to-saved-filter-groups "Main"))))
309
310(provide 'init-preference)
311;;; init-preference.el ends here
312