From 7050d2da6fd361ef8318f349c4d00ffd6ac294bf Mon Sep 17 00:00:00 2001 From: suri-codes Date: Tue, 7 Apr 2026 09:55:31 -0700 Subject: [PATCH] fix: more rigorous selection logic after closing zettel --- src/lsp/mod.rs | 1 + src/tui/app.rs | 6 ++++-- src/tui/components/zk/mod.rs | 22 +++++++++------------- src/tui/signal.rs | 7 +++++-- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/lsp/mod.rs b/src/lsp/mod.rs index 4330222..0d29143 100644 --- a/src/lsp/mod.rs +++ b/src/lsp/mod.rs @@ -54,6 +54,7 @@ impl LanguageServer for Backend { } async fn completion(&self, params: CompletionParams) -> Result> { + eprintln!("WHATTDAFUCKKK"); let Some(trigger) = params .context .as_ref() diff --git a/src/tui/app.rs b/src/tui/app.rs index a6ab3e7..bb58c27 100644 --- a/src/tui/app.rs +++ b/src/tui/app.rs @@ -11,7 +11,7 @@ use tracing::{debug, trace}; use crate::{ config::Config, tui::{Event, Tui, components::Viewport}, - types::KastenHandle, + types::{KastenHandle, ZettelId}, }; use super::{components::Component, signal::Signal}; @@ -207,7 +207,9 @@ impl App { debug!("successfully processed path: {}", path.display()); - self.signal_tx.send(Signal::ClosedZettel)?; + let zid: ZettelId = path.try_into()?; + + self.signal_tx.send(Signal::ClosedZettel { zid })?; tui.terminal.clear()?; tui.enter()?; diff --git a/src/tui/components/zk/mod.rs b/src/tui/components/zk/mod.rs index ef6921e..947036d 100644 --- a/src/tui/components/zk/mod.rs +++ b/src/tui/components/zk/mod.rs @@ -250,13 +250,7 @@ impl Component for Zk<'_> { return Ok(Some(Signal::Helix { path })); } - Signal::ClosedZettel => { - let selected = self - .zettel_list - .state - .selected() - .expect("This must be the zettel we just edited"); - + Signal::ClosedZettel { zid } => { // regenerate a fresh zettel list self.zettel_list = ZettelList::new( self.get_zettels_by_current_query().await?, @@ -264,19 +258,21 @@ impl Component for Zk<'_> { self.zettel_list.width, ); - let Some(zid) = self.zettel_list.id_list.get(selected) else { - return Ok(None); - }; - let kt = self.kh.read().await; - let zettel = Zettel::fetch_from_db(zid, &kt.db) + let zettel = Zettel::fetch_from_db(&zid, &kt.db) .await? .expect("invariant broken, we just closed this zettel"); + let idx = self + .zettel_list + .id_list + .iter() + .position(|id| *id == zettel.id); + // reset the state of the component self.search.clear_query(); - self.zettel_list.state.select_first(); + self.zettel_list.state.select(idx); self.zettel_view = ZettelView::from(&zettel); self.preview = Preview::from(zettel.content(&kt.index).clone()); diff --git a/src/tui/signal.rs b/src/tui/signal.rs index bb2b11e..2dc55cf 100644 --- a/src/tui/signal.rs +++ b/src/tui/signal.rs @@ -5,7 +5,7 @@ use strum::Display; use serde::{Deserialize, Serialize}; -use crate::tui::Region; +use crate::{tui::Region, types::ZettelId}; /// The varying signals that can be emitted. #[derive(Debug, Clone, PartialEq, Eq, Display, Serialize, Deserialize)] @@ -33,7 +33,10 @@ pub enum Signal { /// User asks to open a `Zettel` OpenZettel, /// The user is done editing a `Zettel` - ClosedZettel, + ClosedZettel { + /// the id of the `Zettel` that was closed + zid: ZettelId, + }, /// this is fucking temporary Helix { -- 2.51.2