diff options
Diffstat (limited to 'vendor/github.com/jesseduffield')
-rw-r--r-- | vendor/github.com/jesseduffield/gocui/escape.go | 21 | ||||
-rw-r--r-- | vendor/github.com/jesseduffield/gocui/gui.go | 49 | ||||
-rw-r--r-- | vendor/github.com/jesseduffield/gocui/gui_others.go | 18 | ||||
-rw-r--r-- | vendor/github.com/jesseduffield/gocui/gui_windows.go | 10 | ||||
-rw-r--r-- | vendor/github.com/jesseduffield/gocui/keybinding.go | 4 | ||||
-rw-r--r-- | vendor/github.com/jesseduffield/gocui/view.go | 4 |
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 |