|
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 } |