blob: 1a1b325b37d4dc29ed712ebb8afe1654f2fd698c [file] [log] [blame]
dkegel@google.comf20da1f2009-06-30 19:16:32 +00001#!/bin/sh
2#---------------------------------------------
3# xdg-file-dialog
4#
5# Utility script to file selection dialogs
6# on XDG compliant systems.
7#
8# Refer to the usage() function below for usage.
9#
10# Copyright 2006, Kevin Krammer <kevin.krammer@gmx.at>
11#
12# LICENSE:
13#
14#---------------------------------------------
15
16manualpage()
17{
18cat << _MANUALPAGE
19_MANUALPAGE
20}
21
22usage()
23{
24cat << _USAGE
25_USAGE
26}
27
28#@xdg-utils-common@
29
30open_kde()
31{
32 DIALOG=`which kdialog`
33 if [ $? -eq 0 ]; then
34 if [ x"$TITLE" != x"" ]; then
35 $DIALOG --title "$TITLE" --getopenfilename "$1" ""
36 else
37 $DIALOG --getopenfilename "$1" ""
38 fi
39
40 if [ $? -eq 0 ]; then
41 exit_success
42 else
43 exit_failure_operation_failed
44 fi
45 else
46 exit_failure_operation_impossible
47 fi
48}
49
50open_zenity()
51{
52 DIALOG=`which zenity`
53 if [ $? -eq 0 ]; then
54 if [ x"$1" != x"" ]; then
55 cd `dirname "$1"` 2>/dev/null
56 FILENAME=`basename "$1"`
57 if [ x"$FILENAME" != x"" ]; then
58 FILENAME="--filename=""$FILENAME"
59 fi
60 fi
61
62 if [ x"$FILENAME" != x"" ]; then
63 if [ x"$TITLE" != x"" ]; then
64 $DIALOG --title "$TITLE" --file-selection "$FILENAME"
65 else
66 $DIALOG --file-selection "$FILENAME"
67 fi
68 else
69 if [ x"$TITLE" != x"" ]; then
70 $DIALOG --title "$TITLE" --file-selection
71 else
72 $DIALOG --file-selection
73 fi
74 fi
75
76 if [ $? -eq 0 ]; then
77 exit_success
78 else
79 exit_failure_operation_failed
80 fi
81 else
82 exit_failure_operation_impossible
83 fi
84}
85
86open_multi_kde()
87{
88 DIALOG=`which kdialog`
89 if [ $? -eq 0 ]; then
90 if [ x"$TITLE" != x"" ]; then
91 $DIALOG --title "$TITLE" --multiple --separate-output \
92 --getopenfilename "$1" ""
93 else
94 $DIALOG --multiple --separate-output --getopenfilename "$1" ""
95 fi
96
97 if [ $? -eq 0 ]; then
98 exit_success
99 else
100 exit_failure_operation_failed
101 fi
102 else
103 exit_failure_operation_impossible
104 fi
105}
106
107open_multi_zenity()
108{
109 DIALOG=`which zenity`
110 if [ $? -eq 0 ]; then
111 if [ x"$1" != x"" ]; then
112 cd `dirname "$1"` 2>/dev/null
113 FILENAME=`basename "$1"`
114 if [ x"$FILENAME" != x"" ]; then
115 FILENAME="--filename=""$FILENAME"
116 fi
117 fi
118
119 if [ x"$FILENAME" != x"" ]; then
120 if [ x"$TITLE" != x"" ]; then
121 LIST=`$DIALOG --title "$TITLE" --multiple --file-selection "$FILENAME"`
122 else
123 LIST=`$DIALOG --multiple --file-selection "$FILENAME"`
124 fi
125 else
126 if [ x"$TITLE" != x"" ]; then
127 LIST=`$DIALOG --title "$TITLE" --multiple --file-selection`
128 else
129 LIST=`$DIALOG --multiple --file-selection`
130 fi
131 fi
132
133 if [ $? -eq 0 ]; then
134 echo "$LIST" | sed s#'|'#\\n#g
135 exit_success
136 else
137 exit_failure_operation_failed
138 fi
139 else
140 exit_failure_operation_impossible
141 fi
142}
143
144save_kde()
145{
146 DIALOG=`which kdialog`
147 if [ $? -eq 0 ]; then
148 if [ x"$TITLE" != x"" ]; then
149 $DIALOG --title "$TITLE" --getsavefilename "$1" ""
150 else
151 $DIALOG --getsavefilename "$1" ""
152 fi
153
154 if [ $? -eq 0 ]; then
155 exit_success
156 else
157 exit_failure_operation_failed
158 fi
159 else
160 exit_failure_operation_impossible
161 fi
162}
163
164save_zenity()
165{
166 DIALOG=`which zenity`
167 if [ $? -eq 0 ]; then
168 if [ x"$1" != x"" ]; then
169 cd `dirname "$1"` 2>/dev/null
170 FILENAME=`basename "$1"`
171 if [ x"$FILENAME" != x"" ]; then
172 FILENAME="--filename=""$FILENAME"
173 fi
174 fi
175
176 if [ x"$FILENAME" != x"" ]; then
177 if [ x"$TITLE" != x"" ]; then
178 $DIALOG --title "$TITLE" --save --file-selection "$FILENAME"
179 else
180 $DIALOG --save --file-selection "$FILENAME"
181 fi
182 else
183 if [ x"$TITLE" != x"" ]; then
184 $DIALOG --title "$TITLE" --save --file-selection
185 else
186 $DIALOG --save --file-selection
187 fi
188 fi
189
190 if [ $? -eq 0 ]; then
191 exit_success
192 else
193 exit_failure_operation_failed
194 fi
195 else
196 exit_failure_operation_impossible
197 fi
198}
199
200directory_kde()
201{
202 DIALOG=`which kdialog`
203 if [ $? -eq 0 ]; then
204 if [ x"$TITLE" != x"" ]; then
205 $DIALOG --title "$TITLE" --getexistingdirectory "$1" ""
206 else
207 $DIALOG --getexistingdirectory "$1" ""
208 fi
209
210 if [ $? -eq 0 ]; then
211 exit_success
212 else
213 exit_failure_operation_failed
214 fi
215 else
216 exit_failure_operation_impossible
217 fi
218}
219
220directory_zenity()
221{
222 DIALOG=`which zenity`
223 if [ $? -eq 0 ]; then
224 if [ x"$1" != x"" ]; then
225 cd "$1" 2>/dev/null
226 fi
227
228 if [ x"$TITLE" != x"" ]; then
229 $DIALOG --title "$TITLE" --directory --file-selection
230 else
231 $DIALOG --directory --file-selection
232 fi
233
234 if [ $? -eq 0 ]; then
235 exit_success
236 else
237 exit_failure_operation_failed
238 fi
239 else
240 exit_failure_operation_impossible
241 fi
242}
243
244[ x"$1" != x"" ] || exit_failure_syntax
245
246TITLE=
247action=
248filename=
249
250case $1 in
251 openfilename)
252 action=openfilename
253 ;;
254
255 openfilenamelist)
256 action=openfilenamelist
257 ;;
258
259 savefilename)
260 action=savefilename
261 ;;
262
263 directory)
264 action=directory
265 ;;
266
267 *)
268 exit_failure_syntax "unknown command '$1'"
269 ;;
270esac
271
272shift
273
274while [ $# -gt 0 ] ; do
275 parm="$1"
276 shift
277
278 case "$parm" in
279 --title)
280 if [ -z "$1" ] ; then
281 exit_failure_syntax "TITLE argument missing for --title"
282 fi
283 TITLE="$1"
284 shift
285 ;;
286
287 -*)
288 exit_failure_syntax "unexpected option '$parm'"
289 ;;
290
291 *)
292 if [ -n "$filename" ] ; then
293 exit_failure_syntax "unexpected argument '$parm'"
294 fi
295 filename="$parm"
296 ;;
297 esac
298done
299
300# Shouldn't happen
301if [ -z "$action" ] ; then
302 exit_failure_syntax "command argument missing"
303fi
304
305detectDE
306
307if [ "$action" = "openfilename" ]; then
308 case "$DE" in
309 kde)
310 open_kde "$filename"
311 ;;
312
313 gnome|xfce)
314 open_zenity "$filename"
315 ;;
316
317 *)
318 exit_failure_operation_impossible "no method available for opening a filename dialog"
319 ;;
320 esac
321elif [ "$action" = "openfilenamelist" ]; then
322 case "$DE" in
323 kde)
324 open_multi_kde "$filename"
325 ;;
326
327 gnome|xfce)
328 open_multi_zenity "$filename"
329 ;;
330
331 *)
332 exit_failure_operation_impossible "no method available for opening a filename dialog"
333 ;;
334 esac
335elif [ "$action" = "savefilename" ]; then
336 case "$DE" in
337 kde)
338 save_kde "$filename"
339 ;;
340
341 gnome|xfce)
342 save_zenity "$filename"
343 ;;
344
345 *)
346 exit_failure_operation_impossible "no method available for opening a filename dialog"
347 ;;
348 esac
349elif [ "$action" = "directory" ]; then
350 case "$DE" in
351 kde)
352 directory_kde "$filename"
353 ;;
354
355 gnome|xfce)
356 directory_zenity "$filename"
357 ;;
358
359 *)
360 exit_failure_operation_impossible "no method available for opening a directory dialog"
361 ;;
362 esac
363fi