当我的垃圾邮件过滤器守护程序过滤一组邮件时,我正在使用zenity
发布简单通知。目前此消息已发布到屏幕中间,这是突兀的。我想将它发布到左上角。但是,zenity
不支持-geometry
选项,该选项应该是所有X应用程序的标准选项,其文档提供了控制窗口高度和宽度的选项,但不提供放置。
有没有办法控制张贴zenity
窗口的(x,y)坐标?
如果没有,有没有办法通过修改X资源或窗口管理器来解决这个问题(我正在使用fvwm
)?
编辑:以下内容在~/.fvwm2rc
(fvwm
版本2.5.26)中无效:
Style "Information" PositionPlacement -0 -0
Style "Zenity" PositionPlacement -0 -0
它们也不适用于删除的-0 -0
,如手册页中所示。
(zenity --info
的窗口标题是“信息”。)
有趣的是,zenity
忽略了我之前的窗口管理器指令,默认情况下应手动放置窗口。
修改:
在众多其他有趣的信息中,xprop(1)
报告了有关zenity
窗口的信息:
_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_DIALOG
WM_NORMAL_HINTS(WM_SIZE_HINTS):
program specified location: 0, 0
program specified minimum size: 307 by 128
program specified maximum size: 307 by 128
window gravity: NorthWest
WM_CLASS(STRING) = "zenity", "Zenity"
WM_ICON_NAME(STRING) = "Information"
WM_NAME(STRING) = "Information"
尽管这个显然令人鼓舞的报道,窗口实际上并没有张贴在0,0位置: - (
我知道Style
命令正在生效,因为我添加了!Borders
选项,确实zenity
窗口的帖子没有边框......但仍然在该死的中心屏幕!
答案 0 :(得分:4)
我是通过在子shell中使用wmctrl
来实现的。例如:
((sleep .4;wmctrl -r TeaTimer -R TeaTimer -e 0,50,20,-1,-1)
for ((a=$LIMIT; a > 0; a--)); do
# for loop generates text, not shown
done
wmctrl -R TeaTimer
) | zenity --progress --title="TeaTimer" --percentage=0
第一个wmctrl
将zenity移动到左上角,第二个移动到
当前工作空间请参阅full example。
答案 1 :(得分:2)
您可以尝试使用“旧”方式,使用FvwmEvent。
AddToFunc StartFunction I Module FvwmEvent FvwmEvent-MoveWindow
DestroyModuleConfig FvwmEvent-MoveWindow: *
*FvwmEvent-MoveWindow: Cmd Function
*FvwmEvent-MoveWindow: add_window MoveZenity
DestroyFunc MoveZenity
AddToFunc MoveZenity
+ I ThisWindow ("zenity") Move -0 -0
如果这仍然不起作用(或者您决定使用PositionPlacement让它工作),您可以尝试
BugOpts ExplainWindowPlacement
然后,Fvwm会将调试输出写入其日志文件(或控制台,具体取决于您的设置),解释它是如何放置窗口的(以及为什么会这样做)。
同样只是fyi,如果你想获得有关窗口的信息,你可以使用FvwmIdent模块来获取这些信息(而不是xprop,虽然两者都可以正常工作)。
答案 2 :(得分:1)
是的,通过窗口管理器的适当帮助肯定是可能的。例如,使用xmonad,它将是一行代码......
我的fvwm有点生疏,但它似乎有点像:
Style "zenity" PositionPlacement -0 -0
你的fvwm2rc中的应该可以解决问题。
编辑:注意小写的“zenity”,因为根据文档,它不仅应该匹配窗口标题,还要匹配窗口类(你可以使用“xprop”实用程序找到它:启动它并指向窗口问题)。
根据xprop,zenity窗口有两个有趣的属性:
_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_DIALOG
,表示它是一个对话框窗口WM_TRANSIENT_FOR(WINDOW): window id # <some window id here>
,表示它是一个对话框的主窗口(在我的例子中是 - xterm窗口)所以,如果我的建议不起作用,那几乎可以肯定,因为fvwm以一种特殊的方式处理对话 - 无论是由于配置还是由于硬编码的行为。
您可以尝试将“EWMHIgnoreWindowType
”添加到zenity窗口的样式中,这应该希望fvwm忽略这些提示
答案 3 :(得分:1)
尝试使用devilspie:http://burtonini.com/blog/computers/devilspie/
答案 4 :(得分:0)
您可以使用wmctrl
获取windowid,然后xdotool
将其放置在任意位置。简单且适用于多种类型的环境。
## Arg 1 - Pid of window to move.
## Arg 2 - X-Coord.
## Arg 3 - Y-Coord.
function move_win() {
xdotool windowmove $(wmctrl -lp | grep ${1} | cut -d' ' -f1) ${2} ${3}
}
E.g。 $> move_win $(pidof zenity) 0 0