LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1093|回复: 5

[ Fvwm ] Thumbnail 缩略图的实现方式 / Pager 的循环切换

[复制链接]
发表于 2010-10-24 15:43:35 | 显示全部楼层 |阅读模式
1. 参考了几个 Fvwm 的配置文件,里面的 Thumbnail 缩略图的实现方式发现了 3 种:

a. 来自 FBG (Fvwm Beginner Guide) 的经典式:

  1. #DestroyFunc Thumbnail
  2. #AddToFunc Thumbnail
  3. #+ I Raise
  4. #+ I ThisWindow (!Iconic) SetEnv Icon-$[w.id] $[w.iconfile]
  5. #+ I ThisWindow (!Shaded, Iconifiable, !Iconic) PipeRead \
  6. #    "xwd -silent -id $[w.id] | convert -crop 90x50+15+50 -frame 0x0 \
  7. #    -mattecolor gray -quality 0 xwd:- png:$[FVWM_USERDIR]/images/tmp/icon.tmp.$[w.id].png \
  8. #    && echo WindowStyle IconOverride, Icon $[FVWM_USERDIR]/images/tmp/icon.tmp.$[w.id].png \
  9. #    || echo Nop"
  10. #+ I Iconify
复制代码



b. 来自 lastart 兄台的:比较简洁的 ImagicMagick 里面的 import 式:
From : http://www.linuxsir.cn/bbs/thread370167.html

  1. #DestroyFunc Thumbnail
  2. #AddToFunc   Thumbnail
  3. #+ I Raise
  4. #+ I SetEnv Icon-$[w.id] $[w.iconfile]
  5. #+ I ThisWindow (!Shaded Iconifiable !Iconic) PipeRead \
  6. #    "import -resize 128x96 -window $[w.id] -silent /tmp/.fvwm_thumbnails/icon.tmp.$[w.id].png \
  7. #    && echo WindowStyle IconOverride, \
  8. #    Icon /tmp/.fvwm_thumbnails/icon.tmp.$[w.id].png \
  9. #    || echo Nop"
复制代码


c. 使用 imlib2 库,编写的简短 C 程序:
From : http://pemarchandet.free.fr/fvwm.html

  1. #DestroyFunc Thumbnail
  2. #AddToFunc Thumbnail
  3. #+ I PipeRead "echo $[w.id] >> $[FVWM_USERDIR]/.icons"
  4. #+ I Raise
  5. #+ I ThisWindow (!Shaded, Iconifiable, !Iconic) PipeRead "$[FVWM_USERDIR]/scripts/thumb $[w.id] $[fvwm_icon_size] /tmp/thumb/icon.tmp.$[w.id].png $[w.miniiconfile]"
  6. #+ I Iconify
复制代码


这 3 种方法,a,可以不错的工作,c 也可工作,但,有时第一次生成的缩略图无法显示
要在第二次调用时才可显示; b 好像,一直不能工作。我一直想用 import 实现的 缩略图
实现,感觉更专业些。经典的 a 要,先用 xwd 截图,再用 convert 转换,觉得有的麻烦!

所以,想问一下,其他 Fvwm 兄台,可有 import 的缩略图方案,谢谢分享!


2. pager 的页面切换:我使用了 单行 3 个 虚拟桌面,每次在最 左/右 切换时,希望能够
实现类似 循环的切换,在最右边的 桌面,直接切换到最左边的桌面!

但不知道那个 参数/选项 控制?


谢谢!!!
发表于 2010-10-24 18:35:37 | 显示全部楼层
谢谢你指出的问题,我比较了一下,可能是判定条件处有问题,
ThisWindow (!Shaded, Iconifiable, !Iconic)
它们的判定条件都是","分隔的,我的是用空格分隔,很可能是这个问题,你可否试一下。
以前的版本支持用逗号和空格分隔,但现在只能用逗号,所以条件一直不会满足。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-10-24 21:18:31 | 显示全部楼层
lastart 兄,按你说的修改了分隔符,取消掉自定义的最小化函数中关于 缩略图的注释就可以了。

但感觉有点卡,难道 一个 import 还比 xwd + convert 慢吗,不解?

看来俺对 fvwm 的学习还有好长的路要走呢,从你的作品里面学习,吸收了好的精华

非常感谢!!!
回复 支持 反对

使用道具 举报

发表于 2010-10-24 23:16:28 | 显示全部楼层
我的脚本比那个慢是正常的,你看第一个它用的是
convert -crop 90x50+15+50
这是剪切,它是切了图像的一小部分做缩略图;而我用的是
import -resize 128x96
是把整个图像缩小成合适的大小做缩略图,所以会慢点,另外它用了
-quality 0 这个参数表示图片不压缩,也可以提高点速度。
imagemagic的参数是通用的,你可以把它用的命令参数用在import里。

imagemagic还有很多参数可能可以提高速度,比如用 -thumbnail 代替 -resize可能也可以提高速度。不过用什么参数可以达到最快的速度就得靠你自己开发了。
http://www.imagemagick.org/script/command-line-options.php
这个网址给出了所以参数的说明,如果你能找到很好的提速参数,记得上来说一声。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-10-25 16:51:15 | 显示全部楼层
imagemagicK 的学问挺多的,manual 可以和 fvwm 媲美了,好的数学原理!

我还有一个疑问,如果启用 缩略图,config 里面指定 app 的 style 图标就不能用了,不知是否

是 thumbnail 覆盖了该选项设置。

lastart 兄,我找到一个不是剪切窗口一部分的配置
  1. DestroyFunc Thumbnail
  2. AddToFunc Thumbnail
  3. + I Raise
  4. + I ThisWindow (!Iconic) SetEnv Icon-$[w.id] $[w.iconfile]
  5. + I ThisWindow (!Shaded, Iconifiable, !Iconic) PipeRead \
  6.     "xwd -silent -id $[w.id] | convert -scale 150 \                                                               
  7.     -mattecolor black -quality 0 -filter blackman xwd:- png:$[FVWM_USERDIR]/images/tmp/icon.tmp.$[w.id].png \
  8.     && echo WindowStyle IconOverride, Icon $[FVWM_USERDIR]/images/tmp/icon.tmp.$[w.id].png \
  9.     || echo Nop"
  10. + I TestRc (Match) Test (f $[w.miniiconfile], f $[FVWM_USERDIR]/images/tmp/icon.tmp.$[w.id].png) PipeRead \
  11.     "composite -geometry +2+4 $[w.miniiconfile] $[FVWM_USERDIR]/images/tmp/icon.tmp.$[w.id].png \
  12.     $[FVWM_USERDIR]/images/tmp/icon.tmp.$[w.id].png; echo Nop"
  13. + I Iconify
复制代码

可否对该示例做个分解,解析,生成原理不很清楚!非常感谢!
回复 支持 反对

使用道具 举报

发表于 2010-10-25 21:13:57 | 显示全部楼层
你最好自己查手册,
Raise :升起,防止取缩略图时部分窗口被挡
ThisWindow (测试条件) :当前窗口满足测试条件时
ThisWindow (!Iconic) 当前窗口不是图标化的窗口时,执行
ThisWindow (!Shaded, Iconifiable, !Iconic)当前窗口没被缩成一条,可以图标化,且没有被图标化时,执行
SetEnv Icon-$[w.id] $[w.iconfile] :设置环境变量Icon-[窗口id]的内容为$[w.iconfile]
PipeRead :调用外部程序,外部程序结束后,把外部程序的输出当成fvwm命令执行。
TestRc :测试上次测试的结果。
TestRc (Match) 上个测试命令测试结果是满足条件时,执行
Test :测试某些条件是否满足,f $[w.miniiconfile] 为文件是否存在。
Test (f $[w.miniiconfile], f $[FVWM_USERDIR]/images/tmp/icon.tmp.$[w.id].png) 测试文件$[w.miniiconfile]和$[FVWM_USERDIR]/images/tmp/icon.tmp.$[w.id].png是否存在,如果文件都存在,则执行
Iconify :将窗口图标化

PipeRead后面执行的是:抓图,把图弄小,如果成功就输出
“WindowStyle IconOverride, Icon $[FVWM_USERDIR]/images/tmp/icon.tmp.$[w.id].png”
让Fvwm重新定义窗口的图标,如果失败就输出“Nop”,让Fvwm什么都别做。
额外这条
“composite -geometry +2+4 $[w.miniiconfile] $[FVWM_USERDIR]/images/tmp/icon.tmp.$[w.id].png $[FVWM_USERDIR]/images/tmp/icon.tmp.$[w.id].png”
的作用是把窗口小图标加在窗口缩略图上。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表