X-Git-Url: https://git.shemshak.org/gitweb.cgi/~bandali/configs/blobdiff_plain/9dcd3cfe2201f862348a643061ddb39ee0042ba9..c470019ff5cb6b4bfeb7dd950f6b5ea4221d2655:/.emacs.d/init.el diff --git a/.emacs.d/init.el b/.emacs.d/init.el index 63d5902..42152ea 100644 --- a/.emacs.d/init.el +++ b/.emacs.d/init.el @@ -181,8 +181,6 @@ (setq use-package-always-defer t) (require 'bind-key) -(use-package delight) - ;;; Initial setup @@ -396,6 +394,8 @@ For disabling the behaviour for certain buffers and/or modes." ;; time and battery in mode-line (use-feature time + :disabled + :demand :config (display-time-mode) :custom @@ -403,6 +403,8 @@ For disabling the behaviour for certain buffers and/or modes." (display-time-format "%a %b %-e, %-l:%M%P")) (use-feature battery + :disabled + :demand :config (display-battery-mode) :custom @@ -561,24 +563,30 @@ For disabling the behaviour for certain buffers and/or modes." ;;; Essential packages (use-package exwm + :disabled :demand :config - (require 'exwm-config) - - (setq - exwm-workspace-number 4 - exwm-workspace-index-map (lambda (i) (number-to-string (1+ i)))) - - ;; Make class name the buffer name, truncating beyond 50 characters - (defun exwm-rename-buffer () + ;; make class name the buffer name, truncating beyond 60 characters + (defun b/exwm-rename-buffer () (interactive) (exwm-workspace-rename-buffer (concat exwm-class-name ":" - (if (<= (length exwm-title) 50) exwm-title - (concat (substring exwm-title 0 49) "..."))))) - (add-hook 'exwm-update-class-hook 'exwm-rename-buffer) - (add-hook 'exwm-update-title-hook 'exwm-rename-buffer) + (if (<= (length exwm-title) 60) exwm-title + (concat (substring exwm-title 0 59) "..."))))) + ;; Enable EXWM + (exwm-enable) + :hook ((exwm-update-class . b/exwm-rename-buffer) + (exwm-update-title . b/exwm-rename-buffer))) + +(use-feature exwm-config + :demand + :after exwm + :hook (exwm-init . exwm-config--fix/ido-buffer-window-other-frame)) +(use-feature exwm-input + :demand + :after exwm + :config (defun b/exwm-ws-prev-index () "Return the index for the previous EXWM workspace, wrapping around if needed." @@ -594,55 +602,106 @@ around if needed." 0 (1+ exwm-workspace-current-index))) - ;; 's-R': Reset - (exwm-input-set-key (kbd "s-R") #'exwm-reset) - ;; 's-\': Switch workspace - (exwm-input-set-key (kbd "s-\\") #'exwm-workspace-switch) - ;; 's-N': Switch to certain workspace - (dotimes (i 10) - (exwm-input-set-key - (kbd (format "s-%d" i)) - (lambda () - (interactive) - (exwm-workspace-switch-create (1- i))))) - ;; 's-[': Switch to previous workspace - (defun b/exwm-ws-prev () - "Switch to previous EXWM workspace, wrapping around if needed." - (interactive) - (exwm-workspace-switch-create (b/exwm-ws-prev-index))) - (exwm-input-set-key (kbd "s-[") #'b/exwm-ws-prev) - ;; 's-]': Switch to next workspace - (defun b/exwm-ws-next () - "Switch to next EXWM workspace, wrapping around if needed." - (interactive) - (exwm-workspace-switch-create (b/exwm-ws-next-index))) - (exwm-input-set-key (kbd "s-]") #'b/exwm-ws-next) - ;; 's-{': Move window to previous workspace - (defun b/exwm-move-window-to-prev-ws () - "Move window to previous EXWM workspace, wrapping around if -needed." - (interactive) - (exwm-workspace-move-window (b/exwm-ws-prev-index))) - (exwm-input-set-key (kbd "s-{") #'b/exwm-move-window-to-prev-ws) - ;; 's-}': Move window to next workspace - (defun b/exwm-move-window-to-next-ws () - "Move window to next EXWM workspace, wrapping around if -needed." - (interactive) - (exwm-workspace-move-window (b/exwm-ws-next-index))) - (exwm-input-set-key (kbd "s-}") #'b/exwm-move-window-to-next-ws) - ;; 's-SPC': Launch application - ;; (exwm-input-set-key - ;; (kbd "s-SPC") - ;; (lambda (command) - ;; (interactive (list (read-shell-command "➜ "))) - ;; (start-process-shell-command command nil command))) - - (exwm-input-set-key (kbd "M-s-SPC") #'counsel-linux-app) - - ;; Shorten 'C-c C-q' to 'C-q' + ;; shorten 'C-c C-q' to 'C-q' (define-key exwm-mode-map [?\C-q] #'exwm-input-send-next-key) + (setq exwm-workspace-number 4 + exwm-input-global-keys + `(([?\s-R] . exwm-reset) + ([?\s-\\] . exwm-workspace-switch) + ([?\s-\s] . dmenu) + ([?\S-\s-\s] . (lambda (command) + (interactive + (list (read-shell-command "➜ "))) + (start-process-shell-command + command nil command))) + ([s-return] . (lambda () + (interactive) + (start-process "" nil "urxvt"))) + ([?\C-\s-\s] . counsel-linux-app) + ([?\M-\s-\s] . (lambda () + (interactive) + (start-process-shell-command + "rofi-pass" nil "rofi-pass"))) + ([?\s-h] . windmove-left) + ([?\s-j] . windmove-down) + ([?\s-k] . windmove-up) + ([?\s-l] . windmove-right) + ([?\s-H] . windmove-swap-states-left) + ([?\s-J] . windmove-swap-states-down) + ([?\s-K] . windmove-swap-states-up) + ([?\s-L] . windmove-swap-states-right) + ([?\M-\s-h] . shrink-window-horizontally) + ([?\M-\s-l] . enlarge-window-horizontally) + ([?\M-\s-k] . shrink-window) + ([?\M-\s-j] . enlarge-window) + ([?\s-\[] . (lambda () + (interactive) + (exwm-workspace-switch-create + (b/exwm-ws-prev-index)))) + ([?\s-\]] . (lambda () + (interactive) + (exwm-workspace-switch-create + (b/exwm-ws-next-index)))) + ([?\s-{] . (lambda () + (interactive) + (exwm-workspace-move-window + (b/exwm-ws-prev-index)))) + ([?\s-}] . (lambda () + (interactive) + (exwm-workspace-move-window + (b/exwm-ws-next-index)))) + ,@(mapcar (lambda (i) + `(,(kbd (format "s-%d" i)) . + (lambda () + (interactive) + (exwm-workspace-switch-create ,i)))) + (number-sequence 0 (1- exwm-workspace-number))) + ([?\s-t] . exwm-floating-toggle-floating) + ([?\s-f] . exwm-layout-toggle-fullscreen) + ([?\s-W] . (lambda () + (interactive) + (kill-buffer (current-buffer)))) + ([?\s-Q] . (lambda () + (interactive) + (exwm-manage--kill-client))) + ([?\s-\'] . (lambda () + (interactive) + (start-process-shell-command + "rofi-light" nil "rofi-light"))) + ([XF86AudioMute] . + (lambda () + (interactive) + (start-process "" nil "pamixer" "--toggle-mute"))) + ([XF86AudioLowerVolume] . + (lambda () + (interactive) + (start-process + "" nil "pamixer" "--allow-boost" "--decrease" "5"))) + ([XF86AudioRaiseVolume] . + (lambda () + (interactive) + (start-process + "" nil "pamixer" "--allow-boost" "--increase" "5"))) + ([XF86AudioPlay] . + (lambda () + (interactive) + (start-process "" nil "mpc" "toggle"))) + ([XF86AudioPrev] . + (lambda () + (interactive) + (start-process "" nil "mpc" "prev"))) + ([XF86AudioNext] . + (lambda () + (interactive) + (start-process "" nil "mpc" "next"))) + ([XF86ScreenSaver] . + (lambda () + (interactive) + (start-process "" nil "dm-tool" "lock"))) + ([\s-XF86Back] . previous-buffer) + ([\s-XF86Forward] . next-buffer))) + ;; Line-editing shortcuts (setq exwm-input-simulation-keys '(;; movement @@ -657,129 +716,73 @@ needed." ([?\M-v] . [prior]) ([?\C-v] . [next]) ([?\C-d] . [delete]) - ([?\C-k] . [S-end delete]) + ([?\C-k] . [S-end ?\C-x]) + ([?\M-<] . C-home) + ([?\M->] . C-end) ;; cut/copy/paste - ;; ([?\C-w] . [?\C-x]) + ([?\C-w] . [?\C-x]) ([?\M-w] . [?\C-c]) ([?\C-y] . [?\C-v]) - ;; search - ([?\C-s] . [?\C-f]))) - - ;; Enable EXWM - (exwm-enable) - - (add-hook 'exwm-init-hook #'exwm-config--fix/ido-buffer-window-other-frame) - - (require 'exwm-systemtray) - (exwm-systemtray-enable) - - (require 'exwm-randr) + ([?\M-d] . [C-S-right ?\C-x]) + ([?\M-\d] . [C-S-left ?\C-x]) + ;; window + ([?\s-w] . [?\C-w]) + ([?\s-q] . [?\C-q]) + ;; misc + ([?\C-s] . [?\C-f]) + ([?\s-s] . [?\C-s]) + ([?\C-g] . [escape])))) + +(use-feature exwm-manage + :demand + :after exwm + :hook + (exwm-manage-finish . (lambda () + (when exwm-class-name + (cond + ((string= exwm-class-name "Abrowser") + (exwm-input-set-local-simulation-keys + `(,@exwm-input-simulation-keys + ([?\C-\S-d] . [?\C-d])))) + ((string= exwm-class-name "URxvt") + (exwm-input-set-local-simulation-keys + '(([?\C-c ?\C-c] . [?\C-c]) + ([?\C-c ?\C-u] . [?\C-u])))) + ((string= exwm-class-name "Zathura") + (exwm-input-set-local-simulation-keys + '(([?\C-p] . [C-up]) + ([?\C-n] . [C-down]))))))))) + +(use-feature exwm-randr + :demand + :after exwm + :config (exwm-randr-enable) + :custom + (exwm-randr-workspace-monitor-plist '(1 "VGA-1")) + :hook + (exwm-randr-screen-change . (lambda () + (let ((xrandr + (string-join + '("xrandr" + "--output VGA-1" + "--same-as LVDS-1" + "--auto") + " "))) + (start-process-shell-command + "xrandr" nil xrandr))))) + +(use-feature exwm-systemtray + :demand + :after exwm + :config + (exwm-systemtray-enable)) - ;; (exwm-input-set-key - ;; (kbd "s-") - ;; (lambda () - ;; (interactive) - ;; (start-process "urxvt" nil "urxvt"))) - - ;; (exwm-input-set-key - ;; (kbd "s-SPC") ;; rofi doesn't properly launch programs when started from emacs - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "rofi-run" nil "rofi -show run -display-run '> ' -display-window ' 🗔 '"))) - - ;; (exwm-input-set-key - ;; (kbd "s-/") - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "rofi-win" nil "rofi -show window -display-run '> ' -display-window ' 🗔 '"))) - - ;; (exwm-input-set-key - ;; (kbd "M-SPC") - ;; (lambda () - ;; (interactive) - ;; (start-process "rofi-pass" nil "rofi-pass"))) - - ;; (exwm-input-set-key - ;; (kbd "") - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "pamixer" nil "pamixer --toggle-mute"))) - - ;; (exwm-input-set-key - ;; (kbd "") - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "pamixer" nil "pamixer --allow-boost --decrease 5"))) - - ;; (exwm-input-set-key - ;; (kbd "") - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "pamixer" nil "pamixer --allow-boost --increase 5"))) - - ;; (exwm-input-set-key - ;; (kbd "") - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "mpc" nil "mpc toggle"))) - - ;; (exwm-input-set-key - ;; (kbd "") - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "mpc" nil "mpc prev"))) - - ;; (exwm-input-set-key - ;; (kbd "") - ;; (lambda () - ;; (interactive) - ;; (start-process-shell-command "mpc" nil "mpv next"))) +(use-feature exwm-workspace) - (comment - (defun b/exwm-pasystray () - "A command used to start pasystray." - (interactive) - (if (executable-find "pasystray") - (progn - (message "EXWM: starting pasystray ...") - (start-process-shell-command "pasystray" nil "pasystray --notify=all")) - (message "EXWM: pasystray is not installed, abort!"))) - (add-hook 'exwm-init-hook #'b/exwm-pasystray)) - - (defun b/exwm-nm-applet () - "A command used to start nm-applet." - (interactive) - (if (executable-find "nm-applet") - (progn - (message "EXWM: starting nm-applet ...") - (start-process-shell-command "nm-applet" nil "nm-applet")) - (message "EXWM: nm-applet is not installed, abort!"))) - (add-hook 'exwm-init-hook #'b/exwm-nm-applet) - - (exwm-input-set-key - (kbd "s-t") - (lambda () - (interactive) - (exwm-floating-toggle-floating))) - - (exwm-input-set-key - (kbd "s-f") - (lambda () - (interactive) - (exwm-layout-toggle-fullscreen))) - - (exwm-input-set-key - (kbd "s-w") - (lambda () - (interactive) - (kill-buffer (current-buffer)))) - - (exwm-input-set-key - (kbd "s-q") - (lambda () - (interactive) - (exwm-manage--kill-client)))) +(use-package exwm-edit + :demand + :after exwm) ;; use the org-plus-contrib package to get the whole deal (use-package org-plus-contrib) @@ -920,7 +923,6 @@ needed." (use-package ivy :defer 0.3 - :delight ;; " 🙒" :bind (:map ivy-minibuffer-map ([escape] . keyboard-escape-quit) @@ -961,7 +963,6 @@ This function is intended for use with `ivy-ignore-buffers'." (use-package counsel :after ivy - :delight :bind (([remap execute-extended-command] . counsel-M-x) ([remap find-file] . counsel-find-file) ("C-c b b" . ivy-switch-buffer) @@ -1084,10 +1085,11 @@ This function is intended for use with `ivy-ignore-buffers'." (or (name . "^\\*scratch\\*$") (name . "^\\*Messages\\*$"))) + ("exwm" (mode . exwm-mode)) ("erc" (mode . erc-mode))))) (ibuffer-formats '((mark modified read-only locked " " - (name 18 18 :left :elide) + (name 72 72 :left :elide) " " (size-h 9 -1 :right) " " @@ -1101,7 +1103,6 @@ This function is intended for use with `ivy-ignore-buffers'." (use-feature outline :disabled :hook (prog-mode . outline-minor-mode) - :delight (outline-minor-mode " outl") :bind (:map outline-minor-mode-map @@ -1202,7 +1203,6 @@ This function is intended for use with `ivy-ignore-buffers'." ;; display Lisp objects at point in the echo area (use-feature eldoc :when (version< "25" emacs-version) - :delight " eldoc" :config (global-eldoc-mode)) ;; highlight matching parens @@ -1215,7 +1215,6 @@ This function is intended for use with `ivy-ignore-buffers'." :config (electric-pair-mode)) (use-feature simple - :delight (auto-fill-function " fill") :config (column-number-mode) :custom ;; Save what I copy into clipboard from other applications into Emacs' @@ -1253,7 +1252,6 @@ This function is intended for use with `ivy-ignore-buffers'." (use-package company :defer 0.6 - :delight " comp" :bind (:map company-active-map ([tab] . company-complete-common-or-cycle) @@ -1282,8 +1280,7 @@ This function is intended for use with `ivy-ignore-buffers'." (setq flycheck-check-syntax-automatically '(mode-enabled save)) :custom (flycheck-mode-line-prefix "flyc")) -(use-feature flyspell - :delight " flysp") +(use-feature flyspell) ;; http://endlessparentheses.com/ispell-and-apostrophes.html (use-feature ispell @@ -1313,7 +1310,6 @@ This function is intended for use with `ivy-ignore-buffers'." #'endless/replace-quote)) (use-feature abbrev - :delight " abbr" :hook (text-mode . abbrev-mode)) @@ -1326,12 +1322,9 @@ This function is intended for use with `ivy-ignore-buffers'." (add-hook 'lisp-interaction-mode-hook #'indent-spaces-mode)) (use-feature reveal - :delight (reveal-mode " reveal") :hook (emacs-lisp-mode . reveal-mode)) -(use-feature elisp-mode - :delight (emacs-lisp-mode "Elisp" :major)) - +(use-feature elisp-mode) (use-package alloy-mode :straight (:host github :repo "dwwmmn/alloy-mode") @@ -1506,6 +1499,10 @@ This function is intended for use with `ivy-ignore-buffers'." :hook ((tex-mode . auto-fill-mode) (tex-mode . flyspell-mode))) +(use-package george-mode + :straight (:host nil :repo "https://git.shemshak.org/amin/george-mode") + :mode "\\.grg\\'") + ;;; Theme @@ -1515,6 +1512,7 @@ This function is intended for use with `ivy-ignore-buffers'." (load-theme 'tangomod t) (use-package smart-mode-line + :disabled :commands (sml/apply-theme) :demand :config @@ -1530,29 +1528,51 @@ This function is intended for use with `ivy-ignore-buffers'." (use-package doom-themes) +(use-package solarized-theme + :disabled + :config + (load-theme 'solarized-light t)) + +(use-package moody + :demand + :config + (setq x-underline-at-descent-line t) + (let ((line (face-attribute 'mode-line :underline))) + (set-face-attribute 'mode-line nil :overline line) + (set-face-attribute 'mode-line-inactive nil :overline line) + (set-face-attribute 'mode-line-inactive nil :underline line) + (set-face-attribute 'mode-line nil :box nil) + (set-face-attribute 'mode-line-inactive nil :box nil) + (set-face-attribute 'mode-line-inactive nil :background "#eeeeee")) ; d3d7cf + (moody-replace-mode-line-buffer-identification) + (moody-replace-vc-mode)) + (defvar b/org-mode-font-lock-keywords '(("[ \t]*\\(#\\+\\(BEGIN\\|END\\|begin\\|end\\)_\\(\\S-+\\)\\)[ \t]*\\([^\n:]*\\)" (1 '(:foreground "#5a5b5a" :background "#292b2b") t) ; directive (3 '(:foreground "#81a2be" :background "#292b2b") t) ; kind - (4 '(:foreground "#c5c8c6") t)))) ; title + (4 '(:foreground "#c5c8c6") t))) ; title + "For use with the `doom-tomorrow-night' theme.") (defun b/lights-on () "Enable my favourite light theme." (interactive) (mapc #'disable-theme custom-enabled-themes) (load-theme 'tangomod t) - (sml/apply-theme 'automatic) + ;; (sml/apply-theme 'automatic) (font-lock-remove-keywords - 'org-mode b/org-mode-font-lock-keywords)) + 'org-mode b/org-mode-font-lock-keywords) + (exwm-systemtray--refresh)) (defun b/lights-off () "Go dark." (interactive) (mapc #'disable-theme custom-enabled-themes) - (load-theme 'doom-tomorrow-night t) - (sml/apply-theme 'automatic) + (load-theme 'doom-one t) + ;; (sml/apply-theme 'automatic) (font-lock-add-keywords - 'org-mode b/org-mode-font-lock-keywords t)) + 'org-mode b/org-mode-font-lock-keywords t) + (exwm-systemtray--refresh)) (bind-keys ("C-c t d" . b/lights-off) @@ -1566,7 +1586,6 @@ This function is intended for use with `ivy-ignore-buffers'." (use-package which-key :defer 0.4 - :delight :config (which-key-add-key-based-replacements ;; prefixes for global prefixes and minor modes @@ -1720,7 +1739,6 @@ This function is intended for use with `ivy-ignore-buffers'." ;; easily type pretty quotes & other typography, like ‘’“”-–—«»‹› (use-package typo :defer 0.5 - :delight " typo" :config (typo-global-mode 1) :hook (((text-mode erc-mode) . typo-mode) @@ -1807,7 +1825,6 @@ This function is intended for use with `ivy-ignore-buffers'." (use-package page-break-lines :defer 0.5 - :delight " pgln" :custom (page-break-lines-max-width fill-column) :config @@ -1826,11 +1843,9 @@ This function is intended for use with `ivy-ignore-buffers'." ("p" . mc/mark-previous-like-this) ("a" . mc/mark-all-like-this)))) -(comment - ;; TODO - (use-package forge - :after magit - :demand)) +(use-package forge + :demand + :after magit) (use-package yasnippet :defer 0.6 @@ -1916,6 +1931,14 @@ This function is intended for use with `ivy-ignore-buffers'." :config (pdf-tools-install nil t) :custom (pdf-view-resize-factor 1.05)) +(use-package org-pdftools + :straight (:host github :repo "fuxialexander/org-pdftools") + :demand + :after org + :config + (with-eval-after-load 'org + (require 'org-pdftools))) + (use-package biblio) (use-feature reftex @@ -1935,6 +1958,25 @@ This function is intended for use with `ivy-ignore-buffers'." (goto-char (cdr macro))) (reftex-this-word))))) +(use-package minions + :demand + :config (minions-mode)) + +(use-package dmenu + :custom + (dmenu-prompt-string "run: ") + (dmenu-save-file (b/var "dmenu-items"))) + +(use-package eosd + ;; TODO: fix build by properly building the eosd-pixbuf.c module + ;; e.g. see https://github.com/raxod502/straight.el/issues/386 + :disabled + :straight (:host github :repo "clarete/eosd") + :demand + :after exwm + :config + (eosd-start)) + ;;; Email (with Gnus) @@ -1975,9 +2017,9 @@ This function is intended for use with `ivy-ignore-buffers'." ;; (: gnus-group-split-fancy "INBOX" t "INBOX") ;; gnu (list ".*<\\(.*\\)\\.\\(non\\)?gnu\\.org>.*" "l.\\1") - ;; *@lists.sr.ht, omitting one dot if present - ;; add more \\.?\\([^.@]*\\) if needed - (list ".*<~\\(.*\\)/\\([^.@]*\\)\\.?\\([^.@]*\\)@lists.sr.ht>.*" "l.~\\1.\\2\\3") + ;; *.lists.sr.ht, omitting one dot if present + ;; add more \\.?\\([^.]*\\) if needed + (list ".*<~\\(.*\\)/\\([^.]*\\)\\.?\\([^.]*\\)\\.lists.sr.ht>.*" "l.~\\1.\\2\\3") ;; webmasters (from "webmasters\\(-comment\\)?@gnu\\.org" "webmasters") ;; other @@ -2158,10 +2200,6 @@ This function is intended for use with `ivy-ignore-buffers'." gnus-interactive-exit nil gnus-gcc-mark-as-read t) :config - (require 'ebdb) - (require 'ebdb-mua) - (require 'ebdb-gnus) - (when (version< emacs-version "27") (add-to-list 'nnmail-split-abbrev-alist @@ -2251,7 +2289,7 @@ https://csclub.uwaterloo.ca/~abandali") (body "") (eval (setq b/message-cite-say-hi nil))) ("nnimap\\+uw:.*" - (address "abandali@uwaterloo.ca") + (address "bandali@uwaterloo.ca") (signature b/uw-signature)) ("nnimap\\+uw:INBOX" (gcc "\"nnimap+uw:Sent Items\"")) @@ -2334,7 +2372,7 @@ https://csclub.uwaterloo.ca/~abandali") message-subscribed-address-functions '(gnus-find-subscribed-addresses) message-dont-reply-to-names - "\\(\\(\\(amin\\|mab\\)@shemshak\\.org\\)\\|\\(amin@bndl\\.org\\)\\|\\(.*@aminb\\.org\\)\\|\\(\\(bandali\\|mab\\|aminb?\\)@gnu\\.org\\)\\|\\(a\\(min\\.\\)?bandali@uwaterloo\\.ca\\)\\|\\(abandali@csclub\\.uwaterloo\\.ca\\)\\)") + "\\(\\(\\(amin\\|mab\\)@shemshak\\.org\\)\\|\\(amin@bndl\\.org\\)\\|\\(.*@aminb\\.org\\)\\|\\(\\(bandali\\|mab\\|aminb?\\)@gnu\\.org\\)\\|\\(\\(a\\(min\\.\\)?\\)?bandali@uwaterloo\\.ca\\)\\|\\(abandali@csclub\\.uwaterloo\\.ca\\)\\)") (require 'company-ebdb) :hook (;; (message-setup . mml-secure-message-sign-pgpmime) (message-mode . flyspell-mode) @@ -2350,8 +2388,7 @@ https://csclub.uwaterloo.ca/~abandali") :custom (message-elide-ellipsis "[...]\n")) -(use-feature mml - :delight " mml") +(use-feature mml) (use-feature mml-sec :custom @@ -2377,6 +2414,7 @@ https://csclub.uwaterloo.ca/~abandali") ("s" . footnote-set-style))) (use-package ebdb + :demand :after gnus :bind (:map gnus-group-mode-map ("e" . ebdb)) :config @@ -2397,14 +2435,15 @@ https://csclub.uwaterloo.ca/~abandali") (defun company-ebdb--post-complete (_) nil)) (use-feature ebdb-gnus + :demand :after ebdb :custom (ebdb-gnus-window-size 0.3)) (use-feature ebdb-mua + :demand :after ebdb - ;; :custom (ebdb-mua-pop-up nil) - ) + :custom (ebdb-mua-pop-up t)) ;; (use-package ebdb-message ;; :after ebdb) @@ -2474,80 +2513,7 @@ https://csclub.uwaterloo.ca/~abandali") (add-to-list 'erc-modules 'notifications) (add-to-list 'erc-modules 'spelling) (add-to-list 'erc-modules 'scrolltoplace) - (erc-update-modules) - - (when (and (version<= "24.4" emacs-version) - (version< emacs-version "27")) - ;; fix erc-lurker bug - ;; patch submitted: https://bugs.gnu.org/36843#10 - ;; TODO: remove when patch is merged and emacs 27 is released - (defvar erc-message-parsed) - (defun erc-display-message (parsed type buffer msg &rest args) - "Display MSG in BUFFER. - -ARGS, PARSED, and TYPE are used to format MSG sensibly. - -See also `erc-format-message' and `erc-display-line'." - (let ((string (if (symbolp msg) - (apply #'erc-format-message msg args) - msg)) - (erc-message-parsed parsed)) - (setq string - (cond - ((null type) - string) - ((listp type) - (mapc (lambda (type) - (setq string - (erc-display-message-highlight type string))) - type) - string) - ((symbolp type) - (erc-display-message-highlight type string)))) - - (if (not (erc-response-p parsed)) - (erc-display-line string buffer) - (unless (erc-hide-current-message-p parsed) - (erc-put-text-property 0 (length string) 'erc-parsed parsed string) - (erc-put-text-property 0 (length string) 'rear-sticky t string) - (when (erc-response.tags parsed) - (erc-put-text-property 0 (length string) 'tags (erc-response.tags parsed) - string)) - (erc-display-line string buffer))))) - - (defun erc-lurker-update-status (_message) - "Update `erc-lurker-state' if necessary. - -This function is called from `erc-insert-pre-hook'. If the -current message is a PRIVMSG, update `erc-lurker-state' to -reflect the fact that its sender has issued a PRIVMSG at the -current time. Otherwise, take no action. - -This function depends on the fact that `erc-display-message' -lexically binds `erc-message-parsed', which is used to check if -the current message is a PRIVMSG and to determine its sender. -See also `erc-lurker-trim-nicks' and `erc-lurker-ignore-chars'. - -In order to limit memory consumption, this function also calls -`erc-lurker-cleanup' once every `erc-lurker-cleanup-interval' -updates of `erc-lurker-state'." - (when (and (boundp 'erc-message-parsed) - (erc-response-p erc-message-parsed)) - (let* ((command (erc-response.command erc-message-parsed)) - (sender - (erc-lurker-maybe-trim - (car (erc-parse-user (erc-response.sender erc-message-parsed))))) - (server - (erc-canonicalize-server-name erc-server-announced-name))) - (when (equal command "PRIVMSG") - (when (>= (cl-incf erc-lurker-cleanup-count) - erc-lurker-cleanup-interval) - (setq erc-lurker-cleanup-count 0) - (erc-lurker-cleanup)) - (unless (gethash server erc-lurker-state) - (puthash server (make-hash-table :test 'equal) erc-lurker-state)) - (puthash sender (current-time) - (gethash server erc-lurker-state)))))))) + (erc-update-modules)) (use-feature erc-fill :after erc @@ -2569,6 +2535,7 @@ updates of `erc-lurker-state'." (erc-track-enable-keybindings nil) (erc-track-exclude-types '("JOIN" "MODE" "NICK" "PART" "QUIT" "324" "329" "332" "333" "353" "477")) + (erc-track-position-in-mode-line t) (erc-track-priority-faces-only 'all) (erc-track-shorten-function nil))