completions/mkdir.ps1
|
<# # mkdir completion #> Import-Module NativeCommandCompleter.psm -ErrorAction SilentlyContinue $msg = data { ConvertFrom-StringData @' mode = Set file mode (as in chmod) parents = Make parent directories as needed verbose = Print a message for each created directory version = Output version help = Display help '@ } Import-LocalizedData -BindingVariable localizedMessages -ErrorAction SilentlyContinue; foreach ($key in $localizedMessages.Keys) { $msg[$key] = $localizedMessages[$key] } # check whether GNU mkdir mkdir --version 2>&1 | Out-Null if ($LASTEXITCODE -eq 0) # GNU mkdir { Register-NativeCompleter -Name mkdir -Parameters @( New-ParamCompleter -ShortName m -LongName mode -Description $msg.mode -Arguments @{ Name = 'MODE' Script = { $word = $this.WordToComplete; switch -Regex ($word) { '^[-+=]?[0-7]+' { if ($word.Length -ge 3) { return $null } 0 .. 7 | ForEach-Object { "${word}$_" } } '^[ugoa]?[ugo]*$' { "${word}+`tOperator: Add" "${word}-`tOperator: Remove" "${word}=`tOperator: Overwrite" $t = $Matches[0]; if (-not $t.Contains("a")) { if (-not $Matches[0].Contains("u")) { "${word}u`tTarget: User" } if (-not $Matches[0].Contains("g")) { "${word}g`tTarget: Group" } if (-not $Matches[0].Contains("o")) { "${word}o`tTarget: Other" } } } '[ugoa]?[ugo]*[-+=]([rwxXst]*)' { $p = $Matches[1]; if (-not $p.Contains("r")) { "${word}r`tPerm: read" } if (-not $p.Contains("w")) { "${word}w`tPerm: write" } if (-not $p -contains "x") { "${word}x`tPerm: execute/search" "${word}X`tPerm: execute/search only if directory or already executable" } if (-not $p.Contains("s")) { "${word}s`tPerm: set uid/gid" } if (-not $p.Contains("t")) { "${word}s`tPerm: set sticky bit" } } } } } New-ParamCompleter -ShortName p -LongName parents -Description $msg.parents New-ParamCompleter -ShortName v -LongName verbose -Description $msg.verbose New-ParamCompleter -LongName version -Description $msg.version New-ParamCompleter -LongName help -Description $msg.help ) } else { Register-NativeCompleter -Name mkdir -Parameters @( New-ParamCompleter -ShortName m -Description $msg.mode -Arguments @{ Name = 'mode' } New-ParamCompleter -ShortName p -Description $msg.parents New-ParamCompleter -ShortName v -Description $msg.verbose ) } |