diff options
-rw-r--r-- | CHANGELOG.md | 5 | ||||
-rw-r--r-- | LICENSE.md | 2 | ||||
-rw-r--r-- | docs/classes/bitflags.html | 2 | ||||
-rw-r--r-- | docs/examples/compat.lua.html | 2 | ||||
-rw-r--r-- | docs/examples/flag_debugging.lua.html | 2 | ||||
-rw-r--r-- | docs/examples/password_input.lua.html | 2 | ||||
-rw-r--r-- | docs/examples/read.lua.html | 2 | ||||
-rw-r--r-- | docs/examples/readline.lua.html | 10 | ||||
-rw-r--r-- | docs/examples/spinner.lua.html | 2 | ||||
-rw-r--r-- | docs/examples/spiral_snake.lua.html | 2 | ||||
-rw-r--r-- | docs/examples/terminalsize.lua.html | 2 | ||||
-rw-r--r-- | docs/index.html | 2 | ||||
-rw-r--r-- | docs/modules/system.html | 31 | ||||
-rw-r--r-- | docs/topics/01-introduction.md.html | 2 | ||||
-rw-r--r-- | docs/topics/02-development.md.html | 2 | ||||
-rw-r--r-- | docs/topics/03-terminal.md.html | 10 | ||||
-rw-r--r-- | docs/topics/CHANGELOG.md.html | 13 | ||||
-rw-r--r-- | docs/topics/LICENSE.md.html | 4 | ||||
-rw-r--r-- | rockspecs/luasystem-0.5.0-1.rockspec | 85 | ||||
-rw-r--r-- | src/core.c | 2 |
20 files changed, 147 insertions, 37 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index af9a294..06ff748 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md | |||
@@ -21,14 +21,13 @@ The scope of what is covered by the version number excludes: | |||
21 | - commit the changes as `Release vX.Y.Z` | 21 | - commit the changes as `Release vX.Y.Z` |
22 | - push the commit, and create a release PR | 22 | - push the commit, and create a release PR |
23 | - after merging tag the release commit with `vX.Y.Z` | 23 | - after merging tag the release commit with `vX.Y.Z` |
24 | - upload to LuaRocks:<br/> | 24 | - upload to LuaRocks will be automatic by the CI runners |
25 | `luarocks upload ./rockspecs/luasystem-X.Y.Z-1.rockspec --api-key=ABCDEFGH` | ||
26 | - test the newly created rock:<br/> | 25 | - test the newly created rock:<br/> |
27 | `luarocks install luasystem` | 26 | `luarocks install luasystem` |
28 | 27 | ||
29 | ## Version history | 28 | ## Version history |
30 | 29 | ||
31 | ### unreleased | 30 | ### version 0.5.0, released 02-Mar-2025 |
32 | 31 | ||
33 | - Feat: when detecting character display width, also accept unicode codepoints (integers), | 32 | - Feat: when detecting character display width, also accept unicode codepoints (integers), |
34 | since the Lua utf8 library returns codepoints, not strings | 33 | since the Lua utf8 library returns codepoints, not strings |
@@ -1,7 +1,7 @@ | |||
1 | # MIT License | 1 | # MIT License |
2 | 2 | ||
3 | ### Copyright (c) 2016-2024, Oscar Lim | 3 | ### Copyright (c) 2016-2024, Oscar Lim |
4 | ### Copyright (c) 2024, the luasystem project authors. | 4 | ### Copyright (c) 2024-2025, the luasystem project authors. |
5 | 5 | ||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy of | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy of |
7 | this software and associated documentation files (the "Software"), to deal in | 7 | this software and associated documentation files (the "Software"), to deal in |
diff --git a/docs/classes/bitflags.html b/docs/classes/bitflags.html index 4ed5aaf..dc682f2 100644 --- a/docs/classes/bitflags.html +++ b/docs/classes/bitflags.html | |||
@@ -298,7 +298,7 @@ return <code>false</code> if the flags are checked. | |||
298 | </div> <!-- id="main" --> | 298 | </div> <!-- id="main" --> |
299 | <div id="about"> | 299 | <div id="about"> |
300 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> | 300 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> |
301 | <i style="float:right;">Last updated 2024-12-18 02:50:03 </i> | 301 | <i style="float:right;">Last updated 2025-03-02 19:43:40 </i> |
302 | </div> <!-- id="about" --> | 302 | </div> <!-- id="about" --> |
303 | </div> <!-- id="container" --> | 303 | </div> <!-- id="container" --> |
304 | </body> | 304 | </body> |
diff --git a/docs/examples/compat.lua.html b/docs/examples/compat.lua.html index b887c91..42928b0 100644 --- a/docs/examples/compat.lua.html +++ b/docs/examples/compat.lua.html | |||
@@ -112,7 +112,7 @@ | |||
112 | </div> <!-- id="main" --> | 112 | </div> <!-- id="main" --> |
113 | <div id="about"> | 113 | <div id="about"> |
114 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> | 114 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> |
115 | <i style="float:right;">Last updated 2024-12-18 02:50:03 </i> | 115 | <i style="float:right;">Last updated 2025-03-02 19:43:40 </i> |
116 | </div> <!-- id="about" --> | 116 | </div> <!-- id="about" --> |
117 | </div> <!-- id="container" --> | 117 | </div> <!-- id="container" --> |
118 | </body> | 118 | </body> |
diff --git a/docs/examples/flag_debugging.lua.html b/docs/examples/flag_debugging.lua.html index 8fcf0a9..862cd96 100644 --- a/docs/examples/flag_debugging.lua.html +++ b/docs/examples/flag_debugging.lua.html | |||
@@ -80,7 +80,7 @@ | |||
80 | </div> <!-- id="main" --> | 80 | </div> <!-- id="main" --> |
81 | <div id="about"> | 81 | <div id="about"> |
82 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> | 82 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> |
83 | <i style="float:right;">Last updated 2024-12-18 02:50:03 </i> | 83 | <i style="float:right;">Last updated 2025-03-02 19:43:40 </i> |
84 | </div> <!-- id="about" --> | 84 | </div> <!-- id="about" --> |
85 | </div> <!-- id="container" --> | 85 | </div> <!-- id="container" --> |
86 | </body> | 86 | </body> |
diff --git a/docs/examples/password_input.lua.html b/docs/examples/password_input.lua.html index f29e429..cf27497 100644 --- a/docs/examples/password_input.lua.html +++ b/docs/examples/password_input.lua.html | |||
@@ -132,7 +132,7 @@ useful for reading secrets from the user. | |||
132 | </div> <!-- id="main" --> | 132 | </div> <!-- id="main" --> |
133 | <div id="about"> | 133 | <div id="about"> |
134 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> | 134 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> |
135 | <i style="float:right;">Last updated 2024-12-18 02:50:03 </i> | 135 | <i style="float:right;">Last updated 2025-03-02 19:43:40 </i> |
136 | </div> <!-- id="about" --> | 136 | </div> <!-- id="about" --> |
137 | </div> <!-- id="container" --> | 137 | </div> <!-- id="container" --> |
138 | </body> | 138 | </body> |
diff --git a/docs/examples/read.lua.html b/docs/examples/read.lua.html index 1d6bb3e..2ffcf1b 100644 --- a/docs/examples/read.lua.html +++ b/docs/examples/read.lua.html | |||
@@ -143,7 +143,7 @@ sys.<span class="function-name">setnonblock</span>(<span class="global">io</span | |||
143 | </div> <!-- id="main" --> | 143 | </div> <!-- id="main" --> |
144 | <div id="about"> | 144 | <div id="about"> |
145 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> | 145 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> |
146 | <i style="float:right;">Last updated 2024-12-18 02:50:03 </i> | 146 | <i style="float:right;">Last updated 2025-03-02 19:43:40 </i> |
147 | </div> <!-- id="about" --> | 147 | </div> <!-- id="about" --> |
148 | </div> <!-- id="container" --> | 148 | </div> <!-- id="container" --> |
149 | </body> | 149 | </body> |
diff --git a/docs/examples/readline.lua.html b/docs/examples/readline.lua.html index a78f5b3..ba453ad 100644 --- a/docs/examples/readline.lua.html +++ b/docs/examples/readline.lua.html | |||
@@ -213,10 +213,12 @@ readline.__index = readline | |||
213 | </span><span class="comment">-- @tparam[opt=""] string opts.value the default value | 213 | </span><span class="comment">-- @tparam[opt=""] string opts.value the default value |
214 | </span><span class="comment">-- @tparam[opt=<code>#value</code>] number opts.position of the cursor in the input | 214 | </span><span class="comment">-- @tparam[opt=<code>#value</code>] number opts.position of the cursor in the input |
215 | </span><span class="comment">-- @tparam[opt={"\10"/"\13"}] table opts.exit_keys an array of keys that will cause the readline to exit | 215 | </span><span class="comment">-- @tparam[opt={"\10"/"\13"}] table opts.exit_keys an array of keys that will cause the readline to exit |
216 | </span><span class="comment">-- @tparam[opt=system.sleep] function opts.fsleep the sleep function to use (see <a href="../modules/system.html#readansi">system.readansi</a>) | ||
216 | </span><span class="comment">-- @treturn readline the new readline object | 217 | </span><span class="comment">-- @treturn readline the new readline object |
217 | </span><span class="keyword">function</span> readline.<span class="function-name">new</span>(opts) | 218 | </span><span class="keyword">function</span> readline.<span class="function-name">new</span>(opts) |
218 | <span class="keyword">local</span> value = <span class="function-name">utf8parse</span>(opts.value <span class="keyword">or</span> <span class="string">""</span>) | 219 | <span class="keyword">local</span> value = <span class="function-name">utf8parse</span>(opts.value <span class="keyword">or</span> <span class="string">""</span>) |
219 | <span class="keyword">local</span> prompt = <span class="function-name">utf8parse</span>(opts.prompt <span class="keyword">or</span> <span class="string">""</span>) | 220 | <span class="keyword">local</span> prompt = <span class="function-name">utf8parse</span>(opts.prompt <span class="keyword">or</span> <span class="string">""</span>) |
221 | <span class="keyword">local</span> fsleep = opts.fsleep <span class="keyword">or</span> sys.sleep | ||
220 | <span class="keyword">local</span> pos = <span class="global">math</span>.<span class="function-name">floor</span>(opts.position <span class="keyword">or</span> (#value + <span class="number">1</span>)) | 222 | <span class="keyword">local</span> pos = <span class="global">math</span>.<span class="function-name">floor</span>(opts.position <span class="keyword">or</span> (#value + <span class="number">1</span>)) |
221 | pos = <span class="global">math</span>.<span class="function-name">max</span>(<span class="global">math</span>.<span class="function-name">min</span>(pos, (#value + <span class="number">1</span>)), <span class="number">1</span>) | 223 | pos = <span class="global">math</span>.<span class="function-name">max</span>(<span class="global">math</span>.<span class="function-name">min</span>(pos, (#value + <span class="number">1</span>)), <span class="number">1</span>) |
222 | <span class="keyword">local</span> len = <span class="global">math</span>.<span class="function-name">floor</span>(opts.max_length <span class="keyword">or</span> <span class="number">80</span>) | 224 | <span class="keyword">local</span> len = <span class="global">math</span>.<span class="function-name">floor</span>(opts.max_length <span class="keyword">or</span> <span class="number">80</span>) |
@@ -244,6 +246,7 @@ readline.__index = readline | |||
244 | </span> position = pos, <span class="comment">-- the current position in the input | 246 | </span> position = pos, <span class="comment">-- the current position in the input |
245 | </span> drawn_before = <span class="keyword">false</span>, <span class="comment">-- if the prompt has been drawn | 247 | </span> drawn_before = <span class="keyword">false</span>, <span class="comment">-- if the prompt has been drawn |
246 | </span> exit_keys = exit_keys, <span class="comment">-- the keys that will cause the readline to exit | 248 | </span> exit_keys = exit_keys, <span class="comment">-- the keys that will cause the readline to exit |
249 | </span> fsleep = fsleep, <span class="comment">-- the sleep function to use | ||
247 | </span> } | 250 | </span> } |
248 | 251 | ||
249 | <span class="global">setmetatable</span>(self, readline) | 252 | <span class="global">setmetatable</span>(self, readline) |
@@ -482,7 +485,7 @@ readline.__index = readline | |||
482 | <span class="keyword">local</span> timeout_end = sys.<span class="function-name">gettime</span>() + timeout | 485 | <span class="keyword">local</span> timeout_end = sys.<span class="function-name">gettime</span>() + timeout |
483 | 486 | ||
484 | <span class="keyword">while</span> <span class="keyword">true</span> <span class="keyword">do</span> | 487 | <span class="keyword">while</span> <span class="keyword">true</span> <span class="keyword">do</span> |
485 | <span class="keyword">local</span> key, keytype = sys.<span class="function-name">readansi</span>(timeout_end - sys.<span class="function-name">gettime</span>()) | 488 | <span class="keyword">local</span> key, keytype = sys.<span class="function-name">readansi</span>(timeout_end - sys.<span class="function-name">gettime</span>(), self.fsleep) |
486 | <span class="keyword">if</span> <span class="keyword">not</span> key <span class="keyword">then</span> | 489 | <span class="keyword">if</span> <span class="keyword">not</span> key <span class="keyword">then</span> |
487 | <span class="comment">-- error or timeout | 490 | <span class="comment">-- error or timeout |
488 | </span> <span class="keyword">return</span> <span class="keyword">nil</span>, keytype | 491 | </span> <span class="keyword">return</span> <span class="keyword">nil</span>, keytype |
@@ -527,7 +530,8 @@ sys.<span class="function-name">setconsoleflags</span>(<span class="global">io</ | |||
527 | value = <span class="string">"Hello, 你-好 World 🚀!"</span>, | 530 | value = <span class="string">"Hello, 你-好 World 🚀!"</span>, |
528 | <span class="comment">-- position = 2, | 531 | <span class="comment">-- position = 2, |
529 | </span> exit_keys = {key_sequences.enter, <span class="string">"\27"</span>, <span class="string">"\t"</span>, <span class="string">"\27[Z"</span>}, <span class="comment">-- enter, escape, tab, shift-tab | 532 | </span> exit_keys = {key_sequences.enter, <span class="string">"\27"</span>, <span class="string">"\t"</span>, <span class="string">"\27[Z"</span>}, <span class="comment">-- enter, escape, tab, shift-tab |
530 | </span>} | 533 | </span> fsleep = sys.sleep, |
534 | } | ||
531 | 535 | ||
532 | 536 | ||
533 | <span class="keyword">local</span> result, key = <span class="function-name">rl</span>() | 537 | <span class="keyword">local</span> result, key = <span class="function-name">rl</span>() |
@@ -545,7 +549,7 @@ sys.<span class="function-name">setconsoleflags</span>(<span class="global">io</ | |||
545 | </div> <!-- id="main" --> | 549 | </div> <!-- id="main" --> |
546 | <div id="about"> | 550 | <div id="about"> |
547 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> | 551 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> |
548 | <i style="float:right;">Last updated 2024-12-18 02:50:03 </i> | 552 | <i style="float:right;">Last updated 2025-03-02 19:43:40 </i> |
549 | </div> <!-- id="about" --> | 553 | </div> <!-- id="about" --> |
550 | </div> <!-- id="container" --> | 554 | </div> <!-- id="container" --> |
551 | </body> | 555 | </body> |
diff --git a/docs/examples/spinner.lua.html b/docs/examples/spinner.lua.html index b56f1ed..ea992e3 100644 --- a/docs/examples/spinner.lua.html +++ b/docs/examples/spinner.lua.html | |||
@@ -137,7 +137,7 @@ sys.<span class="function-name">setnonblock</span>(<span class="global">io</span | |||
137 | </div> <!-- id="main" --> | 137 | </div> <!-- id="main" --> |
138 | <div id="about"> | 138 | <div id="about"> |
139 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> | 139 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> |
140 | <i style="float:right;">Last updated 2024-12-18 02:50:03 </i> | 140 | <i style="float:right;">Last updated 2025-03-02 19:43:40 </i> |
141 | </div> <!-- id="about" --> | 141 | </div> <!-- id="about" --> |
142 | </div> <!-- id="container" --> | 142 | </div> <!-- id="container" --> |
143 | </body> | 143 | </body> |
diff --git a/docs/examples/spiral_snake.lua.html b/docs/examples/spiral_snake.lua.html index 961f506..1f0d582 100644 --- a/docs/examples/spiral_snake.lua.html +++ b/docs/examples/spiral_snake.lua.html | |||
@@ -145,7 +145,7 @@ codes for moving the cursor around. | |||
145 | </div> <!-- id="main" --> | 145 | </div> <!-- id="main" --> |
146 | <div id="about"> | 146 | <div id="about"> |
147 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> | 147 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> |
148 | <i style="float:right;">Last updated 2024-12-18 02:50:03 </i> | 148 | <i style="float:right;">Last updated 2025-03-02 19:43:40 </i> |
149 | </div> <!-- id="about" --> | 149 | </div> <!-- id="about" --> |
150 | </div> <!-- id="container" --> | 150 | </div> <!-- id="container" --> |
151 | </body> | 151 | </body> |
diff --git a/docs/examples/terminalsize.lua.html b/docs/examples/terminalsize.lua.html index c01a3d3..a8bb42b 100644 --- a/docs/examples/terminalsize.lua.html +++ b/docs/examples/terminalsize.lua.html | |||
@@ -110,7 +110,7 @@ sys.<span class="function-name">tcsetattr</span>(<span class="global">io</span>. | |||
110 | </div> <!-- id="main" --> | 110 | </div> <!-- id="main" --> |
111 | <div id="about"> | 111 | <div id="about"> |
112 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> | 112 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> |
113 | <i style="float:right;">Last updated 2024-12-18 02:50:03 </i> | 113 | <i style="float:right;">Last updated 2025-03-02 19:43:40 </i> |
114 | </div> <!-- id="about" --> | 114 | </div> <!-- id="about" --> |
115 | </div> <!-- id="container" --> | 115 | </div> <!-- id="container" --> |
116 | </body> | 116 | </body> |
diff --git a/docs/index.html b/docs/index.html index 1ddd617..9ca0c42 100644 --- a/docs/index.html +++ b/docs/index.html | |||
@@ -142,7 +142,7 @@ | |||
142 | </div> <!-- id="main" --> | 142 | </div> <!-- id="main" --> |
143 | <div id="about"> | 143 | <div id="about"> |
144 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> | 144 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> |
145 | <i style="float:right;">Last updated 2024-12-18 02:50:03 </i> | 145 | <i style="float:right;">Last updated 2025-03-02 19:43:40 </i> |
146 | </div> <!-- id="about" --> | 146 | </div> <!-- id="about" --> |
147 | </div> <!-- id="container" --> | 147 | </div> <!-- id="container" --> |
148 | </body> | 148 | </body> |
diff --git a/docs/modules/system.html b/docs/modules/system.html index ec077d8..093fd8b 100644 --- a/docs/modules/system.html +++ b/docs/modules/system.html | |||
@@ -152,12 +152,12 @@ | |||
152 | <td class="summary">Debug function for terminal flags (Posix).</td> | 152 | <td class="summary">Debug function for terminal flags (Posix).</td> |
153 | </tr> | 153 | </tr> |
154 | <tr> | 154 | <tr> |
155 | <td class="name" nowrap><a href="#readansi">readansi (timeout)</a></td> | 155 | <td class="name" nowrap><a href="#readansi">readansi (timeout[, fsleep=system.sleep])</a></td> |
156 | <td class="summary">Reads a single key, if it is the start of ansi escape sequence then it reads | 156 | <td class="summary">Reads a single key, if it is the start of ansi escape sequence then it reads |
157 | the full sequence.</td> | 157 | the full sequence.</td> |
158 | </tr> | 158 | </tr> |
159 | <tr> | 159 | <tr> |
160 | <td class="name" nowrap><a href="#readkey">readkey (timeout)</a></td> | 160 | <td class="name" nowrap><a href="#readkey">readkey (timeout[, fsleep=system.sleep])</a></td> |
161 | <td class="summary">Reads a single byte from the console, with a timeout.</td> | 161 | <td class="summary">Reads a single byte from the console, with a timeout.</td> |
162 | </tr> | 162 | </tr> |
163 | <tr> | 163 | <tr> |
@@ -353,7 +353,8 @@ Windows, setting an empty string, will also delete the variable) | |||
353 | </dt> | 353 | </dt> |
354 | <dd> | 354 | <dd> |
355 | Generate random bytes. | 355 | Generate random bytes. |
356 | This uses <code>CryptGenRandom()</code> on Windows, and <code>/dev/urandom</code> on other platforms. It will return the | 356 | This uses <code>BCryptGenRandom()</code> on Windows, <code>getrandom()</code> on Linux, <code>arc4random_buf</code> on BSD, |
357 | and <code>/dev/urandom</code> on other platforms. It will return the | ||
357 | requested number of bytes, or an error, never a partial result. | 358 | requested number of bytes, or an error, never a partial result. |
358 | 359 | ||
359 | 360 | ||
@@ -728,12 +729,12 @@ system.<span class="function-name">listconsoleflags</span>(<span class="global"> | |||
728 | </dd> | 729 | </dd> |
729 | <dt> | 730 | <dt> |
730 | <a name = "readansi"></a> | 731 | <a name = "readansi"></a> |
731 | <strong>readansi (timeout)</strong> | 732 | <strong>readansi (timeout[, fsleep=system.sleep])</strong> |
732 | </dt> | 733 | </dt> |
733 | <dd> | 734 | <dd> |
734 | Reads a single key, if it is the start of ansi escape sequence then it reads | 735 | Reads a single key, if it is the start of ansi escape sequence then it reads |
735 | the full sequence. The key can be a multi-byte string in case of multibyte UTF-8 character. | 736 | the full sequence. The key can be a multi-byte string in case of multibyte UTF-8 character. |
736 | This function uses <a href="../modules/system.html#readkey">system.readkey</a>, and hence <a href="../modules/system.html#sleep">system.sleep</a> to wait until either a key is | 737 | This function uses <a href="../modules/system.html#readkey">system.readkey</a>, and hence <code>fsleep</code> to wait until either a key is |
737 | available or the timeout is reached. | 738 | available or the timeout is reached. |
738 | It returns immediately if a key is available or if <code>timeout</code> is less than or equal to <code>0</code>. | 739 | It returns immediately if a key is available or if <code>timeout</code> is less than or equal to <code>0</code>. |
739 | In case of an ANSI sequence, it will return the full sequence as a string. | 740 | In case of an ANSI sequence, it will return the full sequence as a string. |
@@ -745,6 +746,11 @@ system.<span class="function-name">listconsoleflags</span>(<span class="global"> | |||
745 | <span class="types"><span class="type">number</span></span> | 746 | <span class="types"><span class="type">number</span></span> |
746 | the timeout in seconds. | 747 | the timeout in seconds. |
747 | </li> | 748 | </li> |
749 | <li><span class="parameter">fsleep</span> | ||
750 | <span class="types"><span class="type">function</span></span> | ||
751 | the function to call for sleeping. | ||
752 | (<em>default</em> system.sleep) | ||
753 | </li> | ||
748 | </ul> | 754 | </ul> |
749 | 755 | ||
750 | <h3>Returns:</h3> | 756 | <h3>Returns:</h3> |
@@ -775,11 +781,11 @@ system.<span class="function-name">listconsoleflags</span>(<span class="global"> | |||
775 | </dd> | 781 | </dd> |
776 | <dt> | 782 | <dt> |
777 | <a name = "readkey"></a> | 783 | <a name = "readkey"></a> |
778 | <strong>readkey (timeout)</strong> | 784 | <strong>readkey (timeout[, fsleep=system.sleep])</strong> |
779 | </dt> | 785 | </dt> |
780 | <dd> | 786 | <dd> |
781 | Reads a single byte from the console, with a timeout. | 787 | Reads a single byte from the console, with a timeout. |
782 | This function uses <a href="../modules/system.html#sleep">system.sleep</a> to wait until either a byte is available or the timeout is reached. | 788 | This function uses <code>fsleep</code> to wait until either a byte is available or the timeout is reached. |
783 | The sleep period is exponentially backing off, starting at 0.0125 seconds, with a maximum of 0.2 seconds. | 789 | The sleep period is exponentially backing off, starting at 0.0125 seconds, with a maximum of 0.2 seconds. |
784 | It returns immediately if a byte is available or if <code>timeout</code> is less than or equal to <code>0</code>.</p> | 790 | It returns immediately if a byte is available or if <code>timeout</code> is less than or equal to <code>0</code>.</p> |
785 | 791 | ||
@@ -793,6 +799,11 @@ system.<span class="function-name">listconsoleflags</span>(<span class="global"> | |||
793 | <span class="types"><span class="type">number</span></span> | 799 | <span class="types"><span class="type">number</span></span> |
794 | the timeout in seconds. | 800 | the timeout in seconds. |
795 | </li> | 801 | </li> |
802 | <li><span class="parameter">fsleep</span> | ||
803 | <span class="types"><span class="type">function</span></span> | ||
804 | the function to call for sleeping. | ||
805 | (<em>default</em> system.sleep) | ||
806 | </li> | ||
796 | </ul> | 807 | </ul> |
797 | 808 | ||
798 | <h3>Returns:</h3> | 809 | <h3>Returns:</h3> |
@@ -1261,8 +1272,8 @@ flags for the <code>iflags</code>, <code>oflags</code>, and <code>lflags</code> | |||
1261 | <h3>Parameters:</h3> | 1272 | <h3>Parameters:</h3> |
1262 | <ul> | 1273 | <ul> |
1263 | <li><span class="parameter">utf8_char</span> | 1274 | <li><span class="parameter">utf8_char</span> |
1264 | <span class="types"><a class="type" href="https://www.lua.org/manual/5.4/manual.html#6.4">string</a></span> | 1275 | <span class="types"><a class="type" href="https://www.lua.org/manual/5.4/manual.html#6.4">string</a> or <span class="type">int</span></span> |
1265 | the utf8 character to check, only the width of the first character will be returned | 1276 | the utf8 character, or unicode codepoint, to check, only the width of the first character will be returned |
1266 | </li> | 1277 | </li> |
1267 | </ul> | 1278 | </ul> |
1268 | 1279 | ||
@@ -1411,7 +1422,7 @@ This function will sleep, without doing a busy-loop and wasting CPU cycles. | |||
1411 | </div> <!-- id="main" --> | 1422 | </div> <!-- id="main" --> |
1412 | <div id="about"> | 1423 | <div id="about"> |
1413 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> | 1424 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> |
1414 | <i style="float:right;">Last updated 2024-12-18 02:50:03 </i> | 1425 | <i style="float:right;">Last updated 2025-03-02 19:43:40 </i> |
1415 | </div> <!-- id="about" --> | 1426 | </div> <!-- id="about" --> |
1416 | </div> <!-- id="container" --> | 1427 | </div> <!-- id="container" --> |
1417 | </body> | 1428 | </body> |
diff --git a/docs/topics/01-introduction.md.html b/docs/topics/01-introduction.md.html index 5b5f07d..cf8a21f 100644 --- a/docs/topics/01-introduction.md.html +++ b/docs/topics/01-introduction.md.html | |||
@@ -84,7 +84,7 @@ independence.</p> | |||
84 | </div> <!-- id="main" --> | 84 | </div> <!-- id="main" --> |
85 | <div id="about"> | 85 | <div id="about"> |
86 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> | 86 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> |
87 | <i style="float:right;">Last updated 2024-12-18 02:50:03 </i> | 87 | <i style="float:right;">Last updated 2025-03-02 19:43:40 </i> |
88 | </div> <!-- id="about" --> | 88 | </div> <!-- id="about" --> |
89 | </div> <!-- id="container" --> | 89 | </div> <!-- id="container" --> |
90 | </body> | 90 | </body> |
diff --git a/docs/topics/02-development.md.html b/docs/topics/02-development.md.html index b305201..b9f79fd 100644 --- a/docs/topics/02-development.md.html +++ b/docs/topics/02-development.md.html | |||
@@ -84,7 +84,7 @@ pass locally, and do not rely on CI only.</p> | |||
84 | </div> <!-- id="main" --> | 84 | </div> <!-- id="main" --> |
85 | <div id="about"> | 85 | <div id="about"> |
86 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> | 86 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> |
87 | <i style="float:right;">Last updated 2024-12-18 02:50:03 </i> | 87 | <i style="float:right;">Last updated 2025-03-02 19:43:40 </i> |
88 | </div> <!-- id="about" --> | 88 | </div> <!-- id="about" --> |
89 | </div> <!-- id="container" --> | 89 | </div> <!-- id="container" --> |
90 | </body> | 90 | </body> |
diff --git a/docs/topics/03-terminal.md.html b/docs/topics/03-terminal.md.html index 6471a30..8c45d6e 100644 --- a/docs/topics/03-terminal.md.html +++ b/docs/topics/03-terminal.md.html | |||
@@ -202,10 +202,10 @@ sys.<span class="function-name">tcsetattr</span>(<span class="global">io</span>. | |||
202 | sys.<span class="function-name">setnonblock</span>(<span class="global">io</span>.stdin, <span class="keyword">true</span>) | 202 | sys.<span class="function-name">setnonblock</span>(<span class="global">io</span>.stdin, <span class="keyword">true</span>) |
203 | </pre> | 203 | </pre> |
204 | 204 | ||
205 | <p>Both functions require a timeout to be provided which allows for proper asynchronous | 205 | <p>Both <code>readkey</code> and <code>readansi</code> require a timeout to be provided which allows for proper asynchronous |
206 | code to be written. Since the underlying sleep method used is <a href="../modules/system.html#sleep">system.sleep</a>, just patching | 206 | code to be written. The underlying sleep method to use can be provided, and defaults to <a href="../modules/system.html#sleep">system.sleep</a>. |
207 | that function with a coroutine based yielding one should be all that is needed to make | 207 | Just passing a coroutine enabled sleep method should be all that is needed to make |
208 | the result work with asynchroneous coroutine schedulers.</p> | 208 | the result work with asynchroneous coroutine schedulers. Alternatively just patch <a href="../modules/system.html#sleep">system.sleep</a>.</p> |
209 | 209 | ||
210 | <h3>3.3.2 Blocking input</h3> | 210 | <h3>3.3.2 Blocking input</h3> |
211 | 211 | ||
@@ -218,7 +218,7 @@ For an example see <a href="../examples/password_input.lua.html"><code>examples/ | |||
218 | </div> <!-- id="main" --> | 218 | </div> <!-- id="main" --> |
219 | <div id="about"> | 219 | <div id="about"> |
220 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> | 220 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> |
221 | <i style="float:right;">Last updated 2024-12-18 02:50:03 </i> | 221 | <i style="float:right;">Last updated 2025-03-02 19:43:40 </i> |
222 | </div> <!-- id="about" --> | 222 | </div> <!-- id="about" --> |
223 | </div> <!-- id="container" --> | 223 | </div> <!-- id="container" --> |
224 | </body> | 224 | </body> |
diff --git a/docs/topics/CHANGELOG.md.html b/docs/topics/CHANGELOG.md.html index 8567695..fd3ba59 100644 --- a/docs/topics/CHANGELOG.md.html +++ b/docs/topics/CHANGELOG.md.html | |||
@@ -107,6 +107,17 @@ | |||
107 | <p><a name="Version_history"></a></p> | 107 | <p><a name="Version_history"></a></p> |
108 | <h2>Version history</h2> | 108 | <h2>Version history</h2> |
109 | 109 | ||
110 | <h3>unreleased</h3> | ||
111 | |||
112 | <ul> | ||
113 | <li>Feat: when detecting character display width, also accept unicode codepoints (integers), | ||
114 | since the Lua utf8 library returns codepoints, not strings</li> | ||
115 | <li>Feat: allow passing in a sleep function to <code>readkey</code> and <code>readansi</code></li> | ||
116 | <li>Fix: NetBSD fix compilation, undeclared directives</li> | ||
117 | <li>Refactor: random bytes; remove deprecated API usage on Windows, move to | ||
118 | binary api instead of /dev/urandom file on linux and bsd</li> | ||
119 | </ul> | ||
120 | |||
110 | <h3>version 0.4.5, released 18-Dec-2024</h3> | 121 | <h3>version 0.4.5, released 18-Dec-2024</h3> |
111 | 122 | ||
112 | <ul> | 123 | <ul> |
@@ -183,7 +194,7 @@ | |||
183 | </div> <!-- id="main" --> | 194 | </div> <!-- id="main" --> |
184 | <div id="about"> | 195 | <div id="about"> |
185 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> | 196 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> |
186 | <i style="float:right;">Last updated 2024-12-18 02:50:03 </i> | 197 | <i style="float:right;">Last updated 2025-03-02 19:43:40 </i> |
187 | </div> <!-- id="about" --> | 198 | </div> <!-- id="about" --> |
188 | </div> <!-- id="container" --> | 199 | </div> <!-- id="container" --> |
189 | </body> | 200 | </body> |
diff --git a/docs/topics/LICENSE.md.html b/docs/topics/LICENSE.md.html index 1fe8797..bbe229e 100644 --- a/docs/topics/LICENSE.md.html +++ b/docs/topics/LICENSE.md.html | |||
@@ -69,7 +69,7 @@ | |||
69 | <h1>MIT License</h1> | 69 | <h1>MIT License</h1> |
70 | 70 | ||
71 | <h3>Copyright (c) 2016-2024, Oscar Lim</h3> | 71 | <h3>Copyright (c) 2016-2024, Oscar Lim</h3> |
72 | <h3>Copyright (c) 2024, the luasystem project authors.</h3> | 72 | <h3>Copyright (c) 2024-2025, the luasystem project authors.</h3> |
73 | 73 | ||
74 | <p>Permission is hereby granted, free of charge, to any person obtaining a copy of | 74 | <p>Permission is hereby granted, free of charge, to any person obtaining a copy of |
75 | this software and associated documentation files (the "Software"), to deal in | 75 | this software and associated documentation files (the "Software"), to deal in |
@@ -94,7 +94,7 @@ SOFTWARE.</p> | |||
94 | </div> <!-- id="main" --> | 94 | </div> <!-- id="main" --> |
95 | <div id="about"> | 95 | <div id="about"> |
96 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> | 96 | <i>generated by <a href="http://github.com/lunarmodules/LDoc">LDoc 1.5.0</a></i> |
97 | <i style="float:right;">Last updated 2024-12-18 02:50:03 </i> | 97 | <i style="float:right;">Last updated 2025-03-02 19:43:40 </i> |
98 | </div> <!-- id="about" --> | 98 | </div> <!-- id="about" --> |
99 | </div> <!-- id="container" --> | 99 | </div> <!-- id="container" --> |
100 | </body> | 100 | </body> |
diff --git a/rockspecs/luasystem-0.5.0-1.rockspec b/rockspecs/luasystem-0.5.0-1.rockspec new file mode 100644 index 0000000..4fc9b5c --- /dev/null +++ b/rockspecs/luasystem-0.5.0-1.rockspec | |||
@@ -0,0 +1,85 @@ | |||
1 | local package_name = "luasystem" | ||
2 | local package_version = "0.5.0" | ||
3 | local rockspec_revision = "1" | ||
4 | local github_account_name = "lunarmodules" | ||
5 | local github_repo_name = "luasystem" | ||
6 | |||
7 | |||
8 | package = package_name | ||
9 | version = package_version.."-"..rockspec_revision | ||
10 | |||
11 | source = { | ||
12 | url = "git+https://github.com/"..github_account_name.."/"..github_repo_name..".git", | ||
13 | branch = (package_version == "scm") and "master" or nil, | ||
14 | tag = (package_version ~= "scm") and "v"..package_version or nil, | ||
15 | } | ||
16 | |||
17 | description = { | ||
18 | summary = 'Platform independent system calls for Lua.', | ||
19 | detailed = [[ | ||
20 | Adds a Lua API for making platform independent system calls. | ||
21 | ]], | ||
22 | license = 'MIT <http://opensource.org/licenses/MIT>', | ||
23 | homepage = "https://github.com/"..github_account_name.."/"..github_repo_name, | ||
24 | } | ||
25 | |||
26 | dependencies = { | ||
27 | 'lua >= 5.1', | ||
28 | } | ||
29 | |||
30 | local function make_platform(plat) | ||
31 | local defines = { | ||
32 | linux = { }, | ||
33 | unix = { }, | ||
34 | macosx = { }, | ||
35 | win32 = { "WINVER=0x0600", "_WIN32_WINNT=0x0600" }, | ||
36 | mingw32 = { "WINVER=0x0600", "_WIN32_WINNT=0x0600" }, | ||
37 | } | ||
38 | local libraries = { | ||
39 | linux = { "rt" }, | ||
40 | unix = { }, | ||
41 | macosx = { }, | ||
42 | win32 = { "advapi32", "winmm", "bcrypt" }, | ||
43 | mingw32 = { }, | ||
44 | } | ||
45 | local libdirs = { | ||
46 | linux = nil, | ||
47 | unix = nil, | ||
48 | macosx = nil, | ||
49 | win32 = nil, | ||
50 | mingw32 = { }, | ||
51 | } | ||
52 | return { | ||
53 | modules = { | ||
54 | ['system.core'] = { | ||
55 | sources = { | ||
56 | 'src/core.c', | ||
57 | 'src/compat.c', | ||
58 | 'src/time.c', | ||
59 | 'src/environment.c', | ||
60 | 'src/random.c', | ||
61 | 'src/term.c', | ||
62 | 'src/bitflags.c', | ||
63 | 'src/wcwidth.c', | ||
64 | }, | ||
65 | defines = defines[plat], | ||
66 | libraries = libraries[plat], | ||
67 | libdirs = libdirs[plat], | ||
68 | }, | ||
69 | }, | ||
70 | } | ||
71 | end | ||
72 | |||
73 | build = { | ||
74 | type = 'builtin', | ||
75 | platforms = { | ||
76 | linux = make_platform('linux'), | ||
77 | unix = make_platform('unix'), | ||
78 | macosx = make_platform('macosx'), | ||
79 | win32 = make_platform('win32'), | ||
80 | mingw32 = make_platform('mingw32'), | ||
81 | }, | ||
82 | modules = { | ||
83 | ['system.init'] = 'system/init.lua', | ||
84 | }, | ||
85 | } | ||
@@ -4,7 +4,7 @@ | |||
4 | #include <lua.h> | 4 | #include <lua.h> |
5 | #include <lauxlib.h> | 5 | #include <lauxlib.h> |
6 | 6 | ||
7 | #define LUASYSTEM_VERSION "LuaSystem 0.4.5" | 7 | #define LUASYSTEM_VERSION "LuaSystem 0.5.0" |
8 | 8 | ||
9 | #ifdef _WIN32 | 9 | #ifdef _WIN32 |
10 | #define LUAEXPORT __declspec(dllexport) | 10 | #define LUAEXPORT __declspec(dllexport) |