- (defun sc-fill-if-different (&optional prefix)
- "Fill the region bounded by `sc-fill-begin' and point.
-Only fill if optional PREFIX is different than
-`sc-fill-line-prefix'. If `sc-auto-fill-region-p' is nil, do not
-fill region. If PREFIX is not supplied, initialize fill
-variables. This is useful for a regi `begin' frame-entry."
- (if (not prefix)
- (setq sc-fill-line-prefix ""
- sc-fill-begin (line-beginning-position))
- (if (and sc-auto-fill-region-p
- (not (string= prefix sc-fill-line-prefix)))
- (let ((fill-prefix sc-fill-line-prefix))
- (unless (or (string= fill-prefix "")
- (save-excursion
- (goto-char sc-fill-begin)
- (or (looking-at ">+ +")
- (< (length
- (buffer-substring (point)
- (line-end-position)))
- 65))))
- (fill-region sc-fill-begin (line-beginning-position)))
- (setq sc-fill-line-prefix prefix
- sc-fill-begin (line-beginning-position)))))
-nil))
-#+end_src
-
-** COMMENT [[https://notmuchmail.org][notmuch]] :ARCHIVE:
-
-See [[notmuch:id:87muuqsvci.fsf@fencepost.gnu.org][bug follow-up]].
-
-#+begin_src emacs-lisp
-(defun amin/notmuch ()
- "Delete other windows, then launch `notmuch'."
- (interactive
- (when (equal current-prefix-arg nil)
- (delete-other-windows)))
- (notmuch))
-
-(use-package notmuch
- :commands notmuch
- :bind ("C-c n" . amin/notmuch)
- :custom (notmuch-always-prompt-for-sender t)
- :config
- (setq notmuch-hello-sections
- '(notmuch-hello-insert-header
- notmuch-hello-insert-saved-searches
- ;; notmuch-hello-insert-search
- notmuch-hello-insert-alltags)
- notmuch-search-oldest-first nil
- notmuch-show-all-tags-list t
- notmuch-message-headers ; see bug follow-up above
- '("Subject" "To" "Cc" "Date" "List-Id" "X-RT-Originator")
- notmuch-hello-thousands-separator ","
- notmuch-fcc-dirs
- '(("amin@aminb.org" . "amin/Sent")
- ("bandali@gnu.org" . "gnu/Sent")
- ("abandali@uwaterloo.ca" . "\"uwaterloo/Sent Items\"")
- ("mab@gnu.org" . "gnu/Sent")
- ("amin@gnu.org" . "gnu/Sent")
- ("aminb@gnu.org" . "gnu/Sent")
- (".*" . "sent"))
- notmuch-search-result-format
- '(("date" . "%12s ")
- ("count" . "%-7s ")
- ("authors" . "%-40s ")
- ("subject" . "%s ")
- ("tags" . "(%s)"))
- notmuch-saved-searches
- '((:name "inbox" :query "tag:inbox" :key "i")
- (:name "unread" :query "tag:unread" :key "u")
- (:name "latest" :query "tag:latest" :key "l")
- (:name "encrypted" :query "tag:encrypted" :key "e")
- (:name "flagged" :query "tag:flagged" :key "f")
- (:name "sent" :query "tag:sent" :key "s")
- (:name "drafts" :query "tag:draft" :key "d")
- (:name "all mail" :query "*" :key "a")))
- ;; (add-hook 'visual-fill-column-mode-hook
- ;; (lambda ()
- ;; (when (string= major-mode 'notmuch-message-mode)
- ;; (setq visual-fill-column-width 70))))
- ;; (set! :evil-state 'notmuch-message-mode 'insert)
- ;; (advice-add #'notmuch-bury-or-kill-this-buffer
- ;; :override #'kill-this-buffer)
- :hook (notmuch-message-mode . doom-modeline-set-special-modeline)
- :bind
- (:map notmuch-hello-mode-map
- ("u" . (lambda ()
- "Search for `unread'-tagged messages"
- (interactive)
- (notmuch-hello-search "tag:unread")))
- ("i" . (lambda ()
- "Search for `inbox'-tagged messages"
- (interactive)
- (notmuch-hello-search "tag:inbox")))
- ("l" . (lambda ()
- "Search for `latest'-tagged messages"
- (interactive)
- (notmuch-hello-search "tag:latest")))
- ("e" . (lambda ()
- "Search for `encrypted'-tagged messages"
- (interactive)
- (notmuch-hello-search "tag:encrypted"))))
- (:map notmuch-search-mode-map
- ("k" . (lambda ()
- "Mark message read"
- (interactive)
- (notmuch-search-tag '("-unread"))
- ;; (notmuch-search-archive-thread)
- (notmuch-search-next-thread)))
- ("u" . (lambda ()
- "Mark message unread"
- (interactive)
- (notmuch-search-tag '("+unread"))
- (notmuch-search-next-thread)))
- ("K" . (lambda ()
- "Mark message deleted"
- (interactive)
- (notmuch-search-tag '("-unread" "-inbox" "+deleted"))
- (notmuch-search-next-thread)))
- ("S" . (lambda ()
- "Mark message as spam"
- (interactive)
- (notmuch-search-tag '("-unread" "-inbox" "-webmasters" "+spam"))
- (notmuch-search-next-thread))))
- (:map notmuch-tree-mode-map
- ("k" . (lambda ()
- "Mark message read"
- (interactive)
- (notmuch-tree-tag '("-unread"))
- ;; (notmuch-tree-archive-thread)
- (notmuch-tree-next-message)))
- ("u" . (lambda ()
- "Mark message unread"
- (interactive)
- (notmuch-tree-tag '("+unread"))
- (notmuch-tree-next-message)))
- ("K" . (lambda ()
- "Mark message deleted"
- (interactive)
- (notmuch-tree-tag '("-unread" "-inbox" "+deleted"))
- (notmuch-tree-next-message)))
- ("S" . (lambda ()
- "Mark message as spam"
- (interactive)
- (notmuch-tree-tag '("-unread" "-inbox" "-webmasters" "+spam"))
- (notmuch-tree-next-message))))
- :custom-face
- (notmuch-search-unread-face ((t (:weight semi-bold))))
- (notmuch-tag-face ((t (:foreground "navy blue" :weight semi-bold)))))
+ (defun company-ebdb--post-complete (_) nil)
+ :hook
+ (message-mode . (lambda ()
+ (add-to-list (make-local-variable 'company-backends)
+ 'company-ebdb))))
+
+(use-package ebdb-gnus
+ :after ebdb
+ :custom
+ (ebdb-gnus-window-configuration
+ '(article
+ (vertical 1.0
+ (summary 0.25 point)
+ (horizontal 1.0
+ (article 1.0)
+ (ebdb-gnus 0.3))))))
+
+(use-package ebdb-mua
+ :after ebdb
+ ;; :custom (ebdb-mua-pop-up nil)
+ )
+
+;; (use-package ebdb-message
+;; :after ebdb)
+
+
+;; (use-package ebdb-vcard
+;; :after ebdb)
+#+end_src
+
+** COMMENT bbdb
+
+Manually install bbdb (=lisp/bbdb= copied from an ELPA-based setup),
+because installing it from source on Emacs 27 using the following
+submodule configuration for some reason doesn’t work and results in
+very strange errors when using any of the functions.
+
+#+begin_src conf :tangle no
+[submodule "bbdb"]
+ path = lib/bbdb
+ url = https://git.savannah.nongnu.org/git/bbdb.git
+ load-path = lisp
+ info-path = doc
+ build-step = ./autogen.sh
+ build-step = ./configure
+ build-step = make
+ build-step = make install
+#+end_src
+
+I tried using =borg-elpa= instead of doing it like this, but it added
+2 seconds to my startup time, which is unacceptable to me.
+
+#+begin_src emacs-lisp
+(use-package bbdb
+ :load-path "lisp/bbdb"
+ :init
+ (load (expand-file-name "lisp/bbdb/bbdb-autoloads.el" user-emacs-directory))
+ ;; (bbdb-mua-auto-update-init 'message)
+ (setq bbdb-mua-auto-update-p 'query
+ bbdb-complete-mail nil)
+ (bbdb-initialize 'gnus 'message))
+#+end_src
+
+** COMMENT message-x