forked from CastroFidel/winehelper
134 lines
3.7 KiB
Plaintext
134 lines
3.7 KiB
Plaintext
#compdef winehelper
|
||
# shellcheck disable=SC2034,SC2206
|
||
_winehelper() {
|
||
local -a opts wine_cmd scripts installed prefixes
|
||
|
||
opts=(
|
||
'--help[Вывести справку]'
|
||
'--version[Показать информацию о пакете и его версии]'
|
||
'--debug[Режим отладки]'
|
||
'install[Запустить скрипт установки программы]'
|
||
'install-dxvk[Установить/удалить DXVK]'
|
||
'install-vkd3d[Установить/удалить VKD3D]'
|
||
'installed[Список установленных программ]'
|
||
'-r[Запуск программы (отладка)]'
|
||
'-i[Запустить скрипт установки программы]'
|
||
'remove-all[Удалить WineHelper и все связанные данные]'
|
||
'--clear-pfx[Очистить префикс \[имя_префикса\]]'
|
||
'killall[Убить все процессы]'
|
||
'create-prefix[Создать новый префикс]'
|
||
'remove-prefix[Удалить префикс и все связанные данные]'
|
||
'backup-prefix[Создать резерную копию префикса]'
|
||
'restore-prefix[восстановить префикс из резервной копии "путь/до/whpack"]'
|
||
)
|
||
|
||
wine_cmd=(
|
||
winecfg
|
||
winereg
|
||
winefile
|
||
wineconsole
|
||
winetricks
|
||
desktop
|
||
regedit
|
||
explorer
|
||
cmd
|
||
'run[Запуск программы (отладка)]'
|
||
)
|
||
|
||
local context state line
|
||
_arguments -C \
|
||
'1:command:->cmds' \
|
||
'2:subcommand or argument:->args'
|
||
|
||
case $state in
|
||
cmds)
|
||
_values 'winehelper options' "${opts[@]}" "${wine_cmd[@]}"
|
||
;;
|
||
args)
|
||
case $words[2] in
|
||
--debug)
|
||
_values 'wine commands' "${wine_cmd[@]}"
|
||
;;
|
||
install|-i)
|
||
_get_list_for_install
|
||
;;
|
||
run|installed)
|
||
_get_installed_list
|
||
;;
|
||
remove-prefix|backup-prefix)
|
||
_get_prefixes
|
||
;;
|
||
create-prefix)
|
||
;;
|
||
restore-prefix)
|
||
_files
|
||
;;
|
||
install-dxvk)
|
||
_get_component_versions 'install-dxvk'
|
||
;;
|
||
install-vkd3d)
|
||
_get_component_versions 'install-vkd3d'
|
||
;;
|
||
*)
|
||
_values 'winehelper options' "${opts[@]}" "${wine_cmd[@]}"
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
}
|
||
|
||
_get_component_versions () {
|
||
local component_command=$1
|
||
local -a versions
|
||
|
||
versions=( ${(f)"$(winehelper "${component_command}" list 2>/dev/null | grep ' - ' | sed 's/ - //')" } )
|
||
versions+=(none list)
|
||
|
||
_values 'versions' "${versions[@]}"
|
||
}
|
||
|
||
_get_prefixes () {
|
||
prefixes=( ${(f)"$(ls -1 ~/.local/share/winehelper/prefixes 2>/dev/null)"} )
|
||
|
||
if ((! ${#prefixes[@]} == 0 )); then
|
||
_values 'prefixes' "${prefixes[@]}"
|
||
fi
|
||
}
|
||
|
||
_get_list_for_install () {
|
||
|
||
packages=(${(f)"$(winehelper install list 2>/dev/null |
|
||
awk -F ' - ' '
|
||
/^[^ ]+ - \("/ {next}
|
||
/^[[:space:]]*$/ {next}
|
||
/^Информация:/ {next}
|
||
/^[^ ]+ - / {
|
||
name=$1;
|
||
desc=$2;
|
||
gsub(/^[[:space:]]+|[[:space:]]+$/, "", name);
|
||
gsub(/^[[:space:]]*"?|"?[[:space:]]*$/, "", desc);
|
||
if (name && desc) print name ":" desc
|
||
}
|
||
')"})
|
||
|
||
packages+=(
|
||
scadoffice:"SCAD Office"
|
||
t-flex-cad17-applications:"Приложения для T-FLEX CAD 17"
|
||
t-flex-cad17-resources:"Обучающие материалы T-FLEX CAD 17"
|
||
)
|
||
|
||
_describe 'packages' packages
|
||
}
|
||
|
||
_get_installed_list () {
|
||
installed=(
|
||
${(f)"$(ls -1 ~/.local/share/winehelper/ | grep ".desktop" | sed 's/.desktop//')"}
|
||
)
|
||
|
||
if ((! ${#installed[@]} == 0 )); then
|
||
_values 'installed apps' "${installed[@]}"
|
||
fi
|
||
}
|
||
|
||
compdef _winehelper winehelper
|