Xorg

如何編寫“冪等” .Xmodmap

  • November 12, 2013

目前我有一個.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

在應用您的模組之前將地圖重置為其原始狀態。完全重置需要很長時間,所以我能想到的最好的就是差異化。

此程式碼使用.Xmodmap{.orig,.reset,.mods}where if .origdoesn’t exist 將其設置為目前狀態,併計算.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

(編輯:清理)

引用自:https://unix.stackexchange.com/questions/98849