An Emacs mode for interfacing with FogBugz.
Emacs Lisp Common Lisp
Pull request Compare This branch is 58 commits ahead of ixmatus:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


This project is no longer maintained

I can no longer work on fogbugz-mode unless I have an account to use or if I add more fake API calls to the included fake API server. I’m no longer employed at a workplace that uses FogBugz. If I get around to another place that uses FogBugz then I’ll continue work on this.

I think this is a good enough start for other FogBugz/Emacs users to get going with.

License and COPYING

See COPYING for license and copyright information.

What is fogbugz-emacs?

Fogbugz-emacs is an interface for interacting with the FogBugz bug tracking system. It lets you view, create, and update cases, projects, and whatever else the FogBugz API gives you access to.

The FogBugz website has a listing of all the functionality that their API provides. fogbugz-emacs aims to implement support for all of that functionality.

Org Mode Integration

fogbugz-emacs can be integrated with org-mode and that was the original intention for creating fogbugz-emacs. Using properties it can pull in more information about cases and construct a full list of cases for a project.

The Mock Server

fogbugz-emacs comes with a web server that simulates the FogBugz API. This was created due to a lack of Internet when moving into a new place. Another reason is that sometimes you can’t do things live. At work, it would be a problem to create multiple projects and cases while working on fogbugz-emacs. Other users would see this and think something is wrong.

A local mock server reduces latency to…basically no latency.

I tried to replicate as much functionality as possible. My reasoning is that an interface to a web API is incomplete, and very very optimistic, if it can only handle positive cases. It should be able to handle the cases where something goes wrong.

The mock server is written in Common Lisp and has been tested with SBCL on GNU/Linux. It uses the fantastic Hunchentoot web server library and the CXML library to generate the XML output.



Autologin when token is out of date

Login and logoff commands

Need to store a token

List case filters, file:./fogbugz.el::fogbugz-list-filters

Set the current case filter, file:./fogbugz.el::fogbugz-set-current-filter

Get the current case filter, file:./fogbugz.el::fogbugz-get-current-filter

List cases

Set the current case filter and list cases for it

List cases for current case filter

Search cases

Map lispy names back to fogbugz as an HTTP parameter, file:./fogbugz.el::fogbugz-convert-lispy-column-names

List projects, file:./fogbugz.el::fogbugz-list-projects

List areas

List areas for a project

List categories

List priorities

List people

List statuses, file:./fogbugz.el::fogbugz-list-statuses

List milestones (a.k.a fix-fors)

Create case

Edit case

Mapping field names of fogbugz objects to lispy names

When a field name begins with “f” it’s a boolean value, should be converted “true” to T and the “false” to NIL. The lispy name should be suffixed with “-p”.

When a field name begins with “s” it’s a string value.

When it begins with “ix” it’s an ID of another object so “-id” should be the suffix of the lispy name.

The type notation should be dropped from the field name when converting to the lispy name.



View Status


Pull case from API

Create new case


  • id
  • last-updated
  • creator
  • area

Tags are listed beside the item.

Assumes that the TODO statuses are setup the same way.

Push case to API

Update case

Using a timestamp stored in the properties, Last-Updated or something like that. Need to be able to force updating with a prefix argument.

Create tags alist

Modify tags alist so that it makes categories a separate tag group, file:org-fogbugz.el::org-fogbugz-tag-alist

List DONE statuses

List TODO statuses

Mock Server

Implement commands

[#A] Implement view case command

[#B] Implement create case command

[#B] Implement edit case command

Implement login command

Implement log off command

Implement list filters command

Implement API version command

Example Project:The Farm (expected output from org-fogbugz)

This is the expected output from the org-fogbugz code.

Duck, Duck… but No Goose!

(The TODO status is set when the case is open, when it’s closed, the status is switched to DONE)

(This is the latest text summary) I searched the docs, but no goose!

(There is no due date for this case, but if there were, it’d be used for the DEADLINE)