|
| 1 | + |
| 2 | +using namespace System.Management.Automation |
| 3 | +using namespace System.Management.Automation.Language |
| 4 | + |
| 5 | +Register-ArgumentCompleter -Native -CommandName '{{PROJECT_EXECUTABLE}}' -ScriptBlock { |
| 6 | + param($wordToComplete, $commandAst, $cursorPosition) |
| 7 | + |
| 8 | + $commandElements = $commandAst.CommandElements |
| 9 | + $command = @( |
| 10 | + '{{PROJECT_EXECUTABLE}}' |
| 11 | + for ($i = 1; $i -lt $commandElements.Count; $i++) { |
| 12 | + $element = $commandElements[$i] |
| 13 | + if ($element -isnot [StringConstantExpressionAst] -or |
| 14 | + $element.StringConstantType -ne [StringConstantType]::BareWord -or |
| 15 | + $element.Value.StartsWith('-')) { |
| 16 | + break |
| 17 | + } |
| 18 | + $element.Value |
| 19 | + }) -join ';' |
| 20 | + |
| 21 | + $completions = @(switch ($command) { |
| 22 | + '{{PROJECT_EXECUTABLE}}' { |
| 23 | + [CompletionResult]::new('-l', 'l', [CompletionResultType]::ParameterName, 'Set the language for syntax highlighting.') |
| 24 | + [CompletionResult]::new('--language', 'language', [CompletionResultType]::ParameterName, 'Set the language for syntax highlighting.') |
| 25 | + [CompletionResult]::new('-H', 'H', [CompletionResultType]::ParameterName, 'Highlight lines N through M.') |
| 26 | + [CompletionResult]::new('--highlight-line', 'highlight-line', [CompletionResultType]::ParameterName, 'Highlight lines N through M.') |
| 27 | + [CompletionResult]::new('--file-name', 'file-name', [CompletionResultType]::ParameterName, 'Specify the name to display for a file.') |
| 28 | + [CompletionResult]::new('--diff-context', 'diff-context', [CompletionResultType]::ParameterName, 'diff-context') |
| 29 | + [CompletionResult]::new('--tabs', 'tabs', [CompletionResultType]::ParameterName, 'Set the tab width to T spaces.') |
| 30 | + [CompletionResult]::new('--wrap', 'wrap', [CompletionResultType]::ParameterName, 'Specify the text-wrapping mode (*auto*, never, character).') |
| 31 | + [CompletionResult]::new('--terminal-width', 'terminal-width', [CompletionResultType]::ParameterName, 'Explicitly set the width of the terminal instead of determining it automatically. If prefixed with ''+'' or ''-'', the value will be treated as an offset to the actual terminal width. See also: ''--wrap''.') |
| 32 | + [CompletionResult]::new('--color', 'color', [CompletionResultType]::ParameterName, 'When to use colors (*auto*, never, always).') |
| 33 | + [CompletionResult]::new('--italic-text', 'italic-text', [CompletionResultType]::ParameterName, 'Use italics in output (always, *never*)') |
| 34 | + [CompletionResult]::new('--decorations', 'decorations', [CompletionResultType]::ParameterName, 'When to show the decorations (*auto*, never, always).') |
| 35 | + [CompletionResult]::new('--paging', 'paging', [CompletionResultType]::ParameterName, 'Specify when to use the pager, or use `-P` to disable (*auto*, never, always).') |
| 36 | + [CompletionResult]::new('--pager', 'pager', [CompletionResultType]::ParameterName, 'Determine which pager to use.') |
| 37 | + [CompletionResult]::new('-m', 'm', [CompletionResultType]::ParameterName, 'Use the specified syntax for files matching the glob pattern (''*.cpp:C++'').') |
| 38 | + [CompletionResult]::new('--map-syntax', 'map-syntax', [CompletionResultType]::ParameterName, 'Use the specified syntax for files matching the glob pattern (''*.cpp:C++'').') |
| 39 | + [CompletionResult]::new('--theme', 'theme', [CompletionResultType]::ParameterName, 'Set the color theme for syntax highlighting.') |
| 40 | + [CompletionResult]::new('--style', 'style', [CompletionResultType]::ParameterName, 'Comma-separated list of style elements to display (*auto*, full, plain, changes, header, grid, rule, numbers, snip).') |
| 41 | + [CompletionResult]::new('-r', 'r', [CompletionResultType]::ParameterName, 'Only print the lines from N to M.') |
| 42 | + [CompletionResult]::new('--line-range', 'line-range', [CompletionResultType]::ParameterName, 'Only print the lines from N to M.') |
| 43 | + [CompletionResult]::new('-A', 'A', [CompletionResultType]::ParameterName, 'Show non-printable characters (space, tab, newline, ..).') |
| 44 | + [CompletionResult]::new('--show-all', 'show-all', [CompletionResultType]::ParameterName, 'Show non-printable characters (space, tab, newline, ..).') |
| 45 | + [CompletionResult]::new('-p', 'p', [CompletionResultType]::ParameterName, 'Show plain style (alias for ''--style=plain'').') |
| 46 | + [CompletionResult]::new('--plain', 'plain', [CompletionResultType]::ParameterName, 'Show plain style (alias for ''--style=plain'').') |
| 47 | + [CompletionResult]::new('-d', 'd', [CompletionResultType]::ParameterName, 'Only show lines that have been added/removed/modified.') |
| 48 | + [CompletionResult]::new('--diff', 'diff', [CompletionResultType]::ParameterName, 'Only show lines that have been added/removed/modified.') |
| 49 | + [CompletionResult]::new('-n', 'n', [CompletionResultType]::ParameterName, 'Show line numbers (alias for ''--style=numbers'').') |
| 50 | + [CompletionResult]::new('--number', 'number', [CompletionResultType]::ParameterName, 'Show line numbers (alias for ''--style=numbers'').') |
| 51 | + [CompletionResult]::new('-f', 'f', [CompletionResultType]::ParameterName, 'f') |
| 52 | + [CompletionResult]::new('--force-colorization', 'force-colorization', [CompletionResultType]::ParameterName, 'force-colorization') |
| 53 | + [CompletionResult]::new('-P', 'P', [CompletionResultType]::ParameterName, 'Alias for ''--paging=never''') |
| 54 | + [CompletionResult]::new('--no-paging', 'no-paging', [CompletionResultType]::ParameterName, 'Alias for ''--paging=never''') |
| 55 | + [CompletionResult]::new('--list-themes', 'list-themes', [CompletionResultType]::ParameterName, 'Display all supported highlighting themes.') |
| 56 | + [CompletionResult]::new('-L', 'L', [CompletionResultType]::ParameterName, 'Display all supported languages.') |
| 57 | + [CompletionResult]::new('--list-languages', 'list-languages', [CompletionResultType]::ParameterName, 'Display all supported languages.') |
| 58 | + [CompletionResult]::new('-u', 'u', [CompletionResultType]::ParameterName, 'u') |
| 59 | + [CompletionResult]::new('--unbuffered', 'unbuffered', [CompletionResultType]::ParameterName, 'unbuffered') |
| 60 | + [CompletionResult]::new('--no-config', 'no-config', [CompletionResultType]::ParameterName, 'Do not use the configuration file') |
| 61 | + [CompletionResult]::new('--no-custom-assets', 'no-custom-assets', [CompletionResultType]::ParameterName, 'Do not load custom assets') |
| 62 | + [CompletionResult]::new('--config-file', 'config-file', [CompletionResultType]::ParameterName, 'Show path to the configuration file.') |
| 63 | + [CompletionResult]::new('--generate-config-file', 'generate-config-file', [CompletionResultType]::ParameterName, 'Generates a default configuration file.') |
| 64 | + [CompletionResult]::new('--config-dir', 'config-dir', [CompletionResultType]::ParameterName, 'Show bat''s configuration directory.') |
| 65 | + [CompletionResult]::new('--cache-dir', 'cache-dir', [CompletionResultType]::ParameterName, 'Show bat''s cache directory.') |
| 66 | + [CompletionResult]::new('--diagnostic', 'diagnostic', [CompletionResultType]::ParameterName, 'Show diagnostic information for bug reports.') |
| 67 | + [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Print this help message.') |
| 68 | + [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Print this help message.') |
| 69 | + [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Show version information.') |
| 70 | + [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Show version information.') |
| 71 | + [CompletionResult]::new('cache', 'cache', [CompletionResultType]::ParameterValue, 'Modify the syntax-definition and theme cache') |
| 72 | + break |
| 73 | + } |
| 74 | + '{{PROJECT_EXECUTABLE}};cache' { |
| 75 | + [CompletionResult]::new('--source', 'source', [CompletionResultType]::ParameterName, 'Use a different directory to load syntaxes and themes from.') |
| 76 | + [CompletionResult]::new('--target', 'target', [CompletionResultType]::ParameterName, 'Use a different directory to store the cached syntax and theme set.') |
| 77 | + [CompletionResult]::new('-b', 'b', [CompletionResultType]::ParameterName, 'Initialize (or update) the syntax/theme cache.') |
| 78 | + [CompletionResult]::new('--build', 'build', [CompletionResultType]::ParameterName, 'Initialize (or update) the syntax/theme cache.') |
| 79 | + [CompletionResult]::new('-c', 'c', [CompletionResultType]::ParameterName, 'Remove the cached syntax definitions and themes.') |
| 80 | + [CompletionResult]::new('--clear', 'clear', [CompletionResultType]::ParameterName, 'Remove the cached syntax definitions and themes.') |
| 81 | + [CompletionResult]::new('--blank', 'blank', [CompletionResultType]::ParameterName, 'Create completely new syntax and theme sets (instead of appending to the default sets).') |
| 82 | + [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information') |
| 83 | + [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information') |
| 84 | + [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information') |
| 85 | + [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information') |
| 86 | + break |
| 87 | + } |
| 88 | + }) |
| 89 | + |
| 90 | + $completions.Where{ $_.CompletionText -like "$wordToComplete*" } | |
| 91 | + Sort-Object -Property ListItemText |
| 92 | +} |
0 commit comments