on master help sign in
Expand doc/view macros to allow fetching specific id
6ec4017Blaž Hrastnik
helix-term/src/ui/editor.rs+4−4
@@ -1061,7 +1061,7 @@ impl EditorView {
1061 let editor = &mut cxt.editor;
1061 let editor = &mut cxt.editor;
1062
1062
1063 if let Some((pos, view_id)) = pos_and_view(editor, row, column) {
1063 if let Some((pos, view_id)) = pos_and_view(editor, row, column) {
1064− let doc = editor.document_mut(editor.tree.get(view_id).doc).unwrap();
1064+ let doc = doc_mut!(editor, &view!(editor, view_id).doc);
1065
1065
1066 if modifiers == KeyModifiers::ALT {
1066 if modifiers == KeyModifiers::ALT {
1067 let selection = doc.selection(view_id).clone();
1067 let selection = doc.selection(view_id).clone();
@@ -1190,7 +1190,7 @@ impl EditorView {
1190 }
1190 }
1191
1191
1192 if let Some((pos, view_id)) = pos_and_view(editor, row, column) {
1192 if let Some((pos, view_id)) = pos_and_view(editor, row, column) {
1193− let doc = editor.document_mut(editor.tree.get(view_id).doc).unwrap();
1193+ let doc = doc_mut!(editor, &view!(editor, view_id).doc);
1194 doc.set_selection(view_id, Selection::point(pos));
1194 doc.set_selection(view_id, Selection::point(pos));
1195 cxt.editor.focus(view_id);
1195 cxt.editor.focus(view_id);
1196 commands::MappableCommand::paste_primary_clipboard_before.execute(cxt);
1196 commands::MappableCommand::paste_primary_clipboard_before.execute(cxt);
@@ -1320,8 +1320,8 @@ impl Component for EditorView {
1320 if cx.editor.tree.contains(focus) {
1320 if cx.editor.tree.contains(focus) {
1321 let config = cx.editor.config();
1321 let config = cx.editor.config();
1322 let mode = cx.editor.mode();
1322 let mode = cx.editor.mode();
1323− let view = cx.editor.tree.get_mut(focus);
1323+ let view = view_mut!(cx.editor, focus);
1324− let doc = cx.editor.documents.get_mut(&view.doc).unwrap();
1324+ let doc = doc_mut!(cx.editor, &view.doc);
1325
1325
1326 view.ensure_cursor_in_view(doc, config.scrolloff);
1326 view.ensure_cursor_in_view(doc, config.scrolloff);
1327
1327
helix-view/src/editor.rs+6−6
@@ -890,7 +890,7 @@ impl Editor {
890 view.doc = doc_id;
890 view.doc = doc_id;
891 view.offset = Position::default();
891 view.offset = Position::default();
892
892
893− let doc = self.documents.get_mut(&doc_id).unwrap();
893+ let doc = doc_mut!(self, &doc_id);
894 doc.ensure_view_init(view.id);
894 doc.ensure_view_init(view.id);
895
895
896 // TODO: reuse align_view
896 // TODO: reuse align_view
@@ -961,7 +961,7 @@ impl Editor {
961 }
961 }
962 Action::Load => {
962 Action::Load => {
963 let view_id = view!(self).id;
963 let view_id = view!(self).id;
964− let doc = self.documents.get_mut(&id).unwrap();
964+ let doc = doc_mut!(self, &id);
965 doc.ensure_view_init(view_id);
965 doc.ensure_view_init(view_id);
966 return;
966 return;
967 }
967 }
@@ -982,7 +982,7 @@ impl Editor {
982 },
982 },
983 );
983 );
984 // initialize selection for view
984 // initialize selection for view
985− let doc = self.documents.get_mut(&id).unwrap();
985+ let doc = doc_mut!(self, &id);
986 doc.ensure_view_init(view_id);
986 doc.ensure_view_init(view_id);
987 }
987 }
988 }
988 }
@@ -1036,9 +1036,9 @@ impl Editor {
1036 }
1036 }
1037
1037
1038 pub fn close(&mut self, id: ViewId) {
1038 pub fn close(&mut self, id: ViewId) {
1039− let view = self.tree.get(self.tree.focus);
1039+ let (_view, doc) = current!(self);
1040 // remove selection
1040 // remove selection
1041− self.documents.get_mut(&view.doc).unwrap().remove_view(id);
1041+ doc.remove_view(id);
1042 self.tree.remove(id);
1042 self.tree.remove(id);
1043 self._refresh();
1043 self._refresh();
1044 }
1044 }
@@ -1112,7 +1112,7 @@ impl Editor {
1112 .unwrap_or_else(|| self.new_document(Document::default()));
1112 .unwrap_or_else(|| self.new_document(Document::default()));
1113 let view = View::new(doc_id, self.config().gutters.clone());
1113 let view = View::new(doc_id, self.config().gutters.clone());
1114 let view_id = self.tree.insert(view);
1114 let view_id = self.tree.insert(view);
1115− let doc = self.documents.get_mut(&doc_id).unwrap();
1115+ let doc = doc_mut!(self, &doc_id);
1116 doc.ensure_view_init(view_id);
1116 doc.ensure_view_init(view_id);
1117 }
1117 }
1118
1118
helix-view/src/macros.rs+13−1
@@ -14,7 +14,7 @@ macro_rules! current {
14 ($editor:expr) => {{
14 ($editor:expr) => {{
15 let view = $crate::view_mut!($editor);
15 let view = $crate::view_mut!($editor);
16 let id = view.doc;
16 let id = view.doc;
17− let doc = $editor.documents.get_mut(&id).unwrap();
17+ let doc = $crate::doc_mut!($editor, &id);
18 (view, doc)
18 (view, doc)
19 }};
19 }};
20}
20}
@@ -32,6 +32,9 @@ macro_rules! current_ref {
32/// Returns `&mut Document`
32/// Returns `&mut Document`
33#[macro_export]
33#[macro_export]
34macro_rules! doc_mut {
34macro_rules! doc_mut {
35+ ($editor:expr, $id:expr) => {{
36+ $editor.documents.get_mut($id).unwrap()
37+ }};
35 ($editor:expr) => {{
38 ($editor:expr) => {{
36 $crate::current!($editor).1
39 $crate::current!($editor).1
37 }};
40 }};
@@ -41,6 +44,9 @@ macro_rules! doc_mut {
41/// Returns `&mut View`
44/// Returns `&mut View`
42#[macro_export]
45#[macro_export]
43macro_rules! view_mut {
46macro_rules! view_mut {
47+ ($editor:expr, $id:expr) => {{
48+ $editor.tree.get_mut($id)
49+ }};
44 ($editor:expr) => {{
50 ($editor:expr) => {{
45 $editor.tree.get_mut($editor.tree.focus)
51 $editor.tree.get_mut($editor.tree.focus)
46 }};
52 }};
@@ -50,6 +56,9 @@ macro_rules! view_mut {
50/// Returns `&View`
56/// Returns `&View`
51#[macro_export]
57#[macro_export]
52macro_rules! view {
58macro_rules! view {
59+ ($editor:expr, $id:expr) => {{
60+ $editor.tree.get($id)
61+ }};
53 ($editor:expr) => {{
62 ($editor:expr) => {{
54 $editor.tree.get($editor.tree.focus)
63 $editor.tree.get($editor.tree.focus)
55 }};
64 }};
@@ -57,6 +66,9 @@ macro_rules! view {
57
66
58#[macro_export]
67#[macro_export]
59macro_rules! doc {
68macro_rules! doc {
69+ ($editor:expr, $id:expr) => {{
70+ $editor.documents[$id]
71+ }};
60 ($editor:expr) => {{
72 ($editor:expr) => {{
61 $crate::current_ref!($editor).1
73 $crate::current_ref!($editor).1
62 }};
74 }};