added launch of files in the native application (fnx @minergenon)
This commit is contained in:
		
							
								
								
									
										58
									
								
								winehelper
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								winehelper
									
									
									
									
									
								
							| @@ -744,14 +744,23 @@ get_and_set_reg_file () { | ||||
|  | ||||
|     case $name_type_reg in | ||||
|         REG_DWORD) | ||||
|             name_for_find="\"$name_for_find\"=dword:" | ||||
|             if [[ $name_for_find != '@=' ]] | ||||
|             then name_for_find="\"$name_for_find\"=dword:" | ||||
|             else name_for_find="@=dword:" | ||||
|             fi | ||||
|             name_for_set=$(convert_dec_and_hex --dec "$name_for_set") ;; | ||||
|         REG_SZ) | ||||
|             name_for_find="\"$name_for_find\"=" | ||||
|             if [[ $name_for_find != '@=' ]] | ||||
|             then name_for_find="\"$name_for_find\"=" | ||||
|             else name_for_find="@=" | ||||
|             fi | ||||
|             name_for_set="\"$name_for_set\"" ;; | ||||
|         *) | ||||
|             if [[ $name_add_or_del == --delete ]] ; then | ||||
|                 name_for_find="\"$name_for_find\"" | ||||
|                 if [[ $name_for_find != '@=' ]] | ||||
|                 then name_for_find="\"$name_for_find\"" | ||||
|                 else name_for_find="@=" | ||||
|                 fi | ||||
|             else | ||||
|                 print_error "не задан тип ветки реестра: $name_fatal" | ||||
|                 return 1 | ||||
| @@ -799,15 +808,15 @@ get_and_set_reg_file () { | ||||
|             fi | ||||
|         fi | ||||
|         if [[ $find_check_file == 1 ]] ; then | ||||
|             print_info "Меняем $name_for_find_old в файле реестра" | ||||
|             print_info "Меняем $name_for_find_old в ветке реестра: $name_block" | ||||
|             sed -i "${find_number_line}s|$name_for_find.*|$name_for_find$name_for_set|" "$find_file" | ||||
|         else | ||||
|             print_info "Добавляем $name_for_find_old в файл реестра" | ||||
|             print_info "Добавляем $name_for_find_old в ветку реестра: $name_block" | ||||
|             sed -i "$(( find_line + 1 ))a$name_for_find$name_for_set" "$find_file" | ||||
|         fi | ||||
|     elif [[ $name_add_or_del == --delete ]] ; then | ||||
|         [[ $find_check_file != 1 ]] && return 0 | ||||
|         print_info "Удаляем $name_for_find_old из файла реестра" | ||||
|         print_info "Удаляем $name_for_find_old из ветки реестра: $name_block" | ||||
|         sed -i "${find_number_line}d" "$find_file" | ||||
|     fi | ||||
| } | ||||
| @@ -938,6 +947,43 @@ init_wineprefix () { | ||||
|         get_and_set_reg_file --delete 'Software\Wine\X11 Driver' 'UseXVidMode' | ||||
|     fi | ||||
|  | ||||
|     # добавление ассоциаций файлов для запуска нативного приложения из wine | ||||
|     # пример переменной: WH_XDG_OPEN="txt doc pdf" | ||||
|     check_variables WH_XDG_OPEN "0" | ||||
|     local WRAPPER="${WH_TMP_DIR}/wh-xdg-open.sh" | ||||
|     local XDG_OPEN_REG="Software\Classes\xdg-open\shell\open\command" | ||||
|     if [[ $WH_XDG_OPEN != "0" ]] ; then | ||||
|         # проверяем на наличие запрещённых расширений | ||||
|         local forbidden_extensions="cpl dll exe lnk msi" | ||||
|         for ext in $WH_XDG_OPEN; do | ||||
|             if [[ "$forbidden_extensions" =~ $ext ]] ; then | ||||
|                 fatal "Расширение .$ext запрещено для добавления!" | ||||
|             fi | ||||
|         done | ||||
|  | ||||
|         # создаем скрипт-обёртку | ||||
|         { | ||||
|             echo "#!/usr/bin/env bash" | ||||
|             echo "unix_path=\$(\"$WINELOADER\" winepath -u \"\$*\")" | ||||
|             echo "xdg-open \"\$unix_path\"" | ||||
|         } > "$WRAPPER" | ||||
|         chmod +x "$WRAPPER" | ||||
|  | ||||
|         # добавляем новую команду xdg-open в реестр | ||||
|         get_and_set_reg_file --add "$XDG_OPEN_REG" '@=' 'REG_SZ' "$WRAPPER %1" "system" | ||||
|  | ||||
|         # добавляем ассоциации файлов для запуска с помощью xdg-open | ||||
|         for ext in $WH_XDG_OPEN ; do | ||||
|             get_and_set_reg_file --add "Software\Classes\.$ext" '@=' 'REG_SZ' "xdg-open" "system" | ||||
|         done | ||||
|         print_info "Используется ассоциации с нативными приложениями для файлов: \"$WH_XDG_OPEN\"" | ||||
|     else | ||||
|         # удаление команды xdg-open из реестра | ||||
|         get_and_set_reg_file --delete "$XDG_OPEN_REG" '@=' | ||||
|         # удаяем скрипт-обёртку | ||||
|         try_remove_file "$WRAPPER" | ||||
|     fi | ||||
|  | ||||
|     echo "# переменные последнего использования префикса:" > "$WINEPREFIX/last.conf" | ||||
|     for var in WH_WINE_USE BASE_PFX WINEARCH WH_WINDOWS_VER WINEESYNC WINEFSYNC \ | ||||
|     STAGING_SHARED_MEMORY WINE_LARGE_ADDRESS_AWARE WH_USE_SHADER_CACHE WH_USE_WINE_DXGI \ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user