;;; Commentary:
;; This package provides an interface to bug reports which are located
-;; on the GNU bug tracker debbugs.gnu.org. It's main purpose is to
+;; on the GNU bug tracker debbugs.gnu.org. Its main purpose is to
;; show and manipulate bug reports from Emacs, but it could be used
;; also for other GNU projects which use the same bug tracker.
:group 'debbugs
:version "24.1")
-(defcustom debbugs-gnu-default-severities '("normal")
+(defcustom debbugs-gnu-default-severities '("serious" "important" "normal")
"*The list severities bugs are searched for.
\"tagged\" is not a severity but marks locally tagged bugs."
:group 'debbugs-gnu
:group 'debbugs-gnu
:type '(set (const "automake")
(const "coreutils")
+ (const "debbugs.gnu.org")
(const "emacs")
+ (const "emacs-xwidgets")
(const "gnus")
- (const "libtool"))
+ (const "guile")
+ (const "libtool")
+ (const "woodchuck"))
:version "24.1")
(defcustom debbugs-gnu-default-hits-per-page 500
'debbugs-gnu-new)
((< (- (float-time)
(cdr (assq 'log_modified status)))
- (* 60 60 24 7))
+ (* 60 60 24 7 2))
'debbugs-gnu-handled)
(t
'debbugs-gnu-stale)))
(title (aref cols 3))
(title-length (nth 1 (aref tabulated-list-format 3))))
(when (and
+ ;; We may have a narrowing in effect.
+ (or (not debbugs-gnu-current-limit)
+ (memq (cdr (assq 'id list-id)) debbugs-gnu-current-limit))
;; Filter suppressed bugs.
(or (not (widget-get debbugs-gnu-current-widget :suppress))
(not (catch :suppress
(define-key map "d" 'debbugs-gnu-display-status)
(define-key map "g" 'debbugs-gnu-rescan)
(define-key map "x" 'debbugs-gnu-toggle-suppress)
+ (define-key map "/" 'debbugs-gnu-narrow-to-status)
+ (define-key map "w" 'debbugs-gnu-widen)
(define-key map "C" 'debbugs-gnu-send-control-message)
map))
(goto-char pos)))
(defvar debbugs-gnu-sort-state 'number)
+(defvar debbugs-gnu-current-limit nil)
(define-derived-mode debbugs-gnu-mode tabulated-list-mode "Debbugs"
"Major mode for listing bug reports.
The following commands are available:
\\{debbugs-gnu-mode-map}"
- (set (make-local-variable 'debbugs-gnu-sort-state)
- 'number)
+ (set (make-local-variable 'debbugs-gnu-sort-state) 'number)
+ (set (make-local-variable 'debbugs-gnu-current-limit) nil)
(setq tabulated-list-format [("Id" 5 debbugs-gnu-sort-id)
("State" 20 debbugs-gnu-sort-state)
("Submitter" 25 t)
(tabulated-list-init-header)
(tabulated-list-print))
+(defun debbugs-gnu-widen ()
+ "Display all the currently selected bug reports."
+ (interactive)
+ (let ((id (debbugs-gnu-current-id t))
+ (buffer-read-only nil))
+ (tabulated-list-init-header)
+ (tabulated-list-print)
+ (setq debbugs-gnu-current-limit nil)
+ (when id
+ (debbugs-gnu-goto id))))
+
+(defun debbugs-gnu-narrow-to-status (string)
+ "Only display the bugs matching STRING."
+ (interactive "sNarrow to: ")
+ (let ((id (debbugs-gnu-current-id t))
+ (buffer-read-only nil)
+ status)
+ (debbugs-gnu-widen)
+ (goto-char (point-min))
+ (while (not (eobp))
+ (setq status (debbugs-gnu-current-status))
+ (if (and (not (member string (assq 'keywords status)))
+ (not (member string (assq 'severity status)))
+ (not (string-match string (cdr (assq 'originator status))))
+ (not (string-match string (cdr (assq 'subject status)))))
+ (delete-region (point) (progn (forward-line 1) (point)))
+ (push (cdr (assq 'id status)) debbugs-gnu-current-limit)
+ (forward-line 1)))
+ (when id
+ (debbugs-gnu-goto id))))
+
+(defun debbugs-gnu-goto (id)
+ "Go to the line displaying bug ID."
+ (goto-char (point-min))
+ (while (and (not (eobp))
+ (not (equal (debbugs-gnu-current-id t) id)))
+ (forward-line 1)))
+
(defun debbugs-gnu-toggle-tag ()
"Toggle tag of the report in the current line."
(interactive)