@@ -2769,7 +2769,7 @@ pub mod cmd {
2770 let mut fragments: Vec<_> = selection
2770 let mut fragments: Vec<_> = selection
2771 .fragments(text)
2771 .fragments(text)
2772− .map(|fragment| Tendril::from_slice(&fragment))
2772+ .map(|fragment| Tendril::from(fragment.as_ref()))
2773 .collect();
2773 .collect();
2775 fragments.sort_by(match reverse {
2775 fragments.sort_by(match reverse {
@@ -3921,7 +3921,7 @@ fn try_restore_indent(doc: &mut Document, view_id: ViewId) {
3921 if let [Operation::Retain(move_pos), Operation::Insert(ref inserted_str), Operation::Retain(_)] =
3921 if let [Operation::Retain(move_pos), Operation::Insert(ref inserted_str), Operation::Retain(_)] =
3924− move_pos + inserted_str.len32() as usize == pos
3924+ move_pos + inserted_str.len() == pos
3925 && inserted_str.starts_with('\n')
3925 && inserted_str.starts_with('\n')
3926 && inserted_str.chars().skip(1).all(char_is_whitespace)
3926 && inserted_str.chars().skip(1).all(char_is_whitespace)
3927 && pos == line_end_pos // ensure no characters exists after current position
3927 && pos == line_end_pos // ensure no characters exists after current position
@@ -4513,7 +4513,8 @@ pub mod insert {
4513 #[allow(clippy::unnecessary_wraps)] // need to use Option<> because of the Hook signature
4513 #[allow(clippy::unnecessary_wraps)] // need to use Option<> because of the Hook signature
4514 fn insert(doc: &Rope, selection: &Selection, ch: char) -> Option<Transaction> {
4514 fn insert(doc: &Rope, selection: &Selection, ch: char) -> Option<Transaction> {
4515 let cursors = selection.clone().cursors(doc.slice(..));
4515 let cursors = selection.clone().cursors(doc.slice(..));
4516− let t = Tendril::from_char(ch);
4516+ let mut t = Tendril::new();
4517 let transaction = Transaction::insert(doc, &cursors, t);
4518 let transaction = Transaction::insert(doc, &cursors, t);
4518 Some(transaction)
4519 Some(transaction)
@@ -5015,12 +5016,12 @@ fn replace_with_yanked(cx: &mut Context) {
5015 let repeat = std::iter::repeat(
5016 let repeat = std::iter::repeat(
5018− .map(|value| Tendril::from_slice(&value.repeat(count)))
5019+ .map(|value| Tendril::from(&value.repeat(count)))
5019 .unwrap(),
5020 .unwrap(),
5021 let mut values = values
5022 let mut values = values
5023− .map(|value| Tendril::from_slice(&value.repeat(count)))
5024+ .map(|value| Tendril::from(&value.repeat(count)))
5024 .chain(repeat);
5025 .chain(repeat);
5025 let selection = doc.selection(view.id);
5026 let selection = doc.selection(view.id);
5026 let transaction = Transaction::change_by_selection(doc.text(), selection, |range| {
5027 let transaction = Transaction::change_by_selection(doc.text(), selection, |range| {
@@ -5530,7 +5531,7 @@ fn rotate_selection_contents(cx: &mut Context, direction: Direction) {
5530 let selection = doc.selection(view.id);
5531 let selection = doc.selection(view.id);
5531 let mut fragments: Vec<_> = selection
5532 let mut fragments: Vec<_> = selection
5532 .fragments(text)
5533 .fragments(text)
5533− .map(|fragment| Tendril::from_slice(&fragment))
5534+ .map(|fragment| Tendril::from(fragment.as_ref()))
5534 .collect();
5535 .collect();
5536 let group = count
5537 let group = count
@@ -5891,8 +5892,12 @@ fn surround_add(cx: &mut Context) {
5892 let mut changes = Vec::with_capacity(selection.len() * 2);
5893 let mut changes = Vec::with_capacity(selection.len() * 2);
5893 for range in selection.iter() {
5894 for range in selection.iter() {
5894− changes.push((range.from(), range.from(), Some(Tendril::from_char(open))));
5895+ let mut o = Tendril::new();
5895− changes.push((range.to(), range.to(), Some(Tendril::from_char(close))));
5896+ o.push(open);
5897+ let mut c = Tendril::new();
5899+ changes.push((range.from(), range.from(), Some(o)));
5900+ changes.push((range.to(), range.to(), Some(c)));
5898 let transaction = Transaction::change(doc.text(), changes.into_iter());
5903 let transaction = Transaction::change(doc.text(), changes.into_iter());
@@ -5921,11 +5926,9 @@ fn surround_replace(cx: &mut Context) {
5921 let transaction = Transaction::change(
5926 let transaction = Transaction::change(
5922 doc.text(),
5927 doc.text(),
5923 change_pos.iter().enumerate().map(|(i, &pos)| {
5928 change_pos.iter().enumerate().map(|(i, &pos)| {
5924− (
5929+ let mut t = Tendril::new();
5927− Some(Tendril::from_char(if i % 2 == 0 { open } else { close })),
5930+ t.push(if i % 2 == 0 { open } else { close });
5928− )
5931+ (pos, pos + 1, Some(t))
5931 doc.apply(&transaction, view.id);
5934 doc.apply(&transaction, view.id);
@@ -6065,8 +6068,9 @@ fn shell_impl(
6065 log::error!("Shell error: {}", String::from_utf8_lossy(&output.stderr));
6068 log::error!("Shell error: {}", String::from_utf8_lossy(&output.stderr));
6068− let tendril = Tendril::try_from_byte_slice(&output.stdout)
6071+ let str = std::str::from_utf8(&output.stdout)
6069 .map_err(|_| anyhow!("Process did not output valid UTF-8"))?;
6072 .map_err(|_| anyhow!("Process did not output valid UTF-8"))?;
6073+ let tendril = Tendril::from(str);
6070 Ok((tendril, output.status.success()))
6074 Ok((tendril, output.status.success()))