2014-11-20 1 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") 
] 

не работает по причинам, которые будут очевидны для кого-то, кто знает Haskell и xmonad.

TIA для любых предложений.

+0

IIRC, основной протокол X11 имеет только пять кнопок. Другие кнопки можно обнаружить с помощью X-расширений (XINPUT, может быть, я забыл), но я не знаю, использует ли xmonad такие расширения. – chi

ответ

4

От «не работает» Я полагаю, вы имеете в виду, что он не компилируется.

После комментария @chi я проверил кнопки: button6 and 7 are not defined, так что это первая проблема. Но согласно this post дополнительные кнопки работают, если вы просто укажете их номер.

Похоже, вы используете функцию additionalMouseBindings из модуля XMonad.Util.EZConfig. Его тип:

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") 

Или вы можете использовать const, чтобы получить постоянную функцию, которая всегда возвращает spawn "xdotool key super+Down":

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

И, наконец, кажется, что на самом деле слишком сложно вызвать xdotool для переключения рабочих областей. Возможно, вы уже используете some of the functions of the module here в ваших привязках клавиш? Вы также можете использовать их в своих привязках для мыши. nextWS и prevWS имеют тип X(), поэтому вам нужно сделать с ними постоянные функции, например, выше.

+0

Это была ошибка компиляции, основанная на отсутствии аргумента окна. Ваши предложения отлично работали. Я остановился на: '((0, 6), \ w -> moveTo Prev (WSIs notSP))' с соответствующим фильтром блокнот. Спасибо за вашу помощь. –

 Смежные вопросы

  • Нет связанных вопросов^_^