;;; +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