구성
데비안 리눅스 8.2, 64비트, Xmonad 0.11
시작할 때
xmonad.hs
최근에 시스템을 debian8로 업그레이드했기 때문에 구성을 일부 조정 해야 했습니다 . 즉, GStreamer gst-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- 하지만 안타깝게도 데비안과 함께 제공되는 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
.