A simple CPU rendered GUI IDE experience.
Diffstat (limited to 'src/edi/input_handlers/cursor.rs')
-rw-r--r--src/edi/input_handlers/cursor.rs36
1 files changed, 20 insertions, 16 deletions
diff --git a/src/edi/input_handlers/cursor.rs b/src/edi/input_handlers/cursor.rs
index 05b6f95..f61fdfc 100644
--- a/src/edi/input_handlers/cursor.rs
+++ b/src/edi/input_handlers/cursor.rs
@@ -16,6 +16,7 @@ enum Set<T> {
}
use crate::edi::*;
use crate::hov::{DiagnosticHovr, Hoverable, Hovring};
+use crate::lsp::BehaviourAfter;
use crate::rnd::CellBuffer;
impl Editor {
#[implicit_fn]
@@ -118,7 +119,7 @@ impl Editor {
pub fn find_diags(
&mut self,
cursor_position: (usize, usize),
- w: Arc<dyn Window>,
+ w: &Arc<dyn Window>,
) -> Option<Vec<Hoverable>> {
lsp!(let lsp, p = self else None);
@@ -160,7 +161,7 @@ impl Editor {
]
};
// println!("{x:?}");
- DiagnosticHovr::new(span, x, &w, r)
+ DiagnosticHovr::new(span, x, w, r)
})
.map(Hoverable::Diagnostic)
.collect::<Vec<_>>()
@@ -261,20 +262,25 @@ impl Editor {
// return;
// }
// if !running.insert(hover) {return}
- let (rx, _) = lsp
- .request::<HoverRequest>(&HoverParams {
- text_document_position_params: tdpp.clone(),
- work_done_progress_params: default(),
- })
- .unwrap();
+ // let (rx, _) =;
// println!("rq hov of {hover:?} (cur {})", requests.hovering.request.is_some());
let tdp = tdpp.clone();
+ let window = w.clone();
let handle: tokio::task::JoinHandle<Result<Option<Hovr>, _>> =
lsp.runtime.spawn(async move {
- let Some(x) = rx.await? else {
+ let Some(x) = lsp
+ .request_::<HoverRequest, { BehaviourAfter::Nil }>(
+ &HoverParams {
+ text_document_position_params: tdp.clone(),
+ work_done_progress_params: default(),
+ },
+ )?
+ .0
+ .await?
+ else {
return Ok(None::<Hovr>);
};
- let (w, cells) = spawn_blocking(move || {
+ let (width, cells) = spawn_blocking(move || {
let x = match &x.contents {
lsp_types::HoverContents::Scalar(
marked_string,
@@ -327,22 +333,20 @@ impl Editor {
]
})
});
+ let cells = cells.into();
+ window.request_redraw();
Ok(Some(
hov::Hovr {
span,
tdpp: tdp,
- item: CellBuffer {
- c: w,
- vo: 0,
- cells: cells.into(),
- },
+ item: CellBuffer { c: width, vo: 0, cells: cells },
range: x.range,
// range: x.range.and_then(|x| text.l_range(x)),
}
.into(),
))
});
- let diags = self.find_diags(cursor_position, w);
+ let diags = self.find_diags(cursor_position, &w);
self.state
.consume(Action::SetHovering(
diags.map(|of| Hovring { of, ..default() }),