mirror of
https://github.com/helix-editor/helix.git
synced 2025-01-19 21:47:07 +04:00
Disallow quitting on last view if unsaved changes present.
This commit is contained in:
parent
c0a8b81487
commit
243456a583
@ -664,7 +664,7 @@ pub fn _search_next(cx: &mut Context, extend: bool) {
|
||||
let query = query.first().unwrap();
|
||||
let (view, doc) = cx.current();
|
||||
let contents = doc.text().slice(..).to_string();
|
||||
let regex = Regex::new(&query).unwrap();
|
||||
let regex = Regex::new(query).unwrap();
|
||||
_search(doc, view, &contents, ®ex, extend);
|
||||
}
|
||||
}
|
||||
@ -809,7 +809,7 @@ pub fn append_mode(cx: &mut Context) {
|
||||
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) {
|
||||
let prompt = Prompt::new(
|
||||
@ -856,6 +856,31 @@ pub fn command_mode(cx: &mut Context) {
|
||||
|
||||
match *parts.as_slice() {
|
||||
["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);
|
||||
}
|
||||
["o", path] | ["open", path] => {
|
||||
|
Loading…
Reference in New Issue
Block a user