using namespace System.Management.Automation using namespace System.Management.Automation.Language Register-ArgumentCompleter -Native -CommandName 'rsp' -ScriptBlock { param($wordToComplete, $commandAst, $cursorPosition) $commandElements = $commandAst.CommandElements $command = @( 'rsp' for ($i = 1; $i -lt $commandElements.Count; $i++) { $element = $commandElements[$i] if ($element -isnot [StringConstantExpressionAst] -or $element.StringConstantType -ne [StringConstantType]::BareWord -or $element.Value.StartsWith('-') -or $element.Value -eq $wordToComplete) { break } $element.Value }) -join ';' $completions = @(switch ($command) { 'rsp' { [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('start-daemon', 'start-daemon', [CompletionResultType]::ParameterValue, 'Start the daemon') [CompletionResult]::new('stop-daemon', 'stop-daemon', [CompletionResultType]::ParameterValue, 'Stop the daemon') [CompletionResult]::new('restart', 'restart', [CompletionResultType]::ParameterValue, 'Restart the daemon (kill existing and start new)') [CompletionResult]::new('play', 'play', [CompletionResultType]::ParameterValue, 'Play a track, album, or artist') [CompletionResult]::new('pause', 'pause', [CompletionResultType]::ParameterValue, 'Pause playback') [CompletionResult]::new('resume', 'resume', [CompletionResultType]::ParameterValue, 'Resume playback') [CompletionResult]::new('toggle', 'toggle', [CompletionResultType]::ParameterValue, 'Toggle play/pause') [CompletionResult]::new('stop', 'stop', [CompletionResultType]::ParameterValue, 'Stop playback') [CompletionResult]::new('next', 'next', [CompletionResultType]::ParameterValue, 'Skip to next track') [CompletionResult]::new('previous', 'previous', [CompletionResultType]::ParameterValue, 'Skip to previous track') [CompletionResult]::new('volume', 'volume', [CompletionResultType]::ParameterValue, 'Set volume (0-100)') [CompletionResult]::new('shuffle', 'shuffle', [CompletionResultType]::ParameterValue, 'Shuffle mode') [CompletionResult]::new('queue', 'queue', [CompletionResultType]::ParameterValue, 'Queue management') [CompletionResult]::new('status', 'status', [CompletionResultType]::ParameterValue, 'Show player status') [CompletionResult]::new('scan', 'scan', [CompletionResultType]::ParameterValue, 'Scan music paths to populate database') [CompletionResult]::new('settings', 'settings', [CompletionResultType]::ParameterValue, 'Settings management') [CompletionResult]::new('completions', 'completions', [CompletionResultType]::ParameterValue, 'Generate shell completions (developer only)') [CompletionResult]::new('help', 'help', [CompletionResultType]::ParameterValue, 'Print this message or the help of the given subcommand(s)') break } 'rsp;start-daemon' { [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') break } 'rsp;stop-daemon' { [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') break } 'rsp;restart' { [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') break } 'rsp;play' { [CompletionResult]::new('-i', '-i', [CompletionResultType]::ParameterName, 'Add after current track and skip to it') [CompletionResult]::new('--now', '--now', [CompletionResultType]::ParameterName, 'Add after current track and skip to it') [CompletionResult]::new('-n', '-n', [CompletionResultType]::ParameterName, 'Add to queue after current track (don''t skip)') [CompletionResult]::new('--next', '--next', [CompletionResultType]::ParameterName, 'Add to queue after current track (don''t skip)') [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') break } 'rsp;pause' { [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') break } 'rsp;resume' { [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') break } 'rsp;toggle' { [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') break } 'rsp;stop' { [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') break } 'rsp;next' { [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') break } 'rsp;previous' { [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') break } 'rsp;volume' { [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') break } 'rsp;shuffle' { [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') break } 'rsp;queue' { [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') break } 'rsp;status' { [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') break } 'rsp;scan' { [CompletionResult]::new('--paths', '--paths', [CompletionResultType]::ParameterName, 'paths') [CompletionResult]::new('--force', '--force', [CompletionResultType]::ParameterName, 'force') [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') break } 'rsp;settings' { [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('get', 'get', [CompletionResultType]::ParameterValue, 'Get a setting value') [CompletionResult]::new('set', 'set', [CompletionResultType]::ParameterValue, 'Set a setting value') [CompletionResult]::new('list', 'list', [CompletionResultType]::ParameterValue, 'List all settings') [CompletionResult]::new('unset', 'unset', [CompletionResultType]::ParameterValue, 'Unset a setting') [CompletionResult]::new('help', 'help', [CompletionResultType]::ParameterValue, 'Print this message or the help of the given subcommand(s)') break } 'rsp;settings;get' { [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') break } 'rsp;settings;set' { [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') break } 'rsp;settings;list' { [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') break } 'rsp;settings;unset' { [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') break } 'rsp;settings;help' { [CompletionResult]::new('get', 'get', [CompletionResultType]::ParameterValue, 'Get a setting value') [CompletionResult]::new('set', 'set', [CompletionResultType]::ParameterValue, 'Set a setting value') [CompletionResult]::new('list', 'list', [CompletionResultType]::ParameterValue, 'List all settings') [CompletionResult]::new('unset', 'unset', [CompletionResultType]::ParameterValue, 'Unset a setting') [CompletionResult]::new('help', 'help', [CompletionResultType]::ParameterValue, 'Print this message or the help of the given subcommand(s)') break } 'rsp;settings;help;get' { break } 'rsp;settings;help;set' { break } 'rsp;settings;help;list' { break } 'rsp;settings;help;unset' { break } 'rsp;settings;help;help' { break } 'rsp;completions' { [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') break } 'rsp;help' { [CompletionResult]::new('start-daemon', 'start-daemon', [CompletionResultType]::ParameterValue, 'Start the daemon') [CompletionResult]::new('stop-daemon', 'stop-daemon', [CompletionResultType]::ParameterValue, 'Stop the daemon') [CompletionResult]::new('restart', 'restart', [CompletionResultType]::ParameterValue, 'Restart the daemon (kill existing and start new)') [CompletionResult]::new('play', 'play', [CompletionResultType]::ParameterValue, 'Play a track, album, or artist') [CompletionResult]::new('pause', 'pause', [CompletionResultType]::ParameterValue, 'Pause playback') [CompletionResult]::new('resume', 'resume', [CompletionResultType]::ParameterValue, 'Resume playback') [CompletionResult]::new('toggle', 'toggle', [CompletionResultType]::ParameterValue, 'Toggle play/pause') [CompletionResult]::new('stop', 'stop', [CompletionResultType]::ParameterValue, 'Stop playback') [CompletionResult]::new('next', 'next', [CompletionResultType]::ParameterValue, 'Skip to next track') [CompletionResult]::new('previous', 'previous', [CompletionResultType]::ParameterValue, 'Skip to previous track') [CompletionResult]::new('volume', 'volume', [CompletionResultType]::ParameterValue, 'Set volume (0-100)') [CompletionResult]::new('shuffle', 'shuffle', [CompletionResultType]::ParameterValue, 'Shuffle mode') [CompletionResult]::new('queue', 'queue', [CompletionResultType]::ParameterValue, 'Queue management') [CompletionResult]::new('status', 'status', [CompletionResultType]::ParameterValue, 'Show player status') [CompletionResult]::new('scan', 'scan', [CompletionResultType]::ParameterValue, 'Scan music paths to populate database') [CompletionResult]::new('settings', 'settings', [CompletionResultType]::ParameterValue, 'Settings management') [CompletionResult]::new('completions', 'completions', [CompletionResultType]::ParameterValue, 'Generate shell completions (developer only)') [CompletionResult]::new('help', 'help', [CompletionResultType]::ParameterValue, 'Print this message or the help of the given subcommand(s)') break } 'rsp;help;start-daemon' { break } 'rsp;help;stop-daemon' { break } 'rsp;help;restart' { break } 'rsp;help;play' { break } 'rsp;help;pause' { break } 'rsp;help;resume' { break } 'rsp;help;toggle' { break } 'rsp;help;stop' { break } 'rsp;help;next' { break } 'rsp;help;previous' { break } 'rsp;help;volume' { break } 'rsp;help;shuffle' { break } 'rsp;help;queue' { break } 'rsp;help;status' { break } 'rsp;help;scan' { break } 'rsp;help;settings' { [CompletionResult]::new('get', 'get', [CompletionResultType]::ParameterValue, 'Get a setting value') [CompletionResult]::new('set', 'set', [CompletionResultType]::ParameterValue, 'Set a setting value') [CompletionResult]::new('list', 'list', [CompletionResultType]::ParameterValue, 'List all settings') [CompletionResult]::new('unset', 'unset', [CompletionResultType]::ParameterValue, 'Unset a setting') break } 'rsp;help;settings;get' { break } 'rsp;help;settings;set' { break } 'rsp;help;settings;list' { break } 'rsp;help;settings;unset' { break } 'rsp;help;completions' { break } 'rsp;help;help' { break } }) $completions.Where{ $_.CompletionText -like "$wordToComplete*" } | Sort-Object -Property ListItemText }