āĻ¯ā§āĻšā§āĻ¤ā§
āĻāĻāĻ°āĻāĻŽ āĻĻā§āĻāĻž āĻ¯āĻžāĻā§āĻā§ āĻ¯ā§ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻžāĻ°āĻ°āĻž āĻāĻ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖāĻā§āĻ˛āĻŋ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻž āĻ
āĻŦāĻŋāĻļā§āĻŦāĻžāĻ¸ā§āĻ¯āĻāĻžāĻŦā§ āĻŦāĻŋāĻ°āĻā§āĻ¤āĻŋāĻāĻ° āĻŦāĻ˛ā§ āĻŽāĻ¨ā§ āĻāĻ°ā§āĨ¤
āĻāĻŋāĻ¤ā§āĻ¤āĻŋāĻšā§āĻ¨ āĻ¨āĻž āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŋāĻ¤āĻ°ā§ āĻāĻŽāĻŋ āĻā§ āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻžāĻ āĻāĻ°āĻāĻŋ āĻ¤āĻžāĻ° āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖāĨ¤
āĻ¸āĻžāĻŽāĻā§āĻ°āĻŋāĻāĻāĻžāĻŦā§ āĻāĻŽā§āĻāĻžāĻ°āĻāĻžāĻŦā§ āĻāĻ˛ā§āĻĒāĻ¨āĻž āĻāĻ°āĻž (āĻāĻŦāĻ āĻāĻžāĻ˛āĻāĻžāĻŦā§ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻŋāĻ¤) āĻ
ā§āĻ¯āĻžāĻĒāĻžāĻāĻŋ āĻāĻžāĻĢāĻāĻž āĻāĻŦāĻ āĻā§āĻāĻŋāĻĒāĻžāĻ°āĨ¤
- āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨? āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻž āĻŦāĻŋāĻ°āĻā§āĻ¤āĻŋāĻāĻ°! āĻŦā§āĻŦāĻž 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" āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋāĻ¤ā§ āĻĒāĻžāĻ āĻžāĻāĨ¤ āĻāĻžāĻ°āĻŖ āĻāĻŽāĻŋ āĻāĻāĻ¨āĻ āĻāĻŽāĻžāĻ° āĻĒā§āĻ°āĻŋāĻ¯āĻŧ āĻĒāĻŋāĻ¸āĻŋāĻāĻ° ("āĻĒāĻžāĻ°ā§āĻ˛ āĻ¸āĻžāĻŽāĻā§āĻāĻ¸ā§āĻ¯āĻĒā§āĻ°ā§āĻŖ") āĻāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻžāĻŽāĻā§āĻāĻ¸ā§āĻ¯ā§āĻ° āĻĄāĻŋāĻā§āĻ°āĻŋ āĻā§āĻāĻā§ āĻŦā§āĻ° āĻāĻ°āĻ¤ā§ āĻŦāĻŋāĻ°āĻā§āĻ¤ āĻāĻ°āĻŋāĻ¨āĻŋāĨ¤
- āĻ āĻāĻŋāĻŦā§āĻ¯āĻā§āĻ¤āĻŋ āĻāĻāĻžāĻ°ā§ āĻ˛ā§āĻāĻž āĻšāĻ¯āĻŧ "BUTTON_1: CODE1, BUTTON_2: CODE2" āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋ, āĻ¯ā§ āĻā§āĻ°āĻŽā§ āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ āĻā§āĻĄāĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻšāĻ¯āĻŧāĨ¤
- āĻā§āĻ āĻ¸āĻŦāĻ¸āĻŽāĻ¯āĻŧ āĻā§āĻ°āĻŽ āĻļā§āĻˇ "snugged" āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻ āĻ˛ā§āĻā§ â$â āĻ¯ā§āĻ āĻāĻ°āĻžāĻ° āĻĻāĻ°āĻāĻžāĻ° āĻ¨ā§āĻāĨ¤
- āĻāĻ āĻ˛āĻžāĻāĻ¨ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻā§āĻ āĻāĻā§āĻ° āĻĒāĻ° āĻāĻ āĻ¸āĻā§āĻāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧ āĻāĻŦāĻ "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.
āĻāĻāĻžāĻ¨ā§ āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻāĻŋāĻ¨āĻŋāĻ¸ "āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž = [āĻ
ā§āĻ¯āĻžāĻ°ā§]". āĻĒā§āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§ āĻŦāĻŋāĻāĻžāĻā§āĻ° āĻ
āĻ¨ā§āĻ°ā§āĻĒ, āĻŦāĻŋāĻ˛ā§āĻ-āĻāĻ¨ āĻāĻ°ā§āĻŽā§āĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻŽāĻŋāĻ¤ āĻ¸ā§āĻ āĻāĻā§āĨ¤ āĻāĻŦāĻ āĻĄāĻāĻŋāĻāĻ¯āĻŧā§āĻ° āĻ¸āĻŽā§āĻāĻžāĻŦāĻ¨āĻž āĻ¨ā§āĻ¤āĻŋāĻāĻ¤āĻāĻžāĻŦā§ āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§ āĻ¨āĻ¯āĻŧ ("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