forked from CastroFidel/winehelper
		
	
		
			
				
	
	
		
			113 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| #compdef winehelper
 | ||
| # shellcheck disable=SC2034,SC2206
 | ||
| _winehelper() {
 | ||
|   local -a opts wine_cmd scripts installed prefixes
 | ||
| 
 | ||
|   opts=(
 | ||
|     '--help[Вывести справку]'
 | ||
|     '--version[Показать информацию о пакете и его версии]'
 | ||
|     '--debug[Режим отладки]'
 | ||
|     'install[Запустить скрипт установки программы]'
 | ||
|     'installed[Список установленных программ]'
 | ||
|     '-r[Запуск программы (отладка)]'
 | ||
|     '-i[Запустить скрипт установки программы]'
 | ||
|     'remove-all[Удалить WineHelper и все связанные данные]'
 | ||
|     '--clear-pfx[Очистить префикс \[имя_префикса\]]'
 | ||
|     'killall[Убить все процессы]'
 | ||
|     '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
 | ||
|           ;;
 | ||
|         restore-prefix)
 | ||
|           _files
 | ||
|           ;;
 | ||
|         *)
 | ||
|           _values 'winehelper options' "${opts[@]}" "${wine_cmd[@]}"
 | ||
|           ;;
 | ||
|       esac
 | ||
|       ;;
 | ||
|   esac
 | ||
| }
 | ||
| 
 | ||
| _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
 |