구성 파일에서 일부 키맵을 사용하고 있습니다 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. 어떻게 해야 합니까?
답변1
보고 있다XMonad용 기여 패키지, 당신은 발견 할 것이다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"와 일치하는 클래스 이름을 가진 창이 있는 경우,집중될 것이다그리고마스터로 설정, 즉 가장 최근에공들여 나열한 것, 할 것이다큰 창문
- 일치하는 창이 없으면 Firefox는생산그리고마스터로 설정.
Full
호출 후 레이아웃을 선택하여 최대화를 시뮬레이션 할 수 있으며 runOrRaiseMaster
,여기에 설명된 대로:
("M-<F1>", sendMessage $ JumpToLayout "Full")
(이 예는 또한XMonad.Util.EZConfig
더 간단한 키 바인딩 정의가 가능합니다)
콤비네이션이 두 가지 모두 가능합니다. 둘 다 유형 X ()
입니다. 즉,X 모나드에서. 유형이 다음과 같은 을 사용하십시오 >>
( :t (>>)
in 에서 확인 ghci
).
(>>) :: Monad m => m a -> m b -> m b
(runOrRaiseMaster "firefox" (className =? "Firefox")) >> (sendMessage $ JumpToLayout "Full")
또한 키에 바인딩할 수 있도록 두 가지 유형의 조합이 있습니다 .X ()
X ()
)
편집 코드 줄이 누락되었습니다.>>
편집 2 modm
-> modMask
.