เชคเซเชฏเชพเชฐเชฅเซ (xswitcher เชเซเชฏเชพเชฒเชจเชพ เชชเซเชฐเชพเชตเชพเชจเชพ เชคเชฌเชเซเชเซ) เชจเซ เชเชฃเซ เชฐเชเชจเชพเชคเซเชฎเช เชชเซเชฐเชคเชฟเชธเชพเชฆ เชฎเชณเซเชฏเซ. (เชเซ เชธเชฐเชธ เชเซ), เชฎเซเช เชฎเชพเชฐเซ เชเชพเชฒเซ เชธเชฎเชฏ เชชเซเชฐเซเชเซเชเซเช เชตเชฟเชเชธเชพเชตเชตเชพเชฎเชพเช เชตเชฟเชคเชพเชตเชตเชพเชจเซเช เชเชพเชฒเซ เชฐเชพเชเซเชฏเซเช. เชนเชตเซ เชนเซเช เชคเชฎเชพเชฐเชพเชฎเชพเชเชฅเซ เชฅเซเชกเซ เชเชฐเซเช เชเชฐเชตเชพ เชฎเชพเชเชเซ เชเซเช... เชฌเซเชเซเช เชชเชเชฒเซเช เชฅเซเชกเซเช เช เชธเชพเชฎเชพเชจเซเชฏ เชนเชถเซ: เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชกเชฟเชเชพเชเชจเชจเซ เชชเซเชฐเชธเซเชคเชพเชต เชฎเซเชเชตเซ/เชเชฐเซเชเชพ เชเชฐเชตเซ.

เชเซเชเช เชฐเซเชคเซ เชเชตเซเช เชฌเชนเชพเชฐ เชเชตเซเชฏเซเช เชเซ เชเซ เชธเชพเชฎเชพเชจเซเชฏ เชชเซเชฐเซเชเซเชฐเชพเชฎเชฐเซเชจเซ เช เชฌเชงเชพ เชจเซเชฌเซเชธเชจเซ เชเซเช เชตเชตเชพเชจเซเช เชเซเชฌ เช เชเชเชเชพเชณเชพเชเชจเช เชฒเชพเชเซ เชเซ.
เชจเชฟเชฐเชพเชงเชพเชฐ เชจ เชฐเชนเซเชตเชพ เชฎเชพเชเซ, เชนเซเช เชเซเชจเซ เชธเชพเชฅเซ เชตเซเชฏเชตเชนเชพเชฐ เชเชฐเซ เชฐเชนเซเชฏเซ เชเซเช เชคเซเชจเซเช เชเช เชเชฆเชพเชนเชฐเชฃ เช
เชนเซเช เชเซ.
เช
เชชเชพเชเซ เชเชพเชซเชเชพ เช
เชจเซ เชเซเชเซเชชเชฐ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชธเชพเชฐเซ เชฐเซเชคเซ เชกเชฟเชเชพเชเชจ (เช
เชจเซ เชธเชพเชฐเซ เชฐเซเชคเซ เช
เชฎเชฒเชฎเชพเช เชฎเซเชเชพเชฏเซเชฒ) เชนเซเชฏ เชเซ.
โ เชฐเซเชชเชฐเซเชเชพเชเชเชจ? เชชเชฃ เชคเซ เชเชเชเชพเชณเชพเชเชจเช เชเซ! เชซเชเซเชค เชฅเซเชกเซเช เชธเซเชฒเซเชชเชกเซเชถ XML (เชเชพเชฐเชฃ เชเซ เชคเซ "เชเชเช เชเชซ เชง เชฌเซเชเซเชธ" เชเซ).
โ เชเชน, เช
เชจเซ เชคเชฎเชพเชฐเซ เชชเชฃ ACL เชเซเชเช เชเซ? เชชเชฃ เช เชคเซ เชฌเชนเซ เชฎเซเชถเซเชเซเชฒเซเชญเชฐเซเชฏเซเช เชเซ! เชฅเชชเซเชชเชก-เชฅเชชเซเชชเชก... เชเชเชเช เชเชตเซเช เช.
เช เชจเซ เชฎเชพเชฐเชพ เชเชพเชฎเชฎเชพเช เชฌเชฟเชฒเชเซเชฒ เชตเชฟเชชเชฐเซเชค เชเซ. เชคเซ เชธเชพเชเซเช เชเซ. (เช เชฐเซ, เชชเชนเซเชฒเซ เชตเชพเชฐ เชเชตเซเช เชฒเชเชญเช เชเซเชฏเชพเชฐเซเชฏ เชฅเชคเซเช เชจเชฅเซ) เชฌเชจเชพเชตเซเชฒ เชฎเซเชกเซเชฒ เชตเชงเซ เชธเชฐเชณ เช เชจเซ เชเชฐเชพเชฎเชฆเชพเชฏเช เชฌเชจเชพเชตเซ เชเซ (เชฒเชเชญเช) เชธเชฐเซเชเชฟเช เชเชธเซเชฎเซเชฌเชฒ เชเชฐเซ.
เชฎเชจเซ เชคเชพเชเซเชคเชฐเชฎเชพเช เชนเซเชฌเชฐ เชชเชฐ เชกเซเชเชพ เชตเซเชเซเชเชพเชจเชฟเชเซเชจเชพ เชฎเซเชถเซเชเซเชฒ เชเชพเชฐเซเชฏ เชตเชฟเชถเซ เชเช เชฒเซเช เชฎเชณเซเชฏเซ...
เชเชตเซเช เชฒเชพเชเซ เชเซ เชเซ เชคเซเช เช เชชเชพเชธเชพเชจเซ เชธเชเชชเซเชฐเซเชฃเชชเชฃเซ เช
เชฎเชฒเชฎเชพเช เชฎเซเชเซ เชฐเชนเซเชฏเชพ เชเซ. เชฎเชพเชฐเชพ เช
เชจเซเชญเชตเชฎเชพเช, เชเซเชฎ เชคเซเช เชเชนเซ เชเซ, เชคเซ เชเช "เชนเชณเชตเซเช เชธเชเชธเซเชเชฐเชฃ" เชเซ. เชฎเชฒเซเชเซ-เชตเซเชฒเซเชฏเซเชฎ เชฎเซเชกเซเชฒเซเชธ, เชคเซเชฏเชพเชฐ OOP เชธเชพเชฅเซ เช
เชจเซเชญเชตเซ เชชเซเชฐเซเชเซเชฐเชพเชฎเชฐเซเชธ, เช
เชจเซ เชคเซเชฅเซ เชตเชงเซ - เช เชฌเชงเซเช เชชเชเซเชฅเซ เชเชตเชถเซ, เชเซเชฏเชพเชฐเซ/เชเซ เชคเซ เชถเชฐเซ เชฅเชพเชฏ เชเซ. เชชเชฐเชเชคเซ เชกเชฟเชเชพเชเชจเชฐเชจเซ เช
เชนเซเช เช
เชจเซ เชนเชฎเชฃเชพเช เช เชเซเชฏเชพเชเชเชฅเซ เชถเชฐเซเชเชค เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ.
เชเชพเชฒเซ เชฎเซเชฆเซเชฆเชพ เชชเชฐ เชเชตเซเช. เชฎเซเช เชตเชพเชเซเชฏเชฐเชเชจเชพเชจเชพ เชเชงเชพเชฐ เชคเชฐเซเชเซ TOML เชจเซ เชเชชเชฏเซเช เชเชฐเซเชฏเซ. .
เชเชพเชฐเชฃ เชเซ เชคเซ เชเซ (TOML) เชเช เชคเชฐเชซ, เชคเซ เชฎเชพเชจเชต-เชธเชเชชเชพเชฆเชจเชเซเชทเชฎ เชเซ. เชฌเซเชเซ เชคเชฐเชซ, เชคเซ 1:1 เชจเซ เชเซเชเชชเชฃ เชธเชพเชฎเชพเชจเซเชฏ เชตเชพเชเซเชฏเชฐเชเชจเชพเชฎเชพเช เช
เชจเซเชตเชพเชฆเชฟเชค เชเชฐเซ เชเซ: XML, JSON, YAML.
เชตเชงเซเชฎเชพเช, เชฎเซเช โgithub.com/BurntSushi/tomlโ เชฎเชพเชเชฅเซ เชเซ เช
เชฎเชฒเซเชเชฐเชฃเชจเซ เชเชชเชฏเซเช เชเชฐเซเชฏเซ เชเซ, เชคเซ เชธเซเชฅเซ เชซเซเชถเชจเซเชฌเชฒ เชจเชฅเซ (เชนเชเซ เชชเชฃ 1.4 เชธเชฟเชจเซเชเซเชเซเชธเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ), เชคเซ เชธเชฎเชพเชจ ("เชฌเชฟเชฒเซเช-เชเชจ") JSON เชธเชพเชฅเซ เชธเชฟเชจเซเชเซเชเซเชเชฟเชเชฒเซ เชธเซเชธเชเชเชค เชเซ.
เชเชเชฒเซ เชเซ, เชเซ เชคเชฎเซ เชเชเซเชเซ, เชคเซ เชคเชฎเซ เชซเชเซเชค "เชคเชฎเชพเชฐเชพ TOML เชธเชพเชฅเซ เชจเชฐเชเชฎเชพเช เชเชพเช, เชฎเชจเซ XXX เชเซเชเช เชเซ" เชเชนเซ เชถเชเซ เชเซ เช เชจเซ เชซเชเซเชค เชเช เช เชฒเชพเชเชจเชฅเซ เชเซเชกเชจเซ "เชชเซเช" เชเชฐเซ เชถเชเซ เชเซ.
เชเชฎ, เชเซ เชคเชฎเซ xswitcher เชจเซ เชเซเช เชตเชตเชพ เชฎเชพเชเซ เชเซเชเชฒเซเช เชตเชฟเชจเซเชกเซเช เชฒเชเชตเชพ เชฎเชพเชเชเชคเชพ เชนเซ (เชเซเชเซเชเชธ เชนเซเช เชจเชนเซเช) "เชคเชฎเชพเชฐเชพ เช เช เชฆเซเชญเซเชค เชฐเซเชชเชฐเซเชเชพเชเชเชจ" เชธเชพเชฅเซ เชเซเช เชธเชฎเชธเซเชฏเชพเชจเซ เช เชชเซเชเซเชทเชพ เชจเชฅเซ.
เชฌเซเชเชพ เชฌเชงเชพ เชฎเชพเชเซ, เชตเชพเชเซเชฏเชฐเชเชจเชพ "เชเซ = เชฎเซเชฒเซเชฏ" เชเชงเชพเชฐเชฟเชค เชเซ. (เช
เชจเซ เชถเชพเชฌเซเชฆเชฟเช เชฐเซเชคเซ เชฅเซเชกเชพ เชตเชงเซ เชเชเชฟเชฒ เชตเชฟเชเชฒเซเชชเซ, เชเซเชฎ เชเซ = [เชเซเชเชฒเชพเช, เชเชฐเซ]) เชฎเชจเซ เชฒเชพเชเซ เชเซ เชเซ
เชธเชพเชนเชเชฟเช เชฐเซเชคเซ เช
เชจเซเชเซเชณ.
เชฐเชธเชชเซเชฐเชฆ เชตเชพเชค เช เชเซ เชเซ เชคเซ เชชเซเชคเซ เชฒเชเชญเช เชคเซ เช เชธเชฎเชฏเซ (เชฒเชเชญเช เซจเซฆเซงเซฉ). เชเซเชเซ, เชฎเชพเชฐเชพเชฅเซ เชตเชฟเชชเชฐเซเชค, TOML เชจเชพ เชฒเซเชเชเซ เชฏเซเชเซเชฏ เช
เชตเชเชพเชถ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเซเชฏเซเช.
เชเชเชฒเชพ เชฎเชพเชเซ เชนเชตเซ เชฎเชพเชฐเชพ เชฎเชพเชเซ เชคเซเชจเชพ เช เชฎเชฒเซเชเชฐเชฃเชจเซ เชฎเชพเชฐเซ เชเชพเชคเชจเซ เช เชจเซเชเซเชณ เชฌเชจเชพเชตเชตเชพเชจเซเช เชธเชฐเชณ เชฌเชจเซเชฏเซเช เชเซ, เชคเซเชจเชพเชฅเซ เชตเชฟเชชเชฐเซเชค.
เชฎเซเชณเชญเซเชค เชฐเซเชคเซ, เชเชชเชฃเซ TOML เชฒเชเช เชเซเช (เชเซเชจเชพ Windows INI เชเซเชตเซเช เช). เช เชจเซ เชเชชเชฃเซ เชเช เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชฌเชจเชพเชตเซเช เชเซเช เชเซเชฎเชพเช เชเชชเชฃเซ เชเซเชฌเซเชฐเซเชกเชฎเชพเชเชฅเซ เชฆเชพเชเชฒ เชเชฐเซเชฒเชพ เชจเชตเซเชจเชคเชฎ เชธเซเชเซเชจ เชเซเชกเชจเชพ เชเชงเชพเชฐเซ เชนเซเชเซเชธเชจเซ เชถเซเชฐเซเชฃเซ เชเซเชตเซ เชฐเซเชคเซ เชเซเชกเชตเซ เชคเซเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเซเช เชเซเช. เชจเซเชเซ, เชเซเชเชกเชพเชเชฎเชพเช, เชเชชเชฃเซ เชชเชพเชธเซ เช เชคเซเชฏเชพเชฐ เชธเซเชงเซ เชถเซเช เชเซ เชคเซ เชเซ. เช เชจเซ เชฎเซเช เช เชฐเซเชคเซ เชเซเชฎ เชจเชฟเชฐเซเชฃเชฏ เชฒเซเชงเซ เชคเซเชจเซเช เชธเชฎเชเซเชคเซ.
0. เชฎเซเชณเชญเซเชค เช เชฎเซเชฐเซเชคเชคเชพ
- เชธเซเชเซเชจ เชเซเชก เชนเซเชฆเซเชฆเซ. เช เชตเชฟเชถเซ เชเซเชเซเชเชธเชชเชฃเซ เชเชเชเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ, เชเชพเชฐเชฃ เชเซ เชซเชเซเชค เชกเชฟเชเชฟเชเชฒ เชเซเชก เช เชธเชเชชเซเชฐเซเชฃเชชเชฃเซ เชตเชพเชเชเซ เชถเชเชพเชคเชพ เชจเชฅเซ (เชนเซเช เชซเชเซเชค เชเชเชพเชเซเชท เชเชฐเซ เชฐเชนเซเชฏเซ เชเซเช). ).
เชฎเซเช "golang-evdev" เชฎเชพเชเชฅเซ "ecodes.go" เชเชพเชขเซเชฏเซเช (เชฒเซเชเชเซ เชเซเชฌ เช เชจเชฎเซเชฐเชคเชพเชชเซเชฐเซเชตเช เชคเซเชจเซ เชเชฒเซเชฒเซเช เชเชฐเซเชฏเซ เชนเซเชตเชพ เชเชคเชพเช, เชนเซเช เชธเซเชฐเซเชธ เชเซเชกเชฎเชพเช เชเซเชฆเชเชพเชฎ เชเชฐเชตเชพเชฎเชพเช เชเซเชฌ เชเชณเชธเซ เชนเชคเซ). เชฎเซเช (เชนเชพเชฒ เชฎเชพเชเซ) เชเชเชเช เชเชตเซเช เชธเซเชงเชพเชฐเซเชฏเซเช เชเซ เชธเชเชชเซเชฐเซเชฃเชชเชฃเซ เชเชฆเชฐเซเชชเซเช เชนเชคเซเช. เชเซเชฎ เชเซ "LEFTBRACE" โ "L_BRACE". - เชฎเซเช "เชธเซเชเซเชเชซเซเชฒ เชเซเช" เชจเซ เชตเชฟเชญเชพเชตเชจเชพ เชชเชฃ เชฐเชเซ เชเชฐเซ, เชเชพเชฐเชฃ เชเซ เชจเชฟเชฏเชฎเชฟเชค เชตเซเชฏเชพเชเชฐเชฃ เชฒเชพเชเชฌเชพ เชซเชเชฐเชพเช เชฎเชพเชเซ เชฏเซเชเซเชฏ เชจเชฅเซ. (เชชเชฐเชเชคเซ เชเซ เชคเชฎเซ เชซเชเซเชค "เชธเซเชงเซ" เชฐเซเชเซเชฐเซเชกเชฟเชเชเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ, เชคเซ เชคเซ เชคเชฎเชจเซ เชจเซเชฏเซเชจเชคเชฎ เชฆเชเชฒเชเซเชฐเซ เชธเชพเชฅเซ เชคเชชเชพเชธ เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ.)
- เชฆเชฌเชพเชตเชตเชพเชฎเชพเช เชเชตเซเชฒเซ เชเซ เชฎเชพเชเซ เชฌเชฟเชฒเซเช-เชเชจ "เชกเซเชกเซเชชเซเชฒเซเชเซเชเชฐ" เชนเชถเซ. เชเชฎ, "repeat"=2 เชธเซเชฅเชฟเชคเชฟ เชฐเซเชเซเชฐเซเชก เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ. ะพะดะธะฝ เชธเชฎเชฏ.
1. เชจเชฎเซเชจเชพเช เชตเชฟเชญเชพเช
[Templates] # "@name@" to simplify expressions
# Words can consist of these chars (regex)
"WORD" = "([0-9A-Z`;']|[LR]_BRACE|COMMA|DOT|SLASH|KP[0-9])"
เชงเซเชตเชจเซเชฏเชพเชคเซเชฎเช เชธเชเชเซเชค เชธเชพเชฅเซ เชฎเชพเชจเชต เชญเชพเชทเชพเชจเชพ เชถเชฌเซเชฆเชฎเชพเช เชถเซเช เชนเซเชฏ เชเซ? (เชเซเชฐเชพเชซเซเชฎเซเชธ, เชเชฐเซเชซเซ "เชนเชพเชฏเชฐเซเชเซเชฒเชฟเชซเซเชธ," เชเช เช เชฒเช เชฌเชพเชฌเชค เชเซ)? เชเซเชเชฒเซ เชญเชฏเชเชเชฐ "เชถเซเช" เชเซ. เชคเซ เชนเซเช เชคเชฐเชค เช "เชเซเชฎเซเชชเชฒเซเช" เชจเซ เชตเชฟเชญเชพเชตเชจเชพ เชฐเชเซ เชเชฐเซเช เชเซเช.
2. เชเซเชฏเชพเชฐเซ เชเชเชเช เชฆเชฌเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชคเซเชฏเชพเชฐเซ เชถเซเช เชเชฐเชตเซเช (เชฌเซเชเซ เชธเซเชเซเชจ เชเซเชก เชชเซเชฐเชพเชชเซเชค เชฅเชพเชฏ เชเซ)
[ActionKeys]
# Collect key and do the test for command sequence
# !!! Repeat codes (code=2) must be collected once per key!
Add = ["1..0", "=", "BS", "Q..]", "L_CTRL..CAPS", "N_LOCK", "S_LOCK",
"KP7..KPDOT", "R_CTRL", "KPSLASH", "R_ALT", "KPEQUAL..PAUSE",
"KPCOMMA", "L_META..COMPOSE", "KPLEFTPAREN", "KPRIGHTPAREN"]
# Drop all collected keys, including this. This is default action.
Drop = ["ESC", "-", "TAB", "ENTER", "KPENTER", "LINEFEED..POWER"]
# Store extra map for these keys, when any is in "down" state.
# State is checked via "OFF:"|"ON:" conditions in action.
# (Also, state of these keys must persist between buffer drops.)
# ??? How to deal with CAPS and "LOCK"-keys ???
StateKeys = ["L_CTRL", "L_SHIFT", "L_ALT", "L_META", "CAPS", "N_LOCK", "S_LOCK",
"R_CTRL", "R_SHIFT", "R_ALT", "R_META"]
# Test only, but don't collect.
# E.g., I use F12 instead of BREAK on dumb laptops whith shitty keyboards (new ThinkPads)
Test = ["F1..F10", "ZENKAKUHANKAKU", "102ND", "F11", "F12",
"RO..KPJPCOMMA", "SYSRQ", "SCALE", "HANGEUL..YEN",
"STOP..SCROLLDOWN", "NEW..MAX"]
เชเซเชฒ เซญเซฌเซฎ เชเซเชก เชเซ. (เชชเชฐเชเชคเซ "เชฎเชพเชคเซเชฐ เชเชฟเชธเซเชธเชพเชฎเชพเช" เชฎเซเช xswitcher เชเซเชกเชฎเชพเช "เชธเชฐเชชเซเชฐเชพเชเช เชเซเชเชฐ" เชฆเชพเชเชฒ เชเชฐเซเชฏเซเช.)
เช
เชเชฆเชฐ, เชฎเซเช "เชถเซเช เชเชฐเชตเซเช" เชซเชเชเซเชถเชจเชจเชพ เชธเชเชฆเชฐเซเชญเซ เชธเชพเชฅเซ เชเชฐเซ เชเซเชตเซ เชฐเซเชคเซ เชญเชฐเชตเซเช เชคเซเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเซเชฏเซเช. เชเซเชฎเชพเช, เช เชเซ (เช
เชเชพเชจเช) เชคเซ เช
เชจเซเชเซเชณ เช
เชจเซ เชธเซเชชเชทเซเช เชฌเชจเซเชฏเซเช.
- เชนเซเช เชตเชงเซ เชฒเชตเชเซเช เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชคเชฐเชซเซเชฃเชฎเชพเช เช เชเซเชทเซเชคเซเชฐเชฎเชพเช "เชกเซเชฐเซเชช" เชเชเชพเชฎเชพเช เชเชเซ เชเชฐเชตเชพเชจเซ เชฏเซเชเชจเชพ เชฌเชจเชพเชตเซ เชฐเชนเซเชฏเซ เชเซเช (เชนเซเช เชคเชฎเชจเซ เชจเซเชเซ เชฌเชคเชพเชตเซเชถ).
3. เชตเชฟเชจเซเชกเซ เชเซเชฒเชพเชธ เชชเซเชฒเซเช
# Some behaviour can depend on application currently doing the input.
[[WindowClasses]]
# VNC, VirtualBox, qemu etc. emulates there input independently, so never intercept.
# With the exception of some stupid VNC clients, which does high-level (layout-based) keyboard input.
Regex = "^VirtualBox"
Actions = "" # Do nothing while focus stays in VirtualBox
[[WindowClasses]]
Regex = "^konsole"
# In general, mouse clicks leads to unpredictable (at the low-level where xswitcher resides) cursor jumps.
# So, it's good choise to drop all buffers after click.
# But some windows, e.g. terminals, can stay out of this problem.
MouseClickDrops = 0
Actions = "Actions"
[[WindowClasses]] # Default behaviour: no Regex (or wildcard like ".")
MouseClickDrops = 1
Actions = "Actions"
เชเซเชทเซเชเชเชจเซ เชนเชฐเซเชณ เชคเซเชจเชพ เชจเชพเชฎ เชธเชพเชฅเซ เชกเชฌเชฒ เชเซเชฐเชธ เชเซเชเชธเชฎเชพเช เชเซ. เชคเซ เชคเชฐเชค เช เชธเชฐเชณ เชจ เชนเซเช เชถเชเซ. เชนเชพเชฒเชฎเชพเช เชธเชเซเชฐเชฟเชฏ เชตเชฟเชจเซเชกเซเชจเชพ เชเชงเชพเชฐเซ, เชคเชฎเซ เชตเชฟเชเชฒเซเชชเซ เชชเชธเชเชฆ เชเชฐเซ เชถเชเซ เชเซ:
- เชเชธเซเชเชฎ เชนเซเชเชเซ เชธเซเช "เชเซเชฐเชฟเชฏเชพเช = ...". เชเซ เชเชเช/เชเชพเชฒเซ เชจ เชนเซเชฏ, เชคเซ เชเชเช เชเชฐเชถเซ เชจเชนเซเช.
- "MouseClickDrops" เชธเซเชตเซเชโเชเซเชฏเชพเชฐเซ เชฎเชพเชเชธ เชเซเชฒเชฟเช เชฎเชณเซ เชเชตเซ เชคเซเชฏเชพเชฐเซ เชถเซเช เชเชฐเชตเซเช. xswitcher เชธเชเซเชทเชฎเชคเชพ เชฌเชฟเชเชฆเซ เชเซเช เชเซเชเซเชเชธ เชเซเชฒเชฟเช เชธเซเชฅเชพเชจเซเชจเซ เชเชฒเซเชฒเซเช เชเชฐเชคเซเช เชจเชฅเซ, เชคเซเชฅเซ เชกเชฟเชซเซเชฒเซเช เชตเชฐเซเชคเชฃเซเช เชฌเชซเชฐเชจเซ เชซเซเชฒเชถ เชเชฐเชตเชพเชจเซเช เชเซ. เชเซ เชเซ, เชเชฐเซเชฎเชฟเชจเชฒเซเชธเชฎเชพเช (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ), เช เชเชฐเซเชฐเซ เชจเชฅเซ. (เชจเชฟเชฏเชฎ เชชเซเชฐเชฎเชพเชฃเซ).
เซช. เชเซเชฒเชฟเชเซเชธเชจเชพ เชเช (เช เชฅเชตเชพ เชตเชงเซ) เชเซเชฐเชฎ เชเซเชเซเชเชธ เชนเซเช เชฒเซเชจเซเช เชเชฐเซ เชเซ
# action = [ regex1, regex2, ... ]
# "CLEAN" state: all keys are released
[Actions]
# Inverse regex is hard to understand, so extract negation to external condition.
# Expresions will be checked in direct order, one-by-one. Condition succceds when ALL results are True.
# Maximum key sequence length, extra keys will be dropped. More length - more CPU.
SeqLength = 8
# Drop word buffer and start collecting new one
NewWord = [ "OFF:(CTRL|ALT|META) SEQ:(((BACK)?SPACE|[LR]_SHIFT):[01],)*(@WORD@:1)", # "@WORD@:0" then collects the char
"SEQ:(@WORD@:2,@WORD@:0)", # Drop repeated char at all: unlikely it needs correction
"SEQ:((KP)?MINUS|(KP)?ENTER|ESC|TAB)" ] # Be more flexible: chars line "-" can start new word, but must not completelly invalidate buffer!
# Drop all buffers
NewSentence = [ "SEQ:(ENTER:0)" ]
# Single char must be deleted by single BS, so there is need in compose sequence detector.
Compose = [ "OFF:(CTRL|L_ALT|META|SHIFT) SEQ:(R_ALT:1,(R_ALT:2,)?(,@WORD@:1,@WORD@:0){2},R_ALT:0)" ]
"Action.RetypeWord" = [ "OFF:(CTRL|ALT|META|SHIFT) SEQ:(PAUSE:0)" ]
"Action.CyclicSwitch" = [ "OFF:(R_CTRL|ALT|META|SHIFT) SEQ:(L_CTRL:1,L_CTRL:0)" ] # Single short LEFT CONTROL
"Action.Respawn" = [ "OFF:(CTRL|ALT|META|SHIFT) SEQ:(S_LOCK:2,S_LOCK:0)" ] # Long-pressed SCROLL LOCK
"Action.Layout0" = [ "OFF:(CTRL|ALT|META|R_SHIFT) SEQ:(L_SHIFT:1,L_SHIFT:0)" ] # Single short LEFT SHIFT
"Action.Layout1" = [ "OFF:(CTRL|ALT|META|L_SHIFT) SEQ:(R_SHIFT:1,R_SHIFT:0)" ] # Single short RIGHT SHIFT
"Action.Hook1" = [ "OFF:(CTRL|R_ALT|META|SHIFT) SEQ:(L_ALT:1,L_ALT:0)" ]
เชฎเซเช เชนเซเชเซเชธเชจเซ เชฌเซ เชชเซเชฐเชเชพเชฐเชฎเชพเช เชตเชฟเชญเชพเชเชฟเชค เชเชฐเซเชฏเชพ: เชธเซเชต-เชธเซเชชเชทเซเชเซเชเชฐเชฃ เชจเชพเชฎเซ (เชจเซเชฏเซเชตเชฐเซเชก, เชจเซเชฏเซเชธเซเชจเซเชเชจเซเชธ, เชเชเชชเซเช) เชธเชพเชฅเซ เชฌเชฟเชฒเซเช-เชเชจ เชนเซเชเซเชธ เช เชจเซ เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชฌเชฒ เชนเซเชเซเชธ.
เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชฌเชฒ เชจเชพเชฎเซ "เชเชเซเชถเชจ" เชฅเซ เชถเชฐเซ เชฅเชพเชฏ เชเซ. TOML v1.4 เชฅเซ, เชชเซเชฐเซเชฃเชตเชฟเชฐเชพเชฎเชตเชพเชณเชพ เชจเชพเชฎเซ เช เชตเชคเชฐเชฃ เชเชฟเชนเซเชจเซเชฎเชพเช เชนเซเชตเชพ เชเซเชเช.
เชฆเชฐเซเช เชตเชฟเชญเชพเช เชฎเชพเชเซ เชจเซเชเซ เชตเชฐเซเชฃเชจ เชนเซเชตเซเช เชเซเชเช เช เช เชจเชพเชฎ เชธเชพเชฅเซ.
"เชจเชเซเชจ" เชจเชฟเชฏเชฎเชฟเชค เชฒเซเชเซเชฅเซ เชฒเซเชเซเชจเชพ เชฎเชจ เชจ เชเชกเชพเชกเซ เชถเชเชพเชฏ เชคเซ เชฎเชพเชเซ (เช เชจเซเชญเชตเชฅเซ, เชคเซเช เชฒเชเชตเชพ เชฎเชพเชเซ-เชเชฆเชพเช เชฆเชธเชฎเชพเชเชฅเซ เชเช เชตเซเชฏเชพเชตเชธเชพเชฏเชฟเชเซ), เชนเซเช เชคเชพเชคเซเชเชพเชฒเชฟเช เชตเชงเชพเชฐเชพเชจเซ เชตเชพเชเซเชฏเชฐเชเชจเชพ เชฒเชพเชเซ เชเชฐเซเช เชเซเช.
- "เชฌเชเชง:" (เช
เชฅเชตเชพ "เชเชพเชฒเซ:") regexp (เชจเชฟเชฏเชฎเชฟเชค เช
เชญเชฟเชตเซเชฏเชเซเชคเชฟ) เชชเชนเซเชฒเชพเช เชจเซเชเซเชจเชพ เชฌเชเชจเซ เชเซเชกเชตเชพ (เช
เชฅเชตเชพ เชฆเชฌเชพเชตเชตเชพ) เชเชฐเซเชฐเซ เชเซ.
เชเชเชณ, เชนเซเช เชเช "เช เชชเซเชฐเชฎเชพเชฃเชฟเช" เชจเชฟเชฏเชฎเชฟเชค เช เชญเชฟเชตเซเชฏเชเซเชคเชฟ เชฌเชจเชพเชตเชตเชพ เชเช เชฐเชนเซเชฏเซ เชเซเช. "|" เชชเชพเชเชชเซ เชตเชเซเชเซเชจเชพ เชตเชฟเชญเชพเชเซ เชฎเชพเชเซ เช เชฒเช เชคเชชเชพเชธ เชธเชพเชฅเซ. เช "[LR]_SHIFT" เชเชจเซเชเซเชฐเซเชเชจเซ เชธเชเชเซเชฏเชพ เชเชเชพเชกเชถเซ (เชเซเชฏเชพเช เชคเซ เชธเซเชชเชทเซเชเชชเชฃเซ เชฌเชฟเชจเชเชฐเซเชฐเซ เชเซ). - "SEQ:" เชเซ เชชเชนเซเชฒเชพเชจเซ เชถเชฐเชค เชชเซเชฐเซ เชฅเชพเชฏ (เช เชฅเชตเชพ เชเซเชฐเชนเชพเชเชฐ เชนเซเชฏ), เชคเซ เชเชชเชฃเซ เชเชเชณ "เชจเชฟเชฏเชฎเชฟเชค" เชจเชฟเชฏเชฎเชฟเชค เช เชญเชฟเชตเซเชฏเชเซเชคเชฟ เชธเชพเชฎเซ เชคเชชเชพเชธ เชเชฐเซเชถเซเช. เชตเชงเซ เชตเชฟเชเชคเซ เชฎเชพเชเซ, เชนเซเช เชคเชฎเชจเซ เชธเซเชงเชพ "regexp" เชฒเชพเชเชฌเซเชฐเซเชฐเซเชฎเชพเช เชฎเซเชเชฒเซเชถ. เชเชพเชฐเชฃ เชเซ เชฎเซเช เชนเชเซ เชธเซเชงเซ เชฎเชพเชฐเชพ เชฎเชจเชชเชธเชเชฆ pcre ("perl compatible") เชธเชพเชฅเซ เชธเซเชธเชเชเชคเชคเชพเชจเซ เชกเชฟเชเซเชฐเซ เชถเซเชงเชตเชพเชจเซ เชคเชธเซเชฆเซ เชฒเซเชงเซ เชจเชฅเซ.
- เช เชญเชฟเชตเซเชฏเชเซเชคเชฟ เช เชฐเซเชคเซ เชฒเชเชพเชฏเซเชฒ เชเซ "BUTTON_1: CODE1, BUTTON_2: CODE2" เชตเชเซเชฐเซ, เชธเซเชเซเชจ เชเซเชกเซเชธ เชชเซเชฐเชพเชชเซเชค เชฅเชพเชฏ เชเซ เชคเซ เชเซเชฐเชฎเชฎเชพเช.
- เชเซเช เชนเชเชฎเซเชถเชพ เชเซเชฐเชฎเชจเชพ เช เชเชค เชธเซเชงเซ "เชฆเชฌเชพเชตเชตเชพเชฎเชพเช" เชเชตเซ เชเซ., เชคเซเชฅเซ เชชเซเชเชเชกเซเชฎเชพเช "$" เชเชฎเซเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชจเชฅเซ.
- เชเช เชฒเชพเชเชจเชฎเชพเช เชฌเชงเชพ เชเซเช เชเช เชชเชเซ เชเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เช เชจเซ "AND" เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเซเชกเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชชเชฐเชเชคเซ เชฎเซเชฒเซเชฏเชจเซ เชเชฐเซ เชคเชฐเซเชเซ เชตเชฐเซเชฃเชตเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเซเชตเชพเชฅเซ, เช เชฒเซเชชเชตเชฟเชฐเชพเชฎ เชชเชเซ เชตเซเชเชฒเซเชชเชฟเช เชเซเช เชฒเชเซ เชถเชเชพเชฏ เชเซ. เชเซ เชเซเช เชเชพเชฐเชฃเซเชธเชฐ เชคเซ เชเชฐเซเชฐเซ เชนเซเชฏ.
- เชเชฟเชเชฎเชค "เชธเซเชเชฒเซเชจเซเชฅ = 8" เชฌเชซเชฐเชจเชพ เชเชฆเชจเซ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชเชฐเซ เชเซ เชเซเชจเซ เชธเชพเชฎเซ เชฌเชงเซ เชคเชชเชพเชธ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชเชพเชฐเชฃ เชเซ เชฎเชพเชฐเชพ เชเซเชตเชจเชฎเชพเช (เช เชคเซเชฏเชพเชฐ เชธเซเชงเซ) เชฎเซเช เชเซเชฏเชพเชฐเซเชฏ เช เชจเชเชค เชธเชเชธเชพเชงเชจเซเชจเซ เชธเชพเชฎเชจเซ เชเชฐเซเชฏเซ เชจเชฅเซ.
เซซ. เช เชเชพเชเชจเชพ เชตเชฟเชญเชพเชเชฎเชพเช เชตเชฐเซเชฃเชตเซเชฒ เชนเซเชเซเชธ เชธเซเช เชเชฐเชตเชพ
# Action is the array, so actions could be chained (m.b., infinitely... Have I to check this?).
# For each action type, extra named parameters could be collected. Invalid parameters will be ignored(?).
[Action.RetypeWord] # Switch layout, drop last word and type it again
Action = [ "Action.CyclicSwitch", "RetypeWord" ] # Call Switch() between layouts tuned below, then RetypeWord()
[Action.CyclicSwitch] # Cyclic layout switching
Action = [ "Switch" ] # Internal layout switcher func
Layouts = [0, 1]
[Action.Layout0] # Direct layout selection
Action = [ "Layout" ] # Internal layout selection func
Layout = 0
[Action.Layout1] # Direct layout selection
Action = [ "Layout" ] # Internal layout selection func
Layout = 1
[Action.Respawn] # Completely respawn xswitcher. Reload config as well
Action = [ "Respawn" ]
[Action.Hook1] # Run external commands
Action = [ "Exec" ]
Exec = "/path/to/exec -a -b --key_x"
Wait = 1
SendBuffer = "Word" # External hook can process collected buffer by it's own means.
เช
เชนเซเช เชฎเซเชเซเชฏ เชตเชพเชค เช เชเซ เชเซ - "เชเซเชฐเชฟเชฏเชพ = [เชเชฐเซ]"เชชเชพเชเชฒเชพ เชตเชฟเชญเชพเชเชจเซ เชเซเชฎ, เชคเซเชฎเชพเช เชฌเชฟเชฒเซเช-เชเชจ เชเซเชฐเชฟเชฏเชพเชเชจเซ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชธเชฎเซเชน เชเซ. เช
เชจเซ เชกเซเชเซเชเชเชจเซ เชถเชเซเชฏเชคเชพ เชฎเซเชณเชญเซเชค เชฐเซเชคเซ เช
เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชเซ. ("Action.XXX" เชฒเชเซ เช
เชจเซ เชเชณเชธเซ เชจ เชฌเชจเซ เช
เชจเซ เชคเซเชจเชพ เชฎเชพเชเซ เชฌเซเชเซ เชตเชฟเชญเชพเช เชฒเชเซ).
เชเชพเชธ เชเชฐเซเชจเซ, เชธเซเชงเชพเชฐเซเชฒเชพ เชฒเซเชเชเชเชฎเชพเช เชถเชฌเซเชฆ เชซเชฐเซเชฅเซ เชฒเชเชตเชพเชจเซเช เชฌเซ เชญเชพเชเชฎเชพเช เชตเชนเซเชเชเชพเชฏเซเชฒเซเช เชเซ: "เชคเซเชฏเชพเช เชเชฒเซเชฒเซเชเชฟเชค เชฎเซเชเชฌ เชเซเชฌเซเชฐเซเชก เชฒเซเชเชเช เชฌเชฆเชฒเซ." ะธ โเชซเชฐเซเชฅเซ เชฒเชเซโ (โเชซเชฐเซเชฅเซ เชฒเชเซ เชถเชฌเซเชฆโ).
เชฌเชพเชเซเชจเชพ เชชเชฐเชฟเชฎเชพเชฃเซ "เชถเชฌเซเชฆเชเซเชถ" เชฎเชพเช เชฒเชเชพเชฏเซเชฒเชพ เชเซ. (เชเซเชฒเชพเชเชเชฎเชพเช เชจเชเชถเซ) เชเชชเซเชฒ เชเซเชฐเชฟเชฏเชพ เชฎเชพเชเซ, เชคเซเชฎเชจเซ เชฏเชพเชฆเซ "เชเซเชฐเชฟเชฏเชพ" เชฎเชพเช เชถเซเช เชฒเชเซเชฒเซเช เชเซ เชคเซเชจเชพ เชชเชฐ เชเชงเชพเชฐ เชฐเชพเชเซ เชเซ.
เชเช เชขเชเชฒเชพเชฎเชพเช เชเชฃเซ เชเซเชฆเซ เชเซเชฆเซ เชเซเชฐเชฟเชฏเชพเชเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเซ เชถเชเชพเชฏ เชเซ. (เชตเชฟเชญเชพเชเซ)เช เชฅเชตเชพ เชคเชฎเซ เชคเซเชจเซ เช เชฒเช เชเชฐเซ เชถเชเซ เชเซ. เชเซเชฎ เชฎเซเช เชเชชเชฐ เชฌเชคเชพเชตเซเชฏเซเช.
เชฎเซเช เชคเชฐเชค เช เชฌเชพเชนเซเชฏ เชธเซเชเซเชฐเชฟเชชเซเช เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ "Exec" เชเซเชฐเชฟเชฏเชพ เชธเซเช เชเชฐเซ. เชฐเซเชเซเชฐเซเชก เชเชฐเซเชฒเชพ เชฌเชซเชฐเชจเซ เชคเซเชจเชพ stdin เชฎเชพเช เชงเชเซเชฒเชตเชพเชจเชพ เชตเชฟเชเชฒเซเชช เชธเชพเชฅเซ.
- "เชฐเชพเชน เชเซเช = 1" - เชเชพเชฒเซ เชฐเชนเซเชฒ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชชเซเชฐเซเชฃ เชฅเชพเชฏ เชคเซเชฏเชพเช เชธเซเชงเซ เชฐเชพเชน เชเซเช.
- เชคเชฎเซ เชเชฆเชพเช เชชเชฐเซเชฏเชพเชตเชฐเชฃเชฎเชพเช เชเซเชเชฒเซเช เชตเชงเชพเชฐเชพเชจเซ เชฎเชพเชนเชฟเชคเซ เชเชฎเซเชฐเชตเชพ เชฎเชพเชเชเชถเซ, เชเซเชฎ เชเซ เชเซ เชตเชฟเชจเซเชกเซเชฎเชพเชเชฅเซ เชคเซเชจเซ เช
เชเชเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชนเชคเซ เชคเซเชจเซเช เชตเชฐเซเช เชจเชพเชฎ.
"เชคเชฎเชพเชฐเชพ เชชเซเชฐเซเชธเซเชธเชฐเชจเซ เชเชจเซเชเซเช เชเชฐเชตเชพ เชฎเชพเชเชเซ เชเซ? เช เชนเซเช เชคเชฎเชจเซ เชคเซ เชฎเชณเชถเซ."
เชซเซ (เชถเซเชตเชพเชธ เชเซเชกเชคเชพ). เชฒเชพเชเซ เชเซ เชเซ เชนเซเช เชเชเช เชญเซเชฒเซ เชจเชฅเซ เชเชฏเซ.
เช
เชฐเซเชฐเซ! เชเชนเชพ, เชนเซเช เชญเซเชฒเซเชฏเซ เชจเชนเซเช...
เชฒเซเชจเซเช เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชเซเชฏเชพเช เชเซ? เชนเชพเชฐเซเชกเชเซเชกเชฎเชพเช? เชเชเชเช เชเชจเชพ เชเซเชตเซเช:
[ScanDevices]
# Must exist on start. Self-respawn in case it is younger then 30s
Test = "/dev/input/event0"
Respawn = 30
# Search mask
Search = "/dev/input/event*"
# In my thinkPads there are such a pseudo-keyboards whith tons of unnecessary events
Bypass = "(?i)Video|Camera" # "(?i)" obviously differs from "classic" pcre's.
เชคเชฎเซ เชเซเชฏเชพเช เชญเซเชฒเซ เชเชฏเชพ/เชญเซเชฒ เชเชฐเซ? (เชฌเซเชเซ เชเซเช เชฐเชธเซเชคเซ เชจเชฅเซ)เชฎเชจเซ เชเชฐเซเชเชฐ เชเชถเชพ เชเซ เชเซ เชธเชเซเชค เชตเชพเชเชเซ เช เชคเชฐเชซ เชงเซเชฏเชพเชจ เชฆเซเชฐเชตเชพเชฎเชพเช เชเชณเชธเซ เชจเชนเซเช เชฌเชจเซ.
เชธเชพเชฐเชพ เชจเชธเซเชฌ!
เชธเซเชฐเซเชธ: www.habr.com
