stumpwm/tasks.lisp @ c76aecc93001 default tip

More
author Steve Losh <steve@stevelosh.com>
date Thu, 16 Jul 2026 11:24:25 -0400
parents adb18a61e30f
children (none)
(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% ()
  (_ (sh '("t") :result-type 'list)
    (mapcar #'parse-task-line _)
    (sort _ #'string-lessp :key #'cdr)))

(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)))