# rafta.nvim A rafta task client for your favourite editor ## Concept & Ideas ### Design I love how [oil.nvim] works. The way you edit files feels very vim-like. My goal is to achieve something very similar with tasks taken from rafta instead of files. Here's my idea of how it should look (minus the pretty colors): ```  An unkpecified task 󰈙 󰓹4     An very long task about very important ongoing stuff 󰓹2  An incomplete task 󰈙 󰓹1    Another incomplete task 󰈙 󰓹10    Guess what, this task ain't done 󱈠   An incomplete task again 󰈙 󰓹2   A completed task  A blocked task, bummer *** You are offlline, will update next timee rafta.nvim is opened online *** ``` - **Status Column**: -  Undefined -  Ongoing -  Pending/Todo -  Done -  Blocked - **Tags Column** (how many labels are attached to a given tag): - 󰓹 1+ tags - 󱈠 0 tags - **Other columns**: -  Recurrence is enabled for that task -  A Planned/Scheduled date is set for that task -  A Deadline exists for that task - 󰈙 The task has a description (markdown file) - **Color defines priority** - 0 (undefined): `#f2f1f0` - 1 (Highest): `#D84141` - 2 (Very High): `#D75D47` - 3 (High): `#DCA056` - 4 (Medium): `#52C782` - 5 (Low): `#52A2C7` - 6 (Lowest): `#665FC4` To help the user know if the current task has schedules, deadlines, etc... The current line should be highlighted differently (since the columns are accross the screen). ### Usage I don't want to force commands onto users, so I'll provide lua function which they can configure how they please: **Opening the rafta client** (could be used to LazyLoad): - `open()` - `open_tab()` - `open_split()` - `open_vsplit()` **Managing Tasks**: - `set_priority()` - `sort(pattern string)` I have yet to figure out a spec for this - `filter(pattern string)` I have yet to figure out a spec for this - `set_labels()` (edit each label on a separate row in a floating window) - `set_schedule()` (nvim input window[^1]) - `set_deadline()` (nvim input window[^1]) - `set_scheduled()` (nvim input window) - `view_description()` opens a `.md` file in a new buffer (default: Enter key) - `toggle_view_deadlines(show boolean)` (nil arg is a true toggle) - `toggle_view_schedules(show boolean)` - `toggle_view_priority(show boolean)` Shows priority number (default: hidden) - Tasks titles are just edited via insert mode - Saving the buffer uploads changed tasks (Same goes for descriptions) - If when coming back online, there is a conflict, a vimdiff could be opened where each version is represented in a toml-like file (easier to diff for humans than json). Sections which have no content are ommited (but all sections alway have the same order for easy diffs) ``` [Title] This is the task title [Scheduled] 2015-08-21,19:20 [Tags] Work ThatOneProject TeamBuilding [Description] # Just append the markdown file here... ``` [^1]: Maybe also offer a datetimepicker floating window also?