on master help sign in
Only send the document close event if we're closing the underlying buffer
c0a8b81Blaž Hrastnik
helix-term/src/commands.rs+2−2
@@ -856,7 +856,7 @@ pub fn command_mode(cx: &mut Context) {
856
856
857 match *parts.as_slice() {
857 match *parts.as_slice() {
858 ["q"] | ["quit"] => {
858 ["q"] | ["quit"] => {
859− editor.close(editor.view().id);
859+ editor.close(editor.view().id, /* close_buffer */ false);
860 }
860 }
861 ["o", path] | ["open", path] => {
861 ["o", path] | ["open", path] => {
862 editor.open(path.into(), Action::Replace);
862 editor.open(path.into(), Action::Replace);
@@ -2085,7 +2085,7 @@ pub fn space_mode(cx: &mut Context) {
2085 }
2085 }
2086 'c' => {
2086 'c' => {
2087 // close current split
2087 // close current split
2088− cx.editor.close(cx.view_id);
2088+ cx.editor.close(cx.view_id, /* close_buffer */ false);
2089 }
2089 }
2090 // ' ' => toggle_alternate_buffer(cx),
2090 // ' ' => toggle_alternate_buffer(cx),
2091 // TODO: temporary since space mode took it's old key
2091 // TODO: temporary since space mode took it's old key
helix-view/src/editor.rs+15−15
@@ -162,26 +162,26 @@ impl Editor {
162 Ok(id)
162 Ok(id)
163 }
163 }
164
164
165− pub fn close(&mut self, id: ViewId) {
165+ pub fn close(&mut self, id: ViewId, close_buffer: bool) {
166 let view = self.tree.get(self.tree.focus);
166 let view = self.tree.get(self.tree.focus);
167− // get around borrowck issues
167+ // remove selection
168− let language_servers = &mut self.language_servers;
169−
170− let doc = &self.documents[view.doc];
168+ self.documents[view.doc].selections.remove(&id);
171
169
172− let language_server = doc
170+ if close_buffer {
173− .language
171+ // get around borrowck issues
174− .as_ref()
172+ let language_servers = &mut self.language_servers;
175− .and_then(|language| language_servers.get(language));
173+ let doc = &self.documents[view.doc];
176
174
175+ let language_server = doc
176+ .language
177+ .as_ref()
178+ .and_then(|language| language_servers.get(language));
177− if let Some(language_server) = language_server {
179+ if let Some(language_server) = language_server {
178− tokio::spawn(language_server.text_document_did_close(doc.identifier()));
180+ tokio::spawn(language_server.text_document_did_close(doc.identifier()));
181+ }
182+ self.documents.remove(view.doc);
179 }
183 }
180
184
181− // remove selection
182− self.documents[view.doc].selections.remove(&id);
183−
184− // self.documents.remove(view.doc);
185 self.tree.remove(id);
185 self.tree.remove(id);
186 self._refresh();
186 self._refresh();
187 }
187 }