emacs/lisp/+ecomplete.el

46 lines
1.5 KiB
EmacsLisp

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