我正在尝试使用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脚本相当缺乏经验,所以我不知道该怎么做。
答案 0 :(得分:2)
最好的方法是将xmodmap
调用放在X init脚本而不是shell init脚本中。
您的每用户X init脚本为~/.xinitrc
。
创建~/.xinitrc
如果它不存在并将xmodmap
命令添加到最后。
~/.xinitrc
文件记录在Debian的startx
联机帮助页中。
xmodmap
联机帮助页在其filename
参数的描述下,表示它通常 保存在文件中< em>喜欢 .xmodmaprc。&#34;这似乎可能取决于分发或本地设置系统的方式。
答案 1 :(得分: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 Conditional Expressions。