mirror of https://github.com/Hilbis/Hilbish
52 lines
983 B
Go
52 lines
983 B
Go
package readline
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"regexp"
|
|
"unicode/utf8"
|
|
|
|
"github.com/olekukonko/ts"
|
|
)
|
|
|
|
// GetTermWidth returns the width of Stdout or 80 if the width cannot be established
|
|
func GetTermWidth() (termWidth int) {
|
|
var err error
|
|
fd := int(os.Stdout.Fd())
|
|
termWidth, _, err = GetSize(fd)
|
|
if err != nil {
|
|
termWidth = 80 // The defacto standard on older terms
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// GetTermLength returns the length of the terminal
|
|
// (Y length), or 80 if it cannot be established
|
|
func GetTermLength() (termLength int) {
|
|
size, err := ts.GetSize()
|
|
if err != nil || size.Row() == 0 {
|
|
return 80
|
|
}
|
|
termLength = size.Row()
|
|
|
|
return
|
|
}
|
|
|
|
func printf(format string, a ...interface{}) {
|
|
s := fmt.Sprintf(format, a...)
|
|
print(s)
|
|
}
|
|
|
|
func print(s string) {
|
|
os.Stdout.WriteString(s)
|
|
}
|
|
|
|
var rxAnsiSgr = regexp.MustCompile("\x1b\\[[:;0-9]+m")
|
|
|
|
// Gets the number of runes in a string
|
|
func strLen(s string) int {
|
|
s = rxAnsiSgr.ReplaceAllString(s, "")
|
|
return utf8.RuneCountInString(s)
|
|
}
|