在 dvorak 和 qwerty 之间切换

在 dvorak 和 qwerty 之间切换

我最近开始学习德沃夏克键盘布局,但我仍然需要使用全键盘有时。

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

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

答案1

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

如果您想在任意键盘映射之间切换,则需要维护状态,因为通常控制台不会为您执行此操作。这就是 Gnome 和 KDE 等布局切换器所做的事情。但如果您只想在一些众所周知的键盘映射之间切换,您可以查询控制台(假设您的控制台类型上提供此功能),获取按键发送的当前代码并根据该代码决定切换到什么。以下是一些可能性:

  • 如果键码 24(数字因控制台类型而异)当前发送q,则当前键盘映射看起来像 qwerty,因此切换到 dvorak,否则切换到 qwerty。
  • 如果QW具有相邻的键码,则可能是 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

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

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

答案2

setxkbmap 在 X 之外不起作用吗?

setxkbmap \
  -model pc105 \
  -layout 'us(dvorak-intl),us(alt-intl)' \
  -option \
  -option grp:alt_shift_toggle \
  -option compose:rwin

我在 X 和我的终端中使用它。文本“-option grp:alt_shift_toggle”告诉 setxkbmap 在您按 Alt+Shift 时切换布局。请参阅 /usr/share/X11/xkb/rules/base.lst (Debian Squeeze...ymmv) 了解用于动态切换布局的更多切换/开关选项。

答案3

创建一个脚本:

#!/bin/bash
if [[ -e ~/.my.kb.not.dvorak ]] ; then
    setxkbmap dvorak
    touch ~/.my.kb.is.dvorak 
    rm ~/.my.kb.not.dvorak
fi 
if [[ -e ~/.my.kb.is.dvorak ]] ; then
    setxkbmap <YOURLAYOUT>
    touch ~/.my.kb.not.dvorak 
    rm ~/.my.kb.is.dvorak
fi 

替换<YOURLAYOUT>为相关数据。现在设置一个xbindkeys热键组合来运行此脚本。

答案4

在控制台中,您需要使用loadkeys dvorak.您可以在 ~/.bashrc 中设置它,以便您可以将脚本 sed 出来,从而允许它甚至在脚本运行后包含新创建的终端。

相关内容