แ แแแแ แช
แ แแขแแแฆแแช แแแแแแแก, แ แแ แแแ แแแแฃแ แแ แแแ แแแแกแขแแแก แฌแแ แแแฃแแแแแแแ แแแกแแฌแงแแแแ แงแแแแ แแ แแแแขแ แแแแก แแแงแแแแแ.
แฃแกแแคแฃแซแแแ แ แแ แแ แแงแแก, แจแแแแแ แแ แแก แแแแแแแแ แแแแกแ, แ แแกแแแ แแแฅแแก แกแแฅแแ.
แแแแแแแแแแจแ แจแแกแแแแจแแแแแ แฉแแคแแฅแ แแแฃแแ (แแ แแแ แแแ แแแแฎแแ แชแแแแแแฃแแ) 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-แแก แแแแคแแแฃแ แแชแแแกแแแแก (แฒแแ แฌแแฃแแแแฃแแ แแ แแแ ) แแ แแแแแ แ แแ แแแแแแ แแ แแ แแก แแแกแแแแแแแแ "แแฅแแแแก แแ แฌแงแแฃแ แแแแคแแแฃแ แแชแแแกแแแ แแแแแแจแแ แแแแ".
แงแแแแ แแแแแ แฉแแแแกแแแแก, แกแแแขแแฅแกแ แแคแฃแซแแแแ "แแแกแแฆแแแ = แแแแจแแแแแแแ" (แแ แคแแฅแขแแฃแ แแ แ แแแแแแแแ แฃแคแ แ แ แแฃแแ แแแ แแแแขแ, แ แแแแ แแชแแ = [แแแแแแ แแ, แแก, แแแกแแแ]) แแแแแ
แแแขแฃแแชแแฃแ แแ แแแกแแฎแแ แฎแแแแแ.
แ แ แแ แแก แกแแแแขแแ แแกแ
แแแแขแแ, แแฎแแ แฉแแแแแแก แฃแคแ แ แแแแแแแ แแแกแ แแแแฎแแ แชแแแแแแแก แแแ แแฅแขแแ แแแ, แ แแแ แแแแ แแแก แกแแแฃแแแ แแแแก แแ แแ แ แแแ แแฅแแ.
แแแแแแแ, แฉแแแ แแแฆแแแ 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