on master help sign in
- Add option to color stderr red.
c8be73dRob Blanckaert
src/main.go+31
@@ -3,18 +3,32 @@ package main
3import (
3import (
4 "flag"
4 "flag"
5 "fmt"
5 "fmt"
6+ "io"
6 "os"
7 "os"
7 "strings"
8 "strings"
9+ "syscall"
8)
10)
9
11
10var ps1, ps2 string
12var ps1, ps2 string
11
13
14+type Red struct {
15+ parent io.Writer
16+}
17+
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")))
22+ return n, err
23+}
24+
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
18
32
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")
48+
49+ flag.BoolVar(&colorizeStderr, "R", false, "color standard error red")
50+
34 flag.Parse()
51 flag.Parse()
35
52
36 args := flag.Args()
53 args := flag.Args()
@@ -47,6 +64,20 @@ func main() {
47 fmt.Println(lang.Version())
64 fmt.Println(lang.Version())
48 }
65 }
49
66
67+ if colorizeStderr {
68+ var pipes [2]int
69+ newStderr, err := syscall.Dup(2)
70+ if err != nil {
71+ panic(err)
72+ }
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")
78+ go io.Copy(o, i)
79+ }
80+
50 if code != "" {
81 if code != "" {
51 lang.Eval(code)
82 lang.Eval(code)
52 }
83 }