Replace rich_text
with markdown
in assistant2
(#11650)
We don't implement copy yet but it should be pretty straightforward to add. https://github.com/zed-industries/zed/assets/482957/6b4d7c34-de6b-4b07-aed9-608c771bbbdb /cc: @rgbkrk @maxbrunsfeld @maxdeviant Release Notes: - N/A
This commit is contained in:
parent
0d760d8d19
commit
358bc2d225
5 changed files with 205 additions and 118 deletions
|
@ -3,10 +3,10 @@ mod parser;
|
|||
use crate::parser::CodeBlockKind;
|
||||
use futures::FutureExt;
|
||||
use gpui::{
|
||||
point, quad, AnyElement, Bounds, CursorStyle, DispatchPhase, Edges, FontStyle, FontWeight,
|
||||
GlobalElementId, Hitbox, Hsla, MouseDownEvent, MouseEvent, MouseMoveEvent, MouseUpEvent, Point,
|
||||
Render, StrikethroughStyle, Style, StyledText, Task, TextLayout, TextRun, TextStyle,
|
||||
TextStyleRefinement, View,
|
||||
point, quad, AnyElement, AppContext, Bounds, CursorStyle, DispatchPhase, Edges, FocusHandle,
|
||||
FocusableView, FontStyle, FontWeight, GlobalElementId, Hitbox, Hsla, KeyContext,
|
||||
MouseDownEvent, MouseEvent, MouseMoveEvent, MouseUpEvent, Point, Render, StrikethroughStyle,
|
||||
Style, StyledText, Task, TextLayout, TextRun, TextStyle, TextStyleRefinement, View,
|
||||
};
|
||||
use language::{Language, LanguageRegistry, Rope};
|
||||
use parser::{parse_markdown, MarkdownEvent, MarkdownTag, MarkdownTagEnd};
|
||||
|
@ -36,6 +36,7 @@ pub struct Markdown {
|
|||
parsed_markdown: ParsedMarkdown,
|
||||
should_reparse: bool,
|
||||
pending_parse: Option<Task<Option<()>>>,
|
||||
focus_handle: FocusHandle,
|
||||
language_registry: Arc<LanguageRegistry>,
|
||||
}
|
||||
|
||||
|
@ -46,6 +47,7 @@ impl Markdown {
|
|||
language_registry: Arc<LanguageRegistry>,
|
||||
cx: &mut ViewContext<Self>,
|
||||
) -> Self {
|
||||
let focus_handle = cx.focus_handle();
|
||||
let mut this = Self {
|
||||
source,
|
||||
selection: Selection::default(),
|
||||
|
@ -55,6 +57,7 @@ impl Markdown {
|
|||
should_reparse: false,
|
||||
parsed_markdown: ParsedMarkdown::default(),
|
||||
pending_parse: None,
|
||||
focus_handle,
|
||||
language_registry,
|
||||
};
|
||||
this.parse(cx);
|
||||
|
@ -66,6 +69,16 @@ impl Markdown {
|
|||
self.parse(cx);
|
||||
}
|
||||
|
||||
pub fn reset(&mut self, source: String, cx: &mut ViewContext<Self>) {
|
||||
self.source = source;
|
||||
self.selection = Selection::default();
|
||||
self.autoscroll_request = None;
|
||||
self.pending_parse = None;
|
||||
self.should_reparse = false;
|
||||
self.parsed_markdown = ParsedMarkdown::default();
|
||||
self.parse(cx);
|
||||
}
|
||||
|
||||
pub fn source(&self) -> &str {
|
||||
&self.source
|
||||
}
|
||||
|
@ -120,6 +133,12 @@ impl Render for Markdown {
|
|||
}
|
||||
}
|
||||
|
||||
impl FocusableView for Markdown {
|
||||
fn focus_handle(&self, _cx: &AppContext) -> FocusHandle {
|
||||
self.focus_handle.clone()
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Default, Debug)]
|
||||
struct Selection {
|
||||
start: usize,
|
||||
|
@ -309,6 +328,7 @@ impl MarkdownElement {
|
|||
reversed: false,
|
||||
pending: true,
|
||||
};
|
||||
cx.focus(&markdown.focus_handle);
|
||||
}
|
||||
|
||||
cx.notify();
|
||||
|
@ -593,6 +613,13 @@ impl Element for MarkdownElement {
|
|||
hitbox: &mut Self::PrepaintState,
|
||||
cx: &mut WindowContext,
|
||||
) {
|
||||
let focus_handle = self.markdown.read(cx).focus_handle.clone();
|
||||
cx.set_focus_handle(&focus_handle);
|
||||
|
||||
let mut context = KeyContext::default();
|
||||
context.add("Markdown");
|
||||
cx.set_key_context(context);
|
||||
|
||||
self.paint_mouse_listeners(hitbox, &rendered_markdown.text, cx);
|
||||
rendered_markdown.element.paint(cx);
|
||||
self.paint_selection(bounds, &rendered_markdown.text, cx);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue