2014-11-20 2 views
7

마우스 및 마우스의 6 번 및 7 번 버튼 (휠의 양측에있는 로커 버튼)을 사용하여 이전 및 다음 작업 공간으로 이동할 수 있기를 바랍니다. 나는 그것이 additionalMouseBindings과 관련이 있다고 추측하고 있는데, 그 패턴이 additionalKeys과 같은 패턴이면 나는 황금색이 될 것입니다. 아아, 그렇지 않아 새로운 바인딩을 정의하는 방법을 완전히 이해하지 못합니다. 순진함 :xmonad - 마우스 버튼 6 및 7이있는 작업 공간 전환

`additionalMouseBindings` 
[ -- get the middle button to switch views 
    ((0, button6), spawn "xdotool key super+Down") 
, ((0, button7), spawn "xdotool key super+Up") 
] 

은 하스켈과 xmonad를 아는 사람에게 명백한 이유 때문에 작동하지 않습니다.

TIA에 대한 제안.

+0

IIRC의 핵심 X11 프로토콜에는 버튼이 5 개뿐입니다. 다른 버튼은 X 확장 (XINPUT, 아마도? 잊어 버렸습니다)을 사용하여 감지 할 수 있습니다. 그러나 xmonad가 이러한 확장을 사용하는지 여부는 알지 못합니다. – chi

답변

4

"작동하지 않습니다"라는 말은 컴파일하지 않는다고 가정합니다.

@chi 주석 다음에 나는 button6 and 7 are not defined 버튼을 검사 했으므로 이것이 가장 큰 문제입니다. 그러나 this post에 따르면 방금 번호를 입력하면 추가 버튼이 작동합니다.

XMonad.Util.EZConfig 모듈의 additionalMouseBindings 함수를 사용하는 것 같습니다. 유형은 다음과 같습니다.

additionalMouseBindings :: XConfig a -> [((ButtonMask, Button), Window -> X())] -> XConfig a 

연산자를 조작하는 역 따옴표로 묶습니다. 여기에 첫 번째 피연산자 인 XConfig a이 표시되지 않으므로 여기서 첫 번째 오류가 발생할 수 있습니다. 다음과 같은 형식이 있어야합니다.

yourPreviousConfig `additionalMouseBindings` listOfBindings 

그 표현식은 새로운 XConfig와 같습니다.

마우스 버튼의 바인딩 목록이 키의 유형과 일치하지 않음을 알 수 있습니다. 목록의 요소는 ((ButtonMask, Button), Window -> X()) 유형입니다. 단추는 Window을 사용하는 함수에 연결되고 X()을 반환합니다 (반면 키는 X() 형식의 식과 연결됨). XMonad는 클릭 한 창으로 여기서 지정한 함수를 인수로 호출합니다. 당신은 당신 사건의 창문에 관심이 없습니다. spawn "xdotool key super+Down" 유형 X()의, 당신은 제작하여 Window (또는 무엇이든)를받는 함수로 그를 설정 할 수있는 lambda function :

((0, 6), \w -> spawn "xdotool key super+Down") 

또는 당신은 항상 spawn "xdotool key super+Down"를 돌려 일정한 기능을 얻을 수 const를 사용할 수 있습니다

((0, 6), const $ spawn "xdotool key super+Down") 

마지막으로 xdotool을 호출하여 작업 영역을 전환하는 것은 과도한 것처럼 보입니다. 키 바인딩에 some of the functions of the module here을 이미 사용하고 계신지요? 마우스 바인딩에서도 사용할 수 있습니다. nextWSprevWSX() 유형이므로 위와 같이 상수 함수를 사용해야합니다.

+0

사실 창 인수가 없기 때문에 컴파일 오류가 발생했습니다. 당신의 제안은 완벽하게 작동했습니다. 적절한 스크래치 패드 필터가 정의 된'((0, 6), \ w -> moveTo Prev (WSIs notSP))'에 정착했습니다. 당신의 도움을 주셔서 감사합니다. –