github.com/mckael/restic@v0.8.3/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+=("--with-atime") 273 local_nonpersistent_flags+=("--with-atime") 274 flags+=("--cacert=") 275 flags+=("--cache-dir=") 276 flags+=("--cleanup-cache") 277 flags+=("--json") 278 flags+=("--limit-download=") 279 flags+=("--limit-upload=") 280 flags+=("--no-cache") 281 flags+=("--no-lock") 282 flags+=("--option=") 283 two_word_flags+=("-o") 284 flags+=("--password-file=") 285 two_word_flags+=("-p") 286 flags+=("--quiet") 287 flags+=("-q") 288 flags+=("--repo=") 289 two_word_flags+=("-r") 290 flags+=("--tls-client-cert=") 291 292 must_have_one_flag=() 293 must_have_one_noun=() 294 noun_aliases=() 295 } 296 297 _restic_cat() 298 { 299 last_command="restic_cat" 300 commands=() 301 302 flags=() 303 two_word_flags=() 304 local_nonpersistent_flags=() 305 flags_with_completion=() 306 flags_completion=() 307 308 flags+=("--help") 309 flags+=("-h") 310 local_nonpersistent_flags+=("--help") 311 flags+=("--cacert=") 312 flags+=("--cache-dir=") 313 flags+=("--cleanup-cache") 314 flags+=("--json") 315 flags+=("--limit-download=") 316 flags+=("--limit-upload=") 317 flags+=("--no-cache") 318 flags+=("--no-lock") 319 flags+=("--option=") 320 two_word_flags+=("-o") 321 flags+=("--password-file=") 322 two_word_flags+=("-p") 323 flags+=("--quiet") 324 flags+=("-q") 325 flags+=("--repo=") 326 two_word_flags+=("-r") 327 flags+=("--tls-client-cert=") 328 329 must_have_one_flag=() 330 must_have_one_noun=() 331 noun_aliases=() 332 } 333 334 _restic_check() 335 { 336 last_command="restic_check" 337 commands=() 338 339 flags=() 340 two_word_flags=() 341 local_nonpersistent_flags=() 342 flags_with_completion=() 343 flags_completion=() 344 345 flags+=("--check-unused") 346 local_nonpersistent_flags+=("--check-unused") 347 flags+=("--help") 348 flags+=("-h") 349 local_nonpersistent_flags+=("--help") 350 flags+=("--read-data") 351 local_nonpersistent_flags+=("--read-data") 352 flags+=("--read-data-subset=") 353 local_nonpersistent_flags+=("--read-data-subset=") 354 flags+=("--with-cache") 355 local_nonpersistent_flags+=("--with-cache") 356 flags+=("--cacert=") 357 flags+=("--cache-dir=") 358 flags+=("--cleanup-cache") 359 flags+=("--json") 360 flags+=("--limit-download=") 361 flags+=("--limit-upload=") 362 flags+=("--no-cache") 363 flags+=("--no-lock") 364 flags+=("--option=") 365 two_word_flags+=("-o") 366 flags+=("--password-file=") 367 two_word_flags+=("-p") 368 flags+=("--quiet") 369 flags+=("-q") 370 flags+=("--repo=") 371 two_word_flags+=("-r") 372 flags+=("--tls-client-cert=") 373 374 must_have_one_flag=() 375 must_have_one_noun=() 376 noun_aliases=() 377 } 378 379 _restic_diff() 380 { 381 last_command="restic_diff" 382 commands=() 383 384 flags=() 385 two_word_flags=() 386 local_nonpersistent_flags=() 387 flags_with_completion=() 388 flags_completion=() 389 390 flags+=("--help") 391 flags+=("-h") 392 local_nonpersistent_flags+=("--help") 393 flags+=("--metadata") 394 local_nonpersistent_flags+=("--metadata") 395 flags+=("--cacert=") 396 flags+=("--cache-dir=") 397 flags+=("--cleanup-cache") 398 flags+=("--json") 399 flags+=("--limit-download=") 400 flags+=("--limit-upload=") 401 flags+=("--no-cache") 402 flags+=("--no-lock") 403 flags+=("--option=") 404 two_word_flags+=("-o") 405 flags+=("--password-file=") 406 two_word_flags+=("-p") 407 flags+=("--quiet") 408 flags+=("-q") 409 flags+=("--repo=") 410 two_word_flags+=("-r") 411 flags+=("--tls-client-cert=") 412 413 must_have_one_flag=() 414 must_have_one_noun=() 415 noun_aliases=() 416 } 417 418 _restic_dump() 419 { 420 last_command="restic_dump" 421 commands=() 422 423 flags=() 424 two_word_flags=() 425 local_nonpersistent_flags=() 426 flags_with_completion=() 427 flags_completion=() 428 429 flags+=("--help") 430 flags+=("-h") 431 local_nonpersistent_flags+=("--help") 432 flags+=("--host=") 433 two_word_flags+=("-H") 434 local_nonpersistent_flags+=("--host=") 435 flags+=("--path=") 436 local_nonpersistent_flags+=("--path=") 437 flags+=("--tag=") 438 local_nonpersistent_flags+=("--tag=") 439 flags+=("--cacert=") 440 flags+=("--cache-dir=") 441 flags+=("--cleanup-cache") 442 flags+=("--json") 443 flags+=("--limit-download=") 444 flags+=("--limit-upload=") 445 flags+=("--no-cache") 446 flags+=("--no-lock") 447 flags+=("--option=") 448 two_word_flags+=("-o") 449 flags+=("--password-file=") 450 two_word_flags+=("-p") 451 flags+=("--quiet") 452 flags+=("-q") 453 flags+=("--repo=") 454 two_word_flags+=("-r") 455 flags+=("--tls-client-cert=") 456 457 must_have_one_flag=() 458 must_have_one_noun=() 459 noun_aliases=() 460 } 461 462 _restic_find() 463 { 464 last_command="restic_find" 465 commands=() 466 467 flags=() 468 two_word_flags=() 469 local_nonpersistent_flags=() 470 flags_with_completion=() 471 flags_completion=() 472 473 flags+=("--help") 474 flags+=("-h") 475 local_nonpersistent_flags+=("--help") 476 flags+=("--host=") 477 two_word_flags+=("-H") 478 local_nonpersistent_flags+=("--host=") 479 flags+=("--ignore-case") 480 flags+=("-i") 481 local_nonpersistent_flags+=("--ignore-case") 482 flags+=("--long") 483 flags+=("-l") 484 local_nonpersistent_flags+=("--long") 485 flags+=("--newest=") 486 two_word_flags+=("-N") 487 local_nonpersistent_flags+=("--newest=") 488 flags+=("--oldest=") 489 two_word_flags+=("-O") 490 local_nonpersistent_flags+=("--oldest=") 491 flags+=("--path=") 492 local_nonpersistent_flags+=("--path=") 493 flags+=("--snapshot=") 494 two_word_flags+=("-s") 495 local_nonpersistent_flags+=("--snapshot=") 496 flags+=("--tag=") 497 local_nonpersistent_flags+=("--tag=") 498 flags+=("--cacert=") 499 flags+=("--cache-dir=") 500 flags+=("--cleanup-cache") 501 flags+=("--json") 502 flags+=("--limit-download=") 503 flags+=("--limit-upload=") 504 flags+=("--no-cache") 505 flags+=("--no-lock") 506 flags+=("--option=") 507 two_word_flags+=("-o") 508 flags+=("--password-file=") 509 two_word_flags+=("-p") 510 flags+=("--quiet") 511 flags+=("-q") 512 flags+=("--repo=") 513 two_word_flags+=("-r") 514 flags+=("--tls-client-cert=") 515 516 must_have_one_flag=() 517 must_have_one_noun=() 518 noun_aliases=() 519 } 520 521 _restic_forget() 522 { 523 last_command="restic_forget" 524 commands=() 525 526 flags=() 527 two_word_flags=() 528 local_nonpersistent_flags=() 529 flags_with_completion=() 530 flags_completion=() 531 532 flags+=("--keep-last=") 533 two_word_flags+=("-l") 534 local_nonpersistent_flags+=("--keep-last=") 535 flags+=("--keep-hourly=") 536 two_word_flags+=("-H") 537 local_nonpersistent_flags+=("--keep-hourly=") 538 flags+=("--keep-daily=") 539 two_word_flags+=("-d") 540 local_nonpersistent_flags+=("--keep-daily=") 541 flags+=("--keep-weekly=") 542 two_word_flags+=("-w") 543 local_nonpersistent_flags+=("--keep-weekly=") 544 flags+=("--keep-monthly=") 545 two_word_flags+=("-m") 546 local_nonpersistent_flags+=("--keep-monthly=") 547 flags+=("--keep-yearly=") 548 two_word_flags+=("-y") 549 local_nonpersistent_flags+=("--keep-yearly=") 550 flags+=("--keep-tag=") 551 local_nonpersistent_flags+=("--keep-tag=") 552 flags+=("--host=") 553 local_nonpersistent_flags+=("--host=") 554 flags+=("--hostname=") 555 local_nonpersistent_flags+=("--hostname=") 556 flags+=("--tag=") 557 local_nonpersistent_flags+=("--tag=") 558 flags+=("--path=") 559 local_nonpersistent_flags+=("--path=") 560 flags+=("--compact") 561 flags+=("-c") 562 local_nonpersistent_flags+=("--compact") 563 flags+=("--group-by=") 564 two_word_flags+=("-g") 565 local_nonpersistent_flags+=("--group-by=") 566 flags+=("--dry-run") 567 flags+=("-n") 568 local_nonpersistent_flags+=("--dry-run") 569 flags+=("--prune") 570 local_nonpersistent_flags+=("--prune") 571 flags+=("--help") 572 flags+=("-h") 573 local_nonpersistent_flags+=("--help") 574 flags+=("--cacert=") 575 flags+=("--cache-dir=") 576 flags+=("--cleanup-cache") 577 flags+=("--json") 578 flags+=("--limit-download=") 579 flags+=("--limit-upload=") 580 flags+=("--no-cache") 581 flags+=("--no-lock") 582 flags+=("--option=") 583 two_word_flags+=("-o") 584 flags+=("--password-file=") 585 two_word_flags+=("-p") 586 flags+=("--quiet") 587 flags+=("-q") 588 flags+=("--repo=") 589 two_word_flags+=("-r") 590 flags+=("--tls-client-cert=") 591 592 must_have_one_flag=() 593 must_have_one_noun=() 594 noun_aliases=() 595 } 596 597 _restic_generate() 598 { 599 last_command="restic_generate" 600 commands=() 601 602 flags=() 603 two_word_flags=() 604 local_nonpersistent_flags=() 605 flags_with_completion=() 606 flags_completion=() 607 608 flags+=("--bash-completion=") 609 local_nonpersistent_flags+=("--bash-completion=") 610 flags+=("--help") 611 flags+=("-h") 612 local_nonpersistent_flags+=("--help") 613 flags+=("--man=") 614 local_nonpersistent_flags+=("--man=") 615 flags+=("--zsh-completion=") 616 local_nonpersistent_flags+=("--zsh-completion=") 617 flags+=("--cacert=") 618 flags+=("--cache-dir=") 619 flags+=("--cleanup-cache") 620 flags+=("--json") 621 flags+=("--limit-download=") 622 flags+=("--limit-upload=") 623 flags+=("--no-cache") 624 flags+=("--no-lock") 625 flags+=("--option=") 626 two_word_flags+=("-o") 627 flags+=("--password-file=") 628 two_word_flags+=("-p") 629 flags+=("--quiet") 630 flags+=("-q") 631 flags+=("--repo=") 632 two_word_flags+=("-r") 633 flags+=("--tls-client-cert=") 634 635 must_have_one_flag=() 636 must_have_one_noun=() 637 noun_aliases=() 638 } 639 640 _restic_init() 641 { 642 last_command="restic_init" 643 commands=() 644 645 flags=() 646 two_word_flags=() 647 local_nonpersistent_flags=() 648 flags_with_completion=() 649 flags_completion=() 650 651 flags+=("--help") 652 flags+=("-h") 653 local_nonpersistent_flags+=("--help") 654 flags+=("--cacert=") 655 flags+=("--cache-dir=") 656 flags+=("--cleanup-cache") 657 flags+=("--json") 658 flags+=("--limit-download=") 659 flags+=("--limit-upload=") 660 flags+=("--no-cache") 661 flags+=("--no-lock") 662 flags+=("--option=") 663 two_word_flags+=("-o") 664 flags+=("--password-file=") 665 two_word_flags+=("-p") 666 flags+=("--quiet") 667 flags+=("-q") 668 flags+=("--repo=") 669 two_word_flags+=("-r") 670 flags+=("--tls-client-cert=") 671 672 must_have_one_flag=() 673 must_have_one_noun=() 674 noun_aliases=() 675 } 676 677 _restic_key() 678 { 679 last_command="restic_key" 680 commands=() 681 682 flags=() 683 two_word_flags=() 684 local_nonpersistent_flags=() 685 flags_with_completion=() 686 flags_completion=() 687 688 flags+=("--help") 689 flags+=("-h") 690 local_nonpersistent_flags+=("--help") 691 flags+=("--cacert=") 692 flags+=("--cache-dir=") 693 flags+=("--cleanup-cache") 694 flags+=("--json") 695 flags+=("--limit-download=") 696 flags+=("--limit-upload=") 697 flags+=("--no-cache") 698 flags+=("--no-lock") 699 flags+=("--option=") 700 two_word_flags+=("-o") 701 flags+=("--password-file=") 702 two_word_flags+=("-p") 703 flags+=("--quiet") 704 flags+=("-q") 705 flags+=("--repo=") 706 two_word_flags+=("-r") 707 flags+=("--tls-client-cert=") 708 709 must_have_one_flag=() 710 must_have_one_noun=() 711 noun_aliases=() 712 } 713 714 _restic_list() 715 { 716 last_command="restic_list" 717 commands=() 718 719 flags=() 720 two_word_flags=() 721 local_nonpersistent_flags=() 722 flags_with_completion=() 723 flags_completion=() 724 725 flags+=("--help") 726 flags+=("-h") 727 local_nonpersistent_flags+=("--help") 728 flags+=("--cacert=") 729 flags+=("--cache-dir=") 730 flags+=("--cleanup-cache") 731 flags+=("--json") 732 flags+=("--limit-download=") 733 flags+=("--limit-upload=") 734 flags+=("--no-cache") 735 flags+=("--no-lock") 736 flags+=("--option=") 737 two_word_flags+=("-o") 738 flags+=("--password-file=") 739 two_word_flags+=("-p") 740 flags+=("--quiet") 741 flags+=("-q") 742 flags+=("--repo=") 743 two_word_flags+=("-r") 744 flags+=("--tls-client-cert=") 745 746 must_have_one_flag=() 747 must_have_one_noun=() 748 noun_aliases=() 749 } 750 751 _restic_ls() 752 { 753 last_command="restic_ls" 754 commands=() 755 756 flags=() 757 two_word_flags=() 758 local_nonpersistent_flags=() 759 flags_with_completion=() 760 flags_completion=() 761 762 flags+=("--help") 763 flags+=("-h") 764 local_nonpersistent_flags+=("--help") 765 flags+=("--host=") 766 two_word_flags+=("-H") 767 local_nonpersistent_flags+=("--host=") 768 flags+=("--long") 769 flags+=("-l") 770 local_nonpersistent_flags+=("--long") 771 flags+=("--path=") 772 local_nonpersistent_flags+=("--path=") 773 flags+=("--tag=") 774 local_nonpersistent_flags+=("--tag=") 775 flags+=("--cacert=") 776 flags+=("--cache-dir=") 777 flags+=("--cleanup-cache") 778 flags+=("--json") 779 flags+=("--limit-download=") 780 flags+=("--limit-upload=") 781 flags+=("--no-cache") 782 flags+=("--no-lock") 783 flags+=("--option=") 784 two_word_flags+=("-o") 785 flags+=("--password-file=") 786 two_word_flags+=("-p") 787 flags+=("--quiet") 788 flags+=("-q") 789 flags+=("--repo=") 790 two_word_flags+=("-r") 791 flags+=("--tls-client-cert=") 792 793 must_have_one_flag=() 794 must_have_one_noun=() 795 noun_aliases=() 796 } 797 798 _restic_migrate() 799 { 800 last_command="restic_migrate" 801 commands=() 802 803 flags=() 804 two_word_flags=() 805 local_nonpersistent_flags=() 806 flags_with_completion=() 807 flags_completion=() 808 809 flags+=("--force") 810 flags+=("-f") 811 local_nonpersistent_flags+=("--force") 812 flags+=("--help") 813 flags+=("-h") 814 local_nonpersistent_flags+=("--help") 815 flags+=("--cacert=") 816 flags+=("--cache-dir=") 817 flags+=("--cleanup-cache") 818 flags+=("--json") 819 flags+=("--limit-download=") 820 flags+=("--limit-upload=") 821 flags+=("--no-cache") 822 flags+=("--no-lock") 823 flags+=("--option=") 824 two_word_flags+=("-o") 825 flags+=("--password-file=") 826 two_word_flags+=("-p") 827 flags+=("--quiet") 828 flags+=("-q") 829 flags+=("--repo=") 830 two_word_flags+=("-r") 831 flags+=("--tls-client-cert=") 832 833 must_have_one_flag=() 834 must_have_one_noun=() 835 noun_aliases=() 836 } 837 838 _restic_mount() 839 { 840 last_command="restic_mount" 841 commands=() 842 843 flags=() 844 two_word_flags=() 845 local_nonpersistent_flags=() 846 flags_with_completion=() 847 flags_completion=() 848 849 flags+=("--allow-other") 850 local_nonpersistent_flags+=("--allow-other") 851 flags+=("--allow-root") 852 local_nonpersistent_flags+=("--allow-root") 853 flags+=("--help") 854 flags+=("-h") 855 local_nonpersistent_flags+=("--help") 856 flags+=("--host=") 857 two_word_flags+=("-H") 858 local_nonpersistent_flags+=("--host=") 859 flags+=("--owner-root") 860 local_nonpersistent_flags+=("--owner-root") 861 flags+=("--path=") 862 local_nonpersistent_flags+=("--path=") 863 flags+=("--snapshot-template=") 864 local_nonpersistent_flags+=("--snapshot-template=") 865 flags+=("--tag=") 866 local_nonpersistent_flags+=("--tag=") 867 flags+=("--cacert=") 868 flags+=("--cache-dir=") 869 flags+=("--cleanup-cache") 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 flags+=("--tls-client-cert=") 884 885 must_have_one_flag=() 886 must_have_one_noun=() 887 noun_aliases=() 888 } 889 890 _restic_prune() 891 { 892 last_command="restic_prune" 893 commands=() 894 895 flags=() 896 two_word_flags=() 897 local_nonpersistent_flags=() 898 flags_with_completion=() 899 flags_completion=() 900 901 flags+=("--help") 902 flags+=("-h") 903 local_nonpersistent_flags+=("--help") 904 flags+=("--cacert=") 905 flags+=("--cache-dir=") 906 flags+=("--cleanup-cache") 907 flags+=("--json") 908 flags+=("--limit-download=") 909 flags+=("--limit-upload=") 910 flags+=("--no-cache") 911 flags+=("--no-lock") 912 flags+=("--option=") 913 two_word_flags+=("-o") 914 flags+=("--password-file=") 915 two_word_flags+=("-p") 916 flags+=("--quiet") 917 flags+=("-q") 918 flags+=("--repo=") 919 two_word_flags+=("-r") 920 flags+=("--tls-client-cert=") 921 922 must_have_one_flag=() 923 must_have_one_noun=() 924 noun_aliases=() 925 } 926 927 _restic_rebuild-index() 928 { 929 last_command="restic_rebuild-index" 930 commands=() 931 932 flags=() 933 two_word_flags=() 934 local_nonpersistent_flags=() 935 flags_with_completion=() 936 flags_completion=() 937 938 flags+=("--help") 939 flags+=("-h") 940 local_nonpersistent_flags+=("--help") 941 flags+=("--cacert=") 942 flags+=("--cache-dir=") 943 flags+=("--cleanup-cache") 944 flags+=("--json") 945 flags+=("--limit-download=") 946 flags+=("--limit-upload=") 947 flags+=("--no-cache") 948 flags+=("--no-lock") 949 flags+=("--option=") 950 two_word_flags+=("-o") 951 flags+=("--password-file=") 952 two_word_flags+=("-p") 953 flags+=("--quiet") 954 flags+=("-q") 955 flags+=("--repo=") 956 two_word_flags+=("-r") 957 flags+=("--tls-client-cert=") 958 959 must_have_one_flag=() 960 must_have_one_noun=() 961 noun_aliases=() 962 } 963 964 _restic_restore() 965 { 966 last_command="restic_restore" 967 commands=() 968 969 flags=() 970 two_word_flags=() 971 local_nonpersistent_flags=() 972 flags_with_completion=() 973 flags_completion=() 974 975 flags+=("--exclude=") 976 two_word_flags+=("-e") 977 local_nonpersistent_flags+=("--exclude=") 978 flags+=("--help") 979 flags+=("-h") 980 local_nonpersistent_flags+=("--help") 981 flags+=("--host=") 982 two_word_flags+=("-H") 983 local_nonpersistent_flags+=("--host=") 984 flags+=("--include=") 985 two_word_flags+=("-i") 986 local_nonpersistent_flags+=("--include=") 987 flags+=("--path=") 988 local_nonpersistent_flags+=("--path=") 989 flags+=("--tag=") 990 local_nonpersistent_flags+=("--tag=") 991 flags+=("--target=") 992 two_word_flags+=("-t") 993 local_nonpersistent_flags+=("--target=") 994 flags+=("--cacert=") 995 flags+=("--cache-dir=") 996 flags+=("--cleanup-cache") 997 flags+=("--json") 998 flags+=("--limit-download=") 999 flags+=("--limit-upload=") 1000 flags+=("--no-cache") 1001 flags+=("--no-lock") 1002 flags+=("--option=") 1003 two_word_flags+=("-o") 1004 flags+=("--password-file=") 1005 two_word_flags+=("-p") 1006 flags+=("--quiet") 1007 flags+=("-q") 1008 flags+=("--repo=") 1009 two_word_flags+=("-r") 1010 flags+=("--tls-client-cert=") 1011 1012 must_have_one_flag=() 1013 must_have_one_noun=() 1014 noun_aliases=() 1015 } 1016 1017 _restic_snapshots() 1018 { 1019 last_command="restic_snapshots" 1020 commands=() 1021 1022 flags=() 1023 two_word_flags=() 1024 local_nonpersistent_flags=() 1025 flags_with_completion=() 1026 flags_completion=() 1027 1028 flags+=("--compact") 1029 flags+=("-c") 1030 local_nonpersistent_flags+=("--compact") 1031 flags+=("--help") 1032 flags+=("-h") 1033 local_nonpersistent_flags+=("--help") 1034 flags+=("--host=") 1035 two_word_flags+=("-H") 1036 local_nonpersistent_flags+=("--host=") 1037 flags+=("--last") 1038 local_nonpersistent_flags+=("--last") 1039 flags+=("--path=") 1040 local_nonpersistent_flags+=("--path=") 1041 flags+=("--tag=") 1042 local_nonpersistent_flags+=("--tag=") 1043 flags+=("--cacert=") 1044 flags+=("--cache-dir=") 1045 flags+=("--cleanup-cache") 1046 flags+=("--json") 1047 flags+=("--limit-download=") 1048 flags+=("--limit-upload=") 1049 flags+=("--no-cache") 1050 flags+=("--no-lock") 1051 flags+=("--option=") 1052 two_word_flags+=("-o") 1053 flags+=("--password-file=") 1054 two_word_flags+=("-p") 1055 flags+=("--quiet") 1056 flags+=("-q") 1057 flags+=("--repo=") 1058 two_word_flags+=("-r") 1059 flags+=("--tls-client-cert=") 1060 1061 must_have_one_flag=() 1062 must_have_one_noun=() 1063 noun_aliases=() 1064 } 1065 1066 _restic_tag() 1067 { 1068 last_command="restic_tag" 1069 commands=() 1070 1071 flags=() 1072 two_word_flags=() 1073 local_nonpersistent_flags=() 1074 flags_with_completion=() 1075 flags_completion=() 1076 1077 flags+=("--add=") 1078 local_nonpersistent_flags+=("--add=") 1079 flags+=("--help") 1080 flags+=("-h") 1081 local_nonpersistent_flags+=("--help") 1082 flags+=("--host=") 1083 two_word_flags+=("-H") 1084 local_nonpersistent_flags+=("--host=") 1085 flags+=("--path=") 1086 local_nonpersistent_flags+=("--path=") 1087 flags+=("--remove=") 1088 local_nonpersistent_flags+=("--remove=") 1089 flags+=("--set=") 1090 local_nonpersistent_flags+=("--set=") 1091 flags+=("--tag=") 1092 local_nonpersistent_flags+=("--tag=") 1093 flags+=("--cacert=") 1094 flags+=("--cache-dir=") 1095 flags+=("--cleanup-cache") 1096 flags+=("--json") 1097 flags+=("--limit-download=") 1098 flags+=("--limit-upload=") 1099 flags+=("--no-cache") 1100 flags+=("--no-lock") 1101 flags+=("--option=") 1102 two_word_flags+=("-o") 1103 flags+=("--password-file=") 1104 two_word_flags+=("-p") 1105 flags+=("--quiet") 1106 flags+=("-q") 1107 flags+=("--repo=") 1108 two_word_flags+=("-r") 1109 flags+=("--tls-client-cert=") 1110 1111 must_have_one_flag=() 1112 must_have_one_noun=() 1113 noun_aliases=() 1114 } 1115 1116 _restic_unlock() 1117 { 1118 last_command="restic_unlock" 1119 commands=() 1120 1121 flags=() 1122 two_word_flags=() 1123 local_nonpersistent_flags=() 1124 flags_with_completion=() 1125 flags_completion=() 1126 1127 flags+=("--help") 1128 flags+=("-h") 1129 local_nonpersistent_flags+=("--help") 1130 flags+=("--remove-all") 1131 local_nonpersistent_flags+=("--remove-all") 1132 flags+=("--cacert=") 1133 flags+=("--cache-dir=") 1134 flags+=("--cleanup-cache") 1135 flags+=("--json") 1136 flags+=("--limit-download=") 1137 flags+=("--limit-upload=") 1138 flags+=("--no-cache") 1139 flags+=("--no-lock") 1140 flags+=("--option=") 1141 two_word_flags+=("-o") 1142 flags+=("--password-file=") 1143 two_word_flags+=("-p") 1144 flags+=("--quiet") 1145 flags+=("-q") 1146 flags+=("--repo=") 1147 two_word_flags+=("-r") 1148 flags+=("--tls-client-cert=") 1149 1150 must_have_one_flag=() 1151 must_have_one_noun=() 1152 noun_aliases=() 1153 } 1154 1155 _restic_version() 1156 { 1157 last_command="restic_version" 1158 commands=() 1159 1160 flags=() 1161 two_word_flags=() 1162 local_nonpersistent_flags=() 1163 flags_with_completion=() 1164 flags_completion=() 1165 1166 flags+=("--help") 1167 flags+=("-h") 1168 local_nonpersistent_flags+=("--help") 1169 flags+=("--cacert=") 1170 flags+=("--cache-dir=") 1171 flags+=("--cleanup-cache") 1172 flags+=("--json") 1173 flags+=("--limit-download=") 1174 flags+=("--limit-upload=") 1175 flags+=("--no-cache") 1176 flags+=("--no-lock") 1177 flags+=("--option=") 1178 two_word_flags+=("-o") 1179 flags+=("--password-file=") 1180 two_word_flags+=("-p") 1181 flags+=("--quiet") 1182 flags+=("-q") 1183 flags+=("--repo=") 1184 two_word_flags+=("-r") 1185 flags+=("--tls-client-cert=") 1186 1187 must_have_one_flag=() 1188 must_have_one_noun=() 1189 noun_aliases=() 1190 } 1191 1192 _restic() 1193 { 1194 last_command="restic" 1195 commands=() 1196 commands+=("backup") 1197 commands+=("cat") 1198 commands+=("check") 1199 commands+=("diff") 1200 commands+=("dump") 1201 commands+=("find") 1202 commands+=("forget") 1203 commands+=("generate") 1204 commands+=("init") 1205 commands+=("key") 1206 commands+=("list") 1207 commands+=("ls") 1208 commands+=("migrate") 1209 commands+=("mount") 1210 commands+=("prune") 1211 commands+=("rebuild-index") 1212 commands+=("restore") 1213 commands+=("snapshots") 1214 commands+=("tag") 1215 commands+=("unlock") 1216 commands+=("version") 1217 1218 flags=() 1219 two_word_flags=() 1220 local_nonpersistent_flags=() 1221 flags_with_completion=() 1222 flags_completion=() 1223 1224 flags+=("--cacert=") 1225 flags+=("--cache-dir=") 1226 flags+=("--cleanup-cache") 1227 flags+=("--help") 1228 flags+=("-h") 1229 local_nonpersistent_flags+=("--help") 1230 flags+=("--json") 1231 flags+=("--limit-download=") 1232 flags+=("--limit-upload=") 1233 flags+=("--no-cache") 1234 flags+=("--no-lock") 1235 flags+=("--option=") 1236 two_word_flags+=("-o") 1237 flags+=("--password-file=") 1238 two_word_flags+=("-p") 1239 flags+=("--quiet") 1240 flags+=("-q") 1241 flags+=("--repo=") 1242 two_word_flags+=("-r") 1243 flags+=("--tls-client-cert=") 1244 1245 must_have_one_flag=() 1246 must_have_one_noun=() 1247 noun_aliases=() 1248 } 1249 1250 __start_restic() 1251 { 1252 local cur prev words cword 1253 declare -A flaghash 2>/dev/null || : 1254 if declare -F _init_completion >/dev/null 2>&1; then 1255 _init_completion -s || return 1256 else 1257 __my_init_completion -n "=" || return 1258 fi 1259 1260 local c=0 1261 local flags=() 1262 local two_word_flags=() 1263 local local_nonpersistent_flags=() 1264 local flags_with_completion=() 1265 local flags_completion=() 1266 local commands=("restic") 1267 local must_have_one_flag=() 1268 local must_have_one_noun=() 1269 local last_command 1270 local nouns=() 1271 1272 __handle_word 1273 } 1274 1275 if [[ $(type -t compopt) = "builtin" ]]; then 1276 complete -o default -F __start_restic restic 1277 else 1278 complete -o default -o nospace -F __start_restic restic 1279 fi 1280 1281 # ex: ts=4 sw=4 et filetype=sh