summaryrefslogtreecommitdiff
path: root/completions/_mount.linux
diff options
context:
space:
mode:
Diffstat (limited to 'completions/_mount.linux')
-rw-r--r--completions/_mount.linux248
1 files changed, 248 insertions, 0 deletions
diff --git a/completions/_mount.linux b/completions/_mount.linux
new file mode 100644
index 00000000..c74aaec6
--- /dev/null
+++ b/completions/_mount.linux
@@ -0,0 +1,248 @@
+# mount(8) completion -*- shell-script -*-
+
+# Use of this file is deprecated on Linux. Upstream completion is
+# available in util-linux >= 2.28, use that instead.
+
+_mount()
+{
+ local cur prev words cword
+ _init_completion -n =: || return
+
+ local split=false
+ case "$prev" in
+ -t|--types)
+ # find /lib/modules/$(uname -r)/ -type f -path '*/fs/*.ko' -printf '%f\n' | cut -d. -f1
+ # FIXME: no<fstype>
+ if [[ "$cur" == ?*,* ]]; then
+ prev="${cur%,*}"
+ cur="${cur##*,}"
+ split=true
+ fi
+ COMPREPLY=( $(compgen -W 'auto adfs affs autofs btrfs cifs coda
+ cramfs davfs debugfs devpts efs ext2 ext3 ext4 fuse hfs hfsplus
+ hpfs iso9660 jffs2 jfs minix msdos ncpfs nfs nfs4 ntfs ntfs-3g
+ proc qnx4 ramfs reiserfs romfs squashfs smbfs sysv tmpfs ubifs
+ udf ufs umsdos usbfs vfat xfs' -- "$cur") )
+ _fstypes
+ $split && COMPREPLY=( ${COMPREPLY[@]/#/$prev,} )
+ return
+ ;;
+ --bind|-B|--rbind|-R)
+ _filedir -d
+ return
+ ;;
+ -p|--pass-fd)
+ COMPREPLY=( $(compgen -W '{0..9}') )
+ compopt -o nospace
+ return
+ ;;
+ -L)
+ COMPREPLY=( $(cd "/dev/disk/by-label/" 2>/dev/null || return; \
+ compgen -f -- "$cur") )
+ return
+ ;;
+ -U)
+ COMPREPLY=( $(cd "/dev/disk/by-uuid/" 2>/dev/null || return; \
+ compgen -f -- "$cur") )
+ return
+ ;;
+ -O|--test-opts)
+ # argument required but no completions available
+ return
+ ;;
+ -o|--options)
+ local fstype=auto # default fstype
+ for (( i=${#words[@]}-1; i>0; i-- )); do
+ if [[ "${words[i]}" == -@(t|-types)* ]]; then
+ if [[ "${words[i]}" == *=* ]]; then
+ [[ "${words[i]}" == ?*,* ]] && break
+ fstype="${words[i]#-*=}"
+ else
+ [[ "${words[i+1]}" == ?*,* ]] && break
+ fstype="${words[i+1]}"
+ fi
+ break
+ fi
+ done
+ # no<fstype> is not a real fstype, reset to "auto"
+ [[ "$fstype" == no?* ]] && fstype=auto
+ # split options list
+ if [[ "$cur" == ?*,* ]]; then
+ prev="${cur%,*}"
+ cur="${cur##*,}"
+ split=true
+ fi
+ # no completion if $cur is opt=smth
+ [[ "$cur" == *=* ]] && return
+ # mount options
+ COMPREPLY=( $(compgen -W 'loop {,a}sync {,no}atime {,no}auto
+ {,fs,def,root}context= defaults {,no}dev {,no}diratime dirsync
+ {,no}exec group {,no}iversion {,no}mand _netdev nofail
+ {,no}relatime {,no}strictatime {,no}suid owner remount ro rw
+ {,no}user users' -- "$cur") )
+ case "$fstype" in
+ adfs|auto)
+ COMPREPLY+=( $(compgen -W '{u,g}id= {own,oth}mask=' -- "$cur") )
+ ;;&
+ affs|auto)
+ COMPREPLY+=( $(compgen -W '{u,g}id= set{u,g}id= mode= protect
+ usemp verbose prefix= volume= reserved= root= bs=
+ {,no,usr,grp}quota' -- "$cur") )
+ ;;&
+ btrfs|auto)
+ COMPREPLY+=( $(compgen -W 'degraded subvol= subvolid= device=
+ nodatasum nodatacow nobarrier max_inline= alloc_start=
+ thread_pool= compress= compress-force= ssd noacl notreelog
+ flushoncommit metadata_ratio= {,no}space_cache clear_cache
+ user_subvol_rm_allowed autodefrag inode_cache' -- "$cur") )
+ ;;&
+ cifs|auto)
+ COMPREPLY+=( $(compgen -W 'user= password= credentials= {u,g}id=
+ force{u,g}id port= servern= netbiosname= {file,dir}_mode=
+ ip= domain= guest iocharset {,no}setuids {,no,dyn}perm
+ directio {,no}mapchars {,no}intr hard soft noacl nocase sec=
+ nobrl sfu {,no}serverino nounix nouser_xattr {r,w}size=
+ rwpidforward backup{u,g}id cache=' -- "$cur") )
+ ;;&
+ davfs|auto)
+ COMPREPLY+=( $(compgen -W 'conf= {file,dir}_mode= {u,g}id=
+ username=' -- "$cur") )
+ ;;&
+ ext[2-4]|auto)
+ COMPREPLY+=( $(compgen -W '{,no}acl bsddf minixdf check= debug
+ errors= {,no}grpid {bsd,sysv}groups {,no,usr,grp}quota
+ nobh nouid32 oldalloc orlov res{u,g}id= sb=
+ {,no}user_xattr' -- "$cur") )
+ ;;&
+ ext[34]|auto)
+ COMPREPLY+=( $(compgen -W 'journal= journal_dev= norecovery
+ noload data= barrier= commit=' -- "$cur") )
+ ;;&
+ ext4|auto)
+ COMPREPLY+=( $(compgen -W 'journal_checksum journal_async_commit
+ nobarrier inode_readahead= stripe= {,no}delalloc abort
+ {max,min}_batch_time= journal_ioprio= {,no}auto_da_alloc
+ {,no}discard nouid32 resize {,no}block_validity
+ dioread_{,no}lock max_dir_size_kb= i_version' -- "$cur") )
+ ;;&
+ msdos|umsdos|vfat|auto)
+ COMPREPLY+=( $(compgen -W 'blocksize= {u,g}id= {u,d,f}mask=
+ allow_utime= check= codepage= conv= cvf_format= cvf_option=
+ debug fat= iocharset= tz= quiet showexec sys_immutable flush
+ usefree {,no}dots dotsOK=' -- "$cur") )
+ ;;&
+ vfat|auto)
+ COMPREPLY+=( $(compgen -W 'uni_xlate posix nonumtail utf8
+ shortname=' -- "$cur") )
+ ;;&
+ iso9660|auto)
+ COMPREPLY+=( $(compgen -W 'norock nojoliet check= {u,g}id= map=
+ mode= unhide block= conv= cruft session= sbsector=
+ iocharset= utf8' -- "$cur") )
+ ;;&
+ jffs2|auto)
+ COMPREPLY+=( $(compgen -W 'compr= rp_size=' -- "$cur") )
+ ;;&
+ jfs|auto)
+ COMPREPLY+=( $(compgen -W 'iocharset= resize= {,no}integrity
+ errors= {,no,usr,grp}quota' -- "$cur") )
+ ;;&
+ nfs|nfs4|auto)
+ COMPREPLY+=( $(compgen -W 'soft hard timeo= retrans= {r,w}size=
+ {,no}ac acreg{min,max}= acdir{min,max}= actimeo= bg fg
+ retry= sec= {,no}sharecache {,no}resvport lookupcache=
+ proto= port= {,no}intr {,no}cto {,nfs}vers= ' -- "$cur") )
+ ;;&
+ nfs|auto)
+ COMPREPLY+=( $(compgen -W 'udp tcp rdma mount{port,proto,host}=
+ mountvers= namlen={,no}lock {,no}acl {,no}rdirplus
+ {,no}fsc' -- "$cur") )
+ ;;&
+ nfs4|auto)
+ COMPREPLY+=( $(compgen -W 'clientaddr= {,no}migration' \
+ -- "$cur") )
+ ;;&
+ ntfs-3g)
+ COMPREPLY+=( $(compgen -W '{u,g}id= {u,f,d}mask= usermapping=
+ permissions inherit locale= force {,no}recover
+ ignore_case remove_hiberfile show_sys_files
+ hide_{hid,dot}_files windows_names allow_other max_read=
+ silent no_def_opts streams_interface= user_xattr efs_raw
+ {,no}compression debug no_detach' -- "$cur") )
+ ;;&
+ proc|auto)
+ COMPREPLY+=( $(compgen -W '{u,g}id=' -- "$cur") )
+ ;;&
+ reiserfs|auto)
+ COMPREPLY+=( $(compgen -W 'conv hash= {,no_un}hashed_relocation
+ noborder nolog notail replayonly resize= user_xattr acl
+ barrier=' -- "$cur") )
+ ;;&
+ tmpfs|auto)
+ COMPREPLY+=( $(compgen -W 'size= nr_blocks= nr_inodes= mode=
+ {u,g}id= mpol=' -- "$cur") )
+ ;;&
+ udf|auto)
+ COMPREPLY+=( $(compgen -W '{u,g}id= umask= unhide undelete
+ nostrict iocharset bs= novrs session= anchor= volume=
+ partition= lastblock= fileset= rootdir=' -- "$cur") )
+ ;;&
+ usbfs|auto)
+ COMPREPLY+=( $(compgen -W 'dev{u,g}id= devmode= bus{u,g}id=
+ busmode= list{u,g}id= listmode=' -- "$cur") )
+ ;;&
+ xfs|auto)
+ COMPREPLY+=( $(compgen -W 'allocsize= {,no}attr2 barrier dmapi
+ {,no}grpid {bsd,sysv}groups ihashsize= {,no}ikeep
+ inode{32,64} {,no}largeio logbufs= logbsize= logdev=
+ rtdev= mtpt= noalign norecovery nouuid osyncisosync
+ {u,g,p}qnoenforce {,u,usr,g,grp,p,prj}quota sunit= swidth=
+ swalloc' -- "$cur") )
+ ;;&
+ esac
+ # COMP_WORDBREAKS is a real pain in the ass
+ prev="${prev##*[$COMP_WORDBREAKS]}"
+ $split && COMPREPLY=( ${COMPREPLY[@]/#/"$prev,"} )
+ [[ $COMPREPLY == *= ]] && compopt -o nospace
+ return
+ ;;
+ esac
+
+ if [[ "$cur" == -* ]]; then
+ COMPREPLY=( $(compgen -W '--version --help --verbose --all --fork
+ --fake --internal-only -l --no-mtab --no-canonicalize --pass-fd -s
+ --read-only --rw -L -U --types --test-opts --options --bind --rbind
+ --move' -- "$cur") )
+ [[ $COMPREPLY ]] && return
+ fi
+
+ [[ "$cur" == \\ ]] && cur="/"
+
+ local sm host
+
+ if [[ "$cur" == *:* ]]; then
+ for sm in "$(type -P showmount)" {,/usr}/{,s}bin/showmount; do
+ [[ -x $sm ]] || continue
+ COMPREPLY=( $(compgen -W "$("$sm" -e ${cur%%:*} | \
+ awk 'NR>1 {print $1}')" -- "${cur#*:}") )
+ return
+ done
+ fi
+
+ if [[ "$cur" == //* ]]; then
+ host=${cur#//}
+ host=${host%%/*}
+ if [[ -n $host ]]; then
+ COMPREPLY=( $(compgen -P "//$host" -W \
+ "$(smbclient -d 0 -NL $host 2>/dev/null |
+ command sed -ne '/^[[:blank:]]*Sharename/,/^$/p' |
+ command sed -ne '3,$s|^[^A-Za-z]*\([^[:blank:]]*\).*$|/\1|p' )" \
+ -- "${cur#//$host}") )
+ fi
+ fi
+
+ _filedir
+} &&
+complete -F _mount mount
+
+# ex: filetype=sh