프로그램이 실행중인 경우 xmonad에서 핫키의 동작을 어떻게 변경할 수 있습니까?


12

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+fwin+f. 어떻게해야합니까?


이와 같은 교차 게시 (여기 및 스택 오버플로)는 실제로 일반적인 비즈니스입니까?
ДМИТРИЙ МАЛИКОВ

아니오 : 그것은 적극적으로 권장하지 않습니다 ...
jasonwryan

그것은 주제에 대한 주제가 아니므로 사본을 제거해달라고 요청했습니다
Michael Mrozek

@ dmitry.malikov 이것은 질문에 더 좋은 곳 인 것 같습니다.
xralf

더 나은; xralf가 SO 사본을 삭제했습니다. 많은 감사
Michael Mrozek

답변:


8

보면 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잘 작동합니다.

( 하스켈에게 좋은 유익을 배우는 것은 어떻습니까? )


작업 답변 및 기타 정보와 Haskell 튜토리얼에 감사드립니다. 나는 Haskell 구문과 기능적 패러다임을 좋아합니다. 작동하지 않는 유일한 것은 >> (sendMessage $ JumptoLayout "Full")생성자에 약간의 오류가 있다는 것입니다. 하스켈을 배우고 나서 해결하는 것이 쉬운 것일 수도 있습니다.
xralf

잊어 버렸습니다 : 그래도 modm작동하지 않지만 여전히을 사용하고 controlMask있습니다.
xralf

@xralf, (1) 괄호가 누락되었습니다. 지금 작동합니까? (2) xmonad.hs이 문제를 해결 하려면 전체 가 필요합니다 . config 아카이브를 둘러 보고 다른 사람들이 어떻게하는지 또는 언급 된 것을 사용하는 것이 더 좋습니다 EZConfig.
sr_

브래킷은 도움이되지 않았습니다. 여기 내가 사용하는 xmonad.hs 파일이 있습니다.
xralf

(1) 대괄호가 여전히 잘못 X ()(runOrRaiseMaster ...) >> (sendMessage ...),((...,...), (runOrR...) >> (send...) )(run...
되었으므로
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.