1

我正在尝试使用 xmodmap 交换大写和转义。我把xmodmap ~/.Xmodmap命令放在我的.zshrc. 但是每当我启动一个新的 shell 时,xmod 设置就会再次交换。所以我试图将xmodmap命令包装在一个检查全局变量的条件中,但我就是无法让它工作。

if [ ! "$CAPS_MAPPED" = true ]; then     # check if CAPS_LOCKED is empty
    echo 'mapping'
    xmodmap ~/dotfiles/.xmodmap            # call xmodmap
    export readonly CAPS_MAPPED=true       # assign global var
fi

我尝试了不同的变体,但只是不知道该怎么做,因为我对 shell 脚本相当缺乏经验。

4

2 回答 2

2

最好的方法是将xmodmap调用放在 X 初始化脚本而不是 shell 初始化脚本中。

您的每个用户 X 初始化脚本是~/.xinitrc.

~/.xinitrc如果它不存在则创建并将您的xmodmap命令添加到末尾。

~/.xinitrc文件记录在startxDebian 的手册页中。

手册页在其参数xmodmap的描述下说它filename通常保存在.xmodmaprc 之类的文件中”。似乎这可能取决于系统是如何由发行版或本地设置的。

于 2015-11-04T04:11:13.863 回答
1

可能更好地设置如下:

good_value="true"
if [[ ! "${CAPS_MAPPED}" = "$good_value" ]]; then     # check if CAPS_LOCKED does not have the required value
    echo 'mapping'
    xmodmap ~/dotfiles/.xmodmap                   # call xmodmap
    export readonly CAPS_MAPPED="$good_value"       # assign global var
fi

请注意,我正在使用How to compare strings in Bash script,即[ "$var" == "$another_var" ]. [[ "$var1" = "$var2" ]]作为在 zsh 中比较字符串的方式,因为==它不是 POSIX。请参阅zsh-12 条件表达式

于 2015-11-03T11:52:38.713 回答