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 |