Skip to content

imdone/imdone-atom

Repository files navigation

apm apm </> with love by imdone.io

A kanban board with an invisible user interface. It's cards and lists are made from TODOs in your code, markdown and text files. Use alt(⌥)+t to open your project's board.

Integrate your TODO comments into your team's issue tracker or backlog with imdone.io.

Vote on new features! vote on features screen shot 2018-01-20 at 5 24 12 pm

Table of Contents

Track your TODO comments in a kanban board

Imdone finds TODO comments in your project and organizes them in a drag and drop kanban board that can integrate with GitHub, waffle.io or whatever you want using imdone.io. It's great for keeping track of your work or better yet identifying, organizing and analyzing technical debt so it can be integrated into the product backlog.

imdone-atom recognizes the common TODO style comments we're all used to, with the added flexibility of todo.txt and markdown syntax. A complete syntax guide can be found in the task formats section of the imdone-core README.md.

Try adding some TODO's and press Alt (⌥ Option)+T to see your board!

A TODO in javascript

// TODO: Refactor and DRY up

A TODO in markdown

#TODO: As a user I would like to ... so that ...

In code files, imdone recognizes any comment line after a TODO as a description and adds it to the card. imdone stops looking for description lines if it encounters a new TODO or a line of code.

In non code files, imdone recognizes any line after a TODO as a description and adds it to the card. imdone stops looking for description lines if it encounters a new TODO or a blank line.

Checklists in your descriptions will render in your cards and will live update your file as they're checked.

// TODO: Refactor and DRY up
// - [x] Replace all duplicate code with this method
// - [ ] Make sure all tests are up to date

For imdone.io subscribers!!!

$now and $today variable replacement

  • replace $now with with the current timestamp (ex. 2018-03-18T09:37:49-06:00)
  • replace $today with the current date (ex. 2018-03-18)

Plain text remind: and due: timestamps

Use plain text to set reminders and due dates for your tasks. Uses date.js.

  • replace due tomorrow at noon.
    • with due:[timestamp of tomorrow at noon]
    • (ex. due:2018-03-19T10:00:00-06:00)
  • replace remind me in 2 hours.
    • with due:[timestamp in 2 hours]
    • (ex. remind:2018-03-18T11:45:06-06:00)
  • replace due tomorrow at noon. remind me 30 min before.
    • with due:[timestamp of tomorrow at noon] remind:[timestamp for 30 minutes before due]
    • (ex. due:2018-03-19T10:00:00-06:00 remind:2018-03-19T11:30:00-04:00)

OS notifications for remind:[timestamp] metadata

If you set a reminder for your task, you'll receive an OS notification that when clicked, will taske you to the task in the file containing it.

screen shot 2018-03-23 at 9 09 05 am

Auto completed:[timestamp] and Auto created:[timestamp]

Adding this section to your .imdone/config.json will cause all tasks in DONE to have a completed:[timestamp] added to the task text, and tasks not in DONE to have a created:[timestamp] added to the task text. See rql for filter syntax.

"transformers": {
  "autocomplete": {
    "filter": "eq(list,DONE)"
  },
  "autocreate": {
    "filter": "ne(list,DONE)"
  }
}

Task Board Features

Filtering your board

imdone uses rql to filter your board. Click on the tags, contexts or the lightbulb icon next to metadata or the filename to see some examples. You can query for any property of a task. If the rql query doesn't return a result the filter will be treated as a regular expression and matched agains task.rawTask.

Metadata fields with the keys "created", "completed", "due" and "remind" are added as date fields to the task so you can filter them with lt() and gt() (e.g. gt(due,date:2018-04-20))

{
  "frontMatter": {
    "tags": [
      "epic"
    ],
    "context": [],
    "meta": {}
  },
  "rawTask": "#DOING: As a user I would like to add new files from a template with front matter to be applied to all tasks in the file. id:40",
  "text": "As a user I would like to add new files from a template with front matter to be applied to all tasks in the file. id:40",
  "list": "DOING",
  "order": "",
  "hasColon": true,
  "line": 5,
  "id": "671df79dc689d6a16f8d6000e9ff55c0886805a4",
  "repoId": "/Users/jesse/projects/imdone-core",
  "source": {
    "path": "docs/backlog/templates/readme.md",
    "id": "docs/backlog/templates/readme.md",
    "repoId": "/Users/jesse/projects/imdone-core",
    "type": "File",
    "ext": "md",
    "lang": "markdown",
    "modified": false,
    "modifiedTime": "2018-05-19T15:45:19.843Z"
  },
  "type": "HASHTAG",
  "tags": [],
  "context": [],
  "meta": {
    "id": [
      "40"
    ]
  },
  "description": [
    "Acceptance Criteria",
    "----",
    "- User can select from all templates stored in .imdone/templates",
    "- User will be asked to provide information based on 'model' param",
    "- template files should have a .yml or .yaml extension"
  ],
  "allTags": [
    "epic"
  ],
  "allContext": [],
  "allMeta": {
    "id": [
      "40"
    ]
  }
}

Ignoring all tasks in a list

Add an ignore: true property to the list in .imdone/config.js to keep tasks in the given list off the board and ignored by imdone.io integrations. If you add the ignore: true property to a list in .imdone/config.json like this...

"lists": [
  {
    "name": "ARCHIVE",
    "hidden": false,
    "ignore": true
  }
]

The list will look like this...

screen shot 2018-04-04 at 12 26 46 pm

Delete all visible tasks

Just click on the trash can icon and all the visible tasks will be deleted. imdone will also get rid of any blank lines left behind! Great for cleaning up!

Open all files for visible tasks

Click on the lightning bolt icon and open all files for the visible tasks.

Using tags in your TODO comments

imdone uses a bit of Todo.txt format (except priority), so +bug would be a tag. Tags in TODO content are turned into filter links, so clicking on it will filter the board.

Using contexts and @name syntax

You can use Todo.txt contexts in the same way. They'll also be turned into filter links.

metadata

Another great benefit of using Todo.txt format is the metadata. Just use the format key:value, and your metadata will be listed in a table inside the task card. We use metadata for imdone.io integrations like gh:1 to represent github issue number 1 and id:1 to represent imdone task id 1.

Adding and removing TODO tokens

You can add a token by just adding an all caps list using the add list button. If the list name matches this regex [A-Z]+[A-Z-_]{2,} a new token will be created. Adding a  TODO token If the list name matches this this regex /[\w\-]+?/, then you will have to use the hash style syntax like this...

// #to-do: This is in a list that doesn't have all caps!

Global journal

Configure a directory to use as a daily journal. Open the daily journal with alt+j. If your like me, you'll just use dropbox directory for this. Remember, you can use TODO's in any text file if you put a # in front of the token, like this...

This is my simple markdown journal
- #TODO: Finish this work

Project journal

Configure a directory to use as a daily project journal. Open the daily project journal with alt+p. The daily project journal is stored in your project, and defaults to <project-dir>/journal/${month}/${date}.md Use your project journal for anything, even planning your next set of features like this...

- #BACKLOG: As a user I would like to use templates to add a Definition of Done to my TODOs so that I spend less time context switching to my issue tracking system.
  - [ ] Read templates from `.imdone/templates.md`
  - [ ] Replace description lines with @<template-name>

Front matter

You can add tags, context and metadata to all tasks in a markdown file with YAML front matter like this...

---
tags:
  - story
  - enhancement
context:
  - github
meta:
  sprint:
   - 1
---

These attributes will be available to use in filters like this...

  • contains(frontMatter.tags,story)

If you also want to capture tasks with an inline story tag try this...

  • contains(allTags,story)

Open files in intellij and webstorm

Ignoring files

  • Configuration setting
    You can ignore files with the "Exclude Vcs Ignored Paths" setting

  • .imdoneignore
    .imdoneignore is implemented using the ignore package. Each file in your projects path is tested against the rules in .imdoneignore.
    To ignore all but some subdirectories, see this Stack Overflow question. git - .gitignore exclude folder but include specific subfolder - Stack Overflow

  • .imdone/config.json
    imdone will also ignore files and folders that match a regex in the .imdone/config.json, exclude array. The array is seeded with some common excludes on first run.

    IMPORTANT: If your project is large (#files > 1000) consider adding an .imdoneignore file.

Install

$ apm install imdone-atom

or open Atom and go to Preferences > Install and search for imdone-atom

Commands

Command Palette Key Mapping Description
Imdone Atom: Tasks Alt (⌥ Option)+T Open task board
Imdone Atom: Todays Journal Alt (⌥ Option)+J Open todays journal file
Imdone Atom: Todays Project Journal Alt (⌥ Option)+P Open todays project journal file
Imdone Atom: Board Zoom In Alt (⌥ Option)+. Zoom in board
Imdone Atom: Board Zoom Out Alt (⌥ Option)+, Zoom out board
Imdone Atom: Export Alt (⌥ Option)+X Create imdone-export.json

Settings

Name Type Default Description
Exclude Vcs Ignored Paths boolean false Exclude files that are ignored by your version control system
File Opener Port integer 9799 Port the file opener communicates on
Max Files Prompt integer 2500 How many files is too many to parse without prompting to add ignores?
Open in Intellij string '' Glob pattern for files that should open in Intellij.
Show Notifications boolean false Show notifications upon clicking task source link.
Show Tags Inline boolean false Display inline tag and context links in task text?
Today's Journal Date Format string YYYY-MM-DD How would you like your date variable formatted?
Today's Journal Directory string $HOME/notes Where do you want your journal files to live? (Their project directory)
Today's Journal File Name Template string ${date}.md How do you want your journal files to be named?
Today's Journal Project File Name Template string journal/${month}/${date}.md How do you want your project journal files to be named?
Today's Journal Month Format string YYYY-MM How would you like your month variable formatted for use in directory or file name template?
Use Alternate File Watcher boolean false If your board won't update when you edit files, then try the alternate file watcher
Zoom Level Number 1 Set the default zoom level on startup. min: .2, max: 2.5

License

MIT