рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реАрдЦреЗрдВ, Quadronix рд▓рд┐рдЦреЗрдВ

рд╣рдмреЗрд░реЗ рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧреЗрдо рдСрди рдмреИрд╢ рдХреЗ рдХрдИ рд▓реЗрдЦ рд╣реИрдВ, рдпреЗ рд╣реИрдВ рд╢рддрд░рдВрдЬ , рдЬрд╝реЛрдирд┐рдХреНрд╕ , рд╕реЛрдХреЛрдмрди , рд╕реА рдмреИрдЯрд▓ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЫрджреНрдо 3 рдбреА рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╡рд╛рд▓реЗ рд╢реВрдЯрд░ рднреАред рд▓реЗрдХрд┐рди рдЗрди рд╕рднреА рдЦреЗрд▓реЛрдВ рдореЗрдВ, рдирд┐рдпрдВрддреНрд░рдг рдХреАрдмреЛрд░реНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИред рд╣рдо рдЖрдЧреЗ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдмреИрд╢ рдкрд░ рдПрдХ рдЧреЗрдо рд▓рд┐рдЦреЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рдорд╛рдЙрд╕ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рд╕рд╛рде рд╣реА, рд╣рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗ рдХрд┐ рдЦреЗрд▓ рдХреЛ рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рдкреНрд░рддрд┐рд░реЛрдз рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдкреНрд░рддрд┐рд░реЛрдзреА рдмрдирд╛рдпрд╛ рдЬрд╛рдПред рддреЛ, рдЪрд▓реЛ рдПрдХ Quadronix рдЦреЗрд▓ рд▓рд┐рдЦрддреЗ рд╣реИрдВред





рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рдХреНрд╡рд╛рдбреНрд░реЛрдирд┐рдХреНрд╕ рдЧреЗрдо рджреЗрдЦрд╛ рдерд╛ рдЬреЛ рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдлреЛрди рдкрд░ рдореЗрд░реЗ рднрд╛рдИ рдХреЗ рд╕рд╛рде рдерд╛, рдФрд░ рдореИрдВрдиреЗ рддреБрд░рдВрдд рдЗрд╕реЗ рдЦреЗрд▓рдирд╛ рдкрд╕рдВрдж рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рдореЗрд░реЗ рднрд╛рдИ рдиреЗ рд▓рдЧрднрдЧ рдЕрдкрдирд╛ рдлреЛрди рдореБрдЭреЗ рдирд╣реАрдВ рджрд┐рдпрд╛, рдореИрдВрдиреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╣рд┐рдЪрдХрд┐рдЪрд╛рд╣рдЯ рдХреЗ, рдЬрд╛рд╡рд╛ рдПрдкрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЦреЗрд▓ рдХреЗ рдХреНрд▓реЛрди рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдХрд┐рдпрд╛, рдЬрдмрдХрд┐ рдореИрдВ рд╕рд┐рд░реНрдл рдЬрд╛рд╡рд╛ рд╕реАрдЦ рд░рд╣рд╛ рдерд╛ред

рдФрд░ рдЕрдм, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдФрд░ 3 рдбреА рдЧреЗрдо рдХреЗ рдЗрдореНрдпреВрд▓реЗрдЯрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреИрд╢ рдкрд░ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдмреИрд╢ рдкрд░ рдПрдХреНрд╕реЛрдирд┐рдХреНрд╕ рдХрд╛ рдореЗрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд┐рдЫрд▓реА рд╢рддрд╛рдмреНрджреА рд╣реИ, рдФрд░ рдореБрдЭреЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдмреИрд╢ рдкрд░ рдХреНрд╡рд╛рдбреНрд░реЛрдирд┐рдХреНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рджрд┐рдорд╛рдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд░реНрдХрдЖрдЙрдЯ рд╣реЛрдЧрд╛ред

рдЦреЗрд▓ рдХреЗ рдирд┐рдпрдо рд╕рд░рд▓ рд╣реИрдВред рдЖрдкрдХреЛ рдЖрдпрддреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рднреА рдЪрд╛рд░ рдХреЛрдиреЗ рдПрдХ рд╣реА рд░рдВрдЧ рдХреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреА рдЖрдпрдд рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рддрд┐рд░рдЫреЗ рд╡рд┐рдкрд░реАрдд рддрд┐рд░рдЫреЗ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдпрдд рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдЕрдВрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЙрд╕рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдЖрдиреБрдкрд╛рддрд┐рдХ рд╣реИред рдФрд░ рдирд╖реНрдЯ рдХрд┐рдП рдЧрдП рдЖрдпрдд рдХреЗ рд╕реНрдерд╛рди рдкрд░, рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░рдВрдЧ рдХреЗ рдирдП рд╡рд░реНрдЧ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред рдЦреЗрд▓ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдЦреЗрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдерд╛, рдЕрдзрд┐рдХ рдЕрдВрдХ, рддреЗрдЬреА рд╕реЗ рд╕рдордп рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдХрд┐рд╕реА рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдПрдХ рдЖрдпрдд рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдЧрд▓рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╢реЗрд╖ рд╕рдордп рдореЗрдВ рд╕реЗ рдПрдХ рджрдВрдб рдХрд╛рдЯ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рд╢реАрд░реНрд╖ рдХреЛ рдЕрдЪрдпрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕ рдкрд░ рдлрд┐рд░ рд╕реЗ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдорд╛рдЙрд╕ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЦреЗрд▓ рдЦреЗрд▓рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИред рдЦреИрд░, рд╣рдореЗрдВ рдорд╛рдЙрд╕ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реИред рд╣рдо man console_codes рджреЗрддреЗ man console_codes рдФрд░ рд╡рд╣рд╛рдВ рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдкрд▓рд╛рдпрди рдХреНрд░рдо ESC [ ? 9 h ESC [ ? 9 h рдорд╛рдЙрд╕ рдЯреНрд░реИрдХрд┐рдВрдЧ рдореЛрдб рд╕рдХреНрд╖рдо рдХрд░реЗрдВ,
рдФрд░ рднрд╛рдЧрдиреЗ рдХрд╛ рдХреНрд░рдо ESC [ ? 9 l ESC [ ? 9 l рдЗрд╕ рдореЛрдб рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред
рдЬрдм рдЯреНрд░реИрдХрд┐рдВрдЧ рдореЛрдб рдЪрд╛рд▓реВ рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рдорд╛рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ, рддреЛ рдорд╛рдЙрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рдпрдВрддреНрд░рдг рдЕрдиреБрдХреНрд░рдо рдХрдВрд╕реЛрд▓ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдкрд░ рд▓рд┐рдЦреЗ рдЬрд╛рдПрдВрдЧреЗред рдЙрдирдХреЗ рдкрд╛рд╕ ESC [ M bxy рдкреНрд░рд╛рд░реВрдк ESC [ M bxy , рдЬрд╣рд╛рдБ b рдореЗрдВ рджрдмрд╛рдпрд╛ рдЧрдпрд╛ рдмрдЯрди рдФрд░ рд╕рдВрд╢реЛрдзрдХ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рдФрд░ x рдФрд░ y ESC [ M bxy рдорд╛рдЙрд╕ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рдмрд╛рд░реЗ ESC [ M bxy рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдкреНрд░рддреАрдХ b рд╣рдорд╛рд░реЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИред рдФрд░ рдорд╛рдЙрд╕ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ x рдФрд░ y рджреЛрдиреЛрдВ рд╕реЗ 32 рдХреЛ рдШрдЯрд╛рдирд╛ рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди рдмреИрд╢ рдкрд░ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдХрд╛рдо рдЪрд░рд┐рддреНрд░ рдХреЛрдб рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕рдмрд╕реЗ рд╕рд░рд▓, рдХрдорд╛рдВрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛрдЧрд╛, рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
 LC_ALL=C printf -v code '%d' "'$data" 

рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдбреЙрд▓рд░ рдХреЗ рд╕рдВрдХреЗрдд рд╕реЗ рдкрд╣рд▓реЗ рдПрдХрд▓ рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдЕрдЧрд▓реЗ рдЪрд░рд┐рддреНрд░ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХреЛрдбред рдФрд░ LC_ALL=C рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ 127 рд╕реЗ рдЕрдзрд┐рдХ рдХреЛрдб рд╡рд╛рд▓реЗ рдЪрд░рд┐рддреНрд░ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╕реНрд╡рдпрдВ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рди рдХрд┐ рдПрдХ рдорд▓реНрдЯреАрдмрд╛рдЗрдЯ рдЪрд░рд┐рддреНрд░ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВред

рддреЛ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреЗрдВрдЧреЗред
 #!/bin/bash declare -i mouseX declare -i mouseY declare -i mouseButton declare -r ESC_CODE=$'\e' declare -r EXIT_CODE='x' printMouseInfo() { echo button=$mouseButton column=$mouseX row=$mouseY } readMouse() { local mouseButtonData local mouseXData local mouseYData read -r -s -n 1 -t 1 mouseButtonData read -r -s -n 1 -t 1 mouseXData read -r -s -n 1 -t 1 mouseYData local -i mouseButtonCode local -i mouseXCode local -i mouseYCode LC_ALL=C printf -v mouseButtonCode '%d' "'$mouseButtonData" LC_ALL=C printf -v mouseXCode '%d' "'$mouseXData" LC_ALL=C printf -v mouseYCode '%d' "'$mouseYData" ((mouseButton = mouseButtonCode)) ((mouseX = mouseXCode - 32)) ((mouseY = mouseYCode - 32)) } declare key echo -ne "\e[?9h" while true; do key="" read -r -s -t 1 -n 1 key case "$key" in $EXIT_CODE) break;; $ESC_CODE) read -r -s -t 1 -n 1 key if [[ "$key" == '[' ]]; then read -r -s -t 1 -n 1 key if [[ "$key" == "M" ]]; then readMouse printMouseInfo fi fi;; esac done echo -ne "\e[?9l" 


рдпрд╣ рдХрд╣рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
 $ ./mouse.sh button=0 column=46 row=17 button=0 column=61 row=19 button=0 column=64 row=15 button=0 column=59 row=11 button=0 column=43 row=9 button=0 column=36 row=10 button=0 column=42 row=17 button=0 column=63 row=23 button=0 column=75 row=22 button=0 column=91 row=19 $ 

рдпрджрд┐ рдЖрдк рдмрдЪ рдХреНрд░рдо ESC [ ? 1000 h рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ESC [ ? 1000 h ESC [ ? 1000 h , рдЖрдк рдорд╛рдЙрд╕ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдФрд░ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдм, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХрдо рдирд╛рдЬреБрдХ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рдЕрдЧрд░ рдЖрдк Ctrl + C рджрдмрд╛рддреЗ рд╣реИрдВ рддреЛ рдкрд╣рд▓реА рдЪреАрдЬ рдЬрд┐рд╕реЗ рдЖрдк reset рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕реЗ reset рдХрдорд╛рдВрдб рдХрд╣реЗрдВред рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЧреЗрдо рдореЗрдВ рд░рдВрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреЛ рджрдмрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд╛рдзрд┐рдд рд╣реЛрддреА рд╣реИ, рддреЛ рдЬрдм рддрдХ рдЖрдк рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд░ reset рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рддрдХ рдЯрд░реНрдорд┐рдирд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реЛрдЧрд╛ред

рдХрд┐рд╕реА рднреА рд╕рдВрдХреЗрдд рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, trap рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 trap   

trap -l рдЯрд╛рдЗрдк рдХрд░рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рди рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реЗрдЯ рдХреА рдЬрд╛рдПрдЧреАред рдпрджрд┐ рдЖрдк EXIT рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдпрд╣реА рд╡рд╣ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

 function initApplication() { stty -echo echo -ne $HIDE_CURSOR_CODE trap finishApplication EXIT ... } function finishApplication() { trap EXIT reset } initApplication runApplication finishApplication 


рджреВрд╕рд░рд╛ рдорд╛рдорд▓рд╛ рдЬрдм рд╣рдореЗрдВ рд╕рд┐рдЧреНрдирд▓ рд╣реИрдВрдбрд▓рд░ рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИ, рд╡рд┐рдВрдбреЛ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред рдпрджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рд╡рд┐рдВрдбреЛ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдкрддрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рд╕рднреА рд╕реБрдВрджрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреНрд░реЙрд▓ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдЖрдк SIGWINCH рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 function repaint() { LINES=`tput lines` COLUMNS=`tput cols` mapXPosition=$(((COLUMNS - CELL_WIDTH * MAP_WIDTH) / 2 + 1)) mapYPosition=$(((LINES - CELL_HEIGHT * MAP_HEIGHT) / 2 + 1)) timerXPosition=$((MAP_WIDTH * CELL_WIDTH + mapXPosition + 6)) timerYPosition=$((mapYPosition)) echo -ne "\e[0m" clear drawMap drawHeader drawFooter ((isInvalidated = 0)) } function initApplication() { ... trap "((isInvalidated = 1))" SIGWINCH } function runGame() { local key ... while true; do if ((isInvalidated)); then repaint fi ... key="" ... case "$key" in $NEW_GAME_CODE) continue 2;; $EXIT_CODE) break 2;; $ESC_CODE) ... esac ... done } 


рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдпрджрд┐ рдЖрдк DEBUG рдХреЛ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрдорд╛рдВрдб рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдорд╛рдВрдб рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХрднреА-рдХрднреА рдпрд╣ рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред

рдЦреИрд░, рдЕрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ: quadronix.sh ред

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ man bash , man console_codes рдФрд░ рдПрдмреАрдПрд╕ рдХреЛ рдЕрдВрддрд╣реАрди рд░реВрдк рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╣рд░ рдмрд╛рд░ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдирдП рдкрд╣рд▓реБрдУрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрд╢ рдореЗрдВред

Source: https://habr.com/ru/post/In131921/


All Articles