@@ -3,18 +3,32 @@ package main
10var ps1, ps2 string
12var ps1, ps2 string
18+func (r *Red) Write(p []byte) (n int, err error) {
19+ r.parent.Write(([]byte("\033[31m")))
20+ n, err = r.parent.Write(p)
21+ r.parent.Write(([]byte("\033[0m")))
12func main() {
25func main() {
13 var language string
26 var language string
14 var interactive, ourInteractive bool
27 var interactive, ourInteractive bool
15 var code string
28 var code string
16 var quiet bool
29 var quiet bool
17 var exp string
30 var exp string
31+ var colorizeStderr bool
19 defaultLangague := os.Args[0]
33 defaultLangague := os.Args[0]
20 if defaultLangague == "prybar" || strings.ContainsAny(defaultLangague, "./") {
34 if defaultLangague == "prybar" || strings.ContainsAny(defaultLangague, "./") {
@@ -31,6 +45,9 @@ func main() {
31 flag.BoolVar(&interactive, "i", false, "interactive")
45 flag.BoolVar(&interactive, "i", false, "interactive")
32 flag.BoolVar(&ourInteractive, "I", false, "like -i, but never use language REPL")
46 flag.BoolVar(&ourInteractive, "I", false, "like -i, but never use language REPL")
33 flag.BoolVar(&quiet, "q", false, "quiet")
47 flag.BoolVar(&quiet, "q", false, "quiet")
49+ flag.BoolVar(&colorizeStderr, "R", false, "color standard error red")
34 flag.Parse()
51 flag.Parse()
36 args := flag.Args()
53 args := flag.Args()
@@ -47,6 +64,20 @@ func main() {
47 fmt.Println(lang.Version())
64 fmt.Println(lang.Version())
69+ newStderr, err := syscall.Dup(2)
73+ syscall.Pipe(pipes[:])
74+ syscall.Dup2(pipes[1], 2)
75+ syscall.Close(pipes[1])
76+ o := &Red{parent: os.NewFile(uintptr(newStderr), "o")}
77+ i := os.NewFile(uintptr(pipes[0]), "i")
50 if code != "" {
81 if code != "" {
51 lang.Eval(code)
82 lang.Eval(code)