From 80c4ca88df30277cae30ded1c1691c0231bad8b9 Mon Sep 17 00:00:00 2001 From: Arun Isaac Date: Sun, 26 Sep 2021 23:09:12 +0530 Subject: gnbug: Extract tasks. * gnbug: Import (ice-9 regex). (file-details): Extract tasks. (): Add tasks and completed-tasks fields. (issues): Initialize tasks and completed-tasks fields. --- gnbug | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/gnbug b/gnbug index 7b933e3..06f6cc0 100755 --- a/gnbug +++ b/gnbug @@ -10,7 +10,8 @@ (srfi srfi-171) (ice-9 ftw) (ice-9 match) - (ice-9 popen)) + (ice-9 popen) + (ice-9 regex)) (define (invoke program . args) (unless (zero? (apply system* program args)) @@ -49,7 +50,7 @@ even if it exits non-locally. Return the value returned by PROC." (define-record-type (issue file title creator created-date created-relative-date - assigned keywords open) + assigned keywords open tasks completed-tasks) issue? (file issue-file) (title issue-title) @@ -58,7 +59,9 @@ even if it exits non-locally. Return the value returned by PROC." (created-relative-date issue-created-relative-date) (assigned issue-assigned) (keywords issue-keywords) - (open issue-open)) + (open issue-open) + (tasks issue-tasks) + (completed-tasks issue-completed-tasks)) (define (issues) "Return a list of all issues, sorted oldest first." @@ -81,7 +84,9 @@ even if it exits non-locally. Return the value returned by PROC." ;; "closed" is a special keyword to indicate ;; the open/closed status of an issue. (delete "closed" all-keywords) - (not (member "closed" all-keywords))))) + (not (member "closed" all-keywords)) + (hashtable-ref file-details 'tasks 0) + (hashtable-ref file-details 'completed-tasks 0)))) (find-files "." (lambda (name _) (and (string-suffix? ".gmi" name) @@ -158,6 +163,15 @@ ports) in that it also supports DOS line endings." (hashtable-append! result 'keywords (comma-split (remove-prefix "* " line)))) + ;; Checkbox lists are tasks. If the + ;; checkbox has any character other + ;; than space in it, the task is + ;; completed. + ((string-match "\\* \\[(.)\\]" line) + => (lambda (m) + (hashtable-update! result 'tasks 1+ 0) + (unless (string=? (match:substring m 1) " ") + (hashtable-update! result 'completed-tasks 1+ 0)))) ;; The first level one heading is the ;; title. ((string-prefix? "# " line) -- cgit v1.2.3