completions/df.ps1

<#
 # df completion
 #>

Import-Module NativeCommandCompleter.psm -ErrorAction SilentlyContinue

$msg = data { ConvertFrom-StringData @'
    df = report file system disk space usage
    gnu_all = Include pseudo, duplicate, inaccessible file systems
    gnu_blockSize = Scale sizes by SIZE before printing
    gnu_humanReadable = Print sizes in human readable format
    gnu_si = Like -h, but use powers of 1000 not 1024
    gnu_inodes = List inode information instead of block usage
    gnu_kibibytes = Like --block-size=1K
    gnu_local = Limit listing to local file systems
    gnu_noSync = Do not invoke sync before getting usage info (default)
    gnu_output = Use output format defined by FIELD(s)
    gnu_portability = Use POSIX output format
    gnu_sync = Invoke sync before getting usage info
    gnu_total = Produce a grand total
    gnu_type = Limit listing to file systems of type TYPE
    gnu_printType = Print file system type
    gnu_excludeType = Limit listing to file systems not of type TYPE
    gnu_help = Display help and exit
    gnu_version = Display version and exit
    bsd_blockSize = Use SIZE-byte blocks
    bsd_humanReadable = Use unit suffixes
    bsd_si = Like -h, but use powers of 1000
    bsd_inodes = Show inode usage instead of block usage
    bsd_kibibytes = Use 1024-byte blocks
    bsd_local = Show only local file systems
    bsd_printType = Print file system type
    bsd_commaSeparated = Print sizes grouped and separated by thousands
'@
 }
Import-LocalizedData -BindingVariable localizedMessages -ErrorAction SilentlyContinue;
foreach ($key in $localizedMessages.Keys) { $msg[$key] = $localizedMessages[$key] }

# check whether GNU df
df --version 2>&1 | Out-Null
if ($LASTEXITCODE -eq 0) # GNU df
{
    $fieldList = "source","fstype","itotal","iused","iavail","ipcent","size","used","avail","pcent","file","target" 
    $typeCompleter = {
        df --output=fstype | Sort-Object -Unique | Where-Object { $_ -like "$wordToComplete*" }
    }

    Register-NativeCompleter -Name df -Description $msg.df -Parameters @(
        New-ParamCompleter -ShortName a -LongName all -Description $msg.gnu_all
        New-ParamCompleter -ShortName B -LongName block-size -Description $msg.gnu_blockSize -Type Required -VariableName 'SIZE'
        New-ParamCompleter -ShortName h -LongName human-readable -Description $msg.gnu_humanReadable
        New-ParamCompleter -ShortName H -LongName si -Description $msg.gnu_si
        New-ParamCompleter -ShortName i -LongName inodes -Description $msg.gnu_inodes
        New-ParamCompleter -ShortName k -Description $msg.gnu_kibibytes
        New-ParamCompleter -ShortName l -LongName local -Description $msg.gnu_local
        New-ParamCompleter -LongName no-sync -Description $msg.gnu_noSync
        New-ParamCompleter -LongName output -Description $msg.gnu_output -Type FlagOrValue,List -Arguments $fieldList -VariableName 'FIELD'
        New-ParamCompleter -ShortName P -LongName portability -Description $msg.gnu_portability
        New-ParamCompleter -LongName sync -Description $msg.gnu_sync
        New-ParamCompleter -LongName total -Description $msg.gnu_total
        New-ParamCompleter -ShortName t -LongName type -Description $msg.gnu_type -VariableName 'TYPE' -ArgumentCompleter $typeCompleter
        New-ParamCompleter -ShortName T -LongName print-type -Description $msg.gnu_printType
        New-ParamCompleter -ShortName x -LongName exclude-type -Description $msg.gnu_excludeType -VariableName 'TYPE' -ArgumentCompleter $typeCompleter
        New-ParamCompleter -LongName help -Description $msg.gnu_help
        New-ParamCompleter -LongName version -Description $msg.gnu_version
    )
}
else # BSD df
{
    Register-NativeCompleter -Name df -Description $msg.df -Parameters @(
        New-ParamCompleter -ShortName b -Description $msg.bsd_blockSize -Type Required -VariableName 'SIZE'
        New-ParamCompleter -ShortName g -Description $msg.bsd_humanReadable
        New-ParamCompleter -ShortName H -Description $msg.bsd_si
        New-ParamCompleter -ShortName i -Description $msg.bsd_inodes
        New-ParamCompleter -ShortName k -Description $msg.bsd_kibibytes
        New-ParamCompleter -ShortName l -Description $msg.bsd_local
        New-ParamCompleter -ShortName T -Description $msg.bsd_printType
        New-ParamCompleter -ShortName ',' -Description $msg.bsd_commaSeparated
    )
}