(defface debbugs-done '((t (:foreground "DarkGrey")))
"Face for closed bug reports.")
+(defvar debbugs-widget-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map "\r" 'widget-button-press)
+ map))
+
(defun debbugs-emacs (severities &optional package suppress-done archivedp)
"List all outstanding Emacs bugs."
(interactive
(number-to-string default))))))
(if (> (length ids) default)
- (let ((i 0))
+ (let ((i 0)
+ curr-ids)
(while ids
(setq i (1+ i)
+ curr-ids (butlast ids (- (length ids) default))
widgets (append
widgets
(list
(widget-get widget :suppress-done)
widget
(widget-get widget :widgets)))
+ :keymap debbugs-widget-map
:suppress-done suppress-done
:buffer-name (format "*Emacs Bugs*<%d>" i)
:bug-ids (butlast ids (- (length ids) default))
address)
(propertize subject 'help-echo subject)))
(forward-line -1)
+ (put-text-property (point) (1+ (point))
+ 'debbugs-status status)
(put-text-property
(+ (point) 5) (+ (point) 26)
'face
(define-key map "\r" 'debbugs-select-report)
(define-key map "q" 'kill-buffer)
(define-key map "s" 'debbugs-toggle-sort)
+ (define-key map "d" 'debbugs-display-status)
map))
(defvar debbugs-sort-state 'number)
(interactive)
(beginning-of-line)
(let ((buffer-read-only nil)
- (current-bug (and (not (eobp))
- (buffer-substring (point) (+ (point) 5)))))
- (goto-char (point-min))
+ (before-change-functions nil)
+ (current-bug (debbugs-current-id t)))
(setq debbugs-sort-state
(if (eq debbugs-sort-state 'number)
'state
'number))
- (sort-subr
- nil (lambda () (forward-line 1)) 'end-of-line
- (lambda ()
- (if (eq debbugs-sort-state 'number)
- (string-to-number (buffer-substring (point) (+ (point) 5)))
- (or (cdr (assq (get-text-property (+ (point) 7) 'face)
- debbugs-state-preference))
- 10))))
+ (goto-char (point-min))
+ (while (and (not (eobp))
+ (not (get-text-property (point) 'debbugs-status)))
+ (forward-line 1))
+ (save-restriction
+ (narrow-to-region
+ (point)
+ (progn
+ (goto-char (point-max))
+ (beginning-of-line)
+ (while (and (not (bobp))
+ (not (get-text-property (point) 'debbugs-status)))
+ (forward-line -1))
+ (forward-line 1)
+ (point)))
+ (goto-char (point-min))
+ (sort-subr
+ nil (lambda () (forward-line 1)) 'end-of-line
+ (lambda ()
+ (if (eq debbugs-sort-state 'number)
+ (debbugs-current-id)
+ (or (cdr (assq (get-text-property (+ (point) 7) 'face)
+ debbugs-state-preference))
+ 10)))))
(if (not current-bug)
(goto-char (point-max))
(goto-char (point-min))
- (re-search-forward (concat "^" current-bug) nil t))))
+ (re-search-forward (format "^%d" current-bug) nil t))))
(defvar debbugs-bug-number nil)
-(defun debbugs-select-report ()
+(defun debbugs-current-id (&optional noerror)
+ (or (cdr (assq 'id (get-text-property (line-beginning-position)
+ 'debbugs-status)))
+ (and (not noerror)
+ (error "No bug on the current line"))))
+
+(defun debbugs-display-status (id)
+ "Display the status of the report on the current line."
+ (interactive (list (debbugs-current-id)))
+ (let ((status (get-text-property (line-beginning-position)
+ 'debbugs-status)))
+ (pop-to-buffer "*Bug Status*")
+ (erase-buffer)
+ (pp status (current-buffer))
+ (goto-char (point-min))))
+
+(defun debbugs-select-report (id)
"Select the report on the current line."
- (interactive)
- (let (id)
- (save-excursion
- (beginning-of-line)
- (cond
- ((looking-at " *\\([0-9]+\\)")
- (setq id (string-to-number (match-string 1))))
- ((looking-at "Page:") nil)
- (t (error "No bug report on the current line"))))
- (if (null id)
- ;; We go to another buffer.
- (widget-button-press (point))
- ;; We open the report messages.
- (gnus-read-ephemeral-emacs-bug-group
- id (cons (current-buffer)
- (current-window-configuration)))
- (with-current-buffer (window-buffer (selected-window))
- (debbugs-summary-mode 1)
- (set (make-local-variable 'debbugs-bug-number) id)))))
+ (interactive (list (debbugs-current-id)))
+ ;; We open the report messages.
+ (gnus-read-ephemeral-emacs-bug-group
+ id (cons (current-buffer)
+ (current-window-configuration)))
+ (with-current-buffer (window-buffer (selected-window))
+ (debbugs-summary-mode 1)
+ (set (make-local-variable 'debbugs-bug-number) id)))
(defvar debbugs-summary-mode-map
(let ((map (make-sparse-keymap)))