klaudiosinani / taskbook

Tasks, boards & notes for the command-line habitat
MIT License
8.95k stars 382 forks source link

zsh completion script for taskbook #116

Open CuberL opened 5 years ago

CuberL commented 5 years ago

I have written a zsh completion script for taskbook, and i think it can make taskbook‘s operation more fast and convenient. Welcome everyone to try it and give some useful advice. Thanks.

CuberL/tb-zsh-completion

KamehaMehdi commented 5 years ago

Is it possible to create an Oh My Fish extension.? :thinking:

mskian commented 5 years ago

For me, it's very slow on ZSH where I can put sh file?

pfmephisto commented 2 years ago

I see this has been dormant for a while. But for anyone else looking. Although not a full app, here is a script that will help with completion for fish

function __fish_taskbook_no_subcommand --description 'Test if taskbook has yet to be given the subcommand'
    for i in (commandline -opc)
        if contains -- $i archive begin check copy clear delete edit find list move note priority restore star task timeline version
            return 1
        end
    end
    return 0
end

function __fish_print_taskbook_id --description 'Print a list of ids for tasks and notes in taskbook' -a select
    switch $select
        case notes
            cat ~/.taskbook/storage/storage.json | jq --raw-output '.[] | select(._isTask==false) | ._id' | sed 's/:/\\:/g'
        case archive_notes
            cat ~/.taskbook/archive/archive.json | jq --raw-output '.[] | select(._isTask==false) | ._id' | sed 's/:/\\:/g'
        case tasks
            cat ~/.taskbook/storage/storage.json | jq --raw-output '.[] | select(._isTask==true) | ._id' | sed 's/:/\\:/g'
        case archive_tasks
            cat  ~/.taskbook/archive/archive.json | jq --raw-output '.[] | select(._isTask==true) | ._id' | sed 's/:/\\:/g'
        case all
            cat ~/.taskbook/storage/storage.json | jq --raw-output '.[] | ._id' | sed 's/:/\\:/g' #.description

    end
end

function __fish_print_taskbook_description --description 'Print a list of names for tasks and notes in taskbook' -a select
    switch $select
        case notes
            cat ~/.taskbook/storage/storage.json | jq --raw-output '.[] | select(._isTask==false) | .description' | sed 's/:/\\:/g'
        case archive_notes
            cat ~/.taskbook/archive/archive.json | jq --raw-output '.[] | select(._isTask==false) | .description' | sed 's/:/\\:/g'
        case tasks
            cat ~/.taskbook/storage/storage.json | jq --raw-output '.[] | select(._isTask==true) | .description' | sed 's/:/\\:/g'
        case archive_tasks
            cat  ~/.taskbook/archive/archive.json | jq --raw-output '.[] | select(._isTask==true) | .description' | sed 's/:/\\:/g'
        case all
            cat ~/.taskbook/storage/storage.json | jq --raw-output '.[] | ._id' | sed 's/:/\\:/g' #.description
    end
end

function __fish_print_taskbook_boards --description 'Print a list of boards in taskbook'
    cat  ~/.taskbook/storage/storage.json | jq --raw-output '.[] | @sh "\(.boards | .[])"' | sort | uniq | awk '{sub(/^\'My\sBoard\'/, "@myboard"); gsub(/\\\\|\\\.\'/,""); print $0}' | tr -d "'" | tr -d "@"
end

set -l commands None -a --archive -b --begin -c --check -y --copy --clear -d --delete  -e --edit -f --find -h --help  -l --list -m --move -n --note -p --priority -r --restore -s --star -t --task -i --timeline -v --version

# Main entry
complete -c taskbook -f -n '__fish_taskbook_no_subcommand'                     -d 'Display board view'
complete -c taskbook -f -n "not __fish_seen_subcommand_from $commands" -a 'None --archive --begin --check --copy --clear --delete --edit --find --help --list --move --note --priority --restore --star --task --timeline --version' -d 'Command'

# No sub commands
complete -c taskbook -f -n '__fish_taskbook_no_subcommand' -s a -l archive     -d 'Display archived items'
complete -c taskbook -f -n '__fish_taskbook_no_subcommand'      -l clear       -d 'Delete all checked items'
complete -c taskbook -f -n '__fish_taskbook_no_subcommand' -s i -l timeline    -d 'Display timeline view'

# Look up items by name
complete -c taskbook -f -n '__fish_taskbook_no_subcommand' -s b -l begin       -d 'Start/pause task'
complete -c taskbook -f -n '__fish_taskbook_no_subcommand' -s c -l check       -d 'Check/uncheck task'
complete -c taskbook -f -n '__fish_taskbook_no_subcommand' -s d -l delete      -d 'Delete item'
complete -c taskbook -f -n '__fish_taskbook_no_subcommand' -s y -l copy        -d 'Copy item description'
complete -c taskbook -f -n '__fish_taskbook_no_subcommand' -s s -l star        -d 'Star/unstar item'             
complete -c taskbook -f -n '__fish_seen_subcommand_from -d --delete -b --begin -c --check -y --copy -s --star' -a '(__fish_print_taskbook_id tasks)' -d 'Task'
complete -c taskbook -f -n '__fish_seen_subcommand_from -d --delete -b --begin -c --check -y --copy -s --star' -a '(__fish_print_taskbook_id notes)' -d 'Note'

# Look up form archive
complete -c taskbook -f -n '__fish_taskbook_no_subcommand' -s r -l restore     -d 'Restore items from archive'
complete -c taskbook -f -n '__fish_seen_subcommand_from -r --restore' -a '(__fish_print_taskbook_id archive_tasks)' -d 'Task'
complete -c taskbook -f -n '__fish_seen_subcommand_from -r --restore' -a '(__fish_print_taskbook_id archive_notes)' -d 'Note'

# List options
complete -c taskbook -f -n '__fish_taskbook_no_subcommand' -s l -l list        -d 'List items by attributes'
complete -c taskbook -f -n '__fish_seen_subcommand_from -l --list' -a 'tasks' -d 'Task'
complete -c taskbook -f -n '__fish_seen_subcommand_from -l --list' -a 'notes' -d 'Notes'
complete -c taskbook -f -n '__fish_seen_subcommand_from -l --list' -a 'pending' -d 'Pending Items'
complete -c taskbook -f -n '__fish_seen_subcommand_from -l --list' -a 'started ' -d 'Tasks in-progress'
complete -c taskbook -f -n '__fish_seen_subcommand_from -l --list' -a 'done' -d 'Completed Tasks'
complete -c taskbook -f -n '__fish_seen_subcommand_from -l --list' -a 'starred' -d 'Starred Items'

# 
complete -c taskbook -f -n '__fish_taskbook_no_subcommand' -s m -l move        -d 'Move item between boards'
complete -c taskbook -f -n '__fish_taskbook_no_subcommand' -s e -l edit        -d 'Edit item description'
complete -c taskbook -f -n '__fish_seen_subcommand_from -m --move' -a '@(__fish_print_taskbook_id tasks)' -d 'Task'
complete -c taskbook -f -n '__fish_seen_subcommand_from -m --move' -a '@(__fish_print_taskbook_id notes)' -d 'Note'
complete -c taskbook -f -n '__fish_seen_subcommand_from -m --move' -a '(__fish_print_taskbook_boards)' -d 'Board'
complete -c taskbook -f -n '__fish_seen_subcommand_from -e --edit' -a '@(__fish_print_taskbook_id all)' -d 'Itme'

# Crete Note
complete -c taskbook -f -n '__fish_taskbook_no_subcommand' -s n -l note        -d 'Create note'
complete -c taskbook -f -n '__fish_taskbook_no_subcommand' -s t -l task        -d 'Create task'
complete -c taskbook -f -n '__fish_seen_subcommand_from -n --note -t --task' -a '@(__fish_print_taskbook_boards)' -d 'Board'
complete -c taskbook -f -n '__fish_seen_subcommand_from -n --note -t --task' -a 'p:1 p:2 p:3' -d 'Set Priority'

# Set Priority
complete -c taskbook -f -n '__fish_taskbook_no_subcommand' -s p -l priority    -d 'Update priority of task'
complete -c taskbook -f -n '__fish_seen_subcommand_from -p --priority' -a '@(__fish_print_taskbook_id all)' -d 'Itme'
complete -c taskbook -f -n '__fish_seen_subcommand_from -p --priority' -a '1 2 3' -d 'Priority'

# Any or no Input
complete -c taskbook -f -n '__fish_taskbook_no_subcommand' -s f -l find        -d 'Search for items'
complete -c taskbook -f -n '__fish_taskbook_no_subcommand' -s h -l help        -d 'Display help message'
complete -c taskbook -f -n '__fish_taskbook_no_subcommand' -s v -l version     -d 'Display installed version'