ctrl
为了实现左键和capsLock
右键的低级交换,我使用了xkbcomp
如下方法:
首先获取当前的键盘布局:
xkbcomp $DISPLAY output.xkb
然后我把下面的两行output.xkb
从
<LCTL> = 62;
...
<CAPS> = 66;
到
<CAPS> = 62;
...
<LCTL> = 66;
然后运行
xkbcomp output.xkb $DISPLAY
使其生效。它在大多数桌面应用程序中运行良好。但问题在于vscode
。实际上它在的正常模式下也运行良好vscode
,但是当我尝试在中更改快捷方式时vscode
,它提示我按下新键来更改快捷方式,我按下capsLock
键盘上的键并vscode
认为我同时按下了ctrl
+ capsLock
。这不是我所期望的,vscode
不应该知道我的capsLock
键,它应该只知道我按下了ctrl
键因为XServer
应该只告诉vscode
我按下了ctrl
键。我认为这是因为我的配置不完整,所以vscode
仍然可以检测到我的capsLock
键。谁能告诉我如何完全交换ctrl
和capsLock
?xmodmap
不应该是解决方案,因为它基于xkbcomp
和且功能有限。
答案1
不幸的是,我在 VSCode 中的行为与您相同,但在另行通知之前,我正在使用以下解决方法:
xkbcomp $DISPLAY output_orig.xkb
xkbcomp $DISPLAY output_mod.xkb
编辑文件输出_mod.xkb按照我的想法。
如果我通常在 vscode 中工作,我会使用
xkbcomp output_mod.xkb $DISPLAY
如果我编辑键盘快捷键,我之前会使用:
xkbcomp output_orig.xkb $DISPLAY
使用原始键进行更改,然后将布局设置回键交换:
xkbcomp output_mod.xkb $DISPLAY
好吧,这不是很聪明,但对于这个特定问题来说很有效。
/// 编辑 ///
经过一些研究,似乎有一个更好的解决方案,特别是对于vscode 行为:
在终端:
nano ~/.config/Code/User/settings.json
插入代码:
{
"keyboard.dispatch": "keyCode"
}
如果此文件中已存在代码:
{
"bla": "blub",
"keyboard.dispatch": "keyCode"
}
重新启动 vscode。