github.com/advanderveer/restic@v0.8.1-0.20171209104529-42a8c19aaea6/doc/bash-completion.sh (about) 1 # bash completion for restic -*- shell-script -*- 2 3 __debug() 4 { 5 if [[ -n ${BASH_COMP_DEBUG_FILE} ]]; then 6 echo "$*" >> "${BASH_COMP_DEBUG_FILE}" 7 fi 8 } 9 10 # Homebrew on Macs have version 1.3 of bash-completion which doesn't include 11 # _init_completion. This is a very minimal version of that function. 12 __my_init_completion() 13 { 14 COMPREPLY=() 15 _get_comp_words_by_ref "$@" cur prev words cword 16 } 17 18 __index_of_word() 19 { 20 local w word=$1 21 shift 22 index=0 23 for w in "$@"; do 24 [[ $w = "$word" ]] && return 25 index=$((index+1)) 26 done 27 index=-1 28 } 29 30 __contains_word() 31 { 32 local w word=$1; shift 33 for w in "$@"; do 34 [[ $w = "$word" ]] && return 35 done 36 return 1 37 } 38 39 __handle_reply() 40 { 41 __debug "${FUNCNAME[0]}" 42 case $cur in 43 -*) 44 if [[ $(type -t compopt) = "builtin" ]]; then 45 compopt -o nospace 46 fi 47 local allflags 48 if [ ${#must_have_one_flag[@]} -ne 0 ]; then 49 allflags=("${must_have_one_flag[@]}") 50 else 51 allflags=("${flags[*]} ${two_word_flags[*]}") 52 fi 53 COMPREPLY=( $(compgen -W "${allflags[*]}" -- "$cur") ) 54 if [[ $(type -t compopt) = "builtin" ]]; then 55 [[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace 56 fi 57 58 # complete after --flag=abc 59 if [[ $cur == *=* ]]; then 60 if [[ $(type -t compopt) = "builtin" ]]; then 61 compopt +o nospace 62 fi 63 64 local index flag 65 flag="${cur%%=*}" 66 __index_of_word "${flag}" "${flags_with_completion[@]}" 67 COMPREPLY=() 68 if [[ ${index} -ge 0 ]]; then 69 PREFIX="" 70 cur="${cur#*=}" 71 ${flags_completion[${index}]} 72 if [ -n "${ZSH_VERSION}" ]; then 73 # zsh completion needs --flag= prefix 74 eval "COMPREPLY=( \"\${COMPREPLY[@]/#/${flag}=}\" )" 75 fi 76 fi 77 fi 78 return 0; 79 ;; 80 esac 81 82 # check if we are handling a flag with special work handling 83 local index 84 __index_of_word "${prev}" "${flags_with_completion[@]}" 85 if [[ ${index} -ge 0 ]]; then 86 ${flags_completion[${index}]} 87 return 88 fi 89 90 # we are parsing a flag and don't have a special handler, no completion 91 if [[ ${cur} != "${words[cword]}" ]]; then 92 return 93 fi 94 95 local completions 96 completions=("${commands[@]}") 97 if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then 98 completions=("${must_have_one_noun[@]}") 99 fi 100 if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then 101 completions+=("${must_have_one_flag[@]}") 102 fi 103 COMPREPLY=( $(compgen -W "${completions[*]}" -- "$cur") ) 104 105 if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then 106 COMPREPLY=( $(compgen -W "${noun_aliases[*]}" -- "$cur") ) 107 fi 108 109 if [[ ${#COMPREPLY[@]} -eq 0 ]]; then 110 declare -F __custom_func >/dev/null && __custom_func 111 fi 112 113 # available in bash-completion >= 2, not always present on macOS 114 if declare -F __ltrim_colon_completions >/dev/null; then 115 __ltrim_colon_completions "$cur" 116 fi 117 } 118 119 # The arguments should be in the form "ext1|ext2|extn" 120 __handle_filename_extension_flag() 121 { 122 local ext="$1" 123 _filedir "@(${ext})" 124 } 125 126 __handle_subdirs_in_dir_flag() 127 { 128 local dir="$1" 129 pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 130 } 131 132 __handle_flag() 133 { 134 __debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}" 135 136 # if a command required a flag, and we found it, unset must_have_one_flag() 137 local flagname=${words[c]} 138 local flagvalue 139 # if the word contained an = 140 if [[ ${words[c]} == *"="* ]]; then 141 flagvalue=${flagname#*=} # take in as flagvalue after the = 142 flagname=${flagname%%=*} # strip everything after the = 143 flagname="${flagname}=" # but put the = back 144 fi 145 __debug "${FUNCNAME[0]}: looking for ${flagname}" 146 if __contains_word "${flagname}" "${must_have_one_flag[@]}"; then 147 must_have_one_flag=() 148 fi 149 150 # if you set a flag which only applies to this command, don't show subcommands 151 if __contains_word "${flagname}" "${local_nonpersistent_flags[@]}"; then 152 commands=() 153 fi 154 155 # keep flag value with flagname as flaghash 156 if [ -n "${flagvalue}" ] ; then 157 flaghash[${flagname}]=${flagvalue} 158 elif [ -n "${words[ $((c+1)) ]}" ] ; then 159 flaghash[${flagname}]=${words[ $((c+1)) ]} 160 else 161 flaghash[${flagname}]="true" # pad "true" for bool flag 162 fi 163 164 # skip the argument to a two word flag 165 if __contains_word "${words[c]}" "${two_word_flags[@]}"; then 166 c=$((c+1)) 167 # if we are looking for a flags value, don't show commands 168 if [[ $c -eq $cword ]]; then 169 commands=() 170 fi 171 fi 172 173 c=$((c+1)) 174 175 } 176 177 __handle_noun() 178 { 179 __debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}" 180 181 if __contains_word "${words[c]}" "${must_have_one_noun[@]}"; then 182 must_have_one_noun=() 183 elif __contains_word "${words[c]}" "${noun_aliases[@]}"; then 184 must_have_one_noun=() 185 fi 186 187 nouns+=("${words[c]}") 188 c=$((c+1)) 189 } 190 191 __handle_command() 192 { 193 __debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}" 194 195 local next_command 196 if [[ -n ${last_command} ]]; then 197 next_command="_${last_command}_${words[c]//:/__}" 198 else 199 if [[ $c -eq 0 ]]; then 200 next_command="_$(basename "${words[c]//:/__}")" 201 else 202 next_command="_${words[c]//:/__}" 203 fi 204 fi 205 c=$((c+1)) 206 __debug "${FUNCNAME[0]}: looking for ${next_command}" 207 declare -F "$next_command" >/dev/null && $next_command 208 } 209 210 __handle_word() 211 { 212 if [[ $c -ge $cword ]]; then 213 __handle_reply 214 return 215 fi 216 __debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}" 217 if [[ "${words[c]}" == -* ]]; then 218 __handle_flag 219 elif __contains_word "${words[c]}" "${commands[@]}"; then 220 __handle_command 221 elif [[ $c -eq 0 ]] && __contains_word "$(basename "${words[c]}")" "${commands[@]}"; then 222 __handle_command 223 else 224 __handle_noun 225 fi 226 __handle_word 227 } 228 229 _restic_backup() 230 { 231 last_command="restic_backup" 232 commands=() 233 234 flags=() 235 two_word_flags=() 236 local_nonpersistent_flags=() 237 flags_with_completion=() 238 flags_completion=() 239 240 flags+=("--exclude=") 241 two_word_flags+=("-e") 242 local_nonpersistent_flags+=("--exclude=") 243 flags+=("--exclude-caches") 244 local_nonpersistent_flags+=("--exclude-caches") 245 flags+=("--exclude-file=") 246 local_nonpersistent_flags+=("--exclude-file=") 247 flags+=("--exclude-if-present=") 248 local_nonpersistent_flags+=("--exclude-if-present=") 249 flags+=("--files-from=") 250 local_nonpersistent_flags+=("--files-from=") 251 flags+=("--force") 252 flags+=("-f") 253 local_nonpersistent_flags+=("--force") 254 flags+=("--help") 255 flags+=("-h") 256 local_nonpersistent_flags+=("--help") 257 flags+=("--hostname=") 258 local_nonpersistent_flags+=("--hostname=") 259 flags+=("--one-file-system") 260 flags+=("-x") 261 local_nonpersistent_flags+=("--one-file-system") 262 flags+=("--parent=") 263 local_nonpersistent_flags+=("--parent=") 264 flags+=("--stdin") 265 local_nonpersistent_flags+=("--stdin") 266 flags+=("--stdin-filename=") 267 local_nonpersistent_flags+=("--stdin-filename=") 268 flags+=("--tag=") 269 local_nonpersistent_flags+=("--tag=") 270 flags+=("--time=") 271 local_nonpersistent_flags+=("--time=") 272 flags+=("--cacert=") 273 flags+=("--cache-dir=") 274 flags+=("--json") 275 flags+=("--limit-download=") 276 flags+=("--limit-upload=") 277 flags+=("--no-cache") 278 flags+=("--no-lock") 279 flags+=("--option=") 280 two_word_flags+=("-o") 281 flags+=("--password-file=") 282 two_word_flags+=("-p") 283 flags+=("--quiet") 284 flags+=("-q") 285 flags+=("--repo=") 286 two_word_flags+=("-r") 287 288 must_have_one_flag=() 289 must_have_one_noun=() 290 noun_aliases=() 291 } 292 293 _restic_cat() 294 { 295 last_command="restic_cat" 296 commands=() 297 298 flags=() 299 two_word_flags=() 300 local_nonpersistent_flags=() 301 flags_with_completion=() 302 flags_completion=() 303 304 flags+=("--help") 305 flags+=("-h") 306 local_nonpersistent_flags+=("--help") 307 flags+=("--cacert=") 308 flags+=("--cache-dir=") 309 flags+=("--json") 310 flags+=("--limit-download=") 311 flags+=("--limit-upload=") 312 flags+=("--no-cache") 313 flags+=("--no-lock") 314 flags+=("--option=") 315 two_word_flags+=("-o") 316 flags+=("--password-file=") 317 two_word_flags+=("-p") 318 flags+=("--quiet") 319 flags+=("-q") 320 flags+=("--repo=") 321 two_word_flags+=("-r") 322 323 must_have_one_flag=() 324 must_have_one_noun=() 325 noun_aliases=() 326 } 327 328 _restic_check() 329 { 330 last_command="restic_check" 331 commands=() 332 333 flags=() 334 two_word_flags=() 335 local_nonpersistent_flags=() 336 flags_with_completion=() 337 flags_completion=() 338 339 flags+=("--check-unused") 340 local_nonpersistent_flags+=("--check-unused") 341 flags+=("--help") 342 flags+=("-h") 343 local_nonpersistent_flags+=("--help") 344 flags+=("--read-data") 345 local_nonpersistent_flags+=("--read-data") 346 flags+=("--with-cache") 347 local_nonpersistent_flags+=("--with-cache") 348 flags+=("--cacert=") 349 flags+=("--cache-dir=") 350 flags+=("--json") 351 flags+=("--limit-download=") 352 flags+=("--limit-upload=") 353 flags+=("--no-cache") 354 flags+=("--no-lock") 355 flags+=("--option=") 356 two_word_flags+=("-o") 357 flags+=("--password-file=") 358 two_word_flags+=("-p") 359 flags+=("--quiet") 360 flags+=("-q") 361 flags+=("--repo=") 362 two_word_flags+=("-r") 363 364 must_have_one_flag=() 365 must_have_one_noun=() 366 noun_aliases=() 367 } 368 369 _restic_dump() 370 { 371 last_command="restic_dump" 372 commands=() 373 374 flags=() 375 two_word_flags=() 376 local_nonpersistent_flags=() 377 flags_with_completion=() 378 flags_completion=() 379 380 flags+=("--help") 381 flags+=("-h") 382 local_nonpersistent_flags+=("--help") 383 flags+=("--host=") 384 two_word_flags+=("-H") 385 local_nonpersistent_flags+=("--host=") 386 flags+=("--path=") 387 local_nonpersistent_flags+=("--path=") 388 flags+=("--tag=") 389 local_nonpersistent_flags+=("--tag=") 390 flags+=("--cacert=") 391 flags+=("--cache-dir=") 392 flags+=("--json") 393 flags+=("--limit-download=") 394 flags+=("--limit-upload=") 395 flags+=("--no-cache") 396 flags+=("--no-lock") 397 flags+=("--option=") 398 two_word_flags+=("-o") 399 flags+=("--password-file=") 400 two_word_flags+=("-p") 401 flags+=("--quiet") 402 flags+=("-q") 403 flags+=("--repo=") 404 two_word_flags+=("-r") 405 406 must_have_one_flag=() 407 must_have_one_noun=() 408 noun_aliases=() 409 } 410 411 _restic_find() 412 { 413 last_command="restic_find" 414 commands=() 415 416 flags=() 417 two_word_flags=() 418 local_nonpersistent_flags=() 419 flags_with_completion=() 420 flags_completion=() 421 422 flags+=("--help") 423 flags+=("-h") 424 local_nonpersistent_flags+=("--help") 425 flags+=("--host=") 426 two_word_flags+=("-H") 427 local_nonpersistent_flags+=("--host=") 428 flags+=("--ignore-case") 429 flags+=("-i") 430 local_nonpersistent_flags+=("--ignore-case") 431 flags+=("--long") 432 flags+=("-l") 433 local_nonpersistent_flags+=("--long") 434 flags+=("--newest=") 435 two_word_flags+=("-N") 436 local_nonpersistent_flags+=("--newest=") 437 flags+=("--oldest=") 438 two_word_flags+=("-O") 439 local_nonpersistent_flags+=("--oldest=") 440 flags+=("--path=") 441 local_nonpersistent_flags+=("--path=") 442 flags+=("--snapshot=") 443 two_word_flags+=("-s") 444 local_nonpersistent_flags+=("--snapshot=") 445 flags+=("--tag=") 446 local_nonpersistent_flags+=("--tag=") 447 flags+=("--cacert=") 448 flags+=("--cache-dir=") 449 flags+=("--json") 450 flags+=("--limit-download=") 451 flags+=("--limit-upload=") 452 flags+=("--no-cache") 453 flags+=("--no-lock") 454 flags+=("--option=") 455 two_word_flags+=("-o") 456 flags+=("--password-file=") 457 two_word_flags+=("-p") 458 flags+=("--quiet") 459 flags+=("-q") 460 flags+=("--repo=") 461 two_word_flags+=("-r") 462 463 must_have_one_flag=() 464 must_have_one_noun=() 465 noun_aliases=() 466 } 467 468 _restic_forget() 469 { 470 last_command="restic_forget" 471 commands=() 472 473 flags=() 474 two_word_flags=() 475 local_nonpersistent_flags=() 476 flags_with_completion=() 477 flags_completion=() 478 479 flags+=("--keep-last=") 480 two_word_flags+=("-l") 481 local_nonpersistent_flags+=("--keep-last=") 482 flags+=("--keep-hourly=") 483 two_word_flags+=("-H") 484 local_nonpersistent_flags+=("--keep-hourly=") 485 flags+=("--keep-daily=") 486 two_word_flags+=("-d") 487 local_nonpersistent_flags+=("--keep-daily=") 488 flags+=("--keep-weekly=") 489 two_word_flags+=("-w") 490 local_nonpersistent_flags+=("--keep-weekly=") 491 flags+=("--keep-monthly=") 492 two_word_flags+=("-m") 493 local_nonpersistent_flags+=("--keep-monthly=") 494 flags+=("--keep-yearly=") 495 two_word_flags+=("-y") 496 local_nonpersistent_flags+=("--keep-yearly=") 497 flags+=("--keep-tag=") 498 local_nonpersistent_flags+=("--keep-tag=") 499 flags+=("--host=") 500 local_nonpersistent_flags+=("--host=") 501 flags+=("--hostname=") 502 local_nonpersistent_flags+=("--hostname=") 503 flags+=("--tag=") 504 local_nonpersistent_flags+=("--tag=") 505 flags+=("--path=") 506 local_nonpersistent_flags+=("--path=") 507 flags+=("--compact") 508 flags+=("-c") 509 local_nonpersistent_flags+=("--compact") 510 flags+=("--group-by=") 511 two_word_flags+=("-g") 512 local_nonpersistent_flags+=("--group-by=") 513 flags+=("--dry-run") 514 flags+=("-n") 515 local_nonpersistent_flags+=("--dry-run") 516 flags+=("--prune") 517 local_nonpersistent_flags+=("--prune") 518 flags+=("--help") 519 flags+=("-h") 520 local_nonpersistent_flags+=("--help") 521 flags+=("--cacert=") 522 flags+=("--cache-dir=") 523 flags+=("--json") 524 flags+=("--limit-download=") 525 flags+=("--limit-upload=") 526 flags+=("--no-cache") 527 flags+=("--no-lock") 528 flags+=("--option=") 529 two_word_flags+=("-o") 530 flags+=("--password-file=") 531 two_word_flags+=("-p") 532 flags+=("--quiet") 533 flags+=("-q") 534 flags+=("--repo=") 535 two_word_flags+=("-r") 536 537 must_have_one_flag=() 538 must_have_one_noun=() 539 noun_aliases=() 540 } 541 542 _restic_generate() 543 { 544 last_command="restic_generate" 545 commands=() 546 547 flags=() 548 two_word_flags=() 549 local_nonpersistent_flags=() 550 flags_with_completion=() 551 flags_completion=() 552 553 flags+=("--bash-completion=") 554 local_nonpersistent_flags+=("--bash-completion=") 555 flags+=("--help") 556 flags+=("-h") 557 local_nonpersistent_flags+=("--help") 558 flags+=("--man=") 559 local_nonpersistent_flags+=("--man=") 560 flags+=("--zsh-completion=") 561 local_nonpersistent_flags+=("--zsh-completion=") 562 flags+=("--cacert=") 563 flags+=("--cache-dir=") 564 flags+=("--json") 565 flags+=("--limit-download=") 566 flags+=("--limit-upload=") 567 flags+=("--no-cache") 568 flags+=("--no-lock") 569 flags+=("--option=") 570 two_word_flags+=("-o") 571 flags+=("--password-file=") 572 two_word_flags+=("-p") 573 flags+=("--quiet") 574 flags+=("-q") 575 flags+=("--repo=") 576 two_word_flags+=("-r") 577 578 must_have_one_flag=() 579 must_have_one_noun=() 580 noun_aliases=() 581 } 582 583 _restic_init() 584 { 585 last_command="restic_init" 586 commands=() 587 588 flags=() 589 two_word_flags=() 590 local_nonpersistent_flags=() 591 flags_with_completion=() 592 flags_completion=() 593 594 flags+=("--help") 595 flags+=("-h") 596 local_nonpersistent_flags+=("--help") 597 flags+=("--cacert=") 598 flags+=("--cache-dir=") 599 flags+=("--json") 600 flags+=("--limit-download=") 601 flags+=("--limit-upload=") 602 flags+=("--no-cache") 603 flags+=("--no-lock") 604 flags+=("--option=") 605 two_word_flags+=("-o") 606 flags+=("--password-file=") 607 two_word_flags+=("-p") 608 flags+=("--quiet") 609 flags+=("-q") 610 flags+=("--repo=") 611 two_word_flags+=("-r") 612 613 must_have_one_flag=() 614 must_have_one_noun=() 615 noun_aliases=() 616 } 617 618 _restic_key() 619 { 620 last_command="restic_key" 621 commands=() 622 623 flags=() 624 two_word_flags=() 625 local_nonpersistent_flags=() 626 flags_with_completion=() 627 flags_completion=() 628 629 flags+=("--help") 630 flags+=("-h") 631 local_nonpersistent_flags+=("--help") 632 flags+=("--cacert=") 633 flags+=("--cache-dir=") 634 flags+=("--json") 635 flags+=("--limit-download=") 636 flags+=("--limit-upload=") 637 flags+=("--no-cache") 638 flags+=("--no-lock") 639 flags+=("--option=") 640 two_word_flags+=("-o") 641 flags+=("--password-file=") 642 two_word_flags+=("-p") 643 flags+=("--quiet") 644 flags+=("-q") 645 flags+=("--repo=") 646 two_word_flags+=("-r") 647 648 must_have_one_flag=() 649 must_have_one_noun=() 650 noun_aliases=() 651 } 652 653 _restic_list() 654 { 655 last_command="restic_list" 656 commands=() 657 658 flags=() 659 two_word_flags=() 660 local_nonpersistent_flags=() 661 flags_with_completion=() 662 flags_completion=() 663 664 flags+=("--help") 665 flags+=("-h") 666 local_nonpersistent_flags+=("--help") 667 flags+=("--cacert=") 668 flags+=("--cache-dir=") 669 flags+=("--json") 670 flags+=("--limit-download=") 671 flags+=("--limit-upload=") 672 flags+=("--no-cache") 673 flags+=("--no-lock") 674 flags+=("--option=") 675 two_word_flags+=("-o") 676 flags+=("--password-file=") 677 two_word_flags+=("-p") 678 flags+=("--quiet") 679 flags+=("-q") 680 flags+=("--repo=") 681 two_word_flags+=("-r") 682 683 must_have_one_flag=() 684 must_have_one_noun=() 685 noun_aliases=() 686 } 687 688 _restic_ls() 689 { 690 last_command="restic_ls" 691 commands=() 692 693 flags=() 694 two_word_flags=() 695 local_nonpersistent_flags=() 696 flags_with_completion=() 697 flags_completion=() 698 699 flags+=("--help") 700 flags+=("-h") 701 local_nonpersistent_flags+=("--help") 702 flags+=("--host=") 703 two_word_flags+=("-H") 704 local_nonpersistent_flags+=("--host=") 705 flags+=("--long") 706 flags+=("-l") 707 local_nonpersistent_flags+=("--long") 708 flags+=("--path=") 709 local_nonpersistent_flags+=("--path=") 710 flags+=("--tag=") 711 local_nonpersistent_flags+=("--tag=") 712 flags+=("--cacert=") 713 flags+=("--cache-dir=") 714 flags+=("--json") 715 flags+=("--limit-download=") 716 flags+=("--limit-upload=") 717 flags+=("--no-cache") 718 flags+=("--no-lock") 719 flags+=("--option=") 720 two_word_flags+=("-o") 721 flags+=("--password-file=") 722 two_word_flags+=("-p") 723 flags+=("--quiet") 724 flags+=("-q") 725 flags+=("--repo=") 726 two_word_flags+=("-r") 727 728 must_have_one_flag=() 729 must_have_one_noun=() 730 noun_aliases=() 731 } 732 733 _restic_migrate() 734 { 735 last_command="restic_migrate" 736 commands=() 737 738 flags=() 739 two_word_flags=() 740 local_nonpersistent_flags=() 741 flags_with_completion=() 742 flags_completion=() 743 744 flags+=("--force") 745 flags+=("-f") 746 local_nonpersistent_flags+=("--force") 747 flags+=("--help") 748 flags+=("-h") 749 local_nonpersistent_flags+=("--help") 750 flags+=("--cacert=") 751 flags+=("--cache-dir=") 752 flags+=("--json") 753 flags+=("--limit-download=") 754 flags+=("--limit-upload=") 755 flags+=("--no-cache") 756 flags+=("--no-lock") 757 flags+=("--option=") 758 two_word_flags+=("-o") 759 flags+=("--password-file=") 760 two_word_flags+=("-p") 761 flags+=("--quiet") 762 flags+=("-q") 763 flags+=("--repo=") 764 two_word_flags+=("-r") 765 766 must_have_one_flag=() 767 must_have_one_noun=() 768 noun_aliases=() 769 } 770 771 _restic_mount() 772 { 773 last_command="restic_mount" 774 commands=() 775 776 flags=() 777 two_word_flags=() 778 local_nonpersistent_flags=() 779 flags_with_completion=() 780 flags_completion=() 781 782 flags+=("--allow-other") 783 local_nonpersistent_flags+=("--allow-other") 784 flags+=("--allow-root") 785 local_nonpersistent_flags+=("--allow-root") 786 flags+=("--help") 787 flags+=("-h") 788 local_nonpersistent_flags+=("--help") 789 flags+=("--host=") 790 two_word_flags+=("-H") 791 local_nonpersistent_flags+=("--host=") 792 flags+=("--owner-root") 793 local_nonpersistent_flags+=("--owner-root") 794 flags+=("--path=") 795 local_nonpersistent_flags+=("--path=") 796 flags+=("--tag=") 797 local_nonpersistent_flags+=("--tag=") 798 flags+=("--cacert=") 799 flags+=("--cache-dir=") 800 flags+=("--json") 801 flags+=("--limit-download=") 802 flags+=("--limit-upload=") 803 flags+=("--no-cache") 804 flags+=("--no-lock") 805 flags+=("--option=") 806 two_word_flags+=("-o") 807 flags+=("--password-file=") 808 two_word_flags+=("-p") 809 flags+=("--quiet") 810 flags+=("-q") 811 flags+=("--repo=") 812 two_word_flags+=("-r") 813 814 must_have_one_flag=() 815 must_have_one_noun=() 816 noun_aliases=() 817 } 818 819 _restic_prune() 820 { 821 last_command="restic_prune" 822 commands=() 823 824 flags=() 825 two_word_flags=() 826 local_nonpersistent_flags=() 827 flags_with_completion=() 828 flags_completion=() 829 830 flags+=("--help") 831 flags+=("-h") 832 local_nonpersistent_flags+=("--help") 833 flags+=("--cacert=") 834 flags+=("--cache-dir=") 835 flags+=("--json") 836 flags+=("--limit-download=") 837 flags+=("--limit-upload=") 838 flags+=("--no-cache") 839 flags+=("--no-lock") 840 flags+=("--option=") 841 two_word_flags+=("-o") 842 flags+=("--password-file=") 843 two_word_flags+=("-p") 844 flags+=("--quiet") 845 flags+=("-q") 846 flags+=("--repo=") 847 two_word_flags+=("-r") 848 849 must_have_one_flag=() 850 must_have_one_noun=() 851 noun_aliases=() 852 } 853 854 _restic_rebuild-index() 855 { 856 last_command="restic_rebuild-index" 857 commands=() 858 859 flags=() 860 two_word_flags=() 861 local_nonpersistent_flags=() 862 flags_with_completion=() 863 flags_completion=() 864 865 flags+=("--help") 866 flags+=("-h") 867 local_nonpersistent_flags+=("--help") 868 flags+=("--cacert=") 869 flags+=("--cache-dir=") 870 flags+=("--json") 871 flags+=("--limit-download=") 872 flags+=("--limit-upload=") 873 flags+=("--no-cache") 874 flags+=("--no-lock") 875 flags+=("--option=") 876 two_word_flags+=("-o") 877 flags+=("--password-file=") 878 two_word_flags+=("-p") 879 flags+=("--quiet") 880 flags+=("-q") 881 flags+=("--repo=") 882 two_word_flags+=("-r") 883 884 must_have_one_flag=() 885 must_have_one_noun=() 886 noun_aliases=() 887 } 888 889 _restic_restore() 890 { 891 last_command="restic_restore" 892 commands=() 893 894 flags=() 895 two_word_flags=() 896 local_nonpersistent_flags=() 897 flags_with_completion=() 898 flags_completion=() 899 900 flags+=("--exclude=") 901 two_word_flags+=("-e") 902 local_nonpersistent_flags+=("--exclude=") 903 flags+=("--help") 904 flags+=("-h") 905 local_nonpersistent_flags+=("--help") 906 flags+=("--host=") 907 two_word_flags+=("-H") 908 local_nonpersistent_flags+=("--host=") 909 flags+=("--include=") 910 two_word_flags+=("-i") 911 local_nonpersistent_flags+=("--include=") 912 flags+=("--path=") 913 local_nonpersistent_flags+=("--path=") 914 flags+=("--tag=") 915 local_nonpersistent_flags+=("--tag=") 916 flags+=("--target=") 917 two_word_flags+=("-t") 918 local_nonpersistent_flags+=("--target=") 919 flags+=("--cacert=") 920 flags+=("--cache-dir=") 921 flags+=("--json") 922 flags+=("--limit-download=") 923 flags+=("--limit-upload=") 924 flags+=("--no-cache") 925 flags+=("--no-lock") 926 flags+=("--option=") 927 two_word_flags+=("-o") 928 flags+=("--password-file=") 929 two_word_flags+=("-p") 930 flags+=("--quiet") 931 flags+=("-q") 932 flags+=("--repo=") 933 two_word_flags+=("-r") 934 935 must_have_one_flag=() 936 must_have_one_noun=() 937 noun_aliases=() 938 } 939 940 _restic_snapshots() 941 { 942 last_command="restic_snapshots" 943 commands=() 944 945 flags=() 946 two_word_flags=() 947 local_nonpersistent_flags=() 948 flags_with_completion=() 949 flags_completion=() 950 951 flags+=("--compact") 952 flags+=("-c") 953 local_nonpersistent_flags+=("--compact") 954 flags+=("--help") 955 flags+=("-h") 956 local_nonpersistent_flags+=("--help") 957 flags+=("--host=") 958 two_word_flags+=("-H") 959 local_nonpersistent_flags+=("--host=") 960 flags+=("--last") 961 local_nonpersistent_flags+=("--last") 962 flags+=("--path=") 963 local_nonpersistent_flags+=("--path=") 964 flags+=("--tag=") 965 local_nonpersistent_flags+=("--tag=") 966 flags+=("--cacert=") 967 flags+=("--cache-dir=") 968 flags+=("--json") 969 flags+=("--limit-download=") 970 flags+=("--limit-upload=") 971 flags+=("--no-cache") 972 flags+=("--no-lock") 973 flags+=("--option=") 974 two_word_flags+=("-o") 975 flags+=("--password-file=") 976 two_word_flags+=("-p") 977 flags+=("--quiet") 978 flags+=("-q") 979 flags+=("--repo=") 980 two_word_flags+=("-r") 981 982 must_have_one_flag=() 983 must_have_one_noun=() 984 noun_aliases=() 985 } 986 987 _restic_tag() 988 { 989 last_command="restic_tag" 990 commands=() 991 992 flags=() 993 two_word_flags=() 994 local_nonpersistent_flags=() 995 flags_with_completion=() 996 flags_completion=() 997 998 flags+=("--add=") 999 local_nonpersistent_flags+=("--add=") 1000 flags+=("--help") 1001 flags+=("-h") 1002 local_nonpersistent_flags+=("--help") 1003 flags+=("--host=") 1004 two_word_flags+=("-H") 1005 local_nonpersistent_flags+=("--host=") 1006 flags+=("--path=") 1007 local_nonpersistent_flags+=("--path=") 1008 flags+=("--remove=") 1009 local_nonpersistent_flags+=("--remove=") 1010 flags+=("--set=") 1011 local_nonpersistent_flags+=("--set=") 1012 flags+=("--tag=") 1013 local_nonpersistent_flags+=("--tag=") 1014 flags+=("--cacert=") 1015 flags+=("--cache-dir=") 1016 flags+=("--json") 1017 flags+=("--limit-download=") 1018 flags+=("--limit-upload=") 1019 flags+=("--no-cache") 1020 flags+=("--no-lock") 1021 flags+=("--option=") 1022 two_word_flags+=("-o") 1023 flags+=("--password-file=") 1024 two_word_flags+=("-p") 1025 flags+=("--quiet") 1026 flags+=("-q") 1027 flags+=("--repo=") 1028 two_word_flags+=("-r") 1029 1030 must_have_one_flag=() 1031 must_have_one_noun=() 1032 noun_aliases=() 1033 } 1034 1035 _restic_unlock() 1036 { 1037 last_command="restic_unlock" 1038 commands=() 1039 1040 flags=() 1041 two_word_flags=() 1042 local_nonpersistent_flags=() 1043 flags_with_completion=() 1044 flags_completion=() 1045 1046 flags+=("--help") 1047 flags+=("-h") 1048 local_nonpersistent_flags+=("--help") 1049 flags+=("--remove-all") 1050 local_nonpersistent_flags+=("--remove-all") 1051 flags+=("--cacert=") 1052 flags+=("--cache-dir=") 1053 flags+=("--json") 1054 flags+=("--limit-download=") 1055 flags+=("--limit-upload=") 1056 flags+=("--no-cache") 1057 flags+=("--no-lock") 1058 flags+=("--option=") 1059 two_word_flags+=("-o") 1060 flags+=("--password-file=") 1061 two_word_flags+=("-p") 1062 flags+=("--quiet") 1063 flags+=("-q") 1064 flags+=("--repo=") 1065 two_word_flags+=("-r") 1066 1067 must_have_one_flag=() 1068 must_have_one_noun=() 1069 noun_aliases=() 1070 } 1071 1072 _restic_version() 1073 { 1074 last_command="restic_version" 1075 commands=() 1076 1077 flags=() 1078 two_word_flags=() 1079 local_nonpersistent_flags=() 1080 flags_with_completion=() 1081 flags_completion=() 1082 1083 flags+=("--help") 1084 flags+=("-h") 1085 local_nonpersistent_flags+=("--help") 1086 flags+=("--cacert=") 1087 flags+=("--cache-dir=") 1088 flags+=("--json") 1089 flags+=("--limit-download=") 1090 flags+=("--limit-upload=") 1091 flags+=("--no-cache") 1092 flags+=("--no-lock") 1093 flags+=("--option=") 1094 two_word_flags+=("-o") 1095 flags+=("--password-file=") 1096 two_word_flags+=("-p") 1097 flags+=("--quiet") 1098 flags+=("-q") 1099 flags+=("--repo=") 1100 two_word_flags+=("-r") 1101 1102 must_have_one_flag=() 1103 must_have_one_noun=() 1104 noun_aliases=() 1105 } 1106 1107 _restic() 1108 { 1109 last_command="restic" 1110 commands=() 1111 commands+=("backup") 1112 commands+=("cat") 1113 commands+=("check") 1114 commands+=("dump") 1115 commands+=("find") 1116 commands+=("forget") 1117 commands+=("generate") 1118 commands+=("init") 1119 commands+=("key") 1120 commands+=("list") 1121 commands+=("ls") 1122 commands+=("migrate") 1123 commands+=("mount") 1124 commands+=("prune") 1125 commands+=("rebuild-index") 1126 commands+=("restore") 1127 commands+=("snapshots") 1128 commands+=("tag") 1129 commands+=("unlock") 1130 commands+=("version") 1131 1132 flags=() 1133 two_word_flags=() 1134 local_nonpersistent_flags=() 1135 flags_with_completion=() 1136 flags_completion=() 1137 1138 flags+=("--cacert=") 1139 flags+=("--cache-dir=") 1140 flags+=("--help") 1141 flags+=("-h") 1142 local_nonpersistent_flags+=("--help") 1143 flags+=("--json") 1144 flags+=("--limit-download=") 1145 flags+=("--limit-upload=") 1146 flags+=("--no-cache") 1147 flags+=("--no-lock") 1148 flags+=("--option=") 1149 two_word_flags+=("-o") 1150 flags+=("--password-file=") 1151 two_word_flags+=("-p") 1152 flags+=("--quiet") 1153 flags+=("-q") 1154 flags+=("--repo=") 1155 two_word_flags+=("-r") 1156 1157 must_have_one_flag=() 1158 must_have_one_noun=() 1159 noun_aliases=() 1160 } 1161 1162 __start_restic() 1163 { 1164 local cur prev words cword 1165 declare -A flaghash 2>/dev/null || : 1166 if declare -F _init_completion >/dev/null 2>&1; then 1167 _init_completion -s || return 1168 else 1169 __my_init_completion -n "=" || return 1170 fi 1171 1172 local c=0 1173 local flags=() 1174 local two_word_flags=() 1175 local local_nonpersistent_flags=() 1176 local flags_with_completion=() 1177 local flags_completion=() 1178 local commands=("restic") 1179 local must_have_one_flag=() 1180 local must_have_one_noun=() 1181 local last_command 1182 local nouns=() 1183 1184 __handle_word 1185 } 1186 1187 if [[ $(type -t compopt) = "builtin" ]]; then 1188 complete -o default -F __start_restic restic 1189 else 1190 complete -o default -o nospace -F __start_restic restic 1191 fi 1192 1193 # ex: ts=4 sw=4 et filetype=sh