2013-10-15 17 views
0

我一直是XMonad的長期用戶,直到我切換到符合人體工程學的鍵盤佈局,即Bépo(http://bepo.fr/wiki/Accueil)。如何在XMonad中重新配置1..9工作區快捷鍵?

直到那時我正在爲我的鍵盤使用XMonad.Config.Azerty模塊。但自佈局改變以來,鍵盤快捷鍵被打破。
更確切地說,工作區切換的工作區(home + 1 = workspace1,home + 2 = workspace2等)。
然後,我切換回默認配置,但它不是更好。

我明顯不需要defaultAzerty函數了。
有人知道我應該怎麼做,重新映射家+ 1..9 combinaison,使他們的工作。

編輯:更新配置

這裏是我的配置:

{-# LANGUAGE OverloadedStrings #-} 
{-# LANGUAGE Arrows #-} 

import XMonad 
import Graphics.X11.ExtraTypes.XF86 
import qualified Data.Map as M 
import qualified XMonad.StackSet as W 
import XMonad.Hooks.DynamicLog 
-- 
import XMonad.Layout.NoBorders 
-- 
import Data.Ratio 
import XMonad.Layout.PerWorkspace 
import XMonad.Layout.Spacing 
import XMonad.Layout.Grid 
import XMonad.Layout.IM 

main :: IO() 
main = xmonad =<< xmobar myConf 

-- |Main configuration, override the defaults to your liking. 
myConf = defaultConfig 
    { modMask = mod4Mask 
    , terminal = "urxvt" 
    , layoutHook = smartBorders $ myLayout 
    , workspaces = myWorkspaces 
    , keys = myKeys } 

-- | Keyboard keys 
homeMask :: KeyMask 
homeMask = 133 -- from the xev data 

keysToAdd x = 
    [ ((mod4Mask, xK_F4), kill) 
    , ((0, xF86XK_Calculator), spawn "mate-calculator") 
    , ((0, xF86XK_WWW), spawn "firefox") 
    , ((0, xF86XK_HomePage), spawn "caja") 
    , ((0, xK_Print), spawn "mate-screenshot") 
    , ((mod4Mask, xK_z), spawn "emacs") ] 
    ++ 
    [((m .|. homeMask, k), windows $ f i) 
     | (i, k) <- zip (XMonad.workspaces defaultConfig) [10 .. 19] 
     , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)] ] 

keysToDel x = [((mod4Mask .|. shiftMask), xK_c)] -- to delete the unused keys 

myKeys x = foldr M.delete (keysToAdd' x) (keysToDel x) 
    where 
    -- to include new keys to existing keys 
    keysToAdd' x = M.union (keys defaultConfig x) (M.fromList (keysToAdd x)) 

-- |Workspaces listing 
myWorkspaces = ["1:main", "2:edit", "3:web", "4:browse", "5:irc", "6:pidgin"] 

-- |Default layout 
myLayout = pidgin $ Mirror tiled ||| tiled ||| Full 
    where 
     -- pidgin conf 
     pidgin = onWorkspace "6:pidgin" pidginLayout 
     pidginLayout = withIM (18/100) (Role "buddy_list") gridLayout 
     gridLayout = spacing 8 $ Grid 

     -- default tiling algorithm partitions the screen into two panes 
     tiled = spacing 2 $ Tall nmaster delta ratio 
     -- The default number of windows in the master pane 
     nmaster = 1 
     -- Default proportion of screen occupied by master pane 
     ratio = 2/3 
     -- Percent of screen to increment by when resizing panes 
     delta = 5/100 

我也看到了帖子,但我不知道這是否是我想要的:Switching workspaces in xmonad using programmer dvorak keyboard layout (shifted numbers)

我有Haskell語言沒問題,但XMonad API非常大。

EDIT2:下面是什麼在這裏http://blacketernal.wordpress.com/set-up-key-mappings-with-xmodmap/寫的,我家的鑰匙已經是修改

這裏是最後一行的轉儲:

xmodmap的:每修改多達4個按鍵(鍵碼在括號內):

移Shift_L(0x32),Shift_R(0x3E的)鎖定CAPS_LOCK (的0x42)控制Control_L(0x25),Control_R(0×69)MOD1
Alt_L(0x40的),Meta_L(0XCD)MOD2 Num_Loc K(送出0x4d)MOD3
MOD4 Super_L(0x85),Super_R(0x86可以),Super_L(0xce),Hyper_L (0xcf)MOD5 ISO_Level3_Shift(0x5c),Mode_switch(0xcb)

回答

1

我使用的基本方法是要啓動xev,輸入你想要做的事情的關鍵組合,並注意出現什麼關鍵字。如果我理解正確,你想輸入Home + 1將你帶到工作區1.當我嘗試這個時,我得到以下,但你的結果可能不同

KeyRelease event, serial 33, synthetic NO, window 0x2600001, 
    root 0x1dc, subw 0x0, time 255407786, (1090,771), root:(1093,774), 
    state 0x0, keycode 10 (keysym 0x31, 1), same_screen YES, 
    XLookupString gives 1 bytes: (31) "1" 
    XFilterEvent returns: False 

KeyRelease event, serial 33, synthetic NO, window 0x2600001, 
    root 0x1dc, subw 0x0, time 255407938, (1090,771), root:(1093,774), 
    state 0x0, keycode 110 (keysym 0xff50, Home), same_screen YES, 
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False 

接下來,您將適當的掛鉤添加到您的xmonad。看着你引用的帖子,也許這樣的事情會起作用?

homeMask    :: KeyMask 
homeMask    = 110 -- from the xev data 

[((m .|. homeMask, k), windows $ f i) 
    | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9] 
    , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)] 

編輯:你走得太遠調試此之前,也許一個簡單的測試,以確保我們有正確被困的Home鍵。以下內容添加到您的配置:

homeMask    :: KeyMask 
homeMask    = 110 -- from the xev data 

而且在你的配置把這個在keysToAdd

, ((homeMask, xK_z     ), spawn "emacs") 

現在重啓XMonad,看看首頁+ Z啓動emacs的。

+0

據我所知,W來自進口限定的XMonad.StackSet作爲W線(不在提及的帖子),但conf變量來自哪裏? –

+0

我想你的情況下,你會'myConf'代替'conf'。 – mhwombat

+0

沒關係想通了,現在編譯但不起作用。 conf位來自tats配置(https://bbs.archlinux.org/viewtopic.php?id=78602)。在工作時會給出反饋,可以幫助任何使用bepo和xmonad的人 –