@openclaw/diffs 2026.7.2-beta.7 → 2026.7.33

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.
Files changed (122) hide show
  1. package/README.md +9 -2
  2. package/dist/assets/viewer-runtime.js +31 -31
  3. package/dist/index.js +307 -290
  4. package/node_modules/@pierre/diffs/node_modules/@shikijs/core/package.json +3 -3
  5. package/node_modules/@pierre/diffs/node_modules/@shikijs/engine-javascript/package.json +2 -2
  6. package/node_modules/@pierre/diffs/node_modules/@shikijs/engine-oniguruma/package.json +2 -2
  7. package/node_modules/@pierre/diffs/node_modules/@shikijs/primitive/dist/index.mjs +5 -6
  8. package/node_modules/@pierre/diffs/node_modules/@shikijs/primitive/package.json +2 -2
  9. package/node_modules/@pierre/diffs/node_modules/@shikijs/themes/package.json +2 -2
  10. package/node_modules/@pierre/diffs/node_modules/@shikijs/transformers/package.json +3 -3
  11. package/node_modules/@pierre/diffs/node_modules/@shikijs/types/dist/index.d.mts +1 -9
  12. package/node_modules/@pierre/diffs/node_modules/@shikijs/types/package.json +1 -1
  13. package/node_modules/@pierre/diffs/node_modules/@types/hast/README.md +2 -2
  14. package/node_modules/@pierre/diffs/node_modules/@types/hast/index.d.ts +0 -642
  15. package/node_modules/@pierre/diffs/node_modules/@types/hast/package.json +3 -9
  16. package/node_modules/@pierre/diffs/node_modules/@ungap/structured-clone/cjs/deserialize.js +1 -6
  17. package/node_modules/@pierre/diffs/node_modules/@ungap/structured-clone/cjs/serialize.js +2 -2
  18. package/node_modules/@pierre/diffs/node_modules/@ungap/structured-clone/esm/deserialize.js +1 -6
  19. package/node_modules/@pierre/diffs/node_modules/@ungap/structured-clone/esm/serialize.js +2 -2
  20. package/node_modules/@pierre/diffs/node_modules/@ungap/structured-clone/package.json +1 -1
  21. package/node_modules/@pierre/diffs/node_modules/@ungap/structured-clone/structured-json.js +1 -1
  22. package/node_modules/@pierre/diffs/node_modules/shiki/package.json +7 -7
  23. package/node_modules/@shikijs/langs/node_modules/@shikijs/types/dist/index.d.mts +1 -9
  24. package/node_modules/@shikijs/langs/node_modules/@shikijs/types/package.json +1 -1
  25. package/node_modules/@shikijs/langs/node_modules/@types/hast/README.md +2 -2
  26. package/node_modules/@shikijs/langs/node_modules/@types/hast/index.d.ts +0 -642
  27. package/node_modules/@shikijs/langs/node_modules/@types/hast/package.json +3 -9
  28. package/node_modules/@shikijs/langs/package.json +2 -2
  29. package/node_modules/playwright-core/browsers.json +18 -12
  30. package/node_modules/playwright-core/lib/bootstrap.js +1 -1
  31. package/node_modules/playwright-core/lib/coreBundle.js +12247 -13691
  32. package/node_modules/playwright-core/lib/server/deviceDescriptorsSource.json +2739 -0
  33. package/node_modules/playwright-core/lib/server/electron/loader.js +2 -5
  34. package/node_modules/playwright-core/lib/serverRegistry.js +1 -5
  35. package/node_modules/playwright-core/lib/tools/cli-client/help.json +6 -21
  36. package/node_modules/playwright-core/lib/tools/cli-client/program.js +1 -1
  37. package/node_modules/playwright-core/lib/tools/cli-client/session.js +0 -4
  38. package/node_modules/playwright-core/lib/tools/{skills/playwright-cli → cli-client/skill}/SKILL.md +5 -21
  39. package/node_modules/playwright-core/lib/tools/{skills/playwright-cli/references/test-generation.md → cli-client/skill/references/spec-driven-testing.md} +7 -135
  40. package/node_modules/playwright-core/lib/tools/cli-client/skill/references/test-generation.md +134 -0
  41. package/node_modules/playwright-core/lib/tools/utils/extension.js +8 -31
  42. package/node_modules/playwright-core/lib/utilsBundle.js +48599 -52627
  43. package/node_modules/playwright-core/lib/utilsBundle.js.LICENSE +268 -391
  44. package/node_modules/playwright-core/lib/vite/dashboard/assets/index-BY2S1tHT.css +1 -0
  45. package/node_modules/playwright-core/lib/vite/dashboard/assets/index-C_5TMfeg.js +52 -0
  46. package/node_modules/playwright-core/lib/vite/dashboard/index.html +2 -2
  47. package/node_modules/playwright-core/lib/vite/htmlReport/report.css +1 -2
  48. package/node_modules/playwright-core/lib/vite/htmlReport/report.js +55 -15
  49. package/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-DYBRYzYX.css +1 -0
  50. package/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-DeBYQozu.js +32 -0
  51. package/node_modules/playwright-core/lib/vite/recorder/assets/index-4ZiSSCmn.css +1 -0
  52. package/node_modules/playwright-core/lib/vite/recorder/assets/index-Bq-mQf8S.js +193 -0
  53. package/node_modules/playwright-core/lib/vite/recorder/index.html +2 -2
  54. package/node_modules/playwright-core/lib/vite/traceViewer/assets/codeMirrorModule-LEHpjmcn.js +32 -0
  55. package/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-BNmKHKpQ.js +264 -0
  56. package/node_modules/playwright-core/lib/vite/traceViewer/assets/urlMatch-BYQrIQwR.js +1 -0
  57. package/node_modules/playwright-core/lib/vite/traceViewer/assets/xtermModule-CsJ4vdCR.js +9 -0
  58. package/node_modules/playwright-core/lib/vite/traceViewer/codeMirrorModule.DYBRYzYX.css +1 -0
  59. package/node_modules/playwright-core/lib/vite/traceViewer/defaultSettingsView.CjdS-WJx.css +1 -0
  60. package/node_modules/playwright-core/lib/vite/traceViewer/index.CzXZzn5A.css +1 -0
  61. package/node_modules/playwright-core/lib/vite/traceViewer/index.DMMX1gXU.js +2 -0
  62. package/node_modules/playwright-core/lib/vite/traceViewer/index.html +5 -5
  63. package/node_modules/playwright-core/lib/vite/traceViewer/snapshot.html +2 -2
  64. package/node_modules/playwright-core/lib/vite/traceViewer/snapshot.v8KI4P3m.js +2 -0
  65. package/node_modules/playwright-core/lib/vite/traceViewer/sw.bundle.js +4 -3
  66. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.BZQ54Kgt.css +1 -0
  67. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.Ut8wwJNp.js +6 -0
  68. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +5 -5
  69. package/node_modules/playwright-core/lib/vite/traceViewer/xtermModule.DYP7pi_n.css +32 -0
  70. package/node_modules/playwright-core/lib/xdg-open +137 -338
  71. package/node_modules/playwright-core/package.json +2 -2
  72. package/node_modules/playwright-core/types/protocol.d.ts +36 -249
  73. package/node_modules/playwright-core/types/structs.d.ts +1 -3
  74. package/node_modules/playwright-core/types/types.d.ts +268 -2011
  75. package/node_modules/typebox/build/compile/validator.d.mts +4 -1
  76. package/node_modules/typebox/build/guard/guard.d.mts +1 -1
  77. package/node_modules/typebox/build/guard/guard.mjs +2 -5
  78. package/node_modules/typebox/build/guard/string.mjs +4 -16
  79. package/node_modules/typebox/build/schema/engine/_functions.mjs +15 -34
  80. package/node_modules/typebox/build/type/action/readonly_object.d.mts +0 -5
  81. package/node_modules/typebox/build/type/action/readonly_object.mjs +0 -8
  82. package/node_modules/typebox/build/typebox.d.mts +1 -1
  83. package/node_modules/typebox/build/typebox.mjs +1 -1
  84. package/node_modules/typebox/package.json +1 -1
  85. package/node_modules/typebox/readme.md +32 -29
  86. package/openclaw.plugin.json +0 -1
  87. package/package.json +7 -7
  88. package/skills/diffs/SKILL.md +2 -2
  89. package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/SKILL.md +0 -143
  90. package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/gallery-spec.md +0 -144
  91. package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/migration.md +0 -85
  92. package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/react.md +0 -67
  93. package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/vue.md +0 -75
  94. package/node_modules/playwright-core/lib/vite/dashboard/assets/index-CyWAfh-p.js +0 -11
  95. package/node_modules/playwright-core/lib/vite/dashboard/assets/index-DhC616m4.css +0 -1
  96. package/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule--QdMvsKi.css +0 -1
  97. package/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-CwYYHbcZ.js +0 -32
  98. package/node_modules/playwright-core/lib/vite/recorder/assets/index-DYjdXIbE.js +0 -129
  99. package/node_modules/playwright-core/lib/vite/recorder/assets/index-l_lX622x.css +0 -1
  100. package/node_modules/playwright-core/lib/vite/traceViewer/assets/codeMirrorModule-By56iMx7.js +0 -32
  101. package/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-B34OrIms.js +0 -181
  102. package/node_modules/playwright-core/lib/vite/traceViewer/assets/urlMatch-L3liM589.js +0 -1
  103. package/node_modules/playwright-core/lib/vite/traceViewer/assets/xtermModule-COQkjINf.js +0 -7
  104. package/node_modules/playwright-core/lib/vite/traceViewer/codeMirrorModule.-QdMvsKi.css +0 -1
  105. package/node_modules/playwright-core/lib/vite/traceViewer/defaultSettingsView.BLFoOugd.css +0 -1
  106. package/node_modules/playwright-core/lib/vite/traceViewer/index.B_TqY17P.css +0 -1
  107. package/node_modules/playwright-core/lib/vite/traceViewer/index.Dl36UVQT.js +0 -1
  108. package/node_modules/playwright-core/lib/vite/traceViewer/snapshot.B_Jk1wbt.js +0 -1
  109. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.C7UW1sC9.css +0 -1
  110. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.D962mr9b.js +0 -5
  111. package/node_modules/playwright-core/lib/vite/traceViewer/xtermModule.kHJ-D0s7.css +0 -1
  112. package/node_modules/playwright-core/lib/webp_codec.LICENSE +0 -173
  113. package/node_modules/playwright-core/lib/webp_codec.wasm +0 -0
  114. /package/node_modules/playwright-core/lib/tools/{skills/playwright-cli → cli-client/skill}/references/element-attributes.md +0 -0
  115. /package/node_modules/playwright-core/lib/tools/{skills/playwright-cli → cli-client/skill}/references/playwright-tests.md +0 -0
  116. /package/node_modules/playwright-core/lib/tools/{skills/playwright-cli → cli-client/skill}/references/request-mocking.md +0 -0
  117. /package/node_modules/playwright-core/lib/tools/{skills/playwright-cli → cli-client/skill}/references/running-code.md +0 -0
  118. /package/node_modules/playwright-core/lib/tools/{skills/playwright-cli → cli-client/skill}/references/session-management.md +0 -0
  119. /package/node_modules/playwright-core/lib/tools/{skills/playwright-cli → cli-client/skill}/references/storage-state.md +0 -0
  120. /package/node_modules/playwright-core/lib/tools/{skills/playwright-cli → cli-client/skill}/references/tracing.md +0 -0
  121. /package/node_modules/playwright-core/lib/tools/{skills/playwright-cli → cli-client/skill}/references/video-recording.md +0 -0
  122. /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-2016, Rex Dieter <rdieter@fedoraproject.org>
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 << '_MANUALPAGE'
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 << '_USAGE'
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
- [ "${XDG_UTILS_DEBUG_LEVEL}" -lt "$1" ] && return 0;
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="$(command -v "$1")"
192
- binary="$(xdg_realpath "$binary")"
193
- base="$(basename "$binary")"
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="$(grep -E "^Exec(\[[^]=]*])?=" "$file" | cut -d= -f 2- | first_word)"
206
- command="$(command -v "$command")"
207
- if [ x"$(xdg_realpath "$command")" = x"$binary" ]; then
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" | tr -s /
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="$(basename "$1")"
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 "$dir/applications/$vendor/$app" ]; then
231
- file_path="$dir/applications/$vendor/$app"
232
- elif [ -r "$dir/applnk/$vendor/$app" ]; then
233
- file_path="$dir/applnk/$vendor/$app"
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="$(grep -E "^Exec(\[[^]=]*])?=" "$file_path" | cut -d= -f 2- | first_word)"
248
- command="$(command -v "$command")"
249
- xdg_realpath "$command"
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: $*" >&2
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: $*" >&2
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: $*" >&2
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: $*" >&2
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: $*" >&2
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: $*" >&2
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="$(basename "$1")"
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="$(dirname "$1")"
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.2.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
- # shellcheck disable=SC2034
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=deepin;
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
- # shellcheck disable=SC2153
484
- if [ -z "$DE" ]; then
437
+ if [ x"$DE" = x"" ]; then
485
438
  # classic fallbacks
486
- if [ -n "$KDE_FULL_SESSION" ]; then DE=kde;
487
- elif [ -n "$GNOME_DESKTOP_SESSION_ID" ]; then DE=gnome;
488
- elif [ -n "$MATE_DESKTOP_SESSION_ID" ]; then DE=mate;
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 "$DESKTOP" | grep -q '^Enlightenment'; then DE=enlightenment;
493
- elif [ -n "$LXQT_SESSION_CONFIG" ]; then DE=lxqt;
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 [ -z "$DE" ]; then
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 [ -z "$DE" ]; then
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
- command -v gnome-default-applications-properties > /dev/null || DE="gnome3"
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="$(LC_ALL=C.UTF-8 kde-config --version 2>/dev/null | grep '^KDE')"
551
- major="$(echo "$version" | sed 's/KDE.*: \([0-9]\).*/\1/')"
552
- minor="$(echo "$version" | sed 's/KDE.*: [0-9]*\.\([0-9]\).*/\1/')"
553
- release="$(echo "$version" | sed 's/KDE.*: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/')"
554
- test "$major" -gt 3 && return "$1"
555
- test "$minor" -gt 5 && return "$1"
556
- test "$release" -gt 4 && return "$1"
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
- # No backslash handling here, first_word and last_word do that
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://' || ! has_url_scheme "$1" ; then
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
- get_hostname
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=${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
- "kde-open${KDE_SESSION_VERSION}" "$1"
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
- open_deepin()
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
- if is_file_url_or_path "$1"; then
875
- local file
876
- file="$(file_url_to_path "$1")"
877
-
878
- check_input_file "$file"
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/$(echo "$default" | sed -e 's|-|/|')" ]; then
920
- file="$dir/$(echo "$default" | sed -e 's|-|/|')"
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
- if command -v "$command" >/dev/null; then
926
- icon="$(get_key "${file}" "Icon")"
927
- # FIXME: Actually LC_MESSAGES should be used as described in
928
- # http://standards.freedesktop.org/desktop-entry-spec/latest/ar01s04.html
929
- localised_name="$(get_key "${file}" "Name")"
930
- #shellcheck disable=SC2046 # Splitting is intentional here
931
- set -- $(get_key "${file}" "Exec" | last_word)
932
- # We need to replace any occurrence of "%f", "%F" and
933
- # the like by the target file. We examine each
934
- # argument and append the modified argument to the
935
- # end then shift.
936
- local args=$#
937
- local replaced=0
938
- while [ $args -gt 0 ]; do
939
- case $1 in
940
- %[c])
941
- replaced=1
942
- arg="${localised_name}"
943
- shift
944
- set -- "$@" "$arg"
945
- ;;
946
- %[fF])
947
- # if there is only a target_url return,
948
- # this application can't handle it.
949
- [ -n "$target" ] || return
950
- replaced=1
951
- arg="$target"
952
- shift
953
- set -- "$@" "$arg"
954
- ;;
955
- %[uU])
956
- replaced=1
957
- # When an URI is requested use it,
958
- # otherwise fall back to the filepath.
959
- arg="${target_uri:-$target}"
960
- shift
961
- set -- "$@" "$arg"
962
- ;;
963
- %[i])
964
- replaced=1
965
- shift
966
- set -- "$@" "--icon" "$icon"
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 "$dir/"*/; do
983
- [ -d "$d" ] && search_desktop_file "$default" "$d" "$target" "$target_uri"
818
+ for d in $dir/*/; do
819
+ [ -d "$d" ] && search_desktop_file "$default" "$d" "$target"
984
820
  done
985
821
  }
986
822
 
987
- # (file (or empty), mimetype, optional url)
823
+
988
824
  open_generic_xdg_mime()
989
825
  {
990
826
  filetype="$2"
991
- default="$(xdg-mime query default "$filetype")"
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
- search_dirs="$xdg_user_dir:$xdg_system_dirs"
1000
- DEBUG 3 "$search_dirs"
1001
- old_ifs="$IFS"
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="$(echo "$1" | LC_ALL=C sed -n 's/\(^[[:alpha:]][[:alnum:]+\.-]*\):.*$/\1/p')"
1013
- if [ -n "$scheme" ]; then
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" "$1"
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="$(xdg-mime query filetype "$file" | sed "s/;.*//")"
1083
- # passing a path a url is okay too,
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 command -v run-mailcap >/dev/null; then
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
- if qtxdg-mat open --help 2>/dev/null 1>&2; then
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 calling ourselves in particular)
1000
+ # sanitize BROWSER (avoid caling ourselves in particular)
1198
1001
  case "${BROWSER}" in
1199
1002
  *:"xdg-open"|"xdg-open":*)
1200
- BROWSER="$(echo "$BROWSER" | sed -e 's|:xdg-open||g' -e 's|xdg-open:||g')"
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
- deepin)
1213
- open_deepin "$url"
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
  ;;