forked from mirror/readline
support insert tag char (#74)
This commit is contained in:
parent
4ffff9f41c
commit
31eb6be473
|
@ -0,0 +1,7 @@
|
||||||
|
package readline
|
||||||
|
|
||||||
|
type TabCompleter struct{}
|
||||||
|
|
||||||
|
func (t *TabCompleter) Do([]rune, int) ([][]rune, int) {
|
||||||
|
return [][]rune{[]rune("\t")}, 0
|
||||||
|
}
|
|
@ -93,6 +93,9 @@ func (c *Config) Init() error {
|
||||||
c.EOFPrompt = ""
|
c.EOFPrompt = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if c.AutoComplete == nil {
|
||||||
|
c.AutoComplete = &TabCompleter{}
|
||||||
|
}
|
||||||
if c.FuncGetWidth == nil {
|
if c.FuncGetWidth == nil {
|
||||||
c.FuncGetWidth = GetScreenWidth
|
c.FuncGetWidth = GetScreenWidth
|
||||||
}
|
}
|
||||||
|
|
|
@ -430,7 +430,13 @@ func (r *RuneBuffer) output() []byte {
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
buf.Write([]byte(string(r.buf)))
|
for idx := range r.buf {
|
||||||
|
if r.buf[idx] == '\t' {
|
||||||
|
buf.WriteString(strings.Repeat(" ", TabWidth))
|
||||||
|
} else {
|
||||||
|
buf.WriteRune(r.buf[idx])
|
||||||
|
}
|
||||||
|
}
|
||||||
if r.isInLineEdge() {
|
if r.isInLineEdge() {
|
||||||
buf.Write([]byte(" \b"))
|
buf.Write([]byte(" \b"))
|
||||||
}
|
}
|
||||||
|
|
4
runes.go
4
runes.go
|
@ -6,6 +6,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var runes = Runes{}
|
var runes = Runes{}
|
||||||
|
var TabWidth = 4
|
||||||
|
|
||||||
type Runes struct{}
|
type Runes struct{}
|
||||||
|
|
||||||
|
@ -98,6 +99,9 @@ var doubleWidth = []*unicode.RangeTable{
|
||||||
}
|
}
|
||||||
|
|
||||||
func (Runes) Width(r rune) int {
|
func (Runes) Width(r rune) int {
|
||||||
|
if r == '\t' {
|
||||||
|
return TabWidth
|
||||||
|
}
|
||||||
if unicode.IsOneOf(zeroWidth, r) {
|
if unicode.IsOneOf(zeroWidth, r) {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue