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 |     case $name_type_reg in | ||||||
|         REG_DWORD) |         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") ;; |             name_for_set=$(convert_dec_and_hex --dec "$name_for_set") ;; | ||||||
|         REG_SZ) |         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\"" ;; |             name_for_set="\"$name_for_set\"" ;; | ||||||
|         *) |         *) | ||||||
|             if [[ $name_add_or_del == --delete ]] ; then |             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 |             else | ||||||
|                 print_error "не задан тип ветки реестра: $name_fatal" |                 print_error "не задан тип ветки реестра: $name_fatal" | ||||||
|                 return 1 |                 return 1 | ||||||
| @@ -799,15 +808,15 @@ get_and_set_reg_file () { | |||||||
|             fi |             fi | ||||||
|         fi |         fi | ||||||
|         if [[ $find_check_file == 1 ]] ; then |         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" |             sed -i "${find_number_line}s|$name_for_find.*|$name_for_find$name_for_set|" "$find_file" | ||||||
|         else |         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" |             sed -i "$(( find_line + 1 ))a$name_for_find$name_for_set" "$find_file" | ||||||
|         fi |         fi | ||||||
|     elif [[ $name_add_or_del == --delete ]] ; then |     elif [[ $name_add_or_del == --delete ]] ; then | ||||||
|         [[ $find_check_file != 1 ]] && return 0 |         [[ $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" |         sed -i "${find_number_line}d" "$find_file" | ||||||
|     fi |     fi | ||||||
| } | } | ||||||
| @@ -938,6 +947,43 @@ init_wineprefix () { | |||||||
|         get_and_set_reg_file --delete 'Software\Wine\X11 Driver' 'UseXVidMode' |         get_and_set_reg_file --delete 'Software\Wine\X11 Driver' 'UseXVidMode' | ||||||
|     fi |     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" |     echo "# переменные последнего использования префикса:" > "$WINEPREFIX/last.conf" | ||||||
|     for var in WH_WINE_USE BASE_PFX WINEARCH WH_WINDOWS_VER WINEESYNC WINEFSYNC \ |     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 \ |     STAGING_SHARED_MEMORY WINE_LARGE_ADDRESS_AWARE WH_USE_SHADER_CACHE WH_USE_WINE_DXGI \ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user