stumpwm/tasks.lisp @ adb18a61e30f

More
author Steve Losh <steve@stevelosh.com>
date Thu, 16 Jul 2026 11:08:03 -0400
parents (none)
children c76aecc93001
(in-package :stumpwm-user)

(defun parse-task-line (line)
  (ppcre:register-groups-bind (id task) ("^([a-f0-9]+) - (.*)$" line)
    (cons id task)))


(defun tasks/new% (task)
  (sh `("t" ,task) :wait nil))

(defun tasks/list% ()
  (mapcar #'parse-task-line (sh '("t") :result-type 'list)))

(defun tasks/finish% (id)
  (sh `("t" "-f" ,id) :wait nil))

(defun tasks/menu% (prompt)
  (second (select-from-menu
            (current-screen)
            (mapcar (juxt #'cdr #'car) (tasks/list%))
            prompt)))


(defcommand tasks-new (task) ((:string "Task: "))
  (tasks/new% task))

(defcommand tasks-list () ()
  (message (format nil "~{~A~^~%~}"
                   (mapcar #'cdr (tasks/list%)))))

(defcommand tasks-finish () ()
  (when-let ((id (tasks/menu% "Finish task: ")))
    (tasks/finish% id)))