feat(pwsh): added completion

This commit is contained in:
deflektor 2025-06-14 22:40:02 +02:00
parent 102de14496
commit a430a37c9f

193
completions/pwsh/_eza.ps1 Normal file
View file

@ -0,0 +1,193 @@
using namespace System.Management.Automation
using namespace System.Management.Automation.Language
Register-ArgumentCompleter -Native -CommandName 'eza' -ScriptBlock {
param($wordToComplete, $commandAst, $cursorPosition)
$ArrayWhen = @('always', 'auto', 'never')
$ArraySort = @('name', 'extension', 'size', 'type', 'created', 'modified', 'accessed', 'changed', 'inode', 'none')
$ArrayColorScaleMode = @('fixed', 'gradient')
$ArrayColorScale = @('all', 'age', 'size')
$ArrayAbsolute = @('on', 'follow', 'off')
$ArrayTime = @('modified', 'accessed', 'created')
$ArrayTimeStyle = @('default', 'iso', 'long-iso', 'full-iso', 'relative', '+%Y-%m-%d %H:%M', '+%Y.%m.%d %H:$M:$s')
$commandElements = $commandAst.CommandElements
$command = @(
'eza'
for ($i = 1; $i -lt $commandElements.Count; $i++) {
$element = $commandElements[$i]
if ($element -isnot [StringConstantExpressionAst] -or
$element.StringConstantType -ne [StringConstantType]::BareWord -or
$element.Value -eq $wordToComplete) {
break
}
$element.Value
}) -join ';'
$completions = @(switch -Wildcard ($command) {
'*;--help' {
break
}
'*;--version' {
break
}
'*;--absolute' {
$ArrayAbsolute |
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_)}
break
}
'*;--sort' {
$ArraySort |
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_)}
break
}
'*;--color-scale' {
$ArrayColorScale |
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_)}
break
}
'*;--color-scale-mode' {
$ArrayColorScaleMode |
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_)}
break
}
'*--long;*--time-style' {
$ArrayTimeStyle |
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_)}
break
}
'*--long;*--time' {
$ArrayTime |
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_)}
break
}
'*;--classify' {
$ArrayWhen |
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_)}
break
}
'*;--color' {
$ArrayWhen |
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_)}
break
}
'*;--icons' {
$ArrayWhen |
ForEach-Object {[System.Management.Automation.CompletionResult]::new($_, $_, "ParameterValue", $_)}
break
}
'*;--all' {
[CompletionResult]::new('--show-symlinks' ,'listfilessyl' , [CompletionResultType]::ParameterName, 'explicitly show symbolic links (for use with --only-dirs | --only-files)')
[CompletionResult]::new('--no-symlinks' ,'listfilessyl' , [CompletionResultType]::ParameterName, 'do not show symbolic links')
break
}
'*long*' {
# [CompletionResult]::new('-b' ,'binary' , [CompletionResultType]::ParameterName, 'list file sizes with binary prefixes')
[CompletionResult]::new('--binary' ,'binary' , [CompletionResultType]::ParameterName, 'list file sizes with binary prefixes')
# [CompletionResult]::new('-B' ,'bytes' , [CompletionResultType]::ParameterName, 'list file sizes in bytes, without any prefixes')
[CompletionResult]::new('--bytes' ,'bytes' , [CompletionResultType]::ParameterName, 'list file sizes in bytes, without any prefixes')
# [CompletionResult]::new('-g' ,'group' , [CompletionResultType]::ParameterName, 'list each file''s group')
[CompletionResult]::new('--smart-group' ,'smart-group' , [CompletionResultType]::ParameterName, 'only show group if it has a different name from owner')
[CompletionResult]::new('--group' ,'group' , [CompletionResultType]::ParameterName, 'list each file''s group')
# [CompletionResult]::new('-h' ,'header' , [CompletionResultType]::ParameterName, 'add a header row to each column')
[CompletionResult]::new('--header' ,'header' , [CompletionResultType]::ParameterName, 'add a header row to each column')
# [CompletionResult]::new('-H' ,'links' , [CompletionResultType]::ParameterName, 'list each file''s number of hard links')
[CompletionResult]::new('--links' ,'links' , [CompletionResultType]::ParameterName, 'list each file''s number of hard links')
# [CompletionResult]::new('-i' ,'inode' , [CompletionResultType]::ParameterName, 'list each file''s inode number')
[CompletionResult]::new('--inode' ,'inode' , [CompletionResultType]::ParameterName, 'list each file''s inode number')
# [CompletionResult]::new('-M' ,'mounts' , [CompletionResultType]::ParameterName, 'show mount details (Linux and Mac only)')
# [CompletionResult]::new('--mounts' ,'mounts' , [CompletionResultType]::ParameterName, 'show mount details (Linux and Mac only)')
# [CompletionResult]::new('-n' ,'numeric' , [CompletionResultType]::ParameterName, 'list numeric user and group IDs')
[CompletionResult]::new('--numeric' ,'numeric' , [CompletionResultType]::ParameterName, 'list numeric user and group IDs')
# [CompletionResult]::new('-O' ,'flags' , [CompletionResultType]::ParameterName, 'list file flags (Mac, BSD, and Windows only)')
[CompletionResult]::new('--flags' ,'flags' , [CompletionResultType]::ParameterName, 'list file flags (Mac, BSD, and Windows only)')
# [CompletionResult]::new('-S' ,'blocksize' , [CompletionResultType]::ParameterName, 'show size of allocated file system blocks')
[CompletionResult]::new('--blocksize' ,'blocksize' , [CompletionResultType]::ParameterName, 'show size of allocated file system blocks')
# [CompletionResult]::new('-t' ,'time' , [CompletionResultType]::ParameterName, 'which timestamp field to list (modified, accessed, created)')
[CompletionResult]::new('--time' ,'time' , [CompletionResultType]::ParameterName, 'which timestamp field to list (modified, accessed, created)')
# [CompletionResult]::new('-m' ,'modified' , [CompletionResultType]::ParameterName, 'use the modified timestamp field')
[CompletionResult]::new('--modified' ,'modified' , [CompletionResultType]::ParameterName, 'use the modified timestamp field')
# [CompletionResult]::new('-u' ,'accessed' , [CompletionResultType]::ParameterName, 'use the accessed timestamp field')
[CompletionResult]::new('--accessed' ,'accessed' , [CompletionResultType]::ParameterName, 'use the accessed timestamp field')
# [CompletionResult]::new('-U' ,'created' , [CompletionResultType]::ParameterName, 'use the created timestamp field')
[CompletionResult]::new('--changed' ,'changed' , [CompletionResultType]::ParameterName, 'use the changed timestamp field')
[CompletionResult]::new('--created' ,'created' , [CompletionResultType]::ParameterName, 'use the created timestamp field')
[CompletionResult]::new('--time-style' ,'time-style' , [CompletionResultType]::ParameterName, 'how to format timestamps (default, iso, long-iso,full-iso, relative, or a custom style ''+<FORMAT>'' like ''+%Y-%m-%d %H:%M'')')
# [CompletionResult]::new('--total-size' ,'total-size' , [CompletionResultType]::ParameterName, 'show the size of a directory as the size of all files and directories inside (unix only)')
# [CompletionResult]::new('-o' ,'octal-permissions' , [CompletionResultType]::ParameterName, 'list each file''s permission in octal format')
[CompletionResult]::new('--no-permissions' ,'no-permissions' , [CompletionResultType]::ParameterName, 'suppress the permissions field')
[CompletionResult]::new('--octal-permissions' ,'octal-permissions' , [CompletionResultType]::ParameterName, 'list each file''s permission in octal format')
[CompletionResult]::new('--no-filesize' ,'no-filesize' , [CompletionResultType]::ParameterName, 'suppress the filesize field')
[CompletionResult]::new('--no-user' ,'no-user' , [CompletionResultType]::ParameterName, 'suppress the user field')
[CompletionResult]::new('--no-time' ,'no-time' , [CompletionResultType]::ParameterName, 'suppress the time field')
[CompletionResult]::new('--stdin' ,'stdin' , [CompletionResultType]::ParameterName, 'read file names from stdin, one per line or other separator specified in environment')
[CompletionResult]::new('--git' ,'git' , [CompletionResultType]::ParameterName, 'list each file''s Git status, if tracked or ignored')
[CompletionResult]::new('--no-git' ,'no-git' , [CompletionResultType]::ParameterName, 'suppress Git status (always overrides -git, --git-repos, --git-repos-no-status)')
[CompletionResult]::new('--git-repos' ,'git-repos' , [CompletionResultType]::ParameterName, 'list root of git-tree status')
[CompletionResult]::new('--git-repos-no-status' ,'git-repos-no-status' , [CompletionResultType]::ParameterName, 'list each git-repos branch name (much faster)')
break
}
default {
# [CompletionResult]::new('-?' ,'help' , [CompletionResultType]::ParameterName, 'show list of command-line options')
[CompletionResult]::new('--help' ,'help' , [CompletionResultType]::ParameterName, 'show list of command-line options')
# [CompletionResult]::new('-v' ,'version' , [CompletionResultType]::ParameterName, 'show version of eza')
[CompletionResult]::new('--version' ,'version' , [CompletionResultType]::ParameterName, 'show version of eza')
# [CompletionResult]::new('-1' ,'oneline' , [CompletionResultType]::ParameterName, 'display one entry per line')
[CompletionResult]::new('--oneline' ,'oneline' , [CompletionResultType]::ParameterName, 'display one entry per line')
# [CompletionResult]::new('-l' ,'long' , [CompletionResultType]::ParameterName, 'display extended file metadata as a table')
[CompletionResult]::new('--long' ,'long' , [CompletionResultType]::ParameterName, 'display extended file metadata as a table')
# [CompletionResult]::new('-G' ,'grid' , [CompletionResultType]::ParameterName, 'display entries as a grid (default)')
[CompletionResult]::new('--grid' ,'grid' , [CompletionResultType]::ParameterName, 'display entries as a grid (default)')
# [CompletionResult]::new('-x' ,'across' , [CompletionResultType]::ParameterName, 'sort the grid across, rather than downwards')
[CompletionResult]::new('--across' ,'across' , [CompletionResultType]::ParameterName, 'sort the grid across, rather than downwards')
# [CompletionResult]::new('-R' ,'recurse' , [CompletionResultType]::ParameterName, 'recurse into directories')
[CompletionResult]::new('--recurse' ,'recurse' , [CompletionResultType]::ParameterName, 'recurse into directories')
# [CompletionResult]::new('-T' ,'tree' , [CompletionResultType]::ParameterName, 'recurse into directories as a tree')
[CompletionResult]::new('--tree' ,'tree' , [CompletionResultType]::ParameterName, 'recurse into directories as a tree')
# [CompletionResult]::new('-X' ,'dereference' , [CompletionResultType]::ParameterName, 'dereference symbolic links when displaying information')
[CompletionResult]::new('--dereference' ,'dereference' , [CompletionResultType]::ParameterName, 'dereference symbolic links when displaying information')
# [CompletionResult]::new('-F' ,'classify' , [CompletionResultType]::ParameterName, 'display type indicator by file names (always, auto, never)')
[CompletionResult]::new('--classify' ,'classify' , [CompletionResultType]::ParameterName, 'display type indicator by file names (always, auto, never)')
[CompletionResult]::new('--color' ,'color' , [CompletionResultType]::ParameterName, 'when to use terminal colours (always, auto, never)')
# [CompletionResult]::new('--colour' ,'color' , [CompletionResultType]::ParameterName, 'when to use terminal colours (always, auto, never)')
[CompletionResult]::new('--color-scale' ,'colorscale' , [CompletionResultType]::ParameterName, 'highlight levels of ''field'' distinctly(all, age, size)')
# [CompletionResult]::new('--colour-scale' ,'colorscale' , [CompletionResultType]::ParameterName, 'highlight levels of ''field'' distinctly(all, age, size)')
[CompletionResult]::new('--color-scale-mode' ,'colorscalemode' , [CompletionResultType]::ParameterName, 'use gradient or fixed colors in --color-scale (fixed, gradient)')
# [CompletionResult]::new('--colour-scale-mode' ,'colorscalemode' , [CompletionResultType]::ParameterName, 'use gradient or fixed colors in --color-scale (fixed, gradient)')
[CompletionResult]::new('--icons' ,'icons' , [CompletionResultType]::ParameterName, 'when to display icons (always, auto, never)')
[CompletionResult]::new('--no-quotes' ,'noquotes' , [CompletionResultType]::ParameterName, 'don''t quote file names with spaces')
[CompletionResult]::new('--hyperlink' ,'hyperlink' , [CompletionResultType]::ParameterName, 'display entries as hyperlinks')
[CompletionResult]::new('--absolute' ,'absolute' , [CompletionResultType]::ParameterName, 'display entries with their absolute path (on, follow, off)')
[CompletionResult]::new('--follow-symlinks' ,'followsymlinks' , [CompletionResultType]::ParameterName, 'drill down into symbolic links that point to directories')
# [CompletionResult]::new('-w' ,'widths' , [CompletionResultType]::ParameterName, 'set screen width in columns')
[CompletionResult]::new('--width' ,'widths' , [CompletionResultType]::ParameterName, 'set screen width in columns')
# [CompletionResult]::new('-a' ,'filter' , [CompletionResultType]::ParameterName, 'show hidden and ''dot'' files. Use this twice to also show the ''.'' and ''..'' directories')
[CompletionResult]::new('--all' ,'filter' , [CompletionResultType]::ParameterName, 'show hidden and ''dot'' files. Use this twice to also show the ''.'' and ''..'' directories')
# [CompletionResult]::new('-A' ,'filter' , [CompletionResultType]::ParameterName, 'equivalent to --all; included for compatibility with `ls -A`')
# [CompletionResult]::new('--almost-all' ,'filter' , [CompletionResultType]::ParameterName, 'equivalent to --all; included for compatibility with `ls -A`')
# [CompletionResult]::new('-d' ,'filter' , [CompletionResultType]::ParameterName, 'list directories as files; don''t list their contents')
[CompletionResult]::new('--list-dirs' ,'filter' , [CompletionResultType]::ParameterName, 'list directories as files; don''t list their contents')
# [CompletionResult]::new('-D' ,'filter' , [CompletionResultType]::ParameterName, 'list only directories')
[CompletionResult]::new('--only-dirs' ,'filter' , [CompletionResultType]::ParameterName, 'list only directories')
# [CompletionResult]::new('-f' ,'filter' , [CompletionResultType]::ParameterName, 'list only files')
[CompletionResult]::new('--only-files' ,'filter' , [CompletionResultType]::ParameterName, 'list only files')
# [CompletionResult]::new('-L' ,'level' , [CompletionResultType]::ParameterName, 'limit the depth of recursion')
[CompletionResult]::new('--level' ,'level' , [CompletionResultType]::ParameterName, 'limit the depth of recursion')
# [CompletionResult]::new('-r' ,'reverse' , [CompletionResultType]::ParameterName, 'reverse the sort order')
[CompletionResult]::new('--reverse' ,'reverse' , [CompletionResultType]::ParameterName, 'reverse the sort order')
# [CompletionResult]::new('-s' ,'sort' , [CompletionResultType]::ParameterName, 'which field to sort by SORT_FIELD')
[CompletionResult]::new('--sort' ,'sort' , [CompletionResultType]::ParameterName, 'which field to sort by SORT_FIELD')
[CompletionResult]::new('--group-directories-first' ,'gdf' , [CompletionResultType]::ParameterName, 'list directories before other files')
[CompletionResult]::new('--group-directories-last' ,'gdl' , [CompletionResultType]::ParameterName, 'list directories after other files')
# [CompletionResult]::new('-I' ,'ignore-glob' , [CompletionResultType]::ParameterName, 'glob patterns (pipe-separated) of files to ignore GLOBS')
[CompletionResult]::new('--ignore-glob' ,'ignore-glob' , [CompletionResultType]::ParameterName, 'glob patterns (pipe-separated) of files to ignore GLOBS')
[CompletionResult]::new('--git-ignore' ,'git-ignore' , [CompletionResultType]::ParameterName, 'ignore files mentioned in ''.gitignore''')
break
}
})
$completions.Where{ $_.CompletionText -like "$wordToComplete*" } |
Sort-Object -Property completionText
}