xmonad.hs
구성 파일 에서 몇 가지 키 매핑을 사용하고 있습니다.
...
, modMask = mod4Mask -- Rebind Mod to the Windows key
...
[ ((controlMask, xK_Print), spawn "sleep 0.2; scrot -s")
, ((0, xK_Print), spawn "scrot")
, ((controlMask, xK_f), spawn "firefox")
]
를 firefox
누르면 세 번째 매핑이 실행 됩니다 ctrl+f. 더 복잡한 것을하고 싶습니다.
if (firefox is running):
focus and maximize firefox window:
else:
run firefox
그리고 나는 변경하려면 ctrl+f에 win+f. 어떻게해야합니까?
답변
보면 XMonad의있는 contrib 패키지 , 당신은 찾을 XMonad.Actions.WindowGo
수출하는 다음 함수를 :
runOrRaiseMaster :: String -> Query Bool -> X ()
실행 하려면 프로그램의 문자열 인수가 필요합니다 ( 예 : “firefox”). X11 속성을 통해 이미 실행 중인지 확인하는 데 사용되는 부울 쿼리입니다 (className =? "Firefox")
( 예 : 변형 XMonad.Actions.WindowGo
페이지 는 맨 위 참조 ).
그래서, 당신이 필요로하는 모든 바인드하는 것입니다 runOrRaiseMaster "firefox" (className =? "Firefox")
당신이 원하는 키에 대한 설명XMonad.Doc.Extending
을 통해,
((modMask, xK_f ), runOrRaiseMaster "firefox" (className =? "Firefox"))
Data.Map
구성 의 키 바인딩 의 일부로 (세부 사항은 설정 방법에 따라 다릅니다 (예 : 전체, 키 바인딩 추가xmonad.hs
참조 )).
주 에는 진정한 의미가 없다는 것을 창 최대화 XMonad에서가. 설명대로 설정하면 다음과 같이 Mod4+ f동작합니다.
- 클래스 명 일치 “파이어 폭스”와 윈도우가 있다면, 그것은 초점을 맞 춥니 다 하고 마스터로 설정 , 즉, 최근에 따라 레이아웃 이 될 것 큰 창
- 창이 일치하지 않으면 Firefox가 생성 되고 master로 설정됩니다 .
선택하여 에뮬레이트 할 수 있습니다 극대화 Full
호출 한 후 레이아웃을 runOrRaiseMaster
, 여기에 설명 된대로 :
("M-<F1>", sendMessage $ JumpToLayout "Full")
(이 예제는 XMonad.Util.EZConfig
더 쉬운 키 바인딩 정의를 허용 함 을 보여줍니다 )
이 두 가지를 결합 하는 것도 가능합니다. 둘 다 유형 X ()
, 즉 X Monad에 있습니다. 사용 >>
유형 인 (확인 :t (>>)
의 ghci
)
(>>) :: Monad m => m a -> m b -> m b
우리는 (runOrRaiseMaster "firefox" (className =? "Firefox")) >> (sendMessage $ JumpToLayout "Full")
두 X ()
가지 유형의 유형을 조합하여 가지고 X ()
있으므로 키에 바인딩 될 수 있습니다.
편집 )
코드 줄에 누락>>
편집 2- modm
> modMask
.
Edit3 이것은 xmonad.hs
잘 작동합니다.