2014-11-20 10 views
7

Mi piacerebbe essere in grado di passare al posto di lavoro precedente e successivo utilizzando i pulsanti 6 e 7 (i pulsanti a bilanciere su entrambi i lati della rotellina) sul mio mouse. Immagino che abbia qualcosa a che fare con additionalMouseBindings, e se quello seguisse lo stesso schema di additionalKeys sarei d'oro. Ahimè, non lo è, e non capisco appieno come definire una nuova associazione. L'ingenua:xmonad - commutazione aree di lavoro con i pulsanti del mouse 6 e 7

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

non funziona, per ragioni che saranno evidenti a qualcuno che conosce Haskell e xmonad.

TIA per eventuali suggerimenti.

+0

IIRC, il protocollo X11 principale ha solo cinque pulsanti. Altri pulsanti possono essere rilevati usando le estensioni X (XINPUT, forse? Ho dimenticato), ma non ho idea se xmonad sfrutti anche tali estensioni. – chi

risposta

4

Per "non funziona", suppongo che intendi che non viene compilato.

Dopo il commento @chi, ho controllato i pulsanti: button6 and 7 are not defined, quindi questo è un primo problema. Ma secondo lo this post i pulsanti extra funzionano se si dà il proprio numero.

Sembra che si stia utilizzando la funzione additionalMouseBindings dal modulo XMonad.Util.EZConfig. Il suo tipo è:

Si sta circondando in apici inversi che lo trasforma in un operatore. Qui non stai mostrando il primo operando, di tipo XConfig a, quindi potresti avere un primo errore qui. Si dovrebbe avere qualcosa del formato:

yourPreviousConfig `additionalMouseBindings` listOfBindings 

Quell'espressione è uguale al nuovo XConfig.

Si può vedere che l'elenco di collegamenti per i pulsanti del mouse non è lo stesso dei tasti. Gli elementi dell'elenco sono di tipo ((ButtonMask, Button), Window -> X()): i pulsanti sono associati a una funzione che prende uno Window e restituisce X() (mentre i tasti sono associati alle espressioni di tipo X()). XMonad chiamerà la funzione specificata qui con la finestra cliccata come argomento. Non ti interessa della finestra nel tuo caso. spawn "xdotool key super+Down" è di tipo X(), è possibile trasformarla in una funzione che prende un Window (o nulla) facendo una lambda function:

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

Oppure è possibile utilizzare const per ottenere una funzione costante che ritorna sempre spawn "xdotool key super+Down":

Infine, sembra davvero eccessivo chiamare xdotool per passare da uno spazio di lavoro all'altro. Forse stai già utilizzando some of the functions of the module here nelle associazioni di tasti? Puoi usarli anche nelle associazioni del mouse. nextWS e prevWS sono di tipo X(), quindi è necessario fare funzioni costanti con loro, come sopra.

+0

Si trattava in effetti di un errore di compilazione basato sull'assenza di un argomento di finestra. I tuoi suggerimenti hanno funzionato perfettamente. Ho optato per: '((0, 6), \ w -> moveTo Prev (WSIs notSP))' con un filtro scratchpad appropriato definito. Grazie per l'aiuto. –

Problemi correlati