@openclaw/diffs 2026.7.2-beta.7 → 2026.7.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -2
- package/dist/assets/viewer-runtime.js +31 -31
- package/dist/index.js +307 -290
- package/node_modules/@pierre/diffs/node_modules/@shikijs/core/package.json +3 -3
- package/node_modules/@pierre/diffs/node_modules/@shikijs/engine-javascript/package.json +2 -2
- package/node_modules/@pierre/diffs/node_modules/@shikijs/engine-oniguruma/package.json +2 -2
- package/node_modules/@pierre/diffs/node_modules/@shikijs/primitive/dist/index.mjs +5 -6
- package/node_modules/@pierre/diffs/node_modules/@shikijs/primitive/package.json +2 -2
- package/node_modules/@pierre/diffs/node_modules/@shikijs/themes/package.json +2 -2
- package/node_modules/@pierre/diffs/node_modules/@shikijs/transformers/package.json +3 -3
- package/node_modules/@pierre/diffs/node_modules/@shikijs/types/dist/index.d.mts +1 -9
- package/node_modules/@pierre/diffs/node_modules/@shikijs/types/package.json +1 -1
- package/node_modules/@pierre/diffs/node_modules/@types/hast/README.md +2 -2
- package/node_modules/@pierre/diffs/node_modules/@types/hast/index.d.ts +0 -642
- package/node_modules/@pierre/diffs/node_modules/@types/hast/package.json +3 -9
- package/node_modules/@pierre/diffs/node_modules/@ungap/structured-clone/cjs/deserialize.js +1 -6
- package/node_modules/@pierre/diffs/node_modules/@ungap/structured-clone/cjs/serialize.js +2 -2
- package/node_modules/@pierre/diffs/node_modules/@ungap/structured-clone/esm/deserialize.js +1 -6
- package/node_modules/@pierre/diffs/node_modules/@ungap/structured-clone/esm/serialize.js +2 -2
- package/node_modules/@pierre/diffs/node_modules/@ungap/structured-clone/package.json +1 -1
- package/node_modules/@pierre/diffs/node_modules/@ungap/structured-clone/structured-json.js +1 -1
- package/node_modules/@pierre/diffs/node_modules/shiki/package.json +7 -7
- package/node_modules/@shikijs/langs/node_modules/@shikijs/types/dist/index.d.mts +1 -9
- package/node_modules/@shikijs/langs/node_modules/@shikijs/types/package.json +1 -1
- package/node_modules/@shikijs/langs/node_modules/@types/hast/README.md +2 -2
- package/node_modules/@shikijs/langs/node_modules/@types/hast/index.d.ts +0 -642
- package/node_modules/@shikijs/langs/node_modules/@types/hast/package.json +3 -9
- package/node_modules/@shikijs/langs/package.json +2 -2
- package/node_modules/playwright-core/browsers.json +18 -12
- package/node_modules/playwright-core/lib/bootstrap.js +1 -1
- package/node_modules/playwright-core/lib/coreBundle.js +12247 -13691
- package/node_modules/playwright-core/lib/server/deviceDescriptorsSource.json +2739 -0
- package/node_modules/playwright-core/lib/server/electron/loader.js +2 -5
- package/node_modules/playwright-core/lib/serverRegistry.js +1 -5
- package/node_modules/playwright-core/lib/tools/cli-client/help.json +6 -21
- package/node_modules/playwright-core/lib/tools/cli-client/program.js +1 -1
- package/node_modules/playwright-core/lib/tools/cli-client/session.js +0 -4
- package/node_modules/playwright-core/lib/tools/{skills/playwright-cli → cli-client/skill}/SKILL.md +5 -21
- package/node_modules/playwright-core/lib/tools/{skills/playwright-cli/references/test-generation.md → cli-client/skill/references/spec-driven-testing.md} +7 -135
- package/node_modules/playwright-core/lib/tools/cli-client/skill/references/test-generation.md +134 -0
- package/node_modules/playwright-core/lib/tools/utils/extension.js +8 -31
- package/node_modules/playwright-core/lib/utilsBundle.js +48599 -52627
- package/node_modules/playwright-core/lib/utilsBundle.js.LICENSE +268 -391
- package/node_modules/playwright-core/lib/vite/dashboard/assets/index-BY2S1tHT.css +1 -0
- package/node_modules/playwright-core/lib/vite/dashboard/assets/index-C_5TMfeg.js +52 -0
- package/node_modules/playwright-core/lib/vite/dashboard/index.html +2 -2
- package/node_modules/playwright-core/lib/vite/htmlReport/report.css +1 -2
- package/node_modules/playwright-core/lib/vite/htmlReport/report.js +55 -15
- package/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-DYBRYzYX.css +1 -0
- package/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-DeBYQozu.js +32 -0
- package/node_modules/playwright-core/lib/vite/recorder/assets/index-4ZiSSCmn.css +1 -0
- package/node_modules/playwright-core/lib/vite/recorder/assets/index-Bq-mQf8S.js +193 -0
- package/node_modules/playwright-core/lib/vite/recorder/index.html +2 -2
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/codeMirrorModule-LEHpjmcn.js +32 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-BNmKHKpQ.js +264 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/urlMatch-BYQrIQwR.js +1 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/xtermModule-CsJ4vdCR.js +9 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/codeMirrorModule.DYBRYzYX.css +1 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/defaultSettingsView.CjdS-WJx.css +1 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/index.CzXZzn5A.css +1 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/index.DMMX1gXU.js +2 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/index.html +5 -5
- package/node_modules/playwright-core/lib/vite/traceViewer/snapshot.html +2 -2
- package/node_modules/playwright-core/lib/vite/traceViewer/snapshot.v8KI4P3m.js +2 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/sw.bundle.js +4 -3
- package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.BZQ54Kgt.css +1 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.Ut8wwJNp.js +6 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +5 -5
- package/node_modules/playwright-core/lib/vite/traceViewer/xtermModule.DYP7pi_n.css +32 -0
- package/node_modules/playwright-core/lib/xdg-open +137 -338
- package/node_modules/playwright-core/package.json +2 -2
- package/node_modules/playwright-core/types/protocol.d.ts +36 -249
- package/node_modules/playwright-core/types/structs.d.ts +1 -3
- package/node_modules/playwright-core/types/types.d.ts +268 -2011
- package/node_modules/typebox/build/compile/validator.d.mts +4 -1
- package/node_modules/typebox/build/guard/guard.d.mts +1 -1
- package/node_modules/typebox/build/guard/guard.mjs +2 -5
- package/node_modules/typebox/build/guard/string.mjs +4 -16
- package/node_modules/typebox/build/schema/engine/_functions.mjs +15 -34
- package/node_modules/typebox/build/type/action/readonly_object.d.mts +0 -5
- package/node_modules/typebox/build/type/action/readonly_object.mjs +0 -8
- package/node_modules/typebox/build/typebox.d.mts +1 -1
- package/node_modules/typebox/build/typebox.mjs +1 -1
- package/node_modules/typebox/package.json +1 -1
- package/node_modules/typebox/readme.md +32 -29
- package/openclaw.plugin.json +0 -1
- package/package.json +7 -7
- package/skills/diffs/SKILL.md +2 -2
- package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/SKILL.md +0 -143
- package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/gallery-spec.md +0 -144
- package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/migration.md +0 -85
- package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/react.md +0 -67
- package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/vue.md +0 -75
- package/node_modules/playwright-core/lib/vite/dashboard/assets/index-CyWAfh-p.js +0 -11
- package/node_modules/playwright-core/lib/vite/dashboard/assets/index-DhC616m4.css +0 -1
- package/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule--QdMvsKi.css +0 -1
- package/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-CwYYHbcZ.js +0 -32
- package/node_modules/playwright-core/lib/vite/recorder/assets/index-DYjdXIbE.js +0 -129
- package/node_modules/playwright-core/lib/vite/recorder/assets/index-l_lX622x.css +0 -1
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/codeMirrorModule-By56iMx7.js +0 -32
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-B34OrIms.js +0 -181
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/urlMatch-L3liM589.js +0 -1
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/xtermModule-COQkjINf.js +0 -7
- package/node_modules/playwright-core/lib/vite/traceViewer/codeMirrorModule.-QdMvsKi.css +0 -1
- package/node_modules/playwright-core/lib/vite/traceViewer/defaultSettingsView.BLFoOugd.css +0 -1
- package/node_modules/playwright-core/lib/vite/traceViewer/index.B_TqY17P.css +0 -1
- package/node_modules/playwright-core/lib/vite/traceViewer/index.Dl36UVQT.js +0 -1
- package/node_modules/playwright-core/lib/vite/traceViewer/snapshot.B_Jk1wbt.js +0 -1
- package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.C7UW1sC9.css +0 -1
- package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.D962mr9b.js +0 -5
- package/node_modules/playwright-core/lib/vite/traceViewer/xtermModule.kHJ-D0s7.css +0 -1
- package/node_modules/playwright-core/lib/webp_codec.LICENSE +0 -173
- package/node_modules/playwright-core/lib/webp_codec.wasm +0 -0
- /package/node_modules/playwright-core/lib/tools/{skills/playwright-cli → cli-client/skill}/references/element-attributes.md +0 -0
- /package/node_modules/playwright-core/lib/tools/{skills/playwright-cli → cli-client/skill}/references/playwright-tests.md +0 -0
- /package/node_modules/playwright-core/lib/tools/{skills/playwright-cli → cli-client/skill}/references/request-mocking.md +0 -0
- /package/node_modules/playwright-core/lib/tools/{skills/playwright-cli → cli-client/skill}/references/running-code.md +0 -0
- /package/node_modules/playwright-core/lib/tools/{skills/playwright-cli → cli-client/skill}/references/session-management.md +0 -0
- /package/node_modules/playwright-core/lib/tools/{skills/playwright-cli → cli-client/skill}/references/storage-state.md +0 -0
- /package/node_modules/playwright-core/lib/tools/{skills/playwright-cli → cli-client/skill}/references/tracing.md +0 -0
- /package/node_modules/playwright-core/lib/tools/{skills/playwright-cli → cli-client/skill}/references/video-recording.md +0 -0
- /package/node_modules/playwright-core/lib/tools/{skills/playwright-trace → trace}/SKILL.md +0 -0
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# Refer to the usage() function below for usage.
|
|
8
8
|
#
|
|
9
9
|
# Copyright 2009-2010, Fathi Boudra <fabo@freedesktop.org>
|
|
10
|
-
# Copyright 2009-
|
|
10
|
+
# Copyright 2009-2010, Rex Dieter <rdieter@fedoraproject.org>
|
|
11
11
|
# Copyright 2006, Kevin Krammer <kevin.krammer@gmx.at>
|
|
12
12
|
# Copyright 2006, Jeremy White <jwhite@codeweavers.com>
|
|
13
13
|
#
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
|
|
36
36
|
manualpage()
|
|
37
37
|
{
|
|
38
|
-
cat <<
|
|
38
|
+
cat << _MANUALPAGE
|
|
39
39
|
Name
|
|
40
40
|
|
|
41
41
|
xdg-open -- opens a file or URL in the user's preferred
|
|
@@ -58,14 +58,6 @@ Description
|
|
|
58
58
|
xdg-open is for use inside a desktop session only. It is not
|
|
59
59
|
recommended to use xdg-open as root.
|
|
60
60
|
|
|
61
|
-
As xdg-open can not handle arguments that begin with a "-" it
|
|
62
|
-
is recommended to pass filepaths in one of the following ways:
|
|
63
|
-
* Pass absolute paths, i.e. by using realpath as a
|
|
64
|
-
preprocessor.
|
|
65
|
-
* Prefix known relative filepaths with a "./". For example
|
|
66
|
-
using sed -E 's|^[^/]|./\0|'.
|
|
67
|
-
* Pass a file URL.
|
|
68
|
-
|
|
69
61
|
Options
|
|
70
62
|
|
|
71
63
|
--help
|
|
@@ -95,37 +87,6 @@ Exit Codes
|
|
|
95
87
|
4
|
|
96
88
|
The action failed.
|
|
97
89
|
|
|
98
|
-
In case of success the process launched from the .desktop file
|
|
99
|
-
will not be forked off and therefore may result in xdg-open
|
|
100
|
-
running for a very long time. This behaviour intentionally
|
|
101
|
-
differs from most desktop specific openers to allow terminal
|
|
102
|
-
based applications to run using the same terminal xdg-open was
|
|
103
|
-
called from.
|
|
104
|
-
|
|
105
|
-
Reporting Issues
|
|
106
|
-
|
|
107
|
-
Please keep in mind xdg-open inherits most of the flaws of its
|
|
108
|
-
configuration and the underlying opener.
|
|
109
|
-
|
|
110
|
-
In case the command xdg-mime query default "$(xdg-mime query
|
|
111
|
-
filetype path/to/troublesome_file)" names the program
|
|
112
|
-
responsible for any unexpected behaviour you can fix that by
|
|
113
|
-
setting a different handler. (If the program is broken let the
|
|
114
|
-
developers know)
|
|
115
|
-
|
|
116
|
-
Also see the security note on xdg-mime(1) for the default
|
|
117
|
-
subcommand.
|
|
118
|
-
|
|
119
|
-
If a flaw is reproducible using the desktop specific opener
|
|
120
|
-
(and isn't a configuration issue): Please report to whoever is
|
|
121
|
-
responsible for that first (reporting to xdg-utils is better
|
|
122
|
-
than not reporting at all, but since the xdg-utils are
|
|
123
|
-
maintained in very little spare time a fix will take much
|
|
124
|
-
longer)
|
|
125
|
-
|
|
126
|
-
In case an issue specific to xdg-open please report it to
|
|
127
|
-
https://gitlab.freedesktop.org/xdg/xdg-utils/-/issues .
|
|
128
|
-
|
|
129
90
|
See Also
|
|
130
91
|
|
|
131
92
|
xdg-mime(1), xdg-settings(1), MIME applications associations
|
|
@@ -147,7 +108,7 @@ _MANUALPAGE
|
|
|
147
108
|
|
|
148
109
|
usage()
|
|
149
110
|
{
|
|
150
|
-
cat <<
|
|
111
|
+
cat << _USAGE
|
|
151
112
|
xdg-open -- opens a file or URL in the user's preferred
|
|
152
113
|
application
|
|
153
114
|
|
|
@@ -161,16 +122,15 @@ _USAGE
|
|
|
161
122
|
}
|
|
162
123
|
|
|
163
124
|
#@xdg-utils-common@
|
|
125
|
+
|
|
164
126
|
#----------------------------------------------------------------------------
|
|
165
127
|
# Common utility functions included in all XDG wrapper scripts
|
|
166
128
|
#----------------------------------------------------------------------------
|
|
167
129
|
|
|
168
|
-
#shellcheck shell=sh
|
|
169
|
-
|
|
170
130
|
DEBUG()
|
|
171
131
|
{
|
|
172
132
|
[ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && return 0;
|
|
173
|
-
[
|
|
133
|
+
[ ${XDG_UTILS_DEBUG_LEVEL} -lt $1 ] && return 0;
|
|
174
134
|
shift
|
|
175
135
|
echo "$@" >&2
|
|
176
136
|
}
|
|
@@ -178,7 +138,6 @@ DEBUG()
|
|
|
178
138
|
# This handles backslashes but not quote marks.
|
|
179
139
|
first_word()
|
|
180
140
|
{
|
|
181
|
-
# shellcheck disable=SC2162 # No -r is intended here
|
|
182
141
|
read first rest
|
|
183
142
|
echo "$first"
|
|
184
143
|
}
|
|
@@ -188,9 +147,9 @@ first_word()
|
|
|
188
147
|
binary_to_desktop_file()
|
|
189
148
|
{
|
|
190
149
|
search="${XDG_DATA_HOME:-$HOME/.local/share}:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}"
|
|
191
|
-
binary="
|
|
192
|
-
binary="
|
|
193
|
-
base="
|
|
150
|
+
binary="`which "$1"`"
|
|
151
|
+
binary="`readlink -f "$binary"`"
|
|
152
|
+
base="`basename "$binary"`"
|
|
194
153
|
IFS=:
|
|
195
154
|
for dir in $search; do
|
|
196
155
|
unset IFS
|
|
@@ -202,11 +161,11 @@ binary_to_desktop_file()
|
|
|
202
161
|
grep -q "^Exec.*$base" "$file" || continue
|
|
203
162
|
# Make sure it's a visible desktop file (e.g. not "preferred-web-browser.desktop").
|
|
204
163
|
grep -Eq "^(NoDisplay|Hidden)=true" "$file" && continue
|
|
205
|
-
command="
|
|
206
|
-
command="
|
|
207
|
-
if [ x"
|
|
164
|
+
command="`grep -E "^Exec(\[[^]=]*])?=" "$file" | cut -d= -f 2- | first_word`"
|
|
165
|
+
command="`which "$command"`"
|
|
166
|
+
if [ x"`readlink -f "$command"`" = x"$binary" ]; then
|
|
208
167
|
# Fix any double slashes that got added path composition
|
|
209
|
-
echo "$file" |
|
|
168
|
+
echo "$file" | sed -e 's,//*,/,g'
|
|
210
169
|
return
|
|
211
170
|
fi
|
|
212
171
|
done
|
|
@@ -218,7 +177,7 @@ binary_to_desktop_file()
|
|
|
218
177
|
desktop_file_to_binary()
|
|
219
178
|
{
|
|
220
179
|
search="${XDG_DATA_HOME:-$HOME/.local/share}:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}"
|
|
221
|
-
desktop="
|
|
180
|
+
desktop="`basename "$1"`"
|
|
222
181
|
IFS=:
|
|
223
182
|
for dir in $search; do
|
|
224
183
|
unset IFS
|
|
@@ -227,10 +186,10 @@ desktop_file_to_binary()
|
|
|
227
186
|
if [ "${desktop#*-}" != "$desktop" ]; then
|
|
228
187
|
vendor=${desktop%-*}
|
|
229
188
|
app=${desktop#*-}
|
|
230
|
-
if [ -r
|
|
231
|
-
file_path
|
|
232
|
-
elif [ -r
|
|
233
|
-
file_path
|
|
189
|
+
if [ -r $dir/applications/$vendor/$app ]; then
|
|
190
|
+
file_path=$dir/applications/$vendor/$app
|
|
191
|
+
elif [ -r $dir/applnk/$vendor/$app ]; then
|
|
192
|
+
file_path=$dir/applnk/$vendor/$app
|
|
234
193
|
fi
|
|
235
194
|
fi
|
|
236
195
|
if test -z "$file_path" ; then
|
|
@@ -244,9 +203,9 @@ desktop_file_to_binary()
|
|
|
244
203
|
fi
|
|
245
204
|
if [ -r "$file_path" ]; then
|
|
246
205
|
# Remove any arguments (%F, %f, %U, %u, etc.).
|
|
247
|
-
command="
|
|
248
|
-
command="
|
|
249
|
-
|
|
206
|
+
command="`grep -E "^Exec(\[[^]=]*])?=" "$file_path" | cut -d= -f 2- | first_word`"
|
|
207
|
+
command="`which "$command"`"
|
|
208
|
+
readlink -f "$command"
|
|
250
209
|
return
|
|
251
210
|
fi
|
|
252
211
|
done
|
|
@@ -255,11 +214,10 @@ desktop_file_to_binary()
|
|
|
255
214
|
#-------------------------------------------------------------
|
|
256
215
|
# Exit script on successfully completing the desired operation
|
|
257
216
|
|
|
258
|
-
# shellcheck disable=SC2120 # It is okay to call this without arguments
|
|
259
217
|
exit_success()
|
|
260
218
|
{
|
|
261
219
|
if [ $# -gt 0 ]; then
|
|
262
|
-
echo "
|
|
220
|
+
echo "$@"
|
|
263
221
|
echo
|
|
264
222
|
fi
|
|
265
223
|
|
|
@@ -275,7 +233,7 @@ exit_success()
|
|
|
275
233
|
exit_failure_syntax()
|
|
276
234
|
{
|
|
277
235
|
if [ $# -gt 0 ]; then
|
|
278
|
-
echo "xdg-open:
|
|
236
|
+
echo "xdg-open: $@" >&2
|
|
279
237
|
echo "Try 'xdg-open --help' for more information." >&2
|
|
280
238
|
else
|
|
281
239
|
usage
|
|
@@ -291,7 +249,7 @@ exit_failure_syntax()
|
|
|
291
249
|
exit_failure_file_missing()
|
|
292
250
|
{
|
|
293
251
|
if [ $# -gt 0 ]; then
|
|
294
|
-
echo "xdg-open:
|
|
252
|
+
echo "xdg-open: $@" >&2
|
|
295
253
|
fi
|
|
296
254
|
|
|
297
255
|
exit 2
|
|
@@ -303,7 +261,7 @@ exit_failure_file_missing()
|
|
|
303
261
|
exit_failure_operation_impossible()
|
|
304
262
|
{
|
|
305
263
|
if [ $# -gt 0 ]; then
|
|
306
|
-
echo "xdg-open:
|
|
264
|
+
echo "xdg-open: $@" >&2
|
|
307
265
|
fi
|
|
308
266
|
|
|
309
267
|
exit 3
|
|
@@ -315,7 +273,7 @@ exit_failure_operation_impossible()
|
|
|
315
273
|
exit_failure_operation_failed()
|
|
316
274
|
{
|
|
317
275
|
if [ $# -gt 0 ]; then
|
|
318
|
-
echo "xdg-open:
|
|
276
|
+
echo "xdg-open: $@" >&2
|
|
319
277
|
fi
|
|
320
278
|
|
|
321
279
|
exit 4
|
|
@@ -327,7 +285,7 @@ exit_failure_operation_failed()
|
|
|
327
285
|
exit_failure_file_permission_read()
|
|
328
286
|
{
|
|
329
287
|
if [ $# -gt 0 ]; then
|
|
330
|
-
echo "xdg-open:
|
|
288
|
+
echo "xdg-open: $@" >&2
|
|
331
289
|
fi
|
|
332
290
|
|
|
333
291
|
exit 5
|
|
@@ -339,7 +297,7 @@ exit_failure_file_permission_read()
|
|
|
339
297
|
exit_failure_file_permission_write()
|
|
340
298
|
{
|
|
341
299
|
if [ $# -gt 0 ]; then
|
|
342
|
-
echo "xdg-open:
|
|
300
|
+
echo "xdg-open: $@" >&2
|
|
343
301
|
fi
|
|
344
302
|
|
|
345
303
|
exit 6
|
|
@@ -359,7 +317,7 @@ check_vendor_prefix()
|
|
|
359
317
|
{
|
|
360
318
|
file_label="$2"
|
|
361
319
|
[ -n "$file_label" ] || file_label="filename"
|
|
362
|
-
file
|
|
320
|
+
file=`basename "$1"`
|
|
363
321
|
case "$file" in
|
|
364
322
|
[[:alpha:]]*-*)
|
|
365
323
|
return
|
|
@@ -382,7 +340,7 @@ check_output_file()
|
|
|
382
340
|
exit_failure_file_permission_write "no permission to write to file '$1'"
|
|
383
341
|
fi
|
|
384
342
|
else
|
|
385
|
-
DIR
|
|
343
|
+
DIR=`dirname "$1"`
|
|
386
344
|
if [ ! -w "$DIR" ] || [ ! -x "$DIR" ]; then
|
|
387
345
|
exit_failure_file_permission_write "no permission to create file '$1'"
|
|
388
346
|
fi
|
|
@@ -411,13 +369,9 @@ check_common_commands()
|
|
|
411
369
|
;;
|
|
412
370
|
|
|
413
371
|
--version)
|
|
414
|
-
echo "xdg-open 1.
|
|
372
|
+
echo "xdg-open 1.1.3"
|
|
415
373
|
exit_success
|
|
416
374
|
;;
|
|
417
|
-
|
|
418
|
-
--)
|
|
419
|
-
[ -z "$XDG_UTILS_ENABLE_DOUBLE_HYPEN" ] || break
|
|
420
|
-
;;
|
|
421
375
|
esac
|
|
422
376
|
done
|
|
423
377
|
}
|
|
@@ -425,8 +379,7 @@ check_common_commands()
|
|
|
425
379
|
check_common_commands "$@"
|
|
426
380
|
|
|
427
381
|
[ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && unset XDG_UTILS_DEBUG_LEVEL;
|
|
428
|
-
|
|
429
|
-
if [ "${XDG_UTILS_DEBUG_LEVEL-0}" -lt 1 ]; then
|
|
382
|
+
if [ ${XDG_UTILS_DEBUG_LEVEL-0} -lt 1 ]; then
|
|
430
383
|
# Be silent
|
|
431
384
|
xdg_redirect_output=" > /dev/null 2> /dev/null"
|
|
432
385
|
else
|
|
@@ -459,8 +412,9 @@ detectDE()
|
|
|
459
412
|
KDE)
|
|
460
413
|
DE=kde;
|
|
461
414
|
;;
|
|
415
|
+
# Deepin Desktop Environments
|
|
462
416
|
DEEPIN|Deepin|deepin)
|
|
463
|
-
DE=
|
|
417
|
+
DE=dde;
|
|
464
418
|
;;
|
|
465
419
|
LXDE)
|
|
466
420
|
DE=lxde;
|
|
@@ -480,28 +434,27 @@ detectDE()
|
|
|
480
434
|
esac
|
|
481
435
|
fi
|
|
482
436
|
|
|
483
|
-
|
|
484
|
-
if [ -z "$DE" ]; then
|
|
437
|
+
if [ x"$DE" = x"" ]; then
|
|
485
438
|
# classic fallbacks
|
|
486
|
-
if [
|
|
487
|
-
elif [
|
|
488
|
-
elif [
|
|
489
|
-
elif dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.GetNameOwner string:org.gnome.SessionManager > /dev/null 2>&1 ; then DE=gnome;
|
|
439
|
+
if [ x"$KDE_FULL_SESSION" != x"" ]; then DE=kde;
|
|
440
|
+
elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome;
|
|
441
|
+
elif [ x"$MATE_DESKTOP_SESSION_ID" != x"" ]; then DE=mate;
|
|
442
|
+
elif `dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.GetNameOwner string:org.gnome.SessionManager > /dev/null 2>&1` ; then DE=gnome;
|
|
490
443
|
elif xprop -root _DT_SAVE_MODE 2> /dev/null | grep ' = \"xfce4\"$' >/dev/null 2>&1; then DE=xfce;
|
|
491
444
|
elif xprop -root 2> /dev/null | grep -i '^xfce_desktop_window' >/dev/null 2>&1; then DE=xfce
|
|
492
|
-
elif echo
|
|
493
|
-
elif [
|
|
445
|
+
elif echo $DESKTOP | grep -q '^Enlightenment'; then DE=enlightenment;
|
|
446
|
+
elif [ x"$LXQT_SESSION_CONFIG" != x"" ]; then DE=lxqt;
|
|
494
447
|
fi
|
|
495
448
|
fi
|
|
496
449
|
|
|
497
|
-
if [
|
|
450
|
+
if [ x"$DE" = x"" ]; then
|
|
498
451
|
# fallback to checking $DESKTOP_SESSION
|
|
499
452
|
case "$DESKTOP_SESSION" in
|
|
500
453
|
gnome)
|
|
501
454
|
DE=gnome;
|
|
502
455
|
;;
|
|
503
456
|
LXDE|Lubuntu)
|
|
504
|
-
DE=lxde;
|
|
457
|
+
DE=lxde;
|
|
505
458
|
;;
|
|
506
459
|
MATE)
|
|
507
460
|
DE=mate;
|
|
@@ -512,27 +465,22 @@ detectDE()
|
|
|
512
465
|
esac
|
|
513
466
|
fi
|
|
514
467
|
|
|
515
|
-
if [
|
|
468
|
+
if [ x"$DE" = x"" ]; then
|
|
516
469
|
# fallback to uname output for other platforms
|
|
517
|
-
case "$(uname 2>/dev/null)" in
|
|
470
|
+
case "$(uname 2>/dev/null)" in
|
|
518
471
|
CYGWIN*)
|
|
519
472
|
DE=cygwin;
|
|
520
473
|
;;
|
|
521
474
|
Darwin)
|
|
522
475
|
DE=darwin;
|
|
523
476
|
;;
|
|
524
|
-
Linux)
|
|
525
|
-
grep -q microsoft /proc/version > /dev/null 2>&1 && \
|
|
526
|
-
command -v explorer.exe > /dev/null 2>&1 && \
|
|
527
|
-
DE=wsl;
|
|
528
|
-
;;
|
|
529
477
|
esac
|
|
530
478
|
fi
|
|
531
479
|
|
|
532
480
|
if [ x"$DE" = x"gnome" ]; then
|
|
533
481
|
# gnome-default-applications-properties is only available in GNOME 2.x
|
|
534
482
|
# but not in GNOME 3.x
|
|
535
|
-
|
|
483
|
+
which gnome-default-applications-properties > /dev/null 2>&1 || DE="gnome3"
|
|
536
484
|
fi
|
|
537
485
|
|
|
538
486
|
if [ -f "$XDG_RUNTIME_DIR/flatpak-info" ]; then
|
|
@@ -547,13 +495,13 @@ detectDE()
|
|
|
547
495
|
|
|
548
496
|
kfmclient_fix_exit_code()
|
|
549
497
|
{
|
|
550
|
-
version
|
|
551
|
-
major
|
|
552
|
-
minor
|
|
553
|
-
release
|
|
554
|
-
test "$major" -gt 3 && return
|
|
555
|
-
test "$minor" -gt 5 && return
|
|
556
|
-
test "$release" -gt 4 && return
|
|
498
|
+
version=`LC_ALL=C.UTF-8 kde-config --version 2>/dev/null | grep '^KDE'`
|
|
499
|
+
major=`echo $version | sed 's/KDE.*: \([0-9]\).*/\1/'`
|
|
500
|
+
minor=`echo $version | sed 's/KDE.*: [0-9]*\.\([0-9]\).*/\1/'`
|
|
501
|
+
release=`echo $version | sed 's/KDE.*: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/'`
|
|
502
|
+
test "$major" -gt 3 && return $1
|
|
503
|
+
test "$minor" -gt 5 && return $1
|
|
504
|
+
test "$release" -gt 4 && return $1
|
|
557
505
|
return 0
|
|
558
506
|
}
|
|
559
507
|
|
|
@@ -569,67 +517,9 @@ has_display()
|
|
|
569
517
|
fi
|
|
570
518
|
}
|
|
571
519
|
|
|
572
|
-
#----------------------------------------------------------------------------
|
|
573
|
-
# Prefixes a path with a "./" if it starts with a "-".
|
|
574
|
-
# This is useful for programs to not confuse paths with options.
|
|
575
|
-
|
|
576
|
-
unoption_path()
|
|
577
|
-
{
|
|
578
|
-
case "$1" in
|
|
579
|
-
-*)
|
|
580
|
-
printf "./%s" "$1" ;;
|
|
581
|
-
*)
|
|
582
|
-
printf "%s" "$1" ;;
|
|
583
|
-
esac
|
|
584
|
-
}
|
|
585
|
-
|
|
586
|
-
#----------------------------------------------------------------------------
|
|
587
|
-
# Performs a symlink and relative path resolving for a single argument.
|
|
588
|
-
# This will always fail if the given file does not exist!
|
|
589
|
-
|
|
590
|
-
xdg_realpath()
|
|
591
|
-
{
|
|
592
|
-
# allow caching and external configuration
|
|
593
|
-
if [ -z "$XDG_UTILS_REALPATH_BACKEND" ] ; then
|
|
594
|
-
if command -v realpath >/dev/null 2>/dev/null ; then
|
|
595
|
-
lines="$(realpath -- / 2>&1)"
|
|
596
|
-
if [ $? = 0 ] && [ "$lines" = "/" ] ; then
|
|
597
|
-
XDG_UTILS_REALPATH_BACKEND="realpath"
|
|
598
|
-
else
|
|
599
|
-
# The realpath took the -- literally, probably the busybox implementation
|
|
600
|
-
XDG_UTILS_REALPATH_BACKEND="busybox-realpath"
|
|
601
|
-
fi
|
|
602
|
-
unset lines
|
|
603
|
-
elif command -v readlink >/dev/null 2>/dev/null ; then
|
|
604
|
-
XDG_UTILS_REALPATH_BACKEND="readlink"
|
|
605
|
-
else
|
|
606
|
-
exit_failure_operation_failed "No usable realpath backend found. Have a realpath binary or a readlink -f that canonicalizes paths."
|
|
607
|
-
fi
|
|
608
|
-
fi
|
|
609
|
-
# Always fail if the file doesn't exist (busybox realpath does that for example)
|
|
610
|
-
[ -e "$1" ] || return 1
|
|
611
|
-
case "$XDG_UTILS_REALPATH_BACKEND" in
|
|
612
|
-
realpath)
|
|
613
|
-
realpath -- "$1"
|
|
614
|
-
;;
|
|
615
|
-
busybox-realpath)
|
|
616
|
-
# busybox style realpath implementations have options too
|
|
617
|
-
realpath "$(unoption_path "$1")"
|
|
618
|
-
;;
|
|
619
|
-
readlink)
|
|
620
|
-
readlink -f "$(unoption_path "$1")"
|
|
621
|
-
;;
|
|
622
|
-
*)
|
|
623
|
-
exit_failure_operation_impossible "Realpath backend '$XDG_UTILS_REALPATH_BACKEND' not recognized."
|
|
624
|
-
;;
|
|
625
|
-
esac
|
|
626
|
-
}
|
|
627
|
-
|
|
628
520
|
# This handles backslashes but not quote marks.
|
|
629
521
|
last_word()
|
|
630
522
|
{
|
|
631
|
-
# Backslash handling is intended, not using `first` too
|
|
632
|
-
# shellcheck disable=SC2162,SC2034
|
|
633
523
|
read first rest
|
|
634
524
|
echo "$rest"
|
|
635
525
|
}
|
|
@@ -645,8 +535,7 @@ get_key()
|
|
|
645
535
|
|
|
646
536
|
IFS_="${IFS}"
|
|
647
537
|
IFS=""
|
|
648
|
-
|
|
649
|
-
while read -r line
|
|
538
|
+
while read line
|
|
650
539
|
do
|
|
651
540
|
case "$line" in
|
|
652
541
|
"[Desktop Entry]")
|
|
@@ -667,47 +556,26 @@ get_key()
|
|
|
667
556
|
IFS="${IFS_}"
|
|
668
557
|
}
|
|
669
558
|
|
|
670
|
-
has_url_scheme()
|
|
671
|
-
{
|
|
672
|
-
echo "$1" | LC_ALL=C grep -Eq '^[[:alpha:]][[:alpha:][:digit:]+\.\-]*:'
|
|
673
|
-
}
|
|
674
|
-
|
|
675
559
|
# Returns true if argument is a file:// URL or path
|
|
676
560
|
is_file_url_or_path()
|
|
677
561
|
{
|
|
678
|
-
if echo "$1" | grep -q '^file://'
|
|
562
|
+
if echo "$1" | grep -q '^file://' \
|
|
563
|
+
|| ! echo "$1" | egrep -q '^[[:alpha:]+\.\-]+:'; then
|
|
679
564
|
return 0
|
|
680
565
|
else
|
|
681
566
|
return 1
|
|
682
567
|
fi
|
|
683
568
|
}
|
|
684
569
|
|
|
685
|
-
get_hostname() {
|
|
686
|
-
if [ -z "$HOSTNAME" ]; then
|
|
687
|
-
if command -v hostname > /dev/null; then
|
|
688
|
-
HOSTNAME=$(hostname)
|
|
689
|
-
else
|
|
690
|
-
HOSTNAME=$(uname -n)
|
|
691
|
-
fi
|
|
692
|
-
fi
|
|
693
|
-
}
|
|
694
|
-
|
|
695
570
|
# If argument is a file URL, convert it to a (percent-decoded) path.
|
|
696
571
|
# If not, leave it as it is.
|
|
697
572
|
file_url_to_path()
|
|
698
573
|
{
|
|
699
574
|
local file="$1"
|
|
700
|
-
|
|
701
|
-
if echo "$file" | grep -q '^file://'; then
|
|
702
|
-
file=${file#file://localhost}
|
|
703
|
-
file=${file#file://"$HOSTNAME"}
|
|
575
|
+
if echo "$file" | grep -q '^file:///'; then
|
|
704
576
|
file=${file#file://}
|
|
705
|
-
if ! echo "$file" | grep -q '^/'; then
|
|
706
|
-
echo "$file"
|
|
707
|
-
return
|
|
708
|
-
fi
|
|
709
577
|
file=${file%%#*}
|
|
710
|
-
file=$
|
|
578
|
+
file=$(echo "$file" | sed -r 's/\?.*$//')
|
|
711
579
|
local printf=printf
|
|
712
580
|
if [ -x /usr/bin/printf ]; then
|
|
713
581
|
printf=/usr/bin/printf
|
|
@@ -747,10 +615,7 @@ open_kde()
|
|
|
747
615
|
kde-open "$1"
|
|
748
616
|
;;
|
|
749
617
|
5)
|
|
750
|
-
|
|
751
|
-
;;
|
|
752
|
-
6)
|
|
753
|
-
kde-open "$1"
|
|
618
|
+
kde-open${KDE_SESSION_VERSION} "$1"
|
|
754
619
|
;;
|
|
755
620
|
esac
|
|
756
621
|
else
|
|
@@ -765,7 +630,7 @@ open_kde()
|
|
|
765
630
|
fi
|
|
766
631
|
}
|
|
767
632
|
|
|
768
|
-
|
|
633
|
+
open_dde()
|
|
769
634
|
{
|
|
770
635
|
if dde-open -version >/dev/null 2>&1; then
|
|
771
636
|
dde-open "$1"
|
|
@@ -871,28 +736,11 @@ open_enlightenment()
|
|
|
871
736
|
|
|
872
737
|
open_flatpak()
|
|
873
738
|
{
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
gdbus call --session \
|
|
881
|
-
--dest org.freedesktop.portal.Desktop \
|
|
882
|
-
--object-path /org/freedesktop/portal/desktop \
|
|
883
|
-
--method org.freedesktop.portal.OpenURI.OpenFile \
|
|
884
|
-
--timeout 5 \
|
|
885
|
-
"" "3" {} 3< "$file"
|
|
886
|
-
else
|
|
887
|
-
# $1 contains an URI
|
|
888
|
-
|
|
889
|
-
gdbus call --session \
|
|
890
|
-
--dest org.freedesktop.portal.Desktop \
|
|
891
|
-
--object-path /org/freedesktop/portal/desktop \
|
|
892
|
-
--method org.freedesktop.portal.OpenURI.OpenURI \
|
|
893
|
-
--timeout 5 \
|
|
894
|
-
"" "$1" {}
|
|
895
|
-
fi
|
|
739
|
+
gdbus call --session \
|
|
740
|
+
--dest org.freedesktop.portal.Desktop \
|
|
741
|
+
--object-path /org/freedesktop/portal/desktop \
|
|
742
|
+
--method org.freedesktop.portal.OpenURI.OpenURI \
|
|
743
|
+
"" "$1" {}
|
|
896
744
|
|
|
897
745
|
if [ $? -eq 0 ]; then
|
|
898
746
|
exit_success
|
|
@@ -904,91 +752,79 @@ open_flatpak()
|
|
|
904
752
|
#-----------------------------------------
|
|
905
753
|
# Recursively search .desktop file
|
|
906
754
|
|
|
907
|
-
#(application, directory, target file, target_url)
|
|
908
755
|
search_desktop_file()
|
|
909
756
|
{
|
|
910
757
|
local default="$1"
|
|
911
758
|
local dir="$2"
|
|
912
759
|
local target="$3"
|
|
913
|
-
local target_uri="$4"
|
|
914
760
|
|
|
915
761
|
local file=""
|
|
916
762
|
# look for both vendor-app.desktop, vendor/app.desktop
|
|
917
763
|
if [ -r "$dir/$default" ]; then
|
|
918
764
|
file="$dir/$default"
|
|
919
|
-
elif [ -r "$dir
|
|
920
|
-
file="$dir
|
|
765
|
+
elif [ -r "$dir/`echo $default | sed -e 's|-|/|'`" ]; then
|
|
766
|
+
file="$dir/`echo $default | sed -e 's|-|/|'`"
|
|
921
767
|
fi
|
|
922
768
|
|
|
923
769
|
if [ -r "$file" ] ; then
|
|
924
770
|
command="$(get_key "${file}" "Exec" | first_word)"
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
*)
|
|
969
|
-
arg="$1"
|
|
970
|
-
shift
|
|
971
|
-
set -- "$@" "$arg"
|
|
972
|
-
;;
|
|
973
|
-
esac
|
|
974
|
-
args=$(( args - 1 ))
|
|
975
|
-
done
|
|
976
|
-
[ $replaced -eq 1 ] || set -- "$@" "${target:-$target_uri}"
|
|
977
|
-
env "$command" "$@"
|
|
771
|
+
command_exec=`which $command 2>/dev/null`
|
|
772
|
+
icon="$(get_key "${file}" "Icon")"
|
|
773
|
+
# FIXME: Actually LC_MESSAGES should be used as described in
|
|
774
|
+
# http://standards.freedesktop.org/desktop-entry-spec/latest/ar01s04.html
|
|
775
|
+
localised_name="$(get_key "${file}" "Name")"
|
|
776
|
+
set -- $(get_key "${file}" "Exec" | last_word)
|
|
777
|
+
# We need to replace any occurrence of "%f", "%F" and
|
|
778
|
+
# the like by the target file. We examine each
|
|
779
|
+
# argument and append the modified argument to the
|
|
780
|
+
# end then shift.
|
|
781
|
+
local args=$#
|
|
782
|
+
local replaced=0
|
|
783
|
+
while [ $args -gt 0 ]; do
|
|
784
|
+
case $1 in
|
|
785
|
+
%[c])
|
|
786
|
+
replaced=1
|
|
787
|
+
arg="${localised_name}"
|
|
788
|
+
shift
|
|
789
|
+
set -- "$@" "$arg"
|
|
790
|
+
;;
|
|
791
|
+
%[fFuU])
|
|
792
|
+
replaced=1
|
|
793
|
+
arg="$target"
|
|
794
|
+
shift
|
|
795
|
+
set -- "$@" "$arg"
|
|
796
|
+
;;
|
|
797
|
+
%[i])
|
|
798
|
+
replaced=1
|
|
799
|
+
shift
|
|
800
|
+
set -- "$@" "--icon" "$icon"
|
|
801
|
+
;;
|
|
802
|
+
*)
|
|
803
|
+
arg="$1"
|
|
804
|
+
shift
|
|
805
|
+
set -- "$@" "$arg"
|
|
806
|
+
;;
|
|
807
|
+
esac
|
|
808
|
+
args=$(( $args - 1 ))
|
|
809
|
+
done
|
|
810
|
+
[ $replaced -eq 1 ] || set -- "$@" "$target"
|
|
811
|
+
"$command_exec" "$@"
|
|
812
|
+
|
|
813
|
+
if [ $? -eq 0 ]; then
|
|
978
814
|
exit_success
|
|
979
815
|
fi
|
|
980
816
|
fi
|
|
981
817
|
|
|
982
|
-
for d in
|
|
983
|
-
[ -d "$d" ] && search_desktop_file "$default" "$d" "$target"
|
|
818
|
+
for d in $dir/*/; do
|
|
819
|
+
[ -d "$d" ] && search_desktop_file "$default" "$d" "$target"
|
|
984
820
|
done
|
|
985
821
|
}
|
|
986
822
|
|
|
987
|
-
|
|
823
|
+
|
|
988
824
|
open_generic_xdg_mime()
|
|
989
825
|
{
|
|
990
826
|
filetype="$2"
|
|
991
|
-
default
|
|
827
|
+
default=`xdg-mime query default "$filetype"`
|
|
992
828
|
if [ -n "$default" ] ; then
|
|
993
829
|
xdg_user_dir="$XDG_DATA_HOME"
|
|
994
830
|
[ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share"
|
|
@@ -996,23 +832,25 @@ open_generic_xdg_mime()
|
|
|
996
832
|
xdg_system_dirs="$XDG_DATA_DIRS"
|
|
997
833
|
[ -n "$xdg_system_dirs" ] || xdg_system_dirs=/usr/local/share/:/usr/share/
|
|
998
834
|
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
IFS=:
|
|
1003
|
-
for x in $search_dirs ; do
|
|
1004
|
-
IFS="$old_ifs"
|
|
1005
|
-
search_desktop_file "$default" "$x/applications/" "$1" "$3"
|
|
835
|
+
DEBUG 3 "$xdg_user_dir:$xdg_system_dirs"
|
|
836
|
+
for x in `echo "$xdg_user_dir:$xdg_system_dirs" | sed 's/:/ /g'`; do
|
|
837
|
+
search_desktop_file "$default" "$x/applications/" "$1"
|
|
1006
838
|
done
|
|
1007
839
|
fi
|
|
1008
840
|
}
|
|
1009
841
|
|
|
842
|
+
open_generic_xdg_file_mime()
|
|
843
|
+
{
|
|
844
|
+
filetype=`xdg-mime query filetype "$1" | sed "s/;.*//"`
|
|
845
|
+
open_generic_xdg_mime "$1" "$filetype"
|
|
846
|
+
}
|
|
847
|
+
|
|
1010
848
|
open_generic_xdg_x_scheme_handler()
|
|
1011
849
|
{
|
|
1012
|
-
scheme="
|
|
1013
|
-
if [ -n
|
|
850
|
+
scheme="`echo $1 | sed -n 's/\(^[[:alnum:]+\.-]*\):.*$/\1/p'`"
|
|
851
|
+
if [ -n $scheme ]; then
|
|
1014
852
|
filetype="x-scheme-handler/$scheme"
|
|
1015
|
-
open_generic_xdg_mime "" "$filetype"
|
|
853
|
+
open_generic_xdg_mime "$1" "$filetype"
|
|
1016
854
|
fi
|
|
1017
855
|
}
|
|
1018
856
|
|
|
@@ -1024,7 +862,7 @@ has_single_argument()
|
|
|
1024
862
|
open_envvar()
|
|
1025
863
|
{
|
|
1026
864
|
local oldifs="$IFS"
|
|
1027
|
-
local browser
|
|
865
|
+
local browser browser_with_arg
|
|
1028
866
|
|
|
1029
867
|
IFS=":"
|
|
1030
868
|
for browser in $BROWSER; do
|
|
@@ -1038,8 +876,6 @@ open_envvar()
|
|
|
1038
876
|
# Avoid argument injection.
|
|
1039
877
|
# See https://bugs.freedesktop.org/show_bug.cgi?id=103807
|
|
1040
878
|
# URIs don't have IFS characters spaces anyway.
|
|
1041
|
-
# shellcheck disable=SC2086,SC2091,SC2059
|
|
1042
|
-
# All the scary things here are intentional
|
|
1043
879
|
has_single_argument $1 && $(printf "$browser" "$1")
|
|
1044
880
|
else
|
|
1045
881
|
$browser "$1"
|
|
@@ -1051,41 +887,19 @@ open_envvar()
|
|
|
1051
887
|
done
|
|
1052
888
|
}
|
|
1053
889
|
|
|
1054
|
-
open_wsl()
|
|
1055
|
-
{
|
|
1056
|
-
local win_path
|
|
1057
|
-
if is_file_url_or_path "$1" ; then
|
|
1058
|
-
win_path="$(file_url_to_path "$1")"
|
|
1059
|
-
win_path="$(wslpath -aw "$win_path")"
|
|
1060
|
-
[ $? -eq 0 ] || exit_failure_operation_failed
|
|
1061
|
-
explorer.exe "${win_path}"
|
|
1062
|
-
else
|
|
1063
|
-
rundll32.exe url.dll,FileProtocolHandler "$1"
|
|
1064
|
-
fi
|
|
1065
|
-
|
|
1066
|
-
if [ $? -eq 0 ]; then
|
|
1067
|
-
exit_success
|
|
1068
|
-
else
|
|
1069
|
-
exit_failure_operation_failed
|
|
1070
|
-
fi
|
|
1071
|
-
}
|
|
1072
|
-
|
|
1073
890
|
open_generic()
|
|
1074
891
|
{
|
|
1075
892
|
if is_file_url_or_path "$1"; then
|
|
1076
|
-
local file
|
|
1077
|
-
file="$(file_url_to_path "$1")"
|
|
893
|
+
local file="$(file_url_to_path "$1")"
|
|
1078
894
|
|
|
1079
895
|
check_input_file "$file"
|
|
1080
896
|
|
|
1081
897
|
if has_display; then
|
|
1082
|
-
filetype
|
|
1083
|
-
|
|
1084
|
-
# see desktop file specification for '%u'
|
|
1085
|
-
open_generic_xdg_mime "$file" "$filetype" "$1"
|
|
898
|
+
filetype=`xdg-mime query filetype "$file" | sed "s/;.*//"`
|
|
899
|
+
open_generic_xdg_mime "$file" "$filetype"
|
|
1086
900
|
fi
|
|
1087
901
|
|
|
1088
|
-
if
|
|
902
|
+
if which run-mailcap 2>/dev/null 1>&2; then
|
|
1089
903
|
run-mailcap --action=view "$file"
|
|
1090
904
|
if [ $? -eq 0 ]; then
|
|
1091
905
|
exit_success
|
|
@@ -1112,7 +926,7 @@ open_generic()
|
|
|
1112
926
|
if [ x"$BROWSER" = x"" ]; then
|
|
1113
927
|
BROWSER=www-browser:links2:elinks:links:lynx:w3m
|
|
1114
928
|
if has_display; then
|
|
1115
|
-
BROWSER=x-www-browser:firefox:iceweasel:seamonkey:mozilla:epiphany:konqueror:chromium:chromium-browser:google-chrome:$BROWSER
|
|
929
|
+
BROWSER=x-www-browser:firefox:iceweasel:seamonkey:mozilla:epiphany:konqueror:chromium:chromium-browser:google-chrome:microsoft-edge:$BROWSER
|
|
1116
930
|
fi
|
|
1117
931
|
fi
|
|
1118
932
|
|
|
@@ -1126,8 +940,7 @@ open_lxde()
|
|
|
1126
940
|
|
|
1127
941
|
# pcmanfm only knows how to handle file:// urls and filepaths, it seems.
|
|
1128
942
|
if pcmanfm --help >/dev/null 2>&1 && is_file_url_or_path "$1"; then
|
|
1129
|
-
local file
|
|
1130
|
-
file="$(file_url_to_path "$1")"
|
|
943
|
+
local file="$(file_url_to_path "$1")"
|
|
1131
944
|
|
|
1132
945
|
# handle relative paths
|
|
1133
946
|
if ! echo "$file" | grep -q ^/; then
|
|
@@ -1148,17 +961,7 @@ open_lxde()
|
|
|
1148
961
|
|
|
1149
962
|
open_lxqt()
|
|
1150
963
|
{
|
|
1151
|
-
|
|
1152
|
-
qtxdg-mat open "$1"
|
|
1153
|
-
else
|
|
1154
|
-
exit_failure_operation_impossible "no method available for opening '$1'"
|
|
1155
|
-
fi
|
|
1156
|
-
|
|
1157
|
-
if [ $? -eq 0 ]; then
|
|
1158
|
-
exit_success
|
|
1159
|
-
else
|
|
1160
|
-
exit_failure_operation_failed
|
|
1161
|
-
fi
|
|
964
|
+
open_generic "$1"
|
|
1162
965
|
}
|
|
1163
966
|
|
|
1164
967
|
[ x"$1" != x"" ] || exit_failure_syntax
|
|
@@ -1194,10 +997,10 @@ fi
|
|
|
1194
997
|
|
|
1195
998
|
DEBUG 2 "Selected DE $DE"
|
|
1196
999
|
|
|
1197
|
-
# sanitize BROWSER (avoid
|
|
1000
|
+
# sanitize BROWSER (avoid caling ourselves in particular)
|
|
1198
1001
|
case "${BROWSER}" in
|
|
1199
1002
|
*:"xdg-open"|"xdg-open":*)
|
|
1200
|
-
BROWSER
|
|
1003
|
+
BROWSER=$(echo $BROWSER | sed -e 's|:xdg-open||g' -e 's|xdg-open:||g')
|
|
1201
1004
|
;;
|
|
1202
1005
|
"xdg-open")
|
|
1203
1006
|
BROWSER=
|
|
@@ -1209,8 +1012,8 @@ case "$DE" in
|
|
|
1209
1012
|
open_kde "$url"
|
|
1210
1013
|
;;
|
|
1211
1014
|
|
|
1212
|
-
|
|
1213
|
-
|
|
1015
|
+
dde)
|
|
1016
|
+
open_dde "$url"
|
|
1214
1017
|
;;
|
|
1215
1018
|
|
|
1216
1019
|
gnome3|cinnamon)
|
|
@@ -1253,10 +1056,6 @@ case "$DE" in
|
|
|
1253
1056
|
open_flatpak "$url"
|
|
1254
1057
|
;;
|
|
1255
1058
|
|
|
1256
|
-
wsl)
|
|
1257
|
-
open_wsl "$url"
|
|
1258
|
-
;;
|
|
1259
|
-
|
|
1260
1059
|
generic)
|
|
1261
1060
|
open_generic "$url"
|
|
1262
1061
|
;;
|