代码之家  ›  专栏  ›  技术社区  ›  Norman Ramsey

我的shell脚本如何控制zenity窗口的位置?

  •  5
  • Norman Ramsey  · 技术社区  · 15 年前

    zenity 当我的垃圾邮件过滤器守护进程过滤一组邮件时发布一个简单的通知。目前,这条消息被发布到屏幕中间,这是一个突兀的消息。我想把它贴在左上角。然而, 天顶 不尊重 -geometry

    有没有办法控制(x,y)坐标 天顶 窗户贴好了吗?

    fvwm )?


    :以下不适用于 ~/.fvwm2rc fvwm 版本2.5.26):

    Style "Information" PositionPlacement -0 -0
    Style "Zenity" PositionPlacement -0 -0
    

    -0 -0 删除,如手册页所示。 zenity --info 是“信息”。)

    有趣的是, 天顶


    编辑

    在许多其他有趣的信息中, xprop(1) 天顶 窗口:

    _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 选择,当然 无边框窗口柱。。。但还是在屏幕中央!

    5 回复  |  直到 14 年前
        1
  •  4
  •   Martijn Pieters    12 年前

    我是用 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公司 当前工作区。见a full example .

        2
  •  2
  •   Bert Geens    14 年前

    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会将调试输出写入它的日志文件(或控制台,取决于您的设置),解释它如何放置窗口(以及为什么这样做)。

    另外,仅供参考,如果您想获取有关窗口的信息,可以使用FvwmIdent模块来获取此信息(而不是xprop,尽管两者都工作得很好)。

        3
  •  1
  •   ADEpt    15 年前

    是的,在窗口管理器的适当帮助下,这是绝对可能的。例如,对于xmonad,它将是一行代码。。。

    我的fvwm有点生锈了,但看起来像是:

    Style "zenity" PositionPlacement -0 -0
    

    编辑:注意小写的“zenity”,因为根据文档,它不仅应该匹配窗口标题,还应该匹配窗口类(您可以使用“xprop”实用程序找到它:启动它并指向有问题的窗口)。

    根据xprop,zenity窗口有两个有趣的特性:

    1. _NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_DIALOG ,表示它是一个对话框窗口
    2. WM_TRANSIENT_FOR(WINDOW): window id # <some window id here> ,指示作为对话框的主窗口(在本例中为-xterm window)

    所以,如果我的建议不起作用,那几乎肯定是因为fvwm以一种特殊的方式处理对话框-要么是由于配置,要么是由于硬编码的behavoir。

    您可以尝试添加“ EWMHIgnoreWindowType “对于zenity窗口的风格,它应该希望fvwm忽略这些提示

        5
  •  0
  •   user4401178 user4401178    9 年前

    你可以用 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}
    } 
    

    例如。 $> move_win $(pidof zenity) 0 0