From 40e3715088487ab87692dfcdd113cb5b72e42500 Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Fri, 1 Oct 2021 10:37:27 +0200
Subject: [PATCH 01/41] update documentation

---
 README.md | 81 ++++++++++++++++++++++++++++---------------------------
 1 file changed, 41 insertions(+), 40 deletions(-)

diff --git a/README.md b/README.md
index aba5876..0d5c159 100755
--- a/README.md
+++ b/README.md
@@ -25,6 +25,47 @@ $ ./kanban show
 
 > NOTE: columns are configurable, and board resizes according to terminal width
 
+## Usage 
+
+```bash
+$ ./kanban
+Usage:
+
+  kanban init                             # initialize kanban in current directory
+  kanban add                              # add item interactive (adviced) 
+  kanban show [status] ....               # show ascii kanban board [with status]
+  kanban <id>                             # edit or update item 
+  kanban <id> <status>                    # update status of todo id (uses $EDITOR as preferred editor)
+  kanban <status> .....                   # list only todo items with this status(es)
+  kanban list                             # list all todos (heavy)
+  kanban tags                             # list all submitted tags
+  kanban add <status> <tag> <description> # add item (use quoted strings for args)  
+  kanban stats status [tag]
+  kanban stats tag 
+  kanban stats history 
+
+  NOTE #1: statuses can be managed in ~/.kanban/.kanban.conf
+  NOTE #2: the database csv can be found in ~/.kanban/.kanban.csv
+
+Examples:
+
+  kanban add TODO projectX "do foo"
+  kanban TODO DOING HOLD                 
+  kanban stats status projectX
+  kanban stats tag projectX 
+  watch NOCOLOR=1 kanban show
+  # notekeeping by entering a filename as description:
+  echo hello > note.txt && kanban add DOING note.txt
+  # store in github repo
+  git clone https://../foo.git && cd foo.git && kanban init && git add .kanban
+
+Environment:
+
+  X=120 kanban ....         # set max line-width to 120
+  NOCOLOR=1 kanban ....     # disable colors
+  PLAIN=1 kanban ...        # plaintext, disable utf8 chars
+```
+
 ## Change status 
 
 ```bash
@@ -99,46 +140,6 @@ Here you can see all todo's which were 'touched' in august 2015
 see `~/.kanban/.kanban.conf` (gets created automatically).
 You can define the kanban statuses, and limit the maximum amount of todos per status.
 
-## Commandline Overview 
-
-```bash
-$ ./kanban
-Usage:
-
-  kanban add                              # add item interactive (adviced) 
-  kanban show [status] ....               # show ascii kanban board [with status]
-  kanban <id>                             # edit or update item 
-  kanban <id> <status>                    # update status of todo id (uses $EDITOR as preferred editor)
-  kanban <status> .....                   # list only todo items with this status(es)
-  kanban list                             # list all todos (heavy)
-  kanban tags                             # list all submitted tags
-  kanban add <status> <tag> <description> # add item (use quoted strings for args)  
-  kanban stats status [tag]
-  kanban stats tag 
-  kanban stats history 
-
-  NOTE #1: statuses can be managed in ~/.kanban/.kanban.conf
-  NOTE #2: the database csv can be found in ~/.kanban/.kanban.csv
-
-Examples:
-
-  kanban add TODO projectX "do foo"
-  kanban TODO DOING HOLD                 
-  kanban stats status projectX
-  kanban stats tag projectX 
-  watch NOCOLOR=1 kanban show
-  # notekeeping by entering a filename as description:
-  echo hello > note.txt && kanban add DOING note.txt
-  # store in github repo
-  git clone https://../foo.git && cd foo.git && kanban init && git add .kanban
-
-Environment:
-
-  X=120 kanban ....         # set max line-width to 120
-  NOCOLOR=1 kanban ....     # disable colors
-  PLAIN=1 kanban ...        # plaintext, disable utf8 chars
-```
-
 ## Interactive insertion *adviced*
 
 Safest way to keep the CSV sane:

From ed78deab2be032de3c7c3b90b889a95c5c8cc5cc Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Fri, 1 Oct 2021 12:08:33 +0200
Subject: [PATCH 02/41] colorized tags

---
 kanban | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/kanban b/kanban
index 0e76837..d488906 100755
--- a/kanban
+++ b/kanban
@@ -61,8 +61,8 @@ deps="tput column pr gawk"
 for dep in $deps; do which $dep &>/dev/null || { echo "$dep-cmd not installed..aborting (maybe install coreutils util-linux pkgs?)"; exit 1; }; done
 BOX=(┌ ─ ┐ └ ┘ │ ┤ ┴ ┬ ├ ┼)
 BAR=(▁ ▂ ▃ ▄ ▅ ▆ ▆ ▇ ▇ '█' '█')
-COL1="\033[0m"
-COL2="\033[90m"
+COL1="\033[37;1m"
+COL2="\033[0m"
 COL3="\033[88m"
 TMP=~/.kanban.tmp
 locale | grep -q "UTF-8" && UTF8=1
@@ -227,8 +227,12 @@ lines(){
     else 
       cat | sed 's/~/-/g;s/|+/|/g;'; 
     fi
-  } | awk '{ print $0 }; NR > 2 { printf "'$COL2'" }'
-  echo -e "$COL1"
+  } | awk '{
+    a = gensub(/#([a-zA-Z0-9_\.-]+) /,"'$COL1'&'$COL2'","g")
+    a = gensub(/[│|] ([a-zA-Z0-9_\.-]+) [│|]/,"'$COL1'&'$COL2'","g",a)
+    if( NR > 1 ){ printf "'$COL2'" }
+    print a
+  }'
 }
 
 align(){

From e8a9290719a062bb1a91137153ded4f9a04bf543 Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Fri, 1 Oct 2021 12:17:47 +0200
Subject: [PATCH 03/41] removed header + colorized list

---
 kanban | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kanban b/kanban
index d488906..3517a16 100755
--- a/kanban
+++ b/kanban
@@ -186,7 +186,8 @@ list(){
   tags="$*"
   greppattern="(${tags// /\|})"
   create_index
-  cat $TMP.index | grep -E "$greppattern" | sort -k2 -t, | HEADER="id,status,tag,description,history,start,touched\n-,-,-,-,-\n" printcsv 6 | cut -c 1-$(tput cols)
+  echo -e "$COL1"
+  cat $TMP.index | grep -E "$greppattern" | sort -k2 -t, | HEADER="id,status,tag,description,history,start,touched\n-,-,-,-,-\n" printcsv 6 | cut -c 1-$(tput cols) | awk 'NR > 1 { printf "'$COL2'"; } ; { print $0 }'
   rm $TMP.*
 }
 
@@ -207,7 +208,6 @@ columnize(){
   [[ -n $SMALLSCREEN ]] && awkformat='{ print $1" "$3" "$4" "$5 }'
   i=1; lines="$(cat)"; header="$( echo "$lines" | head -n0 )"; output="";
   rm $TMP.col.* &>/dev/null
-  echo -e "${COL1}$header${COL2}";
   for status in "${statuses[@]}"; do 
     [[ -n $SMALLSCREEN ]] && ! [[ "${SMALLSCREEN[@]}" =~ $status ]] && continue
     echo -e ".$(strtoline "$status" "~")~~.\n| $status |_______\n|" > $TMP.col.$i

From 777bb63701faf12966dbbdebbc98162190d67994 Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Fri, 1 Oct 2021 17:32:33 +0200
Subject: [PATCH 04/41] better handling of spaces in description

---
 kanban | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/kanban b/kanban
index 3517a16..c3ef1a4 100755
--- a/kanban
+++ b/kanban
@@ -153,7 +153,9 @@ add_interactive(){
 add(){
   [[ ! -n $1 ]] && { add_interactive "$@"; return 0; }
   [[ ! "${statuses[*]}" =~ "$1" ]] && echo "invalid status $1 (possible: ${statuses[*]})" && exit 1 
-  csvline="$( for col in "$@"; do printf "%s" "\"$col\","; done )\"${1:0:1}\",\"$(get_current_date)\"\""
+  status="$1"
+  csvline='"'$1'","'$2'"'; shift;shift;
+  csvline="$csvline,\"$*\",\"${status:0:1}\",\"$(get_current_date)\"\""
   echo "${csvline:0:$((${#csvline}-1))}" >> $KANBANFILE 
 }
 
@@ -178,7 +180,7 @@ stats(){
 
 _init(){                          
   trap "[[ ! -n \$NOCOLOR ]] && tput cnorm -- normal; " 0 1 5    # reset terminal colors to normal
-  (( $X > 150 )) && unset SMALLSCREEN
+  (( $X > 119 )) && unset SMALLSCREEN
   [[ -n $NOCOLOR ]] && { COL1="";COL2="";COL3=""; }
 }
 

From ae45662b27238b29d6bacc24118fe225d4c910a6 Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Mon, 4 Oct 2021 15:13:18 +0200
Subject: [PATCH 05/41] improved layout

---
 kanban | 27 ++++++++++++---------------
 1 file changed, 12 insertions(+), 15 deletions(-)

diff --git a/kanban b/kanban
index c3ef1a4..ca64f17 100755
--- a/kanban
+++ b/kanban
@@ -189,7 +189,7 @@ list(){
   greppattern="(${tags// /\|})"
   create_index
   echo -e "$COL1"
-  cat $TMP.index | grep -E "$greppattern" | sort -k2 -t, | HEADER="id,status,tag,description,history,start,touched\n-,-,-,-,-\n" printcsv 6 | cut -c 1-$(tput cols) | awk 'NR > 1 { printf "'$COL2'"; } ; { print $0 }'
+  cat $TMP.index | grep -E "$greppattern" | sort -k2 -t, | HEADER="id,status,tag,description,history,start,touched\n-,-,-,-,-\n" printcsv 6 | cut -c 1-$X | awk 'NR > 1 { printf "'$COL2'"; } ; { print $0 }'
   rm $TMP.*
 }
 
@@ -206,33 +206,30 @@ create_index(){
 }
 
 columnize(){
-  awkformat='{ tag=substr($2,1,4); gsub($2,tag); printf("%-7s",$1); print " #"$2" "$3" "$4" "$5 }'
+  awkformat='{ tag=substr($2,1,4); gsub($2,tag); printf("%-5s",$1); print " #"$2" "$3" "$4" "$5 }'
   [[ -n $SMALLSCREEN ]] && awkformat='{ print $1" "$3" "$4" "$5 }'
   i=1; lines="$(cat)"; header="$( echo "$lines" | head -n0 )"; output="";
   rm $TMP.col.* &>/dev/null
   for status in "${statuses[@]}"; do 
     [[ -n $SMALLSCREEN ]] && ! [[ "${SMALLSCREEN[@]}" =~ $status ]] && continue
     echo -e ".$(strtoline "$status" "~")~~.\n| $status |_______\n|" > $TMP.col.$i
-    cat $TMP.index | grep "$status" | sed 's/["]\?'$status'["]\?//g' | printcsv 5 | awk "$awkformat" |  sed 's/^/| /g;s/  / /g'  | unexpand >> $TMP.col.$i
-    #echo "$( cat $TMP.col.$i )" > $TMP.col.$i
+    cat $TMP.index | grep "$status" | sed 's/["]\?'$status'["]\?//g'       | \
+      printcsv 5   | awk "$awkformat" |  sed 's/^/| /g;s/  / /g'           | unexpand >> $TMP.col.$i
     i=$((i+1))
   done 
-  pr -m -t -w$((X-8)) -S"      "  $TMP.col.* | lines 
+  pr -m -t -w$((X-5)) -S"      "  $TMP.col.*  | lines 
   rm $TMP.col.* # print and cleanup
 }
 
 lines(){
   echo -e "$COL1"
-  {
-    if [[ -n $UTF8 ]]; then
-      cat | sed 's/| /│ /g;s/\.~/┌/g;s/~\./──┐/g;s///g;s/~/─/g;s/|\./└/g;s/|/│/g' # nice utf9 lines
-    else 
-      cat | sed 's/~/-/g;s/|+/|/g;'; 
-    fi
-  } | awk '{
+  if [[ -n $UTF8 ]]; then
+    cat | sed 's/| /│ /g;s/\.~/┌/g;s/~\./──┐/g;s///g;s/~/─/g;s/|\./└/g;s/|/│/g' # nice utf9 lines
+  else 
+    cat | sed 's/~/-/g;s/|+/|/g;'; 
+  fi | awk '{ 
     a = gensub(/#([a-zA-Z0-9_\.-]+) /,"'$COL1'&'$COL2'","g")
-    a = gensub(/[│|] ([a-zA-Z0-9_\.-]+) [│|]/,"'$COL1'&'$COL2'","g",a)
-    if( NR > 1 ){ printf "'$COL2'" }
+    if( NR == 3 ){ printf "'$COL2'" }; 
     print a
   }'
 }
@@ -250,7 +247,7 @@ show(){
   { 
     echo "$1"
     if [[ -n $1 ]]; then cat $TMP.index | grep "$1"; else cat $TMP.index; fi 
-  } | columnize | more
+  } | columnize
   [[ -n $SMALLSCREEN ]] && echo -e "    ${COL1}(${COL2} small terminal detected, hiding certain columns ${COL1})"
   echo ""
 }

From 3b62794f05c737fb05034e31b75a8e7e9521a85a Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Mon, 4 Oct 2021 16:20:59 +0200
Subject: [PATCH 06/41] added scriptable kanban items

---
 README.md | 22 +++++++++++++++++++++-
 kanban    |  9 ++++++++-
 2 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 0d5c159..e0804f5 100755
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
 <br>
 <img alt="" src=".res/carbon.png"/>
 
-commandline #notetaking #todomanager for teams/personal: kanbanboard csv-viewer for minimalist productivity hackers.
+commandline #notetaking #todomanager #scriptable for teams/personal: kanbanboard csv-viewer for minimalist productivity hackers.
 
 > WHY: online issuetrackers are great for teams, but how to manage (personal) todo's on a crossrepo- or microlevel? KANBAN.bash is a very simple **powerful** tool to manage and measure productivity. Just store the 
 CSV-file(s) on a repo, clouddrive or server and use it across teams. #symlinksftw!
@@ -163,6 +163,26 @@ No widescreen? Show a simplified kanban board by hiding some categories in the `
 #SMALLSCREEN=('HOLD' 'DOING')   # uncomment to only show these fields in kanban asciiboard
 ```
 
+## Scriptable / Kanban Bot
+
+> kanban items are **SCRIPTABLE**, for example move items dynamically:
+
+```bash
+$ k 24             # edit item 24
+"$(~/.kanban/bot status_backup)","script","database backup","T","2021-10-04@15:36"
+```
+now put this into `~/.kanban/bot` and run `chmod 755 ~/.kanban/bot`:
+
+```bash
+#!/bin/bash
+status_backup(){
+  [ $(date +%u) == 1 ] && printf TODO || printf BACKLOG
+}
+
+"$@"
+```
+Profit! (`database backup` will have status **TODO** only on mondays) 
+
 ## Attention UNIX ninjas 
 
 > type 'k' instead of './kanban' 
diff --git a/kanban b/kanban
index ca64f17..7c8c722 100755
--- a/kanban
+++ b/kanban
@@ -159,6 +159,13 @@ add(){
   echo "${csvline:0:$((${#csvline}-1))}" >> $KANBANFILE 
 }
 
+evaluate(){
+  IFS=''; cat - | sed 's/\\/\\\\\\\\/g' | while read -r line; do 
+    [[ "$line" =~ '$' ]] && line="$(eval "echo \"$( echo "$line" | sed 's/"/\\"/g')\"")"; 
+    echo "$line"
+  done
+}
+
 stats(){
   [[ ! -n $1 ]] && exit 1
   create_index
@@ -202,7 +209,7 @@ do_alert(){
 
 create_index(){
   rm $TMP.index &>/dev/null
-  cat -n $KANBANFILE | sed 's/^[ ]\+//g;s/\t/,/g' >> $TMP.index
+  cat -n $KANBANFILE | sed 's/^[ ]\+//g;s/\t/,/g' | evaluate >> $TMP.index
 }
 
 columnize(){

From 07c81b6553ad30a24f0bc403c8cbe3aafd68fe0b Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Mon, 4 Oct 2021 16:34:00 +0200
Subject: [PATCH 07/41] update documentation

---
 README.md | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index e0804f5..7bc7cc1 100755
--- a/README.md
+++ b/README.md
@@ -165,7 +165,7 @@ No widescreen? Show a simplified kanban board by hiding some categories in the `
 
 ## Scriptable / Kanban Bot
 
-> kanban items are **SCRIPTABLE**, for example move items dynamically:
+> kanban items are **SCRIPTABLE**, therefore allowing dynamic statuses, tags & descriptions:
 
 ```bash
 $ k 24             # edit item 24
@@ -181,7 +181,13 @@ status_backup(){
 
 "$@"
 ```
-Profit! (`database backup` will have status **TODO** only on mondays) 
+Profit! Now `database backup` will have status **TODO** only on mondays.<br>
+
+> TIP: use curl to generate dynamic descriptions, for example:
+
+```bash 
+"$(curl https://api.github.com/repos/coderofsalvation/kanban.bash/issues | grep total_count | sed 's/[^0-9]//g') open issues"
+```
 
 ## Attention UNIX ninjas 
 

From 83b59d8461a3a7851d83e98664b60868726c42d3 Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Mon, 4 Oct 2021 16:36:29 +0200
Subject: [PATCH 08/41] update documentation

---
 README.md | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index 7bc7cc1..e3ce657 100755
--- a/README.md
+++ b/README.md
@@ -165,13 +165,12 @@ No widescreen? Show a simplified kanban board by hiding some categories in the `
 
 ## Scriptable / Kanban Bot
 
-> kanban items are **SCRIPTABLE**, therefore allowing dynamic statuses, tags & descriptions:
+> kanban items are **SCRIPTABLE**, therefore allowing dynamic statuses, tags & descriptions in the CSV-file:
 
 ```bash
-$ k 24             # edit item 24
 "$(~/.kanban/bot status_backup)","script","database backup","T","2021-10-04@15:36"
 ```
-now put this into `~/.kanban/bot` and run `chmod 755 ~/.kanban/bot`:
+this will call the following (executable)  script (`~/.kanban/bot`)
 
 ```bash
 #!/bin/bash
@@ -181,7 +180,7 @@ status_backup(){
 
 "$@"
 ```
-Profit! Now `database backup` will have status **TODO** only on mondays.<br>
+Profit! The `database backup` item will have status **TODO** on mondays, otherwise **BACKLOG**<br>
 
 > TIP: use curl to generate dynamic descriptions, for example:
 

From 5c59c910123dbfabb57b8a1c8e74209a056ebe48 Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Mon, 4 Oct 2021 16:44:13 +0200
Subject: [PATCH 09/41] update documentation

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index e3ce657..4aa675f 100755
--- a/README.md
+++ b/README.md
@@ -219,7 +219,7 @@ $ sed -i 's/FOO/BAR/g' ~/.kanban.csv
 > Open a terminal on an extra monitor/screen/tmux:
 
 ```bash
-$ watch kanban show
+$ NOCOLOR=1 watch kanban show
 ```
 
 > Run ninja-commands like: 'k 23 DONE' and withness the update:

From 2f310405c19a5b00594095ff5ea7c8f685a55bd0 Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Mon, 4 Oct 2021 18:11:20 +0200
Subject: [PATCH 10/41] dont update status of dynamic statuses + update docs

---
 README.md | 12 ++++++------
 kanban    |  3 ++-
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/README.md b/README.md
index 4aa675f..5c1fd25 100755
--- a/README.md
+++ b/README.md
@@ -165,22 +165,22 @@ No widescreen? Show a simplified kanban board by hiding some categories in the `
 
 ## Scriptable / Kanban Bot
 
-> kanban items are **SCRIPTABLE**, therefore allowing dynamic statuses, tags & descriptions in the CSV-file:
+> kanban items are **SCRIPTABLE** using your favorite language. This allows dynamic statuses, tags & descriptions in the CSV-file:
 
 ```bash
-"$(~/.kanban/bot status_backup)","script","database backup","T","2021-10-04@15:36"
+"$(~/.kanban/bot status_day TODO '1 4')","script","database backup","T","2021-10-04@15:36"
 ```
-this will call the following (executable)  script (`~/.kanban/bot`)
+this will call the following (executable)  shellscript (`~/.kanban/bot`)
 
 ```bash
 #!/bin/bash
-status_backup(){
-  [ $(date +%u) == 1 ] && printf TODO || printf BACKLOG
+status_day(){
+  [[ "$2" =~ $(date +%u) ]] && printf $1 || printf BACKLOG
 }
 
 "$@"
 ```
-Profit! The `database backup` item will have status **TODO** on mondays, otherwise **BACKLOG**<br>
+Profit! <br>The `database backup` item will have status **TODO** on mondays & fridays, otherwise **BACKLOG**<br>
 
 > TIP: use curl to generate dynamic descriptions, for example:
 
diff --git a/kanban b/kanban
index 7c8c722..be9b2b9 100755
--- a/kanban
+++ b/kanban
@@ -270,7 +270,8 @@ update_item_status(){
     dates="$(echo "$item"  | awk -F',' '{ print $5 }' | sed 's/"//g' )"
     newflags="$flags${2:0:1}"
     newdates="$dates $(get_current_date)"
-    [[ "$2" =~ "DONE" ]] && date="$(get_current_date)"
+    [[ $status =~ "\$(" ]] && { update_item $1; return 0; }
+    [[ "$2" =~ "DONE"   ]] && date="$(get_current_date)"
     newitem="$item"
     newitem="${newitem/$status/$2}"
     newitem="${newitem/$flags/$newflags}"

From 0be2318c58f5b25bc15e6b36eee4937dd62cbe33 Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Mon, 4 Oct 2021 18:26:42 +0200
Subject: [PATCH 11/41] updated docs with realtime webbased kanban example

---
 README.md | 30 ++++++++++++++++++++++++++++++
 kanban    |  1 +
 2 files changed, 31 insertions(+)

diff --git a/README.md b/README.md
index 5c1fd25..5680d9a 100755
--- a/README.md
+++ b/README.md
@@ -297,6 +297,36 @@ $ k stats history HDHD 2014
    project10     3 ▆▆▆▆▆▆▆▆▆▆ 
 ```
 
+## Realtime Web-based kanban boards 
+
+Create the following `index.html`:
+
+```html
+<!DOCTYPE html>
+<pre id="log"></pre>
+<script>
+  // helper function: log message to screen
+  function log(msg) { document.getElementById('log').textContent += msg + '\n'; }
+  // setup websocket with callbacks
+  var ws = new WebSocket('ws://localhost:8080/');
+  ws.onopen = function() { console.log('CONNECT'); };
+  ws.onclose = function() { console.log('DISCONNECT'); };
+  ws.onmessage = function(event) { log(event.data); };
+</script>
+```
+
+And then serve it to the web:
+
+```bash
+$ apt-get install websocketd
+$ X=120 NOCOLOR=1 PLAIN=1 websocketd -passenv 'X,NOCOLOR,PLAIN' -port 8080 -staticdir . ./kanban show
+Mon, 04 Oct 2021 18:23:08 +0200 | INFO   | server     |  | Serving using application   : ./kanban show
+Mon, 04 Oct 2021 18:23:08 +0200 | INFO   | server     |  | Serving static content from : .
+Mon, 04 Oct 2021 18:23:08 +0200 | INFO   | server     |  | Starting WebSocket server   : ws://localhost:8080/
+```
+
+> Now surf to http://localhost:8080 and PROFIT!
+
 ## Tab completion 
 
 Somehow source `kanban.completion` in your `~/.bashrc` or just copy it to `/etc/bash_completion.d`
diff --git a/kanban b/kanban
index be9b2b9..a2b5290 100755
--- a/kanban
+++ b/kanban
@@ -65,6 +65,7 @@ COL1="\033[37;1m"
 COL2="\033[0m"
 COL3="\033[88m"
 TMP=~/.kanban.tmp
+[[ ! -n $TERM ]] && TERM=vt100
 locale | grep -q "UTF-8" && UTF8=1
 [[ -n $PLAIN ]] && unset UTF8
 [[ ! -n $X   ]] && X=$(tput cols)    # get size of terminal window

From 54a907490a339e6dc18ff770e85a8f392613cc06 Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Mon, 4 Oct 2021 18:38:44 +0200
Subject: [PATCH 12/41] update documentation

---
 .res/carbon.png | Bin 80483 -> 132300 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/.res/carbon.png b/.res/carbon.png
index a7bc5a6d194dd597e47d42628fd59bb77fdf45be..ea7a87795e7361df29efba066cc3256d51327482 100755
GIT binary patch

From 853e4c9fa79a41a0889d76a3f95d551ced9b4d80 Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Mon, 4 Oct 2021 18:40:42 +0200
Subject: [PATCH 13/41] update documentation

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 5680d9a..06b2a51 100755
--- a/README.md
+++ b/README.md
@@ -318,7 +318,7 @@ Create the following `index.html`:
 And then serve it to the web:
 
 ```bash
-$ apt-get install websocketd
+$ sudo apt-get install websocketd
 $ X=120 NOCOLOR=1 PLAIN=1 websocketd -passenv 'X,NOCOLOR,PLAIN' -port 8080 -staticdir . ./kanban show
 Mon, 04 Oct 2021 18:23:08 +0200 | INFO   | server     |  | Serving using application   : ./kanban show
 Mon, 04 Oct 2021 18:23:08 +0200 | INFO   | server     |  | Serving static content from : .

From e0b1dd02f1caafb1aee51d95ded52aa1a328c59b Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Mon, 4 Oct 2021 20:13:30 +0200
Subject: [PATCH 14/41] feature: support nested kanbans

---
 README.md | 27 +++++++++++++++++++++++++--
 kanban    |  2 ++
 2 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 06b2a51..3724e98 100755
--- a/README.md
+++ b/README.md
@@ -4,8 +4,8 @@
 
 commandline #notetaking #todomanager #scriptable for teams/personal: kanbanboard csv-viewer for minimalist productivity hackers.
 
-> WHY: online issuetrackers are great for teams, but how to manage (personal) todo's on a crossrepo- or microlevel? KANBAN.bash is a very simple **powerful** tool to manage and measure productivity. Just store the 
-CSV-file(s) on a repo, clouddrive or server and use it across teams. #symlinksftw!
+> **WHY?** online issuetrackers are great for teams, but how to manage (personal) todo's on a crossrepo-, macro-, or micro-level? This is a very simple **powerful** tool to manage and measure productivity. Just store the 
+CSV-file(s) on a repo, clouddrive or server and use it across teams. #symlinks #nestedkanbans
 
 ## Install
 
@@ -163,6 +163,29 @@ No widescreen? Show a simplified kanban board by hiding some categories in the `
 #SMALLSCREEN=('HOLD' 'DOING')   # uncomment to only show these fields in kanban asciiboard
 ```
 
+## Nested kanbans
+
+```bash
+$ kanban init
+$ mkdir featureX           
+$ kanban add TODO featureX 
+$ cd featureX
+$ kanban init
+$ kanban add TODO foobar
+$ cd ..
+$ kanban show
+ .____.
+| TODO |_____
+|
+| 12 featureX
+
+$ kanban 12                         # shows kanban inside featureX 
+ .____.
+| TODO |_____
+|
+| 1  foobar 
+```
+
 ## Scriptable / Kanban Bot
 
 > kanban items are **SCRIPTABLE** using your favorite language. This allows dynamic statuses, tags & descriptions in the CSV-file:
diff --git a/kanban b/kanban
index a2b5290..a38ca75 100755
--- a/kanban
+++ b/kanban
@@ -247,6 +247,7 @@ align(){
 }
 
 show(){
+  [[ -n $1 ]] && { cd $1; echo "[kanban] showing nested kanban '$1'"; $0 show; exit 0; }
   [[ ! -f "$KANBANFILE" ]] && touch "$KANBANFILE" 
   create_index
   if [[ -n $1 ]]; then 
@@ -288,6 +289,7 @@ update_item(){
   status="$(echo "$item" | awk -F',' '{ print $1 }')"
   file="$(echo "$item" | awk -F',' '{ print $3 }')"
   file="${file//\"/}"
+  [[ -d $file/.kanban ]] && { show $file; return; }
   [[ -f $file ]] && ${EDITOR} "$file"
   echo '#
 # STATUSES ARE: '${statuses[*]}' 

From 186e5d1114a42d93ac3034ba69276db45a0729c9 Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Mon, 4 Oct 2021 20:15:19 +0200
Subject: [PATCH 15/41] update documentation

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 3724e98..c95ac9a 100755
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
 <br>
 <img alt="" src=".res/carbon.png"/>
 
-commandline #notetaking #todomanager #scriptable for teams/personal: kanbanboard csv-viewer for minimalist productivity hackers.
+commandline kanban #notetaking #todomanager #scriptable for teams/personal: CSV kanban for minimalist productivity hackers.
 
 > **WHY?** online issuetrackers are great for teams, but how to manage (personal) todo's on a crossrepo-, macro-, or micro-level? This is a very simple **powerful** tool to manage and measure productivity. Just store the 
 CSV-file(s) on a repo, clouddrive or server and use it across teams. #symlinks #nestedkanbans

From 7c4c7d9ba9376fa2cffb0db616cb65bce5c03045 Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Mon, 4 Oct 2021 20:20:52 +0200
Subject: [PATCH 16/41] update documentation

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index c95ac9a..176c572 100755
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@
 commandline kanban #notetaking #todomanager #scriptable for teams/personal: CSV kanban for minimalist productivity hackers.
 
 > **WHY?** online issuetrackers are great for teams, but how to manage (personal) todo's on a crossrepo-, macro-, or micro-level? This is a very simple **powerful** tool to manage and measure productivity. Just store the 
-CSV-file(s) on a repo, clouddrive or server and use it across teams. #symlinks #nestedkanbans
+CSV-file(s) inside repos, clouddrives and local filesystems. #teamfriendly #symlinktheplanet #nestedkanbans
 
 ## Install
 

From c233a9121d3bb09934a96a42fcf6fb57c571ede0 Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Mon, 4 Oct 2021 20:22:55 +0200
Subject: [PATCH 17/41] update documentation

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 176c572..ceaab05 100755
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
 <br>
 <img alt="" src=".res/carbon.png"/>
 
-commandline kanban #notetaking #todomanager #scriptable for teams/personal: CSV kanban for minimalist productivity hackers.
+commandline kanban #notetaking #todomanager #scriptable for teams AND personal CSV kanban for minimalist productivity hackers.
 
 > **WHY?** online issuetrackers are great for teams, but how to manage (personal) todo's on a crossrepo-, macro-, or micro-level? This is a very simple **powerful** tool to manage and measure productivity. Just store the 
 CSV-file(s) inside repos, clouddrives and local filesystems. #teamfriendly #symlinktheplanet #nestedkanbans

From 21efa4f9201a034dfc5dbb5d87da6f58b30c55ae Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Mon, 4 Oct 2021 20:25:14 +0200
Subject: [PATCH 18/41] update documentation

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index ceaab05..e29d35d 100755
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
 
 commandline kanban #notetaking #todomanager #scriptable for teams AND personal CSV kanban for minimalist productivity hackers.
 
-> **WHY?** online issuetrackers are great for teams, but how to manage (personal) todo's on a crossrepo-, macro-, or micro-level? This is a very simple **powerful** tool to manage and measure productivity. Just store the 
+> **WHY?** online issuetrackers are great for teams, but how to manage (personal) todo's on a crossrepo-, macro-, or micro-level? This is a very simple **powerful** tool to do that **AND** measure productivity. Just store the 
 CSV-file(s) inside repos, clouddrives and local filesystems. #teamfriendly #symlinktheplanet #nestedkanbans
 
 ## Install

From c993a8cc35750c940d5db3c8d8605f058cc3e548 Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Mon, 4 Oct 2021 21:27:33 +0200
Subject: [PATCH 19/41] added blinking text support + raw csv editing

---
 README.md | 17 ++++++++++++-----
 kanban    | 47 +++++++++++++++++++++++++++--------------------
 2 files changed, 39 insertions(+), 25 deletions(-)

diff --git a/README.md b/README.md
index e29d35d..a55728b 100755
--- a/README.md
+++ b/README.md
@@ -43,6 +43,7 @@ Usage:
   kanban stats status [tag]
   kanban stats tag 
   kanban stats history 
+  kanban csv                              # edit raw csv
 
   NOTE #1: statuses can be managed in ~/.kanban/.kanban.conf
   NOTE #2: the database csv can be found in ~/.kanban/.kanban.csv
@@ -140,7 +141,7 @@ Here you can see all todo's which were 'touched' in august 2015
 see `~/.kanban/.kanban.conf` (gets created automatically).
 You can define the kanban statuses, and limit the maximum amount of todos per status.
 
-## Interactive insertion *adviced*
+## Idiotproof csv-editing 
 
 Safest way to keep the CSV sane:
 
@@ -151,16 +152,18 @@ enter description:
 enter one of statuses: BACKLOG TODO IN_PROGRESS HOLD DONE
 > TODO
 enter one of tags: projectA, projectB 
->
+> projectA
+$
 ```
 
-## Customized kanban.
+## Responsive kanban.
 
 As mentioned earlier, the status/categorynames can be changed in the config-file.
-No widescreen? Show a simplified kanban board by hiding some categories in the `kanban`-bashscript:
+No widescreen? Show a tag-less, simplified kanban board by hiding some categories in the `kanban`-bashscript:
 
 ```bash
-#SMALLSCREEN=('HOLD' 'DOING')   # uncomment to only show these fields in kanban asciiboard
+XSMALL=119                           # show small kanban for terminalwidth < 119 chars
+SMALLSCREEN=('DOING' 'TODO' 'HOLD')  # define simplified kanban board statuses
 ```
 
 ## Nested kanbans
@@ -211,6 +214,10 @@ Profit! <br>The `database backup` item will have status **TODO** on mondays & fr
 "$(curl https://api.github.com/repos/coderofsalvation/kanban.bash/issues | grep total_count | sed 's/[^0-9]//g') open issues"
 ```
 
+## Blinking text
+
+Just wrap a word with stars (`*iamblinking*` e.g.) in your csv to catch more attention.
+
 ## Attention UNIX ninjas 
 
 > type 'k' instead of './kanban' 
diff --git a/kanban b/kanban
index a38ca75..770c966 100755
--- a/kanban
+++ b/kanban
@@ -16,6 +16,7 @@
 #   kanban stats status [tag]
 #   kanban stats tag 
 #   kanban stats history 
+#   kanban csv                              # edit raw csv
 # 
 #   NOTE #1: statuses can be managed in ~/.kanban/.kanban.conf
 #   NOTE #2: the database csv can be found in ~/.kanban/.kanban.csv
@@ -61,9 +62,10 @@ deps="tput column pr gawk"
 for dep in $deps; do which $dep &>/dev/null || { echo "$dep-cmd not installed..aborting (maybe install coreutils util-linux pkgs?)"; exit 1; }; done
 BOX=(┌ ─ ┐ └ ┘ │ ┤ ┴ ┬ ├ ┼)
 BAR=(▁ ▂ ▃ ▄ ▅ ▆ ▆ ▇ ▇ '█' '█')
+COL0="\033[0m"
 COL1="\033[37;1m"
-COL2="\033[0m"
-COL3="\033[88m"
+COL2="\033[91;1m"
+COL3="\033[91;5m"
 TMP=~/.kanban.tmp
 [[ ! -n $TERM ]] && TERM=vt100
 locale | grep -q "UTF-8" && UTF8=1
@@ -71,6 +73,7 @@ locale | grep -q "UTF-8" && UTF8=1
 [[ ! -n $X   ]] && X=$(tput cols)    # get size of terminal window
 [[ ! -n $Y   ]] && Y=$(tput lines)   # 
 SMALLSCREEN=('SCHEDULED' 'HOLD' 'DOING')  # uncomment to get simplified kanban board
+[[ ! -n $XSMALL ]] && XSMALL=119
 FILE_CONF=".kanban/.kanban.conf"
 FILE_CSV=".kanban/.kanban.csv"
 [[ ! -n $EDITOR ]] && {
@@ -93,13 +96,13 @@ moveconfig(){
 config_example="# kanban config file
 statuses=('TODO' 'HOLD' 'DOING' 'DONE' 'NOTES' 'BACKLOG') 
 
-SMALLSCREEN=('DOING' 'TODO' 'HOLD')  # uncomment to get simplified kanban board
+XSMALL=119                           # show small kanban for terminalwidth < 119 chars
+SMALLSCREEN=('DOING' 'TODO' 'HOLD')  # define simplified kanban board statuses
 
 # maximum amount of todos within status (triggers warning when exceeds)
 declare -A maximum_todo
-maximum_todo['HOLD']=5
-maximum_todo['DOING']=4
-maximum_todo['CODE']=3
+maximum_todo[HOLD]=10
+maximum_todo[DOING]=5
 "
 
 # usage: fb put <x> <y> <string>
@@ -188,8 +191,8 @@ stats(){
 
 _init(){                          
   trap "[[ ! -n \$NOCOLOR ]] && tput cnorm -- normal; " 0 1 5    # reset terminal colors to normal
-  (( $X > 119 )) && unset SMALLSCREEN
-  [[ -n $NOCOLOR ]] && { COL1="";COL2="";COL3=""; }
+  (( $X > $XSMALL )) && unset SMALLSCREEN
+  [[ -n $NOCOLOR ]] && { COL1="";COL0="";COL2=""; COL3=""; }
 }
 
 list(){
@@ -197,17 +200,10 @@ list(){
   greppattern="(${tags// /\|})"
   create_index
   echo -e "$COL1"
-  cat $TMP.index | grep -E "$greppattern" | sort -k2 -t, | HEADER="id,status,tag,description,history,start,touched\n-,-,-,-,-\n" printcsv 6 | cut -c 1-$X | awk 'NR > 1 { printf "'$COL2'"; } ; { print $0 }'
+  cat $TMP.index | grep -E "$greppattern" | sort -k2 -t, | HEADER="id,status,tag,description,history,start,touched\n-,-,-,-,-\n" printcsv 6 | cut -c 1-$X | awk 'NR > 1 { printf "'$COL0'"; } ; { print $0 }'
   rm $TMP.*
 }
 
-do_alert(){
-  nlines=$(echo "$1" | wc -l ) ; maximum=$2 
-  if [[ ${#maximum} > 0 ]] && [[ $nlines > $maximum ]]; then 
-    echo -e "\n\n!!! alert: number of '$3' items (max $maximum) slows down average productionrate !!!" >> "$4"
-  fi
-}
-
 create_index(){
   rm $TMP.index &>/dev/null
   cat -n $KANBANFILE | sed 's/^[ ]\+//g;s/\t/,/g' | evaluate >> $TMP.index
@@ -220,7 +216,12 @@ columnize(){
   rm $TMP.col.* &>/dev/null
   for status in "${statuses[@]}"; do 
     [[ -n $SMALLSCREEN ]] && ! [[ "${SMALLSCREEN[@]}" =~ $status ]] && continue
-    echo -e ".$(strtoline "$status" "~")~~.\n| $status |_______\n|" > $TMP.col.$i
+    label=$status
+    nlines=$(cat $TMP.index | grep "$status" | wc -l) 
+    maxlines=0 
+    [[ -v "maximum_todo[$status]" ]] && maxlines=${maximum_todo[$status]}
+    [[ ${maximum_todo[$status]} > 0 ]] && [[ $nlines > ${maximum_todo[$status]} ]] && label="*$status*"
+    echo -e ".$(strtoline "$label" "~")~~.\n| $label |_______\n|" > $TMP.col.$i
     cat $TMP.index | grep "$status" | sed 's/["]\?'$status'["]\?//g'       | \
       printcsv 5   | awk "$awkformat" |  sed 's/^/| /g;s/  / /g'           | unexpand >> $TMP.col.$i
     i=$((i+1))
@@ -236,8 +237,9 @@ lines(){
   else 
     cat | sed 's/~/-/g;s/|+/|/g;'; 
   fi | awk '{ 
-    a = gensub(/#([a-zA-Z0-9_\.-]+) /,"'$COL1'&'$COL2'","g")
-    if( NR == 3 ){ printf "'$COL2'" }; 
+    a = gensub(/#([a-zA-Z0-9_\.-]+) /,"'$COL1'&'$COL0'","g")
+    a = gensub(/\*([a-zA-Z0-9_\.-]+)\*/,"'$COL3'&'$COL0'","g",a)
+    if( NR == 3 ){ printf "'$COL0'"; }
     print a
   }'
 }
@@ -257,7 +259,7 @@ show(){
     echo "$1"
     if [[ -n $1 ]]; then cat $TMP.index | grep "$1"; else cat $TMP.index; fi 
   } | columnize
-  [[ -n $SMALLSCREEN ]] && echo -e "    ${COL1}(${COL2} small terminal detected, hiding certain columns ${COL1})"
+  [[ -n $SMALLSCREEN ]] && echo -e "    ${COL1}(${COL0} small terminal detected, hiding certain columns ${COL1})"
   echo ""
 }
 
@@ -298,6 +300,7 @@ update_item(){
   ${EDITOR} $TMP.update
   sed -i "s|$item|$(cat $TMP.update | tail -n1)|g" $KANBANFILE 
   echo "updated item $1"
+  echo $item
 }
 
 printcsv(){
@@ -309,6 +312,10 @@ printcsv(){
     max=$max | sed 's/""/"/g' | column -t -s $'\t'                   
 }
 
+csv(){
+  ${EDITOR} $KANBANFILE
+}
+
 # source config
 [[ ! -f ~/$FILE_CONF ]] && { createconfig; }
 [[   -f $FILE_CONF     ]] && source $FILE_CONF 

From 3c11e177526f3a77a8c653f9352e0e8b1e248ce1 Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Mon, 4 Oct 2021 21:39:37 +0200
Subject: [PATCH 20/41] added color to list cmd too

---
 README.md | 14 ++++++++++----
 kanban    | 10 +++++++---
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/README.md b/README.md
index a55728b..bc3cac8 100755
--- a/README.md
+++ b/README.md
@@ -71,16 +71,22 @@ Environment:
 
 ```bash
 $ ./kanban show
-$ ./kanban 34 DONE
-IN_PROGRESS -> DONE
+.------.              .------.              .-------.
+| TODO |_______       | HOLD |_______       | DOING |_______
+|                     |                     |
+| 1 foobar                                  | 3 ipsum
+| 2 lorem                                   
+
+$ ./kanban 2 DOING
+TODO -> DOING
 ```
 
 ## Edit item 
 
-> NOTE: make sure you have your favorite editor set in ~/.bashrc : 'export EDITOR=vim' etc
+> NOTE: make sure you have your favorite editor set in ~/.bashrc (`export EDITOR=vim` e.g.)
 
 ```bash
-$ ./kanban 34
+$ ./kanban 2        # this executes ${EDITOR} 
 ```
 
 ## Todo grep 
diff --git a/kanban b/kanban
index 770c966..2b435af 100755
--- a/kanban
+++ b/kanban
@@ -200,7 +200,7 @@ list(){
   greppattern="(${tags// /\|})"
   create_index
   echo -e "$COL1"
-  cat $TMP.index | grep -E "$greppattern" | sort -k2 -t, | HEADER="id,status,tag,description,history,start,touched\n-,-,-,-,-\n" printcsv 6 | cut -c 1-$X | awk 'NR > 1 { printf "'$COL0'"; } ; { print $0 }'
+  cat $TMP.index | grep -E "$greppattern" | sort -k2 -t, | HEADER="id,status,tag,description,history,start,touched\n-,-,-,-,-\n" printcsv 6 | cut -c 1-$X | colorize 3
   rm $TMP.*
 }
 
@@ -236,10 +236,14 @@ lines(){
     cat | sed 's/| /│ /g;s/\.~/┌/g;s/~\./──┐/g;s///g;s/~/─/g;s/|\./└/g;s/|/│/g' # nice utf9 lines
   else 
     cat | sed 's/~/-/g;s/|+/|/g;'; 
-  fi | awk '{ 
+  fi | colorize 3
+}
+
+colorize(){
+  cat | awk '{ 
     a = gensub(/#([a-zA-Z0-9_\.-]+) /,"'$COL1'&'$COL0'","g")
     a = gensub(/\*([a-zA-Z0-9_\.-]+)\*/,"'$COL3'&'$COL0'","g",a)
-    if( NR == 3 ){ printf "'$COL0'"; }
+    if( NR == '$1' ){ printf "'$COL0'"; }
     print a
   }'
 }

From 9cfd1c41d29415c082015160b35a20f0bc23f6a1 Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Mon, 4 Oct 2021 21:43:58 +0200
Subject: [PATCH 21/41] update documentation

---
 README.md | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index bc3cac8..30ad55e 100755
--- a/README.md
+++ b/README.md
@@ -99,7 +99,7 @@ Nice to get project-specific kanban overviews.
 
 ## Note-taking
 
-> adding a filename as a description, will trigger kanban to open editor:
+> adding a filename as a description, will trigger kanban to launch `$EDITOR`:
 
 ```bash
 $ echo -e "hello\nworld" > my_idea.txt
@@ -164,16 +164,18 @@ $
 
 ## Responsive kanban.
 
-As mentioned earlier, the status/categorynames can be changed in the config-file.
-No widescreen? Show a tag-less, simplified kanban board by hiding some categories in the `kanban`-bashscript:
+As mentioned earlier, the status/categorynames can be changed in `.kanban/.kanban.conf`.
+No widescreen? Show a tag-less, simplified kanban board by hiding some categories:
 
 ```bash
-XSMALL=119                           # show small kanban for terminalwidth < 119 chars
+XSMALL=119                           # show simplified kanban for terminalwidth < 119 chars
 SMALLSCREEN=('DOING' 'TODO' 'HOLD')  # define simplified kanban board statuses
 ```
 
 ## Nested kanbans
 
+<img src="data:image/jpeg;base64,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" width="40%"/>
+
 ```bash
 $ kanban init
 $ mkdir featureX           

From c545ab5330ac20650a2ba1a8096080f56a73e7ae Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Mon, 4 Oct 2021 21:44:23 +0200
Subject: [PATCH 22/41] update documentation

---
 README.md | 2 --
 1 file changed, 2 deletions(-)

diff --git a/README.md b/README.md
index 30ad55e..8c8e8d6 100755
--- a/README.md
+++ b/README.md
@@ -174,8 +174,6 @@ SMALLSCREEN=('DOING' 'TODO' 'HOLD')  # define simplified kanban board statuses
 
 ## Nested kanbans
 
-<img src="data:image/jpeg;base64,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" width="40%"/>
-
 ```bash
 $ kanban init
 $ mkdir featureX           

From e75a191e0be8ac79fe7a7fadd23b3cd0a8532e30 Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Mon, 4 Oct 2021 21:56:37 +0200
Subject: [PATCH 23/41] update documentation

---
 kanban | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/kanban b/kanban
index 2b435af..7d7ee64 100755
--- a/kanban
+++ b/kanban
@@ -37,9 +37,9 @@
 #   X=120 kanban ....         # set max line-width to 120
 #   NOCOLOR=1 kanban ....     # disable colors
 #   PLAIN=1 kanban ...        # plaintext, disable utf8 chars
-#
+# 
 # Tips:
-#
+# 
 #   * <current_dir>/.kanban or ~/.kanban dir is checked for configuration / data
 #   * put .kanban directories in project-dirs
 #   * entering an existing text-filename as description enables note-keeping
@@ -347,4 +347,4 @@ if [[ -n "$1" ]]; then
     *)       "$@" 
              ;;
   esac
-else grep -A33 "^# Usage:" "$0" | sed 's/^# //g'; fi
+else grep -A40 "^# Usage:" "$0" | sed 's/^# //g' | more ; fi

From e5007fc81eb4aa8ea6b1fa9d39b5345c12dc7622 Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Tue, 5 Oct 2021 11:55:30 +0200
Subject: [PATCH 24/41] update documentation

---
 README.md | 10 ++++++++++
 kanban    |  2 +-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 8c8e8d6..9889a72 100755
--- a/README.md
+++ b/README.md
@@ -266,6 +266,16 @@ TODO -> DONE
 $ k add TODO NINJW workout" "$(date --date='tomorrow' +'%Y-%m-%d') deadline"
 ```
 
+## Automatically display boards
+
+Put the following in `~/.bashrc` to display boards whenever you enter a directory with a kanban:
+
+```
+cd(){
+  builtin cd ${1:+"$@"} && [[ -d ./.kanban ]] && kanban show
+}
+```
+
 ## Statistics
 
 With the power of grep you can get overviews:
diff --git a/kanban b/kanban
index 7d7ee64..5fc9f22 100755
--- a/kanban
+++ b/kanban
@@ -278,7 +278,7 @@ update_item_status(){
     dates="$(echo "$item"  | awk -F',' '{ print $5 }' | sed 's/"//g' )"
     newflags="$flags${2:0:1}"
     newdates="$dates $(get_current_date)"
-    [[ $status =~ "\$(" ]] && { update_item $1; return 0; }
+    #[[ "$status" =~ "\$(" ]] && { update_item $1; return 0; }
     [[ "$2" =~ "DONE"   ]] && date="$(get_current_date)"
     newitem="$item"
     newitem="${newitem/$status/$2}"

From 07fca2568ebbeab9fe5c0e1e6298fc6dae0dbb21 Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Tue, 5 Oct 2021 21:54:20 +0200
Subject: [PATCH 25/41] strip absolute paths in overview

---
 kanban | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/kanban b/kanban
index 5fc9f22..519e30b 100755
--- a/kanban
+++ b/kanban
@@ -206,7 +206,7 @@ list(){
 
 create_index(){
   rm $TMP.index &>/dev/null
-  cat -n $KANBANFILE | sed 's/^[ ]\+//g;s/\t/,/g' | evaluate >> $TMP.index
+  cat -n $KANBANFILE | sed 's/^[ ]\+//g;s/\t/,/g;s/"\/.*\//"/g' | evaluate >> $TMP.index
 }
 
 columnize(){
@@ -304,7 +304,6 @@ update_item(){
   ${EDITOR} $TMP.update
   sed -i "s|$item|$(cat $TMP.update | tail -n1)|g" $KANBANFILE 
   echo "updated item $1"
-  echo $item
 }
 
 printcsv(){

From 1e0d3e14e7ed796a04745e963d8257b6e1d8ab1a Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Thu, 2 Dec 2021 10:48:27 +0100
Subject: [PATCH 26/41] added bury feature+notification: 'kanban 43
 SOME_NONEXISTANT_STATUS' will bury item in csv

---
 kanban | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/kanban b/kanban
index 519e30b..08ac79e 100755
--- a/kanban
+++ b/kanban
@@ -339,7 +339,11 @@ if [[ -n "$1" ]]; then
   [[ "${statuses[*]}" =~ "$1" ]] && { list "$@" ; exit 0; }
   case "$1" in 
 
-    [0-9]*)  [[ -n $2 ]] && [[ "${statuses[*]}" =~ "$2" ]] && update_item_status "$@" && exit 0
+    [0-9]*)  [[ -n $2 ]] && {
+                update_item_status "$@"
+                    [[ ! "${statuses[*]}" =~ "$2" ]] && echo -e "[!] burying in csv (visible statuses are: ${statuses[*]})"
+                exit 0
+             }
              update_item "$@"
              ;;
 

From 911985669873d7bd4df1d17ba7355189c7c8870f Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Thu, 2 Dec 2021 10:54:58 +0100
Subject: [PATCH 27/41] update documentation

---
 README.md | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/README.md b/README.md
index 9889a72..b30f20a 100755
--- a/README.md
+++ b/README.md
@@ -195,6 +195,22 @@ $ kanban 12                         # shows kanban inside featureX
 | 1  foobar 
 ```
 
+> Or, how about centralized kanbans in your dotfiles repo + 1 in a projectrepo
+
+```
+$ cd ~                         # go to homedir (where your dotfiles live)
+$ kanban init                  # creates ~/.kanban
+$ cd projects/foo 
+$ kanban init                 
+$ mv .kanban ~/.kanban/foo    
+$ ln -s ~/.kanban/foo .kanban  # link dotfiles-folder to here
+$ cd ~
+$ git add .kanban && git commit -m "dotfiles: updated kanbans"
+$ cd projects/bar
+$ kanban init
+$ git add .kanban && git commit -m "added kanban to project repo"
+```
+
 ## Scriptable / Kanban Bot
 
 > kanban items are **SCRIPTABLE** using your favorite language. This allows dynamic statuses, tags & descriptions in the CSV-file:

From 9aec851ff58afbe495d7f128dacb1d2d6eb87228 Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Thu, 2 Dec 2021 10:56:41 +0100
Subject: [PATCH 28/41] update documentation

---
 README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index b30f20a..f57c3f5 100755
--- a/README.md
+++ b/README.md
@@ -17,6 +17,7 @@ $ chmod 755 kanban
 ## Show me the kanban board!
 
 ```bash
+$ ./kanban init
 $ ./kanban add TODO PERSONAL "buy rose for girlfriend foo bar"
 $ ./kanban show
 ```
@@ -144,7 +145,7 @@ Here you can see all todo's which were 'touched' in august 2015
 
 ## Configuration 
 
-see `~/.kanban/.kanban.conf` (gets created automatically).
+see `~/.kanban/.kanban.conf` (gets created automatically by running `./kanban init`).
 You can define the kanban statuses, and limit the maximum amount of todos per status.
 
 ## Idiotproof csv-editing 

From c616448ad33633aecb8b966edc4ff82aa573c311 Mon Sep 17 00:00:00 2001
From: Leon <leonvankammen@gmail.com>
Date: Thu, 2 Dec 2021 10:58:17 +0100
Subject: [PATCH 29/41] update documentation

---
 README.md | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index f57c3f5..b041ce2 100755
--- a/README.md
+++ b/README.md
@@ -145,8 +145,9 @@ Here you can see all todo's which were 'touched' in august 2015
 
 ## Configuration 
 
-see `~/.kanban/.kanban.conf` (gets created automatically by running `./kanban init`).
-You can define the kanban statuses, and limit the maximum amount of todos per status.
+see `~/.kanban/.kanban.conf` (gets created automatically)
+You can define the kanban statuses, and limit the maximum amount of todos per status.<br>
+See `.kanban/kanban.conf` in case you initialized a board in your current dir (using `kanban init`)
 
 ## Idiotproof csv-editing 
 

From 66406f14746b177c9a09141f461849b22f5a8f36 Mon Sep 17 00:00:00 2001
From: smartmic <dev@famic.de>
Date: Wed, 21 Sep 2022 20:52:50 +0200
Subject: [PATCH 30/41] Change termcap to sgr0 for resetting terminal colors -
 fixes tput warning

---
 kanban | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kanban b/kanban
index 08ac79e..2f80dd8 100755
--- a/kanban
+++ b/kanban
@@ -190,7 +190,7 @@ stats(){
 }
 
 _init(){                          
-  trap "[[ ! -n \$NOCOLOR ]] && tput cnorm -- normal; " 0 1 5    # reset terminal colors to normal
+  trap "[[ -z \$NOCOLOR ]] && tput sgr0" 0 1 5    # reset terminal colors to normal
   (( $X > $XSMALL )) && unset SMALLSCREEN
   [[ -n $NOCOLOR ]] && { COL1="";COL0="";COL2=""; COL3=""; }
 }

From fc20756dc7cd28b7519768a26e2ffa2e15f8e878 Mon Sep 17 00:00:00 2001
From: Raf Czlonka <rczlonka@gmail.com>
Date: Fri, 23 Sep 2022 11:08:02 +0100
Subject: [PATCH 31/41] Use a unique temporary file name per invocation

Without it, the same file will be used if using kanban for several
projects at the same time.

The issue can be clearly observed while running:

	while : ; do kanban list ; done

under two separate shells, in two separate directories, for two
separate projects.

While there, strip the execute bit from files that don't need it.
---
 LICENSE           | 0
 README.md         | 0
 kanban            | 2 +-
 kanban.completion | 0
 test/test.csv     | 0
 5 files changed, 1 insertion(+), 1 deletion(-)
 mode change 100755 => 100644 LICENSE
 mode change 100755 => 100644 README.md
 mode change 100755 => 100644 kanban.completion
 mode change 100755 => 100644 test/test.csv

diff --git a/LICENSE b/LICENSE
old mode 100755
new mode 100644
diff --git a/README.md b/README.md
old mode 100755
new mode 100644
diff --git a/kanban b/kanban
index 08ac79e..3f3b4ac 100755
--- a/kanban
+++ b/kanban
@@ -66,7 +66,7 @@ COL0="\033[0m"
 COL1="\033[37;1m"
 COL2="\033[91;1m"
 COL3="\033[91;5m"
-TMP=~/.kanban.tmp
+TMP=$(mktemp -t kanban.XXXXXXXX)
 [[ ! -n $TERM ]] && TERM=vt100
 locale | grep -q "UTF-8" && UTF8=1
 [[ -n $PLAIN ]] && unset UTF8
diff --git a/kanban.completion b/kanban.completion
old mode 100755
new mode 100644
diff --git a/test/test.csv b/test/test.csv
old mode 100755
new mode 100644

From 217c0cbd8ac94c3811325668df59aa26442f3a8c Mon Sep 17 00:00:00 2001
From: Leon van Kammen <leonvankammen@gmail.com>
Date: Thu, 17 Oct 2024 11:01:15 +0200
Subject: [PATCH 32/41] fixed
 https://github.com/coderofsalvation/kanban.bash/issues/41

---
 kanban        |  13 +--
 test/test.csv | 290 +++++++++++++++++++++++++-------------------------
 2 files changed, 152 insertions(+), 151 deletions(-)

diff --git a/kanban b/kanban
index 74be1d2..d31eb25 100755
--- a/kanban
+++ b/kanban
@@ -83,9 +83,9 @@ FILE_CSV=".kanban/.kanban.csv"
 
 # migration: move config files of old kanban versions to .kanban
 moveconfig(){ 
-  mkdir $1/.kanban
+  mkdir "$1/.kanban"
   echo "[!] old config files detected..moving to .kanban-folder"
-  mv $1/.kanban.* $1/.kanban/.
+  mv "$1/.kanban".* "$1/.kanban/."
   sleep 3s
   clear
 }
@@ -129,12 +129,13 @@ createconfig(){
       [[ ! "$overwrite" == "y" ]] && echo "aborted" && exit 1;
     }
   }
-  [[ ! -d $dir/.kanban ]] && mkdir $dir/.kanban
-  echo "$config_example" > $dir/$FILE_CONF 
-  touch $dir/$FILE_CSV 
+  set -x
+  [[ ! -d "$dir/.kanban" ]] && mkdir "$dir/.kanban"
+  echo "$config_example" > "$dir/$FILE_CONF"
+  touch "$dir/$FILE_CSV" 
 }
 
-init(){ createconfig $(pwd); }
+init(){ createconfig "$(pwd)"; }
 
 tags(){
   cat $KANBANFILE | awk -F',' '{ print $2 }' | sed 's/,.*//g;s/"//g' | tail -n+2 | sort | uniq | tr '\n' ' '
diff --git a/test/test.csv b/test/test.csv
index 9875cd4..ada8e19 100644
--- a/test/test.csv
+++ b/test/test.csv
@@ -1,145 +1,145 @@
-"DOING","project10","fix item 1","HDHDHD","2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15"
-"HOLD","project10","fix item 2","H","2021-09-30@15:15"
-"HOLD","project10","fix item 3","H","2021-09-30@15:15"
-"HOLD","project10","fix item 4","H","2021-09-30@15:15"
-"HOLD","project10","fix item 5","H","2021-09-30@15:15"
-"DOING","project10","fix item 6","HDHDHD","2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15"
-"HOLD","project10","fix item 7","H","2021-09-30@15:15"
-"HOLD","project10","fix item 8","H","2021-09-30@15:15"
-"HOLD","project10","fix item 9","H","2021-09-30@15:15"
-"HOLD","project20","fix item 1","H","2021-09-30@15:15"
-"DOING","project20","fix item 2","HDHDHD","2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15"
-"HOLD","project20","fix item 3","H","2021-09-30@15:15"
-"HOLD","project20","fix item 4","H","2021-09-30@15:15"
-"HOLD","project20","fix item 5","H","2021-09-30@15:15"
-"HOLD","project20","fix item 6","H","2021-09-30@15:15"
-"DOING","project20","fix item 7","HDHDHD","2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15"
-"HOLD","project20","fix item 8","H","2021-09-30@15:15"
-"HOLD","project20","fix item 9","H","2021-09-30@15:15"
-"HOLD","project20","fix item 10","H","2021-09-30@15:15"
-"HOLD","project20","fix item 11","H","2021-09-30@15:15"
-"DOING","project20","fix item 12","HDHDHD","2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15"
-"HOLD","project20","fix item 13","H","2021-09-30@15:15"
-"HOLD","project20","fix item 14","H","2021-09-30@15:15"
-"HOLD","project20","fix item 15","H","2021-09-30@15:15"
-"HOLD","project20","fix item 16","H","2021-09-30@15:15"
-"DOING","project20","fix item 17","HDHDHD","2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15"
-"HOLD","project20","fix item 18","H","2021-09-30@15:15"
-"HOLD","project20","fix item 19","H","2021-09-30@15:15"
-"HOLD","project30","fix item 1","H","2021-09-30@15:15"
-"HOLD","project30","fix item 2","H","2021-09-30@15:15"
-"DOING","project30","fix item 3","HDHDHD","2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15"
-"HOLD","project30","fix item 4","H","2021-09-30@15:15"
-"HOLD","project30","fix item 5","H","2021-09-30@15:15"
-"HOLD","project30","fix item 6","H","2021-09-30@15:15"
-"HOLD","project30","fix item 7","H","2021-09-30@15:15"
-"DOING","project30","fix item 8","HDHDHD","2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15"
-"HOLD","project30","fix item 9","H","2021-09-30@15:15"
-"HOLD","project30","fix item 10","H","2021-09-30@15:15"
-"HOLD","project30","fix item 11","H","2021-09-30@15:15"
-"HOLD","project30","fix item 12","H","2021-09-30@15:15"
-"DOING","project30","fix item 13","HDHDHD","2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15"
-"HOLD","project30","fix item 14","H","2021-09-30@15:15"
-"HOLD","project30","fix item 15","H","2021-09-30@15:15"
-"HOLD","project30","fix item 16","H","2021-09-30@15:15"
-"HOLD","project30","fix item 17","H","2021-09-30@15:15"
-"DOING","project30","fix item 18","HDHDHD","2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15"
-"HOLD","project30","fix item 19","H","2021-09-30@15:15"
-"HOLD","project30","fix item 20","H","2021-09-30@15:15"
-"HOLD","project30","fix item 21","H","2021-09-30@15:15"
-"HOLD","project30","fix item 22","H","2021-09-30@15:15"
-"DOING","project30","fix item 23","HDHDHD","2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15"
-"HOLD","project30","fix item 24","H","2021-09-30@15:15"
-"HOLD","project30","fix item 25","H","2021-09-30@15:15"
-"HOLD","project30","fix item 26","H","2021-09-30@15:15"
-"HOLD","project30","fix item 27","H","2021-09-30@15:15"
-"DOING","project30","fix item 28","HDHDHD","2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15"
-"HOLD","project30","fix item 29","H","2021-09-30@15:15"
-"HOLD","project40","fix item 1","H","2021-09-30@15:15"
-"HOLD","project40","fix item 2","H","2021-09-30@15:15"
-"HOLD","project40","fix item 3","H","2021-09-30@15:15"
-"DOING","project40","fix item 4","HDHDHD","2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15"
-"HOLD","project40","fix item 5","H","2021-09-30@15:15"
-"HOLD","project40","fix item 6","H","2021-09-30@15:15"
-"HOLD","project40","fix item 7","H","2021-09-30@15:15"
-"HOLD","project40","fix item 8","H","2021-09-30@15:15"
-"DOING","project40","fix item 9","HDHDHD","2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15"
-"HOLD","project40","fix item 10","H","2021-09-30@15:15"
-"HOLD","project40","fix item 11","H","2021-09-30@15:15"
-"HOLD","project40","fix item 12","H","2021-09-30@15:15"
-"HOLD","project40","fix item 13","H","2021-09-30@15:15"
-"DOING","project40","fix item 14","HDHDHD","2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15"
-"HOLD","project40","fix item 15","H","2021-09-30@15:15"
-"HOLD","project40","fix item 16","H","2021-09-30@15:15"
-"HOLD","project40","fix item 17","H","2021-09-30@15:15"
-"HOLD","project40","fix item 18","H","2021-09-30@15:15"
-"DOING","project40","fix item 19","HDHDHD","2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15 2021-09-30@15:15"
-"HOLD","project40","fix item 20","H","2021-09-30@15:15"
-"HOLD","project40","fix item 21","H","2021-09-30@15:15"
-"HOLD","project40","fix item 22","H","2021-09-30@15:15"
-"HOLD","project40","fix item 23","H","2021-09-30@15:15"
-"HOLD","project40","fix item 24","H","2021-09-30@15:15"
-"HOLD","project40","fix item 25","H","2021-09-30@15:15"
-"HOLD","project40","fix item 26","H","2021-09-30@15:15"
-"HOLD","project40","fix item 27","H","2021-09-30@15:15"
-"HOLD","project40","fix item 28","H","2021-09-30@15:15"
-"HOLD","project40","fix item 29","H","2021-09-30@15:15"
-"HOLD","project40","fix item 30","H","2021-09-30@15:15"
-"HOLD","project40","fix item 31","H","2021-09-30@15:15"
-"HOLD","project40","fix item 32","H","2021-09-30@15:15"
-"HOLD","project40","fix item 33","H","2021-09-30@15:15"
-"HOLD","project40","fix item 34","H","2021-09-30@15:15"
-"HOLD","project40","fix item 35","H","2021-09-30@15:15"
-"HOLD","project40","fix item 36","H","2021-09-30@15:15"
-"HOLD","project40","fix item 37","H","2021-09-30@15:15"
-"HOLD","project40","fix item 38","H","2021-09-30@15:15"
-"HOLD","project40","fix item 39","H","2021-09-30@15:15"
-"HOLD","project50","fix item 1","H","2021-09-30@15:15"
-"HOLD","project50","fix item 2","H","2021-09-30@15:15"
-"HOLD","project50","fix item 3","H","2021-09-30@15:15"
-"HOLD","project50","fix item 4","H","2021-09-30@15:15"
-"HOLD","project50","fix item 5","H","2021-09-30@15:15"
-"HOLD","project50","fix item 6","H","2021-09-30@15:15"
-"HOLD","project50","fix item 7","H","2021-09-30@15:15"
-"HOLD","project50","fix item 8","H","2021-09-30@15:15"
-"HOLD","project50","fix item 9","H","2021-09-30@15:15"
-"HOLD","project50","fix item 10","H","2021-09-30@15:15"
-"HOLD","project50","fix item 11","H","2021-09-30@15:15"
-"HOLD","project50","fix item 12","H","2021-09-30@15:15"
-"HOLD","project50","fix item 13","H","2021-09-30@15:15"
-"HOLD","project50","fix item 14","H","2021-09-30@15:15"
-"HOLD","project50","fix item 15","H","2021-09-30@15:15"
-"HOLD","project50","fix item 16","H","2021-09-30@15:15"
-"HOLD","project50","fix item 17","H","2021-09-30@15:15"
-"HOLD","project50","fix item 18","H","2021-09-30@15:15"
-"HOLD","project50","fix item 19","H","2021-09-30@15:15"
-"HOLD","project50","fix item 20","H","2021-09-30@15:15"
-"HOLD","project50","fix item 21","H","2021-09-30@15:15"
-"HOLD","project50","fix item 22","H","2021-09-30@15:15"
-"HOLD","project50","fix item 23","H","2021-09-30@15:15"
-"HOLD","project50","fix item 24","H","2021-09-30@15:15"
-"HOLD","project50","fix item 25","H","2021-09-30@15:15"
-"HOLD","project50","fix item 26","H","2021-09-30@15:15"
-"HOLD","project50","fix item 27","H","2021-09-30@15:15"
-"HOLD","project50","fix item 28","H","2021-09-30@15:15"
-"HOLD","project50","fix item 29","H","2021-09-30@15:15"
-"HOLD","project50","fix item 30","H","2021-09-30@15:15"
-"HOLD","project50","fix item 31","H","2021-09-30@15:15"
-"HOLD","project50","fix item 32","H","2021-09-30@15:15"
-"HOLD","project50","fix item 33","H","2021-09-30@15:15"
-"HOLD","project50","fix item 34","H","2021-09-30@15:15"
-"HOLD","project50","fix item 35","H","2021-09-30@15:15"
-"HOLD","project50","fix item 36","H","2021-09-30@15:15"
-"HOLD","project50","fix item 37","H","2021-09-30@15:15"
-"HOLD","project50","fix item 38","H","2021-09-30@15:15"
-"HOLD","project50","fix item 39","H","2021-09-30@15:15"
-"HOLD","project50","fix item 40","H","2021-09-30@15:15"
-"HOLD","project50","fix item 41","H","2021-09-30@15:15"
-"HOLD","project50","fix item 42","H","2021-09-30@15:15"
-"HOLD","project50","fix item 43","H","2021-09-30@15:15"
-"HOLD","project50","fix item 44","H","2021-09-30@15:15"
-"HOLD","project50","fix item 45","H","2021-09-30@15:15"
-"HOLD","project50","fix item 46","H","2021-09-30@15:15"
-"HOLD","project50","fix item 47","H","2021-09-30@15:15"
-"HOLD","project50","fix item 48","H","2021-09-30@15:15"
-"HOLD","project50","fix item 49","H","2021-09-30@15:15"
+"DOING","project10","fix item 1","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
+"HOLD","project10","fix item 2","H","2024-10-17@11:00"
+"HOLD","project10","fix item 3","H","2024-10-17@11:00"
+"HOLD","project10","fix item 4","H","2024-10-17@11:00"
+"HOLD","project10","fix item 5","H","2024-10-17@11:00"
+"DOING","project10","fix item 6","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
+"HOLD","project10","fix item 7","H","2024-10-17@11:00"
+"HOLD","project10","fix item 8","H","2024-10-17@11:00"
+"HOLD","project10","fix item 9","H","2024-10-17@11:00"
+"HOLD","project20","fix item 1","H","2024-10-17@11:00"
+"DOING","project20","fix item 2","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
+"HOLD","project20","fix item 3","H","2024-10-17@11:00"
+"HOLD","project20","fix item 4","H","2024-10-17@11:00"
+"HOLD","project20","fix item 5","H","2024-10-17@11:00"
+"HOLD","project20","fix item 6","H","2024-10-17@11:00"
+"DOING","project20","fix item 7","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
+"HOLD","project20","fix item 8","H","2024-10-17@11:00"
+"HOLD","project20","fix item 9","H","2024-10-17@11:00"
+"HOLD","project20","fix item 10","H","2024-10-17@11:00"
+"HOLD","project20","fix item 11","H","2024-10-17@11:00"
+"DOING","project20","fix item 12","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
+"HOLD","project20","fix item 13","H","2024-10-17@11:00"
+"HOLD","project20","fix item 14","H","2024-10-17@11:00"
+"HOLD","project20","fix item 15","H","2024-10-17@11:00"
+"HOLD","project20","fix item 16","H","2024-10-17@11:00"
+"DOING","project20","fix item 17","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
+"HOLD","project20","fix item 18","H","2024-10-17@11:00"
+"HOLD","project20","fix item 19","H","2024-10-17@11:00"
+"HOLD","project30","fix item 1","H","2024-10-17@11:00"
+"HOLD","project30","fix item 2","H","2024-10-17@11:00"
+"DOING","project30","fix item 3","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
+"HOLD","project30","fix item 4","H","2024-10-17@11:00"
+"HOLD","project30","fix item 5","H","2024-10-17@11:00"
+"HOLD","project30","fix item 6","H","2024-10-17@11:00"
+"HOLD","project30","fix item 7","H","2024-10-17@11:00"
+"DOING","project30","fix item 8","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
+"HOLD","project30","fix item 9","H","2024-10-17@11:00"
+"HOLD","project30","fix item 10","H","2024-10-17@11:00"
+"HOLD","project30","fix item 11","H","2024-10-17@11:00"
+"HOLD","project30","fix item 12","H","2024-10-17@11:00"
+"DOING","project30","fix item 13","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
+"HOLD","project30","fix item 14","H","2024-10-17@11:00"
+"HOLD","project30","fix item 15","H","2024-10-17@11:00"
+"HOLD","project30","fix item 16","H","2024-10-17@11:00"
+"HOLD","project30","fix item 17","H","2024-10-17@11:00"
+"DOING","project30","fix item 18","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
+"HOLD","project30","fix item 19","H","2024-10-17@11:00"
+"HOLD","project30","fix item 20","H","2024-10-17@11:00"
+"HOLD","project30","fix item 21","H","2024-10-17@11:00"
+"HOLD","project30","fix item 22","H","2024-10-17@11:00"
+"DOING","project30","fix item 23","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
+"HOLD","project30","fix item 24","H","2024-10-17@11:00"
+"HOLD","project30","fix item 25","H","2024-10-17@11:00"
+"HOLD","project30","fix item 26","H","2024-10-17@11:00"
+"HOLD","project30","fix item 27","H","2024-10-17@11:00"
+"DOING","project30","fix item 28","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
+"HOLD","project30","fix item 29","H","2024-10-17@11:00"
+"HOLD","project40","fix item 1","H","2024-10-17@11:00"
+"HOLD","project40","fix item 2","H","2024-10-17@11:00"
+"HOLD","project40","fix item 3","H","2024-10-17@11:00"
+"DOING","project40","fix item 4","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
+"HOLD","project40","fix item 5","H","2024-10-17@11:00"
+"HOLD","project40","fix item 6","H","2024-10-17@11:00"
+"HOLD","project40","fix item 7","H","2024-10-17@11:00"
+"HOLD","project40","fix item 8","H","2024-10-17@11:00"
+"DOING","project40","fix item 9","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
+"HOLD","project40","fix item 10","H","2024-10-17@11:00"
+"HOLD","project40","fix item 11","H","2024-10-17@11:00"
+"HOLD","project40","fix item 12","H","2024-10-17@11:00"
+"HOLD","project40","fix item 13","H","2024-10-17@11:00"
+"DOING","project40","fix item 14","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
+"HOLD","project40","fix item 15","H","2024-10-17@11:00"
+"HOLD","project40","fix item 16","H","2024-10-17@11:00"
+"HOLD","project40","fix item 17","H","2024-10-17@11:00"
+"HOLD","project40","fix item 18","H","2024-10-17@11:00"
+"DOING","project40","fix item 19","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
+"HOLD","project40","fix item 20","H","2024-10-17@11:00"
+"HOLD","project40","fix item 21","H","2024-10-17@11:00"
+"HOLD","project40","fix item 22","H","2024-10-17@11:00"
+"HOLD","project40","fix item 23","H","2024-10-17@11:00"
+"HOLD","project40","fix item 24","H","2024-10-17@11:00"
+"HOLD","project40","fix item 25","H","2024-10-17@11:00"
+"HOLD","project40","fix item 26","H","2024-10-17@11:00"
+"HOLD","project40","fix item 27","H","2024-10-17@11:00"
+"HOLD","project40","fix item 28","H","2024-10-17@11:00"
+"HOLD","project40","fix item 29","H","2024-10-17@11:00"
+"HOLD","project40","fix item 30","H","2024-10-17@11:00"
+"HOLD","project40","fix item 31","H","2024-10-17@11:00"
+"HOLD","project40","fix item 32","H","2024-10-17@11:00"
+"HOLD","project40","fix item 33","H","2024-10-17@11:00"
+"HOLD","project40","fix item 34","H","2024-10-17@11:00"
+"HOLD","project40","fix item 35","H","2024-10-17@11:00"
+"HOLD","project40","fix item 36","H","2024-10-17@11:00"
+"HOLD","project40","fix item 37","H","2024-10-17@11:00"
+"HOLD","project40","fix item 38","H","2024-10-17@11:00"
+"HOLD","project40","fix item 39","H","2024-10-17@11:00"
+"HOLD","project50","fix item 1","H","2024-10-17@11:00"
+"HOLD","project50","fix item 2","H","2024-10-17@11:00"
+"HOLD","project50","fix item 3","H","2024-10-17@11:00"
+"HOLD","project50","fix item 4","H","2024-10-17@11:00"
+"HOLD","project50","fix item 5","H","2024-10-17@11:00"
+"HOLD","project50","fix item 6","H","2024-10-17@11:00"
+"HOLD","project50","fix item 7","H","2024-10-17@11:00"
+"HOLD","project50","fix item 8","H","2024-10-17@11:00"
+"HOLD","project50","fix item 9","H","2024-10-17@11:00"
+"HOLD","project50","fix item 10","H","2024-10-17@11:00"
+"HOLD","project50","fix item 11","H","2024-10-17@11:00"
+"HOLD","project50","fix item 12","H","2024-10-17@11:00"
+"HOLD","project50","fix item 13","H","2024-10-17@11:00"
+"HOLD","project50","fix item 14","H","2024-10-17@11:00"
+"HOLD","project50","fix item 15","H","2024-10-17@11:00"
+"HOLD","project50","fix item 16","H","2024-10-17@11:00"
+"HOLD","project50","fix item 17","H","2024-10-17@11:00"
+"HOLD","project50","fix item 18","H","2024-10-17@11:00"
+"HOLD","project50","fix item 19","H","2024-10-17@11:00"
+"HOLD","project50","fix item 20","H","2024-10-17@11:00"
+"HOLD","project50","fix item 21","H","2024-10-17@11:00"
+"HOLD","project50","fix item 22","H","2024-10-17@11:00"
+"HOLD","project50","fix item 23","H","2024-10-17@11:00"
+"HOLD","project50","fix item 24","H","2024-10-17@11:00"
+"HOLD","project50","fix item 25","H","2024-10-17@11:00"
+"HOLD","project50","fix item 26","H","2024-10-17@11:00"
+"HOLD","project50","fix item 27","H","2024-10-17@11:00"
+"HOLD","project50","fix item 28","H","2024-10-17@11:00"
+"HOLD","project50","fix item 29","H","2024-10-17@11:00"
+"HOLD","project50","fix item 30","H","2024-10-17@11:00"
+"HOLD","project50","fix item 31","H","2024-10-17@11:00"
+"HOLD","project50","fix item 32","H","2024-10-17@11:00"
+"HOLD","project50","fix item 33","H","2024-10-17@11:00"
+"HOLD","project50","fix item 34","H","2024-10-17@11:00"
+"HOLD","project50","fix item 35","H","2024-10-17@11:00"
+"HOLD","project50","fix item 36","H","2024-10-17@11:00"
+"HOLD","project50","fix item 37","H","2024-10-17@11:00"
+"HOLD","project50","fix item 38","H","2024-10-17@11:00"
+"HOLD","project50","fix item 39","H","2024-10-17@11:00"
+"HOLD","project50","fix item 40","H","2024-10-17@11:00"
+"HOLD","project50","fix item 41","H","2024-10-17@11:00"
+"HOLD","project50","fix item 42","H","2024-10-17@11:00"
+"HOLD","project50","fix item 43","H","2024-10-17@11:00"
+"HOLD","project50","fix item 44","H","2024-10-17@11:00"
+"HOLD","project50","fix item 45","H","2024-10-17@11:00"
+"HOLD","project50","fix item 46","H","2024-10-17@11:00"
+"HOLD","project50","fix item 47","H","2024-10-17@11:00"
+"HOLD","project50","fix item 48","H","2024-10-17@11:00"
+"HOLD","project50","fix item 49","H","2024-10-17@11:00"

From ee0b38479a9fc1f0dce58b8f93bc8a1c7c24ba98 Mon Sep 17 00:00:00 2001
From: Leon van Kammen <leonvankammen@gmail.com>
Date: Thu, 17 Oct 2024 11:07:06 +0200
Subject: [PATCH 33/41] fix for
 https://github.com/coderofsalvation/kanban.bash/issues/40

---
 kanban        |  22 ++--
 test/test.csv | 290 +++++++++++++++++++++++++-------------------------
 2 files changed, 156 insertions(+), 156 deletions(-)

diff --git a/kanban b/kanban
index d31eb25..7d50913 100755
--- a/kanban
+++ b/kanban
@@ -129,7 +129,6 @@ createconfig(){
       [[ ! "$overwrite" == "y" ]] && echo "aborted" && exit 1;
     }
   }
-  set -x
   [[ ! -d "$dir/.kanban" ]] && mkdir "$dir/.kanban"
   echo "$config_example" > "$dir/$FILE_CONF"
   touch "$dir/$FILE_CSV" 
@@ -138,7 +137,8 @@ createconfig(){
 init(){ createconfig "$(pwd)"; }
 
 tags(){
-  cat $KANBANFILE | awk -F',' '{ print $2 }' | sed 's/,.*//g;s/"//g' | tail -n+2 | sort | uniq | tr '\n' ' '
+  cat "$KANBANFILE" | awk -F',' '{ print $2 }' | sed 's/,.*//g;s/"//g' | tail -n+1 | sort | uniq | tr '\n' ' '
+  echo
 }
 
 get_statuses(){
@@ -161,7 +161,7 @@ add(){
   status="$1"
   csvline='"'$1'","'$2'"'; shift;shift;
   csvline="$csvline,\"$*\",\"${status:0:1}\",\"$(get_current_date)\"\""
-  echo "${csvline:0:$((${#csvline}-1))}" >> $KANBANFILE 
+  echo "${csvline:0:$((${#csvline}-1))}" >> "$KANBANFILE" 
 }
 
 evaluate(){
@@ -207,7 +207,7 @@ list(){
 
 create_index(){
   rm $TMP.index &>/dev/null
-  cat -n $KANBANFILE | sed 's/^[ ]\+//g;s/\t/,/g;s/"\/.*\//"/g' | evaluate >> $TMP.index
+  cat -n "$KANBANFILE" | sed 's/^[ ]\+//g;s/\t/,/g;s/"\/.*\//"/g' | evaluate >> $TMP.index
 }
 
 columnize(){
@@ -271,7 +271,7 @@ show(){
 get_current_date(){ date "+%Y-%m-%d@%H:%M"; }
 
 update_item_status(){
-  item="$( cat $KANBANFILE | awk "{ if (NR==$1) print \$0 }" )"
+  item="$( cat "$KANBANFILE" | awk "{ if (NR==$1) print \$0 }" )"
   [[ ${#item} == 0 ]] && echo "item $1 not found" && exit 1 
   if [[ -n "$2" ]]; then  # status change 
     status="$(echo "$item" | awk -F',' '{ print $1 }' | sed 's/"//g' )"
@@ -285,13 +285,13 @@ update_item_status(){
     newitem="${newitem/$status/$2}"
     newitem="${newitem/$flags/$newflags}"
     newitem="${newitem/$dates/$newdates}"
-    sed -i "s|$item|$newitem|g" $KANBANFILE 
+    sed -i "s|$item|$newitem|g" "$KANBANFILE" 
     echo "$status -> $2"
   fi
 }
 
 update_item(){
-  item="$( cat $KANBANFILE | awk "{ if (NR==$1) print \$0 }" )"
+  item="$( cat "$KANBANFILE" | awk "{ if (NR==$1) print \$0 }" )"
   [[ ${#item} == 0 ]] && echo "item $1 not found" && exit 1 
   status="$(echo "$item" | awk -F',' '{ print $1 }')"
   file="$(echo "$item" | awk -F',' '{ print $3 }')"
@@ -303,7 +303,7 @@ update_item(){
 #
 '"$item" > $TMP.update
   ${EDITOR} $TMP.update
-  sed -i "s|$item|$(cat $TMP.update | tail -n1)|g" $KANBANFILE 
+  sed -i "s|$item|$(cat $TMP.update | tail -n1)|g" "$KANBANFILE" 
   echo "updated item $1"
 }
 
@@ -325,11 +325,11 @@ csv(){
 [[   -f $FILE_CONF     ]] && source $FILE_CONF 
 [[ ! -f $FILE_CONF     ]] && source ~/$FILE_CONF 
 
-if [[ ! -n $KANBANFILE ]]; then 
+if [[ ! -n "$KANBANFILE" ]]; then 
   [[ -f "$FILE_CSV" ]] && KANBANFILE="$(pwd)/$FILE_CSV"
-  [[ ! -f $KANBANFILE ]] && KANBANFILE=~/"$FILE_CSV"
+  [[ ! -f "$KANBANFILE" ]] && KANBANFILE=~/"$FILE_CSV"
 fi
-[[ ! -f $KANBANFILE ]] && { echo "$KANBANFILE does not exist"; exit; }
+[[ ! -f "$KANBANFILE" ]] && { echo "$KANBANFILE does not exist"; exit; }
 
 
 # execute main
diff --git a/test/test.csv b/test/test.csv
index ada8e19..42145c1 100644
--- a/test/test.csv
+++ b/test/test.csv
@@ -1,145 +1,145 @@
-"DOING","project10","fix item 1","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
-"HOLD","project10","fix item 2","H","2024-10-17@11:00"
-"HOLD","project10","fix item 3","H","2024-10-17@11:00"
-"HOLD","project10","fix item 4","H","2024-10-17@11:00"
-"HOLD","project10","fix item 5","H","2024-10-17@11:00"
-"DOING","project10","fix item 6","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
-"HOLD","project10","fix item 7","H","2024-10-17@11:00"
-"HOLD","project10","fix item 8","H","2024-10-17@11:00"
-"HOLD","project10","fix item 9","H","2024-10-17@11:00"
-"HOLD","project20","fix item 1","H","2024-10-17@11:00"
-"DOING","project20","fix item 2","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
-"HOLD","project20","fix item 3","H","2024-10-17@11:00"
-"HOLD","project20","fix item 4","H","2024-10-17@11:00"
-"HOLD","project20","fix item 5","H","2024-10-17@11:00"
-"HOLD","project20","fix item 6","H","2024-10-17@11:00"
-"DOING","project20","fix item 7","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
-"HOLD","project20","fix item 8","H","2024-10-17@11:00"
-"HOLD","project20","fix item 9","H","2024-10-17@11:00"
-"HOLD","project20","fix item 10","H","2024-10-17@11:00"
-"HOLD","project20","fix item 11","H","2024-10-17@11:00"
-"DOING","project20","fix item 12","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
-"HOLD","project20","fix item 13","H","2024-10-17@11:00"
-"HOLD","project20","fix item 14","H","2024-10-17@11:00"
-"HOLD","project20","fix item 15","H","2024-10-17@11:00"
-"HOLD","project20","fix item 16","H","2024-10-17@11:00"
-"DOING","project20","fix item 17","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
-"HOLD","project20","fix item 18","H","2024-10-17@11:00"
-"HOLD","project20","fix item 19","H","2024-10-17@11:00"
-"HOLD","project30","fix item 1","H","2024-10-17@11:00"
-"HOLD","project30","fix item 2","H","2024-10-17@11:00"
-"DOING","project30","fix item 3","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
-"HOLD","project30","fix item 4","H","2024-10-17@11:00"
-"HOLD","project30","fix item 5","H","2024-10-17@11:00"
-"HOLD","project30","fix item 6","H","2024-10-17@11:00"
-"HOLD","project30","fix item 7","H","2024-10-17@11:00"
-"DOING","project30","fix item 8","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
-"HOLD","project30","fix item 9","H","2024-10-17@11:00"
-"HOLD","project30","fix item 10","H","2024-10-17@11:00"
-"HOLD","project30","fix item 11","H","2024-10-17@11:00"
-"HOLD","project30","fix item 12","H","2024-10-17@11:00"
-"DOING","project30","fix item 13","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
-"HOLD","project30","fix item 14","H","2024-10-17@11:00"
-"HOLD","project30","fix item 15","H","2024-10-17@11:00"
-"HOLD","project30","fix item 16","H","2024-10-17@11:00"
-"HOLD","project30","fix item 17","H","2024-10-17@11:00"
-"DOING","project30","fix item 18","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
-"HOLD","project30","fix item 19","H","2024-10-17@11:00"
-"HOLD","project30","fix item 20","H","2024-10-17@11:00"
-"HOLD","project30","fix item 21","H","2024-10-17@11:00"
-"HOLD","project30","fix item 22","H","2024-10-17@11:00"
-"DOING","project30","fix item 23","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
-"HOLD","project30","fix item 24","H","2024-10-17@11:00"
-"HOLD","project30","fix item 25","H","2024-10-17@11:00"
-"HOLD","project30","fix item 26","H","2024-10-17@11:00"
-"HOLD","project30","fix item 27","H","2024-10-17@11:00"
-"DOING","project30","fix item 28","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
-"HOLD","project30","fix item 29","H","2024-10-17@11:00"
-"HOLD","project40","fix item 1","H","2024-10-17@11:00"
-"HOLD","project40","fix item 2","H","2024-10-17@11:00"
-"HOLD","project40","fix item 3","H","2024-10-17@11:00"
-"DOING","project40","fix item 4","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
-"HOLD","project40","fix item 5","H","2024-10-17@11:00"
-"HOLD","project40","fix item 6","H","2024-10-17@11:00"
-"HOLD","project40","fix item 7","H","2024-10-17@11:00"
-"HOLD","project40","fix item 8","H","2024-10-17@11:00"
-"DOING","project40","fix item 9","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
-"HOLD","project40","fix item 10","H","2024-10-17@11:00"
-"HOLD","project40","fix item 11","H","2024-10-17@11:00"
-"HOLD","project40","fix item 12","H","2024-10-17@11:00"
-"HOLD","project40","fix item 13","H","2024-10-17@11:00"
-"DOING","project40","fix item 14","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
-"HOLD","project40","fix item 15","H","2024-10-17@11:00"
-"HOLD","project40","fix item 16","H","2024-10-17@11:00"
-"HOLD","project40","fix item 17","H","2024-10-17@11:00"
-"HOLD","project40","fix item 18","H","2024-10-17@11:00"
-"DOING","project40","fix item 19","HDHDHD","2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00 2024-10-17@11:00"
-"HOLD","project40","fix item 20","H","2024-10-17@11:00"
-"HOLD","project40","fix item 21","H","2024-10-17@11:00"
-"HOLD","project40","fix item 22","H","2024-10-17@11:00"
-"HOLD","project40","fix item 23","H","2024-10-17@11:00"
-"HOLD","project40","fix item 24","H","2024-10-17@11:00"
-"HOLD","project40","fix item 25","H","2024-10-17@11:00"
-"HOLD","project40","fix item 26","H","2024-10-17@11:00"
-"HOLD","project40","fix item 27","H","2024-10-17@11:00"
-"HOLD","project40","fix item 28","H","2024-10-17@11:00"
-"HOLD","project40","fix item 29","H","2024-10-17@11:00"
-"HOLD","project40","fix item 30","H","2024-10-17@11:00"
-"HOLD","project40","fix item 31","H","2024-10-17@11:00"
-"HOLD","project40","fix item 32","H","2024-10-17@11:00"
-"HOLD","project40","fix item 33","H","2024-10-17@11:00"
-"HOLD","project40","fix item 34","H","2024-10-17@11:00"
-"HOLD","project40","fix item 35","H","2024-10-17@11:00"
-"HOLD","project40","fix item 36","H","2024-10-17@11:00"
-"HOLD","project40","fix item 37","H","2024-10-17@11:00"
-"HOLD","project40","fix item 38","H","2024-10-17@11:00"
-"HOLD","project40","fix item 39","H","2024-10-17@11:00"
-"HOLD","project50","fix item 1","H","2024-10-17@11:00"
-"HOLD","project50","fix item 2","H","2024-10-17@11:00"
-"HOLD","project50","fix item 3","H","2024-10-17@11:00"
-"HOLD","project50","fix item 4","H","2024-10-17@11:00"
-"HOLD","project50","fix item 5","H","2024-10-17@11:00"
-"HOLD","project50","fix item 6","H","2024-10-17@11:00"
-"HOLD","project50","fix item 7","H","2024-10-17@11:00"
-"HOLD","project50","fix item 8","H","2024-10-17@11:00"
-"HOLD","project50","fix item 9","H","2024-10-17@11:00"
-"HOLD","project50","fix item 10","H","2024-10-17@11:00"
-"HOLD","project50","fix item 11","H","2024-10-17@11:00"
-"HOLD","project50","fix item 12","H","2024-10-17@11:00"
-"HOLD","project50","fix item 13","H","2024-10-17@11:00"
-"HOLD","project50","fix item 14","H","2024-10-17@11:00"
-"HOLD","project50","fix item 15","H","2024-10-17@11:00"
-"HOLD","project50","fix item 16","H","2024-10-17@11:00"
-"HOLD","project50","fix item 17","H","2024-10-17@11:00"
-"HOLD","project50","fix item 18","H","2024-10-17@11:00"
-"HOLD","project50","fix item 19","H","2024-10-17@11:00"
-"HOLD","project50","fix item 20","H","2024-10-17@11:00"
-"HOLD","project50","fix item 21","H","2024-10-17@11:00"
-"HOLD","project50","fix item 22","H","2024-10-17@11:00"
-"HOLD","project50","fix item 23","H","2024-10-17@11:00"
-"HOLD","project50","fix item 24","H","2024-10-17@11:00"
-"HOLD","project50","fix item 25","H","2024-10-17@11:00"
-"HOLD","project50","fix item 26","H","2024-10-17@11:00"
-"HOLD","project50","fix item 27","H","2024-10-17@11:00"
-"HOLD","project50","fix item 28","H","2024-10-17@11:00"
-"HOLD","project50","fix item 29","H","2024-10-17@11:00"
-"HOLD","project50","fix item 30","H","2024-10-17@11:00"
-"HOLD","project50","fix item 31","H","2024-10-17@11:00"
-"HOLD","project50","fix item 32","H","2024-10-17@11:00"
-"HOLD","project50","fix item 33","H","2024-10-17@11:00"
-"HOLD","project50","fix item 34","H","2024-10-17@11:00"
-"HOLD","project50","fix item 35","H","2024-10-17@11:00"
-"HOLD","project50","fix item 36","H","2024-10-17@11:00"
-"HOLD","project50","fix item 37","H","2024-10-17@11:00"
-"HOLD","project50","fix item 38","H","2024-10-17@11:00"
-"HOLD","project50","fix item 39","H","2024-10-17@11:00"
-"HOLD","project50","fix item 40","H","2024-10-17@11:00"
-"HOLD","project50","fix item 41","H","2024-10-17@11:00"
-"HOLD","project50","fix item 42","H","2024-10-17@11:00"
-"HOLD","project50","fix item 43","H","2024-10-17@11:00"
-"HOLD","project50","fix item 44","H","2024-10-17@11:00"
-"HOLD","project50","fix item 45","H","2024-10-17@11:00"
-"HOLD","project50","fix item 46","H","2024-10-17@11:00"
-"HOLD","project50","fix item 47","H","2024-10-17@11:00"
-"HOLD","project50","fix item 48","H","2024-10-17@11:00"
-"HOLD","project50","fix item 49","H","2024-10-17@11:00"
+"DOING","project10","fix item 1","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
+"HOLD","project10","fix item 2","H","2024-10-17@11:06"
+"HOLD","project10","fix item 3","H","2024-10-17@11:06"
+"HOLD","project10","fix item 4","H","2024-10-17@11:06"
+"HOLD","project10","fix item 5","H","2024-10-17@11:06"
+"DOING","project10","fix item 6","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
+"HOLD","project10","fix item 7","H","2024-10-17@11:06"
+"HOLD","project10","fix item 8","H","2024-10-17@11:06"
+"HOLD","project10","fix item 9","H","2024-10-17@11:06"
+"HOLD","project20","fix item 1","H","2024-10-17@11:06"
+"DOING","project20","fix item 2","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
+"HOLD","project20","fix item 3","H","2024-10-17@11:06"
+"HOLD","project20","fix item 4","H","2024-10-17@11:06"
+"HOLD","project20","fix item 5","H","2024-10-17@11:06"
+"HOLD","project20","fix item 6","H","2024-10-17@11:06"
+"DOING","project20","fix item 7","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
+"HOLD","project20","fix item 8","H","2024-10-17@11:06"
+"HOLD","project20","fix item 9","H","2024-10-17@11:06"
+"HOLD","project20","fix item 10","H","2024-10-17@11:06"
+"HOLD","project20","fix item 11","H","2024-10-17@11:06"
+"DOING","project20","fix item 12","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
+"HOLD","project20","fix item 13","H","2024-10-17@11:06"
+"HOLD","project20","fix item 14","H","2024-10-17@11:06"
+"HOLD","project20","fix item 15","H","2024-10-17@11:06"
+"HOLD","project20","fix item 16","H","2024-10-17@11:06"
+"DOING","project20","fix item 17","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
+"HOLD","project20","fix item 18","H","2024-10-17@11:06"
+"HOLD","project20","fix item 19","H","2024-10-17@11:06"
+"HOLD","project30","fix item 1","H","2024-10-17@11:06"
+"HOLD","project30","fix item 2","H","2024-10-17@11:06"
+"DOING","project30","fix item 3","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
+"HOLD","project30","fix item 4","H","2024-10-17@11:06"
+"HOLD","project30","fix item 5","H","2024-10-17@11:06"
+"HOLD","project30","fix item 6","H","2024-10-17@11:06"
+"HOLD","project30","fix item 7","H","2024-10-17@11:06"
+"DOING","project30","fix item 8","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
+"HOLD","project30","fix item 9","H","2024-10-17@11:06"
+"HOLD","project30","fix item 10","H","2024-10-17@11:06"
+"HOLD","project30","fix item 11","H","2024-10-17@11:06"
+"HOLD","project30","fix item 12","H","2024-10-17@11:06"
+"DOING","project30","fix item 13","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
+"HOLD","project30","fix item 14","H","2024-10-17@11:06"
+"HOLD","project30","fix item 15","H","2024-10-17@11:06"
+"HOLD","project30","fix item 16","H","2024-10-17@11:06"
+"HOLD","project30","fix item 17","H","2024-10-17@11:06"
+"DOING","project30","fix item 18","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
+"HOLD","project30","fix item 19","H","2024-10-17@11:06"
+"HOLD","project30","fix item 20","H","2024-10-17@11:06"
+"HOLD","project30","fix item 21","H","2024-10-17@11:06"
+"HOLD","project30","fix item 22","H","2024-10-17@11:06"
+"DOING","project30","fix item 23","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
+"HOLD","project30","fix item 24","H","2024-10-17@11:06"
+"HOLD","project30","fix item 25","H","2024-10-17@11:06"
+"HOLD","project30","fix item 26","H","2024-10-17@11:06"
+"HOLD","project30","fix item 27","H","2024-10-17@11:06"
+"DOING","project30","fix item 28","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
+"HOLD","project30","fix item 29","H","2024-10-17@11:06"
+"HOLD","project40","fix item 1","H","2024-10-17@11:06"
+"HOLD","project40","fix item 2","H","2024-10-17@11:06"
+"HOLD","project40","fix item 3","H","2024-10-17@11:06"
+"DOING","project40","fix item 4","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
+"HOLD","project40","fix item 5","H","2024-10-17@11:06"
+"HOLD","project40","fix item 6","H","2024-10-17@11:06"
+"HOLD","project40","fix item 7","H","2024-10-17@11:06"
+"HOLD","project40","fix item 8","H","2024-10-17@11:06"
+"DOING","project40","fix item 9","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
+"HOLD","project40","fix item 10","H","2024-10-17@11:06"
+"HOLD","project40","fix item 11","H","2024-10-17@11:06"
+"HOLD","project40","fix item 12","H","2024-10-17@11:06"
+"HOLD","project40","fix item 13","H","2024-10-17@11:06"
+"DOING","project40","fix item 14","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
+"HOLD","project40","fix item 15","H","2024-10-17@11:06"
+"HOLD","project40","fix item 16","H","2024-10-17@11:06"
+"HOLD","project40","fix item 17","H","2024-10-17@11:06"
+"HOLD","project40","fix item 18","H","2024-10-17@11:06"
+"DOING","project40","fix item 19","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
+"HOLD","project40","fix item 20","H","2024-10-17@11:06"
+"HOLD","project40","fix item 21","H","2024-10-17@11:06"
+"HOLD","project40","fix item 22","H","2024-10-17@11:06"
+"HOLD","project40","fix item 23","H","2024-10-17@11:06"
+"HOLD","project40","fix item 24","H","2024-10-17@11:06"
+"HOLD","project40","fix item 25","H","2024-10-17@11:06"
+"HOLD","project40","fix item 26","H","2024-10-17@11:06"
+"HOLD","project40","fix item 27","H","2024-10-17@11:06"
+"HOLD","project40","fix item 28","H","2024-10-17@11:06"
+"HOLD","project40","fix item 29","H","2024-10-17@11:06"
+"HOLD","project40","fix item 30","H","2024-10-17@11:06"
+"HOLD","project40","fix item 31","H","2024-10-17@11:06"
+"HOLD","project40","fix item 32","H","2024-10-17@11:06"
+"HOLD","project40","fix item 33","H","2024-10-17@11:06"
+"HOLD","project40","fix item 34","H","2024-10-17@11:06"
+"HOLD","project40","fix item 35","H","2024-10-17@11:06"
+"HOLD","project40","fix item 36","H","2024-10-17@11:06"
+"HOLD","project40","fix item 37","H","2024-10-17@11:06"
+"HOLD","project40","fix item 38","H","2024-10-17@11:06"
+"HOLD","project40","fix item 39","H","2024-10-17@11:06"
+"HOLD","project50","fix item 1","H","2024-10-17@11:06"
+"HOLD","project50","fix item 2","H","2024-10-17@11:06"
+"HOLD","project50","fix item 3","H","2024-10-17@11:06"
+"HOLD","project50","fix item 4","H","2024-10-17@11:06"
+"HOLD","project50","fix item 5","H","2024-10-17@11:06"
+"HOLD","project50","fix item 6","H","2024-10-17@11:06"
+"HOLD","project50","fix item 7","H","2024-10-17@11:06"
+"HOLD","project50","fix item 8","H","2024-10-17@11:06"
+"HOLD","project50","fix item 9","H","2024-10-17@11:06"
+"HOLD","project50","fix item 10","H","2024-10-17@11:06"
+"HOLD","project50","fix item 11","H","2024-10-17@11:06"
+"HOLD","project50","fix item 12","H","2024-10-17@11:06"
+"HOLD","project50","fix item 13","H","2024-10-17@11:06"
+"HOLD","project50","fix item 14","H","2024-10-17@11:06"
+"HOLD","project50","fix item 15","H","2024-10-17@11:06"
+"HOLD","project50","fix item 16","H","2024-10-17@11:06"
+"HOLD","project50","fix item 17","H","2024-10-17@11:06"
+"HOLD","project50","fix item 18","H","2024-10-17@11:06"
+"HOLD","project50","fix item 19","H","2024-10-17@11:06"
+"HOLD","project50","fix item 20","H","2024-10-17@11:06"
+"HOLD","project50","fix item 21","H","2024-10-17@11:06"
+"HOLD","project50","fix item 22","H","2024-10-17@11:06"
+"HOLD","project50","fix item 23","H","2024-10-17@11:06"
+"HOLD","project50","fix item 24","H","2024-10-17@11:06"
+"HOLD","project50","fix item 25","H","2024-10-17@11:06"
+"HOLD","project50","fix item 26","H","2024-10-17@11:06"
+"HOLD","project50","fix item 27","H","2024-10-17@11:06"
+"HOLD","project50","fix item 28","H","2024-10-17@11:06"
+"HOLD","project50","fix item 29","H","2024-10-17@11:06"
+"HOLD","project50","fix item 30","H","2024-10-17@11:06"
+"HOLD","project50","fix item 31","H","2024-10-17@11:06"
+"HOLD","project50","fix item 32","H","2024-10-17@11:06"
+"HOLD","project50","fix item 33","H","2024-10-17@11:06"
+"HOLD","project50","fix item 34","H","2024-10-17@11:06"
+"HOLD","project50","fix item 35","H","2024-10-17@11:06"
+"HOLD","project50","fix item 36","H","2024-10-17@11:06"
+"HOLD","project50","fix item 37","H","2024-10-17@11:06"
+"HOLD","project50","fix item 38","H","2024-10-17@11:06"
+"HOLD","project50","fix item 39","H","2024-10-17@11:06"
+"HOLD","project50","fix item 40","H","2024-10-17@11:06"
+"HOLD","project50","fix item 41","H","2024-10-17@11:06"
+"HOLD","project50","fix item 42","H","2024-10-17@11:06"
+"HOLD","project50","fix item 43","H","2024-10-17@11:06"
+"HOLD","project50","fix item 44","H","2024-10-17@11:06"
+"HOLD","project50","fix item 45","H","2024-10-17@11:06"
+"HOLD","project50","fix item 46","H","2024-10-17@11:06"
+"HOLD","project50","fix item 47","H","2024-10-17@11:06"
+"HOLD","project50","fix item 48","H","2024-10-17@11:06"
+"HOLD","project50","fix item 49","H","2024-10-17@11:06"

From 410fdca05c44c380e48d3a6f325098384a38cb22 Mon Sep 17 00:00:00 2001
From: Leon van Kammen <leonvankammen@gmail.com>
Date: Thu, 17 Oct 2024 11:30:23 +0200
Subject: [PATCH 34/41] fixed
 https://github.com/coderofsalvation/kanban.bash/issues/38

---
 kanban | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/kanban b/kanban
index 7d50913..7ffe579 100755
--- a/kanban
+++ b/kanban
@@ -6,7 +6,7 @@
 # 
 #   kanban init                             # initialize kanban in current directory
 #   kanban add                              # add item interactive (adviced) 
-#   kanban show [status] ....               # show ascii kanban board [with status]
+#   kanban show [dir with .kanban]          # show global [or nested] ascii kanbanboard
 #   kanban <id>                             # edit or update item 
 #   kanban <id> <status>                    # update status of todo id (uses $EDITOR as preferred editor)
 #   kanban <status> .....                   # list only todo items with this status(es)
@@ -266,6 +266,15 @@ show(){
   } | columnize
   [[ -n $SMALLSCREEN ]] && echo -e "    ${COL1}(${COL0} small terminal detected, hiding certain columns ${COL1})"
   echo ""
+  find . -type f -mindepth 3 -iname '*kanban.conf*' | awk '{
+    if( !START ){
+      print "kanbans: "
+      START=1
+    }
+    gsub("^\.\/","",$0)
+    gsub("\/.kanban.*","",$0)
+    print "   ├─ "$0 
+  }'
 }
 
 get_current_date(){ date "+%Y-%m-%d@%H:%M"; }

From 92e4d340f43cca98b842c470bfd05bdd18e99392 Mon Sep 17 00:00:00 2001
From: Leon van Kammen <leonvankammen@gmail.com>
Date: Thu, 17 Oct 2024 11:36:33 +0200
Subject: [PATCH 35/41] master: work in progress [might break]

---
 test/test.csv | 290 +++++++++++++++++++++++++-------------------------
 1 file changed, 145 insertions(+), 145 deletions(-)

diff --git a/test/test.csv b/test/test.csv
index 42145c1..0a19cd7 100644
--- a/test/test.csv
+++ b/test/test.csv
@@ -1,145 +1,145 @@
-"DOING","project10","fix item 1","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
-"HOLD","project10","fix item 2","H","2024-10-17@11:06"
-"HOLD","project10","fix item 3","H","2024-10-17@11:06"
-"HOLD","project10","fix item 4","H","2024-10-17@11:06"
-"HOLD","project10","fix item 5","H","2024-10-17@11:06"
-"DOING","project10","fix item 6","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
-"HOLD","project10","fix item 7","H","2024-10-17@11:06"
-"HOLD","project10","fix item 8","H","2024-10-17@11:06"
-"HOLD","project10","fix item 9","H","2024-10-17@11:06"
-"HOLD","project20","fix item 1","H","2024-10-17@11:06"
-"DOING","project20","fix item 2","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
-"HOLD","project20","fix item 3","H","2024-10-17@11:06"
-"HOLD","project20","fix item 4","H","2024-10-17@11:06"
-"HOLD","project20","fix item 5","H","2024-10-17@11:06"
-"HOLD","project20","fix item 6","H","2024-10-17@11:06"
-"DOING","project20","fix item 7","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
-"HOLD","project20","fix item 8","H","2024-10-17@11:06"
-"HOLD","project20","fix item 9","H","2024-10-17@11:06"
-"HOLD","project20","fix item 10","H","2024-10-17@11:06"
-"HOLD","project20","fix item 11","H","2024-10-17@11:06"
-"DOING","project20","fix item 12","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
-"HOLD","project20","fix item 13","H","2024-10-17@11:06"
-"HOLD","project20","fix item 14","H","2024-10-17@11:06"
-"HOLD","project20","fix item 15","H","2024-10-17@11:06"
-"HOLD","project20","fix item 16","H","2024-10-17@11:06"
-"DOING","project20","fix item 17","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
-"HOLD","project20","fix item 18","H","2024-10-17@11:06"
-"HOLD","project20","fix item 19","H","2024-10-17@11:06"
-"HOLD","project30","fix item 1","H","2024-10-17@11:06"
-"HOLD","project30","fix item 2","H","2024-10-17@11:06"
-"DOING","project30","fix item 3","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
-"HOLD","project30","fix item 4","H","2024-10-17@11:06"
-"HOLD","project30","fix item 5","H","2024-10-17@11:06"
-"HOLD","project30","fix item 6","H","2024-10-17@11:06"
-"HOLD","project30","fix item 7","H","2024-10-17@11:06"
-"DOING","project30","fix item 8","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
-"HOLD","project30","fix item 9","H","2024-10-17@11:06"
-"HOLD","project30","fix item 10","H","2024-10-17@11:06"
-"HOLD","project30","fix item 11","H","2024-10-17@11:06"
-"HOLD","project30","fix item 12","H","2024-10-17@11:06"
-"DOING","project30","fix item 13","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
-"HOLD","project30","fix item 14","H","2024-10-17@11:06"
-"HOLD","project30","fix item 15","H","2024-10-17@11:06"
-"HOLD","project30","fix item 16","H","2024-10-17@11:06"
-"HOLD","project30","fix item 17","H","2024-10-17@11:06"
-"DOING","project30","fix item 18","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
-"HOLD","project30","fix item 19","H","2024-10-17@11:06"
-"HOLD","project30","fix item 20","H","2024-10-17@11:06"
-"HOLD","project30","fix item 21","H","2024-10-17@11:06"
-"HOLD","project30","fix item 22","H","2024-10-17@11:06"
-"DOING","project30","fix item 23","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
-"HOLD","project30","fix item 24","H","2024-10-17@11:06"
-"HOLD","project30","fix item 25","H","2024-10-17@11:06"
-"HOLD","project30","fix item 26","H","2024-10-17@11:06"
-"HOLD","project30","fix item 27","H","2024-10-17@11:06"
-"DOING","project30","fix item 28","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
-"HOLD","project30","fix item 29","H","2024-10-17@11:06"
-"HOLD","project40","fix item 1","H","2024-10-17@11:06"
-"HOLD","project40","fix item 2","H","2024-10-17@11:06"
-"HOLD","project40","fix item 3","H","2024-10-17@11:06"
-"DOING","project40","fix item 4","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
-"HOLD","project40","fix item 5","H","2024-10-17@11:06"
-"HOLD","project40","fix item 6","H","2024-10-17@11:06"
-"HOLD","project40","fix item 7","H","2024-10-17@11:06"
-"HOLD","project40","fix item 8","H","2024-10-17@11:06"
-"DOING","project40","fix item 9","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
-"HOLD","project40","fix item 10","H","2024-10-17@11:06"
-"HOLD","project40","fix item 11","H","2024-10-17@11:06"
-"HOLD","project40","fix item 12","H","2024-10-17@11:06"
-"HOLD","project40","fix item 13","H","2024-10-17@11:06"
-"DOING","project40","fix item 14","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
-"HOLD","project40","fix item 15","H","2024-10-17@11:06"
-"HOLD","project40","fix item 16","H","2024-10-17@11:06"
-"HOLD","project40","fix item 17","H","2024-10-17@11:06"
-"HOLD","project40","fix item 18","H","2024-10-17@11:06"
-"DOING","project40","fix item 19","HDHDHD","2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06 2024-10-17@11:06"
-"HOLD","project40","fix item 20","H","2024-10-17@11:06"
-"HOLD","project40","fix item 21","H","2024-10-17@11:06"
-"HOLD","project40","fix item 22","H","2024-10-17@11:06"
-"HOLD","project40","fix item 23","H","2024-10-17@11:06"
-"HOLD","project40","fix item 24","H","2024-10-17@11:06"
-"HOLD","project40","fix item 25","H","2024-10-17@11:06"
-"HOLD","project40","fix item 26","H","2024-10-17@11:06"
-"HOLD","project40","fix item 27","H","2024-10-17@11:06"
-"HOLD","project40","fix item 28","H","2024-10-17@11:06"
-"HOLD","project40","fix item 29","H","2024-10-17@11:06"
-"HOLD","project40","fix item 30","H","2024-10-17@11:06"
-"HOLD","project40","fix item 31","H","2024-10-17@11:06"
-"HOLD","project40","fix item 32","H","2024-10-17@11:06"
-"HOLD","project40","fix item 33","H","2024-10-17@11:06"
-"HOLD","project40","fix item 34","H","2024-10-17@11:06"
-"HOLD","project40","fix item 35","H","2024-10-17@11:06"
-"HOLD","project40","fix item 36","H","2024-10-17@11:06"
-"HOLD","project40","fix item 37","H","2024-10-17@11:06"
-"HOLD","project40","fix item 38","H","2024-10-17@11:06"
-"HOLD","project40","fix item 39","H","2024-10-17@11:06"
-"HOLD","project50","fix item 1","H","2024-10-17@11:06"
-"HOLD","project50","fix item 2","H","2024-10-17@11:06"
-"HOLD","project50","fix item 3","H","2024-10-17@11:06"
-"HOLD","project50","fix item 4","H","2024-10-17@11:06"
-"HOLD","project50","fix item 5","H","2024-10-17@11:06"
-"HOLD","project50","fix item 6","H","2024-10-17@11:06"
-"HOLD","project50","fix item 7","H","2024-10-17@11:06"
-"HOLD","project50","fix item 8","H","2024-10-17@11:06"
-"HOLD","project50","fix item 9","H","2024-10-17@11:06"
-"HOLD","project50","fix item 10","H","2024-10-17@11:06"
-"HOLD","project50","fix item 11","H","2024-10-17@11:06"
-"HOLD","project50","fix item 12","H","2024-10-17@11:06"
-"HOLD","project50","fix item 13","H","2024-10-17@11:06"
-"HOLD","project50","fix item 14","H","2024-10-17@11:06"
-"HOLD","project50","fix item 15","H","2024-10-17@11:06"
-"HOLD","project50","fix item 16","H","2024-10-17@11:06"
-"HOLD","project50","fix item 17","H","2024-10-17@11:06"
-"HOLD","project50","fix item 18","H","2024-10-17@11:06"
-"HOLD","project50","fix item 19","H","2024-10-17@11:06"
-"HOLD","project50","fix item 20","H","2024-10-17@11:06"
-"HOLD","project50","fix item 21","H","2024-10-17@11:06"
-"HOLD","project50","fix item 22","H","2024-10-17@11:06"
-"HOLD","project50","fix item 23","H","2024-10-17@11:06"
-"HOLD","project50","fix item 24","H","2024-10-17@11:06"
-"HOLD","project50","fix item 25","H","2024-10-17@11:06"
-"HOLD","project50","fix item 26","H","2024-10-17@11:06"
-"HOLD","project50","fix item 27","H","2024-10-17@11:06"
-"HOLD","project50","fix item 28","H","2024-10-17@11:06"
-"HOLD","project50","fix item 29","H","2024-10-17@11:06"
-"HOLD","project50","fix item 30","H","2024-10-17@11:06"
-"HOLD","project50","fix item 31","H","2024-10-17@11:06"
-"HOLD","project50","fix item 32","H","2024-10-17@11:06"
-"HOLD","project50","fix item 33","H","2024-10-17@11:06"
-"HOLD","project50","fix item 34","H","2024-10-17@11:06"
-"HOLD","project50","fix item 35","H","2024-10-17@11:06"
-"HOLD","project50","fix item 36","H","2024-10-17@11:06"
-"HOLD","project50","fix item 37","H","2024-10-17@11:06"
-"HOLD","project50","fix item 38","H","2024-10-17@11:06"
-"HOLD","project50","fix item 39","H","2024-10-17@11:06"
-"HOLD","project50","fix item 40","H","2024-10-17@11:06"
-"HOLD","project50","fix item 41","H","2024-10-17@11:06"
-"HOLD","project50","fix item 42","H","2024-10-17@11:06"
-"HOLD","project50","fix item 43","H","2024-10-17@11:06"
-"HOLD","project50","fix item 44","H","2024-10-17@11:06"
-"HOLD","project50","fix item 45","H","2024-10-17@11:06"
-"HOLD","project50","fix item 46","H","2024-10-17@11:06"
-"HOLD","project50","fix item 47","H","2024-10-17@11:06"
-"HOLD","project50","fix item 48","H","2024-10-17@11:06"
-"HOLD","project50","fix item 49","H","2024-10-17@11:06"
+"DOING","project10","fix item 1","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
+"HOLD","project10","fix item 2","H","2024-10-17@11:30"
+"HOLD","project10","fix item 3","H","2024-10-17@11:30"
+"HOLD","project10","fix item 4","H","2024-10-17@11:30"
+"HOLD","project10","fix item 5","H","2024-10-17@11:30"
+"DOING","project10","fix item 6","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
+"HOLD","project10","fix item 7","H","2024-10-17@11:30"
+"HOLD","project10","fix item 8","H","2024-10-17@11:30"
+"HOLD","project10","fix item 9","H","2024-10-17@11:30"
+"HOLD","project20","fix item 1","H","2024-10-17@11:30"
+"DOING","project20","fix item 2","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
+"HOLD","project20","fix item 3","H","2024-10-17@11:30"
+"HOLD","project20","fix item 4","H","2024-10-17@11:30"
+"HOLD","project20","fix item 5","H","2024-10-17@11:30"
+"HOLD","project20","fix item 6","H","2024-10-17@11:30"
+"DOING","project20","fix item 7","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
+"HOLD","project20","fix item 8","H","2024-10-17@11:30"
+"HOLD","project20","fix item 9","H","2024-10-17@11:30"
+"HOLD","project20","fix item 10","H","2024-10-17@11:30"
+"HOLD","project20","fix item 11","H","2024-10-17@11:30"
+"DOING","project20","fix item 12","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
+"HOLD","project20","fix item 13","H","2024-10-17@11:30"
+"HOLD","project20","fix item 14","H","2024-10-17@11:30"
+"HOLD","project20","fix item 15","H","2024-10-17@11:30"
+"HOLD","project20","fix item 16","H","2024-10-17@11:30"
+"DOING","project20","fix item 17","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
+"HOLD","project20","fix item 18","H","2024-10-17@11:30"
+"HOLD","project20","fix item 19","H","2024-10-17@11:30"
+"HOLD","project30","fix item 1","H","2024-10-17@11:30"
+"HOLD","project30","fix item 2","H","2024-10-17@11:30"
+"DOING","project30","fix item 3","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
+"HOLD","project30","fix item 4","H","2024-10-17@11:30"
+"HOLD","project30","fix item 5","H","2024-10-17@11:30"
+"HOLD","project30","fix item 6","H","2024-10-17@11:30"
+"HOLD","project30","fix item 7","H","2024-10-17@11:30"
+"DOING","project30","fix item 8","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
+"HOLD","project30","fix item 9","H","2024-10-17@11:30"
+"HOLD","project30","fix item 10","H","2024-10-17@11:30"
+"HOLD","project30","fix item 11","H","2024-10-17@11:30"
+"HOLD","project30","fix item 12","H","2024-10-17@11:30"
+"DOING","project30","fix item 13","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
+"HOLD","project30","fix item 14","H","2024-10-17@11:30"
+"HOLD","project30","fix item 15","H","2024-10-17@11:30"
+"HOLD","project30","fix item 16","H","2024-10-17@11:30"
+"HOLD","project30","fix item 17","H","2024-10-17@11:30"
+"DOING","project30","fix item 18","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
+"HOLD","project30","fix item 19","H","2024-10-17@11:30"
+"HOLD","project30","fix item 20","H","2024-10-17@11:30"
+"HOLD","project30","fix item 21","H","2024-10-17@11:30"
+"HOLD","project30","fix item 22","H","2024-10-17@11:30"
+"DOING","project30","fix item 23","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
+"HOLD","project30","fix item 24","H","2024-10-17@11:30"
+"HOLD","project30","fix item 25","H","2024-10-17@11:30"
+"HOLD","project30","fix item 26","H","2024-10-17@11:30"
+"HOLD","project30","fix item 27","H","2024-10-17@11:30"
+"DOING","project30","fix item 28","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
+"HOLD","project30","fix item 29","H","2024-10-17@11:30"
+"HOLD","project40","fix item 1","H","2024-10-17@11:30"
+"HOLD","project40","fix item 2","H","2024-10-17@11:30"
+"HOLD","project40","fix item 3","H","2024-10-17@11:30"
+"DOING","project40","fix item 4","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
+"HOLD","project40","fix item 5","H","2024-10-17@11:30"
+"HOLD","project40","fix item 6","H","2024-10-17@11:30"
+"HOLD","project40","fix item 7","H","2024-10-17@11:30"
+"HOLD","project40","fix item 8","H","2024-10-17@11:30"
+"DOING","project40","fix item 9","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
+"HOLD","project40","fix item 10","H","2024-10-17@11:30"
+"HOLD","project40","fix item 11","H","2024-10-17@11:30"
+"HOLD","project40","fix item 12","H","2024-10-17@11:30"
+"HOLD","project40","fix item 13","H","2024-10-17@11:30"
+"DOING","project40","fix item 14","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
+"HOLD","project40","fix item 15","H","2024-10-17@11:30"
+"HOLD","project40","fix item 16","H","2024-10-17@11:30"
+"HOLD","project40","fix item 17","H","2024-10-17@11:30"
+"HOLD","project40","fix item 18","H","2024-10-17@11:30"
+"DOING","project40","fix item 19","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
+"HOLD","project40","fix item 20","H","2024-10-17@11:30"
+"HOLD","project40","fix item 21","H","2024-10-17@11:30"
+"HOLD","project40","fix item 22","H","2024-10-17@11:30"
+"HOLD","project40","fix item 23","H","2024-10-17@11:30"
+"HOLD","project40","fix item 24","H","2024-10-17@11:30"
+"HOLD","project40","fix item 25","H","2024-10-17@11:30"
+"HOLD","project40","fix item 26","H","2024-10-17@11:30"
+"HOLD","project40","fix item 27","H","2024-10-17@11:30"
+"HOLD","project40","fix item 28","H","2024-10-17@11:30"
+"HOLD","project40","fix item 29","H","2024-10-17@11:30"
+"HOLD","project40","fix item 30","H","2024-10-17@11:30"
+"HOLD","project40","fix item 31","H","2024-10-17@11:30"
+"HOLD","project40","fix item 32","H","2024-10-17@11:30"
+"HOLD","project40","fix item 33","H","2024-10-17@11:30"
+"HOLD","project40","fix item 34","H","2024-10-17@11:30"
+"HOLD","project40","fix item 35","H","2024-10-17@11:30"
+"HOLD","project40","fix item 36","H","2024-10-17@11:30"
+"HOLD","project40","fix item 37","H","2024-10-17@11:30"
+"HOLD","project40","fix item 38","H","2024-10-17@11:30"
+"HOLD","project40","fix item 39","H","2024-10-17@11:30"
+"HOLD","project50","fix item 1","H","2024-10-17@11:30"
+"HOLD","project50","fix item 2","H","2024-10-17@11:30"
+"HOLD","project50","fix item 3","H","2024-10-17@11:30"
+"HOLD","project50","fix item 4","H","2024-10-17@11:30"
+"HOLD","project50","fix item 5","H","2024-10-17@11:30"
+"HOLD","project50","fix item 6","H","2024-10-17@11:30"
+"HOLD","project50","fix item 7","H","2024-10-17@11:30"
+"HOLD","project50","fix item 8","H","2024-10-17@11:30"
+"HOLD","project50","fix item 9","H","2024-10-17@11:30"
+"HOLD","project50","fix item 10","H","2024-10-17@11:30"
+"HOLD","project50","fix item 11","H","2024-10-17@11:30"
+"HOLD","project50","fix item 12","H","2024-10-17@11:30"
+"HOLD","project50","fix item 13","H","2024-10-17@11:30"
+"HOLD","project50","fix item 14","H","2024-10-17@11:30"
+"HOLD","project50","fix item 15","H","2024-10-17@11:30"
+"HOLD","project50","fix item 16","H","2024-10-17@11:30"
+"HOLD","project50","fix item 17","H","2024-10-17@11:30"
+"HOLD","project50","fix item 18","H","2024-10-17@11:30"
+"HOLD","project50","fix item 19","H","2024-10-17@11:30"
+"HOLD","project50","fix item 20","H","2024-10-17@11:30"
+"HOLD","project50","fix item 21","H","2024-10-17@11:30"
+"HOLD","project50","fix item 22","H","2024-10-17@11:30"
+"HOLD","project50","fix item 23","H","2024-10-17@11:30"
+"HOLD","project50","fix item 24","H","2024-10-17@11:30"
+"HOLD","project50","fix item 25","H","2024-10-17@11:30"
+"HOLD","project50","fix item 26","H","2024-10-17@11:30"
+"HOLD","project50","fix item 27","H","2024-10-17@11:30"
+"HOLD","project50","fix item 28","H","2024-10-17@11:30"
+"HOLD","project50","fix item 29","H","2024-10-17@11:30"
+"HOLD","project50","fix item 30","H","2024-10-17@11:30"
+"HOLD","project50","fix item 31","H","2024-10-17@11:30"
+"HOLD","project50","fix item 32","H","2024-10-17@11:30"
+"HOLD","project50","fix item 33","H","2024-10-17@11:30"
+"HOLD","project50","fix item 34","H","2024-10-17@11:30"
+"HOLD","project50","fix item 35","H","2024-10-17@11:30"
+"HOLD","project50","fix item 36","H","2024-10-17@11:30"
+"HOLD","project50","fix item 37","H","2024-10-17@11:30"
+"HOLD","project50","fix item 38","H","2024-10-17@11:30"
+"HOLD","project50","fix item 39","H","2024-10-17@11:30"
+"HOLD","project50","fix item 40","H","2024-10-17@11:30"
+"HOLD","project50","fix item 41","H","2024-10-17@11:30"
+"HOLD","project50","fix item 42","H","2024-10-17@11:30"
+"HOLD","project50","fix item 43","H","2024-10-17@11:30"
+"HOLD","project50","fix item 44","H","2024-10-17@11:30"
+"HOLD","project50","fix item 45","H","2024-10-17@11:30"
+"HOLD","project50","fix item 46","H","2024-10-17@11:30"
+"HOLD","project50","fix item 47","H","2024-10-17@11:30"
+"HOLD","project50","fix item 48","H","2024-10-17@11:30"
+"HOLD","project50","fix item 49","H","2024-10-17@11:30"

From 7f1da8b3b3cb8adff8b70f2fd86a0350245c03e5 Mon Sep 17 00:00:00 2001
From: Leon van Kammen <leonvankammen@gmail.com>
Date: Thu, 17 Oct 2024 11:48:21 +0200
Subject: [PATCH 36/41] 
 https://github.com/coderofsalvation/kanban.bash/issues/32

---
 kanban | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/kanban b/kanban
index 7ffe579..3414bb9 100755
--- a/kanban
+++ b/kanban
@@ -76,9 +76,10 @@ SMALLSCREEN=('SCHEDULED' 'HOLD' 'DOING')  # uncomment to get simplified kanban b
 [[ ! -n $XSMALL ]] && XSMALL=119
 FILE_CONF=".kanban/.kanban.conf"
 FILE_CSV=".kanban/.kanban.csv"
-[[ ! -n $EDITOR ]] && {
+[[ ! -n "$EDITOR" ]] && {
   which nano   &>/dev/null && EDITOR=nano
   which pico   &>/dev/null && EDITOR=pico
+  printf "${COL2}warning:${COL0} EDITOR env-variable not set: add it ('export EDITOR=vim' e.g.) to ~/.profile e.g.)\n"
 }
 
 # migration: move config files of old kanban versions to .kanban

From ffa8247f8284ec04f551cf2c70ae7b6263354f87 Mon Sep 17 00:00:00 2001
From: Leon van Kammen <leonvankammen@gmail.com>
Date: Thu, 17 Oct 2024 11:52:17 +0200
Subject: [PATCH 37/41] 
 https://github.com/coderofsalvation/kanban.bash/issues/29

---
 kanban | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kanban b/kanban
index 3414bb9..34444f7 100755
--- a/kanban
+++ b/kanban
@@ -228,7 +228,7 @@ columnize(){
       printcsv 5   | awk "$awkformat" |  sed 's/^/| /g;s/  / /g'           | unexpand >> $TMP.col.$i
     i=$((i+1))
   done 
-  pr -m -t -w$((X-5)) -S"      "  $TMP.col.*  | lines 
+  pr -m -t -w$((X-5)) -s"      "  $TMP.col.*  | lines 
   rm $TMP.col.* # print and cleanup
 }
 

From 12256c0016981b1be839242489b969020327d531 Mon Sep 17 00:00:00 2001
From: Leon van Kammen <leonvankammen@gmail.com>
Date: Thu, 17 Oct 2024 10:12:09 +0000
Subject: [PATCH 38/41] mac fixes

---
 kanban        |  40 ++++---
 test/test.csv | 290 +++++++++++++++++++++++++-------------------------
 2 files changed, 172 insertions(+), 158 deletions(-)

diff --git a/kanban b/kanban
index 34444f7..bca91c7 100755
--- a/kanban
+++ b/kanban
@@ -70,8 +70,8 @@ TMP=$(mktemp -t kanban.XXXXXXXX)
 [[ ! -n $TERM ]] && TERM=vt100
 locale | grep -q "UTF-8" && UTF8=1
 [[ -n $PLAIN ]] && unset UTF8
-[[ ! -n $X   ]] && X=$(tput cols)    # get size of terminal window
-[[ ! -n $Y   ]] && Y=$(tput lines)   # 
+[[ ! -n $X   ]] && X=$(tput cols)   # get size of terminal window
+[[ ! -n $Y   ]] && Y=$(tput lines)  # 
 SMALLSCREEN=('SCHEDULED' 'HOLD' 'DOING')  # uncomment to get simplified kanban board
 [[ ! -n $XSMALL ]] && XSMALL=119
 FILE_CONF=".kanban/.kanban.conf"
@@ -101,7 +101,7 @@ XSMALL=119                           # show small kanban for terminalwidth < 119
 SMALLSCREEN=('DOING' 'TODO' 'HOLD')  # define simplified kanban board statuses
 
 # maximum amount of todos within status (triggers warning when exceeds)
-declare -A maximum_todo
+declare -a maximum_todo
 maximum_todo[HOLD]=10
 maximum_todo[DOING]=5
 "
@@ -109,10 +109,24 @@ maximum_todo[DOING]=5
 # usage: fb put <x> <y> <string>
 put() { printf "\x1B["$2";"$1"f$3" "$4"; }
 
-strtoline(){ for((i=0;i<${#1};i++)); do printf "$2"; done; }
+strtoline() {
+    str="$1"
+    char="$2"
+    i=0
+    len=${#str}
+    
+    while [ "$i" -lt "$len" ]; do
+        printf "%s" "$char"
+        i=$((i + 1))
+    done
+}
 
-draw_line(){
-  for((i=0;i<$1;i++)); do printf "-"; done
+draw_line() {
+    i=0
+    while [ "$i" -lt "$1" ]; do
+        printf "-"
+        i=$((i + 1))
+    done
 }
 
 # usage: fb box <x> <y> <width> <height>
@@ -208,27 +222,27 @@ list(){
 
 create_index(){
   rm $TMP.index &>/dev/null
-  cat -n "$KANBANFILE" | sed 's/^[ ]\+//g;s/\t/,/g;s/"\/.*\//"/g' | evaluate >> $TMP.index
+  cat -n "$KANBANFILE" | sed 's/^[ ]\+//g;s/\\t/,/g;s/"\/.*\//"/g' | evaluate >> $TMP.index
 }
 
 columnize(){
   awkformat='{ tag=substr($2,1,4); gsub($2,tag); printf("%-5s",$1); print " #"$2" "$3" "$4" "$5 }'
   [[ -n $SMALLSCREEN ]] && awkformat='{ print $1" "$3" "$4" "$5 }'
-  i=1; lines="$(cat)"; header="$( echo "$lines" | head -n0 )"; output="";
+  i=1; lines="$(cat)"; header="$( echo "$lines" | head -1 )"; output="";
   rm $TMP.col.* &>/dev/null
   for status in "${statuses[@]}"; do 
     [[ -n $SMALLSCREEN ]] && ! [[ "${SMALLSCREEN[@]}" =~ $status ]] && continue
     label=$status
     nlines=$(cat $TMP.index | grep "$status" | wc -l) 
     maxlines=0 
-    [[ -v "maximum_todo[$status]" ]] && maxlines=${maximum_todo[$status]}
+    [[ -n "maximum_todo[$status]" ]] && maxlines=${maximum_todo[$status]}
     [[ ${maximum_todo[$status]} > 0 ]] && [[ $nlines > ${maximum_todo[$status]} ]] && label="*$status*"
     echo -e ".$(strtoline "$label" "~")~~.\n| $label |_______\n|" > $TMP.col.$i
     cat $TMP.index | grep "$status" | sed 's/["]\?'$status'["]\?//g'       | \
       printcsv 5   | awk "$awkformat" |  sed 's/^/| /g;s/  / /g'           | unexpand >> $TMP.col.$i
     i=$((i+1))
   done 
-  pr -m -t -w$((X-5)) -s"      "  $TMP.col.*  | lines 
+  pr -m -t -w$((X-5)) $TMP.col.* | lines 
   rm $TMP.col.* # print and cleanup
 }
 
@@ -259,7 +273,7 @@ show(){
   [[ ! -f "$KANBANFILE" ]] && touch "$KANBANFILE" 
   create_index
   if [[ -n $1 ]]; then 
-    statuses=(); for status in $*; do statuses+=($status); done 
+    statuses=""; for status in $*; do statuses="$status $statuses"; done 
   fi
   { 
     echo "$1"
@@ -295,7 +309,7 @@ update_item_status(){
     newitem="${newitem/$status/$2}"
     newitem="${newitem/$flags/$newflags}"
     newitem="${newitem/$dates/$newdates}"
-    sed -i "s|$item|$newitem|g" "$KANBANFILE" 
+    sed -i '' "s|$item|$newitem|g" "$KANBANFILE" 
     echo "$status -> $2"
   fi
 }
@@ -313,7 +327,7 @@ update_item(){
 #
 '"$item" > $TMP.update
   ${EDITOR} $TMP.update
-  sed -i "s|$item|$(cat $TMP.update | tail -n1)|g" "$KANBANFILE" 
+  sed -i '' "s|$item|$(cat $TMP.update | tail -n1)|g" "$KANBANFILE" 
   echo "updated item $1"
 }
 
diff --git a/test/test.csv b/test/test.csv
index 0a19cd7..892170e 100644
--- a/test/test.csv
+++ b/test/test.csv
@@ -1,145 +1,145 @@
-"DOING","project10","fix item 1","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
-"HOLD","project10","fix item 2","H","2024-10-17@11:30"
-"HOLD","project10","fix item 3","H","2024-10-17@11:30"
-"HOLD","project10","fix item 4","H","2024-10-17@11:30"
-"HOLD","project10","fix item 5","H","2024-10-17@11:30"
-"DOING","project10","fix item 6","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
-"HOLD","project10","fix item 7","H","2024-10-17@11:30"
-"HOLD","project10","fix item 8","H","2024-10-17@11:30"
-"HOLD","project10","fix item 9","H","2024-10-17@11:30"
-"HOLD","project20","fix item 1","H","2024-10-17@11:30"
-"DOING","project20","fix item 2","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
-"HOLD","project20","fix item 3","H","2024-10-17@11:30"
-"HOLD","project20","fix item 4","H","2024-10-17@11:30"
-"HOLD","project20","fix item 5","H","2024-10-17@11:30"
-"HOLD","project20","fix item 6","H","2024-10-17@11:30"
-"DOING","project20","fix item 7","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
-"HOLD","project20","fix item 8","H","2024-10-17@11:30"
-"HOLD","project20","fix item 9","H","2024-10-17@11:30"
-"HOLD","project20","fix item 10","H","2024-10-17@11:30"
-"HOLD","project20","fix item 11","H","2024-10-17@11:30"
-"DOING","project20","fix item 12","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
-"HOLD","project20","fix item 13","H","2024-10-17@11:30"
-"HOLD","project20","fix item 14","H","2024-10-17@11:30"
-"HOLD","project20","fix item 15","H","2024-10-17@11:30"
-"HOLD","project20","fix item 16","H","2024-10-17@11:30"
-"DOING","project20","fix item 17","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
-"HOLD","project20","fix item 18","H","2024-10-17@11:30"
-"HOLD","project20","fix item 19","H","2024-10-17@11:30"
-"HOLD","project30","fix item 1","H","2024-10-17@11:30"
-"HOLD","project30","fix item 2","H","2024-10-17@11:30"
-"DOING","project30","fix item 3","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
-"HOLD","project30","fix item 4","H","2024-10-17@11:30"
-"HOLD","project30","fix item 5","H","2024-10-17@11:30"
-"HOLD","project30","fix item 6","H","2024-10-17@11:30"
-"HOLD","project30","fix item 7","H","2024-10-17@11:30"
-"DOING","project30","fix item 8","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
-"HOLD","project30","fix item 9","H","2024-10-17@11:30"
-"HOLD","project30","fix item 10","H","2024-10-17@11:30"
-"HOLD","project30","fix item 11","H","2024-10-17@11:30"
-"HOLD","project30","fix item 12","H","2024-10-17@11:30"
-"DOING","project30","fix item 13","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
-"HOLD","project30","fix item 14","H","2024-10-17@11:30"
-"HOLD","project30","fix item 15","H","2024-10-17@11:30"
-"HOLD","project30","fix item 16","H","2024-10-17@11:30"
-"HOLD","project30","fix item 17","H","2024-10-17@11:30"
-"DOING","project30","fix item 18","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
-"HOLD","project30","fix item 19","H","2024-10-17@11:30"
-"HOLD","project30","fix item 20","H","2024-10-17@11:30"
-"HOLD","project30","fix item 21","H","2024-10-17@11:30"
-"HOLD","project30","fix item 22","H","2024-10-17@11:30"
-"DOING","project30","fix item 23","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
-"HOLD","project30","fix item 24","H","2024-10-17@11:30"
-"HOLD","project30","fix item 25","H","2024-10-17@11:30"
-"HOLD","project30","fix item 26","H","2024-10-17@11:30"
-"HOLD","project30","fix item 27","H","2024-10-17@11:30"
-"DOING","project30","fix item 28","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
-"HOLD","project30","fix item 29","H","2024-10-17@11:30"
-"HOLD","project40","fix item 1","H","2024-10-17@11:30"
-"HOLD","project40","fix item 2","H","2024-10-17@11:30"
-"HOLD","project40","fix item 3","H","2024-10-17@11:30"
-"DOING","project40","fix item 4","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
-"HOLD","project40","fix item 5","H","2024-10-17@11:30"
-"HOLD","project40","fix item 6","H","2024-10-17@11:30"
-"HOLD","project40","fix item 7","H","2024-10-17@11:30"
-"HOLD","project40","fix item 8","H","2024-10-17@11:30"
-"DOING","project40","fix item 9","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
-"HOLD","project40","fix item 10","H","2024-10-17@11:30"
-"HOLD","project40","fix item 11","H","2024-10-17@11:30"
-"HOLD","project40","fix item 12","H","2024-10-17@11:30"
-"HOLD","project40","fix item 13","H","2024-10-17@11:30"
-"DOING","project40","fix item 14","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
-"HOLD","project40","fix item 15","H","2024-10-17@11:30"
-"HOLD","project40","fix item 16","H","2024-10-17@11:30"
-"HOLD","project40","fix item 17","H","2024-10-17@11:30"
-"HOLD","project40","fix item 18","H","2024-10-17@11:30"
-"DOING","project40","fix item 19","HDHDHD","2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30 2024-10-17@11:30"
-"HOLD","project40","fix item 20","H","2024-10-17@11:30"
-"HOLD","project40","fix item 21","H","2024-10-17@11:30"
-"HOLD","project40","fix item 22","H","2024-10-17@11:30"
-"HOLD","project40","fix item 23","H","2024-10-17@11:30"
-"HOLD","project40","fix item 24","H","2024-10-17@11:30"
-"HOLD","project40","fix item 25","H","2024-10-17@11:30"
-"HOLD","project40","fix item 26","H","2024-10-17@11:30"
-"HOLD","project40","fix item 27","H","2024-10-17@11:30"
-"HOLD","project40","fix item 28","H","2024-10-17@11:30"
-"HOLD","project40","fix item 29","H","2024-10-17@11:30"
-"HOLD","project40","fix item 30","H","2024-10-17@11:30"
-"HOLD","project40","fix item 31","H","2024-10-17@11:30"
-"HOLD","project40","fix item 32","H","2024-10-17@11:30"
-"HOLD","project40","fix item 33","H","2024-10-17@11:30"
-"HOLD","project40","fix item 34","H","2024-10-17@11:30"
-"HOLD","project40","fix item 35","H","2024-10-17@11:30"
-"HOLD","project40","fix item 36","H","2024-10-17@11:30"
-"HOLD","project40","fix item 37","H","2024-10-17@11:30"
-"HOLD","project40","fix item 38","H","2024-10-17@11:30"
-"HOLD","project40","fix item 39","H","2024-10-17@11:30"
-"HOLD","project50","fix item 1","H","2024-10-17@11:30"
-"HOLD","project50","fix item 2","H","2024-10-17@11:30"
-"HOLD","project50","fix item 3","H","2024-10-17@11:30"
-"HOLD","project50","fix item 4","H","2024-10-17@11:30"
-"HOLD","project50","fix item 5","H","2024-10-17@11:30"
-"HOLD","project50","fix item 6","H","2024-10-17@11:30"
-"HOLD","project50","fix item 7","H","2024-10-17@11:30"
-"HOLD","project50","fix item 8","H","2024-10-17@11:30"
-"HOLD","project50","fix item 9","H","2024-10-17@11:30"
-"HOLD","project50","fix item 10","H","2024-10-17@11:30"
-"HOLD","project50","fix item 11","H","2024-10-17@11:30"
-"HOLD","project50","fix item 12","H","2024-10-17@11:30"
-"HOLD","project50","fix item 13","H","2024-10-17@11:30"
-"HOLD","project50","fix item 14","H","2024-10-17@11:30"
-"HOLD","project50","fix item 15","H","2024-10-17@11:30"
-"HOLD","project50","fix item 16","H","2024-10-17@11:30"
-"HOLD","project50","fix item 17","H","2024-10-17@11:30"
-"HOLD","project50","fix item 18","H","2024-10-17@11:30"
-"HOLD","project50","fix item 19","H","2024-10-17@11:30"
-"HOLD","project50","fix item 20","H","2024-10-17@11:30"
-"HOLD","project50","fix item 21","H","2024-10-17@11:30"
-"HOLD","project50","fix item 22","H","2024-10-17@11:30"
-"HOLD","project50","fix item 23","H","2024-10-17@11:30"
-"HOLD","project50","fix item 24","H","2024-10-17@11:30"
-"HOLD","project50","fix item 25","H","2024-10-17@11:30"
-"HOLD","project50","fix item 26","H","2024-10-17@11:30"
-"HOLD","project50","fix item 27","H","2024-10-17@11:30"
-"HOLD","project50","fix item 28","H","2024-10-17@11:30"
-"HOLD","project50","fix item 29","H","2024-10-17@11:30"
-"HOLD","project50","fix item 30","H","2024-10-17@11:30"
-"HOLD","project50","fix item 31","H","2024-10-17@11:30"
-"HOLD","project50","fix item 32","H","2024-10-17@11:30"
-"HOLD","project50","fix item 33","H","2024-10-17@11:30"
-"HOLD","project50","fix item 34","H","2024-10-17@11:30"
-"HOLD","project50","fix item 35","H","2024-10-17@11:30"
-"HOLD","project50","fix item 36","H","2024-10-17@11:30"
-"HOLD","project50","fix item 37","H","2024-10-17@11:30"
-"HOLD","project50","fix item 38","H","2024-10-17@11:30"
-"HOLD","project50","fix item 39","H","2024-10-17@11:30"
-"HOLD","project50","fix item 40","H","2024-10-17@11:30"
-"HOLD","project50","fix item 41","H","2024-10-17@11:30"
-"HOLD","project50","fix item 42","H","2024-10-17@11:30"
-"HOLD","project50","fix item 43","H","2024-10-17@11:30"
-"HOLD","project50","fix item 44","H","2024-10-17@11:30"
-"HOLD","project50","fix item 45","H","2024-10-17@11:30"
-"HOLD","project50","fix item 46","H","2024-10-17@11:30"
-"HOLD","project50","fix item 47","H","2024-10-17@11:30"
-"HOLD","project50","fix item 48","H","2024-10-17@11:30"
-"HOLD","project50","fix item 49","H","2024-10-17@11:30"
+"HOLD","project10","fix item 1","H","2024-10-17@10:11"
+"HOLD","project10","fix item 2","H","2024-10-17@10:11"
+"HOLD","project10","fix item 3","H","2024-10-17@10:11"
+"HOLD","project10","fix item 4","H","2024-10-17@10:11"
+"HOLD","project10","fix item 5","H","2024-10-17@10:11"
+"HOLD","project10","fix item 6","H","2024-10-17@10:11"
+"HOLD","project10","fix item 7","H","2024-10-17@10:11"
+"HOLD","project10","fix item 8","H","2024-10-17@10:11"
+"HOLD","project10","fix item 9","H","2024-10-17@10:11"
+"HOLD","project20","fix item 1","H","2024-10-17@10:11"
+"HOLD","project20","fix item 2","H","2024-10-17@10:11"
+"HOLD","project20","fix item 3","H","2024-10-17@10:11"
+"HOLD","project20","fix item 4","H","2024-10-17@10:11"
+"HOLD","project20","fix item 5","H","2024-10-17@10:11"
+"HOLD","project20","fix item 6","H","2024-10-17@10:11"
+"HOLD","project20","fix item 7","H","2024-10-17@10:11"
+"HOLD","project20","fix item 8","H","2024-10-17@10:11"
+"HOLD","project20","fix item 9","H","2024-10-17@10:11"
+"HOLD","project20","fix item 10","H","2024-10-17@10:11"
+"HOLD","project20","fix item 11","H","2024-10-17@10:11"
+"HOLD","project20","fix item 12","H","2024-10-17@10:11"
+"HOLD","project20","fix item 13","H","2024-10-17@10:11"
+"HOLD","project20","fix item 14","H","2024-10-17@10:11"
+"HOLD","project20","fix item 15","H","2024-10-17@10:11"
+"HOLD","project20","fix item 16","H","2024-10-17@10:11"
+"HOLD","project20","fix item 17","H","2024-10-17@10:11"
+"HOLD","project20","fix item 18","H","2024-10-17@10:11"
+"HOLD","project20","fix item 19","H","2024-10-17@10:11"
+"HOLD","project30","fix item 1","H","2024-10-17@10:11"
+"HOLD","project30","fix item 2","H","2024-10-17@10:11"
+"HOLD","project30","fix item 3","H","2024-10-17@10:11"
+"HOLD","project30","fix item 4","H","2024-10-17@10:11"
+"HOLD","project30","fix item 5","H","2024-10-17@10:11"
+"HOLD","project30","fix item 6","H","2024-10-17@10:11"
+"HOLD","project30","fix item 7","H","2024-10-17@10:11"
+"HOLD","project30","fix item 8","H","2024-10-17@10:11"
+"HOLD","project30","fix item 9","H","2024-10-17@10:11"
+"HOLD","project30","fix item 10","H","2024-10-17@10:11"
+"HOLD","project30","fix item 11","H","2024-10-17@10:11"
+"HOLD","project30","fix item 12","H","2024-10-17@10:11"
+"HOLD","project30","fix item 13","H","2024-10-17@10:11"
+"HOLD","project30","fix item 14","H","2024-10-17@10:11"
+"HOLD","project30","fix item 15","H","2024-10-17@10:11"
+"HOLD","project30","fix item 16","H","2024-10-17@10:11"
+"HOLD","project30","fix item 17","H","2024-10-17@10:11"
+"HOLD","project30","fix item 18","H","2024-10-17@10:11"
+"HOLD","project30","fix item 19","H","2024-10-17@10:11"
+"HOLD","project30","fix item 20","H","2024-10-17@10:11"
+"HOLD","project30","fix item 21","H","2024-10-17@10:11"
+"HOLD","project30","fix item 22","H","2024-10-17@10:11"
+"HOLD","project30","fix item 23","H","2024-10-17@10:11"
+"HOLD","project30","fix item 24","H","2024-10-17@10:11"
+"HOLD","project30","fix item 25","H","2024-10-17@10:11"
+"HOLD","project30","fix item 26","H","2024-10-17@10:11"
+"HOLD","project30","fix item 27","H","2024-10-17@10:11"
+"HOLD","project30","fix item 28","H","2024-10-17@10:11"
+"HOLD","project30","fix item 29","H","2024-10-17@10:11"
+"HOLD","project40","fix item 1","H","2024-10-17@10:11"
+"HOLD","project40","fix item 2","H","2024-10-17@10:11"
+"HOLD","project40","fix item 3","H","2024-10-17@10:11"
+"HOLD","project40","fix item 4","H","2024-10-17@10:11"
+"HOLD","project40","fix item 5","H","2024-10-17@10:11"
+"HOLD","project40","fix item 6","H","2024-10-17@10:11"
+"HOLD","project40","fix item 7","H","2024-10-17@10:11"
+"HOLD","project40","fix item 8","H","2024-10-17@10:11"
+"HOLD","project40","fix item 9","H","2024-10-17@10:11"
+"HOLD","project40","fix item 10","H","2024-10-17@10:11"
+"HOLD","project40","fix item 11","H","2024-10-17@10:11"
+"HOLD","project40","fix item 12","H","2024-10-17@10:11"
+"HOLD","project40","fix item 13","H","2024-10-17@10:11"
+"HOLD","project40","fix item 14","H","2024-10-17@10:11"
+"HOLD","project40","fix item 15","H","2024-10-17@10:11"
+"HOLD","project40","fix item 16","H","2024-10-17@10:11"
+"HOLD","project40","fix item 17","H","2024-10-17@10:11"
+"HOLD","project40","fix item 18","H","2024-10-17@10:11"
+"HOLD","project40","fix item 19","H","2024-10-17@10:11"
+"HOLD","project40","fix item 20","H","2024-10-17@10:11"
+"HOLD","project40","fix item 21","H","2024-10-17@10:11"
+"HOLD","project40","fix item 22","H","2024-10-17@10:11"
+"HOLD","project40","fix item 23","H","2024-10-17@10:11"
+"HOLD","project40","fix item 24","H","2024-10-17@10:11"
+"HOLD","project40","fix item 25","H","2024-10-17@10:11"
+"HOLD","project40","fix item 26","H","2024-10-17@10:11"
+"HOLD","project40","fix item 27","H","2024-10-17@10:11"
+"HOLD","project40","fix item 28","H","2024-10-17@10:11"
+"HOLD","project40","fix item 29","H","2024-10-17@10:11"
+"HOLD","project40","fix item 30","H","2024-10-17@10:11"
+"HOLD","project40","fix item 31","H","2024-10-17@10:11"
+"HOLD","project40","fix item 32","H","2024-10-17@10:11"
+"HOLD","project40","fix item 33","H","2024-10-17@10:11"
+"HOLD","project40","fix item 34","H","2024-10-17@10:11"
+"HOLD","project40","fix item 35","H","2024-10-17@10:11"
+"HOLD","project40","fix item 36","H","2024-10-17@10:11"
+"HOLD","project40","fix item 37","H","2024-10-17@10:11"
+"HOLD","project40","fix item 38","H","2024-10-17@10:11"
+"HOLD","project40","fix item 39","H","2024-10-17@10:11"
+"HOLD","project50","fix item 1","H","2024-10-17@10:11"
+"HOLD","project50","fix item 2","H","2024-10-17@10:11"
+"HOLD","project50","fix item 3","H","2024-10-17@10:11"
+"HOLD","project50","fix item 4","H","2024-10-17@10:11"
+"HOLD","project50","fix item 5","H","2024-10-17@10:11"
+"HOLD","project50","fix item 6","H","2024-10-17@10:11"
+"HOLD","project50","fix item 7","H","2024-10-17@10:11"
+"HOLD","project50","fix item 8","H","2024-10-17@10:11"
+"HOLD","project50","fix item 9","H","2024-10-17@10:11"
+"HOLD","project50","fix item 10","H","2024-10-17@10:11"
+"HOLD","project50","fix item 11","H","2024-10-17@10:11"
+"HOLD","project50","fix item 12","H","2024-10-17@10:11"
+"HOLD","project50","fix item 13","H","2024-10-17@10:11"
+"HOLD","project50","fix item 14","H","2024-10-17@10:11"
+"HOLD","project50","fix item 15","H","2024-10-17@10:11"
+"HOLD","project50","fix item 16","H","2024-10-17@10:11"
+"HOLD","project50","fix item 17","H","2024-10-17@10:11"
+"HOLD","project50","fix item 18","H","2024-10-17@10:11"
+"HOLD","project50","fix item 19","H","2024-10-17@10:11"
+"HOLD","project50","fix item 20","H","2024-10-17@10:11"
+"HOLD","project50","fix item 21","H","2024-10-17@10:11"
+"HOLD","project50","fix item 22","H","2024-10-17@10:11"
+"HOLD","project50","fix item 23","H","2024-10-17@10:11"
+"HOLD","project50","fix item 24","H","2024-10-17@10:11"
+"HOLD","project50","fix item 25","H","2024-10-17@10:11"
+"HOLD","project50","fix item 26","H","2024-10-17@10:11"
+"HOLD","project50","fix item 27","H","2024-10-17@10:11"
+"HOLD","project50","fix item 28","H","2024-10-17@10:11"
+"HOLD","project50","fix item 29","H","2024-10-17@10:11"
+"HOLD","project50","fix item 30","H","2024-10-17@10:11"
+"HOLD","project50","fix item 31","H","2024-10-17@10:11"
+"HOLD","project50","fix item 32","H","2024-10-17@10:11"
+"HOLD","project50","fix item 33","H","2024-10-17@10:11"
+"HOLD","project50","fix item 34","H","2024-10-17@10:11"
+"HOLD","project50","fix item 35","H","2024-10-17@10:11"
+"HOLD","project50","fix item 36","H","2024-10-17@10:11"
+"HOLD","project50","fix item 37","H","2024-10-17@10:11"
+"HOLD","project50","fix item 38","H","2024-10-17@10:11"
+"HOLD","project50","fix item 39","H","2024-10-17@10:11"
+"HOLD","project50","fix item 40","H","2024-10-17@10:11"
+"HOLD","project50","fix item 41","H","2024-10-17@10:11"
+"HOLD","project50","fix item 42","H","2024-10-17@10:11"
+"HOLD","project50","fix item 43","H","2024-10-17@10:11"
+"HOLD","project50","fix item 44","H","2024-10-17@10:11"
+"HOLD","project50","fix item 45","H","2024-10-17@10:11"
+"HOLD","project50","fix item 46","H","2024-10-17@10:11"
+"HOLD","project50","fix item 47","H","2024-10-17@10:11"
+"HOLD","project50","fix item 48","H","2024-10-17@10:11"
+"HOLD","project50","fix item 49","H","2024-10-17@10:11"

From 2ce930b62c1761d5735ce86bb38418ba5412d25b Mon Sep 17 00:00:00 2001
From: Leon van Kammen <leonvankammen@gmail.com>
Date: Thu, 17 Oct 2024 12:25:10 +0200
Subject: [PATCH 39/41] master: update documentation

---
 README.md | 47 ++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 38 insertions(+), 9 deletions(-)

diff --git a/README.md b/README.md
index b041ce2..bf5273d 100644
--- a/README.md
+++ b/README.md
@@ -176,28 +176,57 @@ SMALLSCREEN=('DOING' 'TODO' 'HOLD')  # define simplified kanban board statuses
 
 ## Nested kanbans
 
+Besides regular tickets, infinite nested kanbans are supported too, as well as adding a kanban as a ticket.
+
 ```bash
 $ kanban init
-$ mkdir featureX           
-$ kanban add TODO featureX 
-$ cd featureX
-$ kanban init
-$ kanban add TODO foobar
+$ mkdir v3           
+$ mkdir v3/v4           
+$ cd v3    && kanban init && kanban add a foo && cd -
+$ cd v3/v4 && kanban init && kanban add b bar && cd -
+$ kanban add TODO dev foobar
 $ cd ..
 $ kanban show
  .____.
 | TODO |_____
 |
-| 12 featureX
+| 1 #dev foobar
+
+kanbans: 
+   ├─ v3 
+   ├─ v3/v4 
+
+
+$ kanban v3                         # shows v3 kanban 
+ .____.
+| TODO |_____
+|
+| 1 #a foo 
+```
+
+Now lets add the `v3/v4` kanban as a ticket:
+
+```bash
+$ kanban add TODO foo v3/v4 
+$ kanban show
+ .____.
+| TODO |_____
+|
+| 1 #dev foobar
+| 2 #foo v3/v4 
+
+kanbans: 
+   ├─ v3 
+   ├─ v3/v4 
 
-$ kanban 12                         # shows kanban inside featureX 
+$ kanban 2            # shows v3/v4 kanban
  .____.
 | TODO |_____
 |
-| 1  foobar 
+| 1 #b bar 
 ```
 
-> Or, how about centralized kanbans in your dotfiles repo + 1 in a projectrepo
+# kanbans in your [dotfiles] GIT-repo + 1 in a projectrepo
 
 ```
 $ cd ~                         # go to homedir (where your dotfiles live)

From abf3b08f623a4dbc4e91f83a3a9e79b419616f64 Mon Sep 17 00:00:00 2001
From: Leon van Kammen <leonvankammen@gmail.com>
Date: Thu, 17 Oct 2024 11:30:26 +0000
Subject: [PATCH 40/41] subkanban performance fix [no recurse]

---
 kanban | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/kanban b/kanban
index bca91c7..c0b00b7 100755
--- a/kanban
+++ b/kanban
@@ -281,15 +281,15 @@ show(){
   } | columnize
   [[ -n $SMALLSCREEN ]] && echo -e "    ${COL1}(${COL0} small terminal detected, hiding certain columns ${COL1})"
   echo ""
-  find . -type f -mindepth 3 -iname '*kanban.conf*' | awk '{
+  ls */.kanban/.kanban.conf | awk '{
     if( !START ){
       print "kanbans: "
       START=1
     }
-    gsub("^\.\/","",$0)
-    gsub("\/.kanban.*","",$0)
+    gsub("^./","",$0)
+    gsub("/.kanban.*","",$0)
     print "   ├─ "$0 
-  }'
+  }' 2>/dev/null
 }
 
 get_current_date(){ date "+%Y-%m-%d@%H:%M"; }

From 325e2c0c3e75f6bb2106d15107559bc1eea6fd5d Mon Sep 17 00:00:00 2001
From: Leon van Kammen <leonvankammen@gmail.com>
Date: Thu, 17 Oct 2024 11:31:33 +0000
Subject: [PATCH 41/41] master: minor bugfix

---
 kanban | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kanban b/kanban
index c0b00b7..8f42097 100755
--- a/kanban
+++ b/kanban
@@ -281,7 +281,7 @@ show(){
   } | columnize
   [[ -n $SMALLSCREEN ]] && echo -e "    ${COL1}(${COL0} small terminal detected, hiding certain columns ${COL1})"
   echo ""
-  ls */.kanban/.kanban.conf | awk '{
+  ls */.kanban/.kanban.conf 2>/dev/null | awk '{
     if( !START ){
       print "kanbans: "
       START=1
@@ -289,7 +289,7 @@ show(){
     gsub("^./","",$0)
     gsub("/.kanban.*","",$0)
     print "   ├─ "$0 
-  }' 2>/dev/null
+  }'
 }
 
 get_current_date(){ date "+%Y-%m-%d@%H:%M"; }
