Handle flexible order of TODO keywords in first row in kanban-zero
diff --git a/kanban.el b/kanban.el
--- a/kanban.el
+++ b/kanban.el
@@ -128,6 +128,13 @@
(min 30 (length nolinks)))))
(concat "[[" file link "][" clean "]]" ))))
+;; Get TODO of current column from field in row 1
+(defun kanban--get-todo-of-current-col ()
+ "Get TODO of current column from field in row 1 or nil if
+row 1 does not contain a valid TODO"
+ (let ((todo (org-table-get 1 nil)))
+ (if (member todo org-todo-keywords-1) todo)))
+
;; Fill the kanban table with tasks with corresponding TODO states from org files
;;;###autoload
(defun kanban-zero (row column &optional match scope)
@@ -136,18 +143,19 @@
state. Useful for getting a simple overview of your tasks.
Gets the ROW and COLUMN via TBLFM ($# and @#) and can get a string as MATCH to select only entries with a matching tag, as well as a list of org-mode files as the SCOPE to search for tasks."
- (let
- ((elem (nth (- row 2)
- (delete nil (org-map-entries
+ (let*
+ ((todo (kanban--get-todo-of-current-col))
+ (elem (and todo (nth (- row 2)
+ (delete nil (org-map-entries
'kanban--todo-links-function
; select the TODO state via the matcher: just match the TODO.
(if match
- (concat match "+TODO=\"" (nth (- column 1) org-todo-keywords-1) "\"")
- (concat "+TODO=\"" (nth (- column 1) org-todo-keywords-1) "\""))
+ (concat match "+TODO=\"" todo "\"")
+ (concat "+TODO=\"" todo "\""))
; read all agenda files
(if scope
scope
- 'agenda))))))
+ 'agenda)))))))
(if (equal elem nil)
""
elem)))