@@ -657,6 +657,7 @@ pub struct Editor {
657 // https://stackoverflow.com/a/66875668
657 // https://stackoverflow.com/a/66875668
658 pub saves: HashMap<DocumentId, UnboundedSender<Once<DocumentSavedEventFuture>>>,
658 pub saves: HashMap<DocumentId, UnboundedSender<Once<DocumentSavedEventFuture>>>,
659 pub save_queue: SelectAll<Flatten<UnboundedReceiverStream<Once<DocumentSavedEventFuture>>>>,
659 pub save_queue: SelectAll<Flatten<UnboundedReceiverStream<Once<DocumentSavedEventFuture>>>>,
660+ pub write_count: usize,
661 pub count: Option<std::num::NonZeroUsize>,
662 pub count: Option<std::num::NonZeroUsize>,
662 pub selected_register: Option<char>,
663 pub selected_register: Option<char>,
@@ -761,6 +762,7 @@ impl Editor {
761 documents: BTreeMap::new(),
762 documents: BTreeMap::new(),
762 saves: HashMap::new(),
763 saves: HashMap::new(),
763 save_queue: SelectAll::new(),
764 save_queue: SelectAll::new(),
764 count: None,
766 count: None,
765 selected_register: None,
767 selected_register: None,
766 macro_recording: None,
768 macro_recording: None,
@@ -1206,6 +1208,8 @@ impl Editor {
1206 .send(stream::once(Box::pin(future)))
1208 .send(stream::once(Box::pin(future)))
1207 .map_err(|err| anyhow!("failed to send save event: {}", err))?;
1209 .map_err(|err| anyhow!("failed to send save event: {}", err))?;
1211+ self.write_count += 1;
@@ -1332,6 +1336,7 @@ impl Editor {
1334 Some(event) = self.save_queue.next() => {
1338 Some(event) = self.save_queue.next() => {
1339+ self.write_count -= 1;
1335 EditorEvent::DocumentSaved(event)
1340 EditorEvent::DocumentSaved(event)
1337 Some(config_event) = self.config_events.1.recv() => {
1342 Some(config_event) = self.config_events.1.recv() => {
@@ -1350,17 +1355,21 @@ impl Editor {
1352 pub async fn flush_writes(&mut self) {
1357 pub async fn flush_writes(&mut self) {
1358+ while self.write_count > 0 {
1353− while let Some(save_event) = self.save_queue.next().await {
1359+ if let Some(save_event) = self.save_queue.next().await {
1354− match &save_event {
1360+ match &save_event {
1355− Ok(event) => {
1361+ Ok(event) => {
1356− let doc = doc_mut!(self, &event.doc_id);
1362+ let doc = doc_mut!(self, &event.doc_id);
1357− doc.set_last_saved_revision(event.revision);
1363+ doc.set_last_saved_revision(event.revision);
1359− Err(err) => {
1365+ Err(err) => {
1360− log::error!("error saving document: {}", err);
1366+ log::error!("error saving document: {}", err);
1363− // TODO: if is_err: break?
1369+ // TODO: if is_err: break?
1371+ self.write_count -= 1;