Update completions for: wine (#10789)

* feat(function): move cmd completion function to a separate file

* feat(completion): support wine cmd subcommand

* feat(completion): support wine control subcommand

* feat(completion): support wine eject subcommand

* feat(completion): support wine explorer subcommand

* feat(completion): support wine explorer subcommand for desktops

* feat(completion): support wine start subcommand

* feat(completion): support wine winemenubuilder subcommand

* feat(completion): support wine winepath subcommand

* fix(function): rename function for cmd argument completion

* feat(function): implement function to complete registry keys

* feat(completion): support wine regedit subcommand

* feat(function): add top-level key descriptions

* fix(completion): remove redundant comment

* feat(completion): support wine msiexec subcommand

* refactor(completion): group code into functions

* feat(completion): enhance subcommand descriptions
This commit is contained in:
Unbelievable Mystery 2024-11-18 01:58:21 +03:00 committed by GitHub
parent 93aa5a9376
commit 262e2d5fe6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 458 additions and 36 deletions

View File

@ -1,37 +1,4 @@
function __cmd_complete_args -d 'Function to generate args'
set -l current_token (commandline -tc)
switch $current_token
case '/t:*'
echo -e '0\tBlack
1\tBlue
2\tGreen
3\tAqua
4\tRed
5\tPurple
6\tYellow
7\tWhite
8\tGray
9\tLight blue
A\tLight green
B\tLight aqua
C\tLight red
D\tLight purple
E\tLight yellow
F\tBright white' | awk -F '\t' "{ printf \"$current_token%s\t%s\n\", \$1, \$2 }"
case '/e:*'
echo -e 'on\tEnable command extensions
off\tDisable command extensions' | awk -F '\t' "{ printf \"$current_token%s\t%s\n\", \$1, \$2 }"
case '/f:*'
echo -e 'on\tEnable file and directory name completion
off\tDisable file and directory name completion' | awk -F '\t' "{ printf \"$current_token%s\t%s\n\", \$1, \$2 }"
case '/v:*'
echo -e 'on\tEnable delayed environment variable expansion
off\tDisable delayed environment variable expansion' | awk -F '\t' "{ printf \"$current_token%s\t%s\n\", \$1, \$2 }"
end
end
complete -c cmd -f -a '(__cmd_complete_args)'
complete -c cmd -f -a '(__fish_cmd__complete_args)'
complete -c cmd -f -n 'not __fish_seen_argument -w c -w k' -a /c \
-d 'Carry out the command specified by string and then stop'

View File

@ -1,2 +1,395 @@
complete -c wine -l help -d 'Show help and exit'
complete -c wine -l version -d 'Show version and exit'
function __fish_wine_explorer__complete_desktop_arg
set -l current_token (commandline -tc)
switch "$current_token"
case '/desktop=*x*'
return
case '/desktop=*'
printf '%sx' "$current_token"
end
end
function __fish_msiexec__option_completion_condition
set -l token (commandline -oc)[3]
not string match --quiet --regex '^/(uninstall|[ipyz])$|^/[fjql]' -- "$token"
end
function __fish_msiexec_complete_option_arg
set -l current_token (commandline -tc)
switch "$current_token"
case '/f*'
set values 'p\tReinstall the file if it is missing' \
'o\tReinstall the file if it is missing or if any older version is installed' \
'e\tReinstall the file if it is missing, or if the installed version is equal or older' \
'd\tReinstall the file if it is missing or a different version is installed' \
'c\tReinstall the file if it is missing or the checksum does not match' \
'a\tReinstall all files' \
'u\tRewrite all required user registry entries' \
'm\tRewrite all required machine registry entries' \
's\tOverwrite any conflicting shortcuts' \
'v\tRecache the local installation package from the source installation package'
case '/q*'
set values 'n\tDisable UI' \
'b\tShow the basic UI' \
'r\tShow the reduced UI' \
'f\tShow the full UI'
case '/l*'
set values '*\tEnable all options except v and x' \
'i\tEnable status messages' \
'w\tEnable warning messages' \
'e\tEnable error messages' \
'a\tEnable messages for action startups' \
'r\tEnable messages for action records' \
'u\tEnable messages for user requests' \
'c\tEnable messages for initial UI parameters' \
'm\tEnable messages for out of memory errors' \
'o\tEnable messages for out of disk space errors' \
'p\tEnable messages for terminal properties' \
'v\tEnable verbose messages' \
'x\tEnable messages for debugging' \
'+\tAppend messages to a file' \
'!\tFlush each line of messages'
end
for value in $values
echo -e "$current_token$value"
end
end
function __fish_wine__complete_cmd_subcommand --argument-names command
set -l condition '__fish_seen_subcommand_from cmd'
complete -c $command -a '(__fish_cmd__complete_args)' -n $condition
set -l c_and_k_condition 'not __fish_seen_argument -w c -w k'
complete -c $command -a /c \
-d 'Run the command and stop' \
-n "$condition && $c_and_k_condition"
complete -c $command -a /k \
-d 'Run the command and continue' \
-n "$condition && $c_and_k_condition"
complete -c $command -a /s \
-d 'Modify the treatment of string after /c or /k' \
-n $condition
complete -c $command -a /q -d 'Turn echo off' -n $condition
complete -c $command -a /d \
-d 'Disable execution of AutoRun commands' \
-n $condition
set -l a_and_u_condition 'not __fish_seen_argument -w a -w u'
complete -c $command -a /a \
-d 'Format internal command output as ANSI' \
-n "$condition && $a_and_u_condition"
complete -c $command -a /u \
-d 'Format internal command output as Unicode' \
-n "$condition && $a_and_u_condition"
complete -c $command -a /t \
-d 'Set the background and foreground color' \
-n $condition
complete -c $command -a /e -d 'Manage command extensions' -n $condition
complete -c $command -a /f \
-d 'Manage file and directory name completion' \
-n $condition
complete -c $command -a /v \
-d 'Manage delayed environment variable expansion' \
-n $condition
complete -c $command -a '/?' -d 'Show help' -n $condition
end
function __fish_wine__complete_control_subcommand --argument-names command
set -l condition '__fish_seen_subcommand_from control'
complete -c $command \
-a 'COLOR DATE/TIME DESKTOP INTERNATIONAL KEYBOARD MOUSE PORTS PRINTERS' \
-n $condition
end
function __fish_wine__complete_eject_subcommand --argument-names command
set -l condition '__fish_seen_subcommand_from eject'
complete -c $command -s h -d 'Show help' -n $condition
complete -c $command -s a -d 'Eject all the CD drives' -n $condition
complete -c $command -s u -d 'Unmount the CD drives' -n $condition
end
function __fish_wine__complete_explorer_subcommand --argument-names command
set -l condition '__fish_seen_subcommand_from explorer'
complete -c $command -a '(__fish_wine_explorer__complete_desktop_arg)' \
-n $condition
complete -c $command -a /n -d 'Use the single pain view' -n $condition
complete -c $command -a /e, -d 'Use the default view' -n $condition
complete -c $command -a /root, -d 'Specify the root level of a view' \
-n $condition
complete -c $command -a /select, -d 'Specify the selection in a view' \
-n $condition
complete -c $command -a /desktop= -d 'Specify the desktop name' \
-n $condition
end
function __fish_wine__complete_msiexec_subcommand --argument-names command
set -l condition '__fish_seen_subcommand_from msiexec'
complete -c $command -a '/? /h' -d 'Show help' -n $condition
complete -c $command -a '(__fish_msiexec_complete_option_arg)' \
-n $condition
complete -c $command -a /i \
-d 'Install the software' \
-n "$condition && __fish_msiexec__option_completion_condition"
set -l a_condition '__fish_seen_argument -w i -w p'
complete -c $command -a /a \
-d 'Use the administrator network' \
-n "$condition && $a_condition"
complete -c $command -a /f \
-d 'Repair the installation of software' \
-n "$condition && __fish_msiexec__option_completion_condition"
complete -c $command -a /uninstall \
-d 'Uninstall the software' \
-n "$condition && __fish_msiexec__option_completion_condition"
complete -c $command -a /j \
-d 'Advertise the software' \
-n "$condition && __fish_msiexec__option_completion_condition"
complete -c $command -a /p \
-d 'Apply the patch to software' \
-n "$condition && __fish_msiexec__option_completion_condition"
complete -c $command -a /q \
-d 'Change the UI while installing software' \
-n "$condition && __fish_msiexec__option_completion_condition"
complete -c $command -a /l \
-d 'Change the logging' \
-n "$condition && __fish_msiexec__option_completion_condition"
complete -c $command -a /y \
-d 'Register the MSI service' \
-n "$condition && __fish_msiexec__option_completion_condition"
complete -c $command -a /z \
-d 'Register the MSI service' \
-n "$condition && __fish_msiexec__option_completion_condition"
end
function __fish_wine__complete_regedit_subcommand --argument-names command
set -l condition '__fish_seen_subcommand_from regedit'
complete -c $command -a '/?' -d 'Show help' -n $condition
complete -c $command -a /L \
-d 'Specify the location of system.dat file' \
-n $condition
complete -c $command -a /R \
-d 'Specify the location of user.dat file' \
-n $condition
complete -c $command -a /C \
-d 'Import contents of a registry file' \
-n $condition
complete -c $command -a /D \
-d 'Delete a registry key' \
-n $condition
complete -c $command -a /E \
-d 'Export contents to a registry file' \
-n $condition
complete -c $command -a /S \
-d 'Do not display messages' \
-n $condition
complete -c $command -a /V \
-d 'Launch the GUI in an advanced mode' \
-n $condition
complete -c $command -a '(__fish_reg__complete_keys)' \
-n $condition
end
function __fish_wine__complete_start_subcommand --argument-names command
set -l condition '__fish_seen_subcommand_from start'
complete -c $command -a '/?' -d 'Show help' -n $condition
complete -c $command -a /d \
-d 'Specify the directory for a program' \
-n $condition
complete -c $command -a /b \
-d "Don't create the new console for a progra" \
-n $condition
complete -c $command -a /i \
-d 'Clear the environment for a program' \
-n $condition
complete -c $command -a /min \
-d 'Start a program in the minimized window' \
-n $condition
complete -c $command -a /max \
-d 'Start a program in the minimized window' \
-n $condition
complete -c $command -a /low \
-d 'Start a program in the idle priority class' \
-n $condition
complete -c $command -a /normal \
-d 'Start a program in the normal priority class' \
-n $condition
complete -c $command -a /high \
-d 'Start a program in the high priority class' \
-n $condition
complete -c $command -a /realtime \
-d 'Start a program in the realtime priority class' \
-n $condition
complete -c $command -a /abovenormal \
-d 'Start a program in the abovenormal priority class' \
-n $condition
complete -c $command -a /belownormal \
-d 'Start a program in the belownormal priority class' \
-n $condition
complete -c $command -a /node \
-d 'Specify the NUMA node for a program' \
-n $condition
complete -c $command -a /affinity \
-d 'Specify the affinity mask for a program' \
-n $condition
complete -c $command -a /wait \
-d 'Wait for a program to exit' \
-n $condition
complete -c $command -a /unix \
-d 'Use the Unix filename for a program' \
-n $condition
end
function __fish_wine__complete_winemenubuilder_subcommand --argument-names command
complete -c $command -a /w \
-d 'Wait till the shortcut can be created' \
-n '__fish_seen_subcommand_from winemenubuilder'
end
function __fish_wine__complete_winepath_subcommand --argument-names command
set -l condition '__fish_seen_subcommand_from winepath'
complete -c $command -s h -d 'Show help' -n $condition
complete -c $command -s v -d 'Show version' -n $condition
complete -c $command -s u -l unix \
-d 'Convert a Windows path to the Unix one' \
-n $condition
complete -c $command -s w -l windows \
-d 'Convert a Unix path to the Windows one' \
-n $condition
complete -c $command -s l -l long \
-d 'Convert a Windows path to the long format' \
-n $condition
complete -c $command -s s -l short \
-d 'Convert a Windows path to the short format' \
-n $condition
end
set -l command wine
complete -c $command -f
complete -c $command -l help -d 'Show help'
complete -c $command -l version -d 'Show version'
set -l subcommands_with_descriptions 'cacls\t"Edit ACLs"' \
'clock\t"Open the clock"' \
'cmd\t"Open the command prompt"' \
'cmdlgtst\t"commdlg.dll test jig"' \
'control\t"Open control panel"' \
'eject\t"Eject optical discs"' \
'expand\t"Expand cabinet files"' \
'explorer\t"Open Explorer"' \
'hh\t"Open HTML help"' \
'icinfo\t"List installed video compressors"' \
'iexplore\t"Open Internet Explorer"' \
'lodctr\t"Load performance monitor counters"' \
'msiexec\t"Open an installer for .msi files"' \
'net\t"Manage services"' \
'notepad\t"Notepad, a simple text editor"' \
'oleview\t"Browse and explore COM objects as well as configure DCOM"' \
'progman\t"Open Program manager"' \
'reg\t"Edit registry though command line"' \
'regedit\t"Edit registry"' \
'regsvr32\t"Register OLE components in the registry"' \
'rpcss\t"Open rpcss.exe"' \
'rundll32\t"Load a DLL and run an entry point"' \
'secedit\t"Edit security configuration"' \
'services\t"Manages services"' \
'spoolsv\t"Print documents"' \
'start\t"Start a program or open a file in the program"' \
'svchost\t"Host process for services"' \
'taskmgr\t"Open Task Manager"' \
'uninstaller\t"Uninstall a program"' \
'unlodctr\t"Unload performance monitor counters"' \
'view\t"View metafiles"' \
'wineboot\t"Reboot Wine"' \
'winebrowser\t"Launch native OS browser or mail client"' \
'winecfg\t"Configure wine through a GUI"' \
'wineconsole\t"Open Windows console"' \
'winedbg\t"Open debugger core"' \
'winedevice\t"Manages devices"' \
'winefile\t"Open file explorer"' \
'winemenubuilder\t"Build Unix menu entries"' \
'winemine\t"classic minesweeper game"' \
'winepath\t"Translate between Windows and Unix paths formats"' \
'winetest\t"Run DLL conformance test programs"' \
'winevdm\t"Open DOS"' \
'winhelp\t"Open help"' \
'winhlp32\t"HOpen help"' \
'winver\t"Show about information"' \
'wordpad\t"Open WordPad"' \
'write\t"Open WordPad"' \
'xcopy\t"Run xcopy"'
set -l subcommands (string replace --regex '\\\t.+' '' -- $subcommands_with_descriptions)
set -l root_condition "not __fish_seen_subcommand_from $subcommands"
complete -c $command -a "$subcommands_with_descriptions" -n $root_condition
__fish_wine__complete_cmd_subcommand $command
__fish_wine__complete_control_subcommand $command
__fish_wine__complete_eject_subcommand $command
__fish_wine__complete_explorer_subcommand $command
__fish_wine__complete_msiexec_subcommand $command
__fish_wine__complete_regedit_subcommand $command
__fish_wine__complete_start_subcommand $command
__fish_wine__complete_winemenubuilder_subcommand $command
__fish_wine__complete_winepath_subcommand $command

View File

@ -0,0 +1,32 @@
function __fish_cmd__complete_args -d 'Function to generate args'
set -l current_token (commandline -tc)
switch $current_token
case '/t:*'
echo -e '0\tBlack
1\tBlue
2\tGreen
3\tAqua
4\tRed
5\tPurple
6\tYellow
7\tWhite
8\tGray
9\tLight blue
A\tLight green
B\tLight aqua
C\tLight red
D\tLight purple
E\tLight yellow
F\tBright white' | awk -F '\t' "{ printf \"$current_token%s\t%s\n\", \$1, \$2 }"
case '/e:*'
echo -e 'on\tEnable command extensions
off\tDisable command extensions' | awk -F '\t' "{ printf \"$current_token%s\t%s\n\", \$1, \$2 }"
case '/f:*'
echo -e 'on\tEnable file and directory name completion
off\tDisable file and directory name completion' | awk -F '\t' "{ printf \"$current_token%s\t%s\n\", \$1, \$2 }"
case '/v:*'
echo -e 'on\tEnable delayed environment variable expansion
off\tDisable delayed environment variable expansion' | awk -F '\t' "{ printf \"$current_token%s\t%s\n\", \$1, \$2 }"
end
end

View File

@ -0,0 +1,30 @@
function __fish_reg__complete_keys
set -l current_token (commandline -tc | string unescape)
set -l default_keys 'HKEY_CLASSES_ROOT\tThe information about file extension associations' \
'HKEY_CURRENT_USER\tThe information about a current user' \
'HKEY_LOCAL_MACHINE\tThe information about a current machine' \
'HKEY_USERS\tThe information about loaded users' \
'HKEY_CURRENT_CONFIG\tThe information about hardware used while startup' \
HKEY_DYN_DATA
if string match --quiet --entire --regex '\\\\' -- "$current_token"
set current_token (string replace --regex '\\\\[^\\\\]*$' '' -- "$current_token")
set -l keys (WINEDEBUG=-all wine reg query "$current_token" |
string replace --regex '\r' '' |
string match --entire --regex '\w')
test $pipestatus[1] != 0 && return
string join \n -- $keys |
string match --invert "$current_token" |
string replace --all --regex '[\\\\]+' '\\\\'
else
for key in $default_keys
echo -e $key
end
end
end
complete -c true -a '(__fish_reg__complete_keys)'