2014-11-20 16 views
7

Tôi muốn chuyển sang không gian làm việc trước đó và tiếp theo bằng cách sử dụng các nút 6 và 7 (các nút rocker ở hai bên của bánh xe) trên chuột. Tôi đoán nó có một cái gì đó để làm với additionalMouseBindings, và nếu điều đó theo cùng một mô hình như additionalKeys tôi muốn được vàng. Than ôi, nó không phải là, và tôi không hoàn toàn hiểu làm thế nào để xác định một ràng buộc mới. Ngây thơ:xmonad - chuyển đổi không gian làm việc bằng các nút chuột 6 và 7

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

không hoạt động, vì những lý do rõ ràng cho ai đó biết Haskell và xmonad.

TIA cho bất kỳ đề xuất nào.

+0

IIRC, giao thức X11 lõi chỉ có năm nút. Các nút khác có thể được phát hiện bằng cách sử dụng các phần mở rộng X (XINPUT, có thể? Tôi đã quên), nhưng tôi không biết liệu xmonad có khai thác các phần mở rộng như vậy hay không. – chi

Trả lời

4

Bởi "không hoạt động", tôi cho rằng bạn có nghĩa là nó không biên dịch.

Sau khi nhận xét @chi, tôi đã kiểm tra các nút: button6 and 7 are not defined, vì vậy đó là vấn đề đầu tiên. Nhưng theo this post các nút bổ sung hoạt động nếu bạn chỉ cung cấp số của chúng.

Có vẻ như bạn đang sử dụng chức năng additionalMouseBindings từ mô-đun XMonad.Util.EZConfig. Loại của nó là:

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

Bạn đang bao quanh nó trong backticks biến nó thành một nhà điều hành. Bạn không hiển thị toán hạng đầu tiên ở đây, thuộc loại XConfig a, do đó bạn có thể gặp lỗi đầu tiên tại đây. Bạn nên có một cái gì đó của biểu mẫu:

yourPreviousConfig `additionalMouseBindings` listOfBindings 

Biểu thức đó bằng với XConfig mới của bạn.

Bạn có thể thấy rằng danh sách các ràng buộc cho các nút chuột không phải là loại tương tự như đối với các phím. Các phần tử của danh sách là loại ((ButtonMask, Button), Window -> X()): các nút được liên kết với một hàm mất Window và trả lại X() (trong khi các khóa được liên kết với các biểu thức loại X()). XMonad sẽ gọi hàm bạn chỉ định ở đây với cửa sổ được nhấp làm đối số. Bạn không quan tâm đến cửa sổ trong trường hợp của bạn. spawn "xdotool key super+Down" là loại X(), bạn có thể biến chúng thành một chức năng mà phải mất một Window (hoặc bất cứ điều gì) bằng cách làm một lambda function:

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

Hoặc bạn có thể sử dụng const để có được một hàm hằng số mà luôn luôn trả spawn "xdotool key super+Down":

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

Cuối cùng, có vẻ như thực sự quá mức cần gọi xdotool để chuyển đổi không gian làm việc. Có lẽ bạn đang sử dụng some of the functions of the module here trong các ràng buộc chính của mình? Bạn có thể sử dụng chúng trong các ràng buộc chuột của bạn quá. nextWSprevWS thuộc loại X(), vì vậy bạn cần thực hiện các chức năng liên tục với chúng, như trên.

+0

Nó thực sự là một lỗi biên dịch dựa trên sự vắng mặt của một đối số cửa sổ. Đề xuất của bạn hoạt động hoàn hảo. Tôi giải quyết trên: '((0, 6), \ w -> moveTo Prev (WSIs notSP))' với một bộ lọc scratchpad thích hợp được xác định. Cảm ơn bạn đã giúp đỡ. –

Các vấn đề liên quan