packages feed

taskell-1.10.0: test/Taskell/IO/data/roadmap.md

## Misc.

- Add more information to taskell.app
    > Update taskell.app to have more than just README.md contents. Use cases, more images, examples, etc.
    * [ ] Use case example: checklist
    * [ ] Use case example: Git controlled tasks
    * [ ] Blog posts for updates
- Add to Flatpack
    > https://opensource.com/article/19/10/how-build-flatpak-packaging

## Refactoring

- 乤乭 乤亍 乤乭乫 乤乭亍乫 乤乭 乤乭亍
- Refactor Task `Update` to be `Task -> Maybe Task`?
- Use Attoparsec for parsing
- Add tests for Taskell.IO.GitHub
- Break up State module
    * [ ] More of logic should go into Task, List, and Lists
- Parse checkItems Trello JSON using Aeson FromJSON rather than needing extra record type
- Remove duplication of config - currently using ini and hard-coded defaults
- Use Shake instead of bash script

## Bugs

- Empty subtasks create "---" task
    > Feel like I added this for some reason, can't think why...
- Pressing Esc while editing a task should go back to previous version?
- Selected item can still get a bit lost in SEARCH mode when going between lists
    > Sometimes defaults to 0, when there is something to be found
- Very long words should get hyphenated
    > The cursor gets lost if a word is longer than the line - URLs in particular can cause issues
- Help modal needs to wrap and scroll
- Limit modal height based on content
- Multiple spaces in a line don't show up as more than one, but are saved as more than one
- Task description should be visible by default in task detail
    > Visibility should be on the description by default?
- No obvious way to know if there are more items in a list off-screen
    > Lowest item should be "..." if more items
- Blank trello token should show info about setting it up rather than auth error
    > Auth error should show setup info too?
- A single issue with config.ini reverts to defaultConfig?

## Features

- Add Cabal test to build process
    > Use `stack sdist .` to generate cabal file
- Define key binding info in one place
    > Currently all over the place
    * [ ] Bindings
    * [ ] Default key
    * [ ] Description
    * [ ] Generate bindings.ini from it
- Somehow merge `event` and `events` in Actions that use bindings
    > Can one event trigger multiple separate state changes?
- Some way to just see tasks with due dates
    * [x] Sort by date
    * [x] Scrollable
    * [x] Pressing Enter on one takes you to it
    * [x] Use renderTask from Draw
    * [ ] Filter by: overdue, this week, later
    * [ ] Number of due items in status bar?
    * [x] Descriptions need to wrap
    * [ ] Search should filter
    * [ ] Show list each task belongs to?
    * [x] Backspace (customisable) removes date
- Configuration options
    > See #54
    * [ ] Padding
    * [ ] Move to top of list - different key binding?
    * [ ] Show toggle bar
- Edit task text in DETAIL mode
    > Need to be able to select different parts of the DETAIL modal. Probably need to rethink Mode constructors.
- Pressing Undo in DUE mode should undo without leaving view
    > Fallthrough to NORMAL events more generally? Might require rethinking modes to separate behaviour and things being tracked?
- Add a List widget for common actions between tasks and sub-tasks
    > Or use a typeclass... somehow?
    * [ ] Moving around
    * [ ] Re-ordering subtasks
    * [ ] New items above/below
    * [ ] Duplicating
    * [ ] Marking complete
    * [ ] Deleting
- Add custom key support
    * [x] Create bindings.ini
    * [x] Update events to use Map from bindings.ini
    * [ ] Check for key conflicts: include keys not explicitly mapped (e.g. 1-9, Esc, Enter)
    * [x] Check for bits of functionality missing a mapping
    * [x] Update Help dialogue with key mappings
    * [x] Needs to support merging with default options so that it's easy to add new default keys in the future
    * [ ] Add keys to Help which aren't in bindings
    * [ ] More detailed error messages for missing/invalid mappings
- Add tags/labels with `t`
    * [ ] Way to filter by tag
    * [ ] Hide/show tags with key press
- Performance with large files
    > Becomes unusable with large files
    * [x] Initially use debouncing to avoid writing too often
    * [ ] Cache formatting results
    * [ ] Invalidate layout cache less frequently
    * [ ] Benchmarking tests
    * [ ] Allow cancelling write to avoid trying to write the same file at the same time
- Should be able to have new-lines in task descriptions
    * [x] Trello import
    * [ ] Regular input (Shift + Enter for new line?)
    * [x] Markdown parsing
    * [ ] Text line breaks go a bit funny with multi-line descriptions
- Always show list title
    > Floating list titles - so you can always see what list you're in
- Make token UX better
    * [ ] Open link automatically?
    * [ ] Ask for token and save to ini file automatically
- URL field - plus config to run specific command when selected (e.g. `open -a Chrome.app #{url}`)
- Import Issues from GitHub using  labels
- Readline support?
    > Using Haskline: https://rootmos.github.io/main/2017/08/31/combining-brick-and-haskeline.html
- Editable title?
    > Use a `# Title` at top of file and display title somewhere in taskell
- Keep undo between sessions?
- Ability to load a taskell file with custom config.ini settings
    > Either command line arguments for settings or just a `-c other.ini` command
- Inifinite task depth?
    > No reason, other than UX, that sub-tasks can't have sub-tasks.
- Add Trello syncing

## In Progress

- Relative dates days and weeks shouldn't include time?
- Show remaining time on near dates

## Done

- `a` to add
- `e` to edit
- `Space` to mark complete
- `j`/`k`/`up`/`down` to move up/down list
- `h`/`l`/`Left`/`Right` to move between lists
- `q` to quit
- Create taskell.json if doesn't exist
- Move tasks up/down
- Delete with `D`
- No padding on lists
- Order of lists is wrong
- Can't switch lists
- Add doesn't go to bottom of list
- foldr1 in UI/Main will break if no lists
- Cursor support
- Move tasks between lists with `H`/`K`
- Move to next list with `Space`
- Create new list with `N`
- Delete lists with `X`
- Enter while in add mode creates new/Esc leaves add mode
- Rename Tasks to List
- Rename AllTasks to Lists
- Horizontal scrolling
- Scrolling long lists
- If no lists crashes on up/down - using index in AllTasks
- State should return Maybe?
- Select lists with `1-9`
- Run with any correctly formatted json file
- Wrap lines
- UI modules need refactoring
- Horizontal scrolling stops working if a word longer than the column width is entered
- Cursor no longer in the right place
- Space in edit/add mode doesn't move cursor along - bit disconcerting
- If no items in current list, returns a Nothing, so everything dissappears
- CreateList mode doesn't display anything
- Cursor doesn't show on CreateList mode
- Reordering lists with `>` and `<`
- `o` to add on line below
- `O` to add on line above
- `G` take to bottom of file
- Undo with `u`
- Should only save after adding a new item or finished editing an item - should save when pressing Enter while adding new items
- `C` to change task - i.e. deletes text and goes into edit mode
- Space moves to next and stays in list / H & L move but keep current
- Cursor position assumes single line list title
- `E` edits list title
- Pressing enter on Edit creates new task
- Reordering leftmost list left takes you to last list
- Linux binary
- Homebrew support
- Tabs in tasks throw off cursor and wrapping
- Cursor vertical offset is wrong when adding a new list
- Search using `/`
- Change foldl to foldl`
- Debian package
- Empty tasks aren't obviously selectable
- Pressing `e` on a blank list breaks things
- Add support for Markdown
- Fixed Unicode support
- Scrolling
- New list outside view doesn't scroll
- New item outside view doesn't scroll
- Vertical scrolling falls behind
- Use concurrency for IO
- Search UI
- Vertical scrolling hides list titles
- Use Brick for UI
- `C` doesn't work properly
- Custom colours
- `.taskell` config file in home directory
- Rename Persistence to Taskell.IO
- List titles sometimes go missing
- Use Template Haskell to import in config file templates
- On `?` show keyboard commands
- Remove size from state
- Sub-lists
    * [x] Scrolling in sub-tasks
    * [x] Press Enter to create next
    * [x] Word wrapping
    * [x] Searching
    * [x] Delete items
- No cursor in sub-task view
    * [x] Single line
    * [x] Multi-line
- Customisable Markdown format
    * [x] Change top level headers
    * [x] Change top level list item: e.g. to H3 instead of li
    * [x] Change sub-list: e.g. from "    *" to "-"
- Feels sluggish in sub-task view - cache main view?
- Leaving search only refreshes current list
- Display a warning if any line of the file could not be parsed - otherwise could lead to data loss
- One bad config line stops all config from working - needs to merge with defaultConfig
- Split up Draw/Modal code into more logical chunks
- Move between lists with `m` - shows possible lists
- Caching issue when using `m` to move lists - doesn't update previous list
- Copy and paste?
- Pressing Enter on empty list shows an subtasks box with an error
- Cursor goes missing on the left hand side at the end of a line - needs to wrap
- Sub-task count not visible on last item in a list longer than the vertical height
- Vertical spacing doesn't work if the current item is blank
- Empty tasks - i.e. just a space - don't show up
- Editing list title doesn't always have visibility
- Left/Right arrow keys in insert mode
- Share code between tasks and sub-tasks lists?
    * [x] Move wrap into Field widget
    * [x] Use Field for search
    * [x] Use Field for sub-tasks
    * [x] Use Field for titles
    * [x] Use Field for tasks
    * [x] Make sure `C` works
- Copy and paste
    * [x] List titles
    * [x] Search
- Multiple spaces at the beginning of a line can break cursor positioning
- Task body - e.g. as well as sub lists, have a longer description
- Indicator for when a task has a description
    > Use ≡?
- Pressing `Esc` when entering task description shouldn't reset it
- Better Trello import errors - e.g. auth vs. parsing issues
    * [x] Error on parse issues
    * [x] Error on Auth issues
- Add due dates to tasks with `@`
    * [x] Render due dates
    * [x] Editable due dates
- Trello dates need to take current timezone into account
    > Trello gives dates in UTC, but need to display them in the current timezone. Deadlines should also take timezones into account if necessary.
- Move to column only works for columns before the one you're in
- Add Trello import
    * [x] Basic trello import
    * [x] Add due date support
    * [x] Add sub-tasks support
    * [x] Add card summary support
- Improve Trello checklist import
    * [x] Take checklist fetch errors into account
    * [x] Refactor code
    * [x] Use Reader to pass around trello token?
- Should change list numbering to letters when in move list mode
- GitHub checklist support - []/[x]
- Caching doesn't clear properly when using `o` and `O`
- Add description status indicator option to config.ini
    > Part of the themeing should allow changing to different icon - might not work in all fonts
- Add Twitter links
    * [x] Website
    * [x] Github
- Move image to taskell.app
    > The demo image should live on the taskell.app server, rather than being on an orphan branch on GitHub
    * [x] Move image
    * [x] Update site
    * [x] Update GitHub README.md
    * [x] Remove img branch
- Sort out Homebrew forumula
    > Make the necessary changes so that taskell can be put on the homebrew-core repository
    * [x] Find someone to submit it
    * [x] Use `install_cabal_package`
    * [x] Use `depends_on "cabal-install" => :build`
- Update Task field naming
    * [x] Task: description -> name/title
    * [x] Task: summary -> description
    * [x] Taskell.UI.Modal.SubTasks -> Taskell.UI.Modal.Detail
- The isBlank check on tasks could potentially delete a task with no description but which does have sub-tasks
- Blank task names should appear as something
- Use lenses for nested data
- Add more tests
    * [x] Trello response parsing
- Add GitHub Project support
- Refactor Taskell.IO
    > Avoid repeating basically the same code for Trello and GitHub fetching
- Add ability to list GitHub projects
    > Give an organisation or username and repo, list the possible projects to fetch - avoid having to look up the project ID manually first
- GitHub import should take pagination into account
- Use XDG spec for storing config files
- Automate website publishing when doing a new build
    > Should automatically update the `_config.yml` file, build the website, then deploy it
- Can't remove a description
- Title bar for extra info
    * [x] File path
    * [x] Current position
- Search should be case insensitive
- Add Mode to status bar
- Modals interfere with status bar
- Showing a specific task in search mode shows wrong task
    > Based on the index in the full list, rather than the filtered one. So will show the task from the full list if the indexes don't happen to match.
- Can't remove dates
- Tidy up load functions in Taskell.IO
- Getting stuck in INSERT mode when blank item
- If an item isn't created, then selection gets lost
- Search navigation issues
    > Issues with navigation when in NORMAL + SEARCH mode
    * [x] Navigating up and down
    * [x] Navigating between lists
    * [x] Moving task up and down
    * [x] Often nothing is selected when first entering search mode
- Duplicate task with `+`
- Use Reader throughout Draw/Modal modules
- Simplify DrawState
    * [x] Bindings
    * [x] Today
    * [x] Normalised State
    * [x] Layout
- Add a debug option
    * [x] Shows full Mode print out
- Add a "complete" action
    > Moves to last column and removes date. Space bar by default.
- Remove `~` style sub-task complete parsing
- MoveTo shouldn't show if nothing selected
- Deleting a list can screw up current position
- Remove date
    * [x] NORMAL mode
    * [x] DETAIL mode
    * [x] DUE mode
- Update screenshot
- Date should update if taskell is left open
- Use proper error codes
- Redo functionality
- Modifier keys?
- Use relative times for due dates
    > e.g. 1w, 2d, 1w 2d (see `man sleep` options for ideas)
    * [x] Markdown input
    * [x] Markdown output
    * [x] Markdown needs to use actual timezone
    * [x] Need to use parser
    * [x] Trello time parsing
- Use ReaderConfig in Taskell.IO.Markdown.Internal stringify functions
- Add test for subtask linebreaks to MarkdownTest
- Config option to always use UTC for markdown output
- Check times work no matter what timezone
- Show time on short dates
- Date validation
- Check order of due items
- Trim spaces for date input