aboutsummaryrefslogtreecommitdiff
path: root/lib/shell/shell.tm
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2025-04-07 18:14:20 -0400
committerBruce Hill <bruce@bruce-hill.com>2025-04-07 18:14:20 -0400
commit3efd7d9cfbd330ebb45f39648ee96a3e429a06f9 (patch)
tree29acb9e2b2370bd155fed24fba79d01b553a24f3 /lib/shell/shell.tm
parent15fabfb9be3e3620e4b96983a49017116cea40e2 (diff)
Move core libraries into their own folder
Diffstat (limited to 'lib/shell/shell.tm')
-rw-r--r--lib/shell/shell.tm44
1 files changed, 44 insertions, 0 deletions
diff --git a/lib/shell/shell.tm b/lib/shell/shell.tm
new file mode 100644
index 00000000..da03f843
--- /dev/null
+++ b/lib/shell/shell.tm
@@ -0,0 +1,44 @@
+use commands
+
+lang Shell
+ convert(text:Text -> Shell)
+ return Shell.from_text("'" ++ text.replace($/'/, `'"'"'`) ++ "'")
+
+ convert(texts:[Text] -> Shell)
+ return Shell.from_text(" ".join([Shell(t).text for t in texts]))
+
+ convert(path:Path -> Shell)
+ return Shell(Text(path.expand_home()))
+
+ convert(paths:[Path] -> Shell)
+ return Shell.from_text(" ".join([Shell(Text(p)).text for p in paths]))
+
+ convert(n:Int -> Shell) return Shell.from_text(Text(n))
+ convert(n:Int64 -> Shell) return Shell.from_text(Text(n))
+ convert(n:Int32 -> Shell) return Shell.from_text(Text(n))
+ convert(n:Int16 -> Shell) return Shell.from_text(Text(n))
+ convert(n:Int8 -> Shell) return Shell.from_text(Text(n))
+ convert(n:Num -> Shell) return Shell.from_text(Text(n))
+ convert(n:Num32 -> Shell) return Shell.from_text(Text(n))
+
+ func command(shell:Shell -> Command)
+ return Command("sh", ["-c", shell.text])
+
+ func result(shell:Shell, input="", input_bytes:[Byte]=[] -> ProgramResult)
+ return shell.command().result(input=input, input_bytes=input_bytes)
+
+ func run(shell:Shell -> ExitType)
+ return shell.command().run()
+
+ func get_output(shell:Shell, input="", trim_newline=yes -> Text?)
+ return shell.command().get_output(input=input, trim_newline=trim_newline)
+
+ func get_output_bytes(shell:Shell, input="", input_bytes:[Byte]=[] -> [Byte]?)
+ return shell.command().get_output_bytes(input=input, input_bytes=input_bytes)
+
+ func by_line(shell:Shell -> func(->Text?)?)
+ return shell.command().by_line()
+
+func main(command:Shell)
+ for line in command.by_line()!
+ >> line