LINUX.ORG.RU
ФорумTalks

Gtk dialog

 ,


0

1

Хотел узнать использует еще кто-нибудь 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 &
Ответ на: комментарий от firkax

Выглядит как сам. Потому что ИИ такой бред не пишет (2 грепа подряд и потом sed сверху). Я про:

 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)

ИИ-шка пишет вместо этой лапши что-то такое:

dirs1=$(find / -type f \( -name "*.png" -o -name "*.jpg" -o -name "*.svg" -o -name "*.xpm" -o -name "*.gif" \) 2>/dev/null | 
        grep -vE "/(initrd|16|22|24|36|48|64|72|96|128|192|256|512)x?" | 
        xargs -I {} dirname "{}" | 
        sort | uniq -dc | sort -hr)

или

dirs1=$(find / -type f \( -name "*.png" -o -name "*.jpg" -o -name "*.svg" -o -name "*.xpm" -o -name "*.gif" \) 2>/dev/null | 
        awk -F'/' '!/(initrd|16|22|24|36|48|64|72|96|128|192|256|512)x?/{NF--; OFS="/"; print $0}' | 
        sort | uniq -dc | sort -hr)
peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)

У меня он установлен и в каких-то скриптах на скорую руку использовался.

wandrien ★★★★
()

А winetricks до сих пор Zenity использует.

yars068 ★★★★★
()
Вы не можете добавлять комментарии в эту тему: только для зарегистрированных, score>=50.