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:
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