mirror of
https://codeberg.org/Kankys/doxa.git
synced 2026-11-11 14:44:36 +01:00
new-app-doxatodo
This commit is contained in:
1 parent
5eacbb0182
commit
16414091b4
14 files changed
+2287
-20
No files matched your search
@@ -0,0 +1,25 @@
|
||||
# Binaries
|
||||
doxa-todo
|
||||
doxa-todo.exe
|
||||
|
||||
# Go workspace
|
||||
.go
|
||||
|
||||
# IDE
|
||||
.idea/
|
||||
.vscode/
|
||||
*.swp
|
||||
*.swo
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Logs
|
||||
*.log
|
||||
|
||||
# Test output
|
||||
test-output/
|
||||
|
||||
# Local configuration
|
||||
.doxa-todo/
|
||||
@@ -0,0 +1,9 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 Kankys
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
@@ -0,0 +1,260 @@
|
||||
# DOXA-TODO User Manual
|
||||
|
||||
## Introduction
|
||||
|
||||
DOXA-TODO is a terminal-based todo manager that helps you organize your tasks with support for categories, priorities, and tags. This manual provides detailed information about all features and usage patterns.
|
||||
|
||||
## Getting Started
|
||||
|
||||
### First Run
|
||||
|
||||
When you run `doxa-todo` for the first time:
|
||||
1. The application creates a configuration directory at `~/.doxa-todo/`
|
||||
2. An empty todo list file `doxa_todo.json` is created
|
||||
3. You're presented with the startup screen
|
||||
|
||||
Press `Enter` to start using the application.
|
||||
|
||||
## Main Interface
|
||||
|
||||
The main interface displays:
|
||||
- Application title
|
||||
- Status messages (if any)
|
||||
- Menu options
|
||||
- List of todos
|
||||
- Help information
|
||||
|
||||
### Menu Options
|
||||
|
||||
- **1: Add** - Add a new todo
|
||||
- **2: Edit** - Edit the selected todo
|
||||
- **3: Export** - Export the selected todo to a text file
|
||||
- **4: Delete** - Delete the selected todo
|
||||
- **/: Search** - Search todos by title, description, or tags
|
||||
- **b: Tags** - Browse all tags
|
||||
- **c: Filter** - Filter todos by category
|
||||
- **l: EN/CS** - Toggle language between English and Czech
|
||||
- **q: Quit** - Exit the application
|
||||
|
||||
## Adding a Todo
|
||||
|
||||
1. Press `1` to add a new todo
|
||||
2. Fill in the fields:
|
||||
- **Title** (required): The name of your todo
|
||||
- **Description** (optional): Detailed description
|
||||
- **Tags** (optional): Comma-separated list of tags
|
||||
3. The todo is automatically assigned:
|
||||
- Medium priority
|
||||
- Personal category
|
||||
- Current timestamp
|
||||
4. Press `Enter` to save (when not in description field)
|
||||
5. Use `+` key to cycle through priority levels
|
||||
|
||||
## Editing a Todo
|
||||
|
||||
1. Navigate to the todo you want to edit using `↑/↓` or `j/k`
|
||||
2. Press `2` to edit
|
||||
3. Modify the fields as needed
|
||||
4. Press `Enter` to save changes
|
||||
|
||||
## Priority Levels
|
||||
|
||||
Todos have 3 priority levels with color coding:
|
||||
- **Low** (Green ●): For tasks that can wait
|
||||
- **Medium** (Orange ●): Default priority for new tasks
|
||||
- **High** (Red ●): For urgent tasks
|
||||
|
||||
Use the `+` key when adding/editing to cycle through priority levels.
|
||||
|
||||
## Categories
|
||||
|
||||
Todos can be categorized as:
|
||||
- **Personal** (🏠 Blue): For personal tasks
|
||||
- **Work** (💼 Purple): For work-related tasks
|
||||
|
||||
### Filtering by Category
|
||||
|
||||
1. Press `c` to open the category filter
|
||||
2. Select:
|
||||
- `1`: Show only Personal todos
|
||||
- `2`: Show only Work todos
|
||||
- `0`: Show all todos (remove filter)
|
||||
3. The filter remains active until you change it or clear it
|
||||
|
||||
## Tags
|
||||
|
||||
Tags help you organize and find todos quickly.
|
||||
|
||||
### Adding Tags
|
||||
|
||||
When adding or editing a todo, enter comma-separated tags in the Tags field:
|
||||
```
|
||||
work, urgent, project-x
|
||||
```
|
||||
|
||||
### Browsing Tags
|
||||
|
||||
1. Press `b` to browse all tags
|
||||
2. Navigate with `↑/↓` or `j/k`
|
||||
3. Press `Enter` to filter todos by the selected tag
|
||||
4. Press `q` or `Esc` to return to the main list
|
||||
|
||||
## Searching
|
||||
|
||||
1. Press `/` to open search
|
||||
2. Type your search query
|
||||
3. Press `Enter` to search
|
||||
4. The list will show only todos matching your query in title, description, or tags
|
||||
5. Press `Esc` to clear the search
|
||||
|
||||
## Viewing a Todo
|
||||
|
||||
1. Navigate to the todo using `↑/↓` or `j/k`
|
||||
2. Press `Enter` to view details
|
||||
3. In the detail view:
|
||||
- `q`: Close and return to list
|
||||
- `2`: Edit the todo
|
||||
- `↑/↓`: Scroll the content
|
||||
|
||||
## Exporting a Todo
|
||||
|
||||
1. Select the todo you want to export
|
||||
2. Press `3` to export
|
||||
3. The todo is saved as a text file in `~/doxa-todo-export/`
|
||||
4. The filename format is: `{title}_{id}.txt`
|
||||
|
||||
The exported file contains:
|
||||
- Title
|
||||
- Category
|
||||
- Priority
|
||||
- Tags
|
||||
- Creation date
|
||||
- Description
|
||||
|
||||
## Deleting a Todo
|
||||
|
||||
1. Select the todo you want to delete
|
||||
2. Press `4` to open delete confirmation
|
||||
3. Press `y` to confirm deletion
|
||||
4. Press `n` or `Esc` to cancel
|
||||
|
||||
## Keyboard Shortcuts Summary
|
||||
|
||||
### Navigation
|
||||
- `↑/↓` or `j/k`: Move cursor up/down
|
||||
- `Enter`: Select/Confirm
|
||||
- `Esc`: Go back/Cancel
|
||||
- `q`: Quit
|
||||
|
||||
### Actions
|
||||
- `1`: Add new todo
|
||||
- `2`: Edit selected todo
|
||||
- `3`: Export selected todo
|
||||
- `4`: Delete selected todo
|
||||
- `/`: Search
|
||||
- `b`: Browse tags
|
||||
- `c`: Filter by category
|
||||
- `l`: Toggle language
|
||||
- `+`: Increase priority (when adding/editing)
|
||||
- `Tab`: Switch between fields
|
||||
|
||||
## Data Storage
|
||||
|
||||
All todos are stored in JSON format at:
|
||||
```
|
||||
~/.doxa-todo/doxa_todo.json
|
||||
```
|
||||
|
||||
The file is automatically created on first run and updated with every change.
|
||||
|
||||
### Backup
|
||||
|
||||
To backup your todos:
|
||||
```bash
|
||||
cp ~/.doxa-todo/doxa_todo.json ~/.doxa-todo/doxa_todo_backup.json
|
||||
```
|
||||
|
||||
### Restore
|
||||
|
||||
To restore from backup:
|
||||
```bash
|
||||
cp ~/.doxa-todo/doxa_todo_backup.json ~/.doxa-todo/doxa_todo.json
|
||||
```
|
||||
|
||||
## Export Directory
|
||||
|
||||
Exported todos are saved to:
|
||||
```
|
||||
~/doxa-todo-export/
|
||||
```
|
||||
|
||||
Each exported file contains the complete todo information in a readable text format.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Application doesn't start
|
||||
|
||||
Make sure you have:
|
||||
1. Go installed (version 1.26+)
|
||||
2. The application compiled and installed
|
||||
3. `~/.local/bin` in your PATH
|
||||
|
||||
### Todos not saving
|
||||
|
||||
Check:
|
||||
1. Write permissions for `~/.doxa-todo/`
|
||||
2. The directory exists
|
||||
3. No errors are displayed when saving
|
||||
|
||||
### Language not switching
|
||||
|
||||
Make sure you're pressing `l` from the main todo list view, not from other screens.
|
||||
|
||||
## Command Line Usage
|
||||
|
||||
### Basic Usage
|
||||
```bash
|
||||
doxa-todo
|
||||
```
|
||||
|
||||
### Running from source
|
||||
```bash
|
||||
cd doxa-todo
|
||||
go run .
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
The application uses the following directories:
|
||||
- `~/.doxa-todo/`: Configuration and data storage
|
||||
- `~/doxa-todo-export/`: Exported todos
|
||||
|
||||
You can modify the source code to change these paths if needed.
|
||||
|
||||
## Updates
|
||||
|
||||
To update to the latest version:
|
||||
```bash
|
||||
cd doxa-todo
|
||||
git pull origin master
|
||||
go build -o doxa-todo .
|
||||
cp doxa-todo ~/.local/bin/
|
||||
```
|
||||
|
||||
## Uninstall
|
||||
|
||||
To uninstall:
|
||||
```bash
|
||||
rm ~/.local/bin/doxa-todo
|
||||
rm -rf ~/.doxa-todo/
|
||||
rm -rf ~/doxa-todo-export/
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT License - Copyright (c) 2026 Kankys
|
||||
|
||||
## Support
|
||||
|
||||
For issues, questions, or contributions, please visit the project repository:
|
||||
https://codeberg.org/Kankys/doxa-todo
|
||||
@@ -0,0 +1,260 @@
|
||||
# DOXA-TODO Uživatelská Příručka
|
||||
|
||||
## Úvod
|
||||
|
||||
DOXA-TODO je terminálová aplikace pro správu úkolů, která vám pomůže organizovat vaše úkoly s podporou kategorií, priorit a štítků. Tato příručka poskytuje podrobné informace o všech funkcích a způsobech použití.
|
||||
|
||||
## Začínáme
|
||||
|
||||
### První spuštění
|
||||
|
||||
Když poprvé spustíte `doxa-todo`:
|
||||
1. Aplikace vytvoří konfigurační adresář `~/.doxa-todo/`
|
||||
2. Vytvoří se prázdný soubor se seznamem úkolů `doxa_todo.json`
|
||||
3. Zobrazí se úvodní obrazovka
|
||||
|
||||
Stiskněte `Enter` pro zahájení práce s aplikací.
|
||||
|
||||
## Hlavní rozhraní
|
||||
|
||||
Hlavní rozhraní zobrazuje:
|
||||
- Název aplikace
|
||||
- Stavové zprávy (pokud existují)
|
||||
- Možnosti menu
|
||||
- Seznam úkolů
|
||||
- Nápověda
|
||||
|
||||
### Možnosti menu
|
||||
|
||||
- **1: Přidat** - Přidat nový úkol
|
||||
- **2: Upravit** - Upravit vybraný úkol
|
||||
- **3: Export** - Exportovat vybraný úkol do textového souboru
|
||||
- **4: Smazat** - Smazat vybraný úkol
|
||||
- **/: Hledat** - Vyhledat úkoly podle názvu, popisu nebo štítků
|
||||
- **b: Tagy** - Procházet všechny štítky
|
||||
- **c: Filtr** - Filtr úkolů podle kategorie
|
||||
- **l: EN/CS** - Přepnout jazyk mezi angličtinou a češtinou
|
||||
- **q: Konec** - Ukončit aplikaci
|
||||
|
||||
## Přidávání úkolu
|
||||
|
||||
1. Stiskněte `1` pro přidání nového úkolu
|
||||
2. Vyplňte pole:
|
||||
- **Název** (povinný): Název vašeho úkolu
|
||||
- **Popis** (nepovinný): Podrobný popis
|
||||
- **Štítky** (nepovinné): Seznam štítků oddělených čárkami
|
||||
3. Úkolu se automaticky přiřadí:
|
||||
- Střední priorita
|
||||
- Osobní kategorie
|
||||
- Aktuální časové razítko
|
||||
4. Stiskněte `Enter` pro uložení (když nejste v poli popisu)
|
||||
5. Použijte klávesu `+` pro cyklické přepínání úrovní priority
|
||||
|
||||
## Úprava úkolu
|
||||
|
||||
1. Navigujte k úkolu, který chcete upravit, pomocí `↑/↓` nebo `j/k`
|
||||
2. Stiskněte `2` pro úpravu
|
||||
3. Upravte pole podle potřeby
|
||||
4. Stiskněte `Enter` pro uložení změn
|
||||
|
||||
## Úrovně priority
|
||||
|
||||
Úkoly mají 3 úrovně priority s barevným kódováním:
|
||||
- **Nízká** (Zelená ●): Pro úkoly, které mohou počkat
|
||||
- **Střední** (Oranžová ●): Výchozí priorita pro nové úkoly
|
||||
- **Vysoká** (Červená ●): Pro naléhavé úkoly
|
||||
|
||||
Použijte klávesu `+` při přidávání/úpravě pro přepínání úrovní priority.
|
||||
|
||||
## Kategorie
|
||||
|
||||
Úkoly lze kategorizovat jako:
|
||||
- **Osobní** (🏠 Modrá): Pro osobní úkoly
|
||||
- **Pracovní** (💼 Fialová): Pro pracovní úkoly
|
||||
|
||||
### Filtrace podle kategorie
|
||||
|
||||
1. Stiskněte `c` pro otevření filtru kategorií
|
||||
2. Vyberte:
|
||||
- `1`: Zobrazit pouze osobní úkoly
|
||||
- `2`: Zobrazit pouze pracovní úkoly
|
||||
- `0`: Zobrazit všechny úkoly (odebrat filtr)
|
||||
3. Filtr zůstává aktivní, dokud ho nezměníte nebo nezrušíte
|
||||
|
||||
## Štítky
|
||||
|
||||
Štítky vám pomohou organizovat a rychle nalézt úkoly.
|
||||
|
||||
### Přidávání štítků
|
||||
|
||||
Při přidávání nebo úpravě úkolu zadejte štítky oddělené čárkami do pole Štítky:
|
||||
```
|
||||
práce, naléhavé, projekt-x
|
||||
```
|
||||
|
||||
### Procházení štítků
|
||||
|
||||
1. Stiskněte `b` pro procházení všech štítků
|
||||
2. Navigujte pomocí `↑/↓` nebo `j/k`
|
||||
3. Stiskněte `Enter` pro filtrování úkolů podle vybraného štítku
|
||||
4. Stiskněte `q` nebo `Esc` pro návrat do hlavního seznamu
|
||||
|
||||
## Vyhledávání
|
||||
|
||||
1. Stiskněte `/` pro otevření vyhledávání
|
||||
2. Zadejte svůj dotaz
|
||||
3. Stiskněte `Enter` pro vyhledávání
|
||||
4. Seznam zobrazí pouze úkoly odpovídající vašemu dotazu v názvu, popisu nebo štítcích
|
||||
5. Stiskněte `Esc` pro vymazání vyhledávání
|
||||
|
||||
## Zobrazení úkolu
|
||||
|
||||
1. Navigujte k úkolu pomocí `↑/↓` nebo `j/k`
|
||||
2. Stiskněte `Enter` pro zobrazení detailů
|
||||
3. V detailním zobrazení:
|
||||
- `q`: Zavřít a vrátit se do seznamu
|
||||
- `2`: Upravit úkol
|
||||
- `↑/↓`: Posouvat obsah
|
||||
|
||||
## Export úkolu
|
||||
|
||||
1. Vyberte úkol, který chcete exportovat
|
||||
2. Stiskněte `3` pro export
|
||||
3. Úkol se uloží jako textový soubor do `~/doxa-todo-export/`
|
||||
4. Formát názvu souboru je: `{název}_{id}.txt`
|
||||
|
||||
Exportovaný soubor obsahuje:
|
||||
- Název
|
||||
- Kategorii
|
||||
- Prioritu
|
||||
- Štítky
|
||||
- Datum vytvoření
|
||||
- Popis
|
||||
|
||||
## Mazání úkolu
|
||||
|
||||
1. Vyberte úkol, který chcete smazat
|
||||
2. Stiskněte `4` pro otevření potvrzení smazání
|
||||
3. Stiskněte `y` pro potvrzení smazání
|
||||
4. Stiskněte `n` nebo `Esc` pro zrušení
|
||||
|
||||
## Přehled klávesových zkratek
|
||||
|
||||
### Navigace
|
||||
- `↑/↓` nebo `j/k`: Pohyb kurzoru nahoru/dolů
|
||||
- `Enter`: Výběr/Potvrzení
|
||||
- `Esc`: Zpět/Zrušit
|
||||
- `q`: Konec
|
||||
|
||||
### Akce
|
||||
- `1`: Přidat nový úkol
|
||||
- `2`: Upravit vybraný úkol
|
||||
- `3`: Exportovat vybraný úkol
|
||||
- `4`: Smazat vybraný úkol
|
||||
- `/`: Vyhledat
|
||||
- `b`: Procházet štítky
|
||||
- `c`: Filtr podle kategorie
|
||||
- `l`: Přepnout jazyk
|
||||
- `+`: Zvýšit prioritu (při přidávání/úpravě)
|
||||
- `Tab`: Přepínat mezi poli
|
||||
|
||||
## Uložení dat
|
||||
|
||||
Všechny úkoly jsou uloženy v JSON formátu na:
|
||||
```
|
||||
~/.doxa-todo/doxa_todo.json
|
||||
```
|
||||
|
||||
Soubor se automaticky vytvoří při prvním spuštění a aktualizuje se s každou změnou.
|
||||
|
||||
### Záloha
|
||||
|
||||
Pro zálohování úkolů:
|
||||
```bash
|
||||
cp ~/.doxa-todo/doxa_todo.json ~/.doxa-todo/doxa_todo_backup.json
|
||||
```
|
||||
|
||||
### Obnovení
|
||||
|
||||
Pro obnovení ze zálohy:
|
||||
```bash
|
||||
cp ~/.doxa-todo/doxa_todo_backup.json ~/.doxa-todo/doxa_todo.json
|
||||
```
|
||||
|
||||
## Exportní adresář
|
||||
|
||||
Exportované úkoly jsou uloženy v:
|
||||
```
|
||||
~/doxa-todo-export/
|
||||
```
|
||||
|
||||
Každý exportovaný soubor obsahuje úplné informace o úkolu v čitelné textové podobě.
|
||||
|
||||
## Řešení problémů
|
||||
|
||||
### Aplikace se nespustí
|
||||
|
||||
Ujistěte se, že máte:
|
||||
1. Nainstalované Go (verze 1.26+)
|
||||
2. Zkompilovanou a nainstalovanou aplikaci
|
||||
3. `~/.local/bin` ve svém PATH
|
||||
|
||||
### Úkoly se neukládají
|
||||
|
||||
Zkontrolujte:
|
||||
1. Oprávnění zápisu pro `~/.doxa-todo/`
|
||||
2. Existence adresáře
|
||||
3. Že se při ukládání nezobrazují žádné chyby
|
||||
|
||||
### Jazyk se nepřepíná
|
||||
|
||||
Ujistěte se, že stisknete `l` z hlavního zobrazení seznamu úkolů, ne z jiných obrazovek.
|
||||
|
||||
## Použití z příkazové řádky
|
||||
|
||||
### Základní použití
|
||||
```bash
|
||||
doxa-todo
|
||||
```
|
||||
|
||||
### Spuštění ze zdrojového kódu
|
||||
```bash
|
||||
cd doxa-todo
|
||||
go run .
|
||||
```
|
||||
|
||||
## Konfigurace
|
||||
|
||||
Aplikace používá následující adresáře:
|
||||
- `~/.doxa-todo/`: Konfigurace a uložení dat
|
||||
- `~/doxa-todo-export/`: Exportované úkoly
|
||||
|
||||
Můžete upravit zdrojový kód pro změnu těchto cest, pokud je to potřeba.
|
||||
|
||||
## Aktualizace
|
||||
|
||||
Pro aktualizaci na nejnovější verzi:
|
||||
```bash
|
||||
cd doxa-todo
|
||||
git pull origin master
|
||||
go build -o doxa-todo .
|
||||
cp doxa-todo ~/.local/bin/
|
||||
```
|
||||
|
||||
## Odinstalování
|
||||
|
||||
Pro odinstalování:
|
||||
```bash
|
||||
rm ~/.local/bin/doxa-todo
|
||||
rm -rf ~/.doxa-todo/
|
||||
rm -rf ~/doxa-todo-export/
|
||||
```
|
||||
|
||||
## Licence
|
||||
|
||||
MIT License - Copyright (c) 2026 Kankys
|
||||
|
||||
## Podpora
|
||||
|
||||
Pro hlášení problémů, dotazy nebo příspěvky navštivte prosím repositář projektu:
|
||||
https://codeberg.org/Kankys/doxa-todo
|
||||
@@ -0,0 +1,114 @@
|
||||
# DOXA-TODO 🦅
|
||||
|
||||
**Local-First Todo Manager** - A minimalist terminal-based todo application for managing your tasks with support for categories, priorities, and tags.
|
||||
|
||||
## Features
|
||||
|
||||
- **Dual Language Support**: Czech and English (toggle with `l` key)
|
||||
- **Categories**: Personal and Work tasks
|
||||
- **Priorities**: 3 levels (Low, Medium, High)
|
||||
- **Tags**: Support for tagging todos
|
||||
- **Automatic Date**: Creation and modification timestamps
|
||||
- **Persistent Storage**: Todos are saved to `~/.doxa-todo/doxa_todo.json`
|
||||
- **Search & Filter**: Search by text, browse by tags, filter by category
|
||||
- **Export**: Export individual todos to text files
|
||||
|
||||
## Installation
|
||||
|
||||
### Using install.sh (Recommended)
|
||||
|
||||
```bash
|
||||
# Clone the repository
|
||||
git clone https://codeberg.org/Kankys/doxa-todo.git
|
||||
cd doxa-todo
|
||||
|
||||
# Make install.sh executable and run it
|
||||
chmod +x install.sh
|
||||
./install.sh
|
||||
```
|
||||
|
||||
The script will:
|
||||
1. Check for Go installation
|
||||
2. Download dependencies
|
||||
3. Compile the application
|
||||
4. Install to `~/.local/bin`
|
||||
5. Create configuration directory at `~/.doxa-todo`
|
||||
|
||||
### Manual Installation
|
||||
|
||||
```bash
|
||||
# Clone the repository
|
||||
git clone https://codeberg.org/Kankys/doxa-todo.git
|
||||
cd doxa-todo
|
||||
|
||||
# Build the application
|
||||
go build -o doxa-todo .
|
||||
|
||||
# Install to your PATH
|
||||
cp doxa-todo ~/.local/bin/
|
||||
chmod +x ~/.local/bin/doxa-todo
|
||||
|
||||
# Make sure ~/.local/bin is in your PATH
|
||||
export PATH=$PATH:~/.local/bin
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
### Keyboard Shortcuts
|
||||
|
||||
| Key | Action |
|
||||
|-----|--------|
|
||||
| `Enter` | Start application / View selected todo |
|
||||
| `q` | Quit application / Go back |
|
||||
| `Esc` | Go back / Clear search |
|
||||
| `1` | Add new todo |
|
||||
| `2` | Edit selected todo |
|
||||
| `3` | Export selected todo |
|
||||
| `4` | Delete selected todo |
|
||||
| `/` | Search todos |
|
||||
| `b` | Browse tags |
|
||||
| `c` | Filter by category |
|
||||
| `l` | Toggle language (Czech/English) |
|
||||
| `+` | Increase priority (when adding/editing) |
|
||||
| `↑/↓` or `j/k` | Navigate through list |
|
||||
| `Tab` | Switch between fields |
|
||||
|
||||
### Todo Structure
|
||||
|
||||
Each todo has:
|
||||
- **Title** (required)
|
||||
- **Description** (optional)
|
||||
- **Priority**: Low (●), Medium (●), High (●) - with color coding
|
||||
- **Category**: Personal (🏠) or Work (💼)
|
||||
- **Tags**: Comma-separated list
|
||||
- **Created At**: Automatic timestamp
|
||||
- **Modified At**: Automatic timestamp on edits
|
||||
|
||||
### Storage
|
||||
|
||||
All todos are stored in JSON format at:
|
||||
```
|
||||
~/.doxa-todo/doxa_todo.json
|
||||
```
|
||||
|
||||
Exported todos are saved to:
|
||||
```
|
||||
~/doxa-todo-export/
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
The application automatically creates the configuration directory and file on first run.
|
||||
|
||||
## License
|
||||
|
||||
MIT License - Copyright (c) 2026 Kankys
|
||||
|
||||
## Author
|
||||
|
||||
Kankys - [Codeberg](https://codeberg.org/Kankys)
|
||||
|
||||
## Related Projects
|
||||
|
||||
- [doxa-cli](https://codeberg.org/Kankys/doxa-cli) - Local-First Notes Manager
|
||||
- [doxa-secret](https://codeberg.org/Kankys/doxa-secret) - Message Encryption Tool
|
||||
@@ -0,0 +1,114 @@
|
||||
# DOXA-TODO 🦅
|
||||
|
||||
**Locally-First Správce Úkolů** - Minimalistická terminálová aplikace pro správu úkolů s podporou kategorií, priorit a štítků.
|
||||
|
||||
## Funkce
|
||||
|
||||
- **Dvoujazyčná podpora**: Čeština a Angličtina (přepínání klávesou `l`)
|
||||
- **Kategorie**: Osobní a Pracovní úkoly
|
||||
- **Priority**: 3 úrovně (Nízká, Střední, Vysoká)
|
||||
- **Štítky**: Podpora pro označování úkolů
|
||||
- **Automatické datum**: Časové razítko vytvoření a úpravy
|
||||
- **Trvalé uložení**: Úkoly se ukládají do `~/.doxa-todo/doxa_todo.json`
|
||||
- **Vyhledávání a filtrace**: Vyhledávání podle textu, procházení podle štítků, filtrace podle kategorie
|
||||
- **Export**: Export jednotlivých úkolů do textových souborů
|
||||
|
||||
## Instalace
|
||||
|
||||
### Pomocí install.sh (Doporučeno)
|
||||
|
||||
```bash
|
||||
# Naklonujte repositář
|
||||
git clone https://codeberg.org/Kankys/doxa-todo.git
|
||||
cd doxa-todo
|
||||
|
||||
# Učiňte install.sh spustitelným a spusťte ho
|
||||
chmod +x install.sh
|
||||
./install.sh
|
||||
```
|
||||
|
||||
Skript:
|
||||
1. Zkontroluje instalaci Go
|
||||
2. Stáhne závislosti
|
||||
3. Zkompiluje aplikaci
|
||||
4. Nainstaluje do `~/.local/bin`
|
||||
5. Vytvoří konfigurační adresář `~/.doxa-todo`
|
||||
|
||||
### Ruční instalace
|
||||
|
||||
```bash
|
||||
# Naklonujte repositář
|
||||
git clone https://codeberg.org/Kankys/doxa-todo.git
|
||||
cd doxa-todo
|
||||
|
||||
# Zkompilujte aplikaci
|
||||
go build -o doxa-todo .
|
||||
|
||||
# Nainstalujte do svého PATH
|
||||
cp doxa-todo ~/.local/bin/
|
||||
chmod +x ~/.local/bin/doxa-todo
|
||||
|
||||
# Ujistěte se, že ~/.local/bin je ve vašem PATH
|
||||
export PATH=$PATH:~/.local/bin
|
||||
```
|
||||
|
||||
## Použití
|
||||
|
||||
### Klávesové zkratky
|
||||
|
||||
| Klávesa | Akce |
|
||||
|---------|-------|
|
||||
| `Enter` | Spustit aplikaci / Zobrazit vybraný úkol |
|
||||
| `q` | Ukončit aplikaci / Jít zpět |
|
||||
| `Esc` | Jít zpět / Vymazat vyhledávání |
|
||||
| `1` | Přidat nový úkol |
|
||||
| `2` | Upravit vybraný úkol |
|
||||
| `3` | Exportovat vybraný úkol |
|
||||
| `4` | Smazat vybraný úkol |
|
||||
| `/` | Vyhledat úkoly |
|
||||
| `b` | Procházet štítky |
|
||||
| `c` | Filtr podle kategorie |
|
||||
| `l` | Přepnout jazyk (Čeština/Angličtina) |
|
||||
| `+` | Zvýšit prioritu (při přidávání/úpravě) |
|
||||
| `↑/↓` nebo `j/k` | Procházet seznamem |
|
||||
| `Tab` | Přepínat mezi poli |
|
||||
|
||||
### Struktura úkolu
|
||||
|
||||
Každý úkol má:
|
||||
- **Název** (povinný)
|
||||
- **Popis** (nepovinný)
|
||||
- **Prioritu**: Nízká (●), Střední (●), Vysoká (●) - s barevným označením
|
||||
- **Kategorii**: Osobní (🏠) nebo Pracovní (💼)
|
||||
- **Štítky**: Seznam oddělený čárkami
|
||||
- **Vytvořeno**: Automatické časové razítko
|
||||
- **Upraveno**: Automatické časové razítko při úpravách
|
||||
|
||||
### Uložení
|
||||
|
||||
Všechny úkoly jsou uloženy v JSON formátu na:
|
||||
```
|
||||
~/.doxa-todo/doxa_todo.json
|
||||
```
|
||||
|
||||
Exportované úkoly jsou uloženy v:
|
||||
```
|
||||
~/doxa-todo-export/
|
||||
```
|
||||
|
||||
## Konfigurace
|
||||
|
||||
Aplikace automaticky vytvoří konfigurační adresář a soubor při prvním spuštění.
|
||||
|
||||
## Licence
|
||||
|
||||
MIT License - Copyright (c) 2026 Kankys
|
||||
|
||||
## Autor
|
||||
|
||||
Kankys - [Codeberg](https://codeberg.org/Kankys)
|
||||
|
||||
## Příbuzné projekty
|
||||
|
||||
- [doxa-cli](https://codeberg.org/Kankys/doxa-cli) - Správce poznámek
|
||||
- [doxa-secret](https://codeberg.org/Kankys/doxa-secret) - Nástroj pro šifrování zpráv
|
||||
@@ -0,0 +1,33 @@
|
||||
module doxa-todo
|
||||
|
||||
go 1.26.5
|
||||
|
||||
require (
|
||||
github.com/charmbracelet/bubbles v1.0.0
|
||||
github.com/charmbracelet/bubbletea v1.3.10
|
||||
github.com/charmbracelet/lipgloss v1.1.0
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/atotto/clipboard v0.1.4 // indirect
|
||||
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
|
||||
github.com/charmbracelet/colorprofile v0.4.1 // indirect
|
||||
github.com/charmbracelet/x/ansi v0.11.6 // indirect
|
||||
github.com/charmbracelet/x/cellbuf v0.0.15 // indirect
|
||||
github.com/charmbracelet/x/term v0.2.2 // indirect
|
||||
github.com/clipperhouse/displaywidth v0.9.0 // indirect
|
||||
github.com/clipperhouse/stringish v0.1.1 // indirect
|
||||
github.com/clipperhouse/uax29/v2 v2.5.0 // indirect
|
||||
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
|
||||
github.com/lucasb-eyer/go-colorful v1.3.0 // indirect
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
github.com/mattn/go-localereader v0.0.1 // indirect
|
||||
github.com/mattn/go-runewidth v0.0.19 // indirect
|
||||
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
|
||||
github.com/muesli/cancelreader v0.2.2 // indirect
|
||||
github.com/muesli/termenv v0.16.0 // indirect
|
||||
github.com/rivo/uniseg v0.4.7 // indirect
|
||||
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
|
||||
golang.org/x/sys v0.38.0 // indirect
|
||||
golang.org/x/text v0.3.8 // indirect
|
||||
)
|
||||
@@ -0,0 +1,52 @@
|
||||
github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
|
||||
github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
|
||||
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
|
||||
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
|
||||
github.com/charmbracelet/bubbles v1.0.0 h1:12J8/ak/uCZEMQ6KU7pcfwceyjLlWsDLAxB5fXonfvc=
|
||||
github.com/charmbracelet/bubbles v1.0.0/go.mod h1:9d/Zd5GdnauMI5ivUIVisuEm3ave1XwXtD1ckyV6r3E=
|
||||
github.com/charmbracelet/bubbletea v1.3.10 h1:otUDHWMMzQSB0Pkc87rm691KZ3SWa4KUlvF9nRvCICw=
|
||||
github.com/charmbracelet/bubbletea v1.3.10/go.mod h1:ORQfo0fk8U+po9VaNvnV95UPWA1BitP1E0N6xJPlHr4=
|
||||
github.com/charmbracelet/colorprofile v0.4.1 h1:a1lO03qTrSIRaK8c3JRxJDZOvhvIeSco3ej+ngLk1kk=
|
||||
github.com/charmbracelet/colorprofile v0.4.1/go.mod h1:U1d9Dljmdf9DLegaJ0nGZNJvoXAhayhmidOdcBwAvKk=
|
||||
github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY=
|
||||
github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30=
|
||||
github.com/charmbracelet/x/ansi v0.11.6 h1:GhV21SiDz/45W9AnV2R61xZMRri5NlLnl6CVF7ihZW8=
|
||||
github.com/charmbracelet/x/ansi v0.11.6/go.mod h1:2JNYLgQUsyqaiLovhU2Rv/pb8r6ydXKS3NIttu3VGZQ=
|
||||
github.com/charmbracelet/x/cellbuf v0.0.15 h1:ur3pZy0o6z/R7EylET877CBxaiE1Sp1GMxoFPAIztPI=
|
||||
github.com/charmbracelet/x/cellbuf v0.0.15/go.mod h1:J1YVbR7MUuEGIFPCaaZ96KDl5NoS0DAWkskup+mOY+Q=
|
||||
github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk=
|
||||
github.com/charmbracelet/x/term v0.2.2/go.mod h1:kF8CY5RddLWrsgVwpw4kAa6TESp6EB5y3uxGLeCqzAI=
|
||||
github.com/clipperhouse/displaywidth v0.9.0 h1:Qb4KOhYwRiN3viMv1v/3cTBlz3AcAZX3+y9OLhMtAtA=
|
||||
github.com/clipperhouse/displaywidth v0.9.0/go.mod h1:aCAAqTlh4GIVkhQnJpbL0T/WfcrJXHcj8C0yjYcjOZA=
|
||||
github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs=
|
||||
github.com/clipperhouse/stringish v0.1.1/go.mod h1:v/WhFtE1q0ovMta2+m+UbpZ+2/HEXNWYXQgCt4hdOzA=
|
||||
github.com/clipperhouse/uax29/v2 v2.5.0 h1:x7T0T4eTHDONxFJsL94uKNKPHrclyFI0lm7+w94cO8U=
|
||||
github.com/clipperhouse/uax29/v2 v2.5.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g=
|
||||
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4=
|
||||
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM=
|
||||
github.com/lucasb-eyer/go-colorful v1.3.0 h1:2/yBRLdWBZKrf7gB40FoiKfAWYQ0lqNcbuQwVHXptag=
|
||||
github.com/lucasb-eyer/go-colorful v1.3.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
|
||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4=
|
||||
github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88=
|
||||
github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw=
|
||||
github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
|
||||
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI=
|
||||
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo=
|
||||
github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
|
||||
github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
|
||||
github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc=
|
||||
github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk=
|
||||
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
|
||||
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
||||
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
|
||||
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
|
||||
golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
|
||||
golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
|
||||
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
|
||||
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
|
||||
golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY=
|
||||
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
||||
Executable
+121
@@ -0,0 +1,121 @@
|
||||
#!/bin/bash
|
||||
|
||||
# DOXA-TODO Installation Script
|
||||
|
||||
# --- Nastavení ---
|
||||
|
||||
APP_NAME="doxa-todo"
|
||||
INSTALL_DIR="$HOME/.local/bin"
|
||||
CONFIG_DIR="$HOME/.doxa-todo"
|
||||
CONFIG_FILE="doxa_todo.json"
|
||||
REPO_URL="https://codeberg.org/Kankys/doxa-todo.git"
|
||||
|
||||
# --- Funkce ---
|
||||
|
||||
error_exit() {
|
||||
echo -e "\033[1;31mERROR: $1\033[0m" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
success_message() {
|
||||
echo -e "\033[1;32mSUCCESS: $1\033[0m"
|
||||
}
|
||||
|
||||
info_message() {
|
||||
echo -e "\033[1;34mINFO: $1\033[0m"
|
||||
}
|
||||
|
||||
# --- Hlavní část skriptu ---
|
||||
|
||||
info_message "Kontrola Go instalace..."
|
||||
if ! command -v go &> /dev/null
|
||||
then
|
||||
error_exit "Go není nainstalováno. Prosím, nainstalujte Go před spuštěním tohoto skriptu."
|
||||
fi
|
||||
success_message "Go je nainstalováno."
|
||||
|
||||
info_message "Kontrola aktuálního adresáře..."
|
||||
# Zjistíme, zda jsme již v adresáři doxa-todo
|
||||
if [ -f "main.go" ] && [ -f "go.mod" ] && grep -q "module doxa-todo" go.mod; then
|
||||
info_message "Jste již v adresáři $APP_NAME, používám místní verzi."
|
||||
else
|
||||
info_message "Klonování repositáře..."
|
||||
if [ -d "$APP_NAME" ]; then
|
||||
info_message "Adresář $APP_NAME již existuje, používám místní verzi."
|
||||
else
|
||||
if ! git clone "$REPO_URL" "$APP_NAME"
|
||||
then
|
||||
error_exit "Nepodařilo se naklonovat repositář. Zkontrolujte připojení k internetu."
|
||||
fi
|
||||
success_message "Repozitář úspěšně naklonován."
|
||||
fi
|
||||
cd "$APP_NAME" || error_exit "Nepodařilo se vstoupit do adresáře $APP_NAME."
|
||||
fi
|
||||
|
||||
info_message "Stažení závislostí projektu..."
|
||||
if ! go mod download
|
||||
then
|
||||
error_exit "Nepodařilo se stáhnout závislosti Go. Zkontrolujte GO moduly a připojení k internetu."
|
||||
fi
|
||||
success_message "Závislosti projektu úspěšně staženy."
|
||||
|
||||
info_message "Kompilace aplikace..."
|
||||
APP_BINARY="$APP_NAME"
|
||||
if ! go build -o "$APP_BINARY" .
|
||||
then
|
||||
error_exit "Nepodařilo se zkompilovat aplikaci. Zkontrolujte chyby v kódu."
|
||||
fi
|
||||
success_message "Aplikace úspěšně zkompilována do './$APP_BINARY'."
|
||||
|
||||
info_message "Instalace aplikace..."
|
||||
|
||||
if ! mkdir -p "$INSTALL_DIR"
|
||||
then
|
||||
error_exit "Nepodařilo se vytvořit cílový adresář '$INSTALL_DIR'. Zkontrolujte oprávnění."
|
||||
fi
|
||||
|
||||
if ! cp "$APP_BINARY" "$INSTALL_DIR/"
|
||||
then
|
||||
error_exit "Nepodařilo se zkopírovat binárku do '$INSTALL_DIR'. Zkontrolujte oprávnění."
|
||||
fi
|
||||
|
||||
chmod +x "$INSTALL_DIR/$APP_NAME"
|
||||
success_message "Aplikace '$APP_NAME' úspěšně nainstalována do '$INSTALL_DIR'."
|
||||
|
||||
info_message "Nastavení konfiguračního adresáře..."
|
||||
|
||||
if ! mkdir -p "$CONFIG_DIR"
|
||||
then
|
||||
error_exit "Nepodařilo se vytvořit konfigurační adresář '$CONFIG_DIR'. Zkontrolujte oprávnění."
|
||||
fi
|
||||
|
||||
if [ ! -f "$CONFIG_DIR/$CONFIG_FILE" ]
|
||||
then
|
||||
echo "[]" > "$CONFIG_DIR/$CONFIG_FILE"
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
error_exit "Nepodařilo se vytvořit konfigurační soubor '$CONFIG_DIR/$CONFIG_FILE'."
|
||||
fi
|
||||
success_message "Konfigurační soubor '$CONFIG_DIR/$CONFIG_FILE' vytvořen."
|
||||
else
|
||||
info_message "Konfigurační soubor '$CONFIG_DIR/$CONFIG_FILE' již existuje."
|
||||
fi
|
||||
|
||||
info_message "Instalace dokončena."
|
||||
success_message "Nyní můžete spustit aplikaci '$APP_NAME' z jakéhokoli místa v terminálu."
|
||||
echo ""
|
||||
echo -e "\033[1;33mPRO TIP:\nPokud \`$APP_NAME\` nefunguje z jakéhokoli místa, možná budete muset přidat '$INSTALL_DIR' do vašeho PATH.\nČasto se to dělá přidáním následujícího řádku do vašich shell profilů (~/.bashrc, ~/.zshrc, ~/.profile):\n\nexport PATH=\$PATH:$INSTALL_DIR\n\nPoté restartujte terminál nebo načtěte profil (např. \`source ~/.bashrc\`).\033[0m"
|
||||
echo ""
|
||||
|
||||
# Vyčištění - smažeme pouze dočasný klonovaný adresář, ne aktuální
|
||||
if [ -f "main.go" ] && [ -f "go.mod" ] && grep -q "module doxa-todo" go.mod; then
|
||||
# Jsme v místním adresáři, nic nesmažeme
|
||||
info_message "Instalace proběhla z místního adresáře, žádné dočasné soubory k vyčištění."
|
||||
else
|
||||
# Smažeme dočasný klonovaný adresář
|
||||
cd ..
|
||||
rm -rf "$APP_NAME"
|
||||
info_message "Dočasné soubory byly vyčištěny."
|
||||
fi
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,18 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
tea "github.com/charmbracelet/bubbletea"
|
||||
)
|
||||
|
||||
func main() {
|
||||
m := NewModel()
|
||||
|
||||
p := tea.NewProgram(m)
|
||||
if _, err := p.Run(); err != nil {
|
||||
fmt.Printf("Chyba při spuštění programu: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
// getStoragePath returns the path to the .doxa-todo directory and file
|
||||
func getStoragePath() string {
|
||||
home, err := os.UserHomeDir()
|
||||
if err != nil {
|
||||
return "doxa_todo.json" // fallback to current directory
|
||||
}
|
||||
configDir := filepath.Join(home, ".doxa-todo")
|
||||
|
||||
// Create directory if it doesn't exist
|
||||
if _, err := os.Stat(configDir); os.IsNotExist(err) {
|
||||
os.MkdirAll(configDir, 0755)
|
||||
}
|
||||
|
||||
return filepath.Join(configDir, "doxa_todo.json")
|
||||
}
|
||||
|
||||
// loadTodos loads all todos from the storage file
|
||||
func loadTodos() []Todo {
|
||||
path := getStoragePath()
|
||||
file, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
return []Todo{}
|
||||
}
|
||||
var todos []Todo
|
||||
json.Unmarshal(file, &todos)
|
||||
return todos
|
||||
}
|
||||
|
||||
// saveTodos saves all todos to the storage file
|
||||
func saveTodos(todos []Todo) {
|
||||
path := getStoragePath()
|
||||
data, err := json.MarshalIndent(todos, "", " ")
|
||||
if err != nil {
|
||||
fmt.Println("Chyba při ukládání dat:", err)
|
||||
return
|
||||
}
|
||||
os.WriteFile(path, data, 0644)
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
package main
|
||||
|
||||
type Translation struct {
|
||||
Title string
|
||||
MenuAdd string
|
||||
MenuEdit string
|
||||
MenuExport string
|
||||
MenuDelete string
|
||||
MenuQuit string
|
||||
MenuLang string
|
||||
MenuSearch string
|
||||
MenuBrowse string
|
||||
MenuFilter string
|
||||
ListTitle string
|
||||
NoTodos string
|
||||
AddTitle string
|
||||
EditTitle string
|
||||
LabelTitle string
|
||||
LabelDescription string
|
||||
LabelTags string
|
||||
LabelPriority string
|
||||
LabelCategory string
|
||||
PlaceholderTitle string
|
||||
PlaceholderDescription string
|
||||
PlaceholderTags string
|
||||
HelpForm string
|
||||
HelpList string
|
||||
HelpFormExtended string
|
||||
StatusSaved string
|
||||
StatusEdited string
|
||||
StatusDeleted string
|
||||
StatusExported string
|
||||
ErrRequired string
|
||||
SearchTitle string
|
||||
BrowseTags string
|
||||
AllTodos string
|
||||
ConfirmDelete string
|
||||
ConfirmYes string
|
||||
ConfirmNo string
|
||||
HelpModal string
|
||||
FilterCategoryTitle string
|
||||
FilterCategoryNone string
|
||||
FilterCategoryHelp string
|
||||
}
|
||||
|
||||
var Translations = map[string]Translation{
|
||||
"cs": {
|
||||
Title: "DOXA-TODO 🦅",
|
||||
MenuAdd: "1: Přidat",
|
||||
MenuEdit: "2: Upravit",
|
||||
MenuExport: "3: Export",
|
||||
MenuDelete: "4: Smazat",
|
||||
MenuQuit: "q: Konec",
|
||||
MenuLang: "l: EN",
|
||||
MenuSearch: "/: Hledat",
|
||||
MenuBrowse: "b: Tagy",
|
||||
MenuFilter: "c: Filtr",
|
||||
ListTitle: "--- SEZNAM ÚKOLŮ ---",
|
||||
NoTodos: " (Prázdno...)",
|
||||
AddTitle: "PŘIDAT ÚKOL",
|
||||
EditTitle: "UPRAVIT ÚKOL",
|
||||
LabelTitle: "Název:",
|
||||
LabelDescription: "Popis:",
|
||||
LabelTags: "Tagy:",
|
||||
LabelPriority: "Priorita:",
|
||||
LabelCategory: "Kategorie:",
|
||||
PlaceholderTitle: "Název (povinné)",
|
||||
PlaceholderDescription: "Popis (nepovinný)",
|
||||
PlaceholderTags: "Tagy (nepovinné, oddělené čárkou)",
|
||||
HelpForm: "[Tab] Další pole | [Enter] Uložit | [+] Zvýšit prioritu | [-] Změnit kategorii | [q] Zrušit",
|
||||
HelpList: "↑/↓: Vybrat | Enter: Zobrazit | /: Hledat | b: Procházet tagy | c: Filtr kategorie | q: Konec",
|
||||
HelpFormExtended: "[Tab] Další pole | [Enter] Uložit | [+] Priorita | [-] Kategorie | [q] Zrušit",
|
||||
StatusSaved: "Úkol uložen.",
|
||||
StatusEdited: "Změny uloženy.",
|
||||
StatusDeleted: "Úkol smazán.",
|
||||
StatusExported: "Úkol vyexportován.",
|
||||
ErrRequired: "Chyba: Název je povinný!",
|
||||
SearchTitle: "HLEDAT: ",
|
||||
BrowseTags: "TAGY",
|
||||
AllTodos: "Všechny úkoly",
|
||||
ConfirmDelete: "Opravdu chcete smazat tento úkol?",
|
||||
ConfirmYes: "y: Ano",
|
||||
ConfirmNo: "n: Ne / Esc",
|
||||
HelpModal: "q: Zavřít | 2: Editovat | ↑/↓: Posun",
|
||||
FilterCategoryTitle: "FILTR KATEGORIE",
|
||||
FilterCategoryNone: "Žádný filtr",
|
||||
FilterCategoryHelp: "1: Osobní | 2: Pracovní | 0: Žádný | Esc: Zrušit",
|
||||
},
|
||||
"en": {
|
||||
Title: "DOXA-TODO 🦅",
|
||||
MenuAdd: "1: Add",
|
||||
MenuEdit: "2: Edit",
|
||||
MenuExport: "3: Export",
|
||||
MenuDelete: "4: Delete",
|
||||
MenuQuit: "q: Quit",
|
||||
MenuLang: "l: CS",
|
||||
MenuSearch: "/: Search",
|
||||
MenuBrowse: "b: Tags",
|
||||
MenuFilter: "c: Filter",
|
||||
ListTitle: "--- TODOS LIST ---",
|
||||
NoTodos: " (Empty...)",
|
||||
AddTitle: "ADD TODO",
|
||||
EditTitle: "EDIT TODO",
|
||||
LabelTitle: "Title:",
|
||||
LabelDescription: "Description:",
|
||||
LabelTags: "Tags:",
|
||||
LabelPriority: "Priority:",
|
||||
LabelCategory: "Category:",
|
||||
PlaceholderTitle: "Title (required)",
|
||||
PlaceholderDescription: "Description (optional)",
|
||||
PlaceholderTags: "Tags (optional, comma separated)",
|
||||
HelpForm: "[Tab] Next field | [Enter] Save | [+] Priority | [-] Category | [q] Cancel",
|
||||
HelpList: "↑/↓: Select | Enter: View | /: Search | b: Browse tags | c: Filter category | q: Quit",
|
||||
HelpFormExtended: "[Tab] Next field | [Enter] Save | [+] Increase priority | [-] Change category | [q] Cancel",
|
||||
StatusSaved: "Todo saved.",
|
||||
StatusEdited: "Changes saved.",
|
||||
StatusDeleted: "Todo deleted.",
|
||||
StatusExported: "Todo exported.",
|
||||
ErrRequired: "Error: Title is required!",
|
||||
SearchTitle: "SEARCH: ",
|
||||
BrowseTags: "TAGS",
|
||||
AllTodos: "All todos",
|
||||
ConfirmDelete: "Are you sure you want to delete this todo?",
|
||||
ConfirmYes: "y: Yes",
|
||||
ConfirmNo: "n: No / Esc",
|
||||
HelpModal: "q: Close | 2: Edit | ↑/↓: Scroll",
|
||||
FilterCategoryTitle: "FILTER BY CATEGORY",
|
||||
FilterCategoryNone: "No filter",
|
||||
FilterCategoryHelp: "1: Personal | 2: Work | 0: None | Esc: Cancel",
|
||||
},
|
||||
}
|
||||
+1033
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user