- (let ((gnus-newsgroup-headers
- (list (gnus-summary-article-header)))
- (gnus-newsgroup-scored nil)
- trace)
- (save-excursion
- (nnheader-set-temp-buffer "*Score Trace*"))
- (setq gnus-score-trace nil)
- (gnus-possibly-score-headers 'trace)
- (if (not (setq trace gnus-score-trace))
- (gnus-error 1 "No score rules apply to the current article.")
- (set-buffer "*Score Trace*")
- (gnus-add-current-to-buffer-list)
- (while trace
- (insert (format "%S -> %s\n" (cdar trace)
- (file-name-nondirectory (caar trace))))
- (setq trace (cdr trace)))
- (goto-char (point-min))
- (gnus-configure-windows 'score-trace))))
+ (let ((old-scored gnus-newsgroup-scored))
+ (let ((gnus-newsgroup-headers
+ (list (gnus-summary-article-header)))
+ (gnus-newsgroup-scored nil)
+ ;; Must be synced with `gnus-score-edit-file-at-point':
+ (frmt "%S [%s] -> %s\n")
+ trace
+ file)
+ (save-excursion
+ (nnheader-set-temp-buffer "*Score Trace*"))
+ (setq gnus-score-trace nil)
+ (gnus-possibly-score-headers 'trace)
+ (if (not (setq trace gnus-score-trace))
+ (gnus-error
+ 1 "No score rules apply to the current article (default score %d)."
+ gnus-summary-default-score)
+ (set-buffer "*Score Trace*")
+ ;; Use a keymap instead?
+ (local-set-key "q"
+ (lambda ()
+ (interactive)
+ (bury-buffer nil)
+ (gnus-summary-expand-window)))
+ (local-set-key "k"
+ (lambda ()
+ (interactive)
+ (kill-buffer (current-buffer))
+ (gnus-summary-expand-window)))
+ (local-set-key "e" (lambda ()
+ "Run `gnus-score-edit-file-at-point'."
+ (interactive)
+ (gnus-score-edit-file-at-point)))
+ (local-set-key "f" (lambda ()
+ "Run `gnus-score-edit-file-at-point'."
+ (interactive)
+ (gnus-score-edit-file-at-point 'format)))
+ (local-set-key "t" 'toggle-truncate-lines)
+ (setq truncate-lines t)
+ (dolist (entry trace)
+ (setq file (or (car entry)
+ ;; Must be synced with
+ ;; `gnus-score-edit-file-at-point':
+ "(non-file rule)"))
+ (insert
+ (format frmt
+ (cdr entry)
+ ;; Don't use `file-name-sans-extension' to see .SCORE and
+ ;; .ADAPT directly:
+ (file-name-nondirectory file)
+ (abbreviate-file-name file))))
+ (insert
+ (format "\nTotal score: %d"
+ (apply '+ (mapcar
+ (lambda (s)
+ (or (caddr s)
+ gnus-score-interactive-default-score))
+ trace))))
+ (insert
+ "\n\nQuick help:
+
+Type `e' to edit score file corresponding to the score rule on current line,
+`f' to format (pretty print) the score file and edit it,
+`t' toggle to truncate long lines in this buffer,
+`q' to quit, `k' to kill score trace buffer.
+
+The first sexp on each line is the score rule, followed by the file name of
+the score file and its full name, including the directory.")
+ (goto-char (point-min))
+ (gnus-configure-windows 'score-trace)))
+ (set-buffer gnus-summary-buffer)
+ (setq gnus-newsgroup-scored old-scored)))