在 dvorak 和 qwerty 之间切换

Ste*_*fan 4 bash keyboard-shortcuts xmodmap console

我最近开始学习dvorak键盘布局,但有时我仍然需要使用qwerty

我正在寻找一个脚本来在两种键盘布局之间切换。

另外,我想用一个热键来调用这个脚本,这个热键可以在任何地方使用(在我的 DE我的控制台中)。就像在这篇文章中按下关机一样。

Gil*_*il' 5

您必须为 X 和您关心的每种文本控制台单独执行此操作。

如果您想在任意键映射之间切换,您需要维护状态,因为通常控制台不会为您做这件事。这就是 Gnome 和 KDE 等布局切换器所做的。但是如果你只想在一些众所周知的键映射之间切换,你可以查询控制台(假设你的控制台类型有这个功能),获取一个键发送的当前代码并根据它决定切换到什么。这里有几种可能性:

  • 如果当前发送的键码 24(数字将因控制台类型而异)q,则当前键映射看起来像 qwerty,因此切换到 dvorak,否则切换到 qwerty。
  • 如果Q并且W有相邻的键码,它可能是一个 qwerty 布局。
  • 在键映射中添加一个假键并查找其绑定。

这是 X 和 Linux 的实现,使用W= Q+1 测试。请注意,我还没有测试过。请注意,该脚本通常无法通过文本模式远程登录使用。

if [ -n "$DISPLAY" ]; then
  if xmodmap -pke | awk '$3=="=" && $4=="q" {q=$2}
                         $3=="=" && $4=="w" {w=$2}
                         END {exit w-q==1}'; then
    setxkbmap us
  else
    setxkbmap dvorak
  fi
elif [ "$TERM" = "linux" ]; then
  if dumpkeys | awk '$3=="=" && $4=="q" {q=$2}
                     $3=="=" && $4=="w" {w=$2}
                     END {exit w-q==1}'; then
    loadkeys us
  else
    loadkeys dvorak
  fi
fi
Run Code Online (Sandbox Code Playgroud)

在 X Window 上,将其绑定到键的最佳位置是使用您的桌面环境或窗口管理器的键绑定功能。您可以使密钥仅执行 X 特定的部分。当然,如果你的 DE/WM 有布局切换功能,你也可以使用它。

在 Linux 控制台上,键绑定的可能性非常有限。您可以将键绑定到KeyboardSignal符号。如果您正在使用 SysVinit,请kb::kbrequest:/path/to/script/etc/inittab按下信号时运行您的脚本(以 root 身份!)。我不知道如何使用 Upstart 配置此键的操作。