diff --git a/auto_completion/bash_completion/winehelper b/auto_completion/bash_completion/winehelper index 0c78907..83c8109 100644 --- a/auto_completion/bash_completion/winehelper +++ b/auto_completion/bash_completion/winehelper @@ -4,7 +4,7 @@ _winehelper_completions() { COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" - opts="--help --version --debug install installed -r -i remove-all --clear-pfx killall remove-prefix backup-prefix restore-prefix --changelog changelog" + opts="--help --version --debug install installed -r -i remove-all --clear-pfx killall remove-prefix backup-prefix restore-prefix create-prefix --changelog changelog" wine_cmd="winecfg winereg winefile wineconsole winetricks desktop regedit explorer cmd run" case "${prev}" in diff --git a/auto_completion/zsh_completion/_winehelper b/auto_completion/zsh_completion/_winehelper index f094e47..fc12c01 100644 --- a/auto_completion/zsh_completion/_winehelper +++ b/auto_completion/zsh_completion/_winehelper @@ -14,6 +14,7 @@ _winehelper() { 'remove-all[Удалить WineHelper и все связанные данные]' '--clear-pfx[Очистить префикс \[имя_префикса\]]' 'killall[Убить все процессы]' + 'create-prefix[Создать новый префикс]' 'remove-prefix[Удалить префикс и все связанные данные]' 'backup-prefix[Создать резерную копию префикса]' 'restore-prefix[восстановить префикс из резервной копии "путь/до/whpack"]' @@ -55,6 +56,8 @@ _winehelper() { remove-prefix|backup-prefix) _get_prefixes ;; + create-prefix) + ;; restore-prefix) _files ;; diff --git a/winehelper b/winehelper index 8cf7d98..970c776 100755 --- a/winehelper +++ b/winehelper @@ -1465,6 +1465,76 @@ remove_prefix() { fi } +create_prefix() { + print_info "Существующие префиксы:" + local prefixes=() + for prefix in "$WH_PREFIXES_DIR"/*; do + if [[ -d "$prefix" ]] ; then + prefixes+=("$(basename "$prefix")") + echo " - $(basename "$prefix")" + fi + done + + if [[ ${#prefixes[@]} -eq 0 ]]; then + print_info "Нет существующих префиксов." + fi + echo + + read -p "Введите имя для нового префикса или 0 для отмены (по умолчанию: default): " prefix_name + if [[ "$prefix_name" == "0" ]] ; then + print_info "Создание префикса отменено." + exit 0 + fi + + prefix_name=${prefix_name:-default} + + if [[ ! "$prefix_name" =~ ^[a-zA-Z0-9_.-]+$ ]] ; then + fatal "Имя префикса может содержать только латинские буквы, цифры, точки, дефисы и подчеркивания" + fi + + if [[ -d "$WH_PREFIXES_DIR/$prefix_name" ]] ; then + fatal "Префикс с именем '$prefix_name' уже существует. Создание отменено." + fi + + print_info "Создается префикс с именем: \"$prefix_name\"" + + print_info "Выберите разрядность префикса:" + echo " 0) Отмена создания префикса" + echo " 1) 32-bit" + echo " 2) 64-bit" + echo + local arch_choice + read -p "Ваш выбор [0-2] (по умолчанию 1): " arch_choice + case "${arch_choice:-1}" in + 0) print_info "Создание префикса отменено." ; exit 0 ;; + 1) export WINEARCH="win32" ;; + 2) export WINEARCH="win64" ;; + *) fatal "Неверный выбор. Операция отменена." ;; + esac + + print_info "Выберите тип создаваемого префикса:" + echo " 0) Отмена создания префикса" + echo " 1) С рекомендуемыми библиотеками (по умолчанию)" + echo " 2) Чистый префикс (без библиотек)" + echo + local pfx_type_choice + read -p "Ваш выбор [0-2] (по умолчанию 1): " pfx_type_choice + case "${pfx_type_choice:-1}" in + 0) print_info "Создание префикса отменено." ; exit 0 ;; + 1) ;; # Оставляем BASE_PFX пустым, чтобы init_wineprefix использовал значение по умолчанию + 2) export BASE_PFX="none" ;; + *) fatal "Неверный выбор. Операция отменена." ;; + esac + + export WINEPREFIX="$WH_PREFIXES_DIR/$prefix_name" + + if ! init_wine_ver || ! init_wineprefix; then + fatal "Ошибка инициализации префикса." + fi + + print_ok "Префикс '$prefix_name' (${WINEARCH}) успешно создан." +} + remove_winehelper () { local answer if [[ $1 =~ --force|-y ]] ; then @@ -1748,6 +1818,7 @@ wh_info () { installed список установленных программ run [программа] запуск программы (отладка) remove-all удалить WineHelper и все связанные данные + create-prefix создать префикс remove-prefix [имя_префикса] удалить префикс и все связанные данные backup-prefix [имя_префикса] создать резервную копию префикса restore-prefix \"путь/до/whpack\" восстановить префикс из резервной копии @@ -1796,6 +1867,7 @@ case "$arg1" in backup-prefix) backup_prefix "$@" ;; restore-prefix) restore_prefix "$@" ;; remove-all) remove_winehelper "$@" ;; + create-prefix) create_prefix "$@" ;; remove-prefix) remove_prefix "$@" ;; create-base-pfx) create_base_pfx "$@" ;; *)