summaryrefslogtreecommitdiff
path: root/xmake/plugins/lua
diff options
context:
space:
mode:
authorruki <[email protected]>2026-02-03 12:10:22 +0800
committerGitHub <[email protected]>2026-02-03 12:10:22 +0800
commit1bcce9d85f07cae1f7ac9f3a3099047539d26c84 (patch)
tree1516224d2d661413fe5e786a67a83484784b2d76 /xmake/plugins/lua
parent84ecebb4e9beaef3d046617c9c5ae3c1714a4aa8 (diff)
parent7a9f668793b387efc3d657ceedbd0ab913dab4e0 (diff)
Merge pull request #7284 from luadebug/stdin
Add `--stdin`
Diffstat (limited to 'xmake/plugins/lua')
-rw-r--r--xmake/plugins/lua/main.lua51
-rw-r--r--xmake/plugins/lua/xmake.lua5
2 files changed, 48 insertions, 8 deletions
diff --git a/xmake/plugins/lua/main.lua b/xmake/plugins/lua/main.lua
index 2b0a9efe2..772faa2c6 100644
--- a/xmake/plugins/lua/main.lua
+++ b/xmake/plugins/lua/main.lua
@@ -45,6 +45,22 @@ function _list()
end
end
+-- get script from stdin
+function _get_script_from_stdin()
+ local script_content = io.read("*a")
+ if script_content then
+ -- remove utf8 bom
+ script_content = script_content:ltrim(utf8.bom)
+ if not script_content:find("function main", 1, true) then
+ script_content = "function main(...)\n" .. script_content .. "\nend"
+ end
+
+ local script = os.tmpfile() .. ".lua"
+ io.writefile(script, script_content)
+ return script
+ end
+end
+
function main()
-- list builtin scripts
@@ -54,14 +70,33 @@ function main()
-- run script
local script = option.get("script")
- if script then
- run_script(script, {
- curdir = os.workingdir(),
- verbose = option.get("verbose"),
- diagnosis = option.get("diagnosis"),
- command = option.get("command"),
- arguments = option.get("arguments"),
- deserialize = option.get("deserialize")})
+ local arguments = option.get("arguments")
+ local from_stdin = option.get("stdin")
+ if script or from_stdin then
+
+ -- run script from stdin?
+ local script_file_to_remove
+ if from_stdin then
+ local script_path = _get_script_from_stdin()
+ if script_path then
+ script = script_path
+ script_file_to_remove = script_path
+ end
+ end
+
+ if script then
+ run_script(script, {
+ curdir = os.workingdir(),
+ verbose = option.get("verbose"),
+ diagnosis = option.get("diagnosis"),
+ command = option.get("command"),
+ arguments = arguments,
+ deserialize = option.get("deserialize")})
+
+ if script_file_to_remove then
+ os.tryrm(script_file_to_remove)
+ end
+ end
else
-- enter interactive mode
sandbox.interactive()
diff --git a/xmake/plugins/lua/xmake.lua b/xmake/plugins/lua/xmake.lua
index 8ef6c3573..dee1707b6 100644
--- a/xmake/plugins/lua/xmake.lua
+++ b/xmake/plugins/lua/xmake.lua
@@ -45,6 +45,11 @@ task("lua")
{'l', "list" , "k" , nil , "List all scripts." }
, {'c', "command" , "k" , nil , "Run script as command" }
, {'d', "deserialize" , "kv" , nil , "Deserialize arguments starts with given prefix" }
+ , {nil, "stdin" , "k" , nil , "Run script from stdin",
+ "e.g.",
+ " - echo 'print(\"hello\")' | xmake lua --stdin",
+ " - cat script.lua | xmake lua --stdin"
+ }
, {nil, "script" , "v" , nil , "Run the given lua script name, file or module and enter interactive mode if no given script.",
"e.g.",
" - xmake lua (enter interactive mode)",