Update (2020): Kanban moved to sourcehut: https://hg.sr.ht/~arnebab/kanban.el
Update (2013-04-13): Kanban.el now lives in its own repository: on bitbucket and on a statically served http-repo (to be independent from unfree software).
Update (2013-04-10): Thanks to Han Duply, kanban links now work for entries from other files. And I uploaded kanban.el on marmalade.
Some time ago I learned about kanban, and the obvious next step was: “I want to have a kanban board from org-mode”. I searched for it, but did not find any. Not wanting to give up on the idea, I implemented my own :)
The result are two functions: kanban-todo and kanban-zero.
TODO DOING DONE Refactor in such a way that the let Presentation manage dumb sprites return all actions on every command: Make the UiState adhere the list of Turn the model into a pure state
kanban-todo provides your TODO items as kanban-fields. You can move them in the table without having duplicates, so all the state maintenance is done in the kanban table. Once you are finished, you mark them as done and delete them from the table.
To set it up, put kanban.el somewhere in your load path and (require 'kanban)
(more recent but potentially unstable version). Then just add a table like the following:
| | | |
|---+---+---|
| | | |
| | | |
| | | |
| | | |
#+TBLFM: $1='(kanban-todo @# @2$2..@>$>)::@1='(kanban-headers $#)
Click C-c C-c
with the point on the TBLFMT line to update the table.
The important line is the #+TBLFM. That says “use my TODO items in the TODO column, except if they are in another column” and “add kanban headers for my TODO states”
The kanban-todo function takes an optional parameter match, which you can use to restrict the kanban table to given tags. The syntax is the same as for org-mode matchers. The third argument allows you to provide a scope, for example a list of files.
To only set the scope, use nil
for the matcher.
See C-h f org-map-entries
and C-h v org-agenda-files
for details.
kanban-zero is a zero-state Kanban: All state is managed in org-mode and the table only displays the kanban items.
To set it up, put kanban.el somwhere in your load path and (require 'kanban)
. Then just add a table like the following:
| | | |
|---+---+---|
| | | |
| | | |
| | | |
| | | |
#+TBLFM: @2$1..@>$>='(kanban-zero @# $#)::@1='(kanban-headers $#)
The important line is the #+TBLFM. That says “show my org items in the appropriate column” and “add kanban headers for my TODO states”.
Click C-c C-c
with the point on the TBLFMT line to update the table.
The kanban-zero function takes an optional parameter match, which you can use to restrict the kanban table to given tags. The syntax is the same as for org-mode matchers. The third argument allows you to provide a scope, for example a list of files.
To only set the scope, use nil
for the matcher.
An example for matcher and scope would be:
#+TBLFM: @2$1..@>$>='(kanban-zero @# $# "1w6" '("/home/arne/.emacs.d/private/org/emacs-plan.org"))::@1='(kanban-headers $#)
See C-h f org-map-entries
and C-h v org-agenda-files
for details.
To contribute to kanban.el, just change the file and write a comment about your changes. Maybe I’ll setup a repo on Bitbucket at some point…
In the Hexbattle game-draft, I use kanban to track my progress:
Table of Contents
- 1 Kanban
- 2 refactor Hexbattle
- 2.1 Structure plan:
- 2.2 First all logic from UiState into the model. Model gets all state which is independent of the UI. Any necessary interaction in UiState calls model methods. √
- 2.3 Refactor in such a way that the UiState and (even more importantly) the input do not need to call the model directly anymore.
- 2.4 Make the UiState adhere the list of possible commands.
- 2.5 Turn the model into a pure state machine.
1 Kanban
❢ STARTED ✔ Refactor in such a way that the let Presentation manage dumb sprites return all actions on every command: Make the UiState adhere the list of Turn the model into a pure state 2 refactor Hexbattle 1w6
… and so on …
To make the todo states easier to grok directly you can use unicode symbols for them. Example:
#+SEQ_TODO: ❢ ☯ ⧖ | ☺ ✔ DEFERRED ✘
| ❢ | ☯ | ⧖ | ☺ | |---+---+---+---| | | | | | #+TBLFM: @1='(kanban-headers $#)::@2$1..@>$>='(kanban-zero @# $#)
In my setup they are ❢ (todo) ☯ (doing) ⧖ (waiting) and ☺ (to report). Not shown in the kanban Table are ✔ (finished), ✘ (dropped) and deferred (later), because they don’t require any action from me, so I don’t need to see them all the time.
If you want to create a shared kanban table, you can use the excellent transparent network access options from Emacs tramp to collect kanban entries directly via SSH.
To use that, simply pass an explicit list of files to kanban-zero as 4th argument (if you don’t use tag matching just use nil as 3rd argument). "/ssh:host:path/to/file.org" retrieves the file ~/path/to/file.org from the host.
| ❢ | ☯ | |---+---| | | | #+TBLFM: @1='(kanban-headers $#)::@2$1..@>$>='(kanban-zero @# $# nil (list (buffer-file-name) "/ssh:localhost:plan.org"))
Caveeat: all included kanban files have to use at least some of the same todo states: kanban.el only retrieves TODO states which are used in the current buffer.
Anhang | Größe |
---|---|
kanban.el | 5.86 KB |
Use Node:
⚙ Babcom is trying to load the comments ⚙
This textbox will disappear when the comments have been loaded.
If the box below shows an error-page, you need to install Freenet with the Sone-Plugin or set the node-path to your freenet node and click the Reload Comments button (or return).
If you see something like Invalid key: java.net.MalformedURLException: There is no @ in that URI! (Sone/search.html)
, you need to setup Sone and the Web of Trust
If you had Javascript enabled, you would see comments for this page instead of the Sone page of the sites author.
Note: To make a comment which isn’t a reply visible to others here, include a link to this site somewhere in the text of your comment. It will then show up here. To ensure that I get notified of your comment, also include my Sone-ID.
Link to this site and my Sone ID: sone://6~ZDYdvAgMoUfG6M5Kwi7SQqyS-gTcyFeaNN1Pf3FvY
This spam-resistant comment-field is made with babcom.