/
context.go
51 lines (41 loc) · 859 Bytes
/
context.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package app
import (
"flag"
"fmt"
"io"
"github.com/icexin/eggos/fs"
"github.com/icexin/eggos/fs/chdir"
"github.com/peterh/liner"
)
type Context struct {
Args []string
Stdin io.Reader
Stdout io.Writer
Stderr io.Writer
*chdir.Chdirfs
flag *flag.FlagSet
liner *liner.State
}
func (c *Context) Init() {
c.Chdirfs = chdir.New(fs.Root)
}
func (c *Context) Printf(fmtstr string, args ...interface{}) {
fmt.Fprintf(c.Stdout, fmtstr, args...)
}
func (c *Context) Flag() *flag.FlagSet {
if c.flag != nil {
return c.flag
}
c.flag = flag.NewFlagSet(c.Args[0], flag.ContinueOnError)
return c.flag
}
func (c *Context) ParseFlags() error {
return c.Flag().Parse(c.Args[1:])
}
func (c *Context) LineReader() LineReader {
_, ok := c.Stdin.(fs.Ioctler)
if !ok {
return newSimpleLineReader(c.Stdin, c.Stdout)
}
return newLineEditor()
}