Add ecomplete

This commit is contained in:
Case Duckworth 2022-02-16 23:12:43 -06:00
parent 017f1c065c
commit 82869c1f4f
2 changed files with 58 additions and 0 deletions

13
init.el
View File

@ -93,6 +93,19 @@
(:with-mode Custom-mode
(:local-set imenu-generic-expression +cus-edit-imenu-generic-expression)))
(setup (:require ecomplete)
(:also-load +ecomplete)
(:option message-mail-alias-type 'ecomplete
message-self-insert-commands nil
message-expand-name-standard-ui t)
(with-eval-after-load 'ecomplete
(:option completion-category-defaults nil)
(with-eval-after-load 'embark
(:bind-into embark-email-map
"+" #'+ecomplete-add-email
"\\" #'+ecomplete-remove-email)))
(add-hook 'message-sent-hook #'message-put-addresses-in-ecomplete))
(setup (:require goto-addr)
(if (fboundp #'global-goto-address-mode)
(global-goto-address-mode)

45
lisp/+ecomplete.el Normal file
View File

@ -0,0 +1,45 @@
;;; +ecomplete.el --- ecomplete extras -*- lexical-binding: t; -*-
;;; Commentary:
;; see [[https://github.com/oantolin/emacs-config/blob/master/my-lisp/ecomplete-extras.el][oantolin's config]]
;;; Code:
(require 'ecomplete)
(defun +ecomplete--name+address (email)
"Return a pair of the name and address for an EMAIL."
(let (name)
(when (string-match "^\\(?:\\(.*\\) \\)?<\\(.*\\)>$" email)
(setq name (match-string 1 email)
email (match-string 2 email)))
(cons name email)))
(defun +ecomplete-add-email (email)
"Add email address to ecomplete's database."
(interactive "sEmail address: ")
(pcase-let ((`(,name . ,email) (+ecomplete--name+address email)))
(unless name (setq name (read-string "Name: ")))
(ecomplete-add-item
'mail email
(format (cond ((equal name "") "%s%s")
((string-match-p "^\\(?:[A-Za-z0-9 ]*\\|\".*\"\\)$" name)
"%s <%s>")
(t "\"%s\" <%s>"))
name email))
(ecomplete-save)))
(defun +ecomplete-remove-email (email)
"Remove email address from ecomplete's database."
(interactive
(list (completing-read "Email address: "
(ecomplete-completion-table 'mail))))
(when-let ((email (cdr (+ecomplete--name+address email)))
(entry (ecomplete-get-item 'mail email)))
(setf (cdr (assq 'mail ecomplete-database))
(remove entry (cdr (assq 'mail ecomplete-database))))
(ecomplete-save)))
(provide '+ecomplete)
;;; +ecomplete.el ends here