有一个问题一直寻找答案却得不到解决,所以就冒昧向大侠请教了。希望有空时帮我看看是否可以实现。
【欲实现效果】
我平时通过看英语原声电影来学习英语,这些片子大多是网上字幕组在源片上加入压制的中文字幕形成的的rmvb格式(这类资源比较好找,因为大部分人需要借助字幕的),但是一般情况下我不希望看到这些中文字幕以免干扰英语听力的培养,所以我希望能有一个“挡板”(就是一个窗口)在看电影时把字幕部分挡住且此时仍然可以用快捷键来控制电影的播放,同时这个“挡板”窗口本身也可以用一个键盘快捷键来切换其显示与隐藏----这样可以变通地实现对字幕“显示”或“隐藏”的切换----以方便必要时对字幕的参考。
【我的实现办法】
在KDE里有个通过快捷键(默认是F12)切换其显隐的模拟终端程序----yakuake,它可以充当上述的“挡板”窗口的角色,默认情况下,在它处于隐藏状态时,焦点在其他窗口上,按下F12键,yakuake窗口会显示出来同时焦点会自动转移到yakuake窗口上去,此时再按F12键,yakuake会隐藏起来,同时把焦点送出。
如果用一个普通的GUI播放器播放电影,切换yakuake显隐时可能会把播放器GUI窗口的焦点窃取,从而使快捷键控制电影播放失败,但如果在KDE里完全禁止焦点窃取,yakuake的显隐切换就会受影响----因为它的窗口显隐快捷键切换模式也是利用了焦点窃取。
后来我在yakuake这个终端里调用命令模式的Mplayer来播放电影,这样Mplayer播放电影时会使用两个窗口,一个是yakuake窗口来显示其有关诸如播放进度的信息,另外打开一个窗口来显示播放的视频。这种情况下,当yakuake窗口处于显示状态且焦点在其上时,字幕被挡住,同时快捷键对电影播放控制有效----因为此时yakuake窗口也被Mplayer所使用即Mplayer仍然有焦点,当yakuake窗口隐藏后它把焦点送给另外那个用来播放视频的窗口,因为这个视频窗口也被Mplayer使用,所以Mplayer的快捷键仍然对播放的视频有效。
这样就基本实现了我在【欲实现效果】中的描述。
【对实现办法的改进及遇到的问题】
Mplayer提供的快捷键毕竟是有限的,比如它里面没有复读功能,而这个复读功能对语言学习很有帮助,所以我想改进一下,方法是这样的,在yakuake里启动Emacs的emms模式,emms是Emacs的一个多媒体扩展,其实就是在Emacs里创建了一个媒体播放器的前端,具体的播放需要借助其他播放器----比如我用的Mplayer------来实现,emms可以通过写elisp函数来扩展它的命令集,那么我通过写一些有关复读控制的elisp函数绑定给emms,emms就能通过调用Mplayer来实现复读功能。但这样的改进是不完美的,因为当yakuake处于显示状态且焦点在其上时,yakuake窗口中的Emacs--emms共享焦点从而它的复读控制功能有效,但当yakuake处于隐藏状态时,因为yakuake已把焦点送给Mplayer视频播放窗口,这样Emacs--emms就因失去焦点而无法再控制播放,当然Mplayer的快捷键仍然有效,但复读功能就无法使用了。
我的问题就是如何实现让Emacs--emms在无论yakuake窗口显隐的情况下都能对视频播放实现控制----也就是复读功能不因yakuake的隐藏而失效。我思来想去,觉得大概需要让有关yakuake的焦点转移变化一下:当处于显示状态的yakuake被快捷键唤向隐藏状态时不自动送出焦点----继续保持焦点直到用鼠标在其他窗口上操作时为止(当然把yakuake从隐藏状态唤到显示状态时它要能够自动获得焦点,这一点不能改变)。但我在yakuake的设定项里没有找到相关的设置,看来也许只能在X-window或窗口管理器的相关设定方面寻找办法了,但我对X-window和窗口管理器的设定一窍不通。
希望各位高手抽空帮我看看这个问题,是否能够在X-window的.Xfault里设定一下,或者在窗口管理器的配置文件里设定也可以,如果KDE不好配置,换成配置灵活的FVWM窗口管理器,在它的.fvwmrc里能够设定好也可以。
其实我想这个问题简单地说,就是设定特定的程序窗口可以通过快捷键窃取别人的焦点但一旦它获得焦点后却不能被别人窃取并且它也不主动送出(即使这个程序自己默认在某种情况下要主动送出焦点我们也要给它屏蔽掉),当然用鼠标操作总是可以转移焦点的。
rosemead 于 2008-12-11 18:11:43发表:
据某个高手讲 在linux里 窗口管理器不会让一个隐藏的窗口保持焦点 这真是有点遗憾啊
14cheese 于 2008-12-11 17:11:00发表:
用linux的手工高手给你支个招:在电脑显示器上,用不干胶粘一纸条,具体做法,自己想一下就行了。