Rex Dieter 82f4a46
From 316b9adc05c6d871360afb1195939c5fc975ccff Mon Sep 17 00:00:00 2001
Rex Dieter 82f4a46
From: Till Maas <opensource@till.name>
Rex Dieter 82f4a46
Date: Wed, 26 Feb 2014 15:26:59 +0100
Rex Dieter 9d08954
Subject: [PATCH 09/22] xdg-open: Expand %i and %c from Exec
Rex Dieter 82f4a46
Rex Dieter 82f4a46
---
Rex Dieter 82f4a46
 scripts/xdg-open.in | 29 ++++++++++++++++++++++++++---
Rex Dieter 82f4a46
 1 file changed, 26 insertions(+), 3 deletions(-)
Rex Dieter 82f4a46
Rex Dieter 82f4a46
diff --git a/scripts/xdg-open.in b/scripts/xdg-open.in
Rex Dieter 82f4a46
index 1f768d8..e7a15a9 100644
Rex Dieter 82f4a46
--- a/scripts/xdg-open.in
Rex Dieter 82f4a46
+++ b/scripts/xdg-open.in
Rex Dieter 82f4a46
@@ -36,6 +36,17 @@ last_word()
Rex Dieter 82f4a46
     echo "$rest"
Rex Dieter 82f4a46
 }
Rex Dieter 82f4a46
 
Rex Dieter 82f4a46
+# Get the value of a key in a .desktop file.
Rex Dieter 82f4a46
+# Example: Use get_key foo.desktop Exec
Rex Dieter 82f4a46
+# to get the values of the Exec= key
Rex Dieter 82f4a46
+get_key()
Rex Dieter 82f4a46
+{
Rex Dieter 82f4a46
+    local file="${1}"
Rex Dieter 82f4a46
+    local key="${2}"
Rex Dieter 82f4a46
+
Rex Dieter 82f4a46
+    grep -E "^${key}=" "${file}" | cut -d= -f 2-
Rex Dieter 82f4a46
+}
Rex Dieter 82f4a46
+
Rex Dieter 82f4a46
 open_darwin()
Rex Dieter 82f4a46
 {
Rex Dieter 82f4a46
     open "$1"
Rex Dieter 82f4a46
@@ -137,11 +148,23 @@ search_desktop_file()
Rex Dieter 82f4a46
     fi
Rex Dieter 82f4a46
 
Rex Dieter 82f4a46
     if [ -r "$file" ] ; then
Rex Dieter 82f4a46
-        command="`grep -E "^Exec(\[[^]=]*])?=" "$file" | cut -d= -f 2- | first_word`"
Rex Dieter 82f4a46
+        command="$(get_key "${file}" "Exec" | first_word)"
Rex Dieter 82f4a46
         command_exec=`which $command 2>/dev/null`
Rex Dieter 82f4a46
-        arguments="`grep -E "^Exec(\[[^]=]*])?=" "$file" | cut -d= -f 2- | last_word`"
Rex Dieter 82f4a46
+        arguments="$(get_key "${file}" "Exec" | last_word)"
Rex Dieter 82f4a46
         arg_one="`echo "$arg" | sed 's/[&*\\]/\\\\&/g'`"
Rex Dieter 82f4a46
-        arguments_exec="`echo "$arguments" | sed -e 's*%[fFuU]*"'"$arg_one"'"*g'`"
Rex Dieter 82f4a46
+        icon="$(get_key "${file}" "Icon")"
Rex Dieter 82f4a46
+        if [ "${icon}" != "" ]
Rex Dieter 82f4a46
+        then
Rex Dieter 82f4a46
+            icon="--icon '${icon}'"
Rex Dieter 82f4a46
+        else
Rex Dieter 82f4a46
+            icon="''"
Rex Dieter 82f4a46
+        fi
Rex Dieter 82f4a46
+        # FIXME: Actually LC_MESSAGES should be used as described in
Rex Dieter 82f4a46
+        # http://standards.freedesktop.org/desktop-entry-spec/latest/ar01s04.html
Rex Dieter 82f4a46
+        localised_name="'$(get_key "${file}" "Name")'"
Rex Dieter 82f4a46
+        arguments_exec="$(echo "$arguments" | sed -e 's*%[fFuU]*"'"$arg_one"'"*g' \
Rex Dieter 82f4a46
+                                                  -e 's*%i*'"$icon"'*g' \
Rex Dieter 82f4a46
+                                                  -e 's*%c*'"$localised_name"'*g')"
Rex Dieter 82f4a46
 
Rex Dieter 82f4a46
         if [ -x "$command_exec" ] ; then
Rex Dieter 82f4a46
             if echo "$arguments" | grep -iq '%[fFuU]' ; then
Rex Dieter 82f4a46
-- 
Rex Dieter 9d08954
2.1.0
Rex Dieter 82f4a46