เจฒเฉ
เจเจฟเจธเฉ เจคเจฐเฉเจนเจพเจ เจเจน เจชเจคเจพ เจเจฒเจฆเจพ เจนเฉ เจเจฟ เจเจฎ เจชเฉเจฐเฉเจเจฐเจพเจฎเจฐเจพเจ เจจเฉเฉฐ เจเจน เจธเจพเจฐเฉ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจธเจฅเจพเจชเจค เจเจฐเจจ เจฒเจ เจฌเจนเฉเจค เจฌเฉเจฐเจฟเฉฐเจ เจฒเฉฑเจเจฆเฉ เจนเฉ.
เจฌเฉเจฌเฉเจจเจฟเจเจฆ เจจเจพ เจนเฉเจฃ เจฒเจ, เจ
เฉฐเจฆเจฐ เจเฉฑเจ เจเจฆเจพเจนเจฐเจฃ เจนเฉ เจเจฟเจธ เจจเจพเจฒ เจฎเฉเจ เจจเจเจฟเฉฑเจ เจฐเจฟเจนเจพ เจนเจพเจ.
เจเฉเฉฑเจฒ เจฎเจฟเจฒเจพ เจเฉ เจธเจผเจพเจจเจฆเจพเจฐ เจขเฉฐเจ เจจเจพเจฒ เจเจฒเจชเจจเจพ เจเฉเจคเฉ เจเจ (เจ
เจคเฉ เจเฉฐเจเฉ เจคเจฐเฉเจนเจพเจ เจฒเจพเจเฉ เจเฉเจคเฉ เจเจ) เจ
เจชเจพเจเฉ เจเจพเจซเจเจพ เจ
เจคเฉ เจเจผเฉเจเฉเจชเจฐเฅค
- เจธเฉฐเจฐเจเจจเจพ? เจชเจฐ เจเจน เจฌเฉเจฐเจฟเฉฐเจ เจนเฉ! เจกเฉฐเจฌ xml (เจเจฟเจเจเจเจฟ เจเจน "เจฌเจพเจเจธ เจคเฉเจ เจฌเจพเจนเจฐ" เจนเฉ)เฅค
- เจ, เจเฉ เจคเฉเจธเฉเจ เจตเฉ เจเจธเฉเจเจฒ เจเจพเจนเฉเฉฐเจฆเฉ เจนเฉ? เจชเจฐ เจเจน เจฌเจนเฉเจค เจฌเฉเจฐเจฟเฉฐเจ เจนเฉ! เจเฉเจช-เจฌเจฒเฉเจชเจฐ... เจ
เจเจฟเจนเจพ เจเฉเจเฅค
เจชเจฐ เจฎเฉเจฐเฉ เจเฉฐเจฎ เจตเจฟเฉฑเจ เจเจน เจฌเจฟเจฒเจเฉเจฒ เจเจฒเจ เจนเฉเฅค เจธเฉฑเจเจพ (เจนเจพเจ, เจฒเจเจญเจ เจชเจนเจฟเจฒเฉ เจตเจพเจฐ เจเจฆเฉ เจจเจนเฉเจ) เจจเจฟเจฐเจฎเจฟเจค เจฎเจพเจกเจฒ เจคเฉเจนเจพเจจเฉเฉฐ เจนเฉเจฐ เจเจธเจพเจจเฉ เจจเจพเจฒ เจ เจคเฉ เจเฉเจฆเจฐเจคเฉ เจคเฉเจฐ 'เจคเฉ เจเจพเจฐเฉ เจฐเฉฑเจเจฃ เจฆเฉ เจเจเจพเจเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉ (เจฒเจเจญเจ) เจเฉฑเจ เจเจฟเฉฑเจคเจฐ เจจเฉเฉฐ เจเจเฉฑเจ เจพ เจเจฐเฉ.
เจฎเฉเจ เจนเจพเจฒ เจนเฉ เจตเจฟเฉฑเจ เจกเฉเจเจพ เจตเจฟเจเจฟเจเจจเฉเจเจ เจฆเฉ เจธเจเจผเจค เจฎเจฟเจนเจจเจค เจฌเจพเจฐเฉ เจนเฉเจฌเจฐเฉ เจเฉฑเจคเฉ เจเฉฑเจ เจฒเฉเจ เจตเจฟเฉฑเจ เจเจเจ ...
เจเจน เจชเจคเจพ เจเจฒเจฆเจพ เจนเฉ เจเจฟ เจเจน เจชเจฒ เจเจนเจจเจพเจ เจฒเจ เจชเฉเจฐเฉ เจคเจฐเฉเจนเจพเจ เจ
เจจเฉเจญเจต เจเฉเจคเจพ เจเจฟเจ เจนเฉ. เจ
เจคเฉ เจฎเฉเจฐเฉ เจ
เจญเจฟเจเจธ เจตเจฟเฉฑเจ, เจเจฟเจตเฉเจ เจเจฟ เจเจน เจเจนเจฟเฉฐเจฆเฉ เจนเจจ, "เจนเจฒเจเจพ เจธเฉฐเจธเจเจฐเจฃ". เจฎเจฒเจเฉ-เจตเฉเจฒเจฟเจเจฎ เจฎเจพเจกเจฒ, เจคเจฟเจเจฐ 'เจคเฉ เจเจเจชเฉ เจตเจพเจฒเฉ เจคเจเจฐเจฌเฉเจเจพเจฐ เจชเฉเจฐเฉเจเจฐเจพเจฎเจฐ, เจเจฆเจฟเฅค - เจเจน เจธเจญ เจฌเจพเจ
เจฆ เจตเจฟเฉฑเจ เจฆเจฟเจเจพเจ เจฆเฉเจตเฉเจเจพ เจเจฆเฉเจ/เจเฉ เจเจน เจธเจผเฉเจฐเฉ เจนเฉเฉฐเจฆเจพ เจนเฉเฅค เจชเจฐ เจกเจฟเจเจผเจพเจเจจเจฐ เจจเฉเฉฐ เจเฉฑเจฅเฉ เจ
เจคเฉ เจนเฉเจฃ เจเจฟเจคเฉ เจธเจผเฉเจฐเฉ เจเจฐเจจ เจฆเฉ เจเจผเจฐเฉเจฐเจค เจนเฉ.
เจฌเจฟเฉฐเจฆเฉ 'เจคเฉ เจชเฉเจฐเจพเจชเจค เจเจฐเฉ. เจฎเฉเจ TOML เจจเฉเฉฐ เจเฉฑเจ เจธเจฟเฉฐเจเฉเจเจเจฟเจ เจ
เจงเจพเจฐ เจตเจเฉเจ เจฒเจฟเจ
เจเจฟเจเจเจเจฟ เจเจน (TOML) เจเฉฑเจ เจชเจพเจธเฉ, เจฎเจจเฉเฉฑเจเฉ-เจธเฉฐเจชเจพเจฆเจจเจฏเฉเจเฅค เจฆเฉเจเฉ เจชเจพเจธเฉ, เจเจธเจฆเจพ เจ
เจจเฉเจตเจพเจฆ 1:1 เจจเฉเฉฐ เจเจฟเจธเฉ เจตเฉ เจตเจงเฉเจฐเฉ เจเจฎ เจธเฉฐเจเฉเจเจธ เจตเจฟเฉฑเจ เจเฉเจคเจพ เจเจฟเจ เจนเฉ: XML, JSON, YAMLเฅค
เจเจธ เจคเฉเจ เจเจฒเจพเจตเจพ, เจฎเฉเจ "github.com/BurntSushi/toml" เจคเฉเจ เจตเจฐเจคเจฟเจ เจเจฟเจ เจ
เจฎเจฒ, เจนเจพเจฒเจพเจเจเจฟ เจธเจญ เจคเฉเจ เจตเฉฑเจง เจซเฉเจธเจผเจจเฉเจฌเจฒ (เจ
เจเฉ เจตเฉ 1.4 เจธเฉฐเจเฉเจเจธ) เจจเจนเฉเจ เจนเฉ, เจเจธเฉ ("เจฌเจฟเจฒเจ-เจเจจ") JSON เจจเจพเจฒ เจธเจฟเฉฐเจเฉเจเจเจฟเจ เจคเฉเจฐ 'เจคเฉ เจ
เจจเฉเจเฉเจฒ เจนเฉเฅค
เจญเจพเจต, เจเฉเจเจฐ เจคเฉเจธเฉเจ เจเจพเจนเฉ, เจคเจพเจ เจคเฉเจธเฉเจ เจฌเจธ เจเจนเจฟ เจธเจเจฆเฉ เจนเฉ "เจคเฉเจนเจพเจกเฉ เจฆเฉ เจเจธ TOML เจจเจพเจฒ เจเฉฐเจเจฒ เจตเจฟเฉฑเจเฉเจ เจฒเฉฐเจเฉ, เจฎเฉเจจเฉเฉฐ XXX เจเจพเจนเฉเจฆเจพ เจนเฉ" เจ เจคเฉ เจเฉเจก เจจเฉเฉฐ เจธเจฟเจฐเจซเจผ เจเฉฑเจ เจฒเจพเจเจจ เจจเจพเจฒ "เจชเฉเจ" เจเจฐเฉเฅค
เจเจธ เจคเจฐเฉเจนเจพเจ, เจเฉ เจคเฉเจธเฉเจ xswitcher เจจเฉเฉฐ เจธเฉฐเจฐเจเจฟเจค เจเจฐเจจ เจฒเจ เจเฉเจ เจตเจฟเฉฐเจกเฉเจเจผ เจฒเจฟเจเจฃเจพ เจเจพเจนเฉเฉฐเจฆเฉ เจนเฉ (เจฎเฉเจ เจชเฉฑเจเจพ เจจเจนเฉเจ เจเจนเจฟ เจธเจเจฆเจพ) "เจคเฉเจนเจพเจกเฉ เจเจธ เจฒเจพเจนเจจเจค เจธเฉฐเจฐเจเจจเจพ เจจเจพเจฒ" เจเจฟเจธเฉ เจธเจฎเฉฑเจธเจฟเจ เจฆเฉ เจเจฎเฉเจฆ เจจเจนเฉเจ เจเฉเจคเฉ เจเจพเจเจฆเฉเฅค
เจฌเจพเจเฉ เจธเจญ เจฒเจ, เจธเฉฐเจเฉเจเจธ "เจเฉเฉฐเจเฉ = เจฎเฉเฉฑเจฒ" 'เจคเฉ เจ
เจงเจพเจฐเจค เจนเฉ (เจ
เจคเฉ เจธเจผเจพเจฌเจฆเจฟเจ เจคเฉเจฐ 'เจคเฉ เจเฉเจ เจนเฉเจฐ เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจตเจฟเจเจฒเจช, เจเจฟเจตเฉเจ เจเจฟ = [เจเฉเจ, เจเจน, เจเจฐเฉ]) เจธเจผเจพเจเจฆ
เจ
เจจเฉเจญเจตเฉ เจคเฉเจฐ 'เจคเฉ เจธเฉเจตเจฟเจงเจพเจเจจเจเฅค
เจฆเจฟเจฒเจเจธเจช เจเฉฑเจฒ เจเจน เจนเฉ เจเจฟ
เจเจธ เจฒเจ, เจนเฉเจฃ เจฎเฉเจฐเฉ เจฒเจ เจเจธ เจฆเฉ เจฒเจพเจเฉเจเจฐเจจ เจจเฉเฉฐ เจเจชเจฃเฉ เจ เจจเฉเจเฉเจฒ เจฌเจฃเจพเจเจฃเจพ เจธเฉเจเจพ เจนเฉ, เจจเจพ เจเจฟ เจเจฒเจเฅค
เจเจฎ เจคเฉเจฐ 'เจคเฉ, เจ เจธเฉเจ TOML (เจชเฉเจฐเจพเจฃเฉ เจตเจฟเฉฐเจกเฉเจเจผ INI เจฆเฉ เจธเจฎเจพเจจ) เจฒเฉเจเจฆเฉ เจนเจพเจเฅค เจ เจคเฉ เจธเจพเจกเฉ เจเฉเจฒ เจเฉฑเจ เจธเฉฐเจฐเจเจจเจพ เจนเฉ เจเจฟเจธ เจตเจฟเฉฑเจ เจ เจธเฉเจ เจตเจฐเจฃเจจ เจเจฐเจฆเฉ เจนเจพเจ เจเจฟ เจเฉเจฌเฉเจฐเจก เจคเฉเจ เจจเจตเฉเจจเจคเจฎ เจธเจเฉเจจ เจเฉเจกเจพเจ เจฆเฉ เจธเฉเฉฑเจ เจฆเฉ เจ เจงเจพเจฐ เจคเฉ เจนเฉเฉฑเจเจพเจ เจฆเฉ เจเฉฑเจ เจฒเฉเฉ เจจเฉเฉฐ เจเจฟเจตเฉเจ เจเฉเฉเจจเจพ เจนเฉเฅค เจนเฉเจ เจพเจ, เจเฉเจเฉเฉ-เจเฉเจเฉเฉ, เจนเฉเจฃ เจคเฉฑเจ เจเฉ เจนเฉเจเจ เจนเฉเฅค เจ เจคเฉ เจเจธ เจเฉฑเจฒ เจฆเฉ เจตเจฟเจเจเจฟเจ เจเจฟ เจฎเฉเจ เจเจธ เจคเจฐเฉเจนเจพเจ เจฆเจพ เจซเฉเจธเจฒเจพ เจเจฟเจเจ เจเฉเจคเจพเฅค
0 เจฌเฉเจจเจฟเจเจฆเฉ เจเจฌเจธเจเจฐเฉเจเจธเจผเจจ
- เจเฉเจก เจ
เจนเฉเจฆเจฟเจเจ เจจเฉเฉฐ เจธเจเฉเจจ เจเจฐเฉเฅค เจเจธ เจฌเจพเจฐเฉ เจจเจฟเจธเจผเจเจค เจคเฉเจฐ 'เจคเฉ เจเฉเจ เจเจฐเจจ เจฆเฉ เจเจผเจฐเฉเจฐเจค เจนเฉ, เจเจฟเจเจเจเจฟ เจธเจฟเจฐเจซเจผ เจกเจฟเจเฉเจเจฒ เจเฉเจก เจฎเจจเฉเฉฑเจเฉ-เจชเฉเฉเจนเจจ เจฏเฉเจ เจจเจนเฉเจ เจนเจจ (เจเจน เจธเจฟเจฐเจซเจผ เจฎเฉเจ เจนเจพเจ
loloswitcher ).
เจฎเฉเจ "เจเฉเจฒเจพเจเจ-เจเจตเจฆเฉเจต" เจคเฉเจ "ecodes.go" เจจเฉเฉฐ เจนเจฟเจฒเจพ เจฆเจฟเฉฑเจคเจพ (เจฎเฉเจ เจ เจธเจฒ เจธเจฐเฉเจค เจจเฉเฉฐ เจฆเฉเจเจฃ เจฒเจ เจฌเจนเฉเจค เจเจฒเจธเฉ เจธเฉ, เจนเจพเจฒเจพเจเจเจฟ เจฒเฉเจเจ เจจเฉ เจเจธเจจเฉเฉฐ เจเจพเจซเจผเฉ เจธเฉฑเจญเจฟเจเจเจพเจฐเจ เจคเฉเจฐ 'เจคเฉ เจฆเจฐเจธเจพเจเจ เจนเฉ)เฅค เจฎเฉเจ เจฅเฉเฉเจพ เจเจฟเจนเจพ (เจนเฉเจฃ เจฒเจ) เจเฉเจ เจ เฉเจ เจเฉเจคเจพ เจเฉ เจเจพเจซเจผเฉ เจกเจฐเจพเจเจฃเจพ เจธเฉเฅค เจเจฟเจตเฉเจ เจเจฟ โLEFTBRACEโ โ โL_BRACEโเฅค - เจเจธ เจคเฉเจ เจเจฒเจพเจตเจพ, เจเจธเจจเฉ "เจธเจเฉเจ เจเฉเฉฐเจเฉเจเจ" เจฆเฉ เจงเจพเจฐเจจเจพ เจชเฉเจธเจผ เจเฉเจคเฉเฅค เจเจฟเจเจเจเจฟ เจตเจฐเจคเจฟเจ เจเจพเจฃ เจตเจพเจฒเจพ เจจเจฟเจฏเจฎเจค เจตเจฟเจเจเจฐเจฃ เจฒเฉฐเจฌเฉ เจ เฉฐเจธเจผเจพเจ เจฆเฉ เจเจเจฟเจ เจจเจนเฉเจ เจฆเจฟเฉฐเจฆเจพ เจนเฉเฅค (เจชเจฐ เจเจน เจคเฉเจนเจพเจจเฉเฉฐ เจเฉฑเจเฉ-เจเฉฑเจ เจเจตเจฐเจนเฉเฉฑเจก เจจเจพเจฒ เจเจพเจเจ เจเจฐเจจ เจฆเฉ เจเจเจพเจเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉเฅค เจเฉเจเจฐ เจคเฉเจธเฉเจ เจธเจฟเจฐเจซเจผ "เจธเจฟเฉฑเจงเฉ" เจฐเจฟเจเจพเจฐเจกเจฟเฉฐเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเฅค)
- เจเฉ เจฆเจฌเจพเจเจ เจเจพเจเจฆเจพ เจนเฉ เจเจธ เจฆเจพ เจเฉฑเจ เจฌเจฟเจฒเจ-เจเจจ "เจกเจฟเจกเจชเจฒเฉเจเฉเจเจฐ" เจนเฉเจตเฉเจเจพเฅค เจเจธ เจคเจฐเฉเจนเจพเจ, เจ เจตเจธเจฅเจพ "เจฆเฉเจนเจฐเจพเจ" = 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"]
เจเฉเฉฑเจฒ 768 เจเฉเจก เจนเจจเฅค (เจชเจฐ โเจธเจฟเจฐเจซเจผ เจฎเจพเจฎเจฒเฉ เจตเจฟเฉฑเจโ เจฎเฉเจ 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 เจเจพเจฒเฉ เจนเฉเฉฐเจฆเจพ เจนเฉ, "เจเจน เจเจฟเฉฑเจฅเฉ เจเจฒเจฟเจ เจเจฐเจฆเฉ เจนเจจ" เจฌเจพเจฐเฉ เจเฉเจ เจตเฉเจฐเจตเฉ เจจเจนเฉเจ เจนเฉเฉฐเจฆเฉ เจนเจจ, เจ เจธเฉเจ เจฎเฉเจฒ เจฐเฉเจช เจตเจฟเฉฑเจ เจฌเจซเจฐ เจจเฉเฉฐ เจฐเฉเจธเฉเจ เจเจฐเจฆเฉ เจนเจพเจเฅค เจชเจฐ เจเจฐเจฎเฉเจจเจฒเจพเจ เจตเจฟเฉฑเจ (เจเจฆเจพเจนเจฐเจจ เจฒเจ) เจคเฉเจนเจพเจจเฉเฉฐ เจ เจเจฟเจนเจพ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจจเจนเฉเจ เจนเฉ (เจเจฎ เจคเฉเจฐ 'เจคเฉ).
4. เจเจฒเจฟเฉฑเจเจพเจ เจฆเฉ เจเฉฑเจ (เจเจพเจ เจเจ) เจเฉเจฐเจฎ เจเฉฑเจ เจเจพเจ เจฆเฉเจเฉ เจนเฉเฉฑเจ เจจเฉเฉฐ เจเจฐเจฟเฉฑเจเจฐ เจเจฐเจฆเฉ เจนเจจ
# 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:" เจเฉ เจชเจฟเจเจฒเฉ เจธเจผเจฐเจค เจชเฉเจฐเฉ เจนเฉเฉฐเจฆเฉ เจนเฉ (เจเจพเจ เจเฉเจฐเจนเจพเจเจผเจฐ), เจคเจพเจ เจ เจธเฉเจ "เจเจฎ" เจจเจฟเจฏเจฎเจค เจธเจฎเฉเจเจฐเจจ เจฆเฉ เจตเจฟเจฐเฉเฉฑเจง เจเจพเจเจ เจเจฐเจฆเฉ เจนเจพเจเฅค เจตเฉเจฐเจตเจฟเจเจ เจฒเจ, เจฎเฉเจ เจคเฉเจฐเฉฐเจค ^W โregexpโ เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉ เจจเฉเฉฐ เจญเฉเจเจฆเจพ เจนเจพเจเฅค เจเจฟเจเจเจเจฟ เจฎเฉเจ เจ เจเฉ เจตเฉ เจเจชเจฃเฉ เจฎเจจเจชเจธเฉฐเจฆ pcre ("เจชเจฐเจฒ เจ เจจเฉเจเฉเจฒ") เจจเจพเจฒ เจ เจจเฉเจเฉเจฒเจคเจพ เจฆเฉ เจกเจฟเจเจฐเฉ เจฆเจพ เจชเจคเจพ เจฒเจเจพเจเจฃ เจฆเฉ เจเฉเจเจฒ เจจเจนเฉเจ เจเฉเจคเฉ เจนเฉเฅค
- เจธเจฎเฉเจเจฐเจจ เจฐเฉเจช เจตเจฟเฉฑเจ เจฒเจฟเจเจฟเจ เจเจฟเจ เจนเฉ "BUTTON_1: CODE1, BUTTON_2: CODE2" เจเจฆเจฟ, เจเจฟเจธ เจเฉเจฐเจฎ เจตเจฟเฉฑเจ เจธเจเฉเจจ เจเฉเจก เจชเฉเจฐเจพเจชเจค เจนเฉเฉฐเจฆเฉ เจนเจจเฅค
- เจเฉเจฐเจฎ เจฆเฉ เจ เฉฐเจค เจคเฉฑเจ เจเฉเจ เจนเจฎเฉเจธเจผเจพ "เจธเฉฐเจจเจเจก" เจนเฉเฉฐเจฆเจพ เจนเฉ, เจเจธ เจฒเจ เจชเฉเจ เจตเจฟเฉฑเจ "$" เจเฉเฉเจจ เจฆเฉ เจเฉเจ เจฒเฉเฉ เจจเจนเฉเจ เจนเฉเฅค
- เจเฉฑเจ เจฒเจพเจเจจ เจตเจฟเฉฑเจ เจธเจพเจฐเฉเจเจ เจเจพเจเจเจพเจ เจเฉฑเจ เจคเฉเจ เจฌเจพเจ เจฆ เจเฉฑเจ เจเฉเจคเฉเจเจ เจเจพเจเจฆเฉเจเจ เจนเจจ เจ เจคเฉ "I" เจฆเฉเจเจฐเจพ เจเฉเฉเจฟเจ เจเจพเจเจฆเจพ เจนเฉเฅค เจชเจฐ เจเจฟเจเจเจเจฟ เจฎเฉเฉฑเจฒ เจจเฉเฉฐ เจเฉฑเจ เจเจฐเฉ เจตเจเฉเจ เจฆเจฐเจธเจพเจเจ เจเจฟเจ เจนเฉ, เจคเฉเจธเฉเจ เจเจพเจฎเฉ เจคเฉเจ เจฌเจพเจ เจฆ เจเฉฑเจ เจตเจฟเจเจฒเจชเจฟเจ เจเจพเจเจ เจฒเจฟเจ เจธเจเจฆเฉ เจนเฉเฅค เจเฉเจเจฐ เจเจฟเจธเฉ เจเจพเจฐเจจ เจเจฐเจเฉ เจเจธเจฆเฉ เจฒเฉเฉ เจนเฉเฅค
- เจฎเฉเฉฑเจฒ "SeqLength = 8" เจฌเจซเจฐ เจฆเฉ เจเจเจพเจฐ เจจเฉเฉฐ เจธเฉเจฎเจฟเจค เจเจฐเจฆเจพ เจนเฉ เจเจฟเจธ เจฆเฉ เจตเจฟเจฐเฉเฉฑเจง เจธเจพเจฐเฉเจเจ เจเจพเจเจเจพเจ เจเฉเจคเฉเจเจ เจเจพเจเจฆเฉเจเจ เจนเจจเฅค เจเจฟเจเจเจเจฟ เจฎเฉเจ (เจนเฉเจฃ เจคเฉฑเจ) เจเจฆเฉ เจตเฉ เจเจชเจฃเฉ เจเฉเจตเจจ เจตเจฟเฉฑเจ เจฌเฉเจ เฉฐเจค เจธเจฐเฉเจคเจพเจ เจฆเจพ เจธเจพเจนเจฎเจฃเจพ เจจเจนเฉเจ เจเฉเจคเจพเฅค
5. เจชเจฟเจเจฒเฉ เจญเจพเจ เจตเจฟเฉฑเจ เจฆเฉฑเจธเฉ เจเจ เจนเฉเฉฑเจเจพเจ เจจเฉเฉฐ เจธเฉเฉฑเจ เจเจฐเจจเจพ
# 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.
เจเฉฑเจฅเฉ เจฎเฉเฉฑเจ เจเฉฑเจฒ เจเจน เจนเฉ "เจเจเจธเจผเจจ = [เจเจฐเฉ]". เจชเจฟเจเจฒเฉ เจญเจพเจ เจฆเฉ เจธเจฎเจพเจจ, เจฌเจฟเจฒเจ-เจเจจ เจเจพเจฐเจตเจพเจเจเจ เจฆเจพ เจเฉฑเจ เจธเฉเจฎเจค เจธเจฎเฉเจน เจนเฉเฅค เจ
เจคเฉ เจกเฉเจเจฟเฉฐเจ เจฆเฉ เจธเฉฐเจญเจพเจตเจจเจพ เจธเจฟเจงเจพเจเจค เจตเจฟเฉฑเจ เจธเฉเจฎเจฟเจค เจจเจนเฉเจ เจนเฉ (โเจเจเจธเจผเจจ.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