(gnus-registry-mark-article)
authorTeodor Zlatanov <tzz@lifelogs.com>
Wed, 19 Dec 2007 01:13:30 +0000 (01:13 +0000)
committerTeodor Zlatanov <tzz@lifelogs.com>
Wed, 19 Dec 2007 01:13:30 +0000 (01:13 +0000)
(gnus-registry-article-marks): Add functionality to mark articles
through the Gnus registry.

lisp/ChangeLog
lisp/gnus-registry.el

index caa7485..feaeece 100644 (file)
@@ -1,5 +1,9 @@
 2007-12-19  Teodor Zlatanov  <tzz@lifelogs.com>
 
+       * gnus-registry.el (gnus-registry-mark-article)
+       (gnus-registry-article-marks): Add functionality to mark articles
+       through the Gnus registry.
+
        * encrypt.el: Clarify documentation for the new pgg method.
        (encrypt-file-alist): Add PGG option.
        (encrypt-insert-file-contents, encrypt-write-file-contents): Use PGG
@@ -9,8 +13,6 @@
        (encrypt-pgg-encode-buffer, encrypt-pgg-decode-buffer)
        (encrypt-pgg-process-buffer): Add PGG functionality glue.
 
-2007-12-19  Teodor Zlatanov  <tzz@lifelogs.com>
-
        * netrc.el: Autoload encrypt when encrypt-file-alist is set.
        (netrc-parse): Use encrypt-file-alist to determine if
        encrypt-find-model or encrypt-insert-file-contents should be used.
index d45cc6c..bbc69ea 100644 (file)
@@ -586,6 +586,54 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
                     (string-match word x))
                   list)))))
 
+(defun gnus-registry-mark-article (article &optional mark remove)
+  "Mark ARTICLE with MARK in the Gnus registry or remove MARK.
+MARK can be any symbol.  If ARTICLE is nil, then the
+`gnus-current-article' will be marked.  If MARK is nil,
+`gnus-registry-flag-default' will be used."
+  (interactive "nArticle number: ")
+  (let ((article (or article gnus-current-article))
+       (mark (or mark 'gnus-registry-flag-default))
+       article-id)
+    (unless article
+      (error "No article on current line"))
+    (setq article-id 
+         (gnus-registry-fetch-message-id-fast gnus-current-article))
+    (unless article-id
+      (error "No article ID could be retrieved"))
+    (let* (
+          ;; all the marks for this article
+          (marks (gnus-registry-fetch-extra-flags article-id))
+          ;; the marks without the mark of interest
+          (cleaned-marks (delq mark marks))
+          ;; the new marks we want to use
+          (new-marks (if remove
+                         cleaned-marks
+                       (cons mark cleaned-marks))))
+    (apply 'gnus-registry-store-extra-flags ; set the extra flags
+     article-id                                    ; for the message ID
+     new-marks)
+    (gnus-registry-fetch-extra-flags article-id))))
+
+(defun gnus-registry-article-marks (article)
+  "Get the Gnus registry marks for ARTICLE.
+If ARTICLE is nil, then the `gnus-current-article' will be
+used."
+  (interactive "nArticle number: ")
+  (let ((article (or article gnus-current-article))
+       article-id)
+    (unless article
+      (error "No article on current line"))
+    (setq article-id 
+         (gnus-registry-fetch-message-id-fast gnus-current-article))
+    (unless article-id
+      (error "No article ID could be retrieved"))
+    (gnus-message 1 
+                 "Message ID %s, Registry flags: %s" 
+                 article-id 
+                 (concat (gnus-registry-fetch-extra-flags article-id)))))
+    
+
 ;;; if this extends to more than 'flags, it should be improved to be more generic.
 (defun gnus-registry-fetch-extra-flags (id)
   "Get the flags of a message, based on the message ID.