
構成
Debian Linux 8.2、64ビット、Xmonad 0.11
起動時に
xmonad.hs
最近システムをdebian8にアップグレードしたため、設定をいくつか調整する必要がありました。つまり、GStreamergst-launch
ウィンドウの管理フックを変更しました。
, title =? "gst-launch-0.10" --> doFloat
到着する:
, title =? "gst-launch-1.0" --> doFloat
Windowsには次の属性しかないので、代わりにtitle
使用しています。className
gst-launch-1.0
$ xprop
_NET_WM_DESKTOP(CARDINAL) = 6
WM_NAME(STRING) = "gst-launch-1.0"
WM_STATE(WM_STATE):
window state: Normal
icon window: 0x0
_MOTIF_WM_HINTS(_MOTIF_WM_HINTS) = 0x2, 0x0, 0x1, 0x0, 0x0
WM_PROTOCOLS(ATOM): protocols WM_DELETE_WINDOW
何ができるか
以前のWindowsでは見られなかった非常に奇妙な動作が発生しますgst-launch-0.10
。gst-launch-1.0
ウィンドウ(通常は小さい - 400x300)が起動すると、確率が低下する次のいずれかの状況が発生します。
- ウィンドウを別のタイル(まったくフローティングされていない)として追加し、内容を増やしてこのタイルを塗りつぶします(縦横比を維持)。タイルの残りの部分は黒です。
- ウィンドウを別のタイルとして追加し(まったくフローティングされていない)、このタイルの左上隅のみを描画します(拡大しません)。タイルの残りの部分はX-Windowの背景を表示します。
- 正しいフローティングウィンドウの確率は10%未満です。
私が試したこと
doFullFloat
そしてdoCenterFloat
まったく同じことをします(最後の場合を除いて、中央にあるか完全です)
私は何を疑いますか?
ウィンドウの存続期間中にタイトルが変更される可能性があるため、問題WM_NAME/title
はonlyを使用していると確信しています。WM_CLASS/className/appName
私の考えでは、gst-launch-1.0
ウィンドウは別の(またはなし)タイトルで始まり、しばらくすると次のように切り替わります。これで、メインイベントで優勝できるのか、決勝戦で優勝gst-launch-1.0
できるのかは運に依存します。xmonad
gst-launch-1.0
質問
最後のウィンドウを確実にキャッチできるように、ManageHookで「しばらく待機」する方法はありますかWM_NAME/title
?
それとも別のアイデアがありますか?
追加情報:
明らかにこれはgstreamerで修正されました。https://bugzilla.gnome.org/show_bug.cgi?id=750455- しかし、残念ながら、Debianに付属のgstreamerを使用する必要があります。
答え1
X ()
役に立つかもしれません。以下に、キーバインディングにバインドできるタイプがあります。
withWindowSet
$ (\ws -> case W.stack . W.workspace . W.current $ ws of
Just w' ->
mapM_
(\w -> do
s <- withDisplay
$ \d -> fmap resClass $ liftIO $ getClassHint d w
case (s) of
"Emacs" -> do
windows $ W.focusWindow w
"Lxterminal" -> do
wmName <- withDisplay
$ \d -> getStringProperty d w "WM_NAME"
case wmName of
Just "ranger" -> windows $ W.focusWindow w
)
$ W.integrate w'
_ -> return ()
)
重要な行は次のとおりです。
"Lxterminal" -> do
wmName <- withDisplay $ \d -> getStringProperty d w "WM_NAME"
case wmName of
Just "ranger" -> windows $ W.focusWindow w
だから私たちは最初に一致し、次にWM_CLASS
一致させますWM_NAME
。