]> code.delx.au - gnu-emacs-elpa/blob - packages/gnorb/gnorb.org
b03098b20f09bedb828f054c7eebb4d26a7512f4
[gnu-emacs-elpa] / packages / gnorb / gnorb.org
1 #+TEXINFO_CLASS: info
2 #+TEXINFO_HEADER: @syncodeindex pg cp
3 #+TITLE: Gnorb Manual
4 #+SUBTITLE: for version 1, updated 3 October, 2014
5 #+TEXINFO_DIR_CATEGORY: Emacs
6 #+TEXINFO_DIR_TITLE: Gnorb: (gnorb)
7 #+TEXINFO_DIR_DESC: Glue code for Gnus, Org, and BBDB
8 #+OPTIONS: *:nil num:t toc:nil
9 * Introduction
10
11 Gnorb provides glue code between the Gnus, Org, and BBDB packages.
12 It's aimed at supporting email-based project management, and generally
13 making it easier to keep track of email communication.
14
15 Much of the code consists of single-use convenience functions, but
16 tracking email conversations with Org requires is more complicated,
17 and requires a bit of setup.
18
19 Gnorb can be used in a modular fashion, by selectively loading the
20 files "gnorb-org", "gnorb-gnus" or "gnorb-bbdb" instead of plain old
21 "gnorb". The package as a whole is rather Org-centric, though, and it
22 won't do much of interest without "gnorb-org".
23
24 This means that Gnorb doesn't have hard requirements to any of the
25 three base libraries. For the libraries you are using, however, you'll
26 get best results from using the most recent stable version (yes, that
27 means BBDB 3). Some of the features in Gnorb only work with
28 development versions of these libraries (those cases are noted below).
29 * Installation
30 Gnorb is best installed via the Elpa package manager -- look for it in
31 `list-packages'.
32
33 You can also clone the source code from
34 https://github.com/girzel/gnorb, and put the "gnorb" directory on your
35 load-path. The Github site is also a good place to report bugs and
36 other issues.
37 * Setup
38 Loading "gnorb" will make the basic functions available. Using Gnorb
39 for email tracking takes a bit more setup, however:
40
41 1. Email tracking is done via the Gnus registry, so that must be
42 activated with 'gnus-registry-initialize'.
43 2. It also requires the org-id package to be loaded, and
44 `org-id-track-globally' set to t (that's the default value, so
45 simply loading the package should be enough).
46 3. Add a nngnorb entry to your `gnus-secondary-select-methods'
47 variable. It will look like (nngnorb "Server name"). This does
48 nothing but provide a place to hang nnir searches.
49 4. Then put a call to `gnorb-tracking-initialize' in your init files,
50 at some point after the Gnus registry is initialized.
51 5. If you're not using a local archive method for saving your sent
52 messages (ie you're using IMAP), you'll also need to tell Gnorb
53 where to find your sent messages. Set the variable
54 `gnorb-gnus-sent-groups' to a list of strings; each string should
55 indicate a fully-qualified group name, eg "nnimap+SERVER:GROUP".
56
57 Lastly, Gnorb doesn't bind any keys by default; see the [[id:de1b2579-86c2-4bb1-b77e-3467a3d2b3c7][Suggested
58 Keybindings]] section below for possibilities.
59 * Email Tracking
60 The most interesting thing Gnorb does is using Org headings to track
61 email conversations. This can mean anything from reminding yourself to
62 write to your mother, to conducting delicate business negotiations
63 over email, to running an email-based bug tracker.
64
65 Gnorb assists in this process by using the Gnus registry to track
66 correspondences between emails and Org headings -- specifically,
67 message IDs are associated with Org heading ids. As a conversation
68 develops, messages are collected on a heading (and/or its children).
69 You can compose new messages directly from the Org heading, and Gnorb
70 will automatically associate your sent message with the conversation.
71 You can open temporary Gnus *Summary* buffers holding all the messages
72 associated with an Org subtree, and reply from there. When you receive
73 new messages relevant to a conversation, Gnorb will notice them and
74 prompt you to associate them with the appropriate Org heading.
75 Attachments on incoming messages can be automatically saved as
76 attachments on Org headings, using org-attach.
77
78 In general, the goal is to keep track of whole conversations, reduce
79 friction when moving between Gnus and Org, and keep you in the Org
80 agenda rather than in Gnus.
81 ** Email-Related Commands
82 Email tracking starts in one of three ways:
83
84 1. With an Org heading that represents an email TODO. Call
85 `gnorb-org-handle-mail' (see below) on the heading to compose a new
86 message, and start the tracking process.
87 2. By calling org-capture on a received message. Any heading captured
88 from a message will automatically be associated with that message.
89 3. By calling `gnorb-gnus-outgoing-do-todo' in a message composition
90 buffer -- see below.
91
92 There are three main email-related commands:
93
94 1. `gnorb-org-handle-mail' is called on an Org heading to compose a
95 new message. By default, this will begin a reply to the most recent
96 message in the conversation. If there are no associated messages to
97 reply to (or you call the function with a double prefix arg), Gnorb
98 will look for mailto: or bbdb: links in the heading, and compose a
99 new message to them.
100
101 The sent message will be associated with the Org heading, and
102 you'll be brought back to the heading and asked to trigger an
103 action on it.
104
105 `gnorb-email-subtree' is an alternative entry-point to
106 `gnorb-org-handle-mail'. It does the same thing as the latter, but
107 first exports the body of the subtree as either text or a file,
108 then inserts the text into the message body, or attaches the file
109 to the message, depending on what you've chosen.
110 2. `gnorb-gnus-incoming-do-todo' is called on a message in a Gnus
111 *Summary* buffer. You'll be prompted for an Org heading, taken to
112 that heading, and asked to trigger an action on it.
113 3. `gnorb-gnus-outgoing-do-todo' is called in message mode, while
114 composing a new message.
115
116 If called without a prefix arg, a new Org heading will be created
117 after the message is sent, and the sent message associated with it.
118 The new heading will be created as a capture heading, using the
119 template specified by the `gnorb-gnus-new-todo-capture-key' option.
120
121 If you call this function with a prefix arg, you'll be prompted to
122 choose an existing Org heading instead. After the the message is
123 sent, you'll be taken to that heading and prompted to trigger an
124 action on it.
125
126 It's also possible to call this function *after* a message is sent,
127 in case you forgot. Gnorb saves information about the most recently
128 sent message for this purpose.
129
130 Because these three commands all express a similar intent, but are
131 called in different modes, it can make sense to give each of them the
132 same keybinding in the keymaps for Org mode, Gnus summary mode, and
133 Message mode, respectively.
134 ** Trigger Actions
135 After calling `gnorb-gnus-incoming-do-todo' on a message, or after
136 sending a message associated with an Org heading, you'll be taken to
137 the heading and asked to "trigger an action" on it. At the moment
138 there are four different possibilities: triggering a TODO state-change
139 on the heading, taking a note on the heading (both these options will
140 associate the message with the heading), associating the message but
141 doing nothing else, and lastly, doing nothing at all.
142
143 More actions will be added in the future; it's also possible to
144 rearrange or delete existing actions, and add your own: see the
145 docstring of `gnorb-org-trigger-actions'.
146 ** Viewing Tracked Messages in *Summary* Buffers
147 :PROPERTIES:
148 :END:
149 Call `gnorb-org-view' on an Org heading to open an nnir *Summary*
150 buffer showing all the messages associated with that heading (this
151 requires that you've added an nngnorb server to your Gnus backends). A
152 minor mode will be in effect, ensuring that any replies you send to
153 messages in this buffer will automatically be associated with the
154 original Org heading. You can also invoke
155 `gnorb-summary-disassociate-message' ("C-c d") to disassociate the
156 message with the Org heading.
157
158 As a bonus, it's possible to go into Gnus' *Server* buffer, find the
159 line specifying your nngnorb server, and hit "G" (aka
160 `gnus-group-make-nnir-group'). At the query prompt, enter an Org-style
161 tags-todo Agenda query string (eg "+work-computer", or what have you).
162 Gnorb will find all headings matching this query, scan their subtrees
163 for gnus links, and then give you a Summary buffer containing all the
164 linked messages. This is dog-slow at the moment; it will get faster.
165
166 ** Hinting in Gnus
167 :PROPERTIES:
168 :END:
169 When you receive new mails that might be relevant to existing Org
170 TODOs, Gnorb can alert you to that fact. When
171 `gnorb-gnus-hint-relevant-article' is t (the default), Gnorb will
172 display a message in the minibuffer when opening potentially relevant
173 messages. You can then use `gnorb-gnus-incoming-to-todo' to trigger an
174 action on the relevant TODO.
175
176 This hinting can happen in the Gnus summary buffer as well. If you use
177 the escape indicated by `gnorb-gnus-summary-mark-format-letter" as
178 part of your `gnus-summary-line-format', articles that are relevant to
179 TODOs will be marked with a special character in the Summary buffer,
180 as determined by `gnorb-gnus-summary-mark'. By default, the format
181 letter is "g" (meaning it is used as "%ug" in the format line), and
182 the mark is "¡".
183 ** Message Attachments
184 :PROPERTIES:
185 :END:
186 Gnorb simplifies the handling of attachments that you receive in
187 emails. When you call `gnorb-gnus-incoming-do-todo' on a message,
188 you'll be prompted to re-attach the email's attachments onto the Org
189 heading, using the org-attach library.
190
191 You can also do this as part of the capture process. Set the
192 new :gnus-attachments key to "t" in a capture template that you use on
193 mail messages, and you'll be queried to re-attach the message's
194 attachments onto the newly-captured heading. Or set
195 `gnorb-gnus-capture-always-attach' to "t" to have Gnorb do this for
196 all capture templates.
197
198 You can also do this using the regular system of MIME commands,
199 without invoking the email tracking process. See [[id:de1b2579-86c2-4bb1-b77e-3467a3d2b3c7][Suggested
200 Keybindings]], below.
201
202 The same process works in reverse: when you send a message from an Org
203 heading using `gnorb-org-handle-mail', Gnorb will ask if you want to
204 attach the files in the heading's org-attach directory to the outgoing
205 message.
206 ** Likely Workflow
207 You receive an email from Jimmy, who wants to rent a room in your
208 house. "I'll respond to this later," you think.
209
210 You capture an Org TODO from the email, call it "Jimmy renting a
211 room", and give it a REPLY keyword. Gnorb quietly records the
212 correspondence between the email and the TODO, using the Gnus
213 registry.
214
215 The next day, looking at your Agenda, you see the TODO and decide to
216 respond to the email. You call `gnorb-org-handle-mail' on the heading,
217 and Gnorb opens Jimmy's email and starts a reply to it.
218
219 You tell Jimmy the room's available in March, and send the message.
220 Gnorb takes you back to the heading, and asks you to trigger an action
221 on it. You choose "todo state", and change the heading keyword to
222 WAIT.
223
224 Two days later, Jimmy replies to your message, saying that March is
225 perfect. When you open his response, Gnorb politely reminds you that
226 the message is relevant to an existing TODO. You call
227 `gnorb-gnus-incoming-do-todo' on the message, and are again taken to
228 the TODO and asked to trigger an action. Again you choose "todo
229 state", and change the heading keyword back to REPLY.
230
231 You get another email, from Samantha, warning you not to rent the room
232 to Jimmy. She even attaches a picture of a room in her house, as it
233 looked after Jimmy had stayed there for six months. It's bad. You call
234 `gnorb-gnus-incoming-do-todo' on her message, and pick the "Jimmy
235 renting a room" heading. This time, you choose "take note" as the
236 trigger action, and make a brief note about how bad that room looked.
237 Gnorb asks if you'd like to attach the picture to the Org heading. You
238 decide you will.
239
240 Now it's time to write to Jimmy and say something noncommittal.
241 Calling `gnorb-org-handle-mail' on the heading would respond to
242 Samantha's email, the most recent of the associated messages, which
243 isn't what you want. Instead you call `gnorb-org-view' on the heading,
244 which opens up a Gnus *Summary* buffer containing all four messages:
245 Jimmy's first, your response, his response to that, and Samantha's
246 message. You pick Jimmy's second email, and reply to it normally.
247 Gnorb asks if you'd like to send the picture of the room as an
248 attachment. You would not. When you send the reply Gnorb tracks that
249 as well, and does the "trigger an action" trick again.
250
251 In this way Gnorb helps you manage an entire conversation, possibly
252 with multiple threads and multiple participants. Mostly all you need
253 to do is call `gnorb-gnus-incoming-do-todo' on newly-received
254 messages, and `gnorb-org-handle-mail' on the heading when it's time to
255 compose a new reply.
256 * Restoring Window Layout
257 Many Gnorb functions alter the window layout and value of point. In
258 most of these cases, you can restore the previous layout using the
259 interactive function `gnorb-restore-layout'.
260
261 * Recent Mails From BBDB Contacts
262 :PROPERTIES:
263 :END:
264 If you're using a recent git version of BBDB (circa mid-May 2014 or
265 later), you can give your BBDB contacts a special field which will
266 collect links to recent emails from that contact. The default name of
267 the field is "messages", but you can customize that name using the
268 `gnorb-bbdb-messages-field' option.
269
270 Gnorb will not collect links by default: you need to call
271 `gnorb-bbdb-open-link' on a contact once to start the process.
272 Thereafter, opening mails from that contact will store a link to the
273 message.
274
275 Once some links are stored, `gnorb-bbdb-open-link' will open them: Use
276 a prefix arg to the function call to select particular messages to
277 open. There are several options controlling how all this works; see
278 the gnorb-bbdb user options section below for details.
279 * BBDB posting styles
280 :PROPERTIES:
281 :END:
282 Gnorb comes with a BBDB posting-style system, inspired by (copied
283 from) gnus-posting-styles. You can specify how messages are composed
284 to specific contacts, by matching on contact field values (the same
285 way gnus-posting-styles matches on group names). See the docstring of
286 `gnorb-bbdb-posting-styles' for details.
287
288 In order not to be too intrusive, Gnorb doesn't alter the behavior of
289 `bbdb-mail', the usual mail-composition function. Instead it provides
290 an alternate `gnorb-bbdb-mail', which does exactly the same thing, but
291 first processes the new mail according to `gnorb-bbdb-posting-styles'.
292 If you want to use this feature regularly, you can remap `bbdb-mail'
293 to `gnorb-bbdb-mail' in the `bbdb-mode-map'.
294 * BBDB Org tagging
295 BBDB contacts can be tagged with the same tags you use in your Org
296 files. This allows you to pop up a *BBDB* buffer alongside your Org
297 Agenda when searching for certain tags. This can happen automatically
298 for all Org tags-todo searches, if you set the option
299 `gnorb-org-agenda-popup-bbdb' to t. Or you can do it manually, by
300 calling the command of the same name. This command only shows TODOs by
301 default: use a prefix argument to show all tagged headings.
302
303 Tags are stored in an xfield named org-tags, by default. You can
304 customize the name of this field using `gnorb-bbdb-org-tag-field'.
305 * Misc BBDB
306 ** Searching for messages from BBDB contacts
307 :PROPERTIES:
308 :END:
309 Call `gnorb-bbdb-mail-search' to search for all mail messages from the
310 record(s) displayed. Currently supports the notmuch, mairix, and
311 namazu search backends; set `gnorb-gnus-mail-search-backend' to one of
312 those symbol values.
313 ** Citing BBDB contacts
314 :PROPERTIES:
315 :END:
316 Calling `gnorb-bbdb-cite-contact' will prompt for a BBDB record and
317 insert a string of the type "Bob Smith <bob@smith.com>".
318 ** User Options
319 - `gnorb-bbdb-org-tag-field :: The name of the BBDB xfield, as a
320 symbol, that holds Org-related tags. Specified as a string with
321 the ":" separator between tags, same as for Org headings.
322 Defaults to org-tag.
323 - `gnorb-bbdb-messages-field' :: The name of the BBDB xfield that
324 holds links to recently-received messages from this contact.
325 Defaults to 'messages.
326 - `gnorb-bbdb-collect-N-messages' :: Collect at most this many links
327 to messages from this contact. Defaults to 5.
328 - `gnorb-bbdb-define-recent' :: What does "recently-received" mean?
329 Possible values are the symbols seen and received. When set to
330 seen, the most recently-opened messages are collected. When set
331 to received, the most recently-received (by Date header) messages
332 are collected. Defaults to seen.
333 - `gnorb-bbdb-message-link-format-multi' :: How is a single message's
334 link formatted in the multi-line BBDB layout format? Defaults to
335 "%:count. %D: %:subject" (see the docstring for details).
336 - ` gnorb-bbdb-message-link-format-one' :: How is a single message's
337 link formatted in the one-line BBDB layout format? Defaults to
338 nil (see the docstring for details).
339 - `gnorb-bbdb-posting-styles' :: Styles to use for influencing the
340 format of mails composed to the BBDB record(s) under point (see
341 the docstring for details).
342 * Misc Org
343 ** Inserting BBDB links
344 :PROPERTIES:
345 :END:
346 Calling `gnorb-org-contact-link' will prompt for a BBDB record and
347 insert an Org link to that record at point.
348 ** User Options
349 - `gnorb-org-after-message-setup-hook' :: Hook run in a message buffer
350 after setting up the message, from `gnorb-org-handle-mail' or
351 `gnorb-org-email-subtree'.
352 - `gnorb-org-trigger-actions' :: List of potential actions that can be
353 taken on headings after a message is sent. See docstring for
354 details.
355 - `gnorb-org-mail-scan-scope' :: The number of paragraphs to scan for
356 mail-related links. This comes into play when calling
357 `gnorb-org-handle-mail' on a heading with no associated messages,
358 or when `gnorb-org-handle-mail' is called with a prefix arg.
359 - `gnorb-org-find-candidates-match' :: When searching all Org files
360 for headings to collect messages from, this option can limit
361 which headings are searched. It is used as the second argument to
362 a call to `org-map-entries', and has the same syntax as that used
363 in an agenda tags view.
364 - `gnorb-org-email-subtree-text-parameters' :: A plist of export
365 parameters corresponding to the EXT-PLIST argument to the export
366 functions, for use when exporting to text.
367 - `gnorb-org-email-subtree-file-parameters' :: A plist of export
368 parameters corresponding to the EXT-PLIST argument to the export
369 functions, for use when exporting to a file.
370 - `gnorb-org-email-subtree-text-options' :: A list of ts and nils
371 corresponding to Org's export options, to be used when exporting
372 to text. The options, in order, are async, subtreep,
373 visible-only, and body-only.
374 - `gnorb-org-email-subtree-file-options' :: A list of ts and nils
375 corresponding to Org's export options, to be used when exporting
376 to a file. The options, in order, are async, subtreep,
377 visible-only, and body-only.
378 - `gnorb-org-export-extensions' :: Correspondence between export
379 backends and their respective (usual) file extensions.
380 - `gnorb-org-capture-collect-link-p' :: When this is set to t, the
381 capture process will always store a link to the Gnus message or
382 BBDB record under point, even when the link isn't part of the
383 capture template. It can then be added to the captured heading
384 with org-insert-link, as usual.
385 - `gnorb-org-agenda-popup-bbdb' :: Set to "t" to automatically pop up
386 the BBDB buffer displaying records corresponding to the Org
387 Agenda tags search underway. If this is nil you can always do it
388 manually with the command of the same name.
389 - `gnorb-org-bbdb-popup-layout' :: Controls the layout of the
390 Agenda-related BBDB popup, takes the same values as
391 bbdb-pop-up-layout.
392 * Misc Gnus
393 ** Viewing Org headlines relevant to a message
394 :PROPERTIES:
395 :END:
396 Call `gnorb-gnus-view' on a message that is associated with an Org
397 heading to jump to that heading.
398 ** User Options
399 - `gnorb-gnus-mail-search-backend' :: Specifies the search backend
400 that you use for searching mails. Currently supports notmuch,
401 mairix, and namazu: set this option to one of those symbols.
402 - `gnorb-gnus-capture-always-attach' :: Treat all capture templates as
403 if they had the :gnus-attachments key set to "t". This only has
404 any effect if you're capturing from a Gnus summary or article
405 buffer.
406 - `gnorb-trigger-todo-default' :: Set to either 'note or 'todo to tell
407 `gnorb-gnus-incoming-do-todo' what to do by default. You can
408 reach the non-default behavior by calling that function with a
409 prefix argument. Alternately, set to 'prompt to always prompt for
410 the appropriate action.
411 - `gnorb-gnus-trigger-refile-targets' :: If you use
412 `gnorb-gnus-incoming-do-todo' on an incoming message, Gnorb will
413 try to locate a TODO heading that's relevant to that message. If
414 it can't, it will prompt you for one, using the refile interface.
415 This option will be used as the value of `org-refile-targets'
416 during that process: see the docstring of `org-refile-targets'
417 for the appropriate syntax.
418 - `gnorb-gnus-new-todo-capture-key' :: Set this to a single-character
419 string pointing at an Org capture template to use when creating
420 TODOs from outgoing messages. The template is a regular capture
421 template, with a few exceptions. If Gnus helps you archive
422 outgoing messages (ie you have `gnus-message-archive-group' set
423 to something, and your outgoing messages have a "Fcc" header), a
424 link to that message will be made, and you'll be able to use all
425 the escapes related to gnus messages. If you don't archive
426 outgoing messages, you'll still be able to use the %:subject,
427 %:to, %:toname, %:toaddress, and %:date escapes in the capture
428 template.
429 - `gnorb-gnus-hint-relevant-article' :: Set to "t" (the default) to
430 have Gnorb give you a hint in the minibuffer when opening
431 messages that might be relevant to existing Org TODOs.
432 - `gnorb-gnus-summary-mark-format-letter' :: The formatting letter to
433 use as part of your `gnus-summary-line-format', to indicate
434 messages which might be relevant to Org TODOs. Defaults to "g",
435 meaning it should be used as "%ug" in the format line.
436 - `gnorb-gnus-summary-mark' :: The mark used to indicate relevant
437 messages in the Summary buffer, when
438 `gnorb-gnus-summary-mark-format-letter' is present in the format
439 line. Defaults to "¡".
440 * Suggested Keybindings
441 :PROPERTIES:
442 :ID: de1b2579-86c2-4bb1-b77e-3467a3d2b3c7
443 :END:
444 #+BEGIN_SRC emacs-lisp
445 (eval-after-load "gnorb-bbdb"
446 '(progn
447 (define-key bbdb-mode-map (kbd "O") 'gnorb-bbdb-tag-agenda)
448 (define-key bbdb-mode-map (kbd "S") 'gnorb-bbdb-mail-search)
449 (define-key bbdb-mode-map [remap bbdb-mail] 'gnorb-bbdb-mail)
450 (define-key bbdb-mode-map (kbd "l") 'gnorb-bbdb-open-link)
451 (global-set-key (kbd "C-c C") 'gnorb-bbdb-cite-contact)))
452
453 (eval-after-load "gnorb-org"
454 '(progn
455 (org-defkey org-mode-map (kbd "C-c C") 'gnorb-org-contact-link)
456 (org-defkey org-mode-map (kbd "C-c t") 'gnorb-org-handle-mail)
457 (org-defkey org-mode-map (kbd "C-c e") 'gnorb-org-view)
458 (org-defkey org-mode-map (kbd "C-c E") 'gnorb-org-email-subtree)
459 (org-defkey org-mode-map (kbd "C-c V") 'gnorb-org-popup-bbdb)
460 (setq gnorb-org-agenda-popup-bbdb t)
461 (eval-after-load "org-agenda"
462 '(progn (org-defkey org-agenda-mode-map (kbd "H") 'gnorb-org-handle-mail)
463 (org-defkey org-agenda-mode-map (kbd "V") 'gnorb-org-popup-bbdb)))))
464
465 (eval-after-load "gnorb-gnus"
466 '(progn
467 (define-key gnus-summary-mime-map "a" 'gnorb-gnus-article-org-attach)
468 (define-key gnus-summary-mode-map (kbd "C-c t") 'gnorb-gnus-incoming-do-todo)
469 (push '("attach to org heading" . gnorb-gnus-mime-org-attach)
470 gnus-mime-action-alist)
471 ;; The only way to add mime button command keys is by redefining
472 ;; gnus-mime-button-map, possibly not ideal. Ideal would be a
473 ;; setter function in gnus itself.
474 (push '(gnorb-gnus-mime-org-attach "a" "Attach to Org heading")
475 gnus-mime-button-commands)
476 (setq gnus-mime-button-map
477 (let ((map (make-sparse-keymap)))
478 (define-key map gnus-mouse-2 'gnus-article-push-button)
479 (define-key map gnus-down-mouse-3 'gnus-mime-button-menu)
480 (dolist (c gnus-mime-button-commands)
481 (define-key map (cadr c) (car c)))
482 map))))
483
484 (eval-after-load "message"
485 '(progn
486 (define-key message-mode-map (kbd "C-c t") 'gnorb-gnus-outgoing-do-todo)))
487 #+END_SRC
488 * Wishlist/TODO
489 - Provide a command that, when in the Org Agenda, does an email search
490 for messages received in the visible date span, or day under point,
491 etc. Make it work in the calendar, as well?
492 - Add trigger actions that create new sibling or child headings on the
493 original Org heading.
494 - Allow tagging of Gnus messages, by giving the message's registry
495 entry an 'org-tags key.
496 - Provide persistent nngnorb search groups.
497 - Allow automatic org-tagging of BBDB contacts: when messages from a
498 contact are associated with an Org heading, make it possible for the
499 contact to inherit that heading's tags automatically.
500 - Provide completion when setting Org tags on a BBDB contact.
501 - Provide a `gnorb-bbdb-view' command that opens a *Summary* buffer
502 containing all the tracked messages from the contact(s) under point.
503 - Provide a `gnorb-view' command that takes a tags-todo search phrase
504 (or a single Org heading ID), finds all relevant messages, Org
505 headings, and BBDB records, and sets up a four-pane view: Org
506 Agenda, *BBDB* buffer, Gnus *Summary* buffer, and an *Article*
507 buffer.