From c89f8e5b2eae08cd14623b30c0293b30d1e33b54 Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Sun, 20 Apr 2008 01:42:55 -0400 Subject: [PATCH] Initial Commit. --- .gitignore | 2 + bgmenu.sh | 20 + bindings | 28 + config | 116 ++++ icons/firefox.png | Bin 0 -> 1623 bytes icons/games.svg | 591 +++++++++++++++++++ icons/gens.png | Bin 0 -> 1439 bytes icons/gmpc.png | Bin 0 -> 984 bytes icons/logout.svg | 144 +++++ icons/music.svg | 200 +++++++ icons/network.svg | 1015 +++++++++++++++++++++++++++++++++ icons/next.svg | 228 ++++++++ icons/pan.png | Bin 0 -> 2026 bytes icons/pause.svg | 229 ++++++++ icons/play.svg | 212 +++++++ icons/prev.svg | 228 ++++++++ icons/reload.svg | 397 +++++++++++++ icons/shuffle.svg | 199 +++++++ icons/sonic.png | Bin 0 -> 405 bytes icons/stop.svg | 212 +++++++ icons/terminal.svg | 704 +++++++++++++++++++++++ icons/wallpaper.svg | 850 +++++++++++++++++++++++++++ icons/xchat.png | Bin 0 -> 1424 bytes mpdmenu.pl | 412 +++++++++++++ nickstheme | 115 ++++ panels | 29 + pixmaps/close-active.png | Bin 0 -> 346 bytes pixmaps/close-inactive.png | Bin 0 -> 402 bytes pixmaps/close-pressed.png | Bin 0 -> 834 bytes pixmaps/iconify-active.png | Bin 0 -> 181 bytes pixmaps/iconify-inactive.png | Bin 0 -> 154 bytes pixmaps/iconify-pressed.png | Bin 0 -> 583 bytes pixmaps/maximise-active.png | Bin 0 -> 272 bytes pixmaps/maximise-inactive.png | Bin 0 -> 214 bytes pixmaps/maximise-pressed.png | Bin 0 -> 675 bytes pixmaps/restore-active.png | Bin 0 -> 350 bytes pixmaps/restore-inactive.png | Bin 0 -> 274 bytes pixmaps/restore-pressed.png | Bin 0 -> 812 bytes pixmaps/shade-active.png | Bin 0 -> 444 bytes pixmaps/shade-inactive.png | Bin 0 -> 304 bytes pixmaps/shade-pressed.png | Bin 0 -> 760 bytes pixmaps/test.png | Bin 0 -> 118 bytes pixmaps/titlebar.png | Bin 0 -> 270 bytes pixmaps/unshade-active.png | Bin 0 -> 452 bytes pixmaps/unshade-inactive.png | Bin 0 -> 304 bytes pixmaps/unshade-pressed.png | Bin 0 -> 709 bytes resize.sh | 36 ++ rootmenu | 50 ++ thumbnail.sh | 67 +++ wallpaper | 26 + windowmenu | 53 ++ 51 files changed, 6163 insertions(+) create mode 100644 .gitignore create mode 100755 bgmenu.sh create mode 100644 bindings create mode 100644 config create mode 100644 icons/firefox.png create mode 100644 icons/games.svg create mode 100644 icons/gens.png create mode 100644 icons/gmpc.png create mode 100644 icons/logout.svg create mode 100644 icons/music.svg create mode 100644 icons/network.svg create mode 100644 icons/next.svg create mode 100644 icons/pan.png create mode 100644 icons/pause.svg create mode 100644 icons/play.svg create mode 100644 icons/prev.svg create mode 100644 icons/reload.svg create mode 100644 icons/shuffle.svg create mode 100644 icons/sonic.png create mode 100644 icons/stop.svg create mode 100644 icons/terminal.svg create mode 100644 icons/wallpaper.svg create mode 100644 icons/xchat.png create mode 100755 mpdmenu.pl create mode 100644 nickstheme create mode 100644 panels create mode 100644 pixmaps/close-active.png create mode 100644 pixmaps/close-inactive.png create mode 100644 pixmaps/close-pressed.png create mode 100644 pixmaps/iconify-active.png create mode 100644 pixmaps/iconify-inactive.png create mode 100644 pixmaps/iconify-pressed.png create mode 100644 pixmaps/maximise-active.png create mode 100644 pixmaps/maximise-inactive.png create mode 100644 pixmaps/maximise-pressed.png create mode 100644 pixmaps/restore-active.png create mode 100644 pixmaps/restore-inactive.png create mode 100644 pixmaps/restore-pressed.png create mode 100644 pixmaps/shade-active.png create mode 100644 pixmaps/shade-inactive.png create mode 100644 pixmaps/shade-pressed.png create mode 100644 pixmaps/test.png create mode 100644 pixmaps/titlebar.png create mode 100644 pixmaps/unshade-active.png create mode 100644 pixmaps/unshade-inactive.png create mode 100644 pixmaps/unshade-pressed.png create mode 100755 resize.sh create mode 100644 rootmenu create mode 100755 thumbnail.sh create mode 100644 wallpaper create mode 100644 windowmenu diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8f070d6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.thumbs +wallpaper.png diff --git a/bgmenu.sh b/bgmenu.sh new file mode 100755 index 0000000..36d94f1 --- /dev/null +++ b/bgmenu.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# Generates an FVWM menu for selecting the PNG images found in a given +# directory. Thumbnails for the images are generated on the fly using convert +# from ImageMagick, and stored in the .thumbs subdirectory. The menu items +# run the specified function with the filename as the first argument. + +menu="MenuWallpaper" +func="SetWallpaper" +thumber="$HOME/.fvwm/thumbnail.sh" + +if [ ! -d "$1" ]; then + echo "usage: $0 [menuname]" 1>&2 + exit 1 +fi +[ -n "$2" ] && menu="$2" + +for i in "$1"/*.png; do + thumb="`$thumber --size x160 "$i"`" + echo "AddToMenu $menu \"`basename "${i%.png}"`*$thumb*\" $func \"$i\"" +done diff --git a/bindings b/bindings new file mode 100644 index 0000000..cde99b3 --- /dev/null +++ b/bindings @@ -0,0 +1,28 @@ +# Globalbinds covers these. +Key Page_Down A CM Nop +Key Page_Up A CM Nop +Key End A CM Nop +Key Home A CM Nop +Key Insert A CM Nop +Key N A CM Nop + +# For moving windows around desktops. +Key J WFT CM DoPageMove 0 +Key K WFT CM DoPageMove 1 +Key L WFT CM DoPageMove 2 +Key U WFT CM DoPageMove 3 +Key I WFT CM DoPageMove 4 +Key O WFT CM DoPageMove 5 + +# For moving ourself around desktops. +Key 1 A CM GotoPage 0 0 +Key 2 A CM GotoPage 1 0 +Key 3 A CM GotoPage 2 0 +Key 4 A CM GotoPage 3 0 +Key 5 A CM GotoPage 4 0 +Key 6 A CM GotoPage 5 0 + +DestroyFunc DoPageMove +AddToFunc DoPageMove ++ I GotoPage $0 0 ++ I MoveToPage $0 0 diff --git a/config b/config new file mode 100644 index 0000000..25c45f4 --- /dev/null +++ b/config @@ -0,0 +1,116 @@ +# Global stuff +ExecUseShell /bin/zsh +ImagePath $[FVWM_USERDIR]/icons:$[FVWM_USERDIR]/pixmaps +DestroyFunc InitFunction +DestroyFunc StartFunction +DestroyFunc ExitFunction +SetEnv TERMINAL /home/nick/bin/urxvt.sh + +# Features +Read nickstheme +Read rootmenu +Read wallpaper +Read windowmenu +Read bindings +Read panels + +# Virtual Desktops +DesktopSize 6x1 +EdgeThickness 1 +EdgeResistance 1 0 +EdgeScroll 0 0 + +##### +# Mouse and Focus Behavior +########### +ClickTime 350 +MoveThreshold 3 +Style * SloppyFocus +CursorStyle Default left_ptr +CursorStyle Title left_ptr +CursorStyle Root left_ptr +CursorStyle Menu left_ptr + +# Global Styles and Options +HideGeometryWindow Move +OpaqueMoveSize -1 +Style * TileCascadePlacement, GrabFocusOff +Style * ResizeOpaque +Style * EWMHUseStrutHints, MwmButtons +EwmhBaseStruts 0 0 0 42 + +# Bindings +Key grave A C Exec exec $[TERMINAL] + +# FVWM Console +Key F3 A M Module FvwmConsole -terminal $[TERMINAL] +Key F3 A M2 Module FvwmConsole -terminal $[TERMINAL] + +# Close Window +Key F4 A M Close +Key F4 A M2 Close + +# Window Buttons +Mouse 1 I N IconClick +Mouse 3 I N Menu MenuWindow + +DestroyFunc IconClick +AddToFunc IconClick ++ M Move ++ C Iconify False + +##### +# Conky +########## +Style "*conky" !Borders, NoTitle, Sticky, StaysOnBottom + +Style "urxvt" MiniIcon "$[FVWM_USERDIR]/icons/terminal.svg:16x16" +Style "urxvt" Icon "$[FVWM_USERDIR]/icons/terminal.svg:48x48" + +# Application-specific settings +Style Xchat DecorateTransient +Style EasyTag_Scanner DecorateTransient +Style "Open Image" DecorateTransient + +##### +# Modifier Key +########## +DestroyFunc Mouse1Func +AddToFunc Mouse1Func + + C Raise + + D Maximize 100 100 + + M Move + +DestroyFunc Mouse2Func +AddToFunc Mouse2Func + + C Menu MenuWindow + + D Maximize 0 100 + +DestroyFunc Mouse3Func +AddToFunc Mouse3Func + + C Lower + + D Maximize 100 0 + + M PipeRead '. $[FVWM_USERDIR]/resize.sh $[pointer.wx] $[pointer.wy] $[w.width] $[w.height]' + + +Mouse 1 WFT M Mouse1Func +Mouse 2 WFT M Mouse2Func +Mouse 3 WFT M Mouse3Func + +# URGENT! + +DestroyFunc UrgencyFunc +AddToFunc UrgencyFunc ++ I Nop + +DestroyFunc UrgencyDoneFunc +AddToFunc UrgencyDoneFunc ++ I Nop + +Style xeyes !Title +Style MPlayer EWMHUseStackingOrderHints + +# Initialization +AddToFunc InitFunction ++ I Exec exec xscreensaver ++ I Exec exec gmpc diff --git a/icons/firefox.png b/icons/firefox.png new file mode 100644 index 0000000000000000000000000000000000000000..be892aa2d137025781e096184653a808d5c32752 GIT binary patch literal 1623 zcmV-d2B`UoP)YfzN;6~=$N?=HLSF0jCY1YUH7#D;+wR4j`^73@UgXhU08Y9Ja(D~_hk zWW}0RlhQUOj=`mg>7>b!sx{RhiI=erO$;-{RF;Se*g&|5qAwKXeurf*|9-Hs)6ArG z+ULtTGiT;J&zW=PJSy%Lv8rxUrRd)LWo~Ob4>EPh_W)S5w zk!@QlD(T3%s&D^N(+7xOZXjp40P1Ed1zmVByQ;b&@RX;ccri3}^(SDeDtb2B! z4nkJln%mh4G3D*ae+lk#Ud#UI?8k-9B{x%h=Cl@;rhOfc`pe{JeJT3_8=bc3?}x0i z-g?$WX+lAMzDpLV^L8aR*_73V=2gl%h`-!FuVp^?%Y{wYK-fi%P@qdSkmbD(r1XG% z%|+SqMbhs>OwT)QAH4a>PZmbF^ zHDex!r!NPK%X?vQRQJJie}vcLXZ5e0f|+eTqh=3y`rR+j)PwKMNL|P;p*^B2mPepT zG#(wk2|u*w6iZgw@px5=Coa#ivc=r1>zUi!e0`v+$d{@8=!wCh_p|TO{e8cXc zZ$jkh{_Lh=2s=C-ajOk_B&BR(J~W&Qte?FZdfQFsL&sry+T;tegJ-w*8J`ib>v{th zLF=KB;z&K5dEnFRsb#P`Yh_Jq2B^BdUP%q7d;i)wTv<_}Nk0+sj`oz@9_0;5axVb? z68|%5HAwGkmT9#hV*Iapj>7%PF{%1``0cWY>MMVS^~aQ^pwFNqA}V|FV&K?hy!$G^ zE#p8VfRr1sAHu49KF?MdsqZdwS3~-FGx}7!J+v_JRjE#PXp#@B908~8c6aJ{l?MoX z&%A_MP}gZPBt1wwLS8htK-#fB z4m9p=92`xA9Ql)lVGqNl{Nc**Du9s@PYOWa@{v&h{m)IC0D4c|&I7n{tfK?ggj+Kd z8R&8^)SLi=A<7$Y32CM*)V-%bQC}w7j~R5wt1pT@P5c^QDB*SheA}3^*LxjEo8G3* z1&DMbL&Kl0R!?qGoa)vv?{!h`iXB{WQ~dKD?Eq0xmOZNN5H=YeuDuPbC#J793_xqB z#q#oF@Q37pQwI;il8PJOI}XIyx^rukJ1gkd!$YfsKkN;FhaR<_pcF_m3|NjpTh(~z z)LQtvdL+oRs5VwpS0`#z-7dLzd8dO|2wO9!02i1xMe6(|AWi5u`8R;{p|nQ36ZXzJ z7p0mFHSJSn(YesrC#5Hr1CRDMx7R}E8`cc>J8+=xJ1==s!2HyMrsPUM8T;|byHHmA zw$!)tUyteTCoBxr=1J);IeV6>!soLo)}BH)Q32+&-@0gg5)9vn&y!87p3)1o1;r}QR-3lADXZ0Q(q9`c#dI( zdZ`fa7e#E7tU|n=7ay;05MtwC+$F;bm#jad(WsZ&l>d$RzoFuesRYE|ne6`|`UhMa VW)Ix(9E<<}002ovPDHLkV1lp+5Jdn0 literal 0 HcmV?d00001 diff --git a/icons/games.svg b/icons/games.svg new file mode 100644 index 0000000..74497cc --- /dev/null +++ b/icons/games.svg @@ -0,0 +1,591 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + Games category + August 2006 + + + Andreas Nilsson + + + http://www.gnome.org + + + games + entertainment + fun + joystick + controller + + + + + Jakub Steiner +Lapo Calamandrei + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/gens.png b/icons/gens.png new file mode 100644 index 0000000000000000000000000000000000000000..fe385b6191702224191141315e897b0202ddb573 GIT binary patch literal 1439 zcmW;M3p5jY90%~xY*d?-Y#I{sh#`?~uGc)r<~eaa^GK2-&m+%q)xDBdt~@stQ--av z732Qb_j7*#-#Nc?{^$J8`JeO8adUA%?8NSbKp+T5f~^PW zC~=`+;B*aDR|5?eLUgc&Y>CY)3}u0dObo#%9(2O5vhR(w5Dyb$@Zq5Ux)1U1zSjkT zNa;A*;ynpH)WS#-Ib5M9V>zKLE;h2zy*d}wuy6F-5j^%$ScjxAzYj;PQC!LL`=l|b z!5Ny$mQ-7iq~Y!xVi5nVOAxA#UL=vE?{w!ho%xEky(}F?dfNG*i@0cZE1hqORcsKo zmzB*Vzu*3zp`R>h$*%%5ee~G|06e2ZEKmlBc&&!@xO_ttAy<%^tzODA5eI&k4 zD@k&C;@kNe-0fG-M5Hb#5^*`)NJNVrB-oXQdAXl%kriKN7F)7?DzHSh6Lu`1V~ zVnI6bfE>wTB_JRAtSOFu2u~;@_aj9WMmzDDn*k3W>kM|bj<==><1VX+Wx}U`;Pu!~ z%*iCfJKK5R78^8z>apyq3&ETej_LaTJ2Y}%9Sy%f0d^Cw<>o3%Flm`M-~1zWzMhp4YjVBxJWUHSqW(|sEZT#x>_~_{joBTtL z`5h1X00ia4l<3C|r@S_q^d03*HBof`augJgg1RkvFUgt)b1rZ$q$xu$8X1kcpKWM< zH@3i)XiAJ;6pSJm+E*CTiI2hlT@s6c-t^+jvC?Kaq_;B1)L-gwl#YDnTUswbn zWeu`>gr<1{nwRAGd~%Iel3K0g*D$g2k@=MrQLc=$=8fLdS%KbltP!cF< zES0d9#*`S`s5(Viv=%M()Pw7Z`->=FtmCpRG33@&$9;N_=H<+S`Le_UamH^Lmx=&% zQk4Dgasml5xuOnYY%;LQOLey?iPIDM&Pgj!?LUqo>PMP^wQc5BvXXh?GJha6s1Yq6 z(GI`q!ep^8X~+>Z1ru=V95=NBTNy%INt$6VoQ1g;_#kCZS;9>KKN|xaF+NN$aOUyr z2F@B|so(!pSv6ls<-@~sU!!m9!9FIuTFPjXAr|WgJc?ESjGRMyd0Kf8#XNWIrODCc z{K_jim7FdFmfl^(?W|#t?U+|O)RUmsQS^w;(X2+P$Qh|0`Du=Ahn`pSsy%9~l+f9h z6y@g{m@R?q>sx*Aug9B$jmbqz*d=U+QD?0b3(fY0fT!!BI|LfW)2AP`WBe)7njq%|(A;Ms+&>sPd5s#8xfCNd=IyR|X!YG9-${ER zl{X-Jkg3azv^!ql80Jw5{ppe(?lscdFRiv}^cJ|AXF@ZneS*9NbG^uvu>S^lWj%}j z>bF^b+5hTkUpH?6PPMM=*S4B2yo$2>k~XK~AItc$W`lmrvn zMMaBA7tzhciN(Aa=qO=*5a|dnA|@C?8>A%zjhr&02+eH8q}A!-&4jgSMnd%5{5XG} z_x%6w^Y8-jZ`Pj8Xb26Vq03z|K_~*7 zV`j{Z`QjNBPyrR#J&SdhyNa!1t5{!rbz|v$%!z9fzr-)`KVHJ$*0Y$J+VXgLygYt% zChws06=vTsm8Q~ES`_JVdYm2)zQy|c6Z$%RoxX0eiEJa=$hK{#3J1{d19M;w%!wj! z0T*zIBGy-^r}ea+e*PeD0(5^Rtb~=Y;b6{@bL1QVFpW$j)7Ufxm*5gylAj~AgqF~1 zrS*~eNPXm1ZQ%f#NfMEWL;$Fp)y?YWh5h**&;?!4_2p5K5gyCx(z>)REs6%gAQ*%L zB-Upn&URQggj<0M9el%X(R_D53;P zpaeQxENb2gKGteVHKm$T%X!E^1~LF}Bisl#V();Xa1@S8XB9|+6o~G!(Kgyfd#8)6 zAXyeF3zdaF*)n{F&+wT+u)bRF3S{+|WxFsVmrOBJ%oKZRUCXJ+GhDbrx=A^@_=M;sdWqgQsde6br6``_DPFf#+9U0e_Q+%< zLWxi!AeC}VIi?)z=*L~ZKCfjOv&O73dwbI#2Uxw_Q)>mNp0A#-p6|Qx_r0Sa3ZmsN zDh4VBDh85Ie;Nlt5ClchV=-0C?I2D?NCf~q`Uav4$qZ-!0000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/music.svg b/icons/music.svg new file mode 100644 index 0000000..1ad1b5c --- /dev/null +++ b/icons/music.svg @@ -0,0 +1,200 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/network.svg b/icons/network.svg new file mode 100644 index 0000000..8b37ee3 --- /dev/null +++ b/icons/network.svg @@ -0,0 +1,1015 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + Web Browser + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/next.svg b/icons/next.svg new file mode 100644 index 0000000..7339051 --- /dev/null +++ b/icons/next.svg @@ -0,0 +1,228 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/pan.png b/icons/pan.png new file mode 100644 index 0000000000000000000000000000000000000000..b6ed8c55dd3afc2776692fa17af62d32fd43cd70 GIT binary patch literal 2026 zcmW;Nc|6m990%|(LgW}B{4hD@Na-M9nA#kz@REiK@VoCNJRh>vsH zc`GY%;((v2jVS;$WF6YQ#>=_$d0CmmfxUetlu9gTA`oohiUxo~;`_}t%81$BAKnQz z_2cB%ZV&E4iL?1dUXtr5iQxv?$%z4nU zkaR%2<0v^iwxn}&cYCf_AN>;jRu3&Qv$h>=3@*$c!*GZn^v{(oH%o==KKZ;w>u<;~ zIjRpm1%*O$PA*T7f3DZzbNk+$LchVm9OsG8Gv7PG*RpT<`&*dFwV(s;80If}xR4e$ z8rxysp(E8n_nG<*aL&sUTm$9o!dh8jPMxGnOl zKno7RCI*LKAtoudMJj{19bCTt27UQkNF)(y>+s%rUNclu$$^RDP}B<~U*|}&CcA{z z&bv9VoX6bug%`6sIH0fHYF%nR4mC=Ro_Di&6vk(mfbZ72Y12~S=H%LH$EaL#(uULX zzHnqdx)k}Ry>5th%QpO};i!BRb};YT#gKB;hF1d4m{8Hl5j)sbwrW0`)jv-BK<7X< zY{GuWvv?NS8V`F$Mxy0CUyX5@{;jyq?y2b@U{|wqsGhq(Bk5X2+;}EAb6lkB1$C_< zoPYY^3Vsy1iDEb&F}Y`CiA!jArLWd`{SxXkJ{TryF#mLW|d3uvOyL zwxd|C)IRy)xu)$~#xNi8LO5i4Bl6x=u;Oz;^?1n=?7VWQILevxZq=?;%$>|52d(+I z<1JAq1A>E33QJc>?|z5zhGC7ZC+Df|djqsz&CtcqAk_g0AHmZyW|ry#syXI~%}E?m z@ANMla`0TwaP|HK^jPf!%6xLu#j`^#WmP=l0*21|7IVYHl=7=YB3d>+E?*7cEx6m7 zO5}&IYzEX=TrbPlFHDUl@Io9vg}oPz|y zK|(R_V!5M+;(s~o7Iy*G&DMOjtn_Mnia9h+?M)N)Fdx)pV|QZB2^f3J)*BN^rx>!9 zq=mQGF?my>^OGBkJ1kGlBa|nU9?cSzKLV*Guft z7WO>r*ko4BuP#S#jn)sK@rkhs_@Xq*LZ?^eD}ep7TRM24&8F!x9RiEc-g>;E0IRF4 z!~TpP8F84LS4WA<6k7*&eRu!-V^$j%`Dkiy({I}?*@XIJ=3QGX{xvg%OmC>K5)Vox z^;+pXY)7P5{dTIu-y}_vd;Om&u}BSq(-gm&Tgyf~LY3w}g(|tIW>hDt8OrAe;`e|k zuq+ak9>uTdoSWtbAlnN;V^**N=@8d8erdXiBAC8BL=awAYwpHS{JV8zXcAVvI>&KG z)vDEGA=Rk~nTDD5a^Z5tI6wR=yx-;WVaOW}xVh_&7TA5~9J3?zs)4rrmDNzhtF+3v z&&n}JrFhOnA?pfdy82s;nvV0(eFNJL#iv{l%MtVB#;fA-CQH#8VG7|fXO*MZMVm{7 z11M=e>Jyk5B7yHTUyN>c_qq^i-?|V+YY?*lPUD?Aq{%xKL}WyJuVoDD8CP4`SV~qt z%dUaHyKwkC>EIp{>^c7{OW6e}cIPsZ3ywe#2?W63KFJvNns%e51C}uBXWmy6h}N$T zmd_II=@V{aBzbuMBlMy`bfBZC<57p~LdL0np+0H01Ir)^PkGBKs`YgrpU9D=ScA** zjo3D0OLYteb^#Qk@d&?6%66EWD+D|*ywBV;aasn(S$tTCZubf){$Ye zFDXxzgRXSm8`&a!N6g03t~Xx)^wx*1hF0<8_`b@X$)|cywP*K|?nWo)x9wMRbDUJ-nd-Htzq|>>Jo|J<8 y$8TqX&&g%NvhSUYI{RC(0XeF2>SEFJ&Dg_w*k!E3LOAF51uPM^@VfJ;`~L%$Xxg3t literal 0 HcmV?d00001 diff --git a/icons/pause.svg b/icons/pause.svg new file mode 100644 index 0000000..705c395 --- /dev/null +++ b/icons/pause.svg @@ -0,0 +1,229 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/play.svg b/icons/play.svg new file mode 100644 index 0000000..2b1976f --- /dev/null +++ b/icons/play.svg @@ -0,0 +1,212 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/prev.svg b/icons/prev.svg new file mode 100644 index 0000000..2727344 --- /dev/null +++ b/icons/prev.svg @@ -0,0 +1,228 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/reload.svg b/icons/reload.svg new file mode 100644 index 0000000..fb51a42 --- /dev/null +++ b/icons/reload.svg @@ -0,0 +1,397 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Jakub Steiner + + + http://jimmac.musichall.cz + + View Refresh + + + reload + refresh + view + + + + + Ricardo 'Rick' González + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/shuffle.svg b/icons/shuffle.svg new file mode 100644 index 0000000..f031c33 --- /dev/null +++ b/icons/shuffle.svg @@ -0,0 +1,199 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/sonic.png b/icons/sonic.png new file mode 100644 index 0000000000000000000000000000000000000000..26dc0eb024aeb0cabe2f01434f3b04de7b61e6c2 GIT binary patch literal 405 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%b@U_I1CZGssfk$L9 zkoEv$x0Bg+Ai=T%$8;bK*3S@gZ0%tN21W%>7sn8b)4h{7RyG?5wAMdO7TC4J_@+Z_ z%%r}ODVmaw(laJa;ww*UxqV=Y-c1GN7_O!Xq7$E#me0Ree`#`xhexRCnqI>;*;LKq z!da6Jh-myio%4Cl*6Ft*za`jhVd!8MJb3n;GXsB;*!xPZ%*%UkszrC7p1b~a72{2t z_B+4!vA=OlnaB9zcYVu_)D6A`rU!aX6!nN^Ge)B)|5L qM!k>zZowON*WQ`?GCDtArEe&-`_HbG#g~Br$KdJe=d#Wzp$P!qtfu(@ literal 0 HcmV?d00001 diff --git a/icons/stop.svg b/icons/stop.svg new file mode 100644 index 0000000..55f7469 --- /dev/null +++ b/icons/stop.svg @@ -0,0 +1,212 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/terminal.svg b/icons/terminal.svg new file mode 100644 index 0000000..3b60478 --- /dev/null +++ b/icons/terminal.svg @@ -0,0 +1,704 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Terminal Emulator + July 2006 + + + Andreas Nilsson + + + http://www.gnome.org + + + Lapo Calamandrei + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/wallpaper.svg b/icons/wallpaper.svg new file mode 100644 index 0000000..49c4672 --- /dev/null +++ b/icons/wallpaper.svg @@ -0,0 +1,850 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Desktop Wallpaper + + + Luca Ferretti <elle.uca@libero.it> + + + + + + monitor + display + video + screen + LCD + CRT + + + + + Andreas Nilsson <nisses.mail@home.se> +Jakub Steiner <jimmac@novell.cX + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/xchat.png b/icons/xchat.png new file mode 100644 index 0000000000000000000000000000000000000000..f850bb2fa70ead8a3e5227902351e297f617cd4f GIT binary patch literal 1424 zcmV;B1#kL^P)&N+k`O!kjWE5-R8f zmTWdK!;}^kiKC9H<=GY$ox!XD45f;~oZ=n?5h>-7X_*X>_SW>bKdv`MhH>uq&nLO} zd>=XaZp-Mf+91MJ5P<12U8<8(m+sTW>%!-by3Rd5Zm7bK)kf>@NyFIWR_R zZ1B@8-oKwx*ImTh?*kwr-df1<#sdJv(v;le)adjh1Z=?UGIKi8%99Yd3d}BZX-d|0 zYIOP`Hg$9QhAxh#G5|!)Vg*p@y36N2Eg&+9ZT@LQU3b4zTRn&DMhjwdGbg;P#MWJmI`2bAI=#PjnxqjOU@)(!$7=H;u(_mb6# zU_0fo=RPvwm2FDlTH#vZT9!?1NNq@M__7!nV1OZ;NIVxFy?c9Y6b%!wrt5g zoeyB1WBTCYGyuDOd)_SIKO?6TNpvCDQ|mWrifsd(!pkj|CP zmCjA7(~I?Dy||m@F2?f)$Ec|E-sI$jgn@zUS@qtPW<)%c6$pShX1X?5X-2e2^L;OJ71E%|zVPx?l}84h=ct9C41gC(TlcR3epRm*@-ih5AB1hqMZ;HP#wy zP4@=3&24krXjnB=Lp2Qk?N#Rr8$BU11-*0o_OT|Iee-yGUGp7)un$Lm0|02h*F0=4 za94Gn_;sX5Mhr8DetJ|XB?cO?d1|E`AfwOw%>MQM{=dvS|4n%x?6jJ#N39oy`Dj1` z8fZkQGt?RClnW=UL{Ln$W==I}?P_o|CKZDo5i#j!Zn@-V0T9a%EDxlKtWF@O6jV7E z1ai_3s+8u*+E!J-g}#OEY2bUYj@ zi@!_=BI3ph&S=9I0EimzP$wO5`q3gnK(=Sa^G~x!E&pBP9TY?doPLN=Nt}L#8~|~w zj9~~tlt{c66GO*CKKE$>&s8GrYezv}x~P3+cmg5r7Q{6R01yvnE&PiXjVVb4sDR1n zd)ZS=B0vF5M&IGAz(iU!rbG%0000 0, + MPD_MNR_MIN => 13, + MPD_REV_MIN => 0, +}; + +use utf8; +use encoding 'utf8'; +use Encode; + +sub cmd +{ + print "$_[0]\n"; +} + +# Global hash for tracking what is to be "accepted". +my %accept = (); + +my $FVWM = (defined $ENV{FVWM_USERDIR}) ? $ENV{FVWM_USERDIR} + : $ENV{HOME}."/.fvwm"; +my $icons = "$FVWM/icons"; + +# Default values for stuff. +my ($album, $artist, $title, $menu) = (undef, undef, undef, undef); +my $host = (defined $ENV{MPD_HOST}) ? $ENV{MPD_HOST} : "localhost"; +my $port = (defined $ENV{MPD_PORT}) ? $ENV{MPD_PORT} : "6600"; + +GetOptions( + 'host|h=s' => \&host, # Host that MPD is running on. + 'port|p=s' => \&port, # Port that MPD is listening on. + 'menu|m=s' => \$menu, # Name of the menu to create. + 'album=s' => \$album, # Album to get tracks from + 'artist=s' => \$artist, # Artist to limit results to + 'title=s' => \$title, # Title to create menu for +); + +$album = decode_utf8($album) if defined($album); +$artist = decode_utf8($artist) if defined($artist); +$title = decode_utf8($title) if defined($title);; + +# Connect to MPD. +my $sock = new IO::Socket::INET( + PeerAddr => $host, + PeerPort => $port, + Proto => 'tcp' +) or die("could not open socket: $!.\n"); +binmode($sock, ":utf8"); + +die("could not connect to MPD: $!.\n") + if (!(<$sock> =~ /^OK MPD ([0-9]+)\.([0-9]+)\.([0-9]+)$/)); + +die("MPD version $1.$2.$3 insufficient.\n") + if ( ($1 < MPD_MJR_MIN) + || ($1 == MPD_MJR_MIN && $2 < MPD_MNR_MIN) + || ($1 == MPD_MJR_MIN && $2 == MPD_MNR_MIN && $3 < MPD_REV_MIN)); + +if (defined $album) { + # Create an album menu. + my @playlist = (); + my $entry; + + $menu = "MenuMPDAlbum" unless defined $menu; + + $album =~ s/"/\\"/g; + print $sock "playlistfind album \"$album\"\n"; + while (<$sock>) { + last if (/^OK/); + die($_) if (/^ACK/); + + if (/^(\w+): (.*)$/) { + if ($1 eq "file") { + if (keys(%$entry) > 0) { + addalbumentry(\@playlist, $entry) + } + + $entry = {}; + } + + $entry->{$1} = $2; + } + } + addalbumentry(\@playlist, $entry) if (keys(%$entry) > 0); + + die("No tracks found.\n") if (!@playlist); + foreach (sort albumsort @playlist) { + my ($t_file, $t_trackno, $t_artist, $t_title, $t_id) = ( + $_->{file}, + $_->{Track}, + $_->{Artist}, + $_->{Title}, + $_->{Id}, + ); + + next if (defined $artist && !$accept{albumdir($t_file)}); + + $t_artist = sanitise($t_artist); + $t_title = sanitise($t_title); + + my $cmd = sprintf "AddToMenu $menu \"%d\t%s - %s\"" + ." Exec mpc playid %d", + $t_trackno, $t_artist, $t_title, $t_id; + + cmd($cmd); + } +} elsif (defined $artist) { + # Create an artist menu. + my %albums = (); + my $file; + my $quoteartist = $artist; + + $menu = "MenuMPDArtist" unless defined $menu; + + $quoteartist =~ s/"/\\"/g; + print $sock "playlistfind artist \"$quoteartist\"\n"; + while (<$sock>) { + last if (/^OK/); + die($_) if (/^ACK/); + + if (/^(\w+): (.*)$/) { + $file = $2 if ($1 eq "file"); + $albums{$2} = $file if ($1 eq "Album"); + } + } + + die("No albums found.\n") if (!keys(%albums)); + +{ # work around 'use locale' breaking s///i + my $i = 0; + use locale; + foreach (sort keys(%albums)) { + my $key = $_; + my $a_album = sanitise($key); + + open THUMB, "-|", "$FVWM/thumbnail.sh", + "--small", "--music", $albums{$key}; + my $thumb = ; + close THUMB; + die("Incompetent use of thumbnail.sh") if ($?); + + $thumb =~ s/\n//sg; + $thumb = "%$thumb%" if (-f $thumb); + + cmd("AddToMenu $menu \"$thumb$a_album\" Popup MenuMPDArt_$i"); + + cmd("AddToMenu MenuMPDArt_$i DynamicPopUpAction MakeMenuMPDArt_$i"); + + cmd("DestroyFunc MakeMenuMPDArt_$i"); + cmd("AddToFunc MakeMenuMPDArt_$i + + I DestroyMenu MenuMPDArt_$i + + I -PipeRead \"exec $FVWM/mpdmenu.pl " + ."--menu MenuMPDArt_$i " + ."--album ".shellify($key, 1)." " + ."--artist ".shellify($artist, 1)."\""); + + cmd("AddToFunc KillMenuMPD I DestroyMenu MenuMPDArt_$i"); + cmd("AddToFunc KillMenuMPD I DestroyFunc MakeMenuMPDArt_$i"); + + $i++; + } +} # end use locale workaround +} elsif (defined $title) { + # Create a title menu. + my @titles; + my $entry; + + $menu = "MenuMPDTitle" unless defined $menu; + + # Open and close brackets. + my ($ob, $cb) = ("[\[~〜<(ー−-]", "[\]~〜>)ー−-]"); + + $_ = $title; + + # Deal with specific cases. + s/ちいさな(?=ヘミソフィア)//; # ヘミソフィア + s/ "mix on air flavor" dear EIKO SHIMAMIYA//; # Spiral wind + s/ "So,you need me" Style//; # I need you + s/ ::Symphony Second movement:://; # Disintegration + s/-\[instrumental\]//; # 青い果実 + s/ -Practice Track-//; # Fair Heaven + s/〜世界で一番アナタが好き〜//; # Pure Heart + s/〜彼方への哀歌//; # 十二幻夢 + + s/\s*-remix-$//; # Otherwise "D-THREAD -remix-" doesn't work right. + + # Deal with titles like "blah (ABC version)". + s/\s*$ob.*(style|mix|edit|edition|ver\.?|version|カラオケ)$cb?$//i; + + # Deal with titles like "blah (without XYZ)". + s/\s*$ob((e\.)?piano|english|japanese|inst|tv|without|w\/o|off|back|short|karaoke|game).*//i; + + # Deal with titles like "blah instrumental". + s/\s+(instrumental|off vocal|short)(\s+(size|version|s))?$//i; + s/\s+without\s+\w+$//i; + + my $basetitle = $_; + my $_basetitle = $basetitle; + + $_basetitle =~ s/"/\\"/g; + print $sock "playlistsearch title \"$_basetitle\"\n"; + while (<$sock>) { + last if (/^OK/); + die($_) if (/^ACK/); + + if (/^(\w+): (.*)$/) { + if ($1 eq "file") { + push @titles, $entry if (keys(%$entry) > 0); + $entry = {}; + } + + $entry->{$1} = $2; + } + } + push @titles, $entry if (keys(%$entry) > 0); + +{ # work around 'use locale' breaking s///i + use locale; + foreach (sort titlesort @titles) { + my ($t_file, $t_artist, $t_title, $t_id) = ( + $_->{file}, + $_->{Artist}, + $_->{Title}, + $_->{Id}, + ); + + # MPD searches are case-insensitive. + next if (!($t_title =~ m/(\P{Latin}|^)\Q$basetitle\E(\P{Latin}|$)/)); + $t_artist = sanitise($t_artist); + $t_title = sanitise($t_title); + + open THUMB, "-|", "$FVWM/thumbnail.sh", + "--small", "--music", $t_file; + my $thumb = ; + close(THUMB); + die("Incompetent use of thumbnail.sh") if ($?); + + $thumb =~ s/\n//sg; + $thumb = "%$thumb%" if (-f $thumb); + + cmd("AddToMenu $menu \"$thumb$t_artist - $t_title\" Exec mpc playid $t_id"); + } +} # end use locale workaround +} else { + # Make MPD base menu + my ($state, $songid) = (undef, undef); + my %entry = (); + + $menu = "MenuMPD" unless defined $menu; + + print $sock "status\n"; + while (<$sock>) { + last if (/^OK/); + die($_) if (/^ACK/); + + if (/^(\w+): (.*)$/) { + $state = $2 if ($1 eq "state"); + $songid = $2 if ($1 eq "songid"); + } + } + die("Failed status query\n") unless (defined $state && defined $songid); + + print $sock "playlistid $songid\n"; + while (<$sock>) { + last if (/^OK/); + die($_) if (/^ACK/); + + if (/^(\w+): (.*)$/) { + $entry{$1} = $2; + } + } + die("Failed data query\n") unless (keys(%entry) > 0); + + open THUMB, "-|", "$FVWM/thumbnail.sh", + "--image", "--music", $entry{file}; + my $thumb = ; + my $scan = ; + close(THUMB); + die("Incompetent use of thumbnail.sh") if ($?); + + $thumb =~ s/\n//sg; + $scan =~ s/\n//sg; + + cmd("AddToMenu $menu Playing Title") if ($state eq "play"); + cmd("AddToMenu $menu Paused Title") if ($state eq "pause"); + cmd("AddToMenu $menu Stopped Title") if ($state eq "stop"); + if (-f $thumb) { + cmd("AddToMenu $menu \"*$thumb*\" " + ."Exec exec gqview ".shellify($scan, 0)); + } + cmd("AddToMenu $menu \"Title: ".sanitise($entry{Title})."\" " + ."Popup MenuMPDTitle"); + cmd("AddToMenu $menu \"Artist: ".sanitise($entry{Artist})."\" " + ."Popup MenuMPDArtist"); + cmd("AddToMenu $menu \"Album: ".sanitise($entry{Album})."\" " + ."Popup MenuMPDAlbum"); + cmd("AddToMenu $menu \"\" Nop"); + + if ($state eq "play" || $state eq "pause") { + cmd("AddToMenu $menu \"\t\tNext%$icons/next.svg:16x16%\" " + ."Exec exec mpc next"); + cmd("AddToMenu $menu \"\t\tPause%$icons/pause.svg:16x16%\" " + ."Exec exec mpc pause") if ($state eq "play"); + cmd("AddToMenu $menu \"\t\tPlay%$icons/play.svg:16x16%\" " + ."Exec exec mpc play") if ($state eq "pause"); + cmd("AddToMenu $menu \"\t\tStop%$icons/stop.svg:16x16%\" " + ."Exec exec mpc stop"); + cmd("AddToMenu $menu \"\t\tPrev%$icons/prev.svg:16x16%\" " + ."Exec exec mpc prev"); + } elsif ($state eq "stop") { + cmd("AddToMenu $menu \"\t\tPlay%$icons/play.svg:16x16%\" " + ."Exec exec mpc play"); + } else { + die("Unknown MPD state!\n"); + } + + cmd("AddToMenu $menu \"\" Nop"); + cmd("AddToMenu $menu \"\t\tShuffle%$icons/shuffle.svg:16x16%\" " + ."Exec exec mpc shuffle"); + + cmd("DestroyMenu MenuMPDTitle"); + cmd("AddToMenu MenuMPDTitle DynamicPopUpAction MakeMenuMPDTitle"); + cmd("DestroyMenu MenuMPDArtist"); + cmd("AddToMenu MenuMPDArtist DynamicPopUpAction MakeMenuMPDArtist"); + cmd("DestroyMenu MenuMPDAlbum"); + cmd("AddToMenu MenuMPDAlbum DynamicPopUpAction MakeMenuMPDAlbum"); + + cmd("DestroyFunc MakeMenuMPDTitle"); + cmd("AddToFunc MakeMenuMPDTitle + + I DestroyMenu MenuMPDTitle + + I -PipeRead \"exec $FVWM/mpdmenu.pl " + ."--menu MenuMPDTitle " + ."--title ".shellify($entry{Title}, 1)."\""); + + cmd("DestroyFunc MakeMenuMPDAlbum"); + cmd("AddToFunc MakeMenuMPDAlbum + + I DestroyMenu MenuMPDAlbum + + I -PipeRead \"exec $FVWM/mpdmenu.pl " + ."--menu MenuMPDAlbum " + ."--album ".shellify($entry{Album}, 1)." " + ."--artist ".shellify($entry{Artist}, 1)."\""); + + cmd("DestroyFunc MakeMenuMPDArtist"); + cmd("AddToFunc MakeMenuMPDArtist + + I DestroyMenu MenuMPDArtist + + I -PipeRead \"exec $FVWM/mpdmenu.pl " + ."--menu MenuMPDArtist " + ."--artist ".shellify($entry{Artist}, 1)."\""); + + cmd("DestroyFunc KillMenuMPD"); + cmd("AddToFunc KillMenuMPD I Nop"); +} + +# Finished. +print $sock "close\n"; + +sub sanitise +{ + $_ = $_[0]; + s/([\$&@%^*])/\1\1/g; + s/"/\\"/g; + return $_; +} + +sub addalbumentry +{ + my ($playlist, $entry) = @_; + + push(@$playlist, $entry); + + if (defined $artist && $artist eq $entry->{Artist}) { + my $albumdir = albumdir($entry->{file}); + $accept{$albumdir} = 1; + } +} + +sub albumdir +{ + my $file = $_[0]; + + $file =~ s:(/Disk [0-9]+[^/]*)?/[^/]*$::; + return $file +} + +sub albumsort +{ + return ($a->{Disc} <=> $b->{Disc}) if ($a->{Disc} != $b->{Disc}); + return ($a->{Track} <=> $b->{Track}); +} + +sub titlesort +{ + return ($a->{Album} cmp $b->{Album}) if($a->{Album} ne $b->{Album}); + return ($a->{Artist} cmp $b->{Artist}) if($a->{Artist} ne $b->{Artist}); + return ($a->{Title} cmp $b->{Title}); +} + +sub shellify +{ + my ($str, $quoted) = @_; + $str =~ s/'/'\\''/g; + if ($quoted) { + $str =~ s/\\/\\\\/g; + $str =~ s/"/\\"/g; + } + return "'$str'"; +} diff --git a/nickstheme b/nickstheme new file mode 100644 index 0000000..2205a1b --- /dev/null +++ b/nickstheme @@ -0,0 +1,115 @@ +# Nick's first FVWM theme, designed for his laptop. + +ButtonState InactiveDown False + +DestroyDecor nickstheme +AddToDecor nickstheme ++ TitleStyle Height 24 -- Flat ++ AddTitleStyle MultiPixmap Main titlebar.png ++ BorderStyle -- HiddenHandles NoInset ++ ButtonStyle All Simple -- Flat UseTitleStyle ++ AddButtonStyle 1 MiniIcon ++ ButtonStyle 1 - MwmDecorMenu ++ AddButtonStyle 3 \ + ActiveUp ( Pixmap iconify-active.png ) \ + InactiveUp ( Pixmap iconify-inactive.png ) \ + ActiveDown ( Pixmap iconify-pressed.png ) ++ ButtonStyle 3 - MwmDecorMin ++ AddButtonStyle 5 \ + ActiveUp ( Pixmap maximise-active.png ) \ + InactiveUp ( Pixmap maximise-inactive.png ) \ + ActiveDown ( Pixmap maximise-pressed.png ) \ + ToggledActiveUp ( Pixmap restore-active.png ) \ + ToggledInactiveUp ( Pixmap restore-inactive.png ) \ + ToggledActiveDown ( Pixmap restore-pressed.png ) ++ ButtonStyle 5 - MwmDecorMax ++ AddButtonStyle 4 \ + ActiveUp ( Pixmap shade-active.png ) \ + InactiveUp ( Pixmap shade-inactive.png ) \ + ActiveDown ( Pixmap shade-pressed.png ) \ + ToggledActiveUp ( Pixmap unshade-active.png ) \ + ToggledInactiveUp ( Pixmap unshade-inactive.png ) \ + ToggledActiveDown ( Pixmap unshade-pressed.png ) ++ ButtonStyle 4 - MwmDecorShade ++ AddButtonStyle 2 \ + ActiveUp ( Pixmap close-active.png ) \ + InactiveUp ( Pixmap close-inactive.png ) \ + ActiveDown ( Pixmap close-pressed.png ) ++ ButtonStyle 2 - Clear + +Style * UseDecor nickstheme +Style * BorderWidth 3, HandleWidth 3 + +# Unfocused window colours - dark gray on light gray. +Colorset 1 fg gray30, bg gray + +# Normal menu colours - black on pale gray +Colorset 3 fg black, bg #ede9e3 +#Colorset 8 fg gray30, bg gray, TiledPixmap titlebar.png +Colorset 8 Pixmap titlebar.png, fg gray20, bg gray90 + +# Focused window / highlighted menu colours - white on dull blue. +Colorset 2 fg white, bg #567ea2 +Colorset 4 fg white, bg #567ea2 + +Style * ColorSet 1 +Style * HilightColorSet 2 + +# Fonts. Probably need to patch FVWM to support proper selection of Japanese +# fonts... +Style * Font 'xft:M+1P+IPAG:Bold:size=8:minspace=true:rgba=rgb:antialias=true:encoding=iso10646-1' +Style * IconFont 'xft:M+1P+IPAG:Bold:size=8:minspace=true:rgba=rgb:antialias=true:encoding=iso10646-1' +MenuStyle * Font 'xft:M+1P+IPAG:size=8:minspace=true:rgba=rgb:antialias=true:encoding=iso10646-1' +MenuStyle * TitleFont 'xft:M+1P+IPAG:Bold:size=8:minspace=true:rgba=rgb:antialias=true:encoding=iso10646-1' + +MenuStyle * HilightBack, HilightTitleBack, Hilight3DOff +MenuStyle * TrianglesSolid, TrianglesUseFore, TitleUnderlines1 +MenuStyle * SeparatorsLong, BorderWidth 1, VerticalItemSpacing 2 2 +MenuStyle * ItemFormat "%.3s%.2|%2.4i%.5l%.5l%.5r%.5i%2.3>%1|" +MenuStyle * MenuColorset 3 +MenuStyle * ActiveColorset 4 +MenuStyle * TitleColorset 8 + +# Buttons: menu iconify maximize --title-- shade close +Mouse 1 1 N Menu MenuWindow + +Mouse 1 3 N DoIconify + +Mouse 1 5 N DoMax +Mouse 2 5 N DoMaxH +Mouse 3 5 N DoMaxW + +Mouse 1 4 N DoShade + +Mouse 1 2 N DoClose + +DestroyFunc DoIconify +AddToFunc DoIconify ++ M Nop ++ C Iconify + +DestroyFunc DoShade +AddToFunc DoShade ++ M Nop ++ C WindowShade + +DestroyFunc DoMax +AddToFunc DoMax ++ M Nop ++ C Maximize 100 100 + +DestroyFunc DoMaxW +AddToFunc DoMaxW ++ M Nop ++ C Maximize 100 0 + +DestroyFunc DoMaxH +AddToFunc DoMaxH ++ M Nop ++ C Maximize 0 100 + +DestroyFunc DoClose +AddToFunc DoClose ++ M Nop ++ C Close ++ D Destroy diff --git a/panels b/panels new file mode 100644 index 0000000..745b8d9 --- /dev/null +++ b/panels @@ -0,0 +1,29 @@ +# Top Panel +Style "Xfce Panel" !Borders, !Title, Sticky, StaysOnTop, FixedPosition,FixedSize +Style "Xfce Panel" NeverFocus, WindowListSkip, CirculateSkip +Style "Xfce Panel" HilightColorset 1 + +# Pager +Colorset 14 fg gray, bg gray50 +Colorset 15 bg #496278 + +Style FvwmPager !Handles, !Title, Sticky, StaysOnTop, FixedPosition, FixedSize +Style FvwmPager WindowListSkip, CirculateSkip + +DestroyModuleConfig FvwmPager: * +*FvwmPager: Geometry -0-0 +*FvwmPager: SolidSeparators +*FvwmPager: UseSkipList +*FvwmPager: Font none +*FvwmPager: MiniIcons +*FvwmPager: Colorset * 14 +*FvwmPager: HilightColorset * 15 + +AddToFunc StartFunction ++ I Module FvwmPager * ++ I Exec exec xfce4-panel ++ I Exec exec uim-toolbar-gtk-systray + +AddToFunc ExitFunction ++ I KillModule FvwmPager ++ I Exec kill `pgrep -P $PPID xfce4-panel` diff --git a/pixmaps/close-active.png b/pixmaps/close-active.png new file mode 100644 index 0000000000000000000000000000000000000000..43b1c8dbdaefccc1b5cc109d2b02acefde101af5 GIT binary patch literal 346 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqhEX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4FzaxDfXn=@3Ct`iA9$NMRPMfibLc^E%>~|)5LP9Rgnkg-fYr zLeBO#XWkeDGx8tcE?~W!K!a5xNBw zWb)RWE|JW?C4NS|Ci7Q$TXTkLW9fSD!*|smuoU=c^1ieCJ7x3CUhi}5S(zU=cd*B) j*5*j9X>@3c!@Th*>WFEV(#`njxgN@xNAxRZR^ literal 0 HcmV?d00001 diff --git a/pixmaps/close-inactive.png b/pixmaps/close-inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..78f5e6de85a23be432740444d13fd4ea239ac8b6 GIT binary patch literal 402 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VEX7WqAsj$Z!;#Vfk}U9uEC#B- z4#JF18nY{af|4b!5hcO-X(i=}MX3zs<>h*rdD+Fui3O>8`9{`|-E*p1Azc?QK#_r^;n+x_16e$CcAv)OwYPdIbz zx9NM_*dfK>IxY3}&zgNFHs$axP*{{Eb6nnU(i1VK8;mO$b=GWs&mhNeMX@Dzl8U*Q zpx@;$>$ci4RVXR(KM2gO^||~-Pw9*jQ*uwYq2A1&EDuhdSuXMTlEh;dmNipm@f_a3 z6kzZ<)oN~?!Dm(nL!QH4nx+r8{5Aqn|@TbZHs_j tXlSkV^D3nz!Ix{d#y|i3Q}V!H{<%GIM!k2qnt|cR;OXk;vd$@?2>=GppmqQN literal 0 HcmV?d00001 diff --git a/pixmaps/close-pressed.png b/pixmaps/close-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..07485e75ceaad4bdb77bf38450247d31bdbbdbce GIT binary patch literal 834 zcmV-I1HJr-P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iFV= z6)!K!g75tR00P2EL_t(I%dJ%3OH)xC|J<|9yx#3>!b(tL(u>rC(5+xS3~Wop0w+@V z;)}3AUwr5f5Cos}O$fu6At^XwgyI~7g6X!HP(~5G)PqVHEpy&;w>zhHPcP@nv|fr1 zd^mj1`JT`D_4#}y&N=?j902M?PsErB;0VBh=ub8KnV0}@0%!mr1E>RF6LUWS90I5S zFaVSU`ENuv0B!)T8nU{YoMS;`05~VcHL<}dB3CRHySTi(e50|kvA(yr_eU@otXMg# ztE?%jG=z ze7I)^T^1^{b)4$VsCHn+xGT$ z%kc2xeVaEg>*XIwz08sGZKm1p_IBz)8vE@i7{55o106k zs`}dR_kRNLy$1UPfFwWwkdBUyeV@bWuuOjIq+f!oo|&Sea6)3=9keGMUV!Y&I*4-#W7NMMO{qP+eMDY8o0Ex=Shb zFvj+y(P&Chl()09v(Fi0j8aMm2M2G*w6=VU9^;4OY}EhD*@1Jy(XP0BmeAv>3`LuU)?EW8*>kXr2qf` M07*qoM6N<$f{=KDJpcdz literal 0 HcmV?d00001 diff --git a/pixmaps/iconify-active.png b/pixmaps/iconify-active.png new file mode 100644 index 0000000000000000000000000000000000000000..bb0e016ca4ce252f7994045889dcf22006a23c4a GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^96-#)!3HEdkIOdzDaPU;cPEB*=VV?2Ic!PZ?k)`f zL2$v|<&%LToCO|{#X#-XL734=V|E2lkiEpy*OmP`50{vz(&Rgz6M#ado-U3d5|@(` zB={NvGY8^XU=qZn;RP&D=%KQEKSc&o8eV0>#a-g SZS{Z#FnGH9xvX$3n-jKx9jP7LeL$-D%~CV9KNF#HF> z1$&oI28wVNctjQhwOH=O_Uk-cVj@zDj#ljl3Q2joIEHXsPfn2N nY1p`PXQh%ErgTe~DWM4fEn6uX literal 0 HcmV?d00001 diff --git a/pixmaps/iconify-pressed.png b/pixmaps/iconify-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..55a70e9d49ef1e78509b7be32d8d436803e45973 GIT binary patch literal 583 zcmV-N0=WH&P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iFV= z78eBs;3SCv00GBIL_t(I%dM0>kJ>;GhM&P7i{X;HBB?;4phCWmAD>^rRTM}lLJ5kZ zP~~JWUW`3y#;27JMTvx^DZD%L=-qc_7w-JY-!@e>0fs;V3~adtYM>I4`k#QRIshJk z5s(2X5ZQJET!1rB0!I;PyW02$ECL>Z4*@g{a<2v~0SCmY`YIyLO`w4u1L)X}9RjPK z6)o`l9Z*$ArYeMXDiceqO)Y{vuerY;H^>SAk-54?1$It&%Y7Kt4v1b0dSUd_i2lv+&;q;YSA#C+)@vP5SVU=4|FFU%D{ zLZDi-K>PCYGT!g^pRz1_a?Xw7I2M5G^*Zw2KTRf+W1i=2m*3Tgz^g?KT-NLLFiDc< z>2x|1kwioy^SU`44nK;b_?73mx0$TF`FsP4NUf^gjIOGxIxiNB&&%cVxj(3F+m_qy zwlp6rtMMXI^~dH6oB($^oyzrk{Z&;}L?RIxn8J3m*?jZf7eE0Vt>*l0utlU))f7l( zv)T9EZue!iT4l~T7e!G7&@@fsz4!C^{HJxiu=`xzd>sDsE*}l}c9-w|+T8s;`~$4= V)yo=+4s-wj002ovPDHLkV1h2N{LlaZ literal 0 HcmV?d00001 diff --git a/pixmaps/maximise-active.png b/pixmaps/maximise-active.png new file mode 100644 index 0000000000000000000000000000000000000000..4ec9ffa99af19563d06901b85568b557f45b4072 GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4u@pObhHwBu4M$1`kk47*5m^jW ze;tGwoit`w00kvWTq8rBmha#6lpK{7vPJ#0>zT7dTt!{1b%&Ic!a_FoYx^rsAG%lKzIdcA16oW&5o?f=flB>4nwO>5L!f?iCPVsWd z;&c^O29K^{zqEpPe#e4NeM_`CvuqU;!`iLCA7xFPaw+%gEL;8EAB1mzS$Xv~&|wUo Lu6{1-oD!M<{k&xZ literal 0 HcmV?d00001 diff --git a/pixmaps/maximise-inactive.png b/pixmaps/maximise-inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..6cc601135583984960b6461ad5e4939a6bf871e8 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqEX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4Uwwt%;v@$P#nU;0BJms0HykWzA$I!d6FW)U^bZN=s zGhissXAf;<6cSu}Jj&ZAbbE*8^KOY`nY9cjn18Ve)%~+py$Up*!PC{xWt~$(69DlR BLtX#? literal 0 HcmV?d00001 diff --git a/pixmaps/maximise-pressed.png b/pixmaps/maximise-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..3a609cfd17b23d7184b554ecd6dd9072b0c6313f GIT binary patch literal 675 zcmV;U0$lxxP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iFV= z78yD$1tdBE00JXPL_t(I%dM2nPTNovgun4m>;$T)Qg;waMA>@L4T~;#f^K*^-lMBZ zyaQ6I>?%m&h>A)`4NV*y$MdxB(u3HBbOcNp6dc{vis1KJcnV*lG1`JXrxGKxAeMNzEfN z;MMv0`S9lE=54><-|6*w-6TnpFbqS0rfHh0s;Z(W*2Cd&es*>?@uUCvi_FY=z;2%B zgTuqak6D%-ONu0gk^O%qAc?d|Qi`FwsSDV7xazGiQ4@3o{TP1CMdI{^|iOQV($ z5fI0597_uFJpVo#jlLWm9d)88+69c{EI5?t8mdyO;JiyG%oO6x0!%t5Z0M2}QCEXU^_Rj{W>$ml zudl<4iwnXqbbd_BvaA7`x~?C*=jyHhBCk$uW))DCWm%coW-u5GfcKK3ZJe?!bNl=I zZ)UUEtSrklP~}U&Kt;DbT^vI+ zCbk9|=Cv3I%(*+4EnGw)C@}DI|71U#$3;ORnymZ_To-i-y)2RUw7Tcm{z8D)-=le= zXy@+SYv0bC>&acY>J@AB*V_7HlNS~H{c#ITjlKR`(6a9__hJn$cDYrnwNyMOT~9Y; zNQj&kJ!@I`Dy?Ug`(y<->+EjhGuhm3>2&AJ6ctv6Pd4?x{pT%vdHXSgL(qy zUbmNfv+LcH^T!MSe0qJiaf!uqlaSAQHM+jvJ$NSNw0iFCc};uvd0#f!zk33ETjCF! q9VUm)t9t65{`C08RF5o)ulyf-)O>E8F#ZYjCWEJ|pUXO@geCw2P>uZn literal 0 HcmV?d00001 diff --git a/pixmaps/restore-inactive.png b/pixmaps/restore-inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..bcd8c6e3a9c576cecdfbc0e4a30c33866356d2a6 GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4u@pObhHwBu4M$1`kk47*5m^jW ze;tGwoit`w00kvWTq8*J;}YfseRZ!(rIUlIdYtb4?rsxUS3M=@)Lv7^kIVC~e&d{Vv)I9U_RMT!k%kF( z0#C;j@iA`@!{-@7=DG51PvH$`Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iFV= z7Y`By>Qf*900OK@L_t(I%dM16OCwnnhM#k*Dizb6DQR@tgk&T_M;FnJkeQVOF0%6n z`1jn%tlYSFtplPqL?Q%DX$s>rDomyunT;3j<{r+&J@0wXfj2zzT0m7D zAPYEvNuLuS0)`?I{Vz;a4e%bw0W&}bu+s1t7y$#I4?K%VGRd`n09k+s%k6f% z=(?_B+qMl5$8j8nVf6I$G`zpR?|Yu-t7=*VBQ54Z!q{RgJ1xwO1I;CY_+ORZM>RIk^6e@*Xhx0?grtLjKZ`qMv~+1c4C z-`?IgwuJy(dAiZ8MxVgD`5E0iHuE1(lt z48)_+C{oo#Rg*%Y@TJjcguu6hgM&CplHXKyoFqwfeSO_MKR@q8Q52;U5d$L|Ktv){ z4PRbfqKS_#E-tLSy}cR7aqJ)n!u9p_5J-X`_#DUa?Ql5!UaeMpKnR2)GMu)?;Njt+ zud4Cl;^NZg=H{OwVvC5iu&`iCrP2rA_q%g*bKULj?H2GI_zJwF*7(=7BGTX3*ytY} z9i0PWjImQaELD|Gr*qY8HammCU;=qc@3V;Xe;TK&tEf4F%}28J29*~C-V}>VN3FMcVYMs zf(!O8p9~b?Ebxdd25P?!!i-KDvnzmt>?NMQuI$%&c-a}1Y#pzj2AX2y>Eak7aXGec zW7Z)DhBp1_%~jJCgAdJhlF|{`Wnr?qgN^g3c*X+-{|ma6Y?&`rz8HQ|E3mzN5@++SN`Z@>S^E~4gA>w4Bv2?Ei53}#(bCSv8i4ts6F3l5IptO>$Z6C5PfCq^W#M-rZ@cb=9JBn%Dv=?NwuDSe-5Iskj_2@)1v;lS&VQc&wMw@5 zocq5OFIOLTJpC4epY$! kaov9R=7SHOUir(E%P?!!?j0YxfkDgQ>FVdQ&MBb@00=a+-~a#s literal 0 HcmV?d00001 diff --git a/pixmaps/shade-inactive.png b/pixmaps/shade-inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..ce7035aaf7034f2b5c8e194eb1f462ecc94fc8c2 GIT binary patch literal 304 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqEX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4{iyxhl2ZRU)~!<2D%ZFf$yuE6>okeqy%b u^D|E`p4MKq>XFu|O@C%Rul#)fH*3sOwX3^CFKz`ooWax8&t;ucLK6Uxa(A=< literal 0 HcmV?d00001 diff --git a/pixmaps/shade-pressed.png b/pixmaps/shade-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..0a586128957e56c33350f918910745489cd69686 GIT binary patch literal 760 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iFV@ z2LcVfy}MBW00MYPL_t(I%dM16OB+!bg`b-MGMgqV^rJ}y0Je& z(M<&XIl6c0PjDlm3pIn97FuaB5*2By5R6WfnSAKnZtmE$ltRG^FBk62Io$W0^Io{4 zCH{7(lnMZ0AOQIEu?w_;h7h9tPa>t159kHDfi55j82a-K&;lI525LeG*TecdNDLqf zL^{ZV9sgWwA{z(+ex=lv5aQ-HB25tOAnQ3jJ&hKN#dtQGttOL62Wb4!vI|_^wx*Qo z2JY*+2SnG_)>5Wv4rH_0=cZ|vM@B|Ij*X3d1!}+*Pz5f43n7H<-KY!b(Je*R*VmsE zi^a_R{QQKJQVtFdzFb;b>NX7HLoSy)=@7o@Y39=og>;2iS63hH?CiYG=kpU%N(msP zlru9kZ+CZh2R1i1A8P%=9!@D0_Gz8`K;ZoRyk~1`D?K|q`_3crmXxx0dV2azp-^~r zbaWKeMg%lA=+in0z_+onkr*Bxek!GmT9#EiI5_wQP%4!wmSx#e%1An$etdX%7|~+i z;{AZq<&KY!R~8l)J{yJ+-rwJ^j*gDL0I+S_SzccL)ZgDP3xz^yYHG^TI=LR+uk&#Y zw3EqXJ)h5;<#PFZJRX0blzIl>x^AW~+LoZbc}l3a-4xP;iU=rC&Ic QEKo0lr>mdKI;Vst08+IjNdN!< literal 0 HcmV?d00001 diff --git a/pixmaps/titlebar.png b/pixmaps/titlebar.png new file mode 100644 index 0000000000000000000000000000000000000000..41c772fdf1030f37943c4cbd2f77e5d65f661c9c GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^96&4~zy>6zdnN<}DYhhUcNd2LAh=-f^2tCE&U`nw zVjv9y%nTpdpYj43oCO|{AVCi>b~~AE2NEnRa7+i%AVZ}Y0=9qo2V}H(x;TbdoIZN_ zH1A;t4wefyx_&elFn@_p<6F`+w|VFL7Y7fS8XJGMnSc0KT3TA%^}>dZjuW-=>@#N0 zWMooOQgS$O<_r(Vs#U8P4sK)M017ZL?qQF1a40V~zrdt(Lz00hH1w+Z{=)Tw0y*3b w3HgiyZ%mn*WFO6DDlh+DeDHtbv&;khHx{u?&1d_+4(J{RPgg&ebxsLQ0HY{Z%K!iX literal 0 HcmV?d00001 diff --git a/pixmaps/unshade-active.png b/pixmaps/unshade-active.png new file mode 100644 index 0000000000000000000000000000000000000000..1805710605f1be13eb512e89446e06ff753582a5 GIT binary patch literal 452 zcmeAS@N?(olHy`uVBq!ia0vp^AT|#N8<337)>#0g7>k44ofy`glX(f`uqAoByDx`7I;J!1GQfVVMZs7*%d%R_7YEDSN7{XyzI;x?-#{|15I)9ba4!kxV*J* zqt{^viR1744ixex1-i8GJZ)RdA^R#|d4pf3qW5MAnJfkU2VwUQT>U2ai|Or@i<%ZC zr)Cr!-R5zkb=Ao=>5nem*w?WC@CLT5P~`UeL*& z<87XRQ-ampIL)q4M0uT5Z|)m^JxK+uyqXL0*-%GkxB@{`%`>T>OORl~xiw^9+uiKVfo~zh~oni*p+1 zKbOQ8$)vX!eyiSlPhF|S;q<1U(9qiJrN=!d?a4EnZ4P9uTJ>vM>e3bgj`YovtM^sR sD;Hv6oEoGx*H8Ub+3xob?*CwYsx~XMT`b@kFo+pEUHx3vIVCg!07t37A^-pY literal 0 HcmV?d00001 diff --git a/pixmaps/unshade-inactive.png b/pixmaps/unshade-inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..2c92818682a928c700c084a078e9137420cf2944 GIT binary patch literal 304 zcmeAS@N?(olHy`uVBq!ia0vp^96-#)!3HEdkIOdzDaPU;cPEB*=VV?2Ic!PZ?k)`f zL2$v|<&%LToCO|{#X#-XL734=V|E2lkiEpy*OmP`4=+25!a56wML?kqo-U3d5|@|u zZOl6CAknP)m;K$}Cl((XS6Y9|HENlp$p1k7%Y-fcAo z+FF!tbv3Gb(tR(@Se01DFDe_?ewnmRbE*E*Ir2-V+&q&vNux8ZOnd1W%jfPLhDOIK s-tWqbyI#t#z;n2u?0fa^FZO>Klm4iNH~VCy0o~5v>FVdQ&MBb@0598eQ~&?~ literal 0 HcmV?d00001 diff --git a/pixmaps/unshade-pressed.png b/pixmaps/unshade-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..0b4aa8c5f52616ce4d9a1fa79627059179583b7e GIT binary patch literal 709 zcmV;$0y_PPP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iFV@ z1}!QJX#<9f%{ip z3F<}t58KUP^j0IaAP(>BHn!0YHElnuwo}vHoJe%ujO~NNN514ddC$pvq74QEo>(y; zA-gVT0dNEKWPh-RA6@IfC}08x5C?|j-W~7@xCX9(uE75Q4FO|7Dgui~p1Bp!6)+;_ z9eKe6P)a}{EO~l*n%dvrpR{eeoylabrL1Vl0njE=zbPt0*hIZvpW4{iC?pbzx7*v> zZ(6O^b07^&JfZwvkpU#5u;b(77ptqQdB<^H8HO=>aBy&5EEc~?3&O_t!=C9Pb3`I> zc6K&asZ?fryEoue(60(P+$S znid1lb$!J5{h5BhUnrN$3%>6s z+S*#qvMe(Qg1+Z@N2OBfr}S6@G#wa71ler1<9S|PDb=woYjl2oehOf2Zf?@DEK@0U zQLELy*9}F;3k{Rb{xm4ZEkM9Q%b3*QSJuInD9)9Fj`)J^Cw zJ<|O?&?^>;-*UNJb!%(ueF#%ZsdBme!M5$%($dm*F=a2Br^&3D;*oowR4SF3y}i8! z$8la(tJTl0>wa2ZUj8AY(E(b3FL9+shIags*^

Gv#^Sv&F^5&h+&3rKq?BE+Vit rKos;hv(}Bk?jD2wY5KMQ^*{Ozb?f}+h(M4s00000NkvXXu0mjfDep;n literal 0 HcmV?d00001 diff --git a/resize.sh b/resize.sh new file mode 100755 index 0000000..a375ddd --- /dev/null +++ b/resize.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# resize.sh mouseX mouseY windowW windowH +# Emits an FVWM directed resize command based on the position of the mouse +# cursor within a window (mouseX, mouseY) and the width and height of the +# window (windowW, windowH). + +if [ $# -lt 4 ]; then + echo "usage: $0 mouseX mouseY windowW windowH" + exit 1 +fi + +echo -n "Resize Direction " + +# Straight directions +if [ $1 -le $(($3/4)) -a $2 -ge $(($4/3)) -a $2 -le $(($4/3*2)) ]; then + echo "West" +elif [ $1 -ge $(($3/4*3)) -a $2 -ge $(($4/3)) -a $2 -le $(($4/3*2)) ]; then + echo "East" +elif [ $2 -le $(($4/4)) -a $1 -ge $(($3/3)) -a $1 -le $(($3/3*2)) ]; then + echo "North" +elif [ $2 -ge $(($4/4*3)) -a $1 -ge $(($3/3)) -a $1 -le $(($3/3*2)) ]; then + echo "South" +# Quadrants +elif [ $1 -le $(($3/2)) ]; then + if [ $2 -le $(($4/2)) ]; then + echo "NorthWest" + else + echo "SouthWest" + fi +else + if [ $2 -le $(($4/2)) ]; then + echo "NorthEast" + else + echo "SouthEast" + fi +fi diff --git a/rootmenu b/rootmenu new file mode 100644 index 0000000..74001e8 --- /dev/null +++ b/rootmenu @@ -0,0 +1,50 @@ +MenuStyle * !TitleWarp + +CopyMenuStyle * MenuMPD +MenuStyle MenuMPD ItemFormat "%.2|%3.5l%.5l%2.3>%-80.5r%.5i%1|" + +DestroyMenu MenuFvwmRoot +AddToMenu MenuFvwmRoot ++ DynamicPopupAction MakeMenuFvwmRoot + +DestroyFunc MakeMenuFvwmRoot +AddToFunc MakeMenuFvwmRoot ++ I DestroyMenu recreate MenuFvwmRoot ++ I PipeRead 'echo AddToMenu MenuFvwmRoot "$USER@`hostname`" Title' ++ I AddToMenu MenuFvwmRoot "Terminal%terminal.svg:16x16%" Exec exec $[TERMINAL] ++ I AddToMenu MenuFvwmRoot "Firefox%firefox.png%" Exec exec firefox ++ I PipeRead "xlsclients -a | grep ' xchat$' >/dev/null || echo\ + AddToMenu MenuFvwmRoot 'Xchat%xchat.png%' Exec exec xchat" ++ I PipeRead "xlsclients -a | grep ' gmpc$' >/dev/null || echo\ + AddToMenu MenuFvwmRoot 'GMPC%gmpc.png%' Exec exec gmpc" ++ I AddToMenu MenuFvwmRoot "" Nop ++ I AddToMenu MenuFvwmRoot "Network%network.svg:16x16%" Popup MenuNetwork ++ I AddToMenu MenuFvwmRoot "Games%games.svg:16x16%" Popup MenuGames ++ I AddToMenu MenuFvwmRoot "" Nop ++ I AddToMenu MenuFvwmRoot "Wallpaper%wallpaper.svg:16x16%" Popup MenuWallpaper ++ I AddToMenu MenuFvwmRoot "Music%music.svg:16x16%" Popup MenuMPD ++ I AddToMenu MenuFvwmRoot "" Nop ++ I AddToMenu MenuFvwmRoot "Restart FVWM%reload.svg:16x16%" Restart ++ I AddToMenu MenuFvwmRoot "Exit FVWM%logout.svg:16x16%"\ + Module FvwmForm FvwmForm-QuitVerify + +DestroyMenu MenuNetwork +AddToMenu MenuNetwork ++ "Pan Newsreader%pan.png%" Exec exec env LC_ALL=en_CA.UTF-8 pan + +DestroyMenu MenuGames +AddToMenu MenuGames ++ "Gens%sonic.png%" Exec exec gens + +DestroyMenu MenuMPD +AddToMenu MenuMPD ++ DynamicPopUpAction MakeMenuMPD ++ DynamicPopDownAction KillMenuMPD +ChangeMenuStyle MenuMPD MenuMPD + +DestroyFunc MakeMenuMPD +AddToFunc MakeMenuMPD ++ I DestroyMenu recreate MenuMPD ++ I PipeRead "exec $[FVWM_USERDIR]/mpdmenu.pl --menu MenuMPD" + +Mouse 3 R A Menu MenuFvwmRoot diff --git a/thumbnail.sh b/thumbnail.sh new file mode 100755 index 0000000..958092c --- /dev/null +++ b/thumbnail.sh @@ -0,0 +1,67 @@ +#!/bin/sh + +music=/home/music +thumbs="$HOME/.fvwm/.thumbs" + +if [ ! -d "$thumbs" ]; then + mkdir "$thumbs" || exit 1 +fi + +size="x128" +printimg="" +ismusic="" + +while [ "${1#--}" != "$1" -a "$1" != "-" ]; do + if [ "$1" = "--small" ]; then + size="56" + elif [ "$1" = "--size" ]; then + size="$2" + shift + elif [ "$1" = "--music" ]; then + ismusic="yes" + elif [ "$1" = "--image" ]; then + printimg="yes" + else + echo "unrecognised option: $1" 1>&2 + exit 1 + fi + shift +done +[ "$1" = "-" ] && shift + +if ! expr match "$size" '^\([0-9]*\(x[0-9]\+\)\?\)$' &>/dev/null; then + echo "invalid size specification: $size" 1>&2 + exit 1 +fi + +if [ -z "$1" ]; then + echo "usage: thumbnail.sh [--small|--size ] [--image] [--music] path" 1>&2 + exit 1 +fi + +if [ -n "$ismusic" ]; then + path="$music/`dirname "${1#$music}"`/cover.jpg" + [ ! -f "$path" ] && path="${path%jpg}png" +else + path="$1" +fi + +[ ! -f "$path" ] && exit 0 + +image="`readlink -f -- "$path"`" +[ ! -f "$image" ] && exit 0 + +thumb="$thumbs/`echo -n $image | md5sum - | cut -d ' ' -f 1`_$size.png" +if [ -f "$thumb" ]; then + mtime_s="`stat -c %Y -- "$image"`" + mtime_t="`stat -c %Y -- "$thumb"`" + if [ "$mtime_s" -gt "$mtime_t" ]; then + convert -scale "$size" "$image" "$thumb" + fi +else + convert -scale "$size" "$image" "$thumb" +fi + +echo "$thumb" +[ -n "$printimg" ] && echo "$image" +exit 0 diff --git a/wallpaper b/wallpaper new file mode 100644 index 0000000..e994210 --- /dev/null +++ b/wallpaper @@ -0,0 +1,26 @@ +# Stuff to handle pretty pictures on the background. +SetEnv SETROOT "fvwm-root -r" +SetEnv BGFILE "$[FVWM_USERDIR]/wallpaper.png" +SetEnv BGROOT "$[HOME]/wallpaper" + +CopyMenuStyle * MenuWallpaper +MenuStyle MenuWallpaper ItemFormat "%.2|%5.5c%2.3>%1|" + +DestroyMenu MenuWallpaper +AddToMenu MenuWallpaper + + DynamicPopupAction MakeMenuWallpaper +ChangeMenuStyle MenuWallpaper MenuWallpaper + +DestroyFunc MakeMenuWallpaper +AddToFunc MakeMenuWallpaper + + I DestroyMenu recreate MenuWallpaper + + I AddToMenu MenuWallpaper Wallpaper Title + + I PipeRead '. $[FVWM_USERDIR]/bgmenu.sh $[BGROOT] MenuWallpaper' + +DestroyFunc SetWallpaper +AddToFunc SetWallpaper + + I Exec exec ln -sf "$0" "$[BGFILE]" + + I Exec exec $[SETROOT] "$[BGFILE]" + +AddToFunc InitFunction + + I Exec exec $[SETROOT] "$[BGFILE]" diff --git a/windowmenu b/windowmenu new file mode 100644 index 0000000..5fe3984 --- /dev/null +++ b/windowmenu @@ -0,0 +1,53 @@ +# Window Menu +DestroyMenu MenuWindow +AddToMenu MenuWindow ++ DynamicPopupAction MakeMenuWindow + +DestroyFunc MakeMenuWindow +AddToFunc MakeMenuWindow ++ I DestroyMenu recreate MenuWindow + ++ I ThisWindow (!Iconic) \ + AddToMenu MenuWindow "Iconify" Iconify True ++ I ThisWindow (Iconic) \ + AddToMenu MenuWindow "Windowify" Iconify False ++ I ThisWindow (!Iconic, !Maximized) \ + AddToMenu MenuWindow "Maximise" Maximize True ++ I ThisWindow (!Iconic, Maximized) \ + AddToMenu MenuWindow "Restore" Maximize False ++ I ThisWindow (!Iconic, !Shaded) \ + AddToMenu MenuWindow "Shade" WindowShade True ++ I ThisWindow (!Iconic, Shaded) \ + AddToMenu MenuWindow "Unshade" WindowShade False + ++ I AddToMenu MenuWindow "" Nop ++ I AddToMenu MenuWindow "Options" Popup MenuWinOptions ++ I AddToMenu MenuWindow "Layers" Popup MenuLayer ++ I AddToMenu MenuWindow "" Nop ++ I AddToMenu MenuWindow "Close" Close ++ I AddToMenu MenuWindow "Destroy" Destroy + +# Layer Menu +DestroyMenu MenuLayer +AddToMenu MenuLayer ++ DynamicPopupAction MakeMenuLayer + +DestroyFunc MakeMenuLayer +AddToFunc MakeMenuLayer ++ I DestroyMenu recreate MenuLayer ++ I AddToMenu MenuLayer "Layer: $[w.layer] " Title ++ I AddToMenu MenuLayer "Top" Layer 0 7 ++ I AddToMenu MenuLayer "Up" Layer 1 0 ++ I AddToMenu MenuLayer "Reset" Layer default ++ I AddToMenu MenuLayer "Down" Layer -1 0 ++ I AddToMenu MenuLayer "Bottom" Layer 0 1 + +DestroyMenu MenuWinOptions +AddToMenu MenuWinOptions ++ DynamicPopupAction MakeMenuWinOptions + +DestroyFunc MakeMenuWinOptions +AddToFunc MakeMenuWinOptions ++ I DestroyMenu recreate MenuWinOptions ++ I AddToMenu MenuWinOptions "Hide Titlebar" WindowStyle !Title ++ I AddToMenu MenuWinOptions "Show Titlebar" WindowStyle Title -- 2.43.2