这是连接 XMonad 和多个键盘布局的一种方法。
步骤 1. 创建将在您的布局之间切换的脚本。例如,假设我们将支持英语(美国)、意大利语和法语。
/home/you/bin/layout_switch.sh:
#!/bin/zsh
# LICENSE: PUBLIC DOMAIN
# switch between my layouts
# If an explicit layout is provided as an argument, use it. Otherwise, select the next layout from
# the set [us, it, fr].
if [[ -n "$1" ]]; then
setxkbmap $1
else
layout=$(setxkbmap -query | awk 'END{print $2}')
case $layout in
us)
setxkbmap it
;;
it)
setxkbmap fr
;;
*)
setxkbmap us
;;
esac
fi
Run Code Online (Sandbox Code Playgroud)
测试此脚本 - 运行它并查看键盘布局是否在布局之间循环。如果是,请继续下一步。
步骤 2. 自定义 XMonad 设置以支持将切换布局的自定义键绑定。
在您的主目录中,创建一个名为“.xmonad”的目录(如果它不存在)。
/home/you/.xmonad/xmonad.hs:
import XMonad
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Util.Run(spawnPipe)
import XMonad.Util.EZConfig(additionalKeys)
import System.IO
main = do
xmonad $ defaultConfig
{
terminal = "gnome-terminal"
} `additionalKeys`
[ (( mod1Mask , xK_Escape), spawn "/home/you/bin/layout_switch.sh")
]
Run Code Online (Sandbox Code Playgroud)
现在,按 Mod+q 重新启动 XMonad。您的布局切换器应该功能齐全。
参考:http: //zuttobenkyou.wordpress.com/tag/setxkbmap/
您可能已经有一个启动文件来在登录时启动和配置事物。
添加以下行以使用多种键盘布局:
# Keyboard layout switcher
setxkbmap -layout us,se -variant ,kinesis -option 'grp:alt_shift_toggle'
Run Code Online (Sandbox Code Playgroud)
-layout并-variant共同努力。这里我的布局是us(无变体,逗号前为空)和se(kinesis). dvorak例如,变体可以是。如果您不需要变体,可以省略它们。
-option在此设置在布局之间切换的键盘快捷键。
让窗口记住它们的布局:
# Per window keyboard layout
kbdd
Run Code Online (Sandbox Code Playgroud)
如果您使用 xmobar 并希望显示当前布局,请将其添加到您的.xmobarrc配置中:
, commands = [...
...
, Run Kbd [("se", "SE"), ("us", "US")]
]
...
, template = "...... %kbd% "
Run Code Online (Sandbox Code Playgroud)
这适用于所有在谷歌上搜索多种键盘布局并找到此线程的人。如果您只需要一种键盘布局,请将其添加到启动脚本中:
setxkbmap -layout us
Run Code Online (Sandbox Code Playgroud)