My personal-knowledge-system, with deeply integrated task tracking and long term goal planning capabilities.
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: renaming of tasks persists into the zettel

+51 -34
+20 -20
.config/config.ron
··· 1 1 ( 2 2 directory: "/Users/suri/dev/projects/filaments/ZettelKasten", 3 3 global_key_binds: { 4 + "down": MoveDown, 4 5 "ctrl-z": Suspend, 5 - "up": MoveUp, 6 6 "ctrl-c": Quit, 7 - "down": MoveDown, 7 + "up": MoveUp, 8 8 }, 9 9 zk: ( 10 10 keybinds: { ··· 18 18 todo: ( 19 19 explorer: ( 20 20 keybinds: { 21 - "j": MoveDown, 22 - "tab": SwitchTo( 23 - page: Zk, 24 - ), 25 - "k": MoveUp, 26 21 "1": SwitchTo( 27 22 page: Todo(Explorer), 28 23 ), 29 - "g": NewSubGroup, 30 - "t": NewTask, 24 + "j": MoveDown, 31 25 "enter": SwitchTo( 32 26 page: Todo(Inspector), 33 27 ), 28 + "tab": SwitchTo( 29 + page: Zk, 30 + ), 31 + "g": NewSubGroup, 34 32 "2": SwitchTo( 35 33 page: Todo(Inspector), 36 34 ), 35 + "t": NewTask, 37 36 "3": SwitchTo( 38 37 page: Todo(TaskList), 39 38 ), 40 39 "shift-g": NewGroup, 40 + "k": MoveUp, 41 41 }, 42 42 ), 43 43 inspector: ( 44 44 keybinds: { 45 - "p": EditPriority, 46 45 "tab": SwitchTo( 47 46 page: Zk, 48 47 ), 49 - "2": SwitchTo( 50 - page: Todo(Inspector), 48 + "1": SwitchTo( 49 + page: Todo(Explorer), 51 50 ), 51 + "n": EditName, 52 52 "3": SwitchTo( 53 53 page: Todo(TaskList), 54 54 ), 55 - "1": SwitchTo( 56 - page: Todo(Explorer), 55 + "p": EditPriority, 56 + "2": SwitchTo( 57 + page: Todo(Inspector), 57 58 ), 58 - "n": EditName, 59 59 }, 60 60 ), 61 61 tasklist: ( 62 62 keybinds: { 63 + "k": MoveUp, 64 + "enter": SwitchTo( 65 + page: Todo(Inspector), 66 + ), 63 67 "tab": SwitchTo( 64 68 page: Zk, 65 69 ), 66 70 "3": SwitchTo( 67 71 page: Todo(TaskList), 68 72 ), 69 - "k": MoveUp, 70 - "j": MoveDown, 71 - "enter": SwitchTo( 72 - page: Todo(Inspector), 73 - ), 74 73 "2": SwitchTo( 75 74 page: Todo(Inspector), 76 75 ), 76 + "j": MoveDown, 77 77 "1": SwitchTo( 78 78 page: Todo(Explorer), 79 79 ),
+2 -3
crates/dto/src/entity/tag.rs
··· 40 40 self.color = Set(Color::default()); 41 41 } 42 42 43 - if let Set(ref mut name) = self.name 44 - && insert 45 - { 43 + if let Set(ref mut name) = self.name { 46 44 *name = name.replace(' ', "_"); 47 45 } 46 + 48 47 Box::pin(ready(Ok(self))) 49 48 } 50 49 }
+3 -11
src/tui/components/todo/inspector/mod.rs
··· 1 1 use async_trait::async_trait; 2 2 use crossterm::event::{KeyCode, KeyEvent}; 3 - use dto::{GroupEntity, IntoActiveModel, NanoId, TagEntity, TaskEntity}; 3 + use dto::NanoId; 4 4 use ratatui::{ 5 5 Frame, 6 6 layout::{Constraint, Direction, Layout, Rect}, ··· 15 15 Signal, 16 16 components::{Component, DEFAULT_NAME}, 17 17 }, 18 - types::{Group, KastenHandle, TodoNode, TodoNodeKind}, 18 + types::{Group, KastenHandle, Task, TodoNode, TodoNodeKind}, 19 19 }; 20 20 21 21 mod rootview; ··· 241 241 let mut kt = self.kh.write().await; 242 242 match &self.render_data { 243 243 RenderData::Task { .. } => { 244 - let _ = TaskEntity::load() 245 - .filter_by_nano_id(id.clone()) 246 - .one(&kt.db) 247 - .await? 248 - .expect("Invariant Broken: Must exist") 249 - .into_active_model() 250 - .set_name(new_name.as_str()) 251 - .save(&kt.db) 252 - .await?; 244 + Task::alter_name(id.clone(), new_name, &mut kt).await?; 253 245 } 254 246 RenderData::Group { .. } => { 255 247 Group::alter_name(id.clone(), new_name, &mut kt).await?;
+26
src/types/task.rs
··· 91 91 Ok(task) 92 92 } 93 93 94 + pub async fn alter_name( 95 + id: NanoId, 96 + new_name: impl Into<String>, 97 + kt: &mut Kasten, 98 + ) -> Result<()> { 99 + let new_name = new_name.into(); 100 + 101 + let task = TaskEntity::load() 102 + .filter_by_nano_id(id.clone()) 103 + .one(&kt.db) 104 + .await? 105 + .expect("Invariant Broken: Must exist"); 106 + 107 + let zettel_id = task.zettel_id.clone(); 108 + 109 + let _ = task 110 + .into_active_model() 111 + .set_name(new_name.as_str()) 112 + .save(&kt.db) 113 + .await?; 114 + 115 + Zettel::alter_name(zettel_id.into(), new_name, kt).await?; 116 + 117 + Ok(()) 118 + } 119 + 94 120 pub fn due(&self) -> Option<String> { 95 121 self.due 96 122 .map(|due| due.format(frontmatter::DATE_FMT_STR).to_string())