on master help sign in
Deduplicate code
52d3c29Wojciech Kępka
helix-term/src/commands.rs+19−31
@@ -915,15 +915,7 @@ mod cmd {
915 fn quit(editor: &mut Editor, args: &[&str], event: PromptEvent) {
915 fn quit(editor: &mut Editor, args: &[&str], event: PromptEvent) {
916 // last view and we have unsaved changes
916 // last view and we have unsaved changes
917 if editor.tree.views().count() == 1 {
917 if editor.tree.views().count() == 1 {
918− let modified = _modified_left(editor);
918+ if _buffers_remaining(editor) {
919−
920− if !modified.is_empty() {
921− let err = format!(
922− "{} unsaved buffer(s) remaining: {:?}",
923− modified.len(),
924− modified
925− );
926− editor.set_error(err);
927 return;
919 return;
928 }
920 }
929 }
921 }
@@ -1025,8 +1017,10 @@ mod cmd {
1025 force_quit(editor, &[], event);
1017 force_quit(editor, &[], event);
1026 }
1018 }
1027
1019
1020+ /// Returns `true` if there are modified buffers remaining and sets editor error,
1021+ /// otherwise returns `false`
1028− fn _modified_left(editor: &mut Editor) -> Vec<&str> {
1022+ fn _buffers_remaining(editor: &mut Editor) -> bool {
1029− editor
1023+ let modified: Vec<_> = editor
1030 .documents()
1024 .documents()
1031 .filter(|doc| doc.is_modified())
1025 .filter(|doc| doc.is_modified())
1032 .map(|doc| {
1026 .map(|doc| {
@@ -1034,7 +1028,18 @@ mod cmd {
1034 .and_then(|path| path.to_str())
1028 .and_then(|path| path.to_str())
1035 .unwrap_or("[scratch]")
1029 .unwrap_or("[scratch]")
1036 })
1030 })
1037− .collect()
1031+ .collect();
1032+ if !modified.is_empty() {
1033+ let err = format!(
1034+ "{} unsaved buffer(s) remaining: {:?}",
1035+ modified.len(),
1036+ modified
1037+ );
1038+ editor.set_error(err);
1039+ true
1040+ } else {
1041+ false
1042+ }
1038 }
1043 }
1039
1044
1040 fn _write_all(editor: &mut Editor, args: &[&str], event: PromptEvent, quit: bool, force: bool) {
1045 fn _write_all(editor: &mut Editor, args: &[&str], event: PromptEvent, quit: bool, force: bool) {
@@ -1052,16 +1057,7 @@ mod cmd {
1052
1057
1053 if quit {
1058 if quit {
1054 if !force {
1059 if !force {
1055− // check if there are some unsaved buffers
1060+ if _buffers_remaining(editor) {
1056− let modified = _modified_left(editor);
1057−
1058− if !modified.is_empty() {
1059− let err = format!(
1060− "{} unsaved buffer(s) remaining: {:?}",
1061− modified.len(),
1062− modified
1063− );
1064− editor.set_error(err);
1065 return;
1061 return;
1066 }
1062 }
1067 }
1063 }
@@ -1088,15 +1084,7 @@ mod cmd {
1088
1084
1089 fn _quit_all(editor: &mut Editor, args: &[&str], event: PromptEvent, force: bool) {
1085 fn _quit_all(editor: &mut Editor, args: &[&str], event: PromptEvent, force: bool) {
1090 if !force {
1086 if !force {
1091− // check if there are some unsaved buffers
1087+ if _buffers_remaining(editor) {
1092− let modified = _modified_left(editor);
1093− if !modified.is_empty() {
1094− let err = format!(
1095− "{} unsaved buffer(s) remaining: {:?}",
1096− modified.len(),
1097− modified
1098− );
1099− editor.set_error(err);
1100 return;
1088 return;
1101 }
1089 }
1102 }
1090 }