如何将一些键盘布局与布局切换环分开?

如何将一些键盘布局与布局切换环分开?

我需要的是

  1. Shift-CapsLock使用我最喜欢的快捷方式(即)在俄语和英语布局之间切换
  2. 使用另一个快捷方式切换到白俄罗斯布局(例如,,Ctrl-RightShift但实际绑定并不重要)
  3. 当白俄罗斯语布局处于活动状态时,切换回俄语/英语Shift-CapsLock

xkb有可能吗?如果是这样,该怎么办?

答案1

三个有用的命令:

1。获取当前的键盘布局,从此话题:

setxkbmap -print | grep xkb_symbols | awk -F"+" '{print $2}'

返回布局(变体),其中变体是可选的

2。知道当前键盘布局是否为layout(variant):

 setxkbmap -print | grep "layout(variant)"

或者没有“(变体)”。

返回什么都不是。

3。将键盘布局设置为指定值:

setxkbmap layout variant

其中变体是可选的。

(查看man setxkbmap更多信息)

你可以做什么:

1。创建一个简单的可执行 ( chmod +x file) 脚本,根据当前键盘布局动态更改键盘布局。例如,如果我们处理第一点:

#!/bin/bash

if setxkbmap -print | grep "us"
then
  setxkbmap ru
else
  setxkbmap us
fi

2。使用键盘快捷键管理器,将Shift-CapsLock按键分配给该脚本。

祝你好运!

答案2

您真正想要的东西是不可能的,因为它需要全状态过程(以了解切换到布局之前的状态by)。

然而,除了允许在布局环中递减/递增的 ISO_Prev_Group 和 ISO_Next_Group 符号之外,还有这两个符号:ISO_First_Group 和 ISO_Last_Group。有了这个环:us,by,ru您始终可以通过一次切换访问三种布局中的任何一种。

例如,定义Shift-在布局CapsLock中时发送 ISO_Last_Group ,在或中时发送 ISO_First_Group ;定义-在 ISO_Prev_Group中时发送 ISO_Next_Group ,在中时发送 ISO_Next_Group(或 Last)。usrubyCtrlRightShiftusruby

与您想要的不同之处在于,在by.

另外,如果您by只需要几个白俄罗斯特定西里尔字母的布局;另一种选择是使用修改后的ru布局,在某些键中添加额外的符号,可以使用 AltGr 或类似的键访问,就像大多数拉丁键盘一样。

正如文件中by只有 3 个不同的键一样,ru这似乎是正确的方法。在这种情况下,我会将布局堆叠为:us,ru,by

在“us”中使用 ISO_Next_Group,在“ru”中使用 ISO_Prev_Group 表示 Shift-Capslock,并在“ru”中定义带有锁存 ISO_Next_Group 的键。

为此:创建一个 ~/.xkb/keymap/mykbd ,在其中放置 setxkbmap 的输出,它将成为您的基本键盘定义;例如:

setxkbmap "us,ru,by" ; setxkbmap -print > ~/.xkb/keymap/mykbd

然后创建一个文件 ~/.xkb/symbols/mysymbols :

partial modifier_keys
xkb_symbols "shift_caps_us_ru_by" {
  key <CAPS> {
    symbols[Group1] = [  Caps_Lock, ISO_Next_Group   ],
    symbols[Group2] = [  Caps_Lock, ISO_Prev_Group   ],
    symbols[Group3] = [  Caps_Lock, ISO_First_Group  ]
  };
  key <RALT> {
    symbols[Group2] = [ ISO_Group_Latch ]
  };
};

编辑~/.xkb/keymap/mykbd文件,然后更改行xkb_symbols以添加+mysymbols(shift_caps_us_ru_by)

最后,您可以使用xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd现在加载它Shift-CapsLock在拉丁语(美国)和西里尔语(俄罗斯)布局之间切换;在西里尔语中,您可以按住AltGr(右 Alt)键访问白俄罗斯语特定字母。

答案3

好吧,所以我是什么真的想要的是按照 MRU(最近使用的)顺序切换布局。你猜怎么着,GNOME 的默认布局切换器是做什么的恰恰(确保“调整”→“键盘和鼠标”→“其他布局选项”→“更改布局的键”中的复选框未被激活!)。因此,目前我在一个环中有 4 个布局(俄语、白俄罗斯语、乌克兰语、英语),并且可以轻松在最新的布局之间进行切换SuperSpace。这样就解决了我的问题以及一些问题。

答案4

我强烈推荐使用sxhkd(简单的 X 热键守护进程)。它的配置根本不应该具有挑战性。按照中提供的步骤进行操作维基百科教程您很快就会启动并运行它。

为了简单起见,sxhkd 使您能够将输入事件(例如按下某个键...)映射/绑定到操作(例如来回更改键盘布局...)

就我个人而言,我会在 3 种不同的布局之间即时切换。我使用的映射:

super + k; {u,f,r}
  setxkbmap {us,fr,ru}

super是一个特殊键(称为修饰键),您可以使用其他修饰键,例如CtrlAlt等(均已记录)

因此,当我按住修饰键(super在我的例子中是 windows 键),k然后释放这两个键并按下三个键之一时u f r,它会使用根据按下的键提供的三个参数之一运行命令setxkbmap(尊重顺序)。假设我点击了superk然后f我得到了setxkbmap fr法式布局

ps:如果您意外地绑定了已经与某个操作关联的键组合,您可能会得到不希望的/意外的结果(很可能后期的绑定会掩盖早期的绑定)。但请记住,凡事总有解决办法。所以不要害怕尝试。

相关内容