diff --git a/README.md b/README.md index e0cd60a..6a13bf1 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ WinApps works by: - The GNU/Linux `/home` directory is accessible within Windows via the `\\tsclient\home` mount. - Integration with `Nautilus`, allowing you to right-click files to open them with specific Windows applications based on the file MIME type. - The [official taskbar widget](https://github.com/winapps-org/WinApps-Launcher) enables seamless administration of the Windows subsystem and offers an easy way to launch Windows applications. +- Microsoft Office links (e.g. ms-word://) from the host system are automatically opened in the Windows subsystem. (Note: You may need to use an [User Agent switcher](https://github.com/ray-lothian/UserAgent-Switcher/) Browser Extension and set the User-Agent to Windows, as as the Office webapps typically hide the "Open in Desktop App" option for Linux users.) ## Supported Applications **WinApps supports *ALL* Windows applications.** diff --git a/apps/ms-office-protocol-handler.desktop b/apps/ms-office-protocol-handler.desktop new file mode 100644 index 0000000..62b23f3 --- /dev/null +++ b/apps/ms-office-protocol-handler.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Microsoft Office Protocol Handler +Comment=Handle Microsoft Office URI schemes via WinApps +Exec=winapps manual %u +Terminal=false +Type=Application +MimeType=x-scheme-handler/ms-word;x-scheme-handler/ms-excel;x-scheme-handler/ms-powerpoint;x-scheme-handler/ms-outlook;x-scheme-handler/ms-access;x-scheme-handler/ms-visio;x-scheme-handler/ms-project;x-scheme-handler/ms-teams;x-scheme-handler/ms-whiteboard;x-scheme-handler/ms-officeapp; +NoDisplay=true +Categories=Office;Utility; diff --git a/setup.sh b/setup.sh index c83860f..35a0399 100755 --- a/setup.sh +++ b/setup.sh @@ -1142,6 +1142,10 @@ function waFindInstalled() { # Extract the name of the application from the absolute path of the folder. APPLICATION="$(basename "$APPLICATION")" + if [[ "$APPLICATION" == "ms-office-protocol-handler.desktop" ]]; then + continue + fi + # Source 'Info' File Containing: # - The Application Name (FULL_NAME) # - The Shortcut Name (NAME) @@ -1326,9 +1330,9 @@ MimeType=${MIME_TYPES}" function waConfigureOfficiallySupported() { # Declare variables. local OSA_LIST=() # Stores a list of all officially supported applications installed on Windows. + local OFFICE_APPS=("access" "access-o365" "access-o365-x86" "access-x86" "adobe-cc" "acrobat9" "acrobat-x-pro" "aftereffects-cc" "audition-cc" "bridge-cc" "bridge-cc-x86" "bridge-cs6" "bridge-cs6-x86" "cmd" "dymo-connect" "excel" "excel-o365" "excel-o365-x86" "excel-x86" "excel-x86-2010" "explorer" "iexplorer" "illustrator-cc" "lightroom-cc" "linqpad8" "mirc" "mspaint" "onenote" "onenote-o365" "onenote-o365-x86" "onenote-x86" "outlook" "outlook-o365" "outlook-o365-x86" "powerpoint" "powerpoint-o365" "powerpoint-o365-x86" "powerpoint-x86" "publisher" "publisher-o365" "publisher-o365-x86" "publisher-x86" "project" "project-x86" "remarkable-desktop" "ssms20" "visual-studio-comm" "visual-studio-ent" "visual-studio-pro" "visio" "visio-x86" "word" "word-o365" "word-o365-x86" "word-x86" "word-x86-2010") # Read the list of officially supported applications that are installed on Windows into an array, returning an empty array if no such files exist. - # This will remove leading and trailing whitespace characters as well as ignore empty lines. readarray -t OSA_LIST < <(grep -v '^[[:space:]]*$' "$INST_FILE_PATH" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' 2>/dev/null || true) # Create application entries for each officially supported application. @@ -1342,6 +1346,19 @@ function waConfigureOfficiallySupported() { # Configure the application. waConfigureApp "$OSA" svg + # Check if the application is an Office app and copy the protocol handler. + if [[ " ${OFFICE_APPS[*]} " == *" $OSA "* ]]; then + # Determine the target directory based on whether the installation is for the system or user. + if [[ "$OPT_SYSTEM" -eq 1 ]]; then + TARGET_DIR="$SYS_APP_PATH" + else + TARGET_DIR="$USER_APP_PATH" + fi + + # Copy the protocol handler to the appropriate directory. + $SUDO cp "./apps/ms-office-protocol-handler.desktop" "$TARGET_DIR/ms-office-protocol-handler.desktop" + fi + # Print feedback. echo -e "${DONE_TEXT}Done!${CLEAR_TEXT}" done @@ -1673,10 +1690,21 @@ function waEnsureOnPath() { # Name: 'waUninstall' # Role: Uninstalls WinApps. function waUninstall() { + # Print feedback. [ "$OPT_SYSTEM" -eq 1 ] && echo -e "${BOLD_TEXT}REMOVING SYSTEM INSTALLATION.${CLEAR_TEXT}" [ "$OPT_USER" -eq 1 ] && echo -e "${BOLD_TEXT}REMOVING USER INSTALLATION.${CLEAR_TEXT}" + # Determine the target directory for the protocol handler based on the installation type. + if [[ "$OPT_SYSTEM" -eq 1 ]]; then + TARGET_DIR="$SYS_APP_PATH" + else + TARGET_DIR="$USER_APP_PATH" + fi + + # Remove the 'ms-office-protocol-handler.desktop' file if it exists. + $SUDO rm -f "$TARGET_DIR/ms-office-protocol-handler.desktop" + # Declare variables. local WINAPPS_DESKTOP_FILES=() # Stores a list of '.desktop' file paths. local WINAPPS_APP_BASH_SCRIPTS=() # Stores a list of bash script paths.