如何分别映射左移键和右移键?


10

首先,请原谅我对X和XKB的无知;我一直在尝试找到一种解决方案,希望能够在不需要详细了解的情况下实现我想要的功能。

我正在尝试在Ubuntu 12.04上创建XKB键盘映射,该映射允许我规定两个Shift键中的哪个键构成了Level2修饰符。具体来说,4只有$在保持右移的情况下,键才应该产生一个,而不是向左移动。

到目前为止,我的阅读:

我试图定义一个自定义类型,然后在符号映射中显式引用它:

/usr/share/X11/xkb/types/mbfisher

default xkb_types "mbfisher" {
  type "RIGHT_SHIFT" {
    modifiers = None+Shift_R;
    map[None] = Level1;
    map[Shift_R] = Level2;
  };
}

/usr/share/X11/xkb/symbols/mbfisher

default
partial alphanumeric_keys
xkb_symbols "basic" {

  name[Group1]= "mbfisher";

  key <AE04> {
    type= "RIGHT_SHIFT",
    symbols[Group1]= [ 4,  dollar ]
  };

};

然后,我使用Ubuntu键盘布局GUI选择地图。

显然,这会禁用除4键之外的字母数字键盘,但是仍然可以使用任一Shift键键入美元符号。

我意识到要用大量无用的信息编写一个庞大的问题,所以我就在这里停止。请索要我错过的任何事情。

有任何想法吗?

Answers:


2

我不知道这是否是您想要的解决方案,但是禁用左移键的一种可能性是使用xmodmap。创建一个~/.Xmodmap包含内容的文件

clear shift
add shift = Shift_R

然后跑xmodmap ~/.Xmodmap


查看评论/聊天:

如果其他程序对您的xkbmap进行了其他一些修改,则可能会遇到问题,因此setxkbmap us可能需要使用类似的方法将其重置为默认的xkbmap 。

如果要使某些键仅响应一个Shift键,则可以获取当前的键盘布局,xmodmap -pke > .Xmodmap从而.Xmodmap以形式列出所有键keycode XX = functions。在此分配中,每个键码在右侧均可具有多个功能。每个对应于一个不同的修饰符 +该键。然后,您可以从上方插入clear + add并添加类似的内容add mod5 = Shift_L。右移键将对应于mod2,而左移键将对应于mod5。然后,您可以通过简单地插入NoSymbol和空格直到右栏(keycode 57 = n N-> keycode 57 = n NoSymbol NoSymbol NoSymbol N),将想要调用的键的mod2功能通过左移键移动到mod5 。


乐意效劳。奏效了吗?
Trudbert

抱歉,今天很忙。运行xmodmap之后,我仍然有两个shift键可用,我是否需要做其他任何事情来获取更改?
mbfisher 2012年

在尝试xmodmap -e“清除移位”之后,如果该按钮不起作用,则应该没有可用的移位键,其余的也应起作用
Trudbert 2012年

不,仍然有换档键。# xmodmap -verbose -e "clear shift" ! 1: clear shift clear shift ! ! executing work queue ! clear shift
mbfisher 2012年

奇怪。没有错误讯息?clear应该删除与修饰符关联的所有内容,因此应该什么也没有了。我将在一个小时左右的时间内使用Linux系统,然后再次进行研究。
Trudbert

2

这是终于奏效的东西!我用的xmodmap~/.Xmodmap文件而不是xkb的配置。

~/.Xmodmap

clear Shift

! Key Shift+Key mode_switch+Key mode_switch+Shift+Key AltGr+Key AltGr+Shift+Key
! Key Shift_L+Key Shift_R+Key Shift_R+Shift_L+Key AltGr+Key AltGr+Shift_L+Key

keycode 10 = 1 1 exclam 1
keycode 11 = 2 2 at 2
keycode 12 = 3 3 numbersign 3
keycode 13 = 4 4 dollar 4
keycode 14 = 5 5 percent 5

keysym Shift_R = Mode_switch
add Shift = Shift_L

2条带注释的行(以开头!)显示了更改前后的列标题。这使我可以将col 2指定为Shift_L,将col 3指定为Shift_R,因为我已将shift_R映射为Mode_switch。

通过运行以下命令进行更改:

 # setxkbmap us
 # xmodmap ~/.Xmodmap

setxkbmap us设置默认的美国地图,这样您就可以从头开始,xmodmap并将自定义更改附加到它。

如果实施了!@#$%字符只能用右shift键输入,和^&*(并且)只能用左shift键可以打出来。

现在,我可以继续进行操作,将键盘左侧的所有键映射为只能由右Shift键修改(即,字母和大写字母的修改),反之亦然;这种解决方案意味着我只需要重新映射左侧。

在此过程中找到了其他有用的链接:

非常感谢@Trudbert,让我获得了大部分的答案!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.