初次提交
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
# readline-im
|
||||
|
||||

|
||||
@@ -0,0 +1,60 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"time"
|
||||
|
||||
"github.com/chzyer/readline"
|
||||
)
|
||||
import "log"
|
||||
|
||||
func main() {
|
||||
rl, err := readline.NewEx(&readline.Config{
|
||||
UniqueEditLine: true,
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer rl.Close()
|
||||
|
||||
rl.SetPrompt("username: ")
|
||||
username, err := rl.Readline()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
rl.ResetHistory()
|
||||
log.SetOutput(rl.Stderr())
|
||||
|
||||
fmt.Fprintln(rl, "Hi,", username+"! My name is Dave.")
|
||||
rl.SetPrompt(username + "> ")
|
||||
|
||||
done := make(chan struct{})
|
||||
go func() {
|
||||
rand.Seed(time.Now().Unix())
|
||||
loop:
|
||||
for {
|
||||
select {
|
||||
case <-time.After(time.Duration(rand.Intn(20)) * 100 * time.Millisecond):
|
||||
case <-done:
|
||||
break loop
|
||||
}
|
||||
log.Println("Dave:", "hello")
|
||||
}
|
||||
log.Println("Dave:", "bye")
|
||||
done <- struct{}{}
|
||||
}()
|
||||
|
||||
for {
|
||||
ln := rl.Line()
|
||||
if ln.CanContinue() {
|
||||
continue
|
||||
} else if ln.CanBreak() {
|
||||
break
|
||||
}
|
||||
log.Println(username+":", ln.Line)
|
||||
}
|
||||
rl.Clean()
|
||||
done <- struct{}{}
|
||||
<-done
|
||||
}
|
||||
Reference in New Issue
Block a user