<commit_before>TODO_SAVE_TASKS_FILE="$HOME/.todo.sav"
TODO_SAVE_COLOR_FILE="$HOME/.todo_color.sav"

# Allow to use colors
colors
typeset -T -x -g TODO_TASKS todo_tasks
typeset -a -x -g todo_colors
typeset -i -x -g todo_color_index

# Load previous tasks from saved file
if [[ -e "$TODO_SAVE_TASKS_FILE" &&
      -e "$TODO_SAVE_COLOR_FILE" ]] then
    TODO_TASKS="$(cat $TODO_SAVE_TASKS_FILE)"
    todo_color_index="$(cat $TODO_SAVE_COLOR_FILE)"
    if [[ -z "$TODO_TASKS" ]] then
        todo_tasks[1]=()
    fi
else
    todo_tasks=()
    todo_color_index=1
fi
todo_colors=(red green yellow blue magenta cyan)

precmd_functions+=(todo_display)
zshexit_functions+=(todo_save)

function todo_add_task {
    if [[ $# -gt 0 ]] then
      # Cross-platform newline replacement solution for BSD's (Mac OS X) and GNU's (Linux and Cygwin)
      # Source: http://stackoverflow.com/a/8997314/1298019
      task=$(echo -E "$@" | tr '\n' '\000' | sed -e 's:\x00\x00.*:\n:g' -e 's/\000$//' -e 's/\000/\n    /g')
      task="  - ${fg[${todo_colors[${todo_color_index}]}]}$task$fg[default]"
      todo_tasks+="$task"
      (( todo_color_index %= ${#todo_colors} ))
      (( todo_color_index += 1 ))
    fi
}

function todo_task_done {
    pattern="$1"
    todo_tasks[${(M)todo_tasks[(i)*\[3?m*${pattern}*\[39m*]}]=()
}

function todo_display {
    if [[ ${#todo_tasks} -gt 0 ]] then
      print -l "$fg_bold[default]Todo :$fg_no_bold[default]" ${todo_tasks}
    fi
}

function todo_save {
    echo "$TODO_TASKS" > $TODO_SAVE_TASKS_FILE
    echo "$todo_color_index" > $TODO_SAVE_COLOR_FILE
}<commit_msg>use hook functions to prevent second declaration<commit_after>TODO_SAVE_TASKS_FILE="$HOME/.todo.sav"
TODO_SAVE_COLOR_FILE="$HOME/.todo_color.sav"

# Allow to use colors
colors
typeset -T -x -g TODO_TASKS todo_tasks
typeset -a -x -g todo_colors
typeset -i -x -g todo_color_index

# Load previous tasks from saved file
if [[ -e "$TODO_SAVE_TASKS_FILE" &&
      -e "$TODO_SAVE_COLOR_FILE" ]] then
    TODO_TASKS="$(cat $TODO_SAVE_TASKS_FILE)"
    todo_color_index="$(cat $TODO_SAVE_COLOR_FILE)"
    if [[ -z "$TODO_TASKS" ]] then
        todo_tasks[1]=()
    fi
else
    todo_tasks=()
    todo_color_index=1
fi
todo_colors=(red green yellow blue magenta cyan)

add-zsh-hook precmd todo_display
add-zsh-hook zshexit todo_save

function todo_add_task {
    if [[ $# -gt 0 ]] then
      # Cross-platform newline replacement solution for BSD's (Mac OS X) and GNU's (Linux and Cygwin)
      # Source: http://stackoverflow.com/a/8997314/1298019
      task=$(echo -E "$@" | tr '\n' '\000' | sed -e 's:\x00\x00.*:\n:g' -e 's/\000$//' -e 's/\000/\n    /g')
      task="  - ${fg[${todo_colors[${todo_color_index}]}]}$task$fg[default]"
      todo_tasks+="$task"
      (( todo_color_index %= ${#todo_colors} ))
      (( todo_color_index += 1 ))
    fi
}

function todo_task_done {
    pattern="$1"
    todo_tasks[${(M)todo_tasks[(i)*\[3?m*${pattern}*\[39m*]}]=()
}

function todo_display {
    if [[ ${#todo_tasks} -gt 0 ]] then
      print -l "$fg_bold[default]Todo :$fg_no_bold[default]" ${todo_tasks}
    fi
}

function todo_save {
    echo "$TODO_TASKS" > $TODO_SAVE_TASKS_FILE
    echo "$todo_color_index" > $TODO_SAVE_COLOR_FILE
}
{'fraction_non_alphanumeric': 0.16339257873401933, 'fraction_numerical': 0.02245088868101029, 'mean_word_length': 3.656023222060958, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3905973', 'n_tokens_mistral': 1351, 'n_tokens_neox': 1303, 'n_words': 260}