| # original by Alfredo Esteban <aedelatorre at xxxxxxxxx> |
| # (http://www.spinics.net/lists/linux-btrfs/msg15899.html) |
| # edited by Joseph Wang <joequant at gmail.com> |
| # (http://lists.alioth.debian.org/pipermail/bash-completion-devel/2013-June/004868.html) |
| # edited by John C F <john.ch.fr at gmail.com> on 2015-02-02 |
| |
| _btrfs_devs() |
| { |
| local DEVS |
| DEVS=''; while read dev; do DEVS+="$dev "; done < <(lsblk -pnro name) |
| COMPREPLY+=( $( compgen -W "$DEVS" -- "$cur" ) ) |
| } |
| |
| _btrfs_mnts() |
| { |
| local MNTS |
| MNTS='' |
| while read mnt; do MNTS+="$mnt " |
| done < <(mount | awk '{print $3}') |
| COMPREPLY+=( $( compgen -W "$MNTS" -- "$cur" ) ) |
| } |
| |
| _btrfs() |
| { |
| local cur prev words cword |
| _init_completion || return |
| |
| COMPREPLY=() |
| |
| local cmd=${words[1]} |
| |
| commands='subvolume filesystem balance device scrub check rescue restore inspect-internal property send receive quota qgroup replace help version' |
| commands_subvolume='create delete list snapshot find-new get-default set-default show sync' |
| commands_filesystem='defragment sync resize show df label usage' |
| commands_balance='start pause cancel resume status' |
| commands_device='scan add delete remove ready stats usage' |
| commands_scrub='start cancel resume status' |
| commands_rescue='chunk-recover super-recover' |
| commands_inspect_internal='inode-resolve logical-resolve subvolid-resolve rootid min-dev-size' |
| commands_property='get set list' |
| commands_quota='enable disable rescan' |
| commands_qgroup='assign remove create destroy show limit' |
| commands_replace='start status cancel' |
| |
| if [[ "$cur" == -* && $cword -le 3 && "$cmd" != "help" ]]; then |
| COMPREPLY=( $( compgen -W '--help' -- "$cur" ) ) |
| return 0 |
| fi |
| |
| if [[ $cword -eq 1 ]]; then |
| COMPREPLY=( $( compgen -W "$commands" -- "$cur" ) ) |
| return 0 |
| elif [[ $cword -eq 2 ]]; then |
| case $cmd in |
| subvolume) |
| opts="$commands_subvolume" |
| ;; |
| filesystem) |
| opts="$commands_filesystem" |
| ;; |
| balance) |
| opts="$commands_balance" |
| ;; |
| device) |
| opts="$commands_device" |
| ;; |
| scrub) |
| opts="$commands_scrub" |
| ;; |
| check) |
| _btrfs_devs |
| return 0 |
| ;; |
| rescue) |
| opts="$commands_rescue" |
| ;; |
| restore) |
| _btrfs_devs |
| return 0 |
| ;; |
| inspect-internal) |
| opts="$commands_inspect_internal" |
| ;; |
| property) |
| opts="$commands_property" |
| ;; |
| send|receive) |
| _filedir -d |
| return 0 |
| ;; |
| quota) |
| opts="$commands_quota" |
| ;; |
| qgroup) |
| opts="$commands_qgroup" |
| ;; |
| replace) |
| opts="$commands_replace" |
| ;; |
| help) |
| opts="--full" |
| ;; |
| version) |
| return 0 |
| ;; |
| esac |
| COMPREPLY=( $( compgen -W "$opts" -- "$cur" ) ) |
| return 0 |
| elif [[ $cword -eq 3 ]]; then |
| case $cmd in |
| filesystem) |
| case $prev in |
| defragment) |
| _filedir |
| return 0 |
| ;; |
| label) |
| _btrfs_mnts |
| _btrfs_devs |
| return 0 |
| ;; |
| esac |
| ;; |
| device|rescue) |
| _btrfs_devs |
| return 0 |
| ;; |
| replace) |
| case $prev in |
| status|cancel) |
| _btrfs_mnts |
| return 0 |
| ;; |
| start) |
| _btrfs_devs |
| return 0 |
| ;; |
| esac |
| ;; |
| esac |
| fi |
| |
| if [[ "$cmd" == "receive" && "$prev" == "-f" ]]; then |
| _filedir |
| return 0 |
| fi |
| |
| _filedir -d |
| return 0 |
| } |
| |
| complete -F _btrfs btrfs |