summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/jesseduffield
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/jesseduffield')
-rw-r--r--vendor/github.com/jesseduffield/gocui/escape.go21
-rw-r--r--vendor/github.com/jesseduffield/gocui/gui.go49
-rw-r--r--vendor/github.com/jesseduffield/gocui/gui_others.go18
-rw-r--r--vendor/github.com/jesseduffield/gocui/gui_windows.go10
-rw-r--r--vendor/github.com/jesseduffield/gocui/keybinding.go4
-rw-r--r--vendor/github.com/jesseduffield/gocui/view.go4
6 files changed, 45 insertions, 61 deletions
diff --git a/vendor/github.com/jesseduffield/gocui/escape.go b/vendor/github.com/jesseduffield/gocui/escape.go
index 64c6b4448..b52c21495 100644
--- a/vendor/github.com/jesseduffield/gocui/escape.go
+++ b/vendor/github.com/jesseduffield/gocui/escape.go
@@ -322,27 +322,6 @@ func (ei *escapeInterpreter) csiColor(param []string) (color Attribute, skip int
}
}
-// splitFgBg splits foreground and background color according to ANSI sequence.
-//
-// num (number of segments in ansi) is used to determine if it's 256 mode or rgb mode (3 - 256-color, 5 - rgb-color)
-func splitFgBg(params []string, num int) [][]string {
- var out [][]string
- var current []string
- for _, p := range params {
- if len(current) == num && (p == "48" || p == "38") {
- out = append(out, current)
- current = []string{}
- }
- current = append(current, p)
- }
-
- if len(current) > 0 {
- out = append(out, current)
- }
-
- return out
-}
-
func getFontEffect(f int) Attribute {
switch fontEffect(f) {
case bold:
diff --git a/vendor/github.com/jesseduffield/gocui/gui.go b/vendor/github.com/jesseduffield/gocui/gui.go
index 889839c45..e2593b985 100644
--- a/vendor/github.com/jesseduffield/gocui/gui.go
+++ b/vendor/github.com/jesseduffield/gocui/gui.go
@@ -172,6 +172,8 @@ type Gui struct {
NextSearchMatchKey interface{}
PrevSearchMatchKey interface{}
+ ErrorHandler func(error) error
+
screen tcell.Screen
suspendedMutex sync.Mutex
suspended bool
@@ -661,7 +663,7 @@ func (g *Gui) updateAsyncAux(f func(*Gui) error, task Task) {
// consider itself 'busy` as it runs the code. Don't use for long-running
// background goroutines where you wouldn't want lazygit to be considered busy
// (i.e. when you wouldn't want a loader to be shown to the user)
-func (g *Gui) OnWorker(f func(Task)) {
+func (g *Gui) OnWorker(f func(Task) error) {
task := g.NewTask()
go func() {
g.onWorkerAux(f, task)
@@ -669,7 +671,7 @@ func (g *Gui) OnWorker(f func(Task)) {
}()
}
-func (g *Gui) onWorkerAux(f func(Task), task Task) {
+func (g *Gui) onWorkerAux(f func(Task) error, task Task) {
panicking := true
defer func() {
if panicking && Screen != nil {
@@ -677,9 +679,15 @@ func (g *Gui) onWorkerAux(f func(Task), task Task) {
}
}()
- f(task)
+ err := f(task)
panicking = false
+
+ if err != nil {
+ g.Update(func(g *Gui) error {
+ return err
+ })
+ }
}
// A Manager is in charge of GUI's layout and can be used to build widgets.
@@ -745,19 +753,27 @@ func (g *Gui) MainLoop() error {
}
}
+func (g *Gui) handleError(err error) error {
+ if err != nil && !IsQuit(err) && g.ErrorHandler != nil {
+ return g.ErrorHandler(err)
+ }
+
+ return err
+}
+
func (g *Gui) processEvent() error {
select {
case ev := <-g.gEvents:
task := g.NewTask()
defer func() { task.Done() }()
- if err := g.handleEvent(&ev); err != nil {
+ if err := g.handleError(g.handleEvent(&ev)); err != nil {
return err
}
case ev := <-g.userEvents:
defer func() { ev.task.Done() }()
- if err := ev.f(g); err != nil {
+ if err := g.handleError(ev.f(g)); err != nil {
return err
}
}
@@ -777,11 +793,11 @@ func (g *Gui) processRemainingEvents() error {
for {
select {
case ev := <-g.gEvents:
- if err := g.handleEvent(&ev); err != nil {
+ if err := g.handleError(g.handleEvent(&ev)); err != nil {
return err
}
case ev := <-g.userEvents:
- err := ev.f(g)
+ err := g.handleError(ev.f(g))
ev.task.Done()
if err != nil {
return err
@@ -815,17 +831,6 @@ func (g *Gui) onResize() {
// g.screen.Sync()
}
-func (g *Gui) clear(fg, bg Attribute) (int, int) {
- st := getTcellStyle(oldStyle{fg: fg, bg: bg, outputMode: g.outputMode})
- w, h := Screen.Size()
- for row := 0; row < h; row++ {
- for col := 0; col < w; col++ {
- Screen.SetContent(col, row, ' ', nil, st)
- }
- }
- return w, h
-}
-
// drawFrameEdges draws the horizontal and vertical edges of a view.
func (g *Gui) drawFrameEdges(v *View, fgColor, bgColor Attribute) error {
runeH, runeV := '─', '│'
@@ -1397,7 +1402,7 @@ func (g *Gui) execKeybindings(v *View, ev *GocuiEvent) (matched bool, err error)
var matchingParentViewKb *keybinding
// if we're searching, and we've hit n/N/Esc, we ignore the default keybinding
- if v != nil && v.IsSearching() && Modifier(ev.Mod) == ModNone {
+ if v != nil && v.IsSearching() && ev.Mod == ModNone {
if eventMatchesKey(ev, g.NextSearchMatchKey) {
return true, v.gotoNextMatch()
} else if eventMatchesKey(ev, g.PrevSearchMatchKey) {
@@ -1417,7 +1422,7 @@ func (g *Gui) execKeybindings(v *View, ev *GocuiEvent) (matched bool, err error)
if kb.handler == nil {
continue
}
- if !kb.matchKeypress(Key(ev.Key), ev.Ch, Modifier(ev.Mod)) {
+ if !kb.matchKeypress(ev.Key, ev.Ch, ev.Mod) {
continue
}
if g.matchView(v, kb) {
@@ -1435,7 +1440,7 @@ func (g *Gui) execKeybindings(v *View, ev *GocuiEvent) (matched bool, err error)
}
if g.currentView != nil && g.currentView.Editable && g.currentView.Editor != nil {
- matched := g.currentView.Editor.Edit(g.currentView, Key(ev.Key), ev.Ch, Modifier(ev.Mod))
+ matched := g.currentView.Editor.Edit(g.currentView, ev.Key, ev.Ch, ev.Mod)
if matched {
return true, nil
}
@@ -1550,7 +1555,7 @@ func (g *Gui) matchView(v *View, kb *keybinding) bool {
if v == nil {
return false
}
- if v.Editable == true && kb.ch != 0 {
+ if v.Editable && kb.ch != 0 {
return false
}
if kb.viewName != v.name {
diff --git a/vendor/github.com/jesseduffield/gocui/gui_others.go b/vendor/github.com/jesseduffield/gocui/gui_others.go
index 578686fd6..f0de7822a 100644
--- a/vendor/github.com/jesseduffield/gocui/gui_others.go
+++ b/vendor/github.com/jesseduffield/gocui/gui_others.go
@@ -46,16 +46,14 @@ func (g *Gui) getTermWindowSize() (int, int, error) {
return termw, termh, nil
}
- select {
- case signal := <-signalCh:
- switch signal {
- // when the terminal window size is changed
- case syscall.SIGWINCH:
- continue
- // ctrl + c to cancel
- case syscall.SIGINT:
- return 0, 0, errors.New("stop to get term window size")
- }
+ signal := <-signalCh
+ switch signal {
+ // when the terminal window size is changed
+ case syscall.SIGWINCH:
+ continue
+ // ctrl + c to cancel
+ case syscall.SIGINT:
+ return 0, 0, errors.New("stop to get term window size")
}
}
}
diff --git a/vendor/github.com/jesseduffield/gocui/gui_windows.go b/vendor/github.com/jesseduffield/gocui/gui_windows.go
index f643fdb33..56c54570c 100644
--- a/vendor/github.com/jesseduffield/gocui/gui_windows.go
+++ b/vendor/github.com/jesseduffield/gocui/gui_windows.go
@@ -13,10 +13,12 @@ import (
"unsafe"
)
-type wchar uint16
-type short int16
-type dword uint32
-type word uint16
+type (
+ wchar uint16
+ short int16
+ dword uint32
+ word uint16
+)
type coord struct {
x short
diff --git a/vendor/github.com/jesseduffield/gocui/keybinding.go b/vendor/github.com/jesseduffield/gocui/keybinding.go
index e2b931d7e..0d2cecc68 100644
--- a/vendor/github.com/jesseduffield/gocui/keybinding.go
+++ b/vendor/github.com/jesseduffield/gocui/keybinding.go
@@ -105,7 +105,7 @@ func newKeybinding(viewname string, key Key, ch rune, mod Modifier, handler func
func eventMatchesKey(ev *GocuiEvent, key interface{}) bool {
// assuming ModNone for now
- if Modifier(ev.Mod) != ModNone {
+ if ev.Mod != ModNone {
return false
}
@@ -114,7 +114,7 @@ func eventMatchesKey(ev *GocuiEvent, key interface{}) bool {
return false
}
- return k == Key(ev.Key) && ch == ev.Ch
+ return k == ev.Key && ch == ev.Ch
}
// matchKeypress returns if the keybinding matches the keypress.
diff --git a/vendor/github.com/jesseduffield/gocui/view.go b/vendor/github.com/jesseduffield/gocui/view.go
index 6bfc4c487..a84e1b0ce 100644
--- a/vendor/github.com/jesseduffield/gocui/view.go
+++ b/vendor/github.com/jesseduffield/gocui/view.go
@@ -767,7 +767,7 @@ func (v *View) writeString(s string) {
// parseInput parses char by char the input written to the View. It returns nil
// while processing ESC sequences. Otherwise, it returns a cell slice that
// contains the processed data.
-func (v *View) parseInput(ch rune, x int, y int) (bool, []cell) {
+func (v *View) parseInput(ch rune, x int, _ int) (bool, []cell) {
cells := []cell{}
moveCursor := true
@@ -1283,7 +1283,7 @@ func (v *View) Word(x, y int) (string, error) {
} else {
nr = nr + x
}
- return string(str[nl:nr]), nil
+ return str[nl:nr], nil
}
// indexFunc allows to split lines by words taking into account spaces