Function: gnus-kill

gnus-kill is an autoloaded and byte-compiled function defined in gnus-kill.el.gz.

Signature

(gnus-kill FIELD REGEXP &optional EXE-COMMAND ALL SILENT)

Documentation

If FIELD of an article matches REGEXP, execute COMMAND.

Optional 1st argument COMMAND is default to
(gnus-summary-mark-as-read nil "X").
If optional 2nd argument ALL is non-nil, articles marked are also applied to. If FIELD is an empty string (or nil), entire article body is searched for. COMMAND must be a Lisp expression or a string representing a key sequence.

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/gnus-kill.el.gz
;; Kill changes and new format by suggested by JWZ and Sudish Joseph
;; <joseph@cis.ohio-state.edu>.
(defun gnus-kill (field regexp &optional exe-command all silent)
  "If FIELD of an article matches REGEXP, execute COMMAND.
Optional 1st argument COMMAND is default to
	(gnus-summary-mark-as-read nil \"X\").
If optional 2nd argument ALL is non-nil, articles marked are also applied to.
If FIELD is an empty string (or nil), entire article body is searched for.
COMMAND must be a Lisp expression or a string representing a key sequence."
  ;; We don't want to change current point nor window configuration.
  (let ((old-buffer (current-buffer)))
    (save-excursion
      (save-window-excursion
	;; Selected window must be summary buffer to execute keyboard
	;; macros correctly.  See command_loop_1.
	(switch-to-buffer gnus-summary-buffer 'norecord)
	(goto-char (point-min))		;From the beginning.
	(let ((kill-list regexp)
	      (date (current-time-string))
	      (command (or exe-command '(gnus-summary-mark-as-read
					 nil gnus-kill-file-mark)))
	      kill kdate prev)
	  (if (listp kill-list)
	      ;; It is a list.
	      (if (not (consp (cdr kill-list)))
		  ;; It's of the form (regexp . date).
		  (if (zerop (gnus-execute field (car kill-list)
					   command nil (not all)))
		      (when (> (days-between date (cdr kill-list))
			       gnus-kill-expiry-days)
			(setq regexp nil))
		    (setcdr kill-list date))
		(while (setq kill (car kill-list))
		  (if (consp kill)
		      ;; It's a temporary kill.
		      (progn
			(setq kdate (cdr kill))
			(if (zerop (gnus-execute
				    field (car kill) command nil (not all)))
			    (when (> (days-between date kdate)
				     gnus-kill-expiry-days)
			      ;; Time limit has been exceeded, so we
			      ;; remove the match.
			      (if prev
				  (setcdr prev (cdr kill-list))
				(setq regexp (cdr regexp))))
			  ;; Successful kill.  Set the date to today.
			  (setcdr kill date)))
		    ;; It's a permanent kill.
		    (gnus-execute field kill command nil (not all)))
		  (setq prev kill-list)
		  (setq kill-list (cdr kill-list))))
	    (gnus-execute field kill-list command nil (not all))))))
    (switch-to-buffer old-buffer)
    (when (and (derived-mode-p 'gnus-kill-file-mode) regexp (not silent))
      (gnus-pp-gnus-kill
       (nconc (list 'gnus-kill field
		    (if (consp regexp) (list 'quote regexp) regexp))
	      (when (or exe-command all)
		(list (list 'quote exe-command)))
	      (if all (list t) nil))))))