documents: the selected Markdown, in source or an open block
CI / platforms (windows-latest) (push) Failing after 9s
CI / site (push) Successful in 21s
CI / crate (push) Failing after 11m47s
CI / platforms (ubuntu-24.04) (push) Canceled after 0s

This commit is contained in:
ZacharyZhang-NY committed 2026-10-12 10:06:57 -04:00
1 parent fd8c98f3b1
commit c7a86079fc
2 files changed
+37

No files matched your search

+10
View File
@@ -28,6 +28,16 @@ impl MarkdownDocument {
point(&self.text(cx), open.range.start + joined + input.cursor())
}
/// The selected Markdown: the source's, or the open block's.
pub fn selected(&self, cx: &App) -> String {
let Some(open) = &self.open else {
let editor = self.editor.read(cx);
return editor.text()[editor.primary().range()].to_string();
};
let input = open.input.read(cx);
input.text()[input.selection()].to_string()
}
/// The caret to `line` and `column`, clamped to text.
pub fn set_caret(&mut self, line: usize, column: usize, cx: &mut Context<Self>) {
self.commit(cx);
+27
View File
@@ -198,3 +198,30 @@ fn a_reset_keeps_the_caret_and_the_top_line(cx: &mut TestAppContext) {
});
assert_eq!((caret, top), ((40, 2), 30));
}
#[gpui::test]
fn the_selection_reads_in_source_and_in_an_open_block(cx: &mut TestAppContext) {
let (document, cx) = open("# One\n\nTwo words.\n", MarkdownMode::Source, cx);
document.update(cx, |document, cx| {
document
.editor
.update(cx, |editor, cx| editor.select(std::iter::once(2..5), cx))
});
assert_eq!(
document.read_with(cx, |document, cx| document.selected(cx)),
"One"
);
document.update_in(cx, |document, window, cx| {
document.set_mode(MarkdownMode::Visual, window, cx)
});
frames(cx);
super::type_in(&document, Some(1), None, cx);
document.update(cx, |document, cx| {
let open = document.open.as_ref().expect("a block is open");
open.input.update(cx, |input, cx| input.select(4..9, cx));
});
assert_eq!(
document.read_with(cx, |document, cx| document.selected(cx)),
"words"
);
}