diff options
Diffstat (limited to 'termui/termui.go')
-rw-r--r-- | termui/termui.go | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/termui/termui.go b/termui/termui.go index 45952705..5c39869b 100644 --- a/termui/termui.go +++ b/termui/termui.go @@ -4,6 +4,7 @@ package termui import ( "github.com/MichaelMure/git-bug/cache" "github.com/MichaelMure/git-bug/input" + "github.com/MichaelMure/git-bug/util/git" "github.com/jroimartin/gocui" "github.com/pkg/errors" ) @@ -230,6 +231,41 @@ func addCommentWithEditor(bug *cache.BugCache) error { return errTerminateMainloop } +func editCommentWithEditor(bug *cache.BugCache, target git.Hash, preMessage string) error { + // This is somewhat hacky. + // As there is no way to pause gocui, run the editor and restart gocui, + // we have to stop it entirely and start a new one later. + // + // - an error channel is used to route the returned error of this new + // instance into the original launch function + // - a custom error (errTerminateMainloop) is used to terminate the original + // instance's mainLoop. This error is then filtered. + + ui.g.Close() + ui.g = nil + + message, err := input.BugCommentEditorInput(ui.cache, preMessage) + if err != nil && err != input.ErrEmptyMessage { + return err + } + + if err == input.ErrEmptyMessage { + // TODO: Allow comments to be deleted? + ui.msgPopup.Activate(msgPopupErrorTitle, "Empty message, aborting.") + } else if message == preMessage { + ui.msgPopup.Activate(msgPopupErrorTitle, "No changes found, aborting.") + } else { + err := bug.EditComment(target, message) + if err != nil { + return err + } + } + + initGui(nil) + + return errTerminateMainloop +} + func setTitleWithEditor(bug *cache.BugCache) error { // This is somewhat hacky. // As there is no way to pause gocui, run the editor and restart gocui, |