summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJSDurand <mmemmew@gmail.com>2021-12-31 20:50:52 +0800
committerJSDurand <mmemmew@gmail.com>2021-12-31 20:50:52 +0800
commit8e52f0c296db9b70621d59ec1a5cb0a31c1af6a4 (patch)
treebc4802a907f464a4214bff930a7b6aa57ef32811
parentf42ef8797db87a68aff253910361af88b718b7d0 (diff)
mail: extending `durand-quote-message'
-rw-r--r--mail.el88
1 files changed, 64 insertions, 24 deletions
diff --git a/mail.el b/mail.el
index c624cd6..11c8514 100644
--- a/mail.el
+++ b/mail.el
@@ -124,12 +124,26 @@
;;; Quote a message
-(defun durand-quote-message ()
+(defvar durand-quote-history nil
+ "The history of names whom I have quoted.")
+
+(autoload 'durand-take "common")
+
+(defun durand-quote-message (&optional arg)
"Quote the current message body, and add some meta-data.
Actually this only saves the quote text in the `kill-ring', and
-does not modify the buffer directly."
+does not modify the buffer directly.
+
+If region is activated, only quote the text in the region.
+
+If ARG is (list 4), query for the time and the name to quote.
+
+If ARG is non-nil, and not equal to (list 4), omit the line about
+the time and the one who says the quote; only query the author
+and produce the quoted message."
(interactive
- nil gnus-summary-mode gnus-article-mode message-mode)
+ (list current-prefix-arg)
+ gnus-summary-mode gnus-article-mode message-mode)
(cond
((apply #'provided-mode-derived-p
major-mode (command-modes #'durand-quote-message)))
@@ -144,20 +158,40 @@ does not modify the buffer directly."
((derived-mode-p 'gnus-summary-mode)
(set-buffer gnus-article-buffer)))
(let* ((date
- (save-match-data
- (save-restriction
- (mail-narrow-to-head)
- (mail-fetch-field "Date"))))
+ (cond
+ ((and (listp arg)
+ (null (cdr arg))
+ (eq (car arg) 4))
+ (read-string "Time of the quote: "))
+ (arg nil)
+ ((save-match-data
+ (save-restriction
+ (mail-narrow-to-head)
+ (mail-fetch-field "Date"))))))
(date
- (format-time-string
- "%a, %e %b %Y %H:%M:%S %z"
- (encode-time (parse-time-string date))
- (current-time-zone)))
+ (cond
+ (date
+ (format-time-string
+ "%a, %e %b %Y %H:%M:%S %z"
+ (let* ((time (parse-time-string date))
+ (first-six
+ (mapcar
+ (lambda (element) (or element 0))
+ (durand-take 6 time)))
+ (remain (nthcdr 6 time)))
+ (encode-time (append first-six remain)))
+ (current-time-zone)))))
(author
- (save-match-data
- (save-restriction
- (mail-narrow-to-head)
- (mail-fetch-field "From"))))
+ (cond
+ (arg
+ (read-string
+ "Author of the quote: "
+ nil 'durand-quote-history
+ durand-quote-history t))
+ ((save-match-data
+ (save-restriction
+ (mail-narrow-to-head)
+ (mail-fetch-field "From"))))))
(author-name
(save-match-data
(cond
@@ -175,16 +209,22 @@ does not modify the buffer directly."
(match-string 1 author))
(author))))
(body
- (save-match-data
- (save-restriction
- (widen)
- (article-goto-body)
- (buffer-substring-no-properties
- (point) (point-max))))))
+ (cond
+ ((use-region-p)
+ (buffer-substring-no-properties
+ (region-beginning) (region-end)))
+ ((save-match-data
+ (save-restriction
+ (widen)
+ (article-goto-body)
+ (buffer-substring-no-properties
+ (point) (point-max))))))))
(kill-new
- (format
- ">>>>> Le %s, %s a dit:\n\n%s"
- date author
+ (concat
+ (cond
+ (date
+ (format
+ ">>>>> Le %s, %s a dit:\n\n" date author)))
(mapconcat
(lambda (line)
(cond