diff --git a/nested/src/editors/integer/editor.rs b/nested/src/editors/integer/editor.rs index 89e9a9c..b0cdc11 100644 --- a/nested/src/editors/integer/editor.rs +++ b/nested/src/editors/integer/editor.rs @@ -12,7 +12,7 @@ use { }, crate::{ type_system::{Context, TypeTerm, ReprTree}, - editors::list::{PTYListEditor}, + editors::list::{ListEditor, PTYListController, PTYListStyle}, terminal::{ TerminalAtom, TerminalEvent, TerminalStyle, make_label }, @@ -114,7 +114,7 @@ impl DigitEditor { pub fn get_type(&self) -> TypeTerm { TypeTerm::Type { - id: self.ctx.read().unwrap().get_typeid("Digit").unwrap(), + id: self.ctx.read().unwrap().get_fun_typeid("Digit").unwrap(), args: vec![ TypeTerm::Num(self.radix as i64).into() ] @@ -140,38 +140,31 @@ pub struct PosIntEditor { impl PosIntEditor { pub fn new(ctx: Arc>, radix: u32) -> Self { - let editor = PTYListEditor::new( - ctx.clone(), - TypeTerm::Type { - id: ctx.read().unwrap().get_typeid("Digit").unwrap(), - args: vec![ - TypeTerm::Num(radix as i64).into() - ] - }, - None, - 0 - ); + let mut node = Context::make_node(&ctx, (&ctx, format!("( List ( Digit {} ) )", radix).as_str()).into(), 0).unwrap(); - let view = editor.pty_view(( + PTYListController::for_node( &mut node, Some(' '), None ); + PTYListStyle::for_node( &mut node, + ( match radix { 2 => "0d".into(), 16 => "0x".into(), _ => "".into() }, "".into(), - "".into())); - let mut node = editor.into_node().set_view(view); + "".into() + ) + ); // Set Type let data = node.data.clone().unwrap(); node = node.set_data(ReprTree::ascend( &data, TypeTerm::Type { - id: ctx.read().unwrap().get_typeid("PosInt").unwrap(), + id: ctx.read().unwrap().get_fun_typeid("PosInt").unwrap(), args: vec![ TypeTerm::Num(radix as i64).into(), TypeTerm::Type { - id: ctx.read().unwrap().get_typeid("BigEndian").unwrap(), + id: ctx.read().unwrap().get_fun_typeid("BigEndian").unwrap(), args: vec![] }.into() ] diff --git a/nested/src/editors/integer/mod.rs b/nested/src/editors/integer/mod.rs index a71cbfa..d6229ab 100644 --- a/nested/src/editors/integer/mod.rs +++ b/nested/src/editors/integer/mod.rs @@ -7,3 +7,4 @@ pub use { editor::{DigitEditor, PosIntEditor}, radix::RadixProjection, }; + diff --git a/nested/src/editors/list/editor.rs b/nested/src/editors/list/editor.rs index 0c28269..f944579 100644 --- a/nested/src/editors/list/editor.rs +++ b/nested/src/editors/list/editor.rs @@ -1,12 +1,13 @@ use { r3vi::{ - view::{OuterViewPort, singleton::*, sequence::*}, + view::{port::UpdateTask, OuterViewPort, singleton::*, sequence::*}, buffer::{singleton::*, vec::*} }, crate::{ type_system::{Context, TypeTerm, ReprTree}, editors::list::{ListCursor, ListCursorMode}, - tree::{NestedNode, TreeNav} + tree::{NestedNode, TreeNav, TreeCursor}, + diagnostics::Diagnostics }, std::sync::{Arc, RwLock} }; @@ -27,6 +28,31 @@ pub struct ListEditor { } impl ListEditor { + pub fn init_ctx(ctx: &Arc>) { + let mut ctx = ctx.write().unwrap(); + + ctx.add_list_typename("List".into()); + ctx.add_node_ctor( + "List", Arc::new( + |ctx: Arc>, ty: TypeTerm, depth: usize| { + match ty { + TypeTerm::Type { + id: _, args + } => { + if args.len() > 0 { + let typ = (args[0].clone().0)[0].clone(); + Some(ListEditor::new(ctx, typ).into_node(depth)) + } else { + None + } + } + _ => None + } + } + ) + ); + } + pub fn new( ctx: Arc>, typ: TypeTerm, @@ -92,30 +118,33 @@ impl ListEditor { let ctx = self.ctx.clone(); let editor = Arc::new(RwLock::new(self)); + let e = editor.read().unwrap(); + NestedNode::new(depth) .set_ctx(ctx) .set_data(data) .set_editor(editor.clone()) .set_nav(editor.clone()) -// .set_cmd(editor.clone()) - } - - pub fn new_node( - node: NestedNode, - item_type: TypeTerm - ) -> NestedNode { - let ctx = node.ctx.clone().unwrap(); - - let editor = ListEditor::new( - ctx.clone(), - item_type, - ); - let data = editor.get_data(); - let editor = Arc::new(RwLock::new(editor)); - - node.set_data(data) - .set_editor(editor.clone()) - .set_nav(editor.clone()) + //.set_cmd(editor.clone()) + .set_diag(e + .get_data_port() + .enumerate() + .map( + |(idx, item_editor)| { + let idx = *idx; + item_editor + .get_msg_port() + .map( + move |msg| { + let mut msg = msg.clone(); + msg.addr.insert(0, idx); + msg + } + ) + } + ) + .flatten() + ) } pub fn get_item_type(&self) -> TypeTerm { @@ -124,7 +153,7 @@ impl ListEditor { pub fn get_seq_type(&self) -> TypeTerm { TypeTerm::Type { - id: self.ctx.read().unwrap().get_typeid("List").unwrap(), + id: self.ctx.read().unwrap().get_fun_typeid("List").unwrap(), args: vec![ self.get_item_type().into() ] } } @@ -255,8 +284,10 @@ impl ListEditor { let prev_node = self.data.get(prev_idx); if let Some(prev_editor) = prev_node.editor.clone() { - let prev_editor = prev_editor.downcast::>().unwrap(); + prev_editor.0.update(); + let prev_editor = prev_editor.get_view().unwrap().get().unwrap().downcast::>().unwrap(); let prev_editor = prev_editor.write().unwrap(); + prev_editor.get_data_port().0.update(); if prev_editor.get_data_port().get_view().unwrap().iter() .filter_map(|x| x.get_data_view::>>(vec![].into_iter())?.get()).count() == 0 @@ -305,6 +336,110 @@ impl ListEditor { self.data.push(other.data.get(i)); } } + + + pub fn listlist_split(&mut self) { + let cur = self.get_cursor(); + if let Some(item) = self.get_item_mut() { + let depth = item.depth; + + if let Some(head_editor) = item.editor.clone() { + + head_editor.0.update(); + let head = head_editor.get_view().unwrap().get().unwrap().downcast::>().unwrap(); + let mut head = head.write().unwrap(); + + if head.data.len() > 0 { + + if cur.tree_addr.len() > 2 { + head.listlist_split(); + } + + let mut tail = head.split(); + + head.goto(TreeCursor::none()); + + tail.cursor.set( + ListCursor { + idx: Some(0), + mode: if cur.tree_addr.len() > 2 { + ListCursorMode::Select + } else { + ListCursorMode::Insert + } + } + ); + + let item_type = + if let Some(data) = item.data.clone() { + let data = data.read().unwrap(); + Some(data.get_type().clone()) + } else { + None + }; + + let mut tail_node = tail.into_node(depth); + tail_node = tail_node.set_ctx(item.ctx.clone().unwrap()); + + // if let Some(item_type) = item_type { + tail_node = tail_node.morph(self.typ.clone()); + //} + + self.insert( + tail_node + ); + } + } + } + } + + pub fn listlist_join_pxev(&mut self, idx: isize, item: &NestedNode) { + { + let prev_editor = self.data.get_mut(idx as usize-1); + let prev_editor = prev_editor.editor.clone(); + if let Some(prev_editor) = prev_editor { + prev_editor.0.update(); + if let Ok(prev_editor) = prev_editor.get_view().unwrap().get().unwrap().downcast::>() { + let mut prev_editor = prev_editor.write().unwrap(); + + let cur_editor = item.editor.clone().unwrap(); + cur_editor.0.update(); + let cur_editor = cur_editor.get_view().unwrap().get().unwrap().downcast::>().unwrap(); + let cur_editor = cur_editor.write().unwrap(); + + prev_editor.join(&cur_editor); + + self.cursor.set( + ListCursor { + idx: Some(idx - 1), mode: ListCursorMode::Select + } + ); + + } + } + } + + self.data.remove(idx as usize); + } + + pub fn listlist_join_nexd(&mut self, next_idx: usize, item: &NestedNode) { + { + let next_editor = self.data.get_mut(next_idx).editor.clone(); + if let Some(next_editor) = next_editor { + next_editor.0.update(); + if let Ok(next_editor) = next_editor.get_view().unwrap().get().unwrap().downcast::>() { + let mut next_editor = next_editor.write().unwrap(); + let cur_editor = item.editor.clone().unwrap(); + cur_editor.0.update(); + let cur_editor = cur_editor.get_view().unwrap().get().unwrap().downcast::>().unwrap(); + let mut cur_editor = cur_editor.write().unwrap(); + + cur_editor.join(&next_editor); + } + } + } + self.data.remove(next_idx); + } } /* use crate::{ diff --git a/nested/src/editors/list/mod.rs b/nested/src/editors/list/mod.rs index c3cbfcd..a6b51fe 100644 --- a/nested/src/editors/list/mod.rs +++ b/nested/src/editors/list/mod.rs @@ -10,6 +10,6 @@ pub use { cursor::{ListCursor, ListCursorMode}, editor::ListEditor, segment::{ListSegment, ListSegmentSequence}, - pty_editor::{PTYListEditor} + pty_editor::{PTYListStyle, PTYListController} }; diff --git a/nested/src/editors/list/pty_editor.rs b/nested/src/editors/list/pty_editor.rs index 056faba..9976851 100644 --- a/nested/src/editors/list/pty_editor.rs +++ b/nested/src/editors/list/pty_editor.rs @@ -18,56 +18,30 @@ use { //<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>> -pub struct PTYListEditor { - pub editor: Arc>, - split_char: Option, +pub struct PTYListStyle { + style: (String, String, String), depth: usize } -//<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>> - -impl PTYListEditor { - pub fn new( - ctx: Arc>, - typ: TypeTerm, - split_char: Option, - depth: usize - ) -> Self { - Self::from_editor( - Arc::new(RwLock::new(ListEditor::new(ctx, typ))), - split_char, +impl PTYListStyle { + pub fn new(style: (&str, &str, &str), depth: usize) -> PTYListStyle { + PTYListStyle { + style: (style.0.into(), style.1.into(), style.2.into()), depth - ) + } } - pub fn from_editor( - editor: Arc>, - split_char: Option, - depth: usize - ) -> Self { - PTYListEditor { - split_char, - depth, - editor, - } - } - - pub fn get_seg_seq_view(&self) -> OuterViewPort>> { + pub fn get_seg_seq_view(&self, editor: &ListEditor) -> OuterViewPort>> { let seg_seq = ListSegmentSequence::new( - self.editor.read().unwrap().get_cursor_port(), - self.editor.read().unwrap().get_data_port(), + editor.get_cursor_port(), + editor.get_data_port(), self.depth ); let se = seg_seq.read().unwrap(); se.get_view().map(move |segment| segment.pty_view()) } - pub fn pty_view( - &self, - display_style: (&str, &str, &str), - ) -> OuterViewPort { - let editor = self.editor.read().unwrap(); - + pub fn pty_view(&self, editor: &ListEditor) -> OuterViewPort { let seg_seq = ListSegmentSequence::new( editor.get_cursor_port(), editor.get_data_port(), @@ -78,44 +52,59 @@ impl PTYListEditor { seg_seq .get_view() .map(move |segment| segment.pty_view()) - .separate(make_label(display_style.1)) - .wrap(make_label(display_style.0), make_label(display_style.2)) + .separate(make_label(&self.style.1)) + .wrap(make_label(&self.style.0), make_label(&self.style.2)) .to_grid_horizontal() .flatten() } - - pub fn into_node(self) -> NestedNode { - let depth = self.depth; - let editor = Arc::new(RwLock::new(self)); - let ed = editor.read().unwrap(); - let edd = ed.editor.read().unwrap(); - - NestedNode::new(depth) - .set_data(edd.get_data()) - .set_cmd(editor.clone()) - .set_editor(ed.editor.clone()) - .set_nav(ed.editor.clone()) - .set_ctx(edd.ctx.clone()) - .set_diag( - edd.get_data_port() - .enumerate() - .map( - |(idx, item_editor)| { - let idx = *idx; - item_editor - .get_msg_port() - .map( - move |msg| { - let mut msg = msg.clone(); - msg.addr.insert(0, idx); - msg - } - ) - } - ) - .flatten() - ) + pub fn for_node(node: &mut NestedNode, style: (&str, &str, &str)) { + node.view = Some( + Self::new(style, node.depth) + .pty_view( + &node.get_edit::().unwrap().read().unwrap() + ) + ); + } +} + +//<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>> + +pub struct PTYListController { + pub editor: Arc>, + + split_char: Option, + close_char: Option, + + depth: usize +} + +//<<<<>>>><<>><><<>><<<*>>><<>><><<>><<<<>>>> + +impl PTYListController { + pub fn from_editor( + editor: Arc>, + split_char: Option, + close_char: Option, + depth: usize + ) -> Self { + PTYListController { + editor, + split_char, + close_char, + depth + } + } + + pub fn for_node( + node: &mut NestedNode, + split_char: Option, + close_char: Option + ) { + let editor = node.get_edit::().unwrap(); + let controller = Arc::new(RwLock::new(PTYListController::from_editor( editor, split_char, close_char, node.depth ))); + + node.cmd = Some(controller.clone()); } pub fn get_data_port(&self) -> OuterViewPort> { @@ -133,113 +122,16 @@ impl PTYListEditor { pub fn set_depth(&mut self, depth: usize) { self.depth = depth; } - - pub fn split(e: &mut ListEditor) { - let cur = e.get_cursor(); - if let Some(item) = e.get_item_mut() { - let depth = item.depth; - - if let Some(head_editor) = item.editor.clone() { - - let head = head_editor.downcast::>().unwrap(); - let mut head = head.write().unwrap(); - - if head.data.len() > 0 { - - if cur.tree_addr.len() > 2 { - PTYListEditor::split(&mut head); - } - - let mut tail = head.split(); - - head.goto(TreeCursor::none()); - - tail.cursor.set( - ListCursor { - idx: Some(0), - mode: if cur.tree_addr.len() > 2 { - ListCursorMode::Select - } else { - ListCursorMode::Insert - } - } - ); - - let item_type = - if let Some(data) = item.data.clone() { - let data = data.read().unwrap(); - Some(data.get_type().clone()) - } else { - None - }; - - let mut tail_node = tail.into_node(depth); - tail_node = tail_node.set_ctx(item.ctx.clone().unwrap()); - - if let Some(item_type) = item_type { - tail_node = tail_node.morph(item_type); - } - - e.insert( - tail_node - ); - } - } - } - } - - fn join_pxev(e: &mut ListEditor, idx: isize, item: &NestedNode) { - { - let prev_editor = e.data.get_mut(idx as usize-1); - let prev_editor = prev_editor.editor.clone(); - if let Some(prev_editor) = prev_editor { - if let Ok(prev_editor) = prev_editor.downcast::>() { - let mut prev_editor = prev_editor.write().unwrap(); - - let cur_editor = item.editor.clone().unwrap(); - let cur_editor = cur_editor.downcast::>().unwrap(); - let cur_editor = cur_editor.write().unwrap(); - - prev_editor.join(&cur_editor); - - e.cursor.set( - ListCursor { - idx: Some(idx - 1), mode: ListCursorMode::Select - } - ); - - } - } - } - - e.data.remove(idx as usize); - } - - fn join_nexd(e: &mut ListEditor, next_idx: usize, item: &NestedNode) { - { - let next_editor = e.data.get_mut(next_idx).editor.clone(); - if let Some(next_editor) = next_editor { - if let Ok(next_editor) = next_editor.downcast::>() { - let mut next_editor = next_editor.write().unwrap(); - let cur_editor = item.editor.clone().unwrap(); - let cur_editor = cur_editor.downcast::>().unwrap(); - let mut cur_editor = cur_editor.write().unwrap(); - - cur_editor.join(&next_editor); - } - } - } - e.data.remove(next_idx); - } } use r3vi::view::singleton::SingletonView; use crate::commander::ObjCommander; -impl ObjCommander for PTYListEditor { +impl ObjCommander for PTYListController { fn send_cmd_obj(&mut self, cmd_obj: Arc>) -> TreeNavResult { let mut e = self.editor.write().unwrap(); let cur = e.cursor.get(); + let cur_depth = e.get_cursor().tree_addr.len(); let ctx = e.ctx.clone(); let ctx = ctx.read().unwrap(); @@ -247,8 +139,24 @@ impl ObjCommander for PTYListEditor { let co = cmd_obj.read().unwrap(); let cmd_type = co.get_type().clone(); let term_event_type = ctx.type_term_from_str("( TerminalEvent )").unwrap(); + let nested_node_type = ctx.type_term_from_str("( NestedNode )").unwrap(); let char_type = ctx.type_term_from_str("( Char )").unwrap(); + if cmd_type == nested_node_type { + if let Some(node_view) = co.get_view::>() { + if let Some(idx) = cur.idx { + match cur.mode { + ListCursorMode::Select => { + *e.data.get_mut(idx as usize) = node_view.get(); + } + ListCursorMode::Insert => { + e.data.insert(idx as usize, node_view.get()); + } + } + } + } + } + if cmd_type == term_event_type { if let Some(te_view) = co.get_view::>() { drop(co); @@ -309,7 +217,7 @@ impl ObjCommander for PTYListEditor { |is_zero, x| is_zero && (*x == 0) ) { - PTYListEditor::join_pxev(&mut e, idx, &item); + e.listlist_join_pxev(idx, &item); /* Optional: recursive joining @@ -333,7 +241,7 @@ impl ObjCommander for PTYListEditor { |is_end, x| is_end && (*x == -1) ) { - PTYListEditor::join_nexd(&mut e, next_idx, &item); + e.listlist_join_nexd(next_idx, &item); /* Optional: recursive joining @@ -351,7 +259,7 @@ impl ObjCommander for PTYListEditor { TerminalEvent::Input(Event::Key(Key::Char(c))) => { if Some(c) == self.split_char { - PTYListEditor::split(&mut e); + e.listlist_split(); TreeNavResult::Continue } else { item.send_cmd_obj(cmd_obj) @@ -382,14 +290,18 @@ impl ObjCommander for PTYListEditor { drop(co); let c = cmd_view.get(); - if Some(c) == self.split_char { - PTYListEditor::split(&mut e); + if Some(c) == self.split_char && cur_depth == 2 { + e.listlist_split(); TreeNavResult::Continue } else { if let Some(mut item) = e.get_item_mut() { match item.send_cmd_obj(cmd_obj) { TreeNavResult::Continue => TreeNavResult::Continue, TreeNavResult::Exit => { + if Some(c) == self.split_char { + e.listlist_split(); + } + item.goto(TreeCursor::none()); e.cursor.set(ListCursor { mode: ListCursorMode::Insert, diff --git a/nested/src/tree/node.rs b/nested/src/tree/node.rs index bcf1f44..d530104 100644 --- a/nested/src/tree/node.rs +++ b/nested/src/tree/node.rs @@ -24,7 +24,7 @@ pub struct NestedNode { pub ctx: Option>>, /// abstract editor - pub editor: Option>, + pub editor: Option>>>>, /// abstract data view pub data: Option>>, @@ -195,7 +195,7 @@ impl NestedNode { } pub fn set_editor(mut self, editor: Arc) -> Self { - self.editor = Some(editor); + self.editor = Some(SingletonBuffer::new(Some(editor)).get_port()); self } @@ -267,7 +267,7 @@ impl NestedNode { */ pub fn get_edit(&self) -> Option>> { if let Some(edit) = self.editor.clone() { - if let Ok(edit) = edit.downcast::>() { + if let Ok(edit) = edit.get_view().unwrap().get().unwrap().downcast::>() { Some(edit) } else { None diff --git a/nested/src/type_system/make_editor.rs b/nested/src/type_system/make_editor.rs index 5da6a09..dd51ae2 100644 --- a/nested/src/type_system/make_editor.rs +++ b/nested/src/type_system/make_editor.rs @@ -61,38 +61,13 @@ pub fn init_editor_ctx(parent: Arc>) -> Arc> { } ) ); + ctx.write().unwrap().add_list_typename("Seq".into()); ctx.write().unwrap().add_list_typename("Sequence".into()); + ctx.write().unwrap().add_list_typename("SepSeq".into()); + ctx.write().unwrap().add_typename("NestedNode".into()); - ctx.write().unwrap().add_list_typename("List".into()); - ctx.write().unwrap().add_node_ctor( - "List", Arc::new( - |ctx: Arc>, ty: TypeTerm, depth: usize| { - match ty { - TypeTerm::Type { - id: _, args - } => { - if args.len() > 0 { - let editor = PTYListEditor::new( - ctx, - (args[0].clone().0)[0].clone(), - Some(','), - depth + 1 - ); - let view = editor.pty_view(("{",", ", "}")); - - Some(editor - .into_node() - .set_view(view)) - } else { - None - } - } - _ => None - } - } - ) - ); + ListEditor::init_ctx( &ctx ); ctx.write().unwrap().add_list_typename("Symbol".into()); let pattern = MorphismTypePattern { @@ -102,17 +77,9 @@ pub fn init_editor_ctx(parent: Arc>) -> Arc> { ctx.write().unwrap().add_morphism(pattern, Arc::new( |mut node, _dst_type:_| { - let depth = node.depth; - let editor = node.editor.clone().unwrap().downcast::>().unwrap(); - let pty_editor = PTYListEditor::from_editor( - editor, - None, - depth - ); - - node.view = Some(pty_editor.pty_view(("", "", ""))); - node.cmd = Some(Arc::new(RwLock::new(pty_editor))); - Some(node) + PTYListController::for_node( &mut node, None, None ); + PTYListStyle::for_node( &mut node, ("","","") ); + Some(node) } ) ); @@ -123,7 +90,7 @@ pub fn init_editor_ctx(parent: Arc>) -> Arc> { let mut node = Context::make_node( &ctx, TypeTerm::Type { - id: ctx.read().unwrap().get_typeid("List").unwrap(), + id: ctx.read().unwrap().get_fun_typeid("List").unwrap(), args: vec![ TypeTerm::new(ctx.read().unwrap().get_typeid("Char").unwrap()).into() ] @@ -146,20 +113,8 @@ pub fn init_editor_ctx(parent: Arc>) -> Arc> { ctx.write().unwrap().add_morphism(pattern, Arc::new( |mut node, _dst_type:_| { - let depth = node.depth; - let editor = node.editor.clone().unwrap().downcast::>().unwrap(); - let pty_editor = PTYListEditor::from_editor( - editor, - None, - depth - ); - - node.view = Some(pty_editor.pty_view(( - "\"".into(), - "".into(), - "\"".into() - ))); - node.cmd = Some(Arc::new(RwLock::new(pty_editor))); + PTYListController::for_node( &mut node, None, Some('\"') ); + PTYListStyle::for_node( &mut node, ("\"","","\"") ); Some(node) } ) @@ -171,7 +126,7 @@ pub fn init_editor_ctx(parent: Arc>) -> Arc> { let mut node = Context::make_node( &ctx, TypeTerm::Type { - id: ctx.read().unwrap().get_typeid("List").unwrap(), + id: ctx.read().unwrap().get_fun_typeid("List").unwrap(), args: vec![ TypeTerm::new(ctx.read().unwrap().get_typeid("Char").unwrap()).into() ] @@ -243,7 +198,7 @@ pub fn init_math_ctx(parent: Arc>) -> Arc> { Arc::new( |mut node, dst_type| { let depth = node.depth; - let editor = node.editor.clone().unwrap().downcast::>().unwrap(); + let editor = node.editor.clone().unwrap().get_view().unwrap().get().unwrap().downcast::>().unwrap(); // todo: check src_type parameter to be ( Digit radix ) @@ -254,21 +209,17 @@ pub fn init_math_ctx(parent: Arc>) -> Arc> { if args.len() > 0 { match (args[0].0)[0] { TypeTerm::Num(_radix) => { - let pty_editor = PTYListEditor::from_editor( - editor, + PTYListController::for_node( + &mut node, Some(','), - depth + None, + ); + + PTYListStyle::for_node( + &mut node, + ("0d", "", "") ); - // todo: set data view - node.view = Some(pty_editor.pty_view( - ( - "{".into(), - ", ".into(), - "}".into() - ) - )); - node.cmd = Some(Arc::new(RwLock::new(pty_editor))); Some(node) }, _ => None @@ -297,7 +248,7 @@ pub fn init_math_ctx(parent: Arc>) -> Arc> { let mut node = Context::make_node( &ctx, TypeTerm::Type { - id: ctx.read().unwrap().get_typeid("List").unwrap(), + id: ctx.read().unwrap().get_fun_typeid("List").unwrap(), args: vec![ TypeTerm::new(ctx.read().unwrap().get_typeid("Digit").unwrap()) .num_arg(radix)