summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/jesseduffield/gocui/view.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/jesseduffield/gocui/view.go')
-rw-r--r--vendor/github.com/jesseduffield/gocui/view.go41
1 files changed, 40 insertions, 1 deletions
diff --git a/vendor/github.com/jesseduffield/gocui/view.go b/vendor/github.com/jesseduffield/gocui/view.go
index 9d6553cbc..35ffa71ba 100644
--- a/vendor/github.com/jesseduffield/gocui/view.go
+++ b/vendor/github.com/jesseduffield/gocui/view.go
@@ -80,6 +80,9 @@ type View struct {
// If Frame is true, Title allows to configure a title for the view.
Title string
+ Tabs []string
+ TabIndex int
+
// If Frame is true, Subtitle allows to configure a subtitle for the view.
Subtitle string
@@ -94,6 +97,12 @@ type View struct {
HasLoader bool
writeMutex sync.Mutex
+
+ // IgnoreCarriageReturns tells us whether to ignore '\r' characters
+ IgnoreCarriageReturns bool
+
+ // ParentView is the view which catches events bubbled up from the given view if there's no matching handler
+ ParentView *View
}
type viewLine struct {
@@ -190,7 +199,7 @@ func (v *View) setRune(x, y int, ch rune, fgColor, bgColor Attribute) error {
func (v *View) SetCursor(x, y int) error {
maxX, maxY := v.Size()
if x < 0 || x >= maxX || y < 0 || y >= maxY {
- return errors.New("invalid point")
+ return nil
}
v.cx = x
v.cy = y
@@ -235,6 +244,9 @@ func (v *View) Write(p []byte) (n int, err error) {
case '\n':
v.lines = append(v.lines, nil)
case '\r':
+ if v.IgnoreCarriageReturns {
+ continue
+ }
nl := len(v.lines)
if nl > 0 {
v.lines[nl-1] = nil
@@ -421,7 +433,11 @@ func (v *View) realPosition(vx, vy int) (x, y int, err error) {
// Clear empties the view's internal buffer.
func (v *View) Clear() {
+ v.writeMutex.Lock()
+ defer v.writeMutex.Unlock()
+
v.tainted = true
+ v.ei.reset()
v.lines = nil
v.viewLines = nil
@@ -470,10 +486,16 @@ func (v *View) ViewBufferLines() []string {
return lines
}
+// LinesHeight is the count of view lines (i.e. lines excluding wrapping)
func (v *View) LinesHeight() int {
return len(v.lines)
}
+// ViewLinesHeight is the count of view lines (i.e. lines including wrapping)
+func (v *View) ViewLinesHeight() int {
+ return len(v.viewLines)
+}
+
// ViewBuffer returns a string with the contents of the view's buffer that is
// shown to the user.
func (v *View) ViewBuffer() string {
@@ -614,3 +636,20 @@ func Loader() cell {
func (v *View) IsTainted() bool {
return v.tainted
}
+
+// GetClickedTabIndex tells us which tab was clicked
+func (v *View) GetClickedTabIndex(x int) int {
+ if len(v.Tabs) <= 1 {
+ return 0
+ }
+
+ charIndex := 0
+ for i, tab := range v.Tabs {
+ charIndex += len(tab + " - ")
+ if x < charIndex {
+ return i
+ }
+ }
+
+ return 0
+}