Disallow quitting on last view if unsaved changes present.

pull/11/head
Blaž Hrastnik 4 years ago
parent c0a8b81487
commit 243456a583

@ -664,7 +664,7 @@ pub fn _search_next(cx: &mut Context, extend: bool) {
let query = query.first().unwrap(); let query = query.first().unwrap();
let (view, doc) = cx.current(); let (view, doc) = cx.current();
let contents = doc.text().slice(..).to_string(); let contents = doc.text().slice(..).to_string();
let regex = Regex::new(&query).unwrap(); let regex = Regex::new(query).unwrap();
_search(doc, view, &contents, &regex, extend); _search(doc, view, &contents, &regex, extend);
} }
} }
@ -809,7 +809,7 @@ pub fn append_mode(cx: &mut Context) {
doc.set_selection(view.id, selection); doc.set_selection(view.id, selection);
} }
const COMMAND_LIST: &[&str] = &["write", "open", "quit"]; const COMMAND_LIST: &[&str] = &["write", "open", "quit", "quit!"];
pub fn command_mode(cx: &mut Context) { pub fn command_mode(cx: &mut Context) {
let prompt = Prompt::new( let prompt = Prompt::new(
@ -856,6 +856,31 @@ pub fn command_mode(cx: &mut Context) {
match *parts.as_slice() { match *parts.as_slice() {
["q"] | ["quit"] => { ["q"] | ["quit"] => {
// last view and we have unsaved changes
if editor.tree.views().count() == 1 {
let modified: Vec<_> = editor
.documents()
.filter(|doc| doc.is_modified())
.map(|doc| {
doc.relative_path()
.and_then(|path| path.to_str())
.unwrap_or("[scratch]")
})
.collect();
if !modified.is_empty() {
let err = format!(
"{} unsaved buffer(s) remaining: {:?}",
modified.len(),
modified
);
editor.set_error(err);
return;
}
}
editor.close(editor.view().id, /* close_buffer */ false);
}
["q!"] | ["quit!"] => {
editor.close(editor.view().id, /* close_buffer */ false); editor.close(editor.view().id, /* close_buffer */ false);
} }
["o", path] | ["open", path] => { ["o", path] | ["open", path] => {

Loading…
Cancel
Save