diff options
| author | ruki <[email protected]> | 2026-02-03 12:10:22 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-02-03 12:10:22 +0800 |
| commit | 1bcce9d85f07cae1f7ac9f3a3099047539d26c84 (patch) | |
| tree | 1516224d2d661413fe5e786a67a83484784b2d76 /xmake/plugins/lua | |
| parent | 84ecebb4e9beaef3d046617c9c5ae3c1714a4aa8 (diff) | |
| parent | 7a9f668793b387efc3d657ceedbd0ab913dab4e0 (diff) | |
Merge pull request #7284 from luadebug/stdin
Add `--stdin`
Diffstat (limited to 'xmake/plugins/lua')
| -rw-r--r-- | xmake/plugins/lua/main.lua | 51 | ||||
| -rw-r--r-- | xmake/plugins/lua/xmake.lua | 5 |
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)", |
