diff --git a/kinode/packages/kino_updates/widget/src/lib.rs b/kinode/packages/kino_updates/widget/src/lib.rs index b1209389..4e22ccb6 100644 --- a/kinode/packages/kino_updates/widget/src/lib.rs +++ b/kinode/packages/kino_updates/widget/src/lib.rs @@ -149,8 +149,13 @@ fn fetch_most_recent_blog_posts(n: usize) -> Vec { 60, vec![], ) { - Ok(response) => serde_json::from_slice::>(response.body()) - .expect("Invalid UTF-8 from kinode.org"), + Ok(response) => match serde_json::from_slice::>(response.body()) { + Ok(posts) => posts, + Err(e) => { + println!("Failed to parse blog posts: {e:?}"); + vec![] + } + }, Err(e) => { println!("Failed to fetch blog posts: {e:?}"); vec![] diff --git a/kinode/src/terminal/mod.rs b/kinode/src/terminal/mod.rs index 02c080e1..05eae5e6 100644 --- a/kinode/src/terminal/mod.rs +++ b/kinode/src/terminal/mod.rs @@ -444,9 +444,9 @@ pub async fn terminal( )?; }, // - // BACKSPACE or DELETE: delete a single character at cursor + // BACKSPACE: delete a single character at cursor // - KeyCode::Backspace | KeyCode::Delete => { + KeyCode::Backspace => { if line_col == prompt_len { continue; } @@ -477,6 +477,35 @@ pub async fn terminal( )?; }, // + // DELETE: delete a single character at right of cursor + // + KeyCode::Delete => { + if line_col == current_line.len() { + continue; + } + current_line.remove(line_col); + if search_mode { + utils::execute_search( + &our, + &mut stdout, + ¤t_line, + prompt_len, + (win_cols, win_rows), + (line_col, cursor_col), + &mut command_history, + search_depth, + )?; + continue; + } + execute!( + stdout, + cursor::MoveTo(0, win_rows), + terminal::Clear(ClearType::CurrentLine), + Print(utils::truncate_in_place(¤t_line, prompt_len, win_cols, (line_col, cursor_col))), + cursor::MoveTo(cursor_col, win_rows), + )?; + } + // // LEFT: move cursor one spot left // KeyCode::Left => {