1 # 2 # Remove $1 desktop file from the list of default handlers for $2 mime type 3 # in $3 file dumping output to stdout. 4 # 5 _filter_out_default_mime_handler () 6 { 7 local defaults_list="$3" 8 9 local desktop_file="$1" 10 local mime_type="$2" 11 12 awk -f- "$defaults_list" <<EOF 13 BEGIN { 14 mime_type="$mime_type" 15 mime_type_regexp="~" mime_type "=" 16 desktop_file="$desktop_file" 17 } 18 \$0 ~ mime_type { 19 \$0 = substr(\$0, length(mime_type) + 2); 20 split(\$0, desktop_files, ";") 21 remaining_desktop_files 22 counter=0 23 for (idx in desktop_files) { 24 if (desktop_files[idx] != desktop_file) { 25 ++counter; 26 } 27 } 28 if (counter) { 29 printf mime_type "=" 30 for (idx in desktop_files) { 31 if (desktop_files[idx] != desktop_file) { 32 printf desktop_files[idx] 33 if (--counter) { 34 printf ";" 35 } 36 } 37 } 38 printf "\n" 39 } 40 next 41 } 42 43 { print } 44 EOF 45 } 46 47 48 # 49 # Remove $2 desktop file from the list of default handlers for $@ mime types 50 # in $1 file. 51 # Result is saved in $1 file. 52 # 53 _uninstall_default_mime_handler () 54 { 55 local defaults_list=$1 56 shift 57 [ -f "$defaults_list" ] || return 0 58 59 local desktop_file="$1" 60 shift 61 62 tmpfile1=$(mktemp) 63 tmpfile2=$(mktemp) 64 cat "$defaults_list" > "$tmpfile1" 65 66 local v 67 local update= 68 for mime in "$@"; do 69 _filter_out_default_mime_handler "$desktop_file" "$mime" "$tmpfile1" > "$tmpfile2" 70 v="$tmpfile2" 71 tmpfile2="$tmpfile1" 72 tmpfile1="$v" 73 74 if ! diff -q "$tmpfile1" "$tmpfile2" > /dev/null; then 75 update=yes 76 trace Remove $desktop_file default handler for $mime mime type from $defaults_list file 77 fi 78 done 79 80 if [ -n "$update" ]; then 81 cat "$tmpfile1" > "$defaults_list" 82 trace "$defaults_list" file updated 83 fi 84 85 rm -f "$tmpfile1" "$tmpfile2" 86 } 87 88 89 # 90 # Remove $1 desktop file from the list of default handlers for $@ mime types 91 # in all known system defaults lists. 92 # 93 uninstall_default_mime_handler () 94 { 95 for f in /usr/share/applications/defaults.list /usr/local/share/applications/defaults.list; do 96 _uninstall_default_mime_handler "$f" "$@" 97 done 98 } 99 100 101 trace () 102 { 103 echo "$@" 104 }