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 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 #---------------------------------------------------------------------------- | 237 #---------------------------------------------------------------------------- |
238 | 238 |
239 DEBUG() | 239 DEBUG() |
240 { | 240 { |
241 [ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && return 0; | 241 [ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && return 0; |
242 [ ${XDG_UTILS_DEBUG_LEVEL} -lt $1 ] && return 0; | 242 [ ${XDG_UTILS_DEBUG_LEVEL} -lt $1 ] && return 0; |
243 shift | 243 shift |
244 echo "$@" >&2 | 244 echo "$@" >&2 |
245 } | 245 } |
246 | 246 |
| 247 # This handles backslashes but not quote marks. |
| 248 first_word() |
| 249 { |
| 250 read first rest |
| 251 echo "$first" |
| 252 } |
| 253 |
| 254 #------------------------------------------------------------- |
| 255 # map a binary to a .desktop file |
| 256 binary_to_desktop_file() |
| 257 { |
| 258 search="${XDG_DATA_HOME:-$HOME/.local/share}:${XDG_DATA_DIRS:-/usr/local/sha
re:/usr/share}" |
| 259 binary="`which "$1"`" |
| 260 binary="`readlink -f "$binary"`" |
| 261 base="`basename "$binary"`" |
| 262 IFS=: |
| 263 for dir in $search; do |
| 264 unset IFS |
| 265 [ "$dir" ] || continue |
| 266 [ -d "$dir/applications" -o -d "$dir/applnk" ] || continue |
| 267 for file in "$dir"/applications/*.desktop "$dir"/applications/*/*.deskto
p "$dir"/applnk/*.desktop "$dir"/applnk/*/*.desktop; do |
| 268 [ -r "$file" ] || continue |
| 269 # Check to make sure it's worth the processing. |
| 270 grep -q "^Exec.*$base" "$file" || continue |
| 271 # Make sure it's a visible desktop file (e.g. not "preferred-web-bro
wser.desktop"). |
| 272 grep -Eq "^(NoDisplay|Hidden)=true" "$file" && continue |
| 273 command="`grep -E "^Exec(\[[^]=]*])?=" "$file" | cut -d= -f 2- | fir
st_word`" |
| 274 command="`which "$command"`" |
| 275 if [ x"`readlink -f "$command"`" = x"$binary" ]; then |
| 276 # Fix any double slashes that got added path composition |
| 277 echo "$file" | sed -e 's,//*,/,g' |
| 278 return |
| 279 fi |
| 280 done |
| 281 done |
| 282 } |
| 283 |
| 284 #------------------------------------------------------------- |
| 285 # map a .desktop file to a binary |
| 286 ## FIXME: handle vendor dir case |
| 287 desktop_file_to_binary() |
| 288 { |
| 289 search="${XDG_DATA_HOME:-$HOME/.local/share}:${XDG_DATA_DIRS:-/usr/local/sha
re:/usr/share}" |
| 290 desktop="`basename "$1"`" |
| 291 IFS=: |
| 292 for dir in $search; do |
| 293 unset IFS |
| 294 [ "$dir" -a -d "$dir/applications" ] || continue |
| 295 file="$dir/applications/$desktop" |
| 296 [ -r "$file" ] || continue |
| 297 # Remove any arguments (%F, %f, %U, %u, etc.). |
| 298 command="`grep -E "^Exec(\[[^]=]*])?=" "$file" | cut -d= -f 2- | first_w
ord`" |
| 299 command="`which "$command"`" |
| 300 readlink -f "$command" |
| 301 return |
| 302 done |
| 303 } |
| 304 |
247 #------------------------------------------------------------- | 305 #------------------------------------------------------------- |
248 # Exit script on successfully completing the desired operation | 306 # Exit script on successfully completing the desired operation |
249 | 307 |
250 exit_success() | 308 exit_success() |
251 { | 309 { |
252 if [ $# -gt 0 ]; then | 310 if [ $# -gt 0 ]; then |
253 echo "$@" | 311 echo "$@" |
254 echo | 312 echo |
255 fi | 313 fi |
256 | 314 |
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
592 default_dir=`kde-config --path config 2> /dev/null | cut -d ':' -f 1` | 650 default_dir=`kde-config --path config 2> /dev/null | cut -d ':' -f 1` |
593 default_file="$default_dir/profilerc" | 651 default_file="$default_dir/profilerc" |
594 fi | 652 fi |
595 if [ -z "$default_dir" ]; then | 653 if [ -z "$default_dir" ]; then |
596 DEBUG 2 "make_default_kde: No kde runtime detected" | 654 DEBUG 2 "make_default_kde: No kde runtime detected" |
597 return | 655 return |
598 fi | 656 fi |
599 DEBUG 2 "make_default_kde $vendor $mimetype" | 657 DEBUG 2 "make_default_kde $vendor $mimetype" |
600 DEBUG 1 "Updating $default_file" | 658 DEBUG 1 "Updating $default_file" |
601 mkdir -p "$default_dir" | 659 mkdir -p "$default_dir" |
602 [ -f $default_file ] || touch $default_file | 660 [ -f "$default_file" ] || touch "$default_file" |
603 if [ x"$KDE_SESSION_VERSION" = x"4" ]; then | 661 if [ x"$KDE_SESSION_VERSION" = x"4" ]; then |
604 [ -f $default_file ] || touch $default_file | 662 [ -f "$default_file" ] || touch "$default_file" |
605 awk -v application="$vendor" -v mimetype="$mimetype" ' | 663 awk -v application="$vendor" -v mimetype="$mimetype" ' |
606 BEGIN { | 664 BEGIN { |
607 prefix=mimetype "=" | 665 prefix=mimetype "=" |
608 associations=0 | 666 associations=0 |
609 found=0 | 667 found=0 |
610 blanks=0 | 668 blanks=0 |
611 } | 669 } |
612 { | 670 { |
613 suppress=0 | 671 suppress=0 |
614 if (index($0, "[Added Associations]") == 1) { | 672 if (index($0, "[Added Associations]") == 1) { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
651 if (!associations) { | 709 if (!associations) { |
652 print "[Added Associations]" | 710 print "[Added Associations]" |
653 } | 711 } |
654 print prefix application | 712 print prefix application |
655 } | 713 } |
656 while (blanks > 0) { | 714 while (blanks > 0) { |
657 print "" | 715 print "" |
658 blanks-- | 716 blanks-- |
659 } | 717 } |
660 } | 718 } |
661 ' $default_file > ${default_file}.new && mv ${default_file}.new $default_file | 719 ' "$default_file" > "${default_file}.new" && mv "${default_file}.new" "$default_
file" |
662 eval 'kbuildsycoca4'$xdg_redirect_output | 720 eval 'kbuildsycoca4'$xdg_redirect_output |
663 else | 721 else |
664 awk -v application="$vendor" -v mimetype="$mimetype" ' | 722 awk -v application="$vendor" -v mimetype="$mimetype" ' |
665 BEGIN { | 723 BEGIN { |
666 header_start="[" mimetype " - " | 724 header_start="[" mimetype " - " |
667 suppress=0 | 725 suppress=0 |
668 } | 726 } |
669 { | 727 { |
670 if (index($0, header_start) == 1 ) | 728 if (index($0, header_start) == 1 ) |
671 suppress=1 | 729 suppress=1 |
672 else | 730 else |
673 if (/^\[/) { suppress=0 } | 731 if (/^\[/) { suppress=0 } |
674 | 732 |
675 if (!suppress) { | 733 if (!suppress) { |
676 print $0 | 734 print $0 |
677 } | 735 } |
678 } | 736 } |
679 END { | 737 END { |
680 print "" | 738 print "" |
681 print "[" mimetype " - 1]" | 739 print "[" mimetype " - 1]" |
682 print "Application=" application | 740 print "Application=" application |
683 print "AllowAsDefault=true" | 741 print "AllowAsDefault=true" |
684 print "GenericServiceType=Application" | 742 print "GenericServiceType=Application" |
685 print "Preference=1" | 743 print "Preference=1" |
686 print "ServiceType=" mimetype | 744 print "ServiceType=" mimetype |
687 } | 745 } |
688 ' $default_file > ${default_file}.new && mv ${default_file}.new $default_file | 746 ' "$default_file" > "${default_file}.new" && mv "${default_file}.new" "$default_
file" |
689 fi | 747 fi |
690 } | 748 } |
691 | 749 |
692 make_default_generic() | 750 make_default_generic() |
693 { | 751 { |
694 # $1 is vendor-name.desktop | 752 # $1 is vendor-name.desktop |
695 # $2 is mime/type | 753 # $2 is mime/type |
696 # Add $2=$1 to XDG_DATA_HOME/applications/mimeapps.list | 754 # Add $2=$1 to XDG_DATA_HOME/applications/mimeapps.list |
697 xdg_user_dir="$XDG_DATA_HOME" | 755 xdg_user_dir="$XDG_DATA_HOME" |
698 [ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share" | 756 [ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share" |
699 default_file="$xdg_user_dir/applications/mimeapps.list" | 757 default_file="$xdg_user_dir/applications/mimeapps.list" |
700 DEBUG 2 "make_default_generic $1 $2" | 758 DEBUG 2 "make_default_generic $1 $2" |
701 DEBUG 1 "Updating $default_file" | 759 DEBUG 1 "Updating $default_file" |
| 760 [ -f "$default_file" ] || touch "$default_file" |
702 awk -v mimetype="$2" -v application="$1" ' | 761 awk -v mimetype="$2" -v application="$1" ' |
703 BEGIN { | 762 BEGIN { |
704 prefix=mimetype "=" | 763 prefix=mimetype "=" |
705 indefault=0 | 764 indefault=0 |
706 added=0 | 765 added=0 |
707 blanks=0 | 766 blanks=0 |
708 found=0 | 767 found=0 |
709 } | 768 } |
710 { | 769 { |
711 suppress=0 | 770 suppress=0 |
(...skipping 27 matching lines...) Expand all Loading... |
739 print "" | 798 print "" |
740 print "[Default Applications]" | 799 print "[Default Applications]" |
741 } | 800 } |
742 print prefix application | 801 print prefix application |
743 } | 802 } |
744 while (blanks > 0) { | 803 while (blanks > 0) { |
745 print "" | 804 print "" |
746 blanks-- | 805 blanks-- |
747 } | 806 } |
748 } | 807 } |
749 ' $default_file > ${default_file}.new && mv ${default_file}.new $default_file | 808 ' "$default_file" > "${default_file}.new" && mv "${default_file}.new" "$default_
file" |
750 } | 809 } |
751 | 810 |
752 defapp_generic() | 811 defapp_generic() |
753 { | 812 { |
754 MIME="$1" | 813 MIME="$1" |
755 xdg_user_dir="$XDG_DATA_HOME" | 814 xdg_user_dir="$XDG_DATA_HOME" |
756 [ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share" | 815 [ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share" |
757 xdg_user_dir="$xdg_user_dir/$xdg_dir_name" | 816 xdg_user_dir="$xdg_user_dir/$xdg_dir_name" |
758 xdg_system_dirs="$XDG_DATA_DIRS" | 817 xdg_system_dirs="$XDG_DATA_DIRS" |
759 [ -n "$xdg_system_dirs" ] || xdg_system_dirs=/usr/local/share/:/usr/share/ | 818 [ -n "$xdg_system_dirs" ] || xdg_system_dirs=/usr/local/share/:/usr/share/ |
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1315 rm -f $kde_dir/$x.desktop | 1374 rm -f $kde_dir/$x.desktop |
1316 fi | 1375 fi |
1317 done | 1376 done |
1318 ;; | 1377 ;; |
1319 esac | 1378 esac |
1320 | 1379 |
1321 update_mime_database $xdg_base_dir | 1380 update_mime_database $xdg_base_dir |
1322 | 1381 |
1323 exit_success | 1382 exit_success |
1324 | 1383 |
OLD | NEW |