Skip to content

Commit e4b35a8

Browse files
committed
recognize bang of :wq command to quit on unsaved changes
1 parent f498478 commit e4b35a8

File tree

2 files changed

+44
-2
lines changed

2 files changed

+44
-2
lines changed

editor/editor_test.go

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ func TestEditorOpenWriteQuit(t *testing.T) {
171171
}
172172
}
173173

174-
func TestEditorOpenForceQuit(t *testing.T) {
174+
func TestEditorOpenQuitBang(t *testing.T) {
175175
ui := newTestUI()
176176
editor := NewEditor(ui, window.NewManager(), cmdline.NewCmdline())
177177
if err := editor.Init(); err != nil {
@@ -200,6 +200,48 @@ func TestEditorOpenForceQuit(t *testing.T) {
200200
}
201201
}
202202

203+
func TestEditorOpenWriteQuitBang(t *testing.T) {
204+
ui := newTestUI()
205+
editor := NewEditor(ui, window.NewManager(), cmdline.NewCmdline())
206+
if err := editor.Init(); err != nil {
207+
t.Fatalf("err should be nil but got: %v", err)
208+
}
209+
f, err := createTemp(t.TempDir(), "ab")
210+
if err != nil {
211+
t.Fatalf("err should be nil but got: %v", err)
212+
}
213+
if err := editor.Open(f.Name()); err != nil {
214+
t.Fatalf("err should be nil but got: %v", err)
215+
}
216+
go func() {
217+
ui.Emit(event.Event{Type: event.SwitchFocus})
218+
ui.Emit(event.Event{Type: event.StartAppendEnd})
219+
ui.Emit(event.Event{Type: event.Rune, Rune: 'c'})
220+
ui.Emit(event.Event{Type: event.ExitInsert})
221+
ui.Emit(event.Event{Type: event.WriteQuit, Arg: f.Name() + ".out", Bang: true})
222+
}()
223+
if err := editor.Run(); err != nil {
224+
t.Errorf("err should be nil but got: %v", err)
225+
}
226+
if err := editor.Close(); err != nil {
227+
t.Errorf("err should be nil but got: %v", err)
228+
}
229+
bs, err := os.ReadFile(f.Name())
230+
if err != nil {
231+
t.Errorf("err should be nil but got: %v", err)
232+
}
233+
if expected := "ab"; string(bs) != expected {
234+
t.Errorf("file contents should be %q but got %q", expected, string(bs))
235+
}
236+
bs, err = os.ReadFile(f.Name() + ".out")
237+
if err != nil {
238+
t.Errorf("err should be nil but got: %v", err)
239+
}
240+
if expected := "abc"; string(bs) != expected {
241+
t.Errorf("file contents should be %q but got %q", expected, string(bs))
242+
}
243+
}
244+
203245
func TestEditorReadWriteQuit(t *testing.T) {
204246
ui := newTestUI()
205247
editor := NewEditor(ui, window.NewManager(), cmdline.NewCmdline())

window/manager.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ func (m *Manager) Emit(e event.Event) {
384384
case event.WriteQuit:
385385
if _, _, err := m.write(e); err != nil {
386386
m.eventCh <- event.Event{Type: event.Error, Error: err}
387-
} else if err := m.quit(event.Event{}); err != nil {
387+
} else if err := m.quit(event.Event{Bang: e.Bang}); err != nil {
388388
m.eventCh <- event.Event{Type: event.Error, Error: err}
389389
}
390390
default:

0 commit comments

Comments
 (0)