| OLD | NEW |
| 1 #!/bin/sh | 1 #!/bin/sh |
| 2 #--------------------------------------------- | 2 #--------------------------------------------- |
| 3 # xdg-open | 3 # xdg-open |
| 4 # | 4 # |
| 5 # Utility script to open a URL in the registered default application. | 5 # Utility script to open a URL in the registered default application. |
| 6 # | 6 # |
| 7 # Refer to the usage() function below for usage. | 7 # Refer to the usage() function below for usage. |
| 8 # | 8 # |
| 9 # Copyright 2009-2010, Fathi Boudra <fabo@freedesktop.org> | 9 # Copyright 2009-2010, Fathi Boudra <fabo@freedesktop.org> |
| 10 # Copyright 2009-2010, Rex Dieter <rdieter@fedoraproject.org> | 10 # Copyright 2009-2010, Rex Dieter <rdieter@fedoraproject.org> |
| (...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 300 #-------------------------------------- | 300 #-------------------------------------- |
| 301 # Checks for known desktop environments | 301 # Checks for known desktop environments |
| 302 # set variable DE to the desktop environments name, lowercase | 302 # set variable DE to the desktop environments name, lowercase |
| 303 | 303 |
| 304 detectDE() | 304 detectDE() |
| 305 { | 305 { |
| 306 if [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde; | 306 if [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde; |
| 307 elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome; | 307 elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome; |
| 308 elif `dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/D
Bus org.freedesktop.DBus.GetNameOwner string:org.gnome.SessionManager > /dev/nul
l 2>&1` ; then DE=gnome; | 308 elif `dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/D
Bus org.freedesktop.DBus.GetNameOwner string:org.gnome.SessionManager > /dev/nul
l 2>&1` ; then DE=gnome; |
| 309 elif xprop -root _DT_SAVE_MODE 2> /dev/null | grep ' = \"xfce4\"$' >/dev/nul
l 2>&1; then DE=xfce; | 309 elif xprop -root _DT_SAVE_MODE 2> /dev/null | grep ' = \"xfce4\"$' >/dev/nul
l 2>&1; then DE=xfce; |
| 310 elif [ x"$DESKTOP_SESSION" == x"LXDE" ]; then DE=lxde; | 310 fi |
| 311 else DE="" | 311 |
| 312 if [ x"$DE" = x"" ]; then |
| 313 # fallback to checking $DESKTOP_SESSION |
| 314 case "$DESKTOP_SESSION" in |
| 315 LXDE) |
| 316 DE=lxde; |
| 317 ;; |
| 318 xfce|xfce4) |
| 319 DE=xfce; |
| 320 ;; |
| 321 esac |
| 322 fi |
| 323 |
| 324 if [ x"$DE" = x"" ]; then |
| 325 # fallback to uname output for other platforms |
| 326 case "$(uname 2>/dev/null)" in |
| 327 Darwin) |
| 328 DE=darwin; |
| 329 ;; |
| 330 esac |
| 331 fi |
| 332 |
| 333 if [ x"$DE" = x"gnome" ]; then |
| 334 # gnome-default-applications-properties is only available in GNOME 2.x |
| 335 # but not in GNOME 3.x |
| 336 which gnome-default-applications-properties 2> /dev/null || DE="gnome3" |
| 312 fi | 337 fi |
| 313 } | 338 } |
| 314 | 339 |
| 315 #---------------------------------------------------------------------------- | 340 #---------------------------------------------------------------------------- |
| 316 # kfmclient exec/openURL can give bogus exit value in KDE <= 3.5.4 | 341 # kfmclient exec/openURL can give bogus exit value in KDE <= 3.5.4 |
| 317 # It also always returns 1 in KDE 3.4 and earlier | 342 # It also always returns 1 in KDE 3.4 and earlier |
| 318 # Simply return 0 in such case | 343 # Simply return 0 in such case |
| 319 | 344 |
| 320 kfmclient_fix_exit_code() | 345 kfmclient_fix_exit_code() |
| 321 { | 346 { |
| 322 [ x"$KDE_SESSION_VERSION" = x"4" ] && return 0; | 347 [ x"$KDE_SESSION_VERSION" = x"4" ] && return 0; |
| 323 version=`LC_ALL=C.UTF-8 kde-config --version 2>/dev/null | grep '^KDE'` | 348 version=`LC_ALL=C.UTF-8 kde-config --version 2>/dev/null | grep '^KDE'` |
| 324 major=`echo $version | sed 's/KDE.*: \([0-9]\).*/\1/'` | 349 major=`echo $version | sed 's/KDE.*: \([0-9]\).*/\1/'` |
| 325 minor=`echo $version | sed 's/KDE.*: [0-9]*\.\([0-9]\).*/\1/'` | 350 minor=`echo $version | sed 's/KDE.*: [0-9]*\.\([0-9]\).*/\1/'` |
| 326 release=`echo $version | sed 's/KDE.*: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/'` | 351 release=`echo $version | sed 's/KDE.*: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/'` |
| 327 test "$major" -gt 3 && return $1 | 352 test "$major" -gt 3 && return $1 |
| 328 test "$minor" -gt 5 && return $1 | 353 test "$minor" -gt 5 && return $1 |
| 329 test "$release" -gt 4 && return $1 | 354 test "$release" -gt 4 && return $1 |
| 330 return 0 | 355 return 0 |
| 331 } | 356 } |
| 332 | 357 |
| 333 # This handles backslashes but not quote marks. | 358 # This handles backslashes but not quote marks. |
| 334 first_word() | 359 first_word() |
| 335 { | 360 { |
| 336 read first rest | 361 read first rest |
| 337 echo "$first" | 362 echo "$first" |
| 338 } | 363 } |
| 339 | 364 |
| 365 last_word() |
| 366 { |
| 367 read first rest |
| 368 echo "$rest" |
| 369 } |
| 370 |
| 371 open_darwin() |
| 372 { |
| 373 open "$1" |
| 374 |
| 375 if [ $? -eq 0 ]; then |
| 376 exit_success |
| 377 else |
| 378 exit_failure_operation_failed |
| 379 fi |
| 380 } |
| 381 |
| 340 open_kde() | 382 open_kde() |
| 341 { | 383 { |
| 342 if kde-open -v 2>/dev/null 1>&2; then | 384 if kde-open -v 2>/dev/null 1>&2; then |
| 343 kde-open "$1" | 385 kde-open "$1" |
| 344 else | 386 else |
| 345 if [ x"$KDE_SESSION_VERSION" = x"4" ]; then | 387 if [ x"$KDE_SESSION_VERSION" = x"4" ]; then |
| 346 kfmclient openURL "$1" | 388 kfmclient openURL "$1" |
| 347 else | 389 else |
| 348 kfmclient exec "$1" | 390 kfmclient exec "$1" |
| 349 kfmclient_fix_exit_code $? | 391 kfmclient_fix_exit_code $? |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 388 filetype=`xdg-mime query filetype "$1" | sed "s/;.*//"` | 430 filetype=`xdg-mime query filetype "$1" | sed "s/;.*//"` |
| 389 default=`xdg-mime query default "$filetype"` | 431 default=`xdg-mime query default "$filetype"` |
| 390 if [ -n "$default" ] ; then | 432 if [ -n "$default" ] ; then |
| 391 xdg_user_dir="$XDG_DATA_HOME" | 433 xdg_user_dir="$XDG_DATA_HOME" |
| 392 [ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share" | 434 [ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share" |
| 393 | 435 |
| 394 xdg_system_dirs="$XDG_DATA_DIRS" | 436 xdg_system_dirs="$XDG_DATA_DIRS" |
| 395 [ -n "$xdg_system_dirs" ] || xdg_system_dirs=/usr/local/share/:/usr/shar
e/ | 437 [ -n "$xdg_system_dirs" ] || xdg_system_dirs=/usr/local/share/:/usr/shar
e/ |
| 396 | 438 |
| 397 for x in `echo "$xdg_user_dir:$xdg_system_dirs" | sed 's/:/ /g'`; do | 439 for x in `echo "$xdg_user_dir:$xdg_system_dirs" | sed 's/:/ /g'`; do |
| 398 local file="$x/applications/$default" | 440 local file |
| 441 # look for both vendor-app.desktop, vendor/app.desktop |
| 442 if [ -r "$x/applications/$default" ]; then |
| 443 file="$x/applications/$default" |
| 444 elif [ -r "$x/applications/`echo $default | sed -e 's|-|/|'`" ]; the
n |
| 445 file="$x/applications/`echo $default | sed -e 's|-|/|'`" |
| 446 fi |
| 447 |
| 399 if [ -r "$file" ] ; then | 448 if [ -r "$file" ] ; then |
| 400 command="`grep -E "^Exec(\[[^]=]*])?=" "$file" | cut -d= -f 2- |
first_word`" | 449 command="`grep -E "^Exec(\[[^]=]*])?=" "$file" | cut -d= -f 2- |
first_word`" |
| 401 command_exec=`which $command 2>/dev/null` | 450 command_exec=`which $command 2>/dev/null` |
| 451 arguments="`grep -E "^Exec(\[[^]=]*])?=" "$file" | cut -d= -f 2-
| last_word`" |
| 452 arguments_exec="`echo $arguments | sed -e 's*%[fFuU]*"'"$1"'"*g'
`" |
| 402 if [ -x "$command_exec" ] ; then | 453 if [ -x "$command_exec" ] ; then |
| 403 $command_exec "$1" | 454 if echo $arguments | grep -iq '%[fFuU]' ; then |
| 455 eval $command_exec $arguments_exec |
| 456 else |
| 457 eval $command_exec $arguments_exec "$1" |
| 458 fi |
| 459 |
| 404 if [ $? -eq 0 ]; then | 460 if [ $? -eq 0 ]; then |
| 405 exit_success | 461 exit_success |
| 406 fi | 462 fi |
| 407 fi | 463 fi |
| 408 fi | 464 fi |
| 409 done | 465 done |
| 410 fi | 466 fi |
| 411 } | 467 } |
| 412 | 468 |
| 413 open_generic() | 469 open_generic() |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 529 if [ -n "$DISPLAY" ]; then | 585 if [ -n "$DISPLAY" ]; then |
| 530 BROWSER=firefox:mozilla:epiphany:konqueror:chromium-browser:google-chrom
e:$BROWSER | 586 BROWSER=firefox:mozilla:epiphany:konqueror:chromium-browser:google-chrom
e:$BROWSER |
| 531 fi | 587 fi |
| 532 fi | 588 fi |
| 533 | 589 |
| 534 case "$DE" in | 590 case "$DE" in |
| 535 kde) | 591 kde) |
| 536 open_kde "$url" | 592 open_kde "$url" |
| 537 ;; | 593 ;; |
| 538 | 594 |
| 539 gnome) | 595 gnome*) |
| 540 open_gnome "$url" | 596 open_gnome "$url" |
| 541 ;; | 597 ;; |
| 542 | 598 |
| 543 xfce) | 599 xfce) |
| 544 open_xfce "$url" | 600 open_xfce "$url" |
| 545 ;; | 601 ;; |
| 546 | 602 |
| 547 lxde) | 603 lxde) |
| 548 open_lxde "$url" | 604 open_lxde "$url" |
| 549 ;; | 605 ;; |
| 550 | 606 |
| 551 generic) | 607 generic) |
| 552 open_generic "$url" | 608 open_generic "$url" |
| 553 ;; | 609 ;; |
| 554 | 610 |
| 555 *) | 611 *) |
| 556 exit_failure_operation_impossible "no method available for opening '$url'" | 612 exit_failure_operation_impossible "no method available for opening '$url'" |
| 557 ;; | 613 ;; |
| 558 esac | 614 esac |
| OLD | NEW |