-*- outline -*- This document outlines *a* design concept for an RT mode for GNU/Emacs. ** Functional modules * Module "TicketSQL compiler": Symbolic expression domain specific language to TicketSQL query compiler. Accept as input a sexp representing a query and output a query in TicketSQL format. For example: [(:and (:owner "Ben Bitdiddle") (:status "open"))] => ["Owner='Ben Bitdiddle' and Status='open'"]. * Module "TicketSQL runner": Run a TicketSQL query against the server and return the result. Accept as input a TicketSQL query and return a list of ticket-id ticket-subject pairs or nil if no matches were found. * Module "ticket retriever": Retrieve all of the data related to a particular ticket. Accept as input a ticket-id and return a string containing all of the information and history corresponding to the ticket with ticket-id. * Module "CLI command interface": Send ticket-modifying commands to the server, receive and process the results. * Module "local storage": Store and retrieve arbitrary information about tickets. The storage is keyed to the RT ticket number. ** User interface modules * Module "ticket browser": (requires "TicketSQL runner") Interactive interface to choose a ticket out of a list of tickets. The query which generated the list is displayed at the top, followed by the number of tickets listed, followed by a list of tickets. Tickets are displayed according to a modular display function. The tickets are sorted according to a default sorting function (reverse chronological order). * Module "ticket viewer": (requires "TicketSQL retriever") Interactive interface to display all of the information and history corresponding to the ticket with ticket-id. Ticket display provides a number of convinience functions. The buffer is read-only and provides font-locking to easily identify section borders. The keyboard space-bar invokes `scroll-up'. The "n" and "p" keys jump to the next and previous section borders respectively. ** Software interfaces * Module "rt-liber-Gnus": (requires "ticket viewer") Allows the user to open the current ticket in a Gnus mail buffer. Fills in the "Subject:" and "To:" fields appropriately. Has the ability to import the text of a certain section (automatically quoted). Optionally can add a "sorry we are late" text if the ticket is old or other greetings, salutations and signatures. * Module "command": (requires "CLI command interface") The user can send commands to the RT system to change the status of tickets via this interface. The user interface is updated as needed to reflect the change.