Xorg
如何編寫“冪等” .Xmodmap
目前我有一個
.Xmodmap
文件將 my 更改Command
為Ctrl
,然後將 my 更改Ctrl
為Super
(我在 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.orig
doesn’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
(編輯:清理)