aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorJP Appel <jeanpierre.appel01@gmail.com>2025-06-26 17:28:10 -0400
committerJP Appel <jeanpierre.appel01@gmail.com>2025-06-26 17:28:10 -0400
commit9c4022e270a66d4005d5f210e43c2b62cde0525e (patch)
tree4a46c496d9d079168b4967235e5f49e36cb2b510 /pkg
parent5d30265a850ab647c89e0cae0ffce44ae3e1ce48 (diff)
Add non-interactive mode to shell, fix interactive sizing
Diffstat (limited to 'pkg')
-rw-r--r--pkg/shell/shell.go34
1 files changed, 34 insertions, 0 deletions
diff --git a/pkg/shell/shell.go b/pkg/shell/shell.go
index 19a4223..f7dc350 100644
--- a/pkg/shell/shell.go
+++ b/pkg/shell/shell.go
@@ -1,7 +1,9 @@
package shell
import (
+ "bufio"
"fmt"
+ "io"
"os"
"golang.org/x/term"
@@ -21,13 +23,45 @@ var commands = []string{
"compile",
}
+func (inter *Interpreter) runNonInteractive() error {
+ scanner := bufio.NewScanner(os.Stdin)
+ for scanner.Scan() {
+ err := scanner.Err()
+ if err != nil {
+ return err
+ }
+ tokens := inter.Tokenize(scanner.Text())
+ fatal, err := inter.Eval(os.Stdout, tokens)
+ if fatal {
+ return err
+ } else if err != nil {
+ fmt.Fprintln(os.Stderr, "Error:", err)
+ }
+ }
+ return io.EOF
+}
+
func (inter *Interpreter) Run() error {
+ if !term.IsTerminal(int(os.Stdin.Fd())) {
+ return inter.runNonInteractive()
+ }
+
+ defer fmt.Println("\nLeaving atlasi.")
+
+ width, height, err := term.GetSize(int(os.Stdin.Fd()))
+ if err != nil {
+ panic(err)
+ }
oldState, err := term.MakeRaw(int(os.Stdin.Fd()))
if err != nil {
panic(err)
}
defer term.Restore(int(os.Stdin.Fd()), oldState)
inter.term = term.NewTerminal(os.Stdin, "atlasi> ")
+
+ if err := inter.term.SetSize(width, height); err != nil {
+ panic(err)
+ }
inter.term.SetPrompt(
string(inter.term.Escape.Yellow) + "atlasi> " +
string(inter.term.Escape.Reset),