diff --git a/tests/t1330-ls-highlighting.sh b/tests/t1330-ls-highlighting.sh new file mode 100755 index 0000000..c3c3558 --- /dev/null +++ b/tests/t1330-ls-highlighting.sh @@ -0,0 +1,114 @@ +#!/bin/sh +# + +test_description='list highlighting + +This test checks the highlighting (with colors) of prioritized tasks. +' +. ./test-lib.sh + +TEST_TODO_=todo.cfg + +# +# check the highlighting of prioritized tasks +# +cat > todo.txt <>> todo.sh ls +1 (A) @con01 +prj01 -- Some project 01 task, pri A +2 (B) @con02 +prj02 -- Some project 02 task, pri B +3 (C) @con01 +prj01 -- Some project 01 task, pri C +4 (D) @con02 +prj02 -- Some project 02 task, pri D +5 (E) @con01 +prj01 -- Some project 01 task, pri E +6 (Z) @con02 +prj02 -- Some project 02 task, pri Z +7 @con01 +prj01 -- Some project 01 task, no priority +8 @con02 +prj02 -- Some project 02 task, no priority +-- +TODO: 8 of 8 tasks shown +EOF + +# +# check changing the color definitions into something other than ANSI color +# escape sequences +# +TEST_TODO_CUSTOM=todo-custom.cfg +cat todo.cfg > "$TEST_TODO_CUSTOM" +cat >> "$TEST_TODO_CUSTOM" <<'EOF' +export YELLOW='${color yellow}' +export GREEN='${color green}' +export LIGHT_BLUE='${color LightBlue}' +export WHITE='${color white}' +export DEFAULT='${color}' +export PRI_A=$YELLOW +export PRI_B=$GREEN +export PRI_C=$LIGHT_BLUE +export PRI_X=$WHITE +EOF +test_todo_session 'customized highlighting' <<'EOF' +>>> todo.sh -d "$TEST_TODO_CUSTOM" ls +${color yellow}1 (A) @con01 +prj01 -- Some project 01 task, pri A${color} +${color green}2 (B) @con02 +prj02 -- Some project 02 task, pri B${color} +${color LightBlue}3 (C) @con01 +prj01 -- Some project 01 task, pri C${color} +${color white}4 (D) @con02 +prj02 -- Some project 02 task, pri D${color} +${color white}5 (E) @con01 +prj01 -- Some project 01 task, pri E${color} +${color white}6 (Z) @con02 +prj02 -- Some project 02 task, pri Z${color} +7 @con01 +prj01 -- Some project 01 task, no priority +8 @con02 +prj02 -- Some project 02 task, no priority +-- +TODO: 8 of 8 tasks shown +EOF + +# +# check defining highlightings for more priorities than the default A, B, C +# +TEST_TODO_ADDITIONAL=todo-additional.cfg +cat todo.cfg > "$TEST_TODO_ADDITIONAL" +cat >> "$TEST_TODO_ADDITIONAL" <<'EOF' +export PRI_E=$BROWN +export PRI_Z=$LIGHT_PURPLE +EOF +test_todo_session 'additional highlighting pri E+Z' <<'EOF' +>>> todo.sh -d "$TEST_TODO_ADDITIONAL" ls +1 (A) @con01 +prj01 -- Some project 01 task, pri A +2 (B) @con02 +prj02 -- Some project 02 task, pri B +3 (C) @con01 +prj01 -- Some project 01 task, pri C +4 (D) @con02 +prj02 -- Some project 02 task, pri D +5 (E) @con01 +prj01 -- Some project 01 task, pri E +6 (Z) @con02 +prj02 -- Some project 02 task, pri Z +7 @con01 +prj01 -- Some project 01 task, no priority +8 @con02 +prj02 -- Some project 02 task, no priority +-- +TODO: 8 of 8 tasks shown +EOF + +# check changing the fallback highlighting for undefined priorities +# +TEST_TODO_PRI_X=todo-pri-x.cfg +cat todo.cfg > "$TEST_TODO_PRI_X" +cat >> "$TEST_TODO_PRI_X" <<'EOF' +export PRI_X=$BROWN +EOF +test_todo_session 'different highlighting for pri X' <<'EOF' +>>> todo.sh -d "$TEST_TODO_PRI_X" ls +1 (A) @con01 +prj01 -- Some project 01 task, pri A +2 (B) @con02 +prj02 -- Some project 02 task, pri B +3 (C) @con01 +prj01 -- Some project 01 task, pri C +4 (D) @con02 +prj02 -- Some project 02 task, pri D +5 (E) @con01 +prj01 -- Some project 01 task, pri E +6 (Z) @con02 +prj02 -- Some project 02 task, pri Z +7 @con01 +prj01 -- Some project 01 task, no priority +8 @con02 +prj02 -- Some project 02 task, no priority +-- +TODO: 8 of 8 tasks shown +EOF + +test_done diff --git a/todo.sh b/todo.sh index cad4312..9e54ee8 100755 --- a/todo.sh +++ b/todo.sh @@ -460,9 +460,9 @@ ACTION=${1:-$TODOTXT_DEFAULT_ACTION} [ -f "$REPORT_FILE" ] || cp /dev/null "$REPORT_FILE" if [ $TODOTXT_PLAIN = 1 ]; then - PRI_A=$NONE - PRI_B=$NONE - PRI_C=$NONE + for clr in ${!PRI_@}; do + export $clr=$NONE + done PRI_X=$NONE DEFAULT=$NONE fi @@ -570,14 +570,14 @@ _list() { s/^ /0/; ''' \ | eval ${TODOTXT_SORT_COMMAND} \ - | sed ''' - /^[0-9]\{'$PADDING'\} x /! { - /(A)/ s|^.*|'$PRI_A'&'$DEFAULT'| - /(B)/ s|^.*|'$PRI_B'&'$DEFAULT'| - /(C)/ s|^.*|'$PRI_C'&'$DEFAULT'| - /([D-Z])/ s|^.*|'$PRI_X'&'$DEFAULT'| - } - ''' \ + | awk '''{ + pos = match($0, /\([A-Z]\)/) + if( pos > 0 && match($0, /^[0-9]+ x /) != 1 ) { + clr=ENVIRON["PRI_" substr($0, pos+1, 1)] + str = ( clr ? clr : ENVIRON["PRI_X"] ) $0 ENVIRON["DEFAULT"] + gsub( /\\+033/, "\033", str) ; print str + } else { print } + }''' \ | sed ''' s/'${HIDE_PRIORITY_SUBSTITUTION:-^}'//g s/'${HIDE_PROJECTS_SUBSTITUTION:-^}'//g