diff --git a/.imgs/list_view.png b/.imgs/list_view.png index d952b97..4a24ffd 100644 Binary files a/.imgs/list_view.png and b/.imgs/list_view.png differ diff --git a/README.md b/README.md index c8683a7..f5d4f47 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,99 @@ # Org -Org is a simple orgmode application inspired from the simplicity of `nano`. +A simple terminal-based Org-mode task manager inspired by the simplicity of `nano`. Manage your TODO items, track time, and stay organized without leaving the command line. +## Installation + +```bash +go install github.com/rwejlgaard/org/cmd/org@latest +``` + +Or build from source: +```bash +git clone https://github.com/rwejlgaard/org +cd org +go build -o bin/org ./cmd/org +``` + +## Usage + +```bash +org [filename] # Open specific org file +org -f tasks.org # Open using -f flag +org # Opens ./todo.org by default +``` + +## Features + +### Task Management +- **TODO States**: Cycle through TODO, PROG (in progress), BLOCK (blocked), and DONE states +- **Hierarchical Tasks**: Create sub-tasks and organize items with multiple levels +- **Priority Levels**: Set priorities (A, B, C) with color-coded indicators +- **Folding**: Collapse and expand tasks and notes with Tab key +- **Quick Capture**: Press 'c' to quickly capture new TODO items +- **Reorder Mode**: Reorganize tasks with shift+up/down arrows + +### Scheduling & Deadlines +- **Deadlines**: Set and track task deadlines with visual indicators +- **Scheduled Dates**: Schedule tasks for specific dates +- **Agenda View**: View upcoming tasks for the next 7 days +- **Overdue Highlighting**: Automatically highlights overdue items in red + +### Time Tracking +- **Clock In/Out**: Track time spent on tasks with 'i' (clock in) and 'o' (clock out) +- **Duration Display**: See current and total time tracked per task +- **Effort Estimates**: Set estimated effort (e.g., 8h, 2d, 1w) +- **Automatic Logging**: All clock entries are logged in LOGBOOK drawer + +### Notes & Documentation +- **Rich Notes**: Add detailed notes to any task with Enter key +- **Syntax Highlighting**: Code blocks are automatically highlighted (supports both ```lang and #+BEGIN_SRC formats) +- **Markdown Support**: Use markdown-style code blocks in your notes +- **Drawer Management**: LOGBOOK and PROPERTIES drawers are automatically filtered in list view + +### Keybindings + +| Key | Action | +|-----|--------| +| `↑/k`, `↓/j` | Navigate up/down | +| `←/h`, `→/l` | Cycle state backward/forward | +| `t` or `space` | Cycle TODO state | +| `tab` | Fold/unfold item | +| `enter` | Edit notes | +| `c` | Capture new TODO | +| `s` | Add sub-task | +| `D` | Delete item (with confirmation) | +| `a` | Toggle agenda view | +| `i` | Clock in | +| `o` | Clock out | +| `d` | Set deadline | +| `p` | Set priority | +| `e` | Set effort | +| `r` | Toggle reorder mode | +| `shift+↑/↓` | Move item up/down (in reorder mode) | +| `ctrl+s` | Save | +| `?` | Toggle help | +| `q` or `ctrl+c` | Quit | + +### Auto-save +Changes are automatically saved when you quit the application. ## Screenshots ### List view ![list view](./.imgs/list_view.png) -## Editing notes +### Editing notes ![editing](./.imgs/editing.png) ### Prompts ![capture](./.imgs/capture_prompt.png) -![delete](./.imgs/delete_prompt.png) \ No newline at end of file +![delete](./.imgs/delete_prompt.png) + +## File Format + +The application uses standard Org-mode file format (.org), making it compatible with Emacs Org-mode and other Org-mode tools. + +## License + +MIT \ No newline at end of file diff --git a/internal/ui/views.go b/internal/ui/views.go index 177b157..34ec0ec 100644 --- a/internal/ui/views.go +++ b/internal/ui/views.go @@ -622,15 +622,15 @@ func (m uiModel) renderItem(item *model.Item, isCursor bool) string { stateStr := "" switch item.State { case model.StateTODO: - stateStr = todoStyle.Render("[TODO] ") + stateStr = todoStyle.Render("[TODO]") case model.StatePROG: - stateStr = progStyle.Render("[PROG] ") + stateStr = progStyle.Render("[PROG]") case model.StateBLOCK: stateStr = blockStyle.Render("[BLOCK]") case model.StateDONE: - stateStr = doneStyle.Render("[DONE] ") + stateStr = doneStyle.Render("[DONE]") default: - stateStr = " " // Empty space for alignment + stateStr = "" // Empty space for alignment } b.WriteString(stateStr) b.WriteString(" ")