6

zenity私のスパムフィルターデーモンがメッセージのグループをフィルタリングするときに、簡単な通知を投稿するために使用しています。現在、このメッセージは目立たない画面の中央に投稿されています。左上隅に投稿したい。ただし、すべての X アプリケーションの標準であると想定されているオプションをzenity尊重しません。そのドキュメントには、ウィンドウの高さと幅を制御するためのオプションが提供されていますが、配置は提供されていません。-geometry

zenityウィンドウが表示される (x,y) 座標を制御する方法はありますか?

そうでない場合、X リソースまたはウィンドウ マネージャー (私は を使用していますfvwm) をいじってこの問題を解決する方法はありますか?


EDIT~/.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を追加したため、コマンドが有効になっていることはわかっています。確かに、ウィンドウは境界線なしで投稿されます...それでも、いまいましい画面の中央にあります!!Borderszenity

4

5 に答える 5

4

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 を左上に移動し、2 番目に現在のワークスペースに移動します。完全な例を参照してください。

于 2012-11-08T18:42:39.243 に答える
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 はデバッグ出力をログファイル (または設定によってはコンソール) に書き込み、ウィンドウをどのように配置するか (およびなぜそうするか) を説明します。

また、参考までに、ウィンドウに関する情報を取得したい場合は、FvwmIdent モジュールを使用してこの情報を取得できます (xprop の代わりに、どちらも正常に動作します)。

于 2011-01-06T13:27:58.827 に答える
1

デビルスピーを試す: http://burtonini.com/blog/computers/devilspy/

于 2010-01-24T12:39:10.847 に答える
1

はい、ウィンドウマネージャーの適切なヘルプがあれば、間違いなく可能です。たとえば、xmonad では 1 行のコードになります...

私の fvwm は少し錆びていますが、次のような感じです:

Style "zenity" PositionPlacement -0 -0

あなたの fvwm2rc でうまくいくはずです。

編集:ドキュメントによると、小文字の「zenity」に注意してください。これは、ウィンドウのタイトルだけでなく、ウィンドウクラスにも一致する必要があるためです(「xprop」ユーティリティを使用して見つけることができます:起動して問題のウィンドウを指す)。

xprop によると、zenity ウィンドウには 2 つの興味深いプロパティがあります。

  1. _NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_DIALOGあり、ダイアログ ウィンドウであることを示します。
  2. WM_TRANSIENT_FOR(WINDOW): window id # <some window id here>ダイアログであるメインウィンドウを示す があります(私の場合、xtermウィンドウ)

したがって、私の提案が機能しない場合、それはほぼ確実に、fvwm が特別な方法でダイアログを処理するためです - 構成またはハードコードされた動作のためです。

zenity ウィンドウのスタイルに" " を追加してみるとEWMHIgnoreWindowType、うまくいけば fvwm はそれらのヒントを無視するはずです。

于 2009-11-12T14:33:20.837 に答える