documents: the selected Markdown, in source or an open block
This commit is contained in:
2 files changed
+37
No files matched your search
@@ -28,6 +28,16 @@ impl MarkdownDocument {
|
|||||||
point(&self.text(cx), open.range.start + joined + input.cursor())
|
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.
|
/// The caret to `line` and `column`, clamped to text.
|
||||||
pub fn set_caret(&mut self, line: usize, column: usize, cx: &mut Context<Self>) {
|
pub fn set_caret(&mut self, line: usize, column: usize, cx: &mut Context<Self>) {
|
||||||
self.commit(cx);
|
self.commit(cx);
|
||||||
|
|||||||
@@ -198,3 +198,30 @@ fn a_reset_keeps_the_caret_and_the_top_line(cx: &mut TestAppContext) {
|
|||||||
});
|
});
|
||||||
assert_eq!((caret, top), ((40, 2), 30));
|
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"
|
||||||
|
);
|
||||||
|
}
|
||||||
Reference in new issue
Block a user