Fvwm 下 win+D 和 win+L 功能的实现
突然对于 Fvwm 产生了浓厚的兴趣,大概是由于 Gnome 不能实现 Tile and Cascad 让我感到失望的缘故吧。Fvwm 的确让人爱不释手,玩起来上瘾。很多炫酷的功能就不讲了,谈谈怎么实现 Windows 下的 Win+D 显示桌面和 Win+L 锁定桌面的功能好了。后者很简单,前者稍微麻烦一点点。
Win+D 不是简单地把所有窗口最小化就完了,再按下一次会恢复原来的布局。就是说原来非最小化的窗口按一下最小化,按两下就恢复正常,而原来最小化的窗口始终保持最小化。这就涉及到分类和记忆状态。把这个问题想明白了,实现就简单多了。
DestroyFunc FuncFvwmIconifyTrue
AddToFunc FuncFvwmIconifyTrue
+ I All (!Iconic) State 1
+ I All (State 1) Iconify True
DestroyFunc FuncFvwmIconifFalse
AddToFunc FuncFvwmIconifyFalse
+ I All (State 1) Iconify False
DestroyFunc FuncFvwmIconifyToggle
AddToFunc FuncFvwmIconifyToggle
+ I FuncFvwmIconifyFalse
+ I All (State 1) State 1 False
+ I TestRc (NoMatch) FuncFvwmIconifyTrue
Key D A 4 FuncFvwmIconifyToggle
试试看,我不解释你能看明白思路吗?
其实很简单,首先尝试将标记过为普通又可能最小化了的窗口恢复。这是为了实现第二次按 Win+D 时的个功能,然后将标记撤除。如果没有这种标记,就将所有普通窗口标记,然后将其最小化,这就实现的第一次按 Win+D 的功能。看起来很麻烦,其实想想看很容易明白了哦。
实现 Win+L 就简单多了,和普通的快捷键定义没什么区别:)
DestroyFunc FuncFvwmLockScreen
AddToFunc FuncFvwmLockScreen
+ I All (xscreensaver) Nop
+ I TestRc (NoMatch) Exec xscreensaver -no-splash &
+ I Exec xscreensaver-command -lock
Key L A 4 FuncFvwmLockScreen
阅读(2283) | 评论(0) | 转发(0) |