emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/debbugs e303918 015/311: (debbugs-toggle-sort): New com


From: Stefan Monnier
Subject: [elpa] externals/debbugs e303918 015/311: (debbugs-toggle-sort): New command and keystroke.
Date: Sun, 29 Nov 2020 18:41:31 -0500 (EST)

branch: externals/debbugs
commit e3039188838d015b78aa6554b1e1a4dbb3a0de67
Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
Commit: Lars Magne Ingebrigtsen <larsi@gnus.org>

    (debbugs-toggle-sort): New command and keystroke.
---
 ChangeLog      |  1 +
 debbugs-gnu.el | 43 ++++++++++++++++++++++++++++++++++++++-----
 2 files changed, 39 insertions(+), 5 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index ae76a3c..4666551 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,7 @@
        * debbugs-gnu.el (debbugs-summary-mode): Make sure we don't Cc
        both bug-gnu-emacs (etc) and debbugs.
        (debbugs-emacs): Default to list the done bugs.
+       (debbugs-toggle-sort): New command and keystroke.
 
 2011-07-02  Michael Albinus  <michael.albinus@gmx.de>
 
diff --git a/debbugs-gnu.el b/debbugs-gnu.el
index 287041c..980e3a6 100644
--- a/debbugs-gnu.el
+++ b/debbugs-gnu.el
@@ -134,11 +134,14 @@
          (forward-line 1)))))
   (goto-char (point-min)))
 
-(defvar debbugs-mode-map nil)
-(unless debbugs-mode-map
-  (setq debbugs-mode-map (make-sparse-keymap))
-  (define-key debbugs-mode-map "\r" 'debbugs-select-report)
-  (define-key debbugs-mode-map "q"  'kill-buffer))
+(defvar debbugs-mode-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map "\r" 'debbugs-select-report)
+    (define-key map "q" 'kill-buffer)
+    (define-key map "s" 'debbugs-toggle-sort)
+    map))
+
+(defvar debbugs-sort-state 'number)
 
 (defun debbugs-mode ()
   "Major mode for listing bug reports.
@@ -154,10 +157,40 @@ The following commands are available:
   (setq major-mode 'debbugs-mode)
   (setq mode-name "Debbugs")
   (use-local-map debbugs-mode-map)
+  (set (make-local-variable 'debbugs-sort-state)
+       'number)
   (buffer-disable-undo)
   (setq truncate-lines t)
   (setq buffer-read-only t))
 
+(defvar debbugs-state-preference
+  '((debbugs-new . 1)
+    (debbugs-stale . 2)
+    (debbugs-handled . 3)
+    (debbugs-done . 4)))
+
+(defun debbugs-toggle-sort ()
+  "Toggle sorting by age and by state."
+  (interactive)
+  (beginning-of-line)
+  (let ((buffer-read-only nil)
+       (current-bug (buffer-substring (point) (+ (point) 5))))
+    (goto-char (point-min))
+    (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))
+    (re-search-forward (concat "^" current-bug) nil t)))
+
 (defun debbugs-select-report ()
   "Select the report on the current line."
   (interactive)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]