Хотел узнать использует еще кто-нибудь Gtkdialog в своей ОСи для создания GUI, хотя он и считается сильно устаревшим и не поддерживаемым, но довольно простой способ создания гуйскриптов. Так как Gtkdialog имеется в моей системе, то для себя иногда пишу скриптики и представляю простейщий быстренький просмотрщик картинок в директориях.
#!/bin/sh
[ ! "$(which gtkdialog)" ] && gxmessage 'gtkdialog NOT found' && exit
[ ! -d /tmp/img_view/aaa ] && mkdir -p /tmp/img_view/aaa
[ ! -f /tmp/img_view/dir ] && touch /tmp/img_view/dir
[ ! -f /tmp/img_view/min_xpm.xpm ] && echo '/* XPM */
static char *min_xpm_xpm[] = {"1 1 1 1"," c None",". c #000000","."};' > /tmp/img_view/min_xpm.xpm
dirs1=$(find / -type f | grep -vE "/(initrd|16|22|24|36|48|64|72|96|128|192|256|512)x?" | grep -E "\.(png|jpg|svg|xpm|gif)$" | sed "s|\(.*\)\/.*|\1|" | sort | uniq -dc | sort -hr 2> /dev/null)
dirs2=$(find / -type f | grep -vE "/(initrd|16|22|24|36|48|64|72|96|128|192|256|512)x?" | grep -E "\.(png|jpg|svg|xpm|gif)$" | sed "s|\(.*\)\/.*|\1|" | sort | uniq -dc | sort -k2 2> /dev/null)
dir=$(head -1 <<< $dirs1 | awk -F" " '{print $2}')
export sum=$(head -1 <<< $dirs1 | awk -F" " '{print $1}')
p=1; while read x ; do ln -sf "$x" /tmp/img_view/aaa/$p ; ((p++)); done <<< $(find $dir -maxdepth 1 -type f | grep -E "\.(png|jpg|svg|xpm|gif)$"); echo "$sum $dir" > /tmp/img_view/dir
list1=$(echo "$dirs1" | sed "s/.*/<item>&<\/item>/")
list2=$(echo "$dirs2" | sed "s/.*/<item>&<\/item>/")
list_act=$(for k in $(seq $sum); do echo "<action>refresh:a$k</action>"; done)
pixmaps=$(for i in $(seq $sum); do
if (("$i % 21" == 0)); then if [ "$sum" == "$i" ]; then num=""; else num="</hbox><hbox>"; fi; else num=""; fi
echo '<eventbox><pixmap><input file>/tmp/img_view/aaa/'"$i"'</input><variable>a'"$i"'</variable>
<height>43</height><width>43</width></pixmap><action signal="button-release-event">[ "'$i'" -le $(cut -d" " -f1 /tmp/img_view/dir) ] && xdg-open /tmp/img_view/aaa/'"$i"' &</action></eventbox> '"$num"''
((i++))
done)
echo '<window width-request="1500" height-request="600">
<vbox>
<hbox> <notebook tab-labels="sort_sum|sort_name" width-request="450" height-request="600">
<list>
<variable>LIST1</variable>
'$list1'
<action>rm -f /tmp/img_view/aaa/*; t=1; while read x ; do ln -sf "$x" /tmp/img_view/aaa/$t ; ((t++)); done <<< $(find "${LIST1#* }" -maxdepth 1 -type f | grep -E "\.(png|jpg|svg|xpm|gif)$"; for i in $(seq $((${LIST1%% *}+1)) $sum); do echo "/tmp/img_view/min_xpm.xpm"; done); echo "$LIST1" > /tmp/img_view/dir</action> '$list_act' <action>refresh:ENTRY</action></list>
<list>
<variable>LIST2</variable>
'$list2'
<action>rm -f /tmp/img_view/aaa/*; t=1; while read x ; do ln -sf "$x" /tmp/img_view/aaa/$t ; ((t++)); done <<< $(find "${LIST2#* }" -maxdepth 1 -type f | grep -E "\.(png|jpg|svg|xpm|gif)$"; for i in $(seq $((${LIST2%% *}+1)) $sum); do echo "/tmp/img_view/min_xpm.xpm"; done); echo "$LIST2" > /tmp/img_view/dir</action> '$list_act' <action>refresh:ENTRY</action>
</list>
</notebook>
<vbox scrollable="true"> <entry><variable>ENTRY</variable><input file>/tmp/img_view/dir</input></entry>
<hbox>
'$pixmaps'</hbox></vbox>
</hbox></vbox></window>' > /tmp/img_view/dialog
gtkdialog -f /tmp/img_view/dialog -G +200+100 &


