mirror of
https://github.com/zyedidia/micro.git
synced 2026-03-16 05:47:06 +09:00
@@ -989,7 +989,7 @@ func (v *View) OpenFile(usePlugin bool) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
if v.CanClose("Continue? (yes, no, save) ") {
|
if v.CanClose("Continue? (y,n,s) ", 'y', 'n', 's') {
|
||||||
filename, canceled := messenger.Prompt("File to open: ", "Open", FileCompletion)
|
filename, canceled := messenger.Prompt("File to open: ", "Open", FileCompletion)
|
||||||
if canceled {
|
if canceled {
|
||||||
return false
|
return false
|
||||||
@@ -1285,7 +1285,7 @@ func (v *View) Quit(usePlugin bool) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Make sure not to quit if there are unsaved changes
|
// Make sure not to quit if there are unsaved changes
|
||||||
if v.CanClose("Quit anyway? (yes, no, save) ") {
|
if v.CanClose("Quit anyway? (y,n,s) ", 'y', 'n', 's') {
|
||||||
v.CloseBuffer()
|
v.CloseBuffer()
|
||||||
if len(tabs[curTab].views) > 1 {
|
if len(tabs[curTab].views) > 1 {
|
||||||
v.splitNode.Delete()
|
v.splitNode.Delete()
|
||||||
|
|||||||
@@ -124,6 +124,35 @@ func (m *Messenger) YesNoPrompt(prompt string) (bool, bool) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LetterPrompt gives the user a prompt and waits for a one letter response
|
||||||
|
func (m *Messenger) LetterPrompt(prompt string, responses ...rune) (rune, bool) {
|
||||||
|
m.Message(prompt)
|
||||||
|
|
||||||
|
_, h := screen.Size()
|
||||||
|
for {
|
||||||
|
m.Clear()
|
||||||
|
m.Display()
|
||||||
|
screen.ShowCursor(Count(m.message), h-1)
|
||||||
|
screen.Show()
|
||||||
|
event := <-events
|
||||||
|
|
||||||
|
switch e := event.(type) {
|
||||||
|
case *tcell.EventKey:
|
||||||
|
switch e.Key() {
|
||||||
|
case tcell.KeyRune:
|
||||||
|
for _, r := range responses {
|
||||||
|
if e.Rune() == r {
|
||||||
|
m.Reset()
|
||||||
|
return r, false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case tcell.KeyCtrlC, tcell.KeyCtrlQ, tcell.KeyEscape:
|
||||||
|
return ' ', true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type Completion int
|
type Completion int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|||||||
@@ -169,13 +169,13 @@ func (v *View) ScrollDown(n int) {
|
|||||||
// If there are unsaved changes, the user will be asked if the view can be closed
|
// If there are unsaved changes, the user will be asked if the view can be closed
|
||||||
// causing them to lose the unsaved changes
|
// causing them to lose the unsaved changes
|
||||||
// The message is what to print after saying "You have unsaved changes. "
|
// The message is what to print after saying "You have unsaved changes. "
|
||||||
func (v *View) CanClose(msg string) bool {
|
func (v *View) CanClose(msg string, responses ...rune) bool {
|
||||||
if v.Buf.IsModified {
|
if v.Buf.IsModified {
|
||||||
quit, canceled := messenger.Prompt("You have unsaved changes. "+msg, "Unsaved", NoCompletion)
|
char, canceled := messenger.LetterPrompt("You have unsaved changes. "+msg, responses...)
|
||||||
if !canceled {
|
if !canceled {
|
||||||
if strings.ToLower(quit) == "yes" || strings.ToLower(quit) == "y" {
|
if char == 'y' {
|
||||||
return true
|
return true
|
||||||
} else if strings.ToLower(quit) == "save" || strings.ToLower(quit) == "s" {
|
} else if char == 's' {
|
||||||
v.Save(true)
|
v.Save(true)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@@ -217,7 +217,7 @@ func (v *View) CloseBuffer() {
|
|||||||
|
|
||||||
// ReOpen reloads the current buffer
|
// ReOpen reloads the current buffer
|
||||||
func (v *View) ReOpen() {
|
func (v *View) ReOpen() {
|
||||||
if v.CanClose("Continue? (yes, no, save) ") {
|
if v.CanClose("Continue? (y,n,s) ", 'y', 'n', 's') {
|
||||||
screen.Clear()
|
screen.Clear()
|
||||||
v.Buf.ReOpen()
|
v.Buf.ReOpen()
|
||||||
v.Relocate()
|
v.Relocate()
|
||||||
|
|||||||
Reference in New Issue
Block a user