diff options
-rw-r--r-- | examples/terminalsize.lua | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/examples/terminalsize.lua b/examples/terminalsize.lua new file mode 100644 index 0000000..78d1910 --- /dev/null +++ b/examples/terminalsize.lua | |||
@@ -0,0 +1,36 @@ | |||
1 | local sys = require("system") | ||
2 | |||
3 | sys.autotermrestore() -- set up auto restore of terminal settings on exit | ||
4 | |||
5 | -- setup Windows console to handle ANSI processing | ||
6 | sys.setconsoleflags(io.stdout, sys.getconsoleflags(io.stdout) + sys.COF_VIRTUAL_TERMINAL_PROCESSING) | ||
7 | sys.setconsoleflags(io.stdin, sys.getconsoleflags(io.stdin) + sys.CIF_VIRTUAL_TERMINAL_INPUT) | ||
8 | |||
9 | -- setup Posix to disable canonical mode and echo | ||
10 | local of_attr = sys.tcgetattr(io.stdin) | ||
11 | sys.setnonblock(io.stdin, true) | ||
12 | sys.tcsetattr(io.stdin, sys.TCSANOW, { | ||
13 | lflag = of_attr.lflag - sys.L_ICANON - sys.L_ECHO, -- disable canonical mode and echo | ||
14 | }) | ||
15 | |||
16 | |||
17 | -- generate string to move cursor horizontally | ||
18 | -- positive goes right, negative goes left | ||
19 | local function cursor_move_horiz(n) | ||
20 | if n == 0 then | ||
21 | return "" | ||
22 | end | ||
23 | return "\27[" .. (n > 0 and n or -n) .. (n > 0 and "C" or "D") | ||
24 | end | ||
25 | |||
26 | |||
27 | local w, h | ||
28 | print("Change the terminal window size, press any key to exit") | ||
29 | while not sys.readkey(0.2) do | ||
30 | local nw, nh = sys.termsize() | ||
31 | if w ~= nw or h ~= nh then | ||
32 | w, h = nw, nh | ||
33 | local text = "Terminal size: " .. w .. "x" .. h .. " " | ||
34 | io.write(text .. cursor_move_horiz(-#text)) | ||
35 | end | ||
36 | end | ||