(previous-line)
(insert "\n\f\n;;; "))
+(defvar b/fill-column 47
+ "My custom `fill-column'.")
+
+(defconst b/asterism "* * *")
+
+(defun b/insert-asterism ()
+ "Insert a centred asterism."
+ (interactive)
+ (insert
+ (concat
+ "\n\n"
+ (make-string (floor (/ (- b/fill-column (length b/asterism)) 2))
+ ?\s)
+ b/asterism
+ "\n\n")))
+
(defun b/no-mouse-autoselect-window ()
"Conveniently disable `focus-follows-mouse'.
For disabling the behaviour for certain buffers and/or modes."
scroll-conservatively 10
scroll-preserve-screen-position 1
;; focus follows mouse
- mouse-autoselect-window t)
+ mouse-autoselect-window t
+ ;; custom fill-column
+ fill-column b/fill-column)
(setq-default
;; always use space for indentation
(use-feature vc
:bind ("C-x v C-=" . vc-ediff))
+(use-feature vc-git
+ :after vc
+ :custom
+ (vc-git-print-log-follow t))
+
(use-feature ediff
:config (add-hook 'ediff-after-quit-hook-internal 'winner-undo)
:custom ((ediff-window-setup-function 'ediff-setup-windows-plain)
;; for back and forward mouse keys
("<XF86Back>" . previous-buffer)
("<mouse-8>" . previous-buffer)
- ("<drag-mouse-8>" . previous-buffer)
+ ;; ("<drag-mouse-8>" . previous-buffer)
("<XF86Forward>" . next-buffer)
("<mouse-9>" . next-buffer)
- ("<drag-mouse-9>" . next-buffer)
- ("<drag-mouse-2>" . kill-this-buffer)
- ("<drag-mouse-3>" . ivy-switch-buffer))
+ ;; ("<drag-mouse-9>" . next-buffer)
+ ;; ("<drag-mouse-2>" . kill-this-buffer)
+ ;; ("<drag-mouse-3>" . switch-to-buffer)
+ )
(bind-keys
:prefix-map b/straight-prefix-map
:custom
(magit-diff-refine-hunk t)
(magit-display-buffer-function #'magit-display-buffer-fullframe-status-v1)
+ ;; (magit-completing-read-function 'magit-ido-completing-read)
:custom-face (magit-diff-file-heading ((t (:weight normal)))))
;; recently opened files
:defer 0.2
;; :config
;; (add-to-list 'recentf-exclude "^/\\(?:ssh\\|su\\|sudo\\)?:")
+ :config
+ (recentf-mode)
:custom
(recentf-max-saved-items 2000))
;; smart M-x enhancement (needed by counsel for history)
-(use-package smex)
+;; (use-package smex)
+
+(bind-keys
+ ("C-c f ." . find-file)
+ ("C-c f l" . find-library)
+ ("C-c f r" . recentf-open-files)
+ ("C-c x" . execute-extended-command))
+
+(comment
+ (use-feature ido
+ :demand
+ :bind
+ (:map ido-common-completion-map
+ ([escape] . minibuffer-keyboard-quit)
+ ("DEL" . b/ido-backspace))
+ :config
+ (require 'delsel)
+ (defun b/ido-backspace ()
+ "Forward to `backward-delete-char'. On error (read-only), quit."
+ (interactive)
+ (condition-case nil
+ (backward-delete-char 1)
+ (error
+ (minibuffer-keyboard-quit))))
+ (ido-mode 1)
+ (ido-everywhere 1)
+ :custom
+ (ido-enable-flex-matching t)
+ ;; (ido-enable-regexp t)
+ ;; (ido-enable-prefix t)
+ (ido-max-window-height 10)
+ (ido-use-virtual-buffers t))
+
+ (use-package ido-vertical-mode
+ :defer 0.3
+ :config
+ (ido-vertical-mode 1)
+ :custom
+ (ido-vertical-define-keys 'C-n-C-p-up-and-down)
+ (ido-vertical-show-count t))
+
+ (use-package ido-completing-read+
+ :defer 0.3
+ :after ido
+ :config
+ (ido-ubiquitous-mode 1))
+
+ (use-package crm-custom
+ :defer 0.3
+ :config
+ (crm-custom-mode 1))
+
+ (use-feature icomplete
+ :defer 0.3
+ :config
+ (icomplete-mode 1)))
+
+(use-package amx
+ :defer 0.3
+ :config
+ (amx-mode))
(use-package ivy
:defer 0.3
("DEL" . ivy-backward-delete-char))
:config
(setq ivy-wrap t
- ivy-height 14
+ ;; ivy-height 14
ivy-use-virtual-buffers t
ivy-virtual-abbreviate 'abbreviate
ivy-count-format "%d/%d ")
(add-to-list 'ivy-ignore-buffers 'b/ivy-ignore-buffer-p)
(ivy-mode 1)
- ;; :custom-face
- ;; (ivy-minibuffer-match-face-2 ((t (:background "#e99ce8" :weight semi-bold))))
- ;; (ivy-minibuffer-match-face-3 ((t (:background "#bbbbff" :weight semi-bold))))
- ;; (ivy-minibuffer-match-face-4 ((t (:background "#ffbbff" :weight semi-bold))))
-)
+ :custom-face
+ (ivy-minibuffer-match-face-1 ((t (:background "#eeeeee"))))
+ (ivy-minibuffer-match-face-2 ((t (:background "#e7e7e7" :weight bold))))
+ (ivy-minibuffer-match-face-3 ((t (:background "light goldenrod" :weight semi-bold))))
+ (ivy-minibuffer-match-face-4 ((t (:background "misty rose" :weight semi-bold))))
+ (ivy-current-match ((((class color) (background light))
+ :background "#d7d7d7" :foreground "black")
+ (((class color) (background dark))
+ :background "#65a7e2" :foreground "black"))))
(use-package swiper
+ :demand
:after ivy
- :bind (("C-s" . swiper-isearch)
- ("C-r" . swiper)
- ("C-S-s" . isearch-forward)))
+ :bind (("C-S-s" . swiper-isearch)))
(use-package counsel
+ :demand
:after ivy
- :bind (([remap execute-extended-command] . counsel-M-x)
- ([remap find-file] . counsel-find-file)
- ("C-c b b" . ivy-switch-buffer)
- ("C-c f ." . counsel-find-file)
- ("C-c f l" . counsel-find-library)
- ("C-c f r" . counsel-recentf)
- ("C-c x" . counsel-M-x)
+ :bind (("C-c f r" . counsel-recentf)
:map minibuffer-local-map
("C-r" . counsel-minibuffer-history))
:config
("C-d" . b/eshell-quit-or-delete-char)
("C-S-l" . b/eshell-clear)
("M-r" . counsel-esh-history)
- ([tab] . company-complete)))
+ ;; ([tab] . company-complete)
+ :map eshell-hist-mode-map
+ ("M-r" . counsel-esh-history)))
:hook (eshell-mode . b/eshell-setup)
:custom
(add-hook 'prog-mode-hook #'indicate-buffer-boundaries-left))
(use-feature text-mode
+ :bind (:map text-mode-map ("C-*" . b/insert-asterism))
:hook (text-mode . indicate-buffer-boundaries-left))
(use-feature conf-mode
:bind
(:map company-active-map
([tab] . company-complete-common-or-cycle)
- ([escape] . company-abort))
+ ([escape] . company-abort)
+ ("C-p" . company-select-previous-or-abort)
+ ("C-n" . company-select-next-or-abort))
:custom
(company-minimum-prefix-length 1)
(company-selection-wrap-around t)
(company-dabbrev-char-regexp "\\sw\\|\\s_\\|[-_]")
(company-dabbrev-downcase nil)
(company-dabbrev-ignore-case nil)
- :config
- (global-company-mode t))
+ ;; :config
+ ;; (global-company-mode t)
+ )
(use-package flycheck
:defer 0.6
(sml/apply-theme 'tangomod)
(font-lock-remove-keywords
'org-mode b/org-mode-font-lock-keywords)
+ (when (featurep 'erc-hl-nicks)
+ (erc-hl-nicks-reset-face-table))
(when (featurep 'exwm-systemtray)
(exwm-systemtray--refresh)))
(sml/apply-theme 'automatic)
(font-lock-add-keywords
'org-mode b/org-mode-font-lock-keywords t)
+ (when (featurep 'erc-hl-nicks)
+ (erc-hl-nicks-reset-face-table))
(when (featurep 'exwm-systemtray)
(exwm-systemtray--refresh)))
;; prefixes for global prefixes and minor modes
"C-c @" "outline"
"C-c !" "flycheck"
- "C-c 8" "typo"
- "C-c 8 -" "typo/dashes"
- "C-c 8 <" "typo/left-brackets"
- "C-c 8 >" "typo/right-brackets"
+ ;; "C-c 8" "typo"
+ ;; "C-c 8 -" "typo/dashes"
+ ;; "C-c 8 <" "typo/left-brackets"
+ ;; "C-c 8 >" "typo/right-brackets"
"C-x RET" "coding system"
"C-x 8" "unicode"
"C-x @" "event modifiers"
(use-package crux ; results in Waiting for git... [2 times]
:defer 0.4
:bind (("C-c d" . crux-duplicate-current-line-or-region)
- ("C-c D" . crux-duplicate-and-comment-current-line-or-region)
+ ("C-c M-d" . crux-duplicate-and-comment-current-line-or-region)
("C-c f C" . crux-copy-file-preserve-attributes)
("C-c f D" . crux-delete-file-and-buffer)
("C-c f R" . crux-rename-file-and-buffer)
;; easily type pretty quotes & other typography, like ‘’“”-–—«»‹›
(use-package typo
+ :disabled
:defer 0.5
:config
(typo-global-mode 1)
:hook (((text-mode erc-mode web-mode) . typo-mode)
(tex-mode . (lambda ()(typo-mode -1)))))
+(use-feature electric
+ :disabled
+ :demand
+ :config
+ (electric-quote-mode))
+
;; highlight TODOs in buffers
(use-package hl-todo
:defer 0.5
:straight (debbugs
:host github
:repo "emacs-straight/debbugs"
- :files (:defaults "Debbugs.wsdl")))
+ :files (:defaults "Debbugs.wsdl"))
+ :bind
+ (("C-c D d" . debbugs-gnu)
+ ("C-c D e" .
+ (lambda ()
+ (interactive)
+ (setq debbugs-gnu-current-suppress t)
+ (debbugs-gnu debbugs-gnu-default-severities '("emacs"))))
+ ("C-c D g" .
+ (lambda ()
+ (interactive)
+ (setq debbugs-gnu-current-suppress t)
+ (debbugs-gnu debbugs-gnu-default-severities '("gnuzilla"))))))
(use-package org-ref
:init
(use-feature window
:bind
- (("C-c w s l" . b/split-window-right)
- ("C-c w s j" . b/split-window-below)
+ (("C-c w e" . (lambda ()
+ (interactive)
+ (split-window-right)
+ (other-window 1)
+ (erc-switch-to-buffer)))
+ ("C-c w s l" . (lambda ()
+ (interactive)
+ (split-window-right)
+ (other-window 1)))
+ ("C-c w s j" . (lambda ()
+ (interactive)
+ (split-window-below)
+ (other-window 1)))
("C-c w q" . quit-window))
- :init
- (defun b/split-window-right ()
- (interactive)
- (split-window-right)
- (other-window 1))
- (defun b/split-window-below ()
- (interactive)
- (split-window-below)
- (other-window 1))
:custom
(split-width-threshold 150))
;; (: gnus-group-split-fancy "INBOX" t "INBOX")
;; gnu
(list ".*<\\(.*\\)\\.\\(non\\)?gnu\\.org>.*" "l.\\1")
+ ;; gnus
+ (list ".*<\\(.*\\)\\.gnus\\.org>.*" "l.\\1")
;; *.lists.sr.ht, omitting one dot if present
;; add more \\.?\\([^.]*\\) if needed
(list ".*<~\\(.*\\)/\\([^.]*\\)\\.?\\([^.]*\\)\\.lists.sr.ht>.*" "l.~\\1.\\2\\3")
:config
(setq
gnus-buttonized-mime-types '("multipart/\\(signed\\|encrypted\\)")
- gnus-visible-headers
- (concat gnus-visible-headers "\\|^List-Id:\\|^X-RT-Originator:\\|^User-Agent:")
- gnus-sorted-header-list
- '("^From:" "^Subject:" "^Summary:" "^Keywords:"
- "^Followup-To:" "^To:" "^Cc:" "X-RT-Originator"
- "^Newsgroups:" "List-Id:" "^Organization:"
- "^User-Agent:" "^Date:")
+ gnus-sorted-header-list '("^From:"
+ "^X-RT-Originator"
+ "^Newsgroups:"
+ "^Subject:"
+ "^Date:"
+ "^Envelope-To:"
+ "^Followup-To:"
+ "^Reply-To:"
+ "^Organization:"
+ "^Summary:"
+ "^Abstract:"
+ "^Keywords:"
+ "^To:"
+ "^[BGF]?Cc:"
+ "^Posted-To:"
+ "^Mail-Copies-To:"
+ "^Mail-Followup-To:"
+ "^Apparently-To:"
+ "^Resent-From:"
+ "^User-Agent:"
+ "^X-detected-operating-system:"
+ "^Message-ID:"
+ ;; "^References:"
+ "^List-Id:"
+ "^Gnus-Warning:")
+ gnus-visible-headers (mapconcat 'identity
+ gnus-sorted-header-list
+ "\\|")
;; local-lapsed article dates
;; from https://www.emacswiki.org/emacs/GnusFormatting#toc11
gnus-article-date-headers '(user-defined)
gnus-posting-styles
'((".*"
(address "bandali@gnu.org")
- (signature b/gnu-signature)
- (eval (set (make-local-variable 'message-user-fqdn) "fencepost.gnu.org")))
+ (signature b/gnu-signature))
("nnimap\\+gnu:l\\..*"
(signature nil))
((header "subject" "ThankCRM")
:init
(add-hook 'dired-mode-hook 'gnus-dired-mode))
+(comment
+ (use-feature gnus-utils
+ :custom
+ (gnus-completing-read-function 'gnus-ido-completing-read)))
+
(use-feature mm-decode
:config
(setq mm-discouraged-alternatives '("text/html" "text/richtext")
mail-envelope-from 'header))
(use-feature message
+ :bind (:map message-mode-map ("<C-return>" . b/insert-asterism))
:config
;; redefine for a simplified In-Reply-To header
;; (see https://todo.sr.ht/~sircmpwn/lists.sr.ht/67)
'(gnus-find-subscribed-addresses)
message-dont-reply-to-names
"\\(\\(\\(amin\\|mab\\)@shemshak\\.org\\)\\|\\(.*@aminb\\.org\\)\\|\\(\\(bandali\\|mab\\|aminb?\\)@gnu\\.org\\)\\|\\(a?bandali@\\(csclub\\.\\)?uwaterloo\\.ca\\)\\)")
- (require 'company-ebdb)
+ ;; (require 'company-ebdb)
:hook (;; (message-setup . mml-secure-message-sign-pgpmime)
(message-mode . flyspell-mode)
(message-mode . (lambda ()
- ;; (setq fill-column 65
- ;; message-fill-column 65)
+ (setq-local fill-column b/fill-column
+ message-fill-column b/fill-column)
(make-local-variable 'company-idle-delay)
(setq company-idle-delay 0.2))))
;; :custom-face
("r" . footnote-renumber-footnotes)
("s" . footnote-set-style)))
-(use-package ebdb
+(use-package bbdb
:demand
:after gnus
- :bind (:map gnus-group-mode-map ("e" . ebdb))
+ :bind (:map gnus-group-mode-map ("e" . bbdb))
:config
- (setq ebdb-sources (b/var "ebdb"))
- (with-eval-after-load 'swiper
- (add-to-list 'swiper-font-lock-exclude 'ebdb-mode t)))
+ (bbdb-initialize 'gnus 'message)
+ :custom
+ (bbdb-complete-mail-allow-cycling t)
+ (bbdb-user-mail-address-re message-dont-reply-to-names))
-(use-feature ebdb-com
- :after ebdb)
+(comment
+ (use-package ebdb
+ :demand
+ :after gnus
+ :bind (:map gnus-group-mode-map ("e" . ebdb))
+ :config
+ (setq ebdb-sources (b/var "ebdb"))
+ (with-eval-after-load 'swiper
+ (add-to-list 'swiper-font-lock-exclude 'ebdb-mode t)))
-;; (use-package ebdb-complete
-;; :after ebdb
-;; :config
-;; (ebdb-complete-enable))
+ (use-feature ebdb-com
+ :after ebdb)
-(use-package company-ebdb
- :config
- (defun company-ebdb--post-complete (_) nil))
+ (use-feature ebdb-complete
+ :after ebdb
+ :config
+ ;; (setq ebdb-complete-mail 'capf)
+ (ebdb-complete-enable))
-(use-feature ebdb-gnus
- :after ebdb
- :custom
- (ebdb-gnus-window-size 0.3))
+ (use-feature ebdb-message
+ :demand
+ :after ebdb)
-(use-feature ebdb-mua
- :demand
- :after ebdb
- :custom (ebdb-mua-pop-up t))
+ ;; (use-package company-ebdb
+ ;; :config
+ ;; (defun company-ebdb--post-complete (_) nil))
+
+ (use-feature ebdb-gnus
+ :after ebdb
+ :custom
+ (ebdb-gnus-window-size 0.3))
+
+ (use-feature ebdb-mua
+ :demand
+ :after ebdb
+ :custom (ebdb-mua-pop-up t))
-;; (use-package ebdb-message
-;; :after ebdb)
+ ;; (use-package ebdb-message
+ ;; :after ebdb)
-;; (use-package ebdb-vcard
-;; :after ebdb)
+ ;; (use-package ebdb-vcard
+ ;; :after ebdb)
+ )
(use-package message-x)
;;; IRC (with ERC and ZNC)
(use-feature erc
- :bind (("C-c b e" . erc-switch-to-buffer)
+ :bind (("C-c b b" . erc-switch-to-buffer)
:map erc-mode-map
("M-a" . erc-track-switch-buffer))
:custom
(use-feature erc-pcomplete
:after erc
:custom
- (erc-pcomplete-nick-postfix ","))
+ (erc-pcomplete-nick-postfix ", "))
(use-feature erc-track
:after erc