speed up todo prompt

pull/71/head
romkatv 5 years ago
parent 0b8a9bded5
commit 743b7c6584

@ -1139,7 +1139,7 @@ function _p9k_cached_cmd_stdout() {
shift
local -H stat
zstat -H stat -- $cmd 2>/dev/null || return
if ! _p9k_cache_get "$0" "$stat[inode]" "$stat[mtime]" "$stat[size]" "$cmd" "$@"; then
if ! _p9k_cache_get $0 $stat[inode] $stat[mtime] $stat[size] $stat[mode] $cmd "$@"; then
local out
out=$($cmd "$@" 2>/dev/null)
_p9k_cache_set $(( ! $? )) "$out"
@ -1581,12 +1581,36 @@ prompt_date() {
################################################################
# todo.sh: shows the number of tasks in your todo.sh file
prompt_todo() {
if $(hash todo.sh 2>&-); then
count=$(todo.sh ls | egrep "TODO: [0-9]+ of ([0-9]+) tasks shown" | awk '{ print $4 }')
if [[ "$count" = <-> ]]; then
"$1_prompt_segment" "$0" "$2" "grey50" "$DEFAULT_COLOR" 'TODO_ICON' 0 '' "${count//\%/%%}"
#emulate -L zsh && setopt xtrace
local todo=$commands[todo.sh]
[[ -n $todo ]] || return
if (( ! $+_P9K_TODO_FILE )); then
# There is a bug in todo.sh where it uses $0 instead of ${BASH_SOURCE[0]}. We work around
# it by overriding `dirname`, to which $0 is passed as an argument.
local script="
function dirname() {
local f=\$1
[[ \"\$f\" == bash ]] && f=${(Q)commands[todo.sh]}
command dirname \"\$f\"
}
source todo.sh shorthelp &>/dev/null
echo \"\$TODO_FILE\""
typeset -g _P9K_TODO_FILE=$(bash -c $script)
fi
[[ -r $_P9K_TODO_FILE ]] || return
local -H stat
zstat -H stat -- $_P9K_TODO_FILE 2>/dev/null || return
if ! _p9k_cache_get $0 $stat[inode] $stat[mtime] $stat[size]; then
local count=$($todo -p ls | command tail -1)
emulate -L zsh && setopt extendedglob
if [[ $count == (#b)'TODO: '[[:digit:]]##' of '([[:digit:]]##)' '* ]]; then
_p9k_cache_set 1 $match[1]
else
_p9k_cache_set 0 0
fi
fi
(( $_P9K_CACHE_VAL[1] )) || return
"$1_prompt_segment" "$0" "$2" "grey50" "$DEFAULT_COLOR" 'TODO_ICON' 0 '' "${_P9K_CACHE_VAL[2]}"
}
################################################################

Loading…
Cancel
Save