func New(args []string) *cli { if len(args) > 1 { return nil } // We assume the terminal starts in cooked mode. cooked, _ = liner.TerminalMode() if cooked == nil { return nil } i := &cli{liner.NewLiner()} if history_path, err := task.GetHistoryFilePath(); err == nil { if f, err := os.Open(history_path); err == nil { i.ReadHistory(f) f.Close() } } uncooked, _ = liner.TerminalMode() i.SetCtrlCAborts(true) i.SetTabCompletionStyle(liner.TabPrints) i.SetWordCompleter(complete) return i }
func LaunchForegroundTask() { if task0 != nil { mode, _ := liner.TerminalMode() task0.Job.mode = mode } task0 = NewTask(Cons(nil, Null), nil, nil, nil) go task0.Listen() }
func newUserInputReader() *userInputReader { r := new(userInputReader) // Get the original mode before calling NewLiner. // This is usually regular "cooked" mode where characters echo. normalMode, _ := liner.TerminalMode() // Turn on liner. It switches to raw mode. r.State = liner.NewLiner() rawMode, err := liner.TerminalMode() if err != nil || !liner.TerminalSupported() { r.supported = false } else { r.supported = true r.normalMode = normalMode r.rawMode = rawMode // Switch back to normal mode while we're not prompting. normalMode.ApplyMode() } return r }
func New(args []string) *cli { if len(args) > 1 { return nil } // We assume the terminal starts in cooked mode. cooked, _ = liner.TerminalMode() if cooked == nil { return nil } i := &cli{liner.NewLiner()} uncooked, _ = liner.TerminalMode() i.SetCtrlCAborts(true) i.SetTabCompletionStyle(liner.TabPrints) i.SetWordCompleter(complete) return i }
// newTerminalPrompter creates a liner based user input prompter working off the // standard input and output streams. func newTerminalPrompter() *terminalPrompter { p := new(terminalPrompter) // Get the original mode before calling NewLiner. // This is usually regular "cooked" mode where characters echo. normalMode, _ := liner.TerminalMode() // Turn on liner. It switches to raw mode. p.State = liner.NewLiner() rawMode, err := liner.TerminalMode() if err != nil || !liner.TerminalSupported() { p.supported = false } else { p.supported = true p.normalMode = normalMode p.rawMode = rawMode // Switch back to normal mode while we're not prompting. normalMode.ApplyMode() } p.SetCtrlCAborts(true) p.SetTabCompletionStyle(liner.TabPrints) return p }
func NewPrompter() *Prompter { origMode, err := liner.TerminalMode() if err != nil { panic(err) } p := &Prompter{ prompt: "zygo> ", prompter: liner.NewLiner(), origMode: origMode, } rawMode, err := liner.TerminalMode() if err != nil { panic(err) } p.rawMode = rawMode p.prompter.SetCtrlCAborts(false) //p.prompter.SetTabCompletionStyle(liner.TabPrints) p.prompter.SetCompleter(func(line string) (c []string) { for _, n := range completion_keywords { if strings.HasPrefix(n, strings.ToLower(line)) { c = append(c, n) } } return }) if f, err := os.Open(history_fn); err == nil { p.prompter.ReadHistory(f) f.Close() } return p }
func NewJob() *Job { mode, _ := liner.TerminalMode() return &Job{&sync.Mutex{}, "", 0, mode} }
func (i *cli) TerminalMode() (task.ApplyModer, error) { return liner.TerminalMode() }