notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

commit 9720bf829255c1af3d932699e271d4209dea19f4
parent e40ebd87c2123a1863ddde3b0f348826ec52196e
Author: William Casarin <jb55@jb55.com>
Date:   Wed, 28 Jan 2026 22:22:46 -0800

feat(dave): change Ctrl+D to toggle Done status in focus queue

Instead of dismissing any focus queue item, Ctrl+D now only removes
items that have Done priority. This prevents accidentally dismissing
NeedsInput or Error items.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

Diffstat:
Mcrates/notedeck_dave/src/lib.rs | 18++++++++++--------
Mcrates/notedeck_dave/src/ui/keybindings.rs | 8++++----
2 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/crates/notedeck_dave/src/lib.rs b/crates/notedeck_dave/src/lib.rs @@ -17,7 +17,7 @@ use chrono::{Duration, Local}; use claude_agent_sdk_rs::PermissionMode; use egui_wgpu::RenderState; use enostr::KeypairUnowned; -use focus_queue::FocusQueue; +use focus_queue::{FocusPriority, FocusQueue}; use nostrdb::Transaction; use notedeck::{ui::is_narrow, AppAction, AppContext, AppResponse}; use std::collections::HashMap; @@ -1165,10 +1165,13 @@ You are an AI agent for the nostr protocol called Dave, created by Damus. nostr } } - /// Dismiss the current item from the focus queue - fn focus_queue_dismiss(&mut self) { + /// Toggle Done status for the current focus queue item. + /// If the item is Done, remove it from the queue. + fn focus_queue_toggle_done(&mut self) { if let Some(entry) = self.focus_queue.current() { - self.focus_queue.dequeue(entry.session_id); + if entry.priority == FocusPriority::Done { + self.focus_queue.dequeue(entry.session_id); + } } } @@ -1313,8 +1316,7 @@ You are an AI agent for the nostr protocol called Dave, created by Damus. nostr let current_session = self.session_manager.active_id(); let current_priority = current_session.and_then(|id| self.focus_queue.get_session_priority(id)); - let already_on_needs_input = - current_priority == Some(focus_queue::FocusPriority::NeedsInput); + let already_on_needs_input = current_priority == Some(FocusPriority::NeedsInput); if !already_on_needs_input { // Save current session before stealing (only if we haven't saved yet) @@ -1533,8 +1535,8 @@ impl notedeck::App for Dave { KeyAction::FocusQueuePrev => { self.focus_queue_prev(); } - KeyAction::FocusQueueDismiss => { - self.focus_queue_dismiss(); + KeyAction::FocusQueueToggleDone => { + self.focus_queue_toggle_done(); } KeyAction::ToggleAutoSteal => { self.toggle_auto_steal(); diff --git a/crates/notedeck_dave/src/ui/keybindings.rs b/crates/notedeck_dave/src/ui/keybindings.rs @@ -33,8 +33,8 @@ pub enum KeyAction { FocusQueueNext, /// Navigate to previous item in focus queue (Ctrl+P) FocusQueuePrev, - /// Dismiss current item from focus queue (Ctrl+D) - FocusQueueDismiss, + /// Toggle Done status for current focus queue item (Ctrl+D) + FocusQueueToggleDone, /// Toggle auto-steal focus mode (Ctrl+Space) ToggleAutoSteal, /// Open external editor for composing input (Ctrl+G) @@ -109,9 +109,9 @@ pub fn check_keybindings( return Some(KeyAction::TogglePlanMode); } - // Ctrl+D to dismiss current item from focus queue + // Ctrl+D to toggle Done status for current focus queue item if ctx.input(|i| i.modifiers.matches_exact(ctrl) && i.key_pressed(Key::D)) { - return Some(KeyAction::FocusQueueDismiss); + return Some(KeyAction::FocusQueueToggleDone); } // Ctrl+Space to toggle auto-steal focus mode