diff --git a/go.mod b/go.mod index 6172ba0..9195fbe 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.13 require ( github.com/alecthomas/chroma v0.8.0 // indirect - github.com/charmbracelet/bubbles v0.7.5 + github.com/charmbracelet/bubbles v0.7.6-0.20201212003737-11f56f9b6b3f github.com/charmbracelet/bubbletea v0.12.2 github.com/charmbracelet/charm v0.8.2 github.com/charmbracelet/glamour v0.2.1-0.20200829234023-6c0e29c4dae5 diff --git a/go.sum b/go.sum index 024a2d0..ed81a33 100644 --- a/go.sum +++ b/go.sum @@ -43,8 +43,8 @@ github.com/calmh/randomart v1.1.0 h1:evl+iwc10LXtHdMZhzLxmsCQVmWnkXs44SbC6Uk0Il8 github.com/calmh/randomart v1.1.0/go.mod h1:DQUbPVyP+7PAs21w/AnfMKG5NioxS3TbZ2F9MSK/jFM= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/charmbracelet/bubbles v0.6.0/go.mod h1:MxySU+YRGbAhZQJavZlW2os+fIeOW69MI3iXqA+2/WA= -github.com/charmbracelet/bubbles v0.7.5 h1:N6TiahuRt2iGNE5gYxKBQ5/C6Lc8xxSp5LY9QJ09mS4= -github.com/charmbracelet/bubbles v0.7.5/go.mod h1:IRTORFvhEI6OUH7WhN2Ks8Z8miNGimk1BE6cmHijOkM= +github.com/charmbracelet/bubbles v0.7.6-0.20201212003737-11f56f9b6b3f h1:6g/MQxdygWh8Ga0c5uR1Z8uz5wa3uaQjW0Hive/XBWw= +github.com/charmbracelet/bubbles v0.7.6-0.20201212003737-11f56f9b6b3f/go.mod h1:0D4XRYK0tjo8JMvflz1obpVcOikNZSG46SFauoZj22s= github.com/charmbracelet/bubbletea v0.10.3/go.mod h1:fB1bVmlaXBYYv4G0jtuGSP/m8V2sMM97pq7QqQnubWI= github.com/charmbracelet/bubbletea v0.10.5/go.mod h1:Nay5oWkkSZvc6E/be+W3nDFXAsVytNUNKV9jbXcuae0= github.com/charmbracelet/bubbletea v0.12.2 h1:y9Yo2Pv8tcm3mAJsWONGsmHhzrbNxJVxpVtemikxE9A= @@ -241,8 +241,6 @@ github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94 h1:G04eS0JkA github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94/go.mod h1:b18R55ulyQ/h3RaWyloPyER7fWQVZvimKKhnI5OfrJQ= github.com/sahilm/fuzzy v0.1.0 h1:FzWGaw2Opqyu+794ZQ9SYifWv2EIXpwP4q8dY1kDAwI= github.com/sahilm/fuzzy v0.1.0/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y= -github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/segmentio/ksuid v1.0.3 h1:FoResxvleQwYiPAVKe1tMUlEirodZqlqglIuFsdDntY= github.com/segmentio/ksuid v1.0.3/go.mod h1:/XUiZBD3kVx5SmUOl55voK5yeAbBNNIed+2O73XgrPE= diff --git a/ui/stash.go b/ui/stash.go index c698ce8..0163f16 100644 --- a/ui/stash.go +++ b/ui/stash.go @@ -26,6 +26,7 @@ const ( stashViewTopPadding = 5 // logo, status bar, gaps stashViewBottomPadding = 3 // pagination and gaps, but not help stashViewHorizontalPadding = 6 + stashedStatusMessage = "Stashed!" ) var ( @@ -111,19 +112,20 @@ const ( ) type stashModel struct { - common *commonModel - err error - spinner spinner.Model - noteInput textinput.Model - filterInput textinput.Model - stashFullyLoaded bool // have we loaded all available stashed documents from the server? - viewState stashViewState - filterState filterState - selectionState selectionState - showFullHelp bool - showStatusMessage bool - statusMessage string - statusMessageTimer *time.Timer + common *commonModel + err error + spinner spinner.Model + noteInput textinput.Model + filterInput textinput.Model + stashFullyLoaded bool // have we loaded all available stashed documents from the server? + viewState stashViewState + filterState filterState + selectionState selectionState + showFullHelp bool + showStatusMessage bool + statusMessage string + statusMessageTimer *time.Timer + stashStatusMessageQueued bool // Available document sections we can cycle through. We use a slice, rather // than a map, because order is important. @@ -419,7 +421,7 @@ func newStashModel(common *commonModel) stashModel { sp.Spinner = spinner.Line sp.ForegroundColor = lib.SpinnerColor.String() sp.HideFor = time.Millisecond * 50 - sp.MinimumLifetime = time.Millisecond * 180 + sp.MinimumLifetime = time.Millisecond * 250 sp.Start() ni := textinput.NewModel() @@ -558,6 +560,13 @@ func (m stashModel) update(msg tea.Msg) (stashModel, tea.Cmd) { newSpinnerModel, cmd := m.spinner.Update(msg) m.spinner = newSpinnerModel cmds = append(cmds, cmd) + } else if !stashing && !spinnerVisible && m.stashStatusMessageQueued { + m.stashStatusMessageQueued = false + cmds = append(cmds, m.newStatusMessage(stashedStatusMessage)) + } + + if spinnerVisible && m.showStatusMessage { + m.hideStatusMessage() } // A note was set on a document. This may have happened in the pager so @@ -572,7 +581,14 @@ func (m stashModel) update(msg tea.Msg) (stashModel, tea.Cmd) { // Note: mechanical stuff related to stash success is handled in the parent // update function. case stashSuccessMsg: - cmds = append(cmds, m.newStatusMessage("Stashed!")) + m.spinner.Finish() + if m.spinner.Visible() { + // We want to show the 'stashed!' status message, but need to wait + // until the spinner goes away first. + m.stashStatusMessageQueued = true + } else { + cmds = append(cmds, m.newStatusMessage(stashedStatusMessage)) + } // Note: mechanical stuff related to stash failure is handled in the parent // update function. @@ -961,7 +977,7 @@ func (m stashModel) view() string { case stashStateReady: loadingIndicator := " " - if !m.localOnly() && (!m.loadingDone() || m.spinner.Visible()) { + if !m.loadingDone() || m.spinner.Visible() { loadingIndicator = m.spinner.View() }