{"id":253981,"date":"2015-03-28T09:31:02","date_gmt":"2015-03-28T05:31:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=253981"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=253981","title":{"rendered":"\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 ROTE \u0438 Lua \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438"},"content":{"rendered":"<p>     \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/e8c\/f27\/5cf\/e8cf275cfd684d0a9f70e50b66fe9eec.png\" alt=\"boxshell\"\/><\/p>\n<p>  <a href=\"http:\/\/rote.sourceforge.net\/\">ROTE<\/a> \u2014 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C, \u0441\u043b\u0443\u0436\u0430\u0449\u0430\u044f \u0434\u043b\u044f \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 <a href=\"https:\/\/en.wikipedia.org\/wiki\/VT100\">\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 VT100<\/a>. \u041e\u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u044f\u0437\u044b\u043a\u0430 C. \u0412 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u00ab\u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c\u00bb \u0432 \u043d\u0435\u043c \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u0440\u0438\u0441\u0443\u0435\u0442 \u043d\u0430 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0432 \u043e\u043a\u043d\u0435 curses.<\/p>\n<p>  \u0417\u0430\u0447\u0435\u043c \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u0441 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c? \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u0440\u0438\u0441\u0443\u044e\u0449\u0438\u0445 \u0447\u0442\u043e-\u0442\u043e \u043d\u0430 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e curses, \u043f\u043e \u043c\u043e\u0435\u043c\u0443 \u043c\u043d\u0435\u043d\u0438\u044e. \u041a\u0430\u043a \u0438\u043d\u0430\u0447\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0436\u0434\u0451\u0442, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u0436\u043c\u0451\u0442 \u043a\u043b\u0430\u0432\u0438\u0448\u0443, \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u044d\u043a\u0440\u0430\u043d\u0430 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 curses?<\/p>\n<p>  \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0432\u0441\u0451 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u043a\u0440\u0430\u0441\u043e\u0442\u0443 ROTE, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u0442\u0435\u0441\u0442\u0430\u0445 \u0431\u044b\u043b\u043e \u0431\u044b \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0432 ROTE \u043a \u044f\u0437\u044b\u043a\u0443 Lua, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043e\u0447\u0435\u043d\u044c \u043b\u044e\u0431\u043b\u044e \u0438 \u0437\u043d\u0430\u044e, <a href=\"http:\/\/olivinelabs.com\/busted\/\">\u043a\u0430\u043a<\/a> \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u044b. \u0422\u0430\u043a \u0438 \u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <a href=\"https:\/\/starius.github.io\/lua-rote\/\">lua-rote<\/a>, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h3>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430<\/h3>\n<p>  \u041f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f Linux, curses, Lua \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0442 5.1 \u0434\u043e 5.3 \u0438\u043b\u0438 LuaJIT, \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 luarocks \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u043c luaposix \u0438, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u0430\u043c\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <a href=\"http:\/\/rote.sourceforge.net\/\">ROTE<\/a>.<\/p>\n<p>  ROTE \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c .\/configure &#038;&#038; make &#038;&#038; make install. \u041d\u0430\u0434\u043e \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0430\u0441\u044c \u0442\u0443\u0434\u0430, \u0433\u0434\u0435 \u0435\u0451 \u0443\u0432\u0438\u0434\u0438\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0431\u043e\u0440\u043a\u0438. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e .\/configure &#8212;prefix=\/usr. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u043c\u0443\u0441\u043e\u0440\u0438\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0431\u0435\u0441\u0445\u043e\u0437\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 <a href=\"https:\/\/wiki.debian.org\/CheckInstall\">checkinstall<\/a>.<\/p>\n<p>  lua-rote \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 luarocks, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0435\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0430\u0431\u0440\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"bash\">$ sudo luarocks install lua-rote <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 ROTE \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 \u0432 \/usr\/local, \u0442\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0430\u0434\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c luarocks&#8217;\u0443 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043e\u043f\u0446\u0438\u0438:<\/p>\n<pre><code class=\"bash\">$ sudo luarocks install lua-rote ROTE_DIR=\/usr\/local <\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e \u0441 GitHub, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\">$ git clone https:\/\/github.com\/starius\/lua-rote.git $ cd lua-rote $ sudo luarocks make <\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b \u0432 luarocks \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e (\u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u0434\u043e\u043c\u0430\u0448\u043d\u044e\u044e \u043f\u0430\u043f\u043a\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0430 \u043d\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043f\u0430\u043f\u043a\u0438), \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043e\u043f\u0446\u0438\u044e &#8212;local. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u0435-\u043a\u0430\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b Lua \u0443\u0432\u0438\u0434\u0435\u043b \u044d\u0442\u0438 \u043f\u0430\u043a\u0435\u0442\u044b:<\/p>\n<pre><code class=\"bash\">$ luarocks make --local $ luarocks path &gt; paths  $ echo 'PATH=$PATH:~\/.luarocks\/bin' &gt;&gt; paths $ . paths <\/code><\/pre>\n<p>  <\/p>\n<h3>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435<\/h3>\n<p>  \u0412\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 lua-rote \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 rote, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0435\u0433\u043e:<\/p>\n<pre><code class=\"lua\">rote = require 'rote' <\/code><\/pre>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u2014 \u043a\u043b\u0430\u0441\u0441 RoteTerm, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b.<br \/>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0438\u0437 24 \u0441\u0442\u0440\u043e\u043a \u0438 80 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432:<\/p>\n<pre><code class=\"lua\">rt = rote.RoteTerm(24, 80) <\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b, \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d \u0436\u0438\u0432\u0451\u0442. \u0412 Lua \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043c\u0443\u0441\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u0441\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044e.<\/p>\n<p>  \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441:<\/p>\n<pre><code class=\"lua\">pid = rt:forkPty('less \/some\/file') <\/code><\/pre>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 &#8216;\/bin\/sh -c&#8217;. \u0412 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e pid \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u041f\u043e\u0437\u0436\u0435 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 childPid(). \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043c\u0435\u0442\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 -1. \u0415\u0441\u043b\u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043b\u043e\u0432\u043b\u0435\u043d\u0430 \u043d\u0430 \u044d\u0442\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435: shell \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0451 \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c 127. \u0427\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u043d\u0430\u0434\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u0438\u0433\u043d\u0430\u043b\u0430 SIGCHLD. \u0427\u0442\u043e\u0431\u044b \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u043d\u0430\u0434\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a SIGCHLD \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 SIG_IGN. \u0412 Lua \u0432\u0441\u0451 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/luaposix.github.io\/luaposix\/modules\/posix.signal.html\">luaposix<\/a>:<\/p>\n<pre><code class=\"lua\">signal = require 'posix.signal'  signal.signal(signal.SIGCHLD, function(signo)   -- do smth end)  signal.signal(signal.SIGCHLD, signal.SIG_IGN) <\/code><\/pre>\n<p>  \u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u043e\u043c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f, \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439, \u0445\u043e\u0442\u044f \u0432\u0440\u044f\u0434 \u043b\u0438 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0441\u0442\u043e\u0438\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u0438\u0442\u044c ROTE \u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0432\u044b\u0437\u0432\u0430\u0432 \u043c\u0435\u0442\u043e\u0434 forsakeChild().<\/p>\n<h4>\u0427\u0442\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430<\/h4>\n<p>  \u0423 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0435\u0441\u0442\u044c \u0440\u044f\u0434 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0445 \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435:<\/p>\n<ul>\n<li>rt:rows() \u0438 rt:cols() \u2014 \u0447\u0438\u0441\u043b\u043e \u0441\u0442\u0440\u043e\u043a \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430<\/li>\n<li>rt:row() \u0438 rt:col() \u2014 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043a\u0443\u0440\u0441\u043e\u0440\u0430<\/li>\n<li>rt:update() \u2014 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0438\u0435 \u043e\u0442 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430; \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u0447\u0442\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430<\/li>\n<li>rt:cellChar(row, col) \u2014 \u0441\u0438\u043c\u0432\u043e\u043b \u044f\u0447\u0435\u0439\u043a\u0438 (row, col) \u0432 \u0444\u043e\u0440\u043c\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043b\u0438\u043d\u044b 1<\/li>\n<li>rt:cellAttr(row, col) \u2014 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u044f\u0447\u0435\u0439\u043a\u0438 (row, col) \u0432 \u0444\u043e\u0440\u043c\u0435 \u0447\u0438\u0441\u043b\u0430 (\u0441\u043c. \u043d\u0438\u0436\u0435, \u0447\u0442\u043e \u0441 \u043d\u0438\u043c \u0434\u0435\u043b\u0430\u0442\u044c)<\/li>\n<li>rt:attr() \u2014 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043a \u043d\u043e\u0432\u044b\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c<\/li>\n<li>rt:rowText(row) \u2014 \u0441\u0442\u0440\u043e\u043a\u0430 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u043d\u043e\u043c\u0435\u0440 row, \u0431\u0435\u0437 &quot;\\n&quot; \u043d\u0430 \u043a\u043e\u043d\u0446\u0435<\/li>\n<li>rt:termText() \u2014 \u0441\u0442\u0440\u043e\u043a\u0430, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u0432\u0435\u0441\u044c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b; \u0440\u044f\u0434\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0442\u0441\u044f &quot;\\n&quot;<\/li>\n<\/ul>\n<p>  \u0415\u0449\u0451 \u0435\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434 draw \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0432 \u043e\u043a\u043d\u0435 curses:<\/p>\n<pre><code class=\"lua\">curses = require 'posix.curses' -- \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f curses, \u0441\u043c. \u043d\u0438\u0436\u0435 demo\/boxshell.lua window = ... rt = ... start_row = 0 start_col = 0 rt:draw(window, start_row, start_col) <\/code><\/pre>\n<h4>\u0417\u0430\u043f\u0438\u0441\u044c \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b<\/h4>\n<p>  \u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0445 \u043c\u0435\u043d\u044f\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e:<\/p>\n<ul>\n<li>rt:setCellChar(row, col, character) \u2014 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u0438\u043c\u0432\u043e\u043b \u044f\u0447\u0435\u0439\u043a\u0438 (row, col)<\/li>\n<li>rt:setCellAttr(row, col, attr) \u2014 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u044f\u0447\u0435\u0439\u043a\u0438 (row, col)<\/li>\n<li>rt:setAttr(attr) \u2014 \u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043a \u043d\u043e\u0432\u044b\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c<\/li>\n<li>rt:inject(data) \u2014 \u0432\u0432\u043e\u0434\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b<\/li>\n<\/ul>\n<p>  \u0411\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u044b \u043c\u0435\u0442\u043e\u0434\u044b, \u043f\u043e\u0441\u044b\u043b\u0430\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441:<\/p>\n<pre><code class=\"lua\">-- \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c ':wq\\n' \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b -- \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0435\u043c\u0443. -- \u0418\u043d\u0430\u0447\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 inject() rt:write(':wq\\n') -- \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c vim  -- \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0447\u0435\u0440\u0435\u0437 write() local keycode = string.byte('\\n') -- \u0447\u0438\u0441\u043b\u043e rt:keyPress(keycode) <\/code><\/pre>\n<p>  \u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u043a\u043e\u0434\u043e\u0432 \u043a\u043b\u0430\u0432\u0438\u0448 \u0434\u043b\u044f keyPress \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 <a href=\"https:\/\/luaposix.github.io\/luaposix\/modules\/posix.curses.html#Constants\">curses<\/a>. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u044d\u0442\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 curses, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043a\u043e\u0434\u0435 \u0442\u0435\u0441\u0442\u043e\u0432). \u0427\u0442\u043e\u0431\u044b \u043a\u0430\u043a-\u0442\u043e \u0436\u0438\u0442\u044c \u0441 \u044d\u0442\u0438\u043c, \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0431\u044b\u043b \u0441\u0434\u0435\u043b\u0430\u043d <a href=\"https:\/\/github.com\/starius\/alnbox\/blob\/master\/src\/alnbox\/cursesConsts.lua\">\u043a\u043e\u0441\u0442\u044b\u043b\u044c<\/a>, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0449\u0438\u0439 curses \u0432 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0447\u0435\u0440\u0435\u0437 ROTE \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0439 \u0432\u0441\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b.<\/p>\n<h4>\u0421\u043d\u0438\u043c\u043a\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430<\/h4>\n<p>  \u041c\u0435\u0442\u043e\u0434 rt:takeSnapshot() \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442-\u0441\u043d\u0438\u043c\u043e\u043a, \u0430 \u043c\u0435\u0442\u043e\u0434 rt:restoreSnapshot(snapshot) \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u043d\u0438\u043c\u043a\u0443. \u041e\u0431\u044a\u0435\u043a\u0442-\u0441\u043d\u0438\u043c\u043e\u043a \u0442\u0430\u043a\u0436\u0435 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u043c \u043c\u0443\u0441\u043e\u0440\u0430.<\/p>\n<h4>\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0438 \u0446\u0432\u0435\u0442\u0430<\/h4>\n<p>  \u0410\u0442\u0440\u0438\u0431\u0443\u0442 \u2014 \u044d\u0442\u043e 8-\u0431\u0438\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0446\u0432\u0435\u0442 \u0431\u0443\u043a\u0432, \u0446\u0432\u0435\u0442 \u0444\u043e\u043d\u0430, \u0431\u0438\u0442 \u043f\u043e\u043b\u0443\u0436\u0438\u0440\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 (bold bit) \u0438 \u0431\u0438\u0442 \u043c\u0438\u0433\u0430\u044e\u0449\u0435\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 (blink bit). \u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0431\u0438\u0442\u043e\u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<pre><code> \u0431\u0438\u0442:         7 6 5 4 3 2 1 0  \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435:  S F F F H B B B               | `-,-' | `-,-'               |   |   |   |               |   |   |   `----- 3 \u0431\u0438\u0442\u0430 \u0446\u0432\u0435\u0442\u0430 \u0444\u043e\u043d\u0430 (0 - 7)               |   |   `--------- \u0431\u0438\u0442 \u043c\u0438\u0433\u0430\u044e\u0449\u0435\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430               |   `------------- 3 \u0431\u0438\u0442\u0430 \u0446\u0432\u0435\u0442\u0430 \u0431\u0443\u043a\u0432 (0 - 7)               `----------------- \u0431\u0438\u0442 \u043f\u043e\u043b\u0443\u0436\u0438\u0440\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 <\/code><\/pre>\n<p>  \u0415\u0441\u0442\u044c \u043f\u0430\u0440\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430:<\/p>\n<pre><code class=\"lua\">foreground, background, bold, blink = rote.fromAttr(attr) attr = rote.toAttr(foreground, background, bold, blink) -- foreground \u0438 background - \u0447\u0438\u0441\u043b\u0430 (0 - 7) -- bold \u0438 blink - \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <\/code><\/pre>\n<p>  \u041a\u043e\u0434\u044b \u0446\u0432\u0435\u0442\u043e\u0432:  <\/p>\n<ul>\n<li>0 = \u0447\u0435\u0440\u043d\u044b\u0439<\/li>\n<li>1 = <font color=\"red\">\u043a\u0440\u0430\u0441\u043d\u044b\u0439<\/font><\/li>\n<li>2 = <font color=\"green\">\u0437\u0435\u043b\u0435\u043d\u044b\u0439<\/font><\/li>\n<li>3 = <font color=\"yellow\">\u0436\u0435\u043b\u0442\u044b\u0439<\/font><\/li>\n<li>4 = <font color=\"blue\">\u0441\u0438\u043d\u0438\u0439<\/font><\/li>\n<li>5 = <font color=\"magenta\">\u0444\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0439<\/font><\/li>\n<li>6 = <font color=\"cyan\">\u0433\u043e\u043b\u0443\u0431\u043e\u0439<\/font><\/li>\n<li>7 = \u0431\u0435\u043b\u044b\u0439<\/li>\n<\/ul>\n<p>  \u0412 \u043c\u043e\u0434\u0443\u043b\u0435 rote \u0435\u0441\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u0434\u0430\u043c\u0438 \u0446\u0432\u0435\u0442\u043e\u0432 \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0446\u0432\u0435\u0442\u043e\u0432:  <\/p>\n<pre><code class=\"lua\">rote.color2name[2] -- \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 &quot;green&quot; rote.name2color.green -- \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 2 <\/code><\/pre>\n<h3>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/b7d\/a7f\/523\/b7da7f523705cd977ade7152d958ee74.png\" alt=\"DNA alignment\"\/><\/p>\n<p>  \u0410 \u0435\u0449\u0451 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0431\u0438\u043e\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u043a\u043e\u0439 \ud83d\ude42<\/p>\n<p>  \u0414\u0430\u0432\u043d\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0438\u043c\u0435\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0439 \u0432\u0440\u043e\u0434\u0435 <a href=\"http:\/\/www.jalview.org\/\">Jalview<\/a>, \u043d\u043e \u043f\u0440\u044f\u043c\u043e \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u0444\u0430\u0439\u043b\u044b \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u0447\u0435\u0440\u0435\u0437 ssh. \u0412 \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435 less \u0434\u043b\u044f fasta-\u0444\u0430\u0439\u043b\u043e\u0432. \u0412\u0441\u0451, \u0447\u0442\u043e \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443, \u2014 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 <a href=\"http:\/\/samtools.sourceforge.net\/tview.shtml\">tview<\/a> \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0440\u0438\u0434\u043e\u0432, \u043d\u043e \u044d\u0442\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u0442\u043e.<\/p>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 <a href=\"https:\/\/github.com\/starius\/alnbox\">alnbox<\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0438 \u0434\u0435\u043b\u0430\u0435\u0442: \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0414\u041d\u041a \u0432 curses, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u00ab\u0445\u043e\u0434\u0438\u0442\u044c\u00bb \u043f\u043e \u043d\u0435\u043c\u0443 \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u0430\u043c\u0438, \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0438 \u0432 \u043a\u043e\u043d\u0435\u0446. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0432\u0430, \u043d\u043e\u043c\u0435\u0440\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u2014 \u0441\u0432\u0435\u0440\u0445\u0443, \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441 \u2014 \u0441\u043d\u0438\u0437\u0443. \u041a\u043e\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0448\u0438\u0440\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0439, \u043d\u043e \u0438 \u043b\u044e\u0431\u044b\u0445 less-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c\u0438 \u0432\u0434\u043e\u043b\u044c \u0432\u0441\u0435\u0445 4-\u0435\u0445 \u0441\u0442\u043e\u0440\u043e\u043d \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430. \u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Lua, \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f C.<\/p>\n<p>  \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e lua-rote \u0438 <a href=\"http:\/\/olivinelabs.com\/busted\/\">busted<\/a> \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b <a href=\"https:\/\/github.com\/starius\/alnbox\/tree\/master\/spec\">\u0442\u0435\u0441\u0442\u044b \u0434\u043b\u044f alnbox<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439. \u0417\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u043a\u043e\u0434\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u043e\u0432 \u0432 Travis CI \u0432\u0437\u044f\u0442 \u043a\u043e\u0441\u0442\u044f\u043a <a href=\"https:\/\/github.com\/moteus\/lua-travis-example\">lua-travis-example<\/a> \u043e\u0442 <a href=\"https:\/\/github.com\/moteus\">moteus<\/a>.<\/p>\n<p>  \u041f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u043a\u0430 \u043d\u0435\u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d, \u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e. \u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0442\u0435 \u0436\u0435 + \u0441\u0430\u043c lua-rote. \u0414\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0430\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 luarocks make.<\/p>\n<h3>\u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>  \u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 ROTE \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b <a href=\"https:\/\/gist.github.com\/starius\/c57f0f352fa0775cb91f\">demo\/boxshell.c<\/a>. \u042d\u0442\u043e \u043f\u043e \u0441\u0443\u0442\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435: bash \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 ROTE, \u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 ROTE \u0440\u0438\u0441\u0443\u0435\u0442\u0441\u044f \u0432 curses \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 draw(). \u042d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u044f <a href=\"https:\/\/github.com\/starius\/lua-rote\/blob\/master\/demo\/boxshell.lua\">\u043f\u0435\u0440\u0435\u043d\u0451\u0441<\/a> \u0432 Lua. \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u044d\u0442\u043e\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435.<\/p>\n<p>  \u0412 Lua-\u0432\u0435\u0440\u0441\u0438\u044e boxshell \u0432\u043d\u0435\u0441\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043b\u044e\u0431\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e bash. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u043d\u043e \u0447\u0442\u0435\u043d\u0438\u0435 \u043d\u0430\u0436\u0430\u0442\u044b\u0445 \u043a\u043b\u0430\u0432\u0438\u0448 \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f: \u0432\u043c\u0435\u0441\u0442\u043e nodelay \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f halfdelay, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u0441 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u043c. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b boxshell \u0441\u043d\u0438\u0436\u0435\u043d\u0430 \u0441 100% \u0434\u043e \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c 1%.<\/p>\n<h3>\u0411\u0430\u0433\u0438<\/h3>\n<p>  <\/p>\n<ul>\n<li>\u041d\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u044e\u043d\u0438\u043a\u043e\u0434\u0430.<\/li>\n<li>\u041c\u0435\u0442\u043e\u0434 draw() \u043c\u043e\u0436\u0435\u0442 <a href=\"https:\/\/travis-ci.org\/starius\/lua-rote\/jobs\/54479120#L1160\">\u0447\u0443\u0434\u0438\u0442\u044c<\/a> \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0432 Travis CI. \u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u044d\u0442\u043e\u0442 \u0431\u0430\u0433 \u0443 \u0441\u0435\u0431\u044f \u043d\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044f. \u0422\u043e\u0447\u043d\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u044f \u043d\u0435 \u0437\u043d\u0430\u044e, \u043d\u043e \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u044e, \u0447\u0442\u043e \u0434\u0435\u043b\u043e \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 Travis CI.<\/li>\n<li>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0435\u0441\u043b\u0438 \u0443 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u043c\u0430\u043b\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 (\u043f\u0440\u0438\u043c\u0435\u0440: \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b 1&#215;2).<\/li>\n<\/ul>\n<p>  <a href=\"https:\/\/github.com\/starius\/lua-rote\/issues\/new\">\u0421\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e \u0431\u0430\u0433\u0435<\/a><\/p>\n<p>  <a href=\"http:\/\/rote.sourceforge.net\/\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 ROTE<\/a> \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0432 2004 \u0433\u043e\u0434\u0443 \u0411\u0440\u0443\u043d\u043e \u0422. \u041a. \u0434\u0435 \u041e\u043b\u0438\u0432\u0435\u0439\u0440\u0430 (Bruno T. C. de Oliveira) \u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d \u043f\u043e\u0434 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 GNU Lesser General Public License 2.1. <a href=\"https:\/\/github.com\/starius\/lua-rote\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 lua-rote<\/a> \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d \u043f\u043e\u0434 \u0442\u043e\u0439 \u0436\u0435 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439. \u0410\u0432\u0442\u043e\u0440 ROTE \u043f\u0438\u0448\u0435\u0442, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043a\u0430\u0442\u044c \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 <a href=\"https:\/\/sourceforge.net\/projects\/libvterm\/\/\">libvterm<\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 ROTE. \u0415\u0441\u0442\u044c <a href=\"http:\/\/www.leonerd.org.uk\/code\/libvterm\">\u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0435\u043a\u0442<\/a> \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c libvterm, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u0435\u0435 \u0438 \u0435\u0441\u0442\u044c <a href=\"https:\/\/github.com\/neovim\/libvterm\">\u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f<\/a> \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 NeoVim. \u0414\u043b\u044f \u043c\u043e\u0438\u0445 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 ROTE \u0445\u0432\u0430\u0442\u0438\u043b\u043e, \u0438 \u043e\u043d\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043a\u0430 \u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043d\u0435\u0439. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u0439\u0434\u0443 \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u0437 libvterm.<\/p>\n<h3>\u0421\u0441\u044b\u043b\u043a\u0438<\/h3>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/starius\/lua-rote\">GitHub<\/a><\/li>\n<li><a href=\"https:\/\/starius.github.io\/lua-rote\">Home page<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/starius\/lua-rote\/issues\/new\">\u0421\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e \u0431\u0430\u0433\u0435<\/a><\/li>\n<li><a href=\"http:\/\/lua-users.org\/lists\/lua-l\/2015-03\/msg00325.html\">\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0438 lua-l<\/a><\/li>\n<li><a href=\"https:\/\/www.reddit.com\/r\/lua\/comments\/30ast4\/ann_luarote_lua_binding_to_rote_terminal\/\">\u0412\u0435\u0442\u043a\u0430 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u0430 Reddit<\/a><\/li>\n<li><a href=\"http:\/\/rote.sourceforge.net\">ROTE<\/a><\/li>\n<li><a href=\"http:\/\/olivinelabs.com\/busted\/\">Busted<\/a>, \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043d\u0430 Lua<\/li>\n<li><a href=\"https:\/\/github.com\/moteus\/lua-travis-example\">lua-travis-example<\/a>, \u043a\u043e\u0441\u0442\u044f\u043a \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 Lua-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 Travis CI<\/li>\n<\/ul>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/254089\/\"> http:\/\/habrahabr.ru\/post\/254089\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>     \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/e8c\/f27\/5cf\/e8cf275cfd684d0a9f70e50b66fe9eec.png\" alt=\"boxshell\"\/><\/p>\n<p>  <a href=\"http:\/\/rote.sourceforge.net\/\">ROTE<\/a> \u2014 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C, \u0441\u043b\u0443\u0436\u0430\u0449\u0430\u044f \u0434\u043b\u044f \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 <a href=\"https:\/\/en.wikipedia.org\/wiki\/VT100\">\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 VT100<\/a>. \u041e\u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u044f\u0437\u044b\u043a\u0430 C. \u0412 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u00ab\u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c\u00bb \u0432 \u043d\u0435\u043c \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u0440\u0438\u0441\u0443\u0435\u0442 \u043d\u0430 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430 \u0432 \u043e\u043a\u043d\u0435 curses.<\/p>\n<p>  \u0417\u0430\u0447\u0435\u043c \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u0441 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c? \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u0440\u0438\u0441\u0443\u044e\u0449\u0438\u0445 \u0447\u0442\u043e-\u0442\u043e \u043d\u0430 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e curses, \u043f\u043e \u043c\u043e\u0435\u043c\u0443 \u043c\u043d\u0435\u043d\u0438\u044e. \u041a\u0430\u043a \u0438\u043d\u0430\u0447\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0436\u0434\u0451\u0442, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u0436\u043c\u0451\u0442 \u043a\u043b\u0430\u0432\u0438\u0448\u0443, \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u044d\u043a\u0440\u0430\u043d\u0430 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 curses?<\/p>\n<p>  \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0432\u0441\u0451 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u043a\u0440\u0430\u0441\u043e\u0442\u0443 ROTE, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u0442\u0435\u0441\u0442\u0430\u0445 \u0431\u044b\u043b\u043e \u0431\u044b \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0432 ROTE \u043a \u044f\u0437\u044b\u043a\u0443 Lua, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043e\u0447\u0435\u043d\u044c \u043b\u044e\u0431\u043b\u044e \u0438 \u0437\u043d\u0430\u044e, <a href=\"http:\/\/olivinelabs.com\/busted\/\">\u043a\u0430\u043a<\/a> \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u044b. \u0422\u0430\u043a \u0438 \u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <a href=\"https:\/\/starius.github.io\/lua-rote\/\">lua-rote<\/a>, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-253981","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/253981","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=253981"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/253981\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=253981"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=253981"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=253981"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}