如何将每个键盘布局设置为其自己的快捷键组合(模仿 Windows 功能)?

如何将每个键盘布局设置为其自己的快捷键组合(模仿 Windows 功能)?

在 Windows 上,我总是可以将每个键盘布局设置为某个全局热键(看图)。例如,由于工作范围涉及多种语言,我需要 5 种键盘布局 - 因此在 Windows 中,我可以为每个键盘布局指定自己的键盘键组合,例如Ctrl + Shift + 2Ctrl + Shift + 5等等

在 Ubuntu 中,你可以更改热键键盘布局切换几乎任何你想要的选项 - 但是仅用于从上一个切换到下一个而不是直接开启

因此,如果您有 3 个或 5 个或更多布局 - 您需要花费大量时间进行切换过程:您需要通过热键向前或向后旋转布局或使用鼠标和布局菜单 - 这非常不舒服并且需要您花时间和注意力来控制您现在所拥有的键盘布局。

所以也许有人知道 - 如何在 Ubuntu 中执行自定义全局热键以直接切换到特定的键盘布局?

我只是想有机会按下Ctrl + Shift + 3并确保 - 现在我有英语键盘布局和与其他语言/布局相同的行为。

在此处输入图片描述

答案1

可以用脚本来完成。

  • 将以下脚本保存为$HOME/bin/mylayouts

  • 使其可执行:

    chmod +x $HOME/bin/mylayouts
    
  • 重新登录

现在您可以通过运行来切换布局

mylayouts us
mylayouts ro_std

这反过来又允许您为此目的创建自定义快捷方式。

这是示例脚本:

#!/bin/bash -e

# layouts
us="('xkb', 'us')"
ro_std="('xkb', 'ro+std')"
latam="('xkb', 'latam')"
es="('xkb', 'es')"

case $1 in
  us)     NEW=us
    ;;
  ro_std) NEW=ro_std
    ;;
  latam)  NEW=latam
    ;;
  es)     NEW=es
    ;;
  *)      echo "Invalid argument"
          exit 1
    ;;
esac

NEWLIST="[${!NEW}"
for L in 'us' 'ro_std' 'latam' 'es'; do
    if [ "$L" = "$NEW" ]; then
        continue
    else
        NEWLIST="$NEWLIST, ${!L}"
    fi
done
NEWLIST="$NEWLIST]"

gsettings set org.gnome.desktop.input-sources sources "[${!NEW}]"
gsettings set org.gnome.desktop.input-sources sources "$NEWLIST"

如果您根据需要调整脚本,您现在可以从 Ubuntu 设置中创建自定义快捷方式,例如:
名称:us_colemak
命令:mylayouts.sh us_colemak
捷径:Ctrl + Shift + 5

警告:

使用数字键作为快捷键的一部分有点棘手。例如,如果你在按Ctrl+ Shift+创建快捷方式时使用英语(美国)布局2,则实际创建的快捷方式是Ctrl + Shift + @(因为Shift+2导致@字符)。然后,如果您使用的是拉丁布局,则Shift+2会导致字符,快捷方式Ctrl++Shift不会2给您预期的结果。

使用字母而不是数字可能不太容易出错。

无论如何,这个答案并不是完美的解决方案。显然还有改进的空间。

相关内容