| OLD | NEW |
| 1 #!/bin/sh | 1 #!/bin/sh |
| 2 #--------------------------------------------- | 2 #--------------------------------------------- |
| 3 # xdg-mime | 3 # xdg-mime |
| 4 # | 4 # |
| 5 # Utility script to manipulate MIME related information | 5 # Utility script to manipulate MIME related information |
| 6 # on XDG compliant systems. | 6 # on XDG compliant systems. |
| 7 # | 7 # |
| 8 # Refer to the usage() function below for usage. | 8 # Refer to the usage() function below for usage. |
| 9 # | 9 # |
| 10 # Copyright 2009-2010, Fathi Boudra <fabo@freedesktop.org> | 10 # Copyright 2009-2010, Fathi Boudra <fabo@freedesktop.org> |
| (...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 419 # All output to stderr | 419 # All output to stderr |
| 420 xdg_redirect_output=" >&2" | 420 xdg_redirect_output=" >&2" |
| 421 fi | 421 fi |
| 422 | 422 |
| 423 #-------------------------------------- | 423 #-------------------------------------- |
| 424 # Checks for known desktop environments | 424 # Checks for known desktop environments |
| 425 # set variable DE to the desktop environments name, lowercase | 425 # set variable DE to the desktop environments name, lowercase |
| 426 | 426 |
| 427 detectDE() | 427 detectDE() |
| 428 { | 428 { |
| 429 # see https://bugs.freedesktop.org/show_bug.cgi?id=34164 |
| 430 unset GREP_OPTIONS |
| 431 |
| 429 if [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde; | 432 if [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde; |
| 430 elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome; | 433 elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome; |
| 431 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; | 434 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; |
| 432 elif xprop -root _DT_SAVE_MODE 2> /dev/null | grep ' = \"xfce4\"$' >/dev/nul
l 2>&1; then DE=xfce; | 435 elif xprop -root _DT_SAVE_MODE 2> /dev/null | grep ' = \"xfce4\"$' >/dev/nul
l 2>&1; then DE=xfce; |
| 436 elif xprop -root 2> /dev/null | grep -i '^xfce_desktop_window' >/dev/null 2>
&1; then DE=xfce |
| 433 fi | 437 fi |
| 434 | 438 |
| 435 if [ x"$DE" = x"" ]; then | 439 if [ x"$DE" = x"" ]; then |
| 436 # fallback to checking $DESKTOP_SESSION | 440 # fallback to checking $DESKTOP_SESSION |
| 437 case "$DESKTOP_SESSION" in | 441 case "$DESKTOP_SESSION" in |
| 442 gnome) |
| 443 DE=gnome; |
| 438 LXDE) | 444 LXDE) |
| 439 DE=lxde; | 445 DE=lxde; |
| 440 ;; | 446 ;; |
| 441 xfce|xfce4) | 447 xfce|xfce4) |
| 442 DE=xfce; | 448 DE=xfce; |
| 443 ;; | 449 ;; |
| 444 esac | 450 esac |
| 445 fi | 451 fi |
| 446 | 452 |
| 447 if [ x"$DE" = x"" ]; then | 453 if [ x"$DE" = x"" ]; then |
| (...skipping 12 matching lines...) Expand all Loading... |
| 460 fi | 466 fi |
| 461 } | 467 } |
| 462 | 468 |
| 463 #---------------------------------------------------------------------------- | 469 #---------------------------------------------------------------------------- |
| 464 # kfmclient exec/openURL can give bogus exit value in KDE <= 3.5.4 | 470 # kfmclient exec/openURL can give bogus exit value in KDE <= 3.5.4 |
| 465 # It also always returns 1 in KDE 3.4 and earlier | 471 # It also always returns 1 in KDE 3.4 and earlier |
| 466 # Simply return 0 in such case | 472 # Simply return 0 in such case |
| 467 | 473 |
| 468 kfmclient_fix_exit_code() | 474 kfmclient_fix_exit_code() |
| 469 { | 475 { |
| 470 [ x"$KDE_SESSION_VERSION" = x"4" ] && return 0; | |
| 471 version=`LC_ALL=C.UTF-8 kde-config --version 2>/dev/null | grep '^KDE'` | 476 version=`LC_ALL=C.UTF-8 kde-config --version 2>/dev/null | grep '^KDE'` |
| 472 major=`echo $version | sed 's/KDE.*: \([0-9]\).*/\1/'` | 477 major=`echo $version | sed 's/KDE.*: \([0-9]\).*/\1/'` |
| 473 minor=`echo $version | sed 's/KDE.*: [0-9]*\.\([0-9]\).*/\1/'` | 478 minor=`echo $version | sed 's/KDE.*: [0-9]*\.\([0-9]\).*/\1/'` |
| 474 release=`echo $version | sed 's/KDE.*: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/'` | 479 release=`echo $version | sed 's/KDE.*: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/'` |
| 475 test "$major" -gt 3 && return $1 | 480 test "$major" -gt 3 && return $1 |
| 476 test "$minor" -gt 5 && return $1 | 481 test "$minor" -gt 5 && return $1 |
| 477 test "$release" -gt 4 && return $1 | 482 test "$release" -gt 4 && return $1 |
| 478 return 0 | 483 return 0 |
| 479 } | 484 } |
| 480 | 485 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 497 eval '$x/update-mime-database $1'$xdg_redirect_output | 502 eval '$x/update-mime-database $1'$xdg_redirect_output |
| 498 return | 503 return |
| 499 fi | 504 fi |
| 500 done | 505 done |
| 501 } | 506 } |
| 502 | 507 |
| 503 info_kde() | 508 info_kde() |
| 504 { | 509 { |
| 505 if [ x"$KDE_SESSION_VERSION" = x"4" ]; then | 510 if [ x"$KDE_SESSION_VERSION" = x"4" ]; then |
| 506 DEBUG 1 "Running kmimetypefinder \"$1\"" | 511 DEBUG 1 "Running kmimetypefinder \"$1\"" |
| 507 KMIMETYPEFINDER=`which kmimetypefinder 2>/dev/null` | 512 kmimetypefinder "$1" 2>/dev/null | head -n 1 |
| 508 $KMIMETYPEFINDER "$1" 2>/dev/null | head -n 1 | |
| 509 else | 513 else |
| 510 DEBUG 1 "Running kfile \"$1\"" | 514 DEBUG 1 "Running kfile \"$1\"" |
| 511 KFILE=`which kfile 2>/dev/null` | 515 kfile "$1" 2> /dev/null | head -n 1 | cut -d "(" -f 2 | cut -d ")" -f 1 |
| 512 $KFILE "$1" 2> /dev/null | head -n 1 | cut -d "(" -f 2 | cut -d ")" -f 1 | |
| 513 fi | 516 fi |
| 514 | 517 |
| 515 if [ $? -eq 0 ]; then | 518 if [ $? -eq 0 ]; then |
| 516 exit_success | 519 exit_success |
| 517 else | 520 else |
| 518 exit_failure_operation_failed | 521 exit_failure_operation_failed |
| 519 fi | 522 fi |
| 520 } | 523 } |
| 521 | 524 |
| 522 info_gnome() | 525 info_gnome() |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 682 print "ServiceType=" mimetype | 685 print "ServiceType=" mimetype |
| 683 } | 686 } |
| 684 ' $default_file > ${default_file}.new && mv ${default_file}.new $default_file | 687 ' $default_file > ${default_file}.new && mv ${default_file}.new $default_file |
| 685 fi | 688 fi |
| 686 } | 689 } |
| 687 | 690 |
| 688 make_default_generic() | 691 make_default_generic() |
| 689 { | 692 { |
| 690 # $1 is vendor-name.desktop | 693 # $1 is vendor-name.desktop |
| 691 # $2 is mime/type | 694 # $2 is mime/type |
| 692 # Add $2=$1 to XDG_DATA_HOME/applications/defaults.list | 695 # Add $2=$1 to XDG_DATA_HOME/applications/mimeapps.list |
| 693 xdg_user_dir="$XDG_DATA_HOME" | 696 xdg_user_dir="$XDG_DATA_HOME" |
| 694 [ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share" | 697 [ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share" |
| 695 default_file="$xdg_user_dir/applications/defaults.list" | 698 default_file="$xdg_user_dir/applications/mimeapps.list" |
| 696 DEBUG 2 "make_default_generic $1 $2" | 699 DEBUG 2 "make_default_generic $1 $2" |
| 697 DEBUG 1 "Updating $default_file" | 700 DEBUG 1 "Updating $default_file" |
| 698 grep -v "$2=" $default_file > ${default_file}.new 2> /dev/null | 701 awk -v mimetype="$2" -v application="$1" ' |
| 699 if ! grep "[Default Applications]" ${default_file}.new > /dev/null; then | 702 BEGIN { |
| 700 echo "[Default Applications]" >> ${default_file}.new | 703 prefix=mimetype "=" |
| 701 fi | 704 indefault=0 |
| 702 echo $2=$1 >> ${default_file}.new | 705 added=0 |
| 703 mv ${default_file}.new $default_file | 706 blanks=0 |
| 707 found=0 |
| 708 } |
| 709 { |
| 710 suppress=0 |
| 711 if (index($0, "[Default Applications]") == 1) { |
| 712 indefault=1 |
| 713 found=1 |
| 714 } else if (index($0, "[") == 1) { |
| 715 if (!added && indefault) { |
| 716 print prefix application |
| 717 added=1 |
| 718 } |
| 719 indefault=0 |
| 720 } else if ($0 == "") { |
| 721 suppress=1 |
| 722 blanks++ |
| 723 } else if (indefault && !added && index($0, prefix) == 1) { |
| 724 $0=prefix application |
| 725 added=1 |
| 726 } |
| 727 if (!suppress) { |
| 728 while (blanks > 0) { |
| 729 print "" |
| 730 blanks-- |
| 731 } |
| 732 print $0 |
| 733 } |
| 734 } |
| 735 END { |
| 736 if (!added) { |
| 737 if (!found) { |
| 738 print "" |
| 739 print "[Default Applications]" |
| 740 } |
| 741 print prefix application |
| 742 } |
| 743 while (blanks > 0) { |
| 744 print "" |
| 745 blanks-- |
| 746 } |
| 747 } |
| 748 ' $default_file > ${default_file}.new && mv ${default_file}.new $default_file |
| 704 } | 749 } |
| 705 | 750 |
| 706 defapp_generic() | 751 defapp_generic() |
| 707 { | 752 { |
| 708 MIME="$1" | 753 MIME="$1" |
| 709 xdg_user_dir="$XDG_DATA_HOME" | 754 xdg_user_dir="$XDG_DATA_HOME" |
| 710 [ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share" | 755 [ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share" |
| 711 xdg_user_dir="$xdg_user_dir/$xdg_dir_name" | 756 xdg_user_dir="$xdg_user_dir/$xdg_dir_name" |
| 712 xdg_system_dirs="$XDG_DATA_DIRS" | 757 xdg_system_dirs="$XDG_DATA_DIRS" |
| 713 [ -n "$xdg_system_dirs" ] || xdg_system_dirs=/usr/local/share/:/usr/share/ | 758 [ -n "$xdg_system_dirs" ] || xdg_system_dirs=/usr/local/share/:/usr/share/ |
| 714 | 759 |
| 715 for x in `echo "$xdg_user_dir:$xdg_system_dirs" | sed 's/:/ /g'`; do | 760 for x in `echo "$xdg_user_dir" | sed 's/:/ /g'`; do |
| 761 mimeapps_list="$x/applications/mimeapps.list" |
| 762 if [ -f "$mimeapps_list" ] ; then |
| 763 DEBUG 2 "Checking $mimeapps_list" |
| 764 trader_result=`awk -v mimetype="$MIME" ' |
| 765 BEGIN { |
| 766 prefix=mimetype "=" |
| 767 indefault=0 |
| 768 found=0 |
| 769 } |
| 770 { |
| 771 if (index($0, "[Default Applications]") == 1) { |
| 772 indefault=1 |
| 773 } else if (index($0, "[") == 1) { |
| 774 indefault=0 |
| 775 } else if (!found && indefault && index($0, prefix) == 1) { |
| 776 print substr($0, length(prefix) +1, length) |
| 777 found=1 |
| 778 } |
| 779 } |
| 780 ' $mimeapps_list` |
| 781 if [ -n "$trader_result" ] ; then |
| 782 echo $trader_result |
| 783 exit_success |
| 784 fi |
| 785 fi |
| 786 done |
| 787 |
| 788 for x in `echo "$xdg_system_dirs" | sed 's/:/ /g'`; do |
| 716 DEBUG 2 "Checking $x/applications/defaults.list" | 789 DEBUG 2 "Checking $x/applications/defaults.list" |
| 717 trader_result=`grep "$MIME=" $x/applications/defaults.list 2> /dev/null |
cut -d '=' -f 2 | cut -d ';' -f 1` | 790 trader_result=`grep "$MIME=" $x/applications/defaults.list 2> /dev/null |
cut -d '=' -f 2 | cut -d ';' -f 1` |
| 718 if [ -n "$trader_result" ] ; then | 791 if [ -n "$trader_result" ] ; then |
| 719 echo $trader_result | 792 echo $trader_result |
| 720 exit_success | 793 exit_success |
| 721 fi | 794 fi |
| 722 done | 795 done |
| 723 exit_success | 796 exit_success |
| 724 } | 797 } |
| 725 | 798 |
| (...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1241 rm -f $kde_dir/$x.desktop | 1314 rm -f $kde_dir/$x.desktop |
| 1242 fi | 1315 fi |
| 1243 done | 1316 done |
| 1244 ;; | 1317 ;; |
| 1245 esac | 1318 esac |
| 1246 | 1319 |
| 1247 update_mime_database $xdg_base_dir | 1320 update_mime_database $xdg_base_dir |
| 1248 | 1321 |
| 1249 exit_success | 1322 exit_success |
| 1250 | 1323 |
| OLD | NEW |