XMonad:如何将Super(Win键)+ Space绑定到键盘布局开关?

时间:2015-02-07 19:01:26

标签: haskell emacs key-bindings xmonad keyboard-layout

我曾经在Windows 8上按❖win + 空格键切换键盘布局, + 空格键在OS X上。

然而,在Linux上,我将❖win密钥作为修饰符密钥专用于XMonad。因此,要在布局之间切换,我必须使用 alt + ⇧shift

在我安装Emacs之前,这不是问题。现在我可以使用所有 meta + shift 组合键,因为我有 alt meta ⎋逃避可以提供帮助,但这非常不方便)

我认为这种情况最简单的解决方法是将❖win + space 配置为布局切换组合。虽然XMonad默认使用这种组合来切换布局,但我很少在两个方向上循环布局,所以我很乐意用❖win + space 来切换键盘布局,并且< kbd>❖win + shift + space 来切换XMonad布局。如果我可以进行这样的配置,我将能够在Emacs中使用 alt 键作为 meta

但是,我不知道如何让XMonad使用❖win + space 作为键盘开关组合,更加精准我不知道它是否均匀可能的。

2 个答案:

答案 0 :(得分:1)

您所要做的就是解除绑定Win-Space(使用removeKeys),并为xmonad-layout切换和键盘布局切换创建绑定(使用additionalKeys或{{1 }})。 Details and examples in the documentation。 可以使用Core库中的additionalKeysP启动键盘布局切换命令。

答案 1 :(得分:1)

我能够通过 cycle-keyboard-layout 保存在路径上的shell(zsh)脚本来完成此任务:

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
dict = [NSMutableDictionary 

dictionaryWithObjectsAndKeys:_usernametf.text, @"username",_passwordtf.text, @"password", nil];
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.requestSerializer = [AFHTTPRequestSerializer serializer];

[manager POST:@"enter your url" parameters:dict progress:nil success:^(NSURLSessionTask *task, id responseObject) {
    NSLog(@"%@", responseObject);

}
      failure:^(NSURLSessionTask *operation, NSError *error) {
          NSLog(@"Error: %@", error);
      }];

然后,在我的 xmonad.hs 中,我包括:

#!/usr/bin/env zsh

total_layouts="${#@}"
current_layout=$(setxkbmap -query | awk '/layout:/{ print $2 }')
current_index="${@[(i)$current_layout]}"
next_index="$((current_index % total_layouts + 1))"
next_layout="${@[$next_index]}"

setxkbmap "$next_layout"

现在 + alt + 空格键(我使用 + 空格键换其他东西)在dvorak和我们之间切换我的布局qwerty。要使用其他布局,只需将import XMonad.Util.CustomKeys (customKeys) altMask = mod1Mask main = xmonad $ defaultConfig { keys = customKeys delkeys inskeys , modMask = mod4Mask } inskeys :: XConfig l -> [((KeyMask, KeySym), X ())] inskeys conf@XConfig {modMask = modMask} = [ -- modMask + alt + space , ((modMask .|. altMask, xK_space), spawn "cycle-keyboard-layout dvorak us") ] delkeys :: XConfig l -> [(KeyMask, KeySym)] delkeys XConfig {} = [] 替换为可以使用dvorak us设置的空格分隔布局列表。

我的完全裸骨 xmonad.hs 位于https://github.com/schlueter/xmonad-config/blob/master/xmonad.hs