I'm secure by default..
obsd178
全部博文(222)
2010年(222)
noiplee
ulovko
finderla
feelingj
杜比环绕
jiangxia
shine-ly
chenliyu
tntcheng
jsycllh
cynthia
Bsolar
浪花小雨
vcdtwo
红霉素君
hurry008
36853
fluyy
分类: LINUX
2010-08-14 09:49:01
函数是我最喜欢用的东西,正如你所看见的那样,我甚至为一件简单的事情而写个函数。而且还真是如此,几乎你想要程序拥有的任何功能,关键都在于是否能写出漂亮 的函数。几乎所有的高级主题部分都包含函数,因此这部分充斥着各种不同的函数。
这头两个函数来自 taviso 的 fvwm2rc 配置文件。 它们用 ImageMagick 中的工具来为 打开的窗口抓图,然后以它作为图标。第一个函数 Thumbnail 会用当前窗口的抓图 来做这个窗口的图标。
DestroyFunc ThumbnailAddToFunc Thumbnail+ I Raise+ I SetEnv Icon-$[w.id] $[w.iconfile]+ I ThisWindow (!Shaded Iconifiable !Iconic) PipeRead \ "xwd -silent -id $[w.id] | convert -scale $$(($[w.width]/5)) -frame 1x1 \ -mattecolor black -quality 0 xwd:- png:$[fvwm_tmp]/icon.tmp.$[w.id].png \ && echo Nop"+ I TestRc (Match) Test (f $[fvwm_icon]/$[w.iconfile], f $[fvwm_tmp]/icon.tmp.$[w.id].png) \ PipeRead "composite -geometry +2+4 \ $[fvwm_icon]/$[w.iconfile] $[fvwm_tmp]/icon.tmp.$[w.id].png \ $[fvwm_tmp]/icon.tmp.$[w.id].png && \ echo WindowStyle IconOverride, Icon $[fvwm_tmp]/icon.tmp.$[w.id].png || echo Nop"+ I TestRc (NoMatch) WindowStyle IconOverride, Icon $[fvwm_tmp]/icon.tmp.$[w.id].png+ I IconifyDestroyFunc DeThumbnailAddToFunc DeThumbnail+ I PipeRead "echo WindowStyle Icon \\$\\[Icon-$[w.id]\\]"+ I UnsetEnv Icon-$[w.id]+ I Exec rm -f $[fvwm_tmp]/icon.tmp.$[w.id].png
这些函数可用于代替 'Iconify'。Thumbnail 函数首先抓取当前窗口的图像,把 它写入一个临时文件,这个文件放在 $[fvwm_tmp] 下,因此你必须设置过这个环境 变量。然后 'Test (f $[fvwm_home]/icons/$[w.iconfile])' 会试着看看你是不是 已经为窗口设定了图标文件。仅当你用 style 命令设置时 $[w.iconfile] 才会有内 容,如 'Style "Firefox-bin" Icon 48x48/firefox.png' 会把 $[w.iconfile] 的 内容设为 48x48/firefox.png,注意我将所有的图标都放在了 $[fvwm_icon] 目录 内。如果存在这个文件,一方面函数会将两张图叠加为一张;另一方面,它会将程 序图标设置为我们刚刚创建的图标,然后图标化这个窗口。DeThumbnail 函数清除 所有东西,它会将图标变回原来的那个样子,然后删除刚才的临时图标,这样下一 次再用 Thumbnail 时就会跟第一次运行时完全一样。当窗口非图标化时,有两种方 法可以确保函数运行成功。其中之一是将 '+ I Iconify' 添加至这个函数并绑定, 这样当你非图标化一个窗口时它就会运行了。或者,我更欣赏这样,在非图标化窗 时让 FvwmEvent 模块来完成这个任务。这非常完美,因为无所谓如何实现非图标化, 这个函数总会运行一下。想这么做的话,就要像下面这样设置 FvwmEvent,然后在 StarFunction 函数中调用这个模块。
###### FvwmEvent###########DestroyModuleConfig FvwmEvent: **FvwmEvent: deiconify DeThumbnail
最后要提请注意的是,当你重启 FVWM 时所有图标都会回到原来的样子,而你将 不得不先来一个 deiconify 再来一次 iconify,重新让它们再变成你想要的样子。 有个方法可以避免出现这种情况,把 '+I All (Iconic) ReThumbnail' 加到 Resta rtFunction 函数中去,ReThumbnail 函数如下所示
DestroyFunc ReThumbnailAddToFunc ReThumbnail+ I Iconify+ I Thumbnail
如果每样东西都设置正确,那么你的图标化窗口应该看起来像下面这两幅图那样 样图为 firefox 和 gvim
taviso 写的另一个函数是 FvwmExpose,这个函数很像 WindowList 函数。它的 作用是,用 ImageMagick 截取所有当前打开窗口的图像,然后将它们放入一个菜单, 以截取的图像作为图标。这里是份拷贝
###### FvwmExpose###########DestroyFunc FvwmExposeAddToFunc FvwmExpose+ I AddToMenu FvwmExposeMenu "e x p o s e" Title+ I + DynamicPopDownAction DestroyMenu FvwmExposeMenu+ I All (!Iconic !Shaded AcceptsFocus)\ PipeRead "echo Raise; \ xwd -silent -id $[w.id] | convert -scale $$(($[w.width]/10)) -quality 0 xwd:- \ png:$[fvwm_home]/tmp/icon.exp.$[w.id].png \ && echo AddToMenu FvwmExposeMenu \ %$[fvwm_home]/tmp/icon.exp.$[w.id].png%\\\'\"$[w.name]\"\\\' WindowID $[w.id] WarpToWindow 50 50 \ && echo AddToMenu FvwmExposeMenu \\\"\\\" Nop \ || Nop"+ I Popup FvwmExposeMenu+ I Exec exec rm -f $[fvwm_home]/tmp/icon.exp.*
我用 alt+鼠标中键 来调用这个函数,它会弹出 FvwmExposeMenu。有张样图能让你看到菜单看起来会是什么样子
上一篇:FVWM 入门指南 (高级主题 )
下一篇:FVWM 入门指南 (菜单进阶)
登录 注册