- Updated task.fish (thanks to Roman Inflianskas).
This commit is contained in:
Paul Beckingham 2014-09-06 12:14:28 -04:00
parent 11c013d88c
commit 02b2b9b212

View file

@ -49,9 +49,14 @@ end
function __fish.task.partial function __fish.task.partial
set wrapped $argv[1] set wrapped $argv[1]
set what $argv[2] set what $argv[2]
set -q argv[3]; and set argv $argv[3..-1] set -q argv[3]; and set f_argv $argv[3..-1]
set f __fish.task.$wrapped.$what set f __fish.task.$wrapped.$what
functions -q $f; and eval $f $argv functions -q $f; and eval $f $f_argv
end
function __fish.task.zsh
set -q argv[2]; and set task_argv $argv[2..-1]
task _zsh$argv[1] $task_argv | sed 's/:/\t/'
end end
@ -63,7 +68,7 @@ end
function __fish.task.current.command function __fish.task.current.command
# find command in commandline by list intersection # find command in commandline by list intersection
begin; commandline -pco; and __fish.task.list._command all | cut -d ':' -f 1; end | sort | uniq -d | xargs begin; commandline -pco; and __fish.task.list._command all | cut -d ' ' -f 1; end | sort | uniq -d | xargs
end end
function __fish.task.before_command function __fish.task.before_command
@ -78,7 +83,7 @@ function __fish.task.need_to_complete.attr_name
end end
function __fish.task.need_to_complete.attr_value function __fish.task.need_to_complete.attr_value
__fish.task.need_to_complete.filter __fish.task.need_to_complete.attr_name
end end
function __fish.task.need_to_complete.command function __fish.task.need_to_complete.command
@ -98,6 +103,10 @@ function __fish.task.need_to_complete.id
__fish.task.need_to_complete.filter __fish.task.need_to_complete.filter
end end
function __fish.task.need_to_complete.task
__fish.task.need_to_complete.filter
end
function __fish.task.need_to_complete function __fish.task.need_to_complete
__fish.task.partial need_to_complete $argv __fish.task.partial need_to_complete $argv
end end
@ -105,13 +114,49 @@ end
# list printers # list printers
function __fish.task.token_clean
sed 's/[^a-z_.]//g; s/^\.$//g'
end
function __fish.task.list.attr_name function __fish.task.list.attr_name
task _columns | sed 's/$/:/g' task _columns | sed 's/$/:\tattribute/g'
# BUG: doesn't support file completion
echo rc echo rc
end end
function __fish.task.list.attr_value
set token (commandline -ct | cut -d ':' -f 1 | cut -d '.' -f 1 | __fish.task.token_clean)
if test -n $token
set attr_names (__fish.task.list.attr_name | sed 's/:\t/\t/g' | grep '^'$token | cut -d ' ' -f 1)
for attr_name in $attr_names
if test -n $attr_name
__fish.task.list.attr_value_by_name $attr_name
end
end
end
__fish.task.list.tag
end
function __fish.task.list.attr_value_by_name
set attr $argv[1]
switch $attr
case 'rc'
__fish.task.list.rc
case 'depends' 'limit' 'priority' 'status'
__fish.task.combos_simple $attr (__fish.task.list $attr)
# case 'description' 'due' 'entry' 'end' 'start' 'project' 'recur' 'until' 'wait'
case '*'
# BUG: remove in 2.4.0
if echo (commandline -ct) | grep -q '\.'
__fish.task.combos_with_mods $attr (__fish.task.list $attr)
else
__fish.task.combos_simple $attr (__fish.task.list $attr)
end
end
end
function __fish.task.list._command function __fish.task.list._command
task _zshcommands $argv __fish.task.zsh commands $argv
end end
function __fish.task.list.command function __fish.task.list.command
@ -120,45 +165,39 @@ function __fish.task.list.command
end end
function __fish.task.list.command_mods function __fish.task.list.command_mods
# BUG: fill issue to have _zshcommand mods
for command in 'add' 'annotate' 'append' 'delete' 'done' 'duplicate' 'log' 'modify' 'prepend' 'start' 'stop' for command in 'add' 'annotate' 'append' 'delete' 'done' 'duplicate' 'log' 'modify' 'prepend' 'start' 'stop'
echo $command echo $command
end end
end end
function __fish.task.list.depends function __fish.task.list.depends
task _ids __fish.task.list.id with_description
end end
function __fish.task.list.description function __fish.task.list.description
task _zshids | cut -d ':' -f 2 __fish.task.zsh ids $argv | cut -d ' ' -f 2-
end end
function __fish.task.list.id function __fish.task.list.id
task _zshids set show_type $argv[1]
if test -z $show_type
task _ids
else if [ $show_type = 'with_description' ]
__fish.task.zsh ids
end
end end
# BUG: remove in 2.4.0
function __fish.task.list.mod function __fish.task.list.mod
# BUG: remove in 2.4.0 for mod in 'before' 'after' 'over' 'under' 'none' 'is' 'isnt' 'has' 'hasnt' 'startswith' 'endswith' 'word' 'noword'
echo before echo $mod
echo after end
echo over
echo under
echo none
echo is
echo isnt
echo has
echo hasnt
echo startswith
echo endswith
echo word
echo noword
end end
function __fish.task.list.priority function __fish.task.list.priority
echo H for priority in 'H' 'M' 'L'
echo M echo $priority
echo L end
end end
function __fish.task.list.project function __fish.task.list.project
@ -166,7 +205,6 @@ function __fish.task.list.project
end end
function __fish.task.list.rc function __fish.task.list.rc
echo rc:
for value in (task _config) for value in (task _config)
echo rc.$value: echo rc.$value:
end end
@ -187,13 +225,24 @@ function __fish.task.list.tag
end end
function __fish.task.list.task function __fish.task.list.task
task _zshids | sed -E 's/^(.*):(.*)$/"\2":\1/g' __fish.task.zsh ids | sed -E 's/^(.*)\t(.*)$/\2\ttask [id = \1]/g'
end end
function __fish.task.list function __fish.task.list
__fish.task.partial list $argv __fish.task.partial list $argv
end end
function __fish.task.results_var_name
echo $argv | sed 's/^/__fish.task.list /g; s/$/ results/g; s/[ .]/_/g;'
end
function __fish.task.list_results
set var_name (__fish.task.results_var_name $name)
for line in $$var_name
echo $line
end
end
# working with attributes # working with attributes
@ -205,80 +254,31 @@ function __fish.task.combos_simple
echo "$attr_name:$attr_value" echo "$attr_name:$attr_value"
end end
else else
echo $attr_name: echo "$attr_name:"
end end
end end
# BUG: remove in 2.4.0
function __fish.task.combos_with_mods function __fish.task.combos_with_mods
# BUG: remove in 2.4.0
__fish.task.combos_simple $argv __fish.task.combos_simple $argv
for mod in (__fish.task.list.mod) for mod in (__fish.task.list.mod)
__fish.task.combos_simple $argv[1].$mod $argv[2..-1] __fish.task.combos_simple $argv[1].$mod $argv[2..-1]
end end
end end
function __fish.task.list.attr_value
set attr $argv[1]
switch $attr
case 'depends' 'limit' 'priority' 'rc' 'status'
__fish.task.combos_simple $attr (__fish.task.list $attr)
# case 'description' 'due' 'entry' 'end' 'start' 'project' 'recur' 'until' 'wait'
case '*'
# BUG: remove in 2.4.0
if echo (commandline -ct) | grep -q '\.'
__fish.task.combos_with_mods $attr (__fish.task.list $attr)
else
__fish.task.combos_simple $attr (__fish.task.list $attr)
end
end
end
function __fish.task.body
set token (commandline -ct)
if test -n $token
__fish.task.attr $token
end
__fish.task.list.tag
end
# actual completion # actual completion
function __fish.task.complete function __fish.task.complete
complete -c task -A -f $argv set what $argv
set list_command "__fish.task.list $what"
set check_function "__fish.task.need_to_complete $what"
complete -c task -u -f -n $check_function -a "(eval $list_command)"
end end
function __fish.task.complete.with_description_2 __fish.task.complete command all
# argv: list_command check_function __fish.task.complete command filter
for arg_description in (eval $argv[1]) __fish.task.complete attr_value
set arg (echo $arg_description | cut -d ':' -f 1) __fish.task.complete attr_name
set description (echo $arg_description | cut -d ':' -f 2) __fish.task.complete task
__fish.task.complete -n $argv[2] -a $arg -d $description __fish.task.complete id with_description
end
end
function __fish.task.complete.with_description
__fish.task.complete.with_description_2 "__fish.task.list $argv" "__fish.task.need_to_complete $argv"
end
function __fish.task.list.current_attr_value
set token (commandline -ct | cut -d ':' -f 1 | cut -d '.' -f 1 | sed 's/[^a-z_.]//g; s/^\.$//g')
if test -n $token
set attr_names (__fish.task.list.attr_name | grep '^'$token | cut -d ':' -f 1)
for attr_name in $attr_names
if test -n $attr_name
__fish.task.list.attr_value $attr_name
end
end
end
__fish.task.list.tag
end
__fish.task.complete.with_description command all
__fish.task.complete.with_description command filter
__fish.task.complete.with_description id
__fish.task.complete.with_description attr_name
__fish.task.complete -n '__fish.task.need_to_complete.attr_name' -a '(__fish.task.list.current_attr_value)'