diff --git a/ChangeLog b/ChangeLog index 3c8f7c8b8..f3391920e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,7 @@ 2.2.0 () Features + + Added framework for testing bash autocompletion. + New helper command '_aliases' for autocompletion purposes. + Stop consider new tasks after quitting a bulk change. + Removed deprecated 'fg:' and 'bg:' attributes. diff --git a/scripts/bash/task.sh b/scripts/bash/task.sh index b33da07e9..a2247039d 100644 --- a/scripts/bash/task.sh +++ b/scripts/bash/task.sh @@ -50,17 +50,18 @@ # http://taskwarrior.org # ################################################################################ +taskcommand='task' _task_get_tags() { - task _tags + $taskcommand _tags } _task_get_config() { - task _config + $taskcommand _config } _task_offer_dependencies() { - COMPREPLY=( $(compgen -W "$(task _ids)" -- ${cur/*:/}) ) + COMPREPLY=( $(compgen -W "$($taskcommand _ids)" -- ${cur/*:/}) ) } _task_offer_priorities() { @@ -68,7 +69,7 @@ _task_offer_priorities() { } _task_offer_projects() { - COMPREPLY=( $(compgen -W "$(task _projects)" -- ${cur/*:/}) ) + COMPREPLY=( $(compgen -W "$($taskcommand _projects)" -- ${cur/*:/}) ) } _task() @@ -88,8 +89,8 @@ _task() # echo "prev='$prev'" # echo "prev2='$prev2'" - commands_aliases=$(echo $(task _commands; task _aliases) | tr " " "\n"|sort|tr "\n" " ") - opts="$commands_aliases $(task _ids) $(task _columns)" + commands_aliases=$(echo $($taskcommand _commands; $taskcommand _aliases) | tr " " "\n"|sort|tr "\n" " ") + opts="$commands_aliases $($taskcommand _ids) $($taskcommand _columns)" case "${prev}" in :) diff --git a/test/bash_completion.t b/test/bash_completion.t new file mode 100755 index 000000000..a96e63a9e --- /dev/null +++ b/test/bash_completion.t @@ -0,0 +1,98 @@ +#! /usr/bin/env perl +################################################################################ +## taskwarrior - a command line task list manager. +## +## Copyright 2006-2012, Paul Beckingham, Federico Hernandez. +## +## Permission is hereby granted, free of charge, to any person obtaining a copy +## of this software and associated documentation files (the "Software"), to deal +## in the Software without restriction, including without limitation the rights +## to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +## copies of the Software, and to permit persons to whom the Software is +## furnished to do so, subject to the following conditions: +## +## The above copyright notice and this permission notice shall be included +## in all copies or substantial portions of the Software. +## +## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +## OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +## THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +## OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +## SOFTWARE. +## +## http://www.opensource.org/licenses/mit-license.php +## +################################################################################ + +use strict; +use warnings; +use Test::More tests => 7; + +# Create the rc file. +if (open my $fh, '>', 'bug.rc') +{ + print $fh "data.location=.\n"; + print $fh "alias.samplealias=long\n"; + + close $fh; + ok (-r 'bug.rc', 'Created bug.rc'); +} + +# Copy task.sh and make substitutions & additions needed for testing. +if (open my $target, '>', 'task.sh') +{ + if (open my $source, '<', '../scripts/bash/task.sh') + { + while (<$source>) + { + my $temp=$_; + chomp($_); + if ($_ eq qw{taskcommand='task'}) + { + print $target "taskcommand='../src/task rc:bug.rc'"; + } + else + { + print $target $temp; + } + } + close ($source); + print $target 'COMP_WORDS=("$@")'; + print $target "\n"; + print $target 'COMP_CWORD=$(($#-1))'; + print $target "\n"; + print $target '_task'; + print $target "\n"; + print $target 'for reply_iter in "${COMPREPLY[@]}"; do'; + print $target "\n"; + print $target ' echo $reply_iter'; + print $target "\n"; + print $target 'done'; + + close $target; + ok (-r 'task.sh', 'Created task.sh'); + } +} + +# aliases should be expanded +my $output = qx{bash ./task.sh task sampleali}; +ok ($? == 0, 'Exit status check'); +like ($output, qr/samplealias/, 'Aliases are expanded'); + +$output = qx{bash ./task.sh task m}; +ok ($? == 0, 'Exit status check'); +like ($output, qr/modify/, 'expansion of \'m\' includes \'modify\''); + +# Cleanup. +unlink qw(pending.data completed.data undo.data backlog.data synch.key bug.rc task.sh); +ok (! -r 'pending.data' && + ! -r 'completed.data' && + ! -r 'undo.data' && + ! -r 'backlog.data' && + ! -r 'synch.key' && + ! -r 'bug.rc' && + ! -r 'task.sh', 'Cleanup'); + +exit 0;