OLD | NEW |
1 #!/bin/sh | 1 #!/bin/sh |
2 #--------------------------------------------- | 2 #--------------------------------------------- |
3 # xdg-settings | 3 # xdg-settings |
4 # | 4 # |
5 # Utility script to get various settings from the desktop environment. | 5 # Utility script to get various settings from the desktop environment. |
6 # | 6 # |
7 # Refer to the usage() function below for usage. | 7 # Refer to the usage() function below for usage. |
8 # | 8 # |
9 # Copyright 2009, Google Inc. | 9 # Copyright 2009, Google Inc. |
10 # | 10 # |
(...skipping 26 matching lines...) Expand all Loading... |
37 ;; | 37 ;; |
38 *) | 38 *) |
39 exit_failure_syntax "invalid application name" | 39 exit_failure_syntax "invalid application name" |
40 ;; | 40 ;; |
41 esac | 41 esac |
42 } | 42 } |
43 | 43 |
44 # {{{ default browser | 44 # {{{ default browser |
45 # {{{ utility functions | 45 # {{{ utility functions |
46 | 46 |
47 # This handles backslashes but not quote marks. | |
48 first_word() | |
49 { | |
50 read first rest | |
51 echo "$first" | |
52 } | |
53 | |
54 binary_to_desktop_file() | |
55 { | |
56 search="${XDG_DATA_HOME:-$HOME/.local/share}:${XDG_DATA_DIRS:-/usr/local/sha
re:/usr/share}" | |
57 binary="`which "$1"`" | |
58 binary="`readlink -f "$binary"`" | |
59 base="`basename "$binary"`" | |
60 IFS=: | |
61 for dir in $search; do | |
62 unset IFS | |
63 [ "$dir" ] || continue | |
64 [ -d "$dir/applications" -o -d "$dir/applnk" ] || continue | |
65 for file in "$dir"/applications/*.desktop "$dir"/applnk/*.desktop; do | |
66 [ -r "$file" ] || continue | |
67 # Check to make sure it's worth the processing. | |
68 grep -q "^Exec.*$base" "$file" || continue | |
69 # Make sure it's a visible desktop file (e.g. not "preferred-web-bro
wser.desktop"). | |
70 grep -Eq "^(NoDisplay|Hidden)=true" "$file" && continue | |
71 command="`grep -E "^Exec(\[[^]=]*])?=" "$file" | cut -d= -f 2- | fir
st_word`" | |
72 command="`which "$command"`" | |
73 if [ x"`readlink -f "$command"`" = x"$binary" ]; then | |
74 # Fix any double slashes that got added path composition | |
75 echo "$file" | sed -e 's,//*,/,g' | |
76 return | |
77 fi | |
78 done | |
79 done | |
80 } | |
81 | |
82 desktop_file_to_binary() | |
83 { | |
84 search="${XDG_DATA_HOME:-$HOME/.local/share}:${XDG_DATA_DIRS:-/usr/local/sha
re:/usr/share}" | |
85 desktop="`basename "$1"`" | |
86 IFS=: | |
87 for dir in $search; do | |
88 unset IFS | |
89 [ "$dir" -a -d "$dir/applications" ] || continue | |
90 file="$dir/applications/$desktop" | |
91 [ -r "$file" ] || continue | |
92 # Remove any arguments (%F, %f, %U, %u, etc.). | |
93 command="`grep -E "^Exec(\[[^]=]*])?=" "$file" | cut -d= -f 2- | first_w
ord`" | |
94 command="`which "$command"`" | |
95 readlink -f "$command" | |
96 return | |
97 done | |
98 } | |
99 | |
100 # In order to remove an application from the automatically-generated list of | 47 # In order to remove an application from the automatically-generated list of |
101 # applications for handling a given MIME type, the desktop environment may copy | 48 # applications for handling a given MIME type, the desktop environment may copy |
102 # the global .desktop file into the user's .local directory, and remove that | 49 # the global .desktop file into the user's .local directory, and remove that |
103 # MIME type from its list. In that case, we must restore the MIME type to the | 50 # MIME type from its list. In that case, we must restore the MIME type to the |
104 # application's list of MIME types before we can set it as the default for that | 51 # application's list of MIME types before we can set it as the default for that |
105 # MIME type. (We can't just delete the local version, since the user may have | 52 # MIME type. (We can't just delete the local version, since the user may have |
106 # made other changes to it as well. So, tweak the existing file.) | 53 # made other changes to it as well. So, tweak the existing file.) |
107 # This function is hard-coded for text/html but it could be adapted if needed. | 54 # This function is hard-coded for text/html but it could be adapted if needed. |
108 fix_local_desktop_file() | 55 fix_local_desktop_file() |
109 { | 56 { |
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
608 ;; | 555 ;; |
609 | 556 |
610 generic) | 557 generic) |
611 dispatch_generic "$@" | 558 dispatch_generic "$@" |
612 ;; | 559 ;; |
613 | 560 |
614 *) | 561 *) |
615 exit_failure_operation_impossible "unknown desktop environment" | 562 exit_failure_operation_impossible "unknown desktop environment" |
616 ;; | 563 ;; |
617 esac | 564 esac |
OLD | NEW |