From: "Peter Münster" <pmlists@free.fr>
To: ding@gnus.org
Subject: Re: Maybe encrypt message ?
Date: Thu, 26 Nov 2015 11:11:01 +0100 [thread overview]
Message-ID: <874mg96pfu.fsf@roche-blanche.net> (raw)
In-Reply-To: <m0oaeh8ido.fsf@kcals.intra.maillard.im>
On Thu, Nov 26 2015, Xavier Maillard wrote:
> Thank you. Would you please share the logic of your "pm/role" ?
Here is the relevant code of my gnus.el:
--8<---------------cut here---------------start------------->8---
;;;;;;;;;;;;;;;;;; Variables ;;;;;;;;;;;;;;;;;;
(defvar pm/language "fr"
"Language of current buffer.")
(make-variable-buffer-local 'pm/language)
(defvar pm/role-history nil
"History list for roles.")
(defvar pm/role "private")
(make-variable-buffer-local 'pm/role)
(defvar pm/sig-level 0)
(make-variable-buffer-local 'pm/sig-level)
;;;;;;;;;;;;;;;;;; Functions ;;;;;;;;;;;;;;;;;;
(defun pm/alter-message-map ()
(local-set-key [f6] 'pm/cycle-sigs))
(defun pm/addr->role (address)
(cl-loop for item in pm/roles
when (string-equal (plist-get item :address) address)
return (plist-get item :id)))
(defun pm/role->addr (role)
(cl-loop for item in pm/roles
when (string-equal (plist-get item :id) role)
return (plist-get item :address)))
(defun pm/update-role ()
"Check current buffer and update pm/role accordingly."
(let* ((address (mail-strip-quoted-names
(message-fetch-field "From")))
(role (pm/addr->role address)))
(when role (setq pm/role role))))
(defun pm/phone ()
(cl-case (intern pm/language)
('fr "Tél.: 02 ...")
(t "Tel.: +33/0 2...")))
(defun pm/address (prefix)
(let ((address
(cl-case (intern pm/role)
('private '("street" "town"))
('a '("a" "street" "town"))
('b '("b" "street" "town"))
('c '("c" "street" "town")))))
(setq address (append address
(cl-case (intern pm/language)
('en '("France"))
('de '("Frankreich")))))
(cl-loop for l in address concat prefix concat l concat "\n")))
(defun pm/make-signature ()
"Check role, lang and level."
(cl-case pm/sig-level
(0 nil)
(1 " Peter")
(2 " Peter Münster")
(3 (concat " Peter Münster\n " (pm/phone)))
(4 (concat " Peter Münster\n"
(pm/address " ")
" " (pm/phone)))
(t
(setq pm/sig-level 0)
(pm/make-signature))))
(defun pm/cycle-sigs ()
(interactive)
(save-excursion
(when (message-goto-signature)
(forward-line -1)
(delete-region (1- (point)) (point-max)))
(incf pm/sig-level)
(message-insert-signature)))
(defun pm/ask-role ()
(let ((new-role
(completing-read
(format "Role [%s]: " pm/role)
(mapcar (lambda (x) (plist-get x :id)) pm/roles)
nil t nil 'pm/role-history pm/role)))
(when (not (string-equal pm/role new-role))
(setq pm/role new-role)
(message-replace-header
"From"
(message-make-from nil (pm/role->addr pm/role))))))
(defun pm/update-lang ()
"Check current buffer and update pm/language accordingly."
(require 'auto-dictionary)
(setq pm/language (adict--evaluate-buffer-find-lang nil)))
(defun pm/message-setup ()
(cond (gnus-article-reply
(pm/update-role)
(pm/update-lang)
(incf pm/sig-level)
(save-excursion
(message-insert-signature)))
((save-excursion (message-goto-signature))
(pm/update-role)
(pm/update-lang))
(t
(pm/ask-role)
(let ((message-signature-insert-empty-line t))
(incf pm/sig-level)
(save-excursion
(message-insert-signature))))))
;;;;;;;;;;;;;;;;;; Settings ;;;;;;;;;;;;;;;;;;
(setq
message-signature 'pm/make-signature
message-signature-insert-empty-line nil
message-subscribed-address-functions '(gnus-find-subscribed-addresses)
pm/lists '((:name "context.list"
:list-identifier "\\[NTG-context\\]"
:address "ntg-context@ntg.nl")
(:name "..."
:list-identifier "..."
:address "...") ... )
pm/roles '((:id "private" :address "private-address")
(:id "list" :address "pmlists@free.fr")
(:id "a" :address "a")
(:id "b" :address "b")
(:id "c" :address "c"))
pm/other-addresses '("x" "y" "z")
pm/list-address (pm/role->addr "list")
user-mail-address (plist-get (car pm/roles) :address)
gnus-parameters
`(("^[^.]*$" (gcc-self . t) (display . [not expire]))
,@(cl-loop for item in pm/lists collect
`(,(pm/str->regexp (plist-get item :name))
(subscribed . t) (gcc-self . none) (display . default)
(to-list . ,(plist-get item :address))
(pm/role "list") (pm/language "en")
(posting-style (address ,pm/list-address)
(eval (setq pm/role "list"
pm/language "en"))
(To ,(plist-get item :address)))
(gnus-list-identifiers ,(plist-get item :list-identifier))))
("nntp+.*" (pm/role "list") (pm/language "en")
(posting-style (address ,pm/list-address)
(eval (setq pm/role "list" pm/language "en")))))
pm/addresses (append (list user-mail-address pm/list-address)
(cdr (cl-loop for i in pm/roles collect
(plist-get i :address)))
pm/other-addresses)
message-alternative-emails (regexp-opt (cdr pm/addresses))
message-dont-reply-to-names (regexp-opt pm/addresses))
(add-hook 'gnus-article-mode-hook 'pm/alter-article-map)
(add-hook 'gnus-group-mode-hook 'pm/alter-group-map)
(add-hook 'gnus-message-setup-hook 'pm/message-setup)
(add-hook 'gnus-startup-hook 'pm/startup-addons)
(add-hook 'gnus-summary-mode-hook 'pm/alter-summary-map)
(add-hook 'message-mode-hook 'pm/alter-message-map)
(add-hook 'message-send-hook 'pm/message-send)
--8<---------------cut here---------------end--------------->8---
--
Peter
next prev parent reply other threads:[~2015-11-26 10:11 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-24 6:10 Xavier Maillard
2015-11-24 12:18 ` Uwe Brauer
2015-11-24 20:53 ` Xavier Maillard
2015-11-25 11:03 ` Uwe Brauer
2015-11-24 16:22 ` Jens Lechtenboerger
2015-11-24 20:48 ` Xavier Maillard
2015-11-24 21:17 ` Peter Münster
2015-11-25 11:04 ` Uwe Brauer
2015-11-26 5:00 ` Xavier Maillard
2015-11-26 10:11 ` Peter Münster [this message]
2015-11-26 14:44 ` Xavier Maillard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=874mg96pfu.fsf@roche-blanche.net \
--to=pmlists@free.fr \
--cc=ding@gnus.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).