diff --git a/share/completions/aws.fish b/share/completions/aws.fish new file mode 100644 index 000000000..e9bca56b8 --- /dev/null +++ b/share/completions/aws.fish @@ -0,0 +1,210 @@ +# These are very much incomplete completions for the aws-cli suite. +# In addition to a complete list of services, the `aws s3` completions are mostly complete +# (and are the primary reason this file exists). The automatically generated completions +# for `aws` via `fish_update_completions` are pretty useless due to non-standard formatting. + +function __s3_is_bucket + commandline -ct | string match -q -r -- '^s3://[^/]?$' +end + +function __s3_is_remote_path + commandline -ct | string match -q -r -- "^s3://.*/.*" +end + +function __s3_ls_buckets + aws s3 ls | string replace -rf '.* (\S+)$' 's3://$1/' +end + +function __s3_ls_dir + set -l dir (commandline -ct | string replace -rf '(s3://.*/).*' '$1') + printf "$dir%s\n" (aws s3 ls $dir 2>/dev/null | string replace -fr '^(:?\S+ +\S+ +\S+ |^.*PRE )(.*)' '$2') +end + +# S3 remote completions +complete -c 'aws' -n "__fish_prev_arg_in s3" -xa "cp mv rm help sync ls mb mv presign rb website" +complete -c 'aws' -n "__s3_is_remote_path" -xa "(__s3_ls_dir)" +complete -c 'aws' -n "__s3_is_bucket" -xa "(__s3_ls_buckets)" +complete -c 'aws' -n "not __s3_is_remote_path && __fish_prev_arg_in ls" -xa "(__s3_ls_buckets)" +complete -c 'aws' -n "not __s3_is_remote_path && __fish_prev_arg_in mv cp rm" -a "(__s3_ls_buckets)" + +# This list is extracted from the output of `aws help`, which can't be ingested directly, +# as it emits considerable ANSI output and other terminal control characters. +set -l aws_services \ + acm \ + acm-pca \ + alexaforbusiness \ + amplify \ + apigateway \ + apigatewaymanagementapi \ + apigatewayv2 \ + application-autoscaling \ + appmesh \ + appstream \ + appsync \ + athena \ + autoscaling \ + autoscaling-plans \ + backup \ + batch \ + budgets \ + ce \ + chime \ + cloud9 \ + clouddirectory \ + cloudformation \ + cloudfront \ + cloudhsm \ + cloudhsmv2 \ + cloudsearch \ + cloudsearchdomain \ + cloudtrail \ + cloudwatch \ + codebuild \ + codecommit \ + codepipeline \ + codestar \ + cognito-identity \ + cognito-idp \ + cognito-sync \ + comprehend \ + comprehendmedical \ + configservice \ + configure \ + connect \ + cur \ + datapipeline \ + datasync \ + dax \ + deploy \ + devicefarm \ + directconnect \ + discovery \ + dlm \ + dms \ + docdb \ + ds \ + dynamodb \ + dynamodbstreams \ + ec2 \ + ecr \ + ecs \ + efs \ + eks \ + elasticache \ + elasticbeanstalk \ + elastictranscoder \ + elb \ + elbv2 \ + emr \ + es \ + events \ + firehose \ + fms \ + fsx \ + gamelift \ + glacier \ + globalaccelerator \ + glue \ + greengrass \ + guardduty \ + health \ + help \ + history \ + iam \ + importexport \ + inspector \ + iot \ + iot-data \ + iot-jobs-data \ + iot1click-devices \ + iot1click-projects \ + iotanalytics \ + kafka \ + kinesis \ + kinesis-video-archived-media \ + kinesis-video-media \ + kinesisanalytics \ + kinesisanalyticsv2 \ + kinesisvideo \ + kms \ + lambda \ + lex-models \ + lex-runtime \ + license-manager \ + lightsail \ + logs \ + machinelearning \ + macie \ + marketplace-entitlement \ + marketplacecommerceanalytics \ + mediaconnect \ + mediaconvert \ + medialive \ + mediapackage \ + mediastore \ + mediastore-data \ + mediatailor \ + meteringmarketplace \ + mgh \ + mobile \ + mq \ + mturk \ + neptune \ + opsworks \ + opsworks-cm \ + organizations \ + pi \ + pinpoint \ + pinpoint-email \ + pinpoint-sms-voice \ + polly \ + pricing \ + quicksight \ + ram \ + rds \ + rds-data \ + redshift \ + rekognition \ + resource-groups \ + resourcegroupstaggingapi \ + robomaker \ + route53 \ + route53domains \ + route53resolver \ + s3 \ + s3api \ + s3control \ + sagemaker \ + sagemaker-runtime \ + sdb \ + secretsmanager \ + securityhub \ + serverlessrepo \ + servicecatalog \ + servicediscovery \ + ses \ + shield \ + signer \ + sms \ + snowball \ + sns \ + sqs \ + ssm \ + stepfunctions \ + storagegateway \ + sts \ + support \ + swf \ + textract \ + transcribe \ + transfer \ + translate \ + waf \ + waf-regional \ + workdocs \ + worklink \ + workmail \ + workspaces \ + xray + +complete -c aws -n '__fish_is_first_arg' -xa "$aws_services"