|
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 |
|