Xswitcher แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜ Linux-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก: แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ แƒ›แƒ”แƒแƒ แƒ”

แƒ แƒแƒ’แƒแƒ แƒช แƒฌแƒ˜แƒœแƒ แƒžแƒฃแƒ‘แƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ (xswitcher "แƒ™แƒแƒœแƒชแƒ”แƒคแƒชแƒ˜แƒ˜แƒก แƒ›แƒขแƒ™แƒ˜แƒชแƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก" แƒ”แƒขแƒแƒžแƒ–แƒ”) แƒ›แƒ˜แƒ˜แƒฆแƒ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒ™แƒแƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒฃแƒšแƒ˜ แƒ’แƒแƒ›แƒแƒฎแƒ›แƒแƒฃแƒ แƒ”แƒ‘แƒ (แƒ แƒแƒช แƒกแƒแƒกแƒ˜แƒแƒ›แƒแƒ•แƒœแƒแƒ), แƒ’แƒแƒ•แƒแƒ’แƒ แƒซแƒ”แƒšแƒ” แƒ—แƒแƒ•แƒ˜แƒกแƒฃแƒคแƒแƒšแƒ˜ แƒ“แƒ แƒแƒ˜แƒก แƒ“แƒแƒฎแƒแƒ แƒฏแƒ•แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒจแƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒแƒ–แƒ”. แƒแƒฎแƒšแƒ แƒ›แƒ˜แƒœแƒ“แƒ แƒ“แƒแƒ•แƒฎแƒแƒ แƒฏแƒ แƒชแƒแƒขแƒ แƒจแƒ”แƒœแƒ˜... แƒ›แƒ”แƒแƒ แƒ” แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ แƒแƒ  แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜: แƒฌแƒ˜แƒœแƒแƒ“แƒแƒ“แƒ”แƒ‘แƒ/แƒ’แƒแƒœแƒฎแƒ˜แƒšแƒ•แƒ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒ˜แƒ–แƒแƒ˜แƒœแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘.

Xswitcher แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜ Linux-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก: แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ แƒ›แƒ”แƒแƒ แƒ”

แƒ แƒแƒขแƒแƒ›แƒฆแƒแƒช แƒ’แƒแƒ›แƒแƒ“แƒ˜แƒก, แƒ แƒแƒ› แƒœแƒแƒ แƒ›แƒแƒšแƒฃแƒ  แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒกแƒขแƒ”แƒ‘แƒก แƒฌแƒแƒ แƒ›แƒแƒฃแƒ“แƒ’แƒ”แƒœแƒšแƒแƒ“ แƒ›แƒแƒกแƒแƒฌแƒงแƒ”แƒœแƒ˜แƒ แƒงแƒ•แƒ”แƒšแƒ แƒแƒ› แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ.

แƒฃแƒกแƒแƒคแƒฃแƒซแƒ•แƒšแƒ แƒ แƒแƒ› แƒแƒ  แƒ˜แƒงแƒแƒก, แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— แƒแƒ แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒกแƒ—แƒแƒœ แƒ›แƒแƒฅแƒ•แƒก แƒกแƒแƒฅแƒ›แƒ”.
แƒ›แƒ—แƒšแƒ˜แƒแƒœแƒแƒ‘แƒแƒจแƒ˜ แƒจแƒ”แƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ•แƒแƒ“ แƒฉแƒแƒคแƒ˜แƒฅแƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ (แƒ“แƒ แƒ™แƒแƒ แƒ’แƒแƒ“ แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜) Apache Kafka & ZooKeeper.
- แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ? แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒกแƒแƒฌแƒงแƒ”แƒœแƒ˜แƒ! แƒ›แƒฃแƒœแƒฏแƒ˜ xml (แƒ˜แƒ›แƒ˜แƒขแƒแƒ›, แƒ แƒแƒ› แƒ˜แƒก แƒแƒ แƒ˜แƒก "แƒ’แƒแƒ แƒ”แƒ›แƒแƒ“แƒแƒœ").
-แƒแƒฃ แƒจแƒ”แƒœแƒช แƒ’แƒ˜แƒœแƒ“แƒ ACL? แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒแƒกแƒแƒฌแƒงแƒ”แƒœแƒ˜แƒ! Tap-blooper... แƒ แƒแƒฆแƒแƒช แƒ˜แƒกแƒ”แƒ—แƒ˜.

แƒ›แƒแƒ’แƒ แƒแƒ› แƒฉแƒ”แƒ›แƒก แƒจแƒ”แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒแƒจแƒ˜ แƒ”แƒก แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒกแƒแƒžแƒ˜แƒ แƒ˜แƒกแƒžแƒ˜แƒ แƒแƒ. แƒฃแƒคแƒšแƒ”แƒ‘แƒ (แƒกแƒแƒ›แƒฌแƒฃแƒฎแƒแƒ แƒแƒ“, แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒแƒ แƒแƒกแƒ“แƒ แƒแƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“) แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ“แƒ”แƒšแƒ˜ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ’แƒแƒแƒ’แƒ แƒซแƒ”แƒšแƒแƒ— แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒ˜ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒแƒ“ แƒ“แƒ แƒ‘แƒฃแƒœแƒ”แƒ‘แƒ แƒ˜แƒ•แƒแƒ“ (แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก) แƒจแƒ”แƒ™แƒ แƒ˜แƒ‘แƒ”แƒ— แƒ“แƒ˜แƒแƒ’แƒ แƒแƒ›แƒ.

แƒชแƒแƒขแƒ แƒฎแƒœแƒ˜แƒก แƒฌแƒ˜แƒœ แƒฌแƒแƒ•แƒแƒฌแƒงแƒ“แƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒแƒก แƒฐแƒแƒ‘แƒ แƒ”แƒ–แƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ›แƒ”แƒชแƒœแƒ˜แƒ”แƒ แƒ—แƒ แƒจแƒ แƒแƒ›แƒ˜แƒกแƒ›แƒแƒงแƒ•แƒแƒ แƒ”แƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘...
แƒ’แƒแƒ›แƒแƒ“แƒ˜แƒก, แƒ แƒแƒ› แƒ›แƒแƒ—แƒ—แƒ•แƒ˜แƒก แƒ”แƒก แƒ›แƒแƒ›แƒ”แƒœแƒขแƒ˜ แƒกแƒ แƒฃแƒšแƒแƒ“ แƒแƒ แƒ˜แƒก แƒ แƒ”แƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜. แƒ“แƒ แƒฉแƒ”แƒ›แƒก แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒแƒจแƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒแƒ›แƒ‘แƒแƒ‘แƒ”แƒœ, "แƒ›แƒกแƒฃแƒ‘แƒฃแƒฅแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ". แƒ›แƒ แƒแƒ•แƒแƒšแƒขแƒแƒ›แƒ˜แƒแƒœแƒ˜ แƒ›แƒแƒ“แƒ”แƒšแƒ”แƒ‘แƒ˜, แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒšแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒกแƒขแƒ”แƒ‘แƒ˜ แƒ›แƒ–แƒแƒ“แƒงแƒแƒคแƒœแƒแƒจแƒ˜ OOP-แƒ˜แƒ— แƒ“แƒ แƒ.แƒจ. โ€” แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ”แƒ‘แƒ, แƒ แƒแƒชแƒ/แƒ—แƒฃ แƒแƒคแƒ แƒ˜แƒœแƒ“แƒ”แƒ‘แƒ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ“แƒ˜แƒ–แƒแƒ˜แƒœแƒ”แƒ แƒ›แƒ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ˜แƒฌแƒงแƒแƒก แƒกแƒแƒ“แƒฆแƒแƒช แƒแƒฅ แƒ“แƒ แƒแƒฎแƒšแƒ.

แƒ’แƒแƒ“แƒแƒ“แƒ˜แƒ— แƒแƒ–แƒ แƒแƒ›แƒ“แƒ”. แƒกแƒ˜แƒœแƒขแƒแƒฅแƒกแƒฃแƒ  แƒกแƒแƒคแƒฃแƒซแƒ•แƒšแƒแƒ“ แƒแƒ•แƒ˜แƒฆแƒ” TOML แƒแƒ› แƒ›แƒแƒฅแƒแƒšแƒแƒฅแƒ˜แƒกแƒ’แƒแƒœ.

แฒ›แƒ˜แƒก แƒ’แƒแƒ›แƒ (TOML) แƒ”แƒ แƒ—แƒ˜ แƒ›แƒฎแƒ แƒ˜แƒ•, แƒแƒ“แƒแƒ›แƒ˜แƒแƒœแƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒ แƒ”แƒ“แƒแƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒแƒ“แƒ˜. แƒ›แƒ”แƒแƒ แƒ”แƒก แƒ›แƒฎแƒ แƒ˜แƒ•, แƒ˜แƒก แƒ˜แƒ—แƒแƒ แƒ’แƒ›แƒœแƒ”แƒ‘แƒ 1:1 แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒฃแƒคแƒ แƒ แƒ’แƒแƒ•แƒ แƒชแƒ”แƒšแƒ”แƒ‘แƒฃแƒš แƒกแƒ˜แƒœแƒขแƒแƒฅแƒกแƒแƒ“: XML, JSON, YAML.
แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒ˜แƒช, แƒ˜แƒ›แƒžแƒšแƒ”แƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒ” แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ” โ€žgithub.com/BurntSushi/tomlโ€œ-แƒ“แƒแƒœ, แƒ—แƒฃแƒ›แƒชแƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒแƒ“แƒฃแƒ แƒ˜ (แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• 1.4 แƒกแƒ˜แƒœแƒขแƒแƒฅแƒกแƒ˜), แƒกแƒ˜แƒœแƒขแƒแƒฅแƒกแƒฃแƒ แƒแƒ“ แƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒแƒ“แƒ˜แƒ แƒ˜แƒ›แƒแƒ•แƒ” (โ€žแƒฉแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜โ€œ) JSON-แƒ—แƒแƒœ.

แƒแƒœแƒฃ, แƒ—แƒฃ แƒ’แƒกแƒฃแƒ แƒ—, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ—แƒฅแƒ•แƒแƒ— "แƒ’แƒแƒ˜แƒแƒ แƒ” แƒขแƒงแƒ”แƒจแƒ˜ แƒจแƒ”แƒœแƒ˜ TOML-แƒ˜แƒ—, แƒ›แƒ” แƒ›แƒ˜แƒœแƒ“แƒ XXX" แƒ“แƒ "แƒ“แƒแƒแƒ™แƒ แƒ" แƒ™แƒแƒ“แƒ˜ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ—แƒ˜ แƒฎแƒแƒ–แƒ˜แƒ—.

แƒแƒ›แƒ แƒ˜แƒ’แƒแƒ“, แƒ—แƒฃ แƒ’แƒกแƒฃแƒ แƒ— แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒคแƒแƒœแƒฏแƒแƒ แƒ xswitcher-แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก (แฒ“แƒแƒ แƒฌแƒ›แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒ  แƒ•แƒแƒ ) แƒแƒ แƒแƒœแƒแƒ˜แƒ แƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ›แƒแƒกแƒแƒšแƒแƒ“แƒœแƒ”แƒšแƒ˜ "แƒ—แƒฅแƒ•แƒ”แƒœแƒก แƒแƒ› แƒฌแƒงแƒ”แƒฃแƒš แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒแƒกแƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒ—".

แƒงแƒ•แƒ”แƒšแƒ แƒ“แƒแƒœแƒแƒ แƒฉแƒ”แƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒกแƒ˜แƒœแƒขแƒแƒฅแƒกแƒ˜ แƒ”แƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒ "แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜ = แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ" (แƒ“แƒ แƒคแƒแƒฅแƒขแƒ˜แƒฃแƒ แƒแƒ“ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒฃแƒคแƒ แƒ แƒ แƒ—แƒฃแƒšแƒ˜ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ = [แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜, แƒ”แƒก, แƒ›แƒแƒกแƒ˜แƒ•แƒ˜]) แƒ›แƒ’แƒแƒœแƒ˜
แƒ˜แƒœแƒขแƒฃแƒ˜แƒชแƒ˜แƒฃแƒ แƒแƒ“ แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜.
แƒ แƒ แƒแƒ แƒ˜แƒก แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ "แƒ“แƒแƒ›แƒฌแƒ•แƒแƒ แƒ˜" แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— แƒแƒ›แƒแƒ•แƒ” แƒ“แƒ แƒแƒก (แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— 2013 แƒฌแƒ”แƒšแƒก). แƒ›แƒฎแƒแƒšแƒแƒ“, แƒฉแƒ”แƒ›แƒ’แƒแƒœ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ˜แƒ—, TOML-แƒ˜แƒก แƒแƒ•แƒขแƒแƒ แƒ˜ แƒกแƒแƒ—แƒแƒœแƒแƒ“แƒ แƒ›แƒแƒกแƒจแƒขแƒแƒ‘แƒ˜แƒ— แƒจแƒ”แƒ•แƒ˜แƒ“แƒ.

แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒแƒฎแƒšแƒ แƒฉแƒ”แƒ›แƒ—แƒ•แƒ˜แƒก แƒฃแƒคแƒ แƒ แƒแƒ“แƒ•แƒ˜แƒšแƒ˜แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒ แƒ”แƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒ, แƒ แƒแƒ—แƒ แƒ›แƒแƒ”แƒ แƒ’แƒแƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ  แƒ—แƒแƒ•แƒก แƒ“แƒ แƒแƒ แƒ แƒžแƒ˜แƒ แƒ˜แƒฅแƒ˜แƒ—.

แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— TOML-แƒก (แƒซแƒแƒšแƒ˜แƒแƒœ แƒฐแƒ’แƒแƒ•แƒก แƒซแƒ•แƒ”แƒš Windows INI-แƒก). แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒจแƒ˜แƒช แƒแƒฆแƒ•แƒฌแƒ”แƒ แƒ—, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ•แƒแƒ›แƒแƒ’แƒ แƒแƒ— แƒ™แƒแƒ™แƒ•แƒ”แƒ‘แƒ˜แƒก แƒกแƒ”แƒ แƒ˜แƒ แƒ™แƒšแƒแƒ•แƒ˜แƒแƒขแƒฃแƒ แƒ˜แƒ“แƒแƒœ แƒฃแƒแƒฎแƒšแƒ”แƒกแƒ˜ แƒกแƒ™แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ™แƒ แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ›แƒแƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ”. แƒฅแƒ•แƒ”แƒ›แƒแƒ—, แƒชแƒแƒš-แƒชแƒแƒšแƒ™แƒ”, แƒแƒ แƒ˜แƒก แƒ˜แƒก, แƒ แƒแƒช แƒแƒฅแƒแƒ›แƒ“แƒ” แƒ›แƒแƒฎแƒ“แƒ. แƒ“แƒ แƒแƒฎแƒกแƒœแƒ, แƒ—แƒฃ แƒ แƒแƒขแƒแƒ› แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒแƒกแƒ”.

0. แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒแƒ‘แƒกแƒขแƒ แƒแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜

  • แƒ™แƒแƒ“แƒ˜แƒก แƒแƒฆแƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒกแƒ™แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ. แƒ แƒแƒฆแƒแƒช แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒšแƒแƒ“ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ”แƒก แƒแƒ› แƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ“แƒ’แƒแƒœ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒชแƒ˜แƒคแƒ แƒฃแƒšแƒ˜ แƒ™แƒแƒ“แƒ”แƒ‘แƒ˜ แƒแƒ‘แƒกแƒแƒšแƒฃแƒขแƒฃแƒ แƒแƒ“ แƒแƒ  แƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ”แƒ‘แƒ แƒแƒ“แƒแƒ›แƒ˜แƒแƒœแƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  (แƒ”แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒ” แƒ•แƒแƒ  แƒšแƒแƒšแƒแƒกแƒ•แƒ˜แƒฉแƒ”แƒ แƒ˜).
    โ€žแƒ’แƒแƒšแƒแƒœแƒ’-แƒ”แƒ•แƒ“แƒ”แƒ•แƒ˜แƒ“แƒแƒœโ€œ แƒ’แƒแƒ›แƒแƒ•แƒซแƒ•แƒ”แƒ แƒ˜ โ€ž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 แƒ™แƒแƒ“แƒจแƒ˜).
แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— แƒ›แƒ” แƒแƒฆแƒ•แƒฌแƒ”แƒ แƒ” แƒ›แƒแƒกแƒ˜แƒ•แƒ˜แƒก แƒจแƒ”แƒ•แƒกแƒ”แƒ‘แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ‘แƒ›แƒฃแƒšแƒ”แƒ‘แƒ˜แƒ— โ€žแƒ แƒ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒโ€œ. แƒ’แƒแƒšแƒแƒœแƒ’แƒจแƒ˜ แƒ”แƒก แƒแƒ แƒ˜แƒก (แƒฃแƒชแƒ”แƒ‘) แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ“แƒ แƒแƒจแƒ™แƒแƒ แƒ.

  • แƒแƒ› แƒแƒ“แƒ’แƒ˜แƒšแƒแƒก โ€žDropโ€œ-แƒ˜แƒก แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ›แƒแƒ›แƒ“แƒ” แƒจแƒ”แƒ›แƒชแƒ˜แƒ แƒ”แƒ‘แƒแƒก แƒ•แƒ’แƒ”แƒ’แƒ›แƒแƒ•. แƒฃแƒคแƒ แƒ แƒ›แƒแƒฅแƒœแƒ˜แƒšแƒ˜ แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒแƒ“ (แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ’แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ—).

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)" ]

แƒ™แƒแƒ™แƒ•แƒ”แƒ‘แƒ˜ แƒ˜แƒงแƒแƒคแƒ แƒแƒ  แƒขแƒ˜แƒžแƒแƒ“. แƒฉแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜, โ€žแƒกแƒแƒšแƒแƒžแƒแƒ แƒแƒ™แƒโ€œ แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜แƒ— (NewWord, NewSentence, Compose) แƒ“แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒแƒ“แƒ˜.

แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒแƒ“แƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜ แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ "แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ˜แƒ—". แƒ˜แƒ›แƒ˜แƒขแƒแƒ› แƒ แƒแƒ› TOML v1.4, แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜ แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ— แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ‘แƒ แƒญแƒงแƒแƒšแƒ”แƒ‘แƒจแƒ˜.

แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒแƒ›แƒแƒ•แƒ” แƒกแƒแƒฎแƒ”แƒšแƒฌแƒแƒ“แƒ”แƒ‘แƒ˜แƒ—.

แƒ˜แƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒฎแƒแƒšแƒฎแƒ˜แƒก แƒ’แƒแƒœแƒ”แƒ‘แƒ "แƒจแƒ˜แƒจแƒ•แƒ”แƒšแƒ˜" แƒ แƒ”แƒ’แƒฃแƒšแƒแƒ แƒ”แƒ‘แƒ˜แƒ— (แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ, แƒ›แƒแƒ—แƒ˜ แƒฌแƒ”แƒ แƒ”แƒœแƒจแƒ”แƒกแƒแƒซแƒšแƒแƒ แƒแƒ—แƒ˜แƒ“แƒแƒœ แƒ”แƒ แƒ—แƒ˜ แƒžแƒ แƒแƒคแƒ”แƒกแƒ˜แƒแƒœแƒแƒšแƒ”แƒ‘แƒ˜), แƒ›แƒ” แƒ“แƒแƒฃแƒงแƒแƒ•แƒœแƒ”แƒ‘แƒšแƒ˜แƒ• แƒ•แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘ แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ— แƒกแƒ˜แƒœแƒขแƒแƒฅแƒกแƒก.

  • "OFF:" (แƒแƒœ "ON:") แƒกแƒแƒœแƒแƒ› regexp (แƒ แƒ”แƒ’แƒฃแƒšแƒแƒ แƒฃแƒšแƒ˜ แƒ’แƒแƒ›แƒแƒฎแƒแƒขแƒฃแƒšแƒ”แƒ‘แƒ) แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒฆแƒ˜แƒšแƒแƒ™แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ—แƒแƒ•แƒ˜แƒกแƒฃแƒคแƒšแƒ”แƒ‘แƒแƒก (แƒแƒœ แƒ“แƒแƒญแƒ”แƒ แƒแƒก).
    แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ›แƒ” แƒ•แƒแƒžแƒ˜แƒ แƒ”แƒ‘ "แƒฃแƒกแƒแƒ›แƒแƒ แƒ—แƒšแƒ" แƒ แƒ”แƒ’แƒฃแƒšแƒแƒ แƒฃแƒš แƒ’แƒแƒ›แƒแƒ—แƒฅแƒ›แƒแƒก. แƒ›แƒ˜แƒšแƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒชแƒแƒšแƒ™แƒ” แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒ— "|". แƒ˜แƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒจแƒ”แƒ›แƒชแƒ˜แƒ แƒ“แƒ”แƒก แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ "[LR]_SHIFT" (แƒกแƒแƒ“แƒแƒช แƒ”แƒก แƒแƒจแƒ™แƒแƒ แƒแƒ“ แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ).
  • "SEQ:" แƒ—แƒฃ แƒฌแƒ˜แƒœแƒ แƒžแƒ˜แƒ แƒแƒ‘แƒ แƒ“แƒแƒ™แƒ›แƒแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ (แƒแƒœ แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก), แƒ›แƒแƒจแƒ˜แƒœ แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ— "แƒœแƒแƒ แƒ›แƒแƒšแƒฃแƒ แƒ˜" แƒ แƒ”แƒ’แƒฃแƒšแƒแƒ แƒฃแƒš แƒ’แƒแƒ›แƒแƒœแƒแƒ—แƒฅแƒ•แƒแƒ›แƒก. แƒ“แƒ”แƒขแƒแƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ›แƒ” แƒ“แƒแƒฃแƒงแƒแƒ•แƒœแƒ”แƒ‘แƒšแƒ˜แƒ• แƒ•แƒฃแƒ’แƒ–แƒแƒ•แƒœแƒ˜ ^W-แƒก "regexp" แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒแƒก. แƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒ, แƒ แƒแƒ› แƒ›แƒ” แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒแƒ  แƒจแƒ”แƒ•แƒฌแƒฃแƒฎแƒ“แƒ˜ แƒฉแƒ”แƒ›แƒก แƒกแƒแƒงแƒ•แƒแƒ แƒ”แƒš pcre-แƒกแƒ—แƒแƒœ ("perl แƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒแƒ“แƒ˜") แƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒแƒ“แƒแƒ‘แƒ˜แƒก แƒฎแƒแƒ แƒ˜แƒกแƒฎแƒ˜แƒก แƒ’แƒแƒกแƒแƒ แƒ™แƒ•แƒ”แƒ•แƒแƒ“.
  • แƒ’แƒแƒ›แƒแƒ—แƒฅแƒ›แƒ แƒ˜แƒฌแƒ”แƒ แƒ”แƒ‘แƒ แƒคแƒแƒ แƒ›แƒแƒจแƒ˜ "BUTTON_1: CODE1, BUTTON_2: CODE2" แƒ“แƒ แƒ.แƒจ., แƒกแƒ™แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ˜แƒก แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ˜แƒ—.
  • แƒฉแƒ”แƒ™แƒ˜ แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก "แƒ›แƒ˜แƒฌแƒ”แƒ‘แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ" แƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ˜แƒก แƒ‘แƒแƒšแƒแƒ›แƒ“แƒ”, แƒแƒกแƒ” แƒ แƒแƒ› แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒ™แƒฃแƒ“แƒจแƒ˜ "$"-แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ.
  • แƒงแƒ•แƒ”แƒšแƒ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒ”แƒ แƒ— แƒฎแƒแƒ–แƒ–แƒ” แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒ”แƒ แƒ—แƒ›แƒแƒœแƒ”แƒ—แƒ˜แƒก แƒ›แƒ˜แƒงแƒแƒšแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ แƒ’แƒแƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ "แƒ›แƒ”"-แƒ˜แƒ—. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒแƒ“แƒ’แƒแƒœ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜แƒ แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒแƒกแƒ˜แƒ•แƒ˜, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— แƒแƒšแƒขแƒ”แƒ แƒœแƒแƒขแƒ˜แƒฃแƒšแƒ˜ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒ›แƒซแƒ˜แƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’. แƒ—แƒฃ แƒ”แƒก แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒ แƒแƒ˜แƒ›แƒ” แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜แƒ—.
  • แƒฆแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ "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.

แƒแƒฅ แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜แƒ "แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ = [แƒ›แƒแƒกแƒ˜แƒ•แƒ˜]". แƒฌแƒ˜แƒœแƒ แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒกแƒ’แƒแƒ•แƒกแƒแƒ“, แƒแƒ แƒ˜แƒก แƒฉแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒฃแƒšแƒ˜ แƒœแƒแƒ™แƒ แƒ”แƒ‘แƒ˜. แƒ“แƒ แƒ“แƒแƒ™แƒ˜แƒœแƒ’แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒจแƒ˜ แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒฃแƒšแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก (แƒ“แƒแƒฌแƒ”แƒ แƒ”แƒ— โ€žAction.XXXโ€œ แƒ“แƒ แƒแƒ  แƒ“แƒแƒ˜แƒ–แƒแƒ แƒแƒ—, แƒ แƒแƒ› แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— แƒกแƒฎแƒ•แƒ แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ).
แƒ™แƒ”แƒ แƒซแƒแƒ“, แƒจแƒ”แƒกแƒฌแƒแƒ แƒ”แƒ‘แƒฃแƒš แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒแƒจแƒ˜ แƒกแƒ˜แƒขแƒงแƒ•แƒ˜แƒก แƒฎแƒ”แƒšแƒแƒฎแƒแƒšแƒ˜ แƒแƒ™แƒ แƒ”แƒคแƒ แƒแƒ  แƒœแƒแƒฌแƒ˜แƒšแƒแƒ“ แƒ˜แƒงแƒแƒคแƒ: "แƒจแƒ”แƒชแƒ•แƒแƒšแƒ”แƒ— แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ˜แƒฅ" ะธ "แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒแƒ™แƒ แƒ”แƒคแƒ" ("RetypeWord").

แƒ“แƒแƒ แƒฉแƒ”แƒœแƒ˜แƒšแƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ แƒ˜แƒฌแƒ”แƒ แƒ”แƒ‘แƒ "แƒšแƒ”แƒฅแƒกแƒ˜แƒ™แƒแƒœแƒจแƒ˜" ("แƒ แƒฃแƒ™แƒ" แƒ’แƒแƒšแƒแƒœแƒ’แƒ–แƒ”) แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ›แƒแƒ—แƒ˜ แƒกแƒ˜แƒ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ˜แƒ›แƒแƒ–แƒ”, แƒ—แƒฃ แƒ แƒ แƒฌแƒ”แƒ แƒ˜แƒ โ€žแƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒแƒจแƒ˜โ€œ.

แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ˜แƒงแƒแƒก แƒ”แƒ แƒ— แƒ’แƒ แƒแƒ•แƒแƒจแƒ˜ (แƒกแƒ”แƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜). แƒแƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒจแƒแƒšแƒแƒ— แƒ˜แƒ’แƒ˜. แƒ แƒแƒ’แƒแƒ แƒช แƒ–แƒ”แƒ›แƒแƒ— แƒ•แƒแƒฉแƒ•แƒ”แƒœแƒ”.

แƒ›แƒ” แƒ›แƒแƒจแƒ˜แƒœแƒ•แƒ” แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒ” "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

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ