gizmomogwai / org-kanban

Kanban table for org-mode
MIT License
239 stars 19 forks source link

swim lane feature request #31

Open quisenbeje opened 3 years ago

quisenbeje commented 3 years ago

First I'd like to say I really like this project and I wish I knew more about emacs/lisp development so I could contribute.

I think it would be really helpful add the ability to create swimlanes in the table based upon item tags. An example might look something like this:

#+TITLE: kanban
#+TODO: HOLD WAITING IN-WORK NEXT | DONE
* example
** IN-WORK [#A] GUI app :@james:dev:p1:project:
** NEXT [#B] CM admin :@james:p2:project:
** WAITING [#A] Correlator app :@daniel:p1:project:
** WAITING [#B] D01 build :@daniel:dev:project:p3:
** IN-WORK [#B] doc update :@boomer:@jerry:project:p1:docs:
** HOLD [#C] serial app :@jj:project:p4:
** DONE [#C] b300 :@jj:project:p2:study:

#+BEGIN: kanban :compressed t :mirrored t :match "project"
| DONE | NEXT     | IN-WORK    | WAITING        | HOLD       |
|------+----------+------------+----------------+------------|
| b300 | CM admin | GUI app    | Correlator app | serial app |
|      |          | doc update | D01 build      |            |
#+END:

#+BEGIN: kanban :compressed t :mirrored t :match "project" :lanes ("@james" "@daniel" "@boomer" "@jerry" "@jj")
| LN      | DONE | NEXT     | IN-WORK    | WAITING        | HOLD       |
|---------+------+----------+------------+----------------+------------|
| @james  |      | CM admin | GUI app    |                |            |
|---------+------+----------+------------+----------------+------------|
| @daniel |      |          |            | Correlator app |            |
|         |      |          |            | D01 build      |            |
|---------+------+----------+------------+----------------+------------|
| @boomer |      |          | doc update |                |            |
|---------+------+----------+------------+----------------+------------|
| @jerry  |      |          | doc update |                |            |
|---------+------+----------+------------+----------------+------------|
| @jj     | b300 |          |            |                | serial app |
#+END:

#+BEGIN: kanban :compressed t :mirrored t :match "project" :lanes ("p1" "p2" "p3" "p4")
| LN | DONE | NEXT     | IN-WORK    | WAITING        | HOLD       |
|----+------+----------+------------+----------------+------------|
| p1 |      |          | GUI app    | Correlator app |            |
|    |      |          | doc update |                |            |
|----+------+----------+------------+----------------+------------|
| p2 | b300 | CM admin |            |                |            |
|----+------+----------+------------+----------------+------------|
| p3 |      |          |            | D01 build      |            |
|----+------+----------+------------+----------------+------------|
| p4 |      |          | doc update |                | serial app |
#+END:

It might also be worth considering having an option to filter solely on the lanes. in which case, in my example above I could have replaced :match "project" with :match_lanes t; and if :match_lanes nil was set there would be some catchall lane for those items that exist but don't fall into a lane.


#+BEGIN: kanban :compressed t :mirrored t :match "project" :lanes ("dev" "docs" "study") :match_lanes nil
| LN    | DONE | NEXT     | IN-WORK    | WAITING        | HOLD       |
|-------+------+----------+------------+----------------+------------|
| dev   |      |          | GUI app    | D01 build      | serial app |
|-------+------+----------+------------+----------------+------------|
| docs  |      |          | doc update |                |            |
|-------+------+----------+------------+----------------+------------|
| study | b300 |          |            |                |            |
|-------+------+----------+------------+----------------+------------|
| ::    |      | CM admin |            | Correlator app |            |
#+END:
gizmomogwai commented 3 years ago

Thanks for the feature request. At the moment this is not possible, and I think this might add too much features into the tables, especially because each lane would make up a new row, with individual separators. In theory you could create a new table for each lane, but then you would loose the nice overview.

It might be possible to iterate over all the lanes, filter on them together with match (i guess the things should be and'ed) and then concatenate them all in a big table.

Not sure when I will come around to implement that.