我怎样才能写一个“幂等”.Xmodmap

我怎样才能写一个“幂等”.Xmodmap

目前我有一个.Xmodmap文件将 my 更改CommandCtrl,然后将 my 更改CtrlSuper(我在 Mac 上运行 Linux)。

它工作得很好,当只运行一次但连续运行时(例如,当我重新启动桌面环境(Cinnamon)时,它会重新加载文件.Xmodmap),它基本上通过恢复更改来重置设置。有效地在我想要的设置和原始设置之间切换。

如何编写一个.Xmodmap仅设置一次设置但在连续运行时不会将它们更改回来的文件?这是我现有的.Xmodmap文件:

clear control
clear mod4

keycode 105 =
keycode 206 =

keycode 133 = Control_L NoSymbol Control_L
keycode 134 = Control_R NoSymbol Control_R
keycode 37 = Super_L NoSymbol Super_L

add control = Control_L
add control = Control_R

答案1

在应用模组之前,请将地图重置为原始状态。完全重置需要很长时间,所以我能想到的最好办法是进行差异化。

此代码使用.Xmodmap{.orig,.reset,.mods}if.orig不存在则将其设置为当前状态,并计算.reset从它所在的位置恢复该状态。申请之前.mods

#!/bin/sh
# file xmodmap-reset

#     rm ~/.Xmodmap.orig
# beforehand to take current setup as baseline for Xmodmap.mods changes

stem=~/.Xmodmap
orig=${stem}.orig
reset=${stem}.reset
mods=${stem}.mods

# implement -pme like -pke
#
xmodmap-pme () {
  xmodmap -pm \
  | sed '
        1d
        / [^ ]/!d
        s/^[^ ][^ ]*/clear &\nadd & =/
        s/([^ ]*//g
    '
}

# save baseline if none atm
test -a $orig || {
    xmodmap  -pke
    xmodmap-pme
} > $orig

# payload, diff for commands to reset to baseline from current
{
    xmodmap  -pke
    xmodmap-pme
} \
| {
    diff -u0 $orig - \
    | sed -n '
        1,/^@@/d
        s/^[^+]clear/clear/p
        s/^-//p
      '
} > $reset
xmodmap $reset

# finally ready to apply the mods
test -a $mods && xmodmap $mods

(编辑:清理)

答案2

转到系统 > 首选项 > 启动应用程序并添加xmodmap ~/.Xmodmap. 添加 xmodmap 命令

答案3

我仍然对你想要什么感到有点困惑,但我认为是这样的:

如果你把这个放在你的~/.Xmodmap

clear control
clear mod4

keysym Super_L = Control_L
keysym Control_L = Super_L

add control = Control_L
add control = Control_R
add mod4 = Super_L
add mod4 = Super_R

然后每次xmodmap ~/.Xmodmap执行的时候,然后左键Ctrl和左键互换。因此,在第一次调用时,该Ctrl键的作用就像您按下了 一样,但在第二次调用时,它Ctrl再次恢复充当键的作用。

相关内容