Document through planner-publish.el.
[planner-el.git] / planner-el.texi
blob562b439553b396bfeffd7cccb78d3aeedfbd5828
1 \input texinfo @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename planner-el.info
4 @settitle planner-el
5 @c %**end of header
7 @dircategory Emacs
8 @direntry
9 * planner-el: (planner-el). planner.el: Day planner/organizer for Emacs.
10 @end direntry
12 @syncodeindex fn cp
14 @copying
15 This manual is for Planner version 3.40.
17 Copyright @copyright{} 2001, 2004, 2005, 2006 Free Software Foundation, Inc.@*
18 Parts copyright @copyright{} 2005 Jim Ottaway@*
19 Parts copyright @copyright{} 2005 Dryice Dong Liu
21 @quotation
22 Permission is granted to copy, distribute and/or modify this document
23 under the terms of the GNU General Public License, Version 2.0
24 or any later version published by the Free Software Foundation.
25 A copy of the license is included in the section entitled ``GNU
26 General Public License.''
27 @end quotation
28 @end copying
30 @titlepage
31 @title Guide to Planner
32 @subtitle a day planner and organizer
33 @subtitle for GNU Emacs and XEmacs
35 @c The following two commands
36 @c start the copyright page.
37 @page
38 @vskip 0pt plus 1filll
39 @insertcopying
40 @end titlepage
42 @c So the toc is printed at the start
43 @contents
45 @ifnottex
46 @node Top, Preface, (dir), (dir)
47 @comment  node-name,  next,  previous,  up
48 @top Planner
50 @insertcopying
51 @end ifnottex
53 @menu
54 * Preface::                     
55 * Introduction::                
56 * Installation::                
57 * Overview::                    A discussion of different approaches to planning
58 * Getting Started::             
59 * More about Planner::          In-depth look at some core features
60 * Managing Your Information::   Integration with external programs
61 * Advanced Configuration::      
62 * Reference Material::          
63 * Getting Help::                
64 * Acknowledgements::            
65 * GNU General Public License::  
66 * Concept Index::               
68 @detailmenu
69  --- The Detailed Node Listing ---
71 Installation
73 * Getting the Files::           
74 * Creating Your Planner::       
75 * Components::                  
76 * Advanced Installation::       
78 Getting the Files
80 * Installing from a Source Archive::  
81 * Installing from Arch::        
82 * Installing from Debian::      
84 Overview
86 * Planning based on the Franklin-Covey Approach::  
87 * Why Use Planner::             
89 Getting Started
91 * Tasks::                       
92 * Schedule::                    
93 * Notes::                       
94 * Hyperlinks::                  
95 * Example Page::                
96 * Review::                      
98 More about Planner
100 * Navigation::                  
101 * More about Tasks::            
102 * More about Notes::            
103 * Making Files Pretty::         
104 * Annotations::                 
105 * Interactive Lisp::            
106 * Publishing::                  
107 * Experimental Functions::      
109 More about Tasks
111 * Creating New Tasks::          
112 * Organizing Your Tasks::       
113 * Task Reports and Overviews::  
115 Creating New Tasks
117 * Creating a Task::             
118 * Task Priorities::             
119 * Task IDs::                    
120 * Cyclic Tasks::                
121 * Task Detail::                 
122 * Deadlines::                   
124 Organizing Your Tasks
126 * Multiple Projects::           
127 * Viewing Tasks::               
128 * Modifying Tasks::             
129 * Carrying Over Unfinished Tasks::  
130 * Task Numbering::              
131 * Task Ranks::                  
132 * Grouping Tasks::              
134 Task Reports and Overviews
136 * Accomplishments::             
137 * Task Overviews::              
138 * <tasks> tag::                 
139 * planner-zoom::                View and navigate tasks by time period
141 More about Notes
143 * Using Allout Mode::           Quickly navigating your notes
144 * <notes>::                     Note headlines
145 * <past-notes>::                Index of past notes
146 * Note Indices::                
148 Publishing
150 * Publishing Planner pages::    planner-publish.el
151 * Publishing Calendars::        planner-calendar.el
152 * Authz Access Restriction::    planner-authz.el
153 * RSS Publication::             Sharing notes with planner-rss.el
154 * iCal Task Publication::       Sharing tasks with planner-ical.el
155 * RDF Publication::             planner-rdf.el
157 RDF Publication
159 * Publishing with planner-rdf::  
160 * planner-rdf Tags::            
161 * planner-rdf Usage Examples::  
163 Managing Your Information
165 * E-mail::                      Linking notes and tasks to messages
166 * Scheduling and Time::         Tracking appointments and where your time goes
167 * Finances::                    Display your account balances and more
168 * Contacts and Conversations::  BBDB and ERC
169 * Tracking Research and Resources::  The Web, bibliographies, and bookmarks
170 * Tracking Development::        
172 E-mail
174 * Unix mail::                   Unix mailboxes: planner-unix-mail.el              
175 * Gnus::                        Gnus mail and news reader: planner-gnus.el
176 * VM::                          VM mail reader: planner-vm.el
177 * Wanderlust::                  Wanderlust mail reader: planner-wl.el
178 * MH-E::                        MH-E mail reader: planner-mhe.el
179 * Rmail::                       Rmail: planner-rmail.el
181 Scheduling and Time
183 * Diary::                       Using the Emacs diary
184 * Appointments::                Appointments in plan pages: planner-appt.el
185 * Timeclock::                   Time tracking: planner-timeclock.el
186 * schedule.el::                 Project completion: planner-schedule.el
188 Diary
190 * Planner-Diary Advanced Features::  
192 Usage
194 * Task-based Appointments::     
195 * Schedule-based Appointments::  
196 * Viewing Appointments::        
197 * Appointment Updating on Save::  
198 * Appointment and Calendar Integration::  
199 * Appointment Hooks::           
201 Finances
203 * Ledger::                      Personal finances: planner-ledger.el
205 Contacts and Conversations
207 * BBDB::                        Contacts: planner-bbdb.el
208 * Emacs Relay Chat::            Internet Relay Chat: planner-erc.el
210 Tracking Research and Resources
212 * W3m::                         Web browser: planner-w3m.el
213 * BibTeX::                      Bibliographies: planner-bibtex.el
214 * Bookmark::                    Bookmarks: planner-bookmark.el
216 Tracking Development
218 * Log Edit::                    Changelogs: planner-log-edit.el
219 * PSVN::                        svn changesets: planner-psvn.el
220 * XTLA::                        TLA changesets: planner-xtla.el
221 * Gnats::                       Gnats: The GNU bug reporting system
223 Advanced Configuration
225 * Customizing Your Day Pages::  Change your templates
226 * Variables to Customize::      Change various aspects of Planner behavior
227 * Ideas for Other Keybindings::  Add to and change the default keybindings
229 Reference Material
231 * Keeping Track of Time::       
232 * Other Interactive Functions::  
233 * Planner Keybindings::         Default keybindings for Planner
234 * Sample Configuration Files::  
236 Sample Configuration Files
238 * File Organization::           
239 * Bare-Bones Planning::         
240 * Bare-Bones Planning with Plan Pages::  
241 * Tasks on Plan Pages with Some Day Pages::  
242 * Hierarchical Tasks::          
244 @end detailmenu
245 @end menu
247 @node Preface, Introduction, Top, Top
248 @comment  node-name,  next,  previous,  up
249 @chapter Preface
251 This document describes Planner, which was written by John Wiegley and
252 is now maintained by Michael Olson (@pxref{Acknowledgements}).
254 This document is a work in progress, and your contribution will be
255 greatly appreciated. Please e-mail comments and suggestions to the
256 mailing list (@pxref{Getting Help}). In the subject line of your
257 e-mail, include the word @samp{Planner}.
259 This documentation is available in eye-pleasing formats including PDF
260 and HTML at @url{http://www.mwolson.org/static/doc/}.
262 Documentation author: John Sullivan @email{john@@wjsullivan.net}
264 Maintainer: Michael Olson @email{mwolson@@gnu.org}
267 John Sullivan (johnsu01)@*
268 April 25, 2004
270 @node Introduction, Installation, Preface, Top
271 @comment  node-name,  next,  previous,  up
272 @chapter Introduction
274 Planner is an organizer and day planner for Emacs.  It helps you keep
275 track of your pending and completed tasks, daily schedule, dates to
276 remember, notes and inspirations. It is a powerful tool not only for
277 managing your time and productivity, but also for keeping within easy
278 keystroke reach all of the information you need to be productive. It can
279 even publish reports charting your work for your personal web page, your
280 conscience, or your soon-to-be-impressed boss.
282 In fact, because it uses as its building blocks simple plain-text files,
283 it is an incredibly modular and flexible tool capable of shaping and
284 handling your personal information in ways whose variety is limited only
285 by your imagination. Because of this, Planner has a very active and
286 generous community who regularly share their innovations with each
287 other. Many of these modules and extensions are included in the archive
288 that you will download. Once you get the basics down, you'll probably
289 want to explore some of them. But as you read this manual and work with
290 Planner, keep in mind that the basic core is actually very simple, and
291 it might be worth spending time with just that before delving into the
292 customizations.
294 Because they are plain text with very few requirements, the organizer
295 pages kept by Planner can be as basic or as detailed as you
296 like. Your pages can be simple to-do lists with no more additional
297 information than what you would scrawl on a napkin, or they can be a
298 highly technical affair involving hyperlinks, embedded Lisp code,
299 appointment schedules and RSS feeds. As with so much in Emacs, it's
300 all up to you.
302 To get started with Planner, you first need to download it, and possibly
303 also the packages it depends on (@pxref{Installation}).
305 @node Installation, Overview, Introduction, Top
306 @comment  node-name,  next,  previous,  up
307 @chapter Installation
308 @cindex installation
310 Planner depends on Muse. Information for downloading and installing
311 Muse can be found at
312 @url{http://www.mwolson.org/static/doc/muse.html}.
314 Make sure that you use the latest Muse release.  Development code might
315 prove unstable.
317 @menu
318 * Getting the Files::           
319 * Creating Your Planner::       
320 * Components::                  
321 * Advanced Installation::       
322 @end menu
324 @node Getting the Files, Creating Your Planner, Installation, Installation
325 @comment node-name,  next,  previous,  up
326 @section Getting the Files
328 Currently, there are three ways to obtain and install Planner. You can
329 install it from a source archive, Arch repository, or Debian package.
331 @menu
332 * Installing from a Source Archive::  
333 * Installing from Arch::        
334 * Installing from Debian::      
335 @end menu
337 @node Installing from a Source Archive, Installing from Arch, Getting the Files, Getting the Files
338 @comment node-name,  next,  previous,  up
339 @subsection Installing from a Source Archive
340 @cindex source code archive, installing from
342 You can install Planner from the source archive packaged and
343 distributed directly by the maintainer. This archive is provided in
344 both @file{.tar.gz} and @file{.zip} format.
346 @enumerate
347 @item
348 Download and unpack either
349 @url{http://www.mwolson.org/static/dist/planner-latest.tar.gz} or
350 @url{http://www.mwolson.org/static/dist/planner-latest.zip}.
352 @item Edit your @file{~/.emacs} (@file{_emacs} on Microsoft Windows).
354 @example
355 ;; Add the directories to your load path
356 (add-to-list 'load-path "/path/to/muse/lisp")
357 (add-to-list 'load-path "/path/to/planner")
358 (add-to-list 'load-path "/path/to/remember")
360 ;; Load planner
361 (require 'planner)
362 @end example
363 @end enumerate
365 @subsubsection Updating Your Version
367 Download a new version and extract it over the old directory. Don't
368 forget to delete any byte-compiled files (@file{*.elc}) in the
369 directories so that the new code will be used.
371 @node Installing from Arch, Installing from Debian, Installing from a Source Archive, Getting the Files
372 @comment node-name,  next,  previous,  up
373 @subsection Installing from Arch
374 @cindex Arch repositories
375 @cindex Arch, installing from
377 Arch allows you to retrieve previous versions and select specific
378 features and bugfixes. Debian users can install Arch with @kbd{apt-get
379 install tla}. Users of other distributions should see
380 @url{http://regexps.srparish.net/www/}.
382 To get started with Planner using Arch, you'll need to run some initial
383 commands to register your local copy of the archive and retrieve the
384 files.
386 @example
387 # Register the Muse archive
388 tla register-archive http://www.mwolson.org/archives/2006
390 # Register the Planner archive
391 tla register-archive http://arch.gna.org/planner-el/archive-2006
393 # Get the Muse archive
394 tla get mwolson@@gnu.org--2006/muse--main--1.0 muse
396 # Download planner module into the planner/ subdirectory
397 tla get mwolson@@gnu.org--2006-planner-el/planner-el--devel--1.0 planner
398 @end example
400 Then add the following lines to your @code{~/.emacs}:
402 @example
403 ;; Add the directories to your load path
404 (add-to-list 'load-path "/path/to/muse/lisp")
405 (add-to-list 'load-path "/path/to/planner")
406 (add-to-list 'load-path "/path/to/remember")
408 ;; Load planner
409 (require 'planner)
410 @end example
412 You can also browse the Arch repository on the web at
413 @url{http://www.mwolson.org/cgi-bin/archzoom/archzoom.cgi/mwolson@@gnu.org--2006/planner}.
415 @subsubsection Updating Your Version
416 @cindex Arch, updating from
418 To stay up-to-date using Arch, here are some commands that might be
419 useful.
421 To list upstream changes not in local copy:
423 @example
424 # Change to the source directory you are interested in. Example:
425 cd muse/
427 # Display the summary of changes
428 tla missing --summary
429 @end example
431 To update to the latest version:
433 @example
434 cd muse; tla replay
435 cd ../planner; tla replay
436 cd ../remember; tla replay
437 @end example
439 Don't forget to delete any byte-compiled files (@file{*.elc}) in the
440 directories so that the new code will be used.
442 @node Installing from Debian, , Installing from Arch, Getting the Files
443 @comment node-name,  next,  previous,  up
444 @subsection Installing from Debian
445 @cindex Debian package
447 Debian packages for Planner, Muse, and Remember are available in Debian
448 proper as the @code{planner-el}, @code{muse-el}, and @code{remember-el}
449 packages, respectively.
451 If you wish to try experimental packages, add the following lines to
452 your @file{/etc/apt/sources.list}
454 @example
455 deb http://www.mwolson.org/debian/ ./
456 @end example
458 Then, do the following steps as root:
460 @example
461 apt-get update
462 apt-get install muse-el
463 apt-get install planner-el
464 @end example
466 @subsubsection Updating Your Version
467 @cindex Debian package, updating
469 If you installed Planner from Debian, do @kbd{apt-get update; apt-get
470 upgrade} to upgrade all packages that can be upgraded, or @kbd{apt-get
471 update; apt-get install planner-el} to upgrade just planner-el.
473 @node Creating Your Planner, Components, Getting the Files, Installation
474 @section Creating Your Planner
476 Now that you have installed the files for Planner and Muse, you need
477 to set some options to create your first planner.
479 Muse thinks in terms of projects. Each project consists of a group of
480 documents and certain information associated with these
481 documents. Planner is organized as a project within Muse. So, you need
482 to tell Muse a bit about it.
484 Add something like the following code to your @file{.emacs} file.
486 First, give your new Planner project a name. In this case, we use the
487 name, ``WikiPlanner''.
489 @example
490 (setq planner-project "WikiPlanner")
491 @end example
493 Next, add an entry for your project to Muse's master list of
494 projects. Don't forget to use your own name here in place of
495 ``WikiPlanner'' if you have chosen something different.
497 @example
498 (setq muse-project-alist
499       '(("WikiPlanner"
500          ("~/Plans"           ;; where your Planner pages are located
501           :default "TaskPool" ;; use value of `planner-default-page'
502           :major-mode planner-mode
503           :visit-link planner-visit-link)
505          ;; This next part is for specifying where Planner pages
506          ;; should be published and what Muse publishing style to
507          ;; use.  In this example, we will use the XHTML publishing
508          ;; style.
510          (:base "planner-xhtml"
511                 ;; where files are published to
512                 ;; (the value of `planner-publishing-directory', if
513                 ;;  you have a configuration for an older version
514                 ;;  of Planner)
515                 :path "~/public_html/Plans"))))
516 @end example
518 This code should work fine as-is for you as long as the directories
519 you see exist, and as long as you have no other Muse projects besides
520 your planner.
522 The first directory (@file{~/Plans}) is the directory where the
523 source files for your planner will reside. This is the directory where
524 you will actually visit files and edit them.  These files must have a
525 ``.muse'' extension.
527 The second directory (@file{~/public_html/Plans}) is the directory where
528 your planner files will be published by Muse as XHTML.
530 After you have added this code, make sure to either evaluate it or
531 restart Emacs.
533 @node Components, Advanced Installation, Creating Your Planner, Installation
534 @comment node-name,  next,  previous,  up
535 @section Components
537 Now that you have the archive, let's look at what's in it.
539 There should be three directories, named @file{planner}, @file{muse} and
540 @file{remember}.
542 In the @file{planner/} directory, you'll see many files with names like
543 @file{planner-gnus.el}. These are extra modules and extensions for
544 Planner, which you can use to tailor Planner to fit your desired
545 planning and information management habits.
547 In the @file{muse/lisp} directory, you'll see many files with names like
548 @file{muse-blosxom.el}. As in @file{planner/}, these are optional
549 modules and extensions.
551 A minimal working installation includes just @file{planner/planner.el}.
553 You need @file{planner.el} because it provides the core functions for
554 handling tasks, notes, and page navigation. You need @file{Emacs Muse}
555 because it provides the functions used to display your pages (both in an
556 emacs buffer and as HTML), and for connecting them to each other. More
557 specifically, it enables you to have hyperlinks and formatting in your
558 emacs buffers even though the actual files you are working with are
559 saved in plain text. These abilities are used in Planner to format your
560 planner pages the way you like, to create links from your tasks and
561 notes to the materials and projects they refer to, and to optionally
562 ``publish'' your pages in different formats, including HTML.
564 In the @file{remember/} directory are files related to
565 RememberMode. RememberMode does not depend on Planner or Muse, but works
566 best with Planner installed. It is not required in order to use Planner,
567 but it is used by many Planner users to record notes and information to
568 their planner pages.
570 If you are curious, you can open each file in these directories and read
571 the comments at the top, to get an idea of what each extension is used
572 for. They are also all detailed later in this manual.
574 @node Advanced Installation,  , Components, Installation
575 @comment  node-name,  next,  previous,  up
576 @section Advanced Installation
578 Once you decide you want to keep Planner around for a while, there
579 are two additional steps you can take to make using it easier and more
580 efficient. These steps are optional.
582 @itemize
584 @cindex @file{remember.el}
585 @cindex @file{remember-planner.el}
586 @item You can install @file{remember.el} and @file{remember-planner.el}
587 so that you can create Planner notes from anywhere. See the
588 documentation at
589 @uref{http://sacha.free.net.ph/notebook/doc/dev/remember/} for more
590 information.
592 @cindex installing the info file
593 @cindex @file{planner-el.texi}, installing
594 @cindex @file{planner-el.info}, installing
595 @item You can make this document, the Planner info file, appear in
596 the index of info files you see when you type @command{M-x info} or
597 @kbd{C-h i} in Emacs. The instructions for doing this vary depending
598 on whether you have permission to edit certain files on your
599 system. Follow the instructions in @ref{Installing an Info File, ,
600 ,texinfo, Texinfo}, using something like:
602 @example
603 * Planner: (path/to/planner/Planner). Organizer/day planner
604 for Emacs.
605 @end example
607 for the new entry in the info @file{dir} file.
609 @cindex byte compiling
610 @item You can byte-compile @file{planner.el}, @file{Muse},
611 @file{remember.el}, or any of the optional modules you frequently use,
612 in order to improve the speed of their execution. Basically, all you
613 need to do is change to the directory of each project and run
614 @command{make} from the command line. To read more detail about byte
615 compilation, see @ref{Byte Compilation, , ,elisp, Emacs Lisp Reference
616 Manual}.
618 @end itemize
620 @node Overview, Getting Started, Installation, Top
621 @comment node-name,  next,  previous,  up
622 @chapter Overview
624 Planner is a plain-text hyperlinked personal information manager
625 for Emacs that helps you keep track of tasks, notes, and other
626 information. People use Planner to support different ways of planning
627 one's day, from Franklin-Covey and David Allen's Getting Things Done
628 to home-brew hacks. Planner is even used to manage information not
629 normally handled by a personal information manager, like bugtracking,
630 time tracking, and team data. If you start by using Planner as a basic
631 TODO and notes manager, you might find other ways it can help you
632 improve your process.
634 You can use Planner to keep track of your tasks, schedule, notes,
635 and other information you want to store in hyperlinkable text files.
636 You can get the most benefit out of a personal information manager if
637 you use it everyday. Most people add @code{(plan)} to the end of their
638 @file{~/.emacs} so that Planner shows today's schedule and
639 unfinished tasks whenever Emacs starts. If you leave your Emacs
640 running for more than 24 hours, try to get into the habit of running
641 @code{plan} at least once a day.
643 Because your time is important, Planner tries to minimize
644 distractions, making it easier for you to jot down tasks and notes
645 without being distracted from your work. People often make tasks based
646 on the current buffer, so Planner tries to create hyperlinks to
647 whatever you're looking at so that you can jump back to it easily. The
648 @ref{Getting Started} tutorial will show you how to set that up for
649 both tasks and notes.
651 The customizability of Planner means you can make your personal
652 information manager truly personal. Planner strives to be as flexible
653 as possible, and we would love to adapt Planner to fit your needs.
654 Browse through our mailing list (@pxref{Getting Help}) to
655 find out how other people are using Planner, and post your feature
656 requests and bug reports there!
658 Planner is just a tool. It does not dictate a particular way of
659 planning, although it supports some ways better than it supports
660 others. If you want to take some time thinking about planning, read
661 the following reflections for inspiration and ideas. On the other
662 hand, if you want to hit the ground running, see @ref{Getting
663 Started}. If you already have a specific way of planning in mind,
664 check out @ref{Sample Configuration Files}.
666 @menu
667 * Planning based on the Franklin-Covey Approach::  
668 * Why Use Planner::             
669 @end menu
671 @node Planning based on the Franklin-Covey Approach, Why Use Planner, Overview, Overview
672 @comment  node-name,  next,  previous,  up
673 @section Planning Based on the Franklin-Covey Approach
674 @cindex philosophy of planning
676 This is a slightly edited and updated version of an essay by John
677 Wiegley. Read it if you want to get some insights into one way of
678 planning. You can skip this if you want to go straight to planning
679 your day.
681 What is planning?  It can be a nebulous thing to define.  In its
682 essence, however, it is very simple: it's how we achieve our dreams.
684 Our days are filled with time, and hence with actions, whether they
685 be of a mental or physical sort.  But there are two kinds of
686 action: reactive and creative.  Reactive action is a response to
687 the environment, a reaction to stimulus.  Had we enough instincts
688 to ensure survival, we could live according to this kind of action
689 alone.  It is a mode of behavior we share with every living
690 species.
692 The opposite to reactivity is creativity, when we decide upon a
693 course of action that is a wholly a product of personal choice.  We
694 then make decisions as to the steps needed to make this wish a
695 reality.  This is planning.  Planning is essentially a creative
696 endeavor at every step.
698 First, create the idea, what you want to achieve.  Very short-term
699 ideas do not need much more than thinking about how to do it.  But
700 long-term ideas require planning, since the mind cannot contain all
701 of the details.
703 Second, decide how the idea maps into the circumstances you find
704 yourself in.  Some environments will assist your plan, others
705 hinder it.  But step by step, identify every barrier to the
706 realization of your idea, and devise a countermeasure to overcome
707 it.  Once you've mapped things out from beginning to end,
708 accounting for unknowables as best you can, you now have your plan.
710 Third is to break the stages of the plan into parts that are not
711 overwhelming in their complexity.  It is at during this phase that
712 a plan is turned into task items, each to be accomplished within
713 the span of one day's time.  If a task requires several days, break
714 it up further.  The smaller it is, the less your mind will recoil
715 from attempting it.
717 Fourth is to monitor your progress, identifying problems and
718 correcting for them as you go.  Some plans start out unachievable,
719 and remain that way indefinitely, due to a simple lack of
720 observation.  If nothing is working for you, change it.  Otherwise,
721 your plan is merely a well-crafted wish.
723 Fifth is just to do the work, and be patient.  All good plans take a
724 great deal of time, and *cannot* happen immediately.  The groundwork
725 must be laid for each step, or else it will rest on an unsecure
726 foundation.  If you follow your plan doggedly, applying some time to
727 it each day or week, it @emph{will} happen.  Remember the story of the
728 tortoise and the hare.  I've even written a short essay on the
729 necessity of gradual accomplishment, which can be found at
730 @url{http://emacswiki.org/johnw/essays/node2.html}.
732 How can this software help?  Computers are ideal for manipulating
733 information, since they allow you to change things without erasing
734 or rewriting.  And since all plans change quite a bit during their
735 implementation, a planning program can be very helpful.
737 Start by adding the following to your @file{.emacs} (or @file{_emacs}):
739 @example
740 (load "planner")
741 @end example
743 Now, conceive your idea.  I can't believe there's nothing you want
744 from life.  More peace, time to enjoy the world, an end to war?
745 Everyone wants something.  Search deeply, and you will find
746 countless unhoped wishes lurking therein.  Choose one for now, and
747 think on it for a while.
749 Then open a file (using @kbd{C-x C-f}) within the directory named by
750 @code{planner-directory}.  Emacs will automatically recognize this file
751 as a planner file.  Name the file after your plan, such as
752 @file{BetterHealth}.
754 Choose an idea you really want to accomplish.  Struggle to
755 differentiate between the things you want because others want them,
756 and the things you want for yourself.  It takes quite an effort, and
757 may require a long time before you notice the difference.  Many people
758 want to be more healthy to be more attractive, which is an externally
759 driven goal.  Unless @emph{you} really want to accomplish what you
760 envision, the odds are you will fail.  Only our own wishes and dreams
761 possess enough personal energy to see themselves to fruition.  What
762 happens to many of us is simply that we never become conscious of
763 these dreams: what we love, what we desire most.  When I talk to
764 friends, so much of what I hear is things they want because they feel
765 they should want them.  There's just not enough energy there to pursue
766 a good plan, because nearly all of it is negative energy.
768 Do you know what you really want?  Don't worry, many people don't.
769 It's not a question anyone really wants us to pursue, because often
770 we don't want what others do; it doesn't contribute to the social
771 welfare, and all that nonsense.  Somehow we always forget that
772 what's good for the social welfare now, was someone else's crazy
773 dream a hundred years ago.  The human aversion to fundamental
774 change is always one's greatest enemy, so don't waste any time
775 getting bitter about it.
777 For the sake of argument I assume you really do want to be
778 healthier, because you've fallen in love with the ideal of purity,
779 or you understand the connection between your physical self and the
780 world around you, and how this can open up your spirit to desiring
781 more.  I assume.  :)
783 So you're in a Wiki file called @file{BetterHealth}.  Start typing.
784 Type anything related to your idea: what you think about it, your
785 ideas on it, @emph{and especially what the end will look like}.  If
786 you can't visualize the end, you can't plan, since planning is about
787 drawing a line between now and then.
789 When you've typed enough to gain a vision of your goal, start
790 drafting what the possible intermediate steps might be.  Then stop,
791 get up, walk around, enjoy life, and come back to it.  Taking a
792 long time at the beginning is not a bad idea at all, as long as
793 it's not forever.
795 As you chew on your idea, it will begin to become more and more
796 concrete.  You'll have ideas about the smallest pieces, and ideas
797 about the biggest pieces.  Keep going until it starts to take shape
798 before you, and you can see yourself in your mind's eye moving from
799 the present into the future.  Write down this progression, and the
800 sorts of things you might encounter along the way.
802 As you continue, you'll naturally discover discrete phases, or
803 ``milestones'' as managers love to call them.  These are very
804 important, because they let you know you're making progress.  I
805 recommend having a big party with friends every time you achieve a
806 milestone.  A typical plan might have between three and ten.
808 Between the milestones are the bigger pieces of your plan.  Name
809 these pieces using MixedCase words, and you'll notice that Emacs
810 colors and underlines them for you.  Like, FindGoodGym.  Hit return
811 on this highlighted word, and you'll find yourself in another,
812 blank file.  In this file, start drafting your sub-plan, just as
813 you did with the larger plan.  You should find it easier now, since
814 the scope is smaller.
816 As you break down further, you'll notice simple little things that
817 need to get done.  These are your tasks.  Every plan is a
818 succession of tasks.  The difference from reactivity is that each
819 task is part of the larger plan. This is what it means to be
820 systematic: that everything you do helps further your plan.  If you
821 have tasks in your day that contribute to no plan, they are
822 reactive.  Of course, life is full of these, but don't let them
823 take up more than 20% of your day.  If you allow yourself to be
824 dominated by reactive tasks, you'll regret it at the end of your
825 life.  I don't know this personally, but I do know that striving
826 for one's dreams -- and seeing them come to fruition -- is the
827 greatest joy a man can possess.  It is the essence of freedom, of
828 living, of creation.  Reactivity is the opposite of this, and
829 serves only to drain our energy and slacken our spirits.
831 Now that you've thought of a simple task, type @kbd{C-c C-t}. This
832 will ask for a brief description of the task, and when you plan to do
833 it. If you hit @key{RETURN} at the question @samp{When}, it assumes
834 you mean today. It will also pop up a three-month calendar at this
835 question, so you can see where your free days are. Make sure you set
836 the variable @code{mark-diary-entries-in-calendar} to @samp{t} in your
837 @file{.emacs} (or @file{_emacs}) file. This way, you can see which
838 days your appointments fall on. (Read about the Emacs Calendar and
839 Diary in @ref{Calendar/Diary, , , Emacs, GNU Emacs Manual}.)
841 @example
842 (setq mark-diary-entries-in-calendar t)
843 @end example
845 Once your task is in there, go back to your plan and keep
846 generating more tasks.  Generate them all!  Fully describe---as
847 tasks---everything necessary to bring your sub-plan to completion.
848 Don't create tasks for the other sub-plans.  You may have good idea
849 of what they'll look like, but don't bother rendering them into
850 tasks just yet.  Things will change too much between now and then,
851 for that to be a good use of your time.
853 Is your sub-plan now rendered into all of the tasks necessary to
854 reach your first milestone?  Great!  That is the purpose of
855 planner.el.  The rest is really up to you.  If you find that you
856 keep putting things off, and never do them, that's the surest sign
857 you're planning for someone else's dream, and not your own.
859 Here are some of the things planner.el can do, to help you manage
860 and track your tasks:
862 At the beginning of every day, type @kbd{M-x plan}.  This will jump
863 you to the top of the most recent task list before today.  If you
864 skipped a bunch of days, you'll have to open up those files on your
865 own.
867 Probably some of the tasks that day won't be finished -- that's OK.
868 Learning to properly estimate time is a magical, mystical art that few
869 have mastered.  Put your cursor on those undone tasks, and type
870 @kbd{C-c C-c}.  This will move them into today's task page.  You can
871 jump to today's task page at any time by typing @kbd{C-c C-n} (from a
872 Wiki or planning page).  I heartily recommend binding @kbd{C-c n}, to
873 jump you to this page from anywhere:
875 @example
876 (define-key mode-specific-map [?n] 'planner-goto-today)
877 @end example
879 As you look at your task sheet each day, the first thing to do is to
880 ``clock in'' to one of them.  This isn't necessary, and is only
881 helpful if you're around your computer a lot.  But by typing @kbd{C-c
882 C-i} (assuming you have my @file{timeclock.el} on your load-path), it
883 will log the time you spend working on your sub-plan (@pxref{Time
884 Intervals, , , Emacs, GNU Emacs Manual}).  This is helpful for viewing
885 your progress.  Type @kbd{C-c C-o} to clock out.
887 @kbd{C-M-p} and @kbd{C-M-n} will move a task up and down in priority.
888 Priority is represented by a letter A through C.  'A' tasks mean they
889 must be done that day, or else your plan is compromised and you will
890 have to replan.  'B' means they should be done that day, to further the
891 plan, otherwise things will be delayed.  'C' means you can put off the
892 task if you need to, although ultimately it will have to be done.
894 For reactive tasks, the letters mean something different: 'A' means
895 you must do it today, or somebody will roast your chestnuts over an
896 open fire.  'B' means you should do it today, or else someone will
897 be practicing patience at the day's end.  'C' means no one will
898 notice if you don't do it.
900 Again, reactive tasks are ENEMIES OF PLANNING.  Really, until you
901 see them that way, circumstances will push you around and steal
902 your life away.  We have only so many years to use, and everyone is
903 greedy to take them.  It's insidious, almost invisible.  A healthy
904 dislike of reactivity will do wonders for organizing your affairs
905 according to their true priority.
907 The last word that needs to be said concerns ``roles''.  Every person
908 stands in several positions in his life: husband, employee, manager,
909 etc.  These roles will tend to generate tasks not associated with any
910 immediate plan, but necessary to maintain the health and functioning
911 of the role.  My suggestion is to keep this the smallest possible
912 number, and fulfill those that remain well.  How you decide to
913 apportion your time between pursuing grand designs, and fostering deep
914 relationships, is a personal matter.  If you choose well, each will
915 feed the other.
917 I mention this to point that reactivity is something not
918 exclusively associated with tasks that have no master plan, because
919 being a father, for example, is something that rarely proceeds
920 according to orderly plans.  But the role of father itself is its
921 own plan, whose goal is ``to be the best one can'', and whose
922 component tasks are spending time on whatever comes up.  It is, in
923 a sense, an implicit plan.  But reactive tasks follow no plan at
924 all; they are parasites of time that suck the spirit away, whereas
925 properly chose roles actually help fulfill one's own inner needs.
926 At least, this is what I believe.
928 @defun plan force-days
929 Start your planning for the day, beginning with the last day's tasks.
931 If @code{planner-carry-tasks-forward} is non-nil, find the most recent
932 daily page with unfinished tasks and reschedule those tasks to
933 the current day.  If @var{force} is non-nil, examine all past daily
934 pages for unfinished tasks.
936 If @code{planner-carry-tasks-forward} is nil, visit the most recent
937 daily page.  If a daily page for today exists, visit that instead.
939 If @var{force-days} is a positive integer, scan that number of days.
940 If @var{force-days} is @samp{t}, scan all days.
942 @end defun
944 @node Why Use Planner,  , Planning based on the Franklin-Covey Approach, Overview
945 @comment  node-name,  next,  previous,  up
946 @section Why Use Planner?
947 @cindex Planner, why use
949 You can skip this essay if you just want to get started, or read it
950 for some insights into why the previous maintainer is crazy about it.
952 Why I Use Planner, by Sacha Chua
954 I thought about why I liked Planner. Planner as a TODO manager
955 isn't particularly special. Although I can assign tasks to categories
956 and see a breakdown of what projects are taking up my time, Evolution
957 and Microsoft Outlook provide more powerful task support. In other
958 task managers, you can e-mail tasks, assign multiple categories and
959 fill in all sorts of metadata. You can even synchronize your tasks
960 with devices like a phone or PDA. So why use Planner?
962 I realized that integration into my way of life and automatic context
963 clues are what really make planner tasks worth it for me. I don't have
964 to switch to another application to create a task. I can just hit a
965 keyboard shortcut. Planner uses a minibuffer to get the task
966 description. My windows are not rearranged in any way, and I can look
967 at the data that's relevant to a task. Not only that, tasks
968 automatically pick up context clues, like whom I'm talking to on IRC
969 or the file I'm editing at the moment. This cuts down on the explicit
970 context I need to include and makes it easier for me to bring up the
971 task again.
973 As a scheduler, Planner is also not particularly distinguished.
974 Sure, it can display my @file{~/diary}, but for that matter so can
975 @kbd{M-x diary}. Evolution and Outlook can give me a more graphical
976 view of my time, sync with my PDA, and coordinate my schedule with
977 other people. Those applications support detailed schedule entries
978 with powerful cyclic options. On the other hand, Planner gives me
979 a personal, plain text view and (at least the way I use it) requires
980 me to edit a separate file to add new appointments. (I've defined a
981 few shortcut keys to deal with this.) However, it does have one
982 advantage---my schedule is always loaded. I used to use Outlook on
983 Windows, but having my schedule in a separate application meant that I
984 actually looked at it very rarely, as I had turned off reminders
985 because they got annoying.
987 Planner's notes, however, are what really convinced me. I can hit
988 a keyboard shortcut from anywhere and type my notes into a buffer
989 which automatically keeps context information. After typing the note,
990 I can then categorize it. I think that the critical thing here is that
991 interruptions---fleeting thoughts---don't break my flow. I can just
992 pop up a remember buffer, stow that thought away somewhere, and go
993 back to it whenever I want. In contrast, creating a note in Outlook
994 means switching out of my application, making a couple of keystrokes,
995 typing the note in, and then switching back. The context switches make
996 it hard to keep track of where I am and what I'm supposed to remember.
997 Not only that, I need to enter context by hand. Even though I can
998 color my notes and reorganize them in Outlook, I find the context
999 switch too expensive. I used to keep notes in other knowledge
1000 management tools as well. Some applications allowed me to
1001 drag-and-drop links into the current note, and that was cool. But that
1002 required a manual action, and those applications didn't feel
1003 integrated into my way of working. (Note: You'll need remember.el for
1004 this.)
1006 I guess that's why I like Planner. Unlike other organizers which
1007 don't know anything about the applications I use, Planner tries
1008 its best to integrate into the way I work, and it's easy to extend.
1009 Fortunately I do almost all my work in Emacs, so I can think of my
1010 organizer as integrated into my e-mail client, Internet Relay Chat
1011 client, web browser, file editor and even games. It automatically
1012 picks up context clues from these applications and allows me to easily
1013 jump back to relevant files. It doesn't distract me. It allows me to
1014 key in data and then it gets out of my way.
1016 (That said, it's perfectly okay to use Planner even if you don't live
1017 in Emacs.)
1019 The processing that happens in the background is a bonus, and
1020 publishing my task list and notes online has greatly helped me. It
1021 gives other people a way to see what I'm working on and what I've
1022 planned for the future. Occasionally people write in with additional
1023 resources and helpful tips. (Again, this is purely optional. Many
1024 people don't publish their planner pages. Other people use really
1025 fine-grained access control.)
1027 I think the greatest feature of Planner, though, is its user
1028 community. Because Planner can be easily modified, we can experiment
1029 with a lot of new ideas quickly, and we can tailor Planner to fit our
1030 needs. I love checking my @samp{emacs-wiki-discuss} mail and finding
1031 out how people have tweaked Planner or would like to tweak Planner,
1032 and I've learned a lot by exchanging reflections on organizing one's
1033 life.
1035 I really wasn't an organization freak before I started using Planner.
1036 I often forgot to do my homework or answer important mail. I still
1037 procrastinate now, but at least it's all being kept track of
1038 somewhere! I also really like how Planner lets me to gradually improve
1039 how I'm doing things, and I feel I've come a long way.
1041 Please try it out! We'd love to hear how Planner can become
1042 @emph{your} personal information manager.
1044 @node Getting Started, More about Planner, Overview, Top
1045 @comment  node-name,  next,  previous,  up
1046 @chapter Getting Started
1048 At the end of this tutorial, you will be able to use Planner and
1049 related modules to keep track of your tasks, schedules and notes, all
1050 within the convenience of Emacs.
1052 There are two kinds of pages in a Planner wiki. Day pages show tasks,
1053 schedule, and notes for the day, while plan pages organize related tasks
1054 and notes into a single page.
1056 If you have not yet added planner to your @file{~/.emacs}, add the
1057 following lines:
1059 @example
1060 (add-to-list 'load-path "/path/to/muse/lisp")
1061 (add-to-list 'load-path "/path/to/planner")
1062 (add-to-list 'load-path "/path/to/remember")
1063 (require 'planner)
1064 @end example
1066 This will bring up the most recent day page with unfinished tasks or
1067 create a new day page if necessary. By default, planner pages are
1068 stored in @samp{~/Plans} (@code{planner-directory}).
1070 @menu
1071 * Tasks::                       
1072 * Schedule::                    
1073 * Notes::                       
1074 * Hyperlinks::                  
1075 * Example Page::                
1076 * Review::                      
1077 @end menu
1079 @node Tasks, Schedule, Getting Started, Getting Started
1080 @section Tasks
1082 Let us start by creating a task labelled
1084 @example
1085 Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss
1086 @end example
1088 From anywhere (even this info buffer!), call @kbd{M-x
1089 planner-create-task-from-buffer} to create a new task. Fill in the
1090 description and choose a date by:
1092 @itemize
1093 @item typing 1 - 31 to put the task on that day of the month,
1094 @item accepting the default (today) by pressing RET,
1095 @item selecting the date with mouse-1,
1096 @item
1097 typing +n (where in is an integer) to schedule the task in n days time,
1099 @item typing nil to make an undated task.
1100 @end itemize
1102 For now, accept the default (@samp{today}) by pressing @key{RET}.
1104 You will then be prompted for a plan page. Plan pages gather related
1105 tasks and notes, giving you an overview of what you've done so far.
1106 You can accept the default TaskPool, create your own plan page, or
1107 specify nil to make a task that is not associated with a plan page.
1108 For now, accept the default (@samp{TaskPool}) by pressing RET.
1110 You have created your first task. View today's page with
1111 @kbd{M-x planner-goto-today}. You will see a line of the form
1113 @example
1114 #B  _ Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss (TaskPool)
1115 @end example
1117 If you created the task from this page, then there will be an additional
1118 annotation:
1120 @example
1121 #B  _ Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss : Tasks (TaskPool)
1122 @end example
1124 The URL, @samp{TaskPool} and @samp{Getting Started} are
1125 hyperlinks. You can use TAB and S-TAB to navigate between them and RET
1126 to follow the link.
1128 Create more tasks using @kbd{M-x planner-create-task-from-buffer}.
1129 This is bound to @kbd{C-c C-t} in @code{planner-mode} pages
1130 for your convenience. For example, create the following tasks:
1132 @itemize
1133 @item
1134 @samp{Describe my current way of working and how I would like to work},
1135 for three days from now (@samp{+3}),
1136 @item
1137 @samp{Learn how to schedule a task}, an undated task (@kbd{nil}) on the
1138 TaskPool page,
1139 @item
1140 @samp{Browse through the Planner info manual} for today (@kbd{.} or
1141 accept the defaults), and
1142 @item
1143 @samp{Add (plan) to the end of my [[~/.emacs]]} for today, but without a
1144 plan page (specify @kbd{nil} at the plan page prompt)
1145 @end itemize
1147 Tip: I bind planner-create-task-from-buffer to "F9 t" so that I can
1148 easily call it from anywhere. You can do that with this elisp fragment:
1149 @code{(global-set-key (kbd "<f9> t") 'planner-create-task-from-buffer)}
1151 Next, visit the TaskPool by:
1153 @itemize
1154 @item
1155 @key{TAB}-bing or using the cursor and typing @key{RET} to follow the
1156 link,
1157 @item @kbd{C-x C-f TaskPool RET} to use @code{find-file}, or
1158 @item @kbd{C-c C-f TaskPool RET} to use @code{muse-project-find-file}
1159 @end itemize
1161 You can see an overview of the tasks as scheduled on different days.
1162 Unlike many personal information managers that store all of your data
1163 in one file and then perform magic in order to present different
1164 views, Planner uses plain text files. The data is duplicated and kept
1165 updated by functions. This makes it simpler and easier to modify,
1166 because what you see is (almost) what you get. On the other hand,
1167 you'll need to get used to either editing both files, or using the
1168 built-in functions for editing and updating files. If you prefer not
1169 to work with linked tasks, you can configure Planner to use only plan
1170 pages or use only day pages.
1172 The TaskPool page should list the tasks you created earlier. Go to the
1173 one named Learn how to schedule a task . Type @kbd{C-c C-c}
1174 (@code{planner-copy-or-move-task}) to schedule the task. Type RET to
1175 accept the default (today). Go to the day page by following the link
1176 or calling @kbd{M-x planner-goto} (@kbd{C-c C-j C-d} or the menu bar);
1177 you will see the newly-created task there. You can also use @kbd{C-c
1178 C-c} (@kbd{planner-copy-or-move-task}) to reschedule a task to an
1179 earlier or later date.
1181 Well, that task is done. To mark the task as completed, type @kbd{C-c
1182 C-x} (@code{planner-task-done}). You can also edit the status manually
1183 (change _ to X) as long as you remember to call @kbd{M-x
1184 planner-update-task} to update the link page as well. Updating relies on
1185 the task description being the same, so do not edit this manually.
1187 Quick summary of commands:
1189 @itemize
1190 @item
1191 Go to today's page: @kbd{M-x plan} to carry unfinished tasks forward, or
1192 @kbd{M-x planner-goto-today} to just go to today's page.
1193 @item
1194 Create a task: @kbd{C-c C-t} (@code{planner-create-task-from-buffer}),
1195 or type a task manually (call M-x planner-update-task if the task is
1196 linked)
1197 @item
1198 Mark a task as done: @kbd{C-c C-x} (@code{planner-task-done}), or edit
1199 the task and call @kbd{M-x planner-update-task}
1200 @item Edit a task description: @kbd{M-x planner-edit-task-description}
1201 @item Reschedule a task: @kbd{C-c C-c} (@code{planner-copy-or-move-task})
1202 @item
1203 Reschedule many tasks: Mark a region and use @kbd{M-x
1204 planner-copy-or-move-region}
1205 @item
1206 Change the plan of a task: @kbd{M-x planner-replan-task}, or @kbd{C-c
1207 C-c} (@code{planner-copy-or-move-task}) with a plan page
1208 @item Delete a task: @kbd{M-x planner-delete-task}
1209 @item
1210 Reorder tasks: @key{M-p} (@code{planner-raise-task}) and @key{M-n}
1211 (@code{planner-lower-task}), or normal editing commands like kill and
1212 yank
1213 @item Change task priorities (@samp{#A} > @samp{#B} > @samp{#C}):
1214       @key{C-M-p} (@code{planner-raise-task-priority}) and
1215       @key{C-M-n} (@code{planner-lower-task-priority}),
1216       or edit the task and call @kbd{M-x planner-update-task}.
1217 @end itemize
1219 You can save your tasks with @kbd{C-x C-s} the same way you save any
1220 other file, or Emacs will prompt you to save it when you exit.
1222 @node Schedule, Notes, Tasks, Getting Started
1223 @comment  node-name,  next,  previous,  up
1224 @section Schedule
1226 This is free-form. You can put anything you want into this, or remove
1227 it from @code{planner-day-page-template} entirely. Some people use it
1228 to keep track of their plans for the day with tables like this:
1230 @example
1231 hh:mm | hh:mm | activity
1232 hh:mm | hh:mm | activity
1233 hh:mm | hh:mm | activity
1234 @end example
1236 Remember, Planner files are just plain text. You can add new sections
1237 or remove old ones, or use the suggested sections for entirely
1238 different activities.
1240 @node Notes, Hyperlinks, Schedule, Getting Started
1241 @comment  node-name,  next,  previous,  up
1242 @section Notes
1244 You can put anything you want in this section, or remove it from your
1245 @code{planner-day-page-template} entirely.
1247 You may be interested in @file{remember-planner.el}, part of the
1248 Remember package. @code{remember-planner.el} makes it easy to create
1249 notes from anywhere in Emacs, and it uses the same hyperlink-sensing
1250 code that Planner uses. Notes added by remember-planner.el look like
1251 this:
1253 @example
1254 .#1 Headline 00:00
1255 Body
1256 @end example
1258 and are outlined at the H2 level in published HTML.
1260 If you include the following in your @file{~/.emacs}:
1262 @example
1263 (require 'remember-planner)
1264 (setq remember-handler-functions '(remember-planner-append))
1265 (setq remember-annotation-functions planner-annotation-functions)
1266 @end example
1268 you can easily create context-aware notes. @kbd{M-x remember} will
1269 create a dedicated buffer for you to fill in your note. If Planner
1270 recognizes the buffer as one with context then it will include a
1271 hyperlink at the bottom. The first line is used as a title, so make it
1272 short and meaningful. The rest of the text will be used as the body of
1273 the note. Try it now by creating a note, perhaps about things you'd
1274 like to remember from this tutorial.
1276 Typing @kbd{C-c C-c} after composing will prompt for a plan page to
1277 put this on, with auto-completion. By default, notes will go on
1278 today's page only. If you specify a plan page, the note will go on
1279 today's page and on the plan page. Let's try specifying
1280 @samp{TaskPool} for the note.
1282 If you look at today's page, you'll find a timestamped note that links
1283 to @samp{TaskPool}. Likewise, @samp{TaskPool} contains a note that
1284 links to today's page. Because the text is copied, changes in one will
1285 not be automatically reflected in the other. To update the linked page
1286 after editing a note, use @kbd{M-x planner-update-note}. To change the
1287 plan page of a note, use @kbd{planner-replan-note}.
1289 @node Hyperlinks, Example Page, Notes, Getting Started
1290 @section Hyperlinks
1291 @cindex hyperlinks
1293 Planner automatically creates context-sensitive hyperlinks for your
1294 tasks and notes when you use @code{planner-create-task-from-buffer}
1295 and @code{remember}.
1297 Blue links indicate URLs and Planner pages that already exist. Red links
1298 indicate Planner pages that have not yet been created.
1300 Middle-click or type @key{RET} on any link to view the link in the
1301 current window. Shift-middle-click or type @key{S-RET} to view the
1302 link in another window. @key{TAB} goes to the next link, while
1303 @key{S-TAB} goes to the previous one.
1305 You can pick up hyperlinks using the @code{planner-annotation-as-kill}
1306 function.
1308 @defun planner-annotation-as-kill
1309 Create a context-sensitive hyperlink for the current buffer and copy
1310 it to the kill ring. When called with a prefix argument, prompt for
1311 the link display name.
1312 @end defun
1314 You can then paste it into any Planner buffer by using @kbd{M-x yank}
1315 or the keyboard shortcut.
1317 Hyperlinks are a powerful feature of Planner. You can use them to
1318 hyperlink to mail, news, Web pages, and even IRC connections. See the
1319 section on @ref{Managing Your Information} to find out how to enable
1320 support for various parts of Emacs. Want to add a new hyperlink
1321 scheme? Check out the source code for examples or ask on the mailing
1322 list for help.
1324 @node Example Page, Review, Hyperlinks, Getting Started
1325 @comment  node-name,  next,  previous,  up
1326 @section Example Page
1327 @cindex example page
1328 @cindex planning page, example
1330 An example planner file is given below. You'll notice that Planner
1331 does not have a well-defined user interface. Rather, it's free-form
1332 and open, allowing you to adapt it to your preferences.
1334 @example
1335 ----------------------------------------------------------------------
1336 * Tasks
1338 #B  _ Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss (TaskPool)
1339 #B  _ Browse through the Planner info manual (TaskPool)
1340 #B  _ Add (plan) to the end of my ~/.emacs
1341 #B  X Learn how to schedule a task (TaskPool)
1343 * Schedule
1345 18:00 | 19:00 | Learn how to use Planner
1347 * Notes
1349 Notes are free-form. You can put anything you want into this.
1351 .#1 This is note number one
1353 Notes on note number one!
1355 .#2 This weird ".#2" syntax is used for allout.el enumerated lists
1357 It makes using allout-mode very handy.
1359 @end example
1361 @node Review,  , Example Page, Getting Started
1362 @comment  node-name,  next,  previous,  up
1363 @section Review
1365 @itemize
1367 @item @emph{Ideas for using planner more effectively:}
1369 @itemize
1370 @item
1371 Add @code{(plan)} to the end of your @file{~/.emacs} so that you are
1372 reminded about your tasks every day.
1374 @item
1375 Bind useful functions to shortcut keys and get used to creating tasks
1376 and notes from anywhere.
1378 @item
1379 Think about how you plan your day and look for ways to improve it. Ask
1380 the mailing list (@pxref{Getting Help}) for tips.
1382 @item
1383 Browse the rest of this manual, the source code, and other resources on
1384 the Net for tidbits you can use.
1386 @item Have fun!
1387 @end itemize
1389 @item @emph{Useful functions outside planner buffers:}
1391 @itemize
1392 @item @code{planner-create-task-from-buffer}
1393 @item @code{remember}
1394 @item @code{planner-goto-today}
1395 @item @code{planner-goto}
1396 @item @code{plan}
1397 @end itemize
1399 @item @emph{Useful functions inside planner buffers:}
1401 @itemize
1402 @item @kbd{C-c C-t} (@code{planner-create-task-from-buffer})
1403 @item @kbd{C-c C-x} (@code{planner-task-done})
1404 @item @kbd{M-x planner-edit-task-description}
1406 @item
1407 @kbd{C-c C-c} (@code{planner-copy-or-move-task}), @kbd{M-x
1408 planner-copy-or-move-region}
1410 @item @kbd{M-x planner-replan-task}
1411 @item @kbd{M-x planner-delete-task}
1413 @item
1414 @key{M-p} (@code{planner-raise-task}) and @key{M-n}
1415 (@code{planner-lower-task})
1417 @item @key{C-M-p} (@code{planner-raise-task-priority}) and
1418       @key{C-M-n} (@code{planner-lower-task-priority}),
1419 @item @code{planner-replan-note}
1420 @item @code{planner-update-note}
1421 @end itemize
1423 @end itemize
1425 That's all you need to know in order to use Planner as a basic TODO and
1426 notes manager, but there's a whole lot more. Read through this manual
1427 and our mailing list archives (@pxref{Getting Help}) for lots of
1428 wonderful ideas about planning in Emacs!
1430 @node More about Planner, Managing Your Information, Getting Started, Top
1431 @comment  node-name,  next,  previous,  up
1432 @chapter More about Planner
1434 @menu
1435 * Navigation::                  
1436 * More about Tasks::            
1437 * More about Notes::            
1438 * Making Files Pretty::         
1439 * Annotations::                 
1440 * Interactive Lisp::            
1441 * Publishing::                  
1442 * Experimental Functions::      
1443 @end menu
1445 @node Navigation, More about Tasks, More about Planner, More about Planner
1446 @comment  node-name,  next,  previous,  up
1447 @section Starting with Day Pages
1449 @command{planner-goto-today} opens today's page.  Day pages are named
1450 @samp{YYYY.MM.DD} and contain your notes for the day.
1452 You should see a file that looks like this:
1454 @example
1455 * Tasks
1458 * Schedule
1460 * Notes
1461 @end example
1463 You can type anything you want into this file.  You can add or delete
1464 sections.  When you save, Emacs stores your information in
1465 @code{planner-directory}.
1467 Use the following commands to navigate through day pages:
1469 @defun plan
1470 Start planning the day.  If @code{planner-carry-tasks-forward} is
1471 non-nil, copy the most recent unfinished tasks to today's page, else
1472 open the most recent page.
1473 @end defun
1475 @defun planner-goto (@kbd{C-c C-j C-d})
1476 Prompt for a date using a calendar pop-up and display the
1477 corresponding day page.  You can specify dates partially.  The current
1478 year and month are used if omitted from the input.  For example, if
1479 today is 2004.05.05, then
1481 @itemize
1482 @item @kbd{+1} is one day from now, or @samp{2004.05.06}
1483 @item @kbd{-1} is one day before now, or @samp{2004.05.04}
1484 @item @kbd{12} is equivalent to @samp{2004.05.12}
1485 @item @kbd{8.12} is equivalent to @samp{2004.08.12}
1486 @item @kbd{2005.08.12} is a full date specification
1487 @end itemize
1489 In the calendar buffer, you can also left-click or press @key{RET} on
1490 a date to select it.
1491 @end defun
1493 @defun planner-goto-today (@kbd{C-c C-j C-j})
1494 Display today's page. Create the page if it does not yet exist.
1495 @end defun
1497 @defun planner-goto-tomorrow (@kbd{C-c C-j C-t})
1498 Goto the planner page days @var{after} the currently displayed date.
1499 If @var{days} is nil, go to the day immediately after the currently
1500 displayed date.  If the current buffer is not a daily planner page,
1501 calculate date based on today.
1502 @end defun
1504 @defun planner-goto-yesterday (@kbd{C-c C-j C-y})
1505 Goto the planner page @var{days} before the currently displayed date.
1506 If @var{days} is nil, go to the day immediately before the currently
1507 displayed date.  If the current buffer is not a daily planner page,
1508 calculate date based on today.
1509 @end defun
1511 @defun planner-goto-most-recent
1512 Go to the most recent day with planning info.
1513 @end defun
1515 @defun planner-goto-previous-daily-page
1516 Goto the last plan page before the current date.
1517 The current date is taken from the day page in the current
1518 buffer, or today if the current buffer is not a planner page.
1519 Do not create pages if they do not yet exist.
1520 @end defun
1522 @defun planner-goto-next-daily-page
1523 Goto the first plan page after the current date.
1524 The current date is taken from the day page in the current
1525 buffer, or today if the current buffer is not a planner page.
1526 Do not create pages if they do not yet exist.
1527 @end defun
1529 @defun planner-goto-plan-page page
1530 Opens @var{page} in the the @code{planner-project} Wiki.  Use
1531 @code{planner-goto} if you want fancy calendar completion.
1532 @end defun
1534 @defun planner-show date
1535 Show the plan page for @var{date} in another window, but don't select
1536 it.  If no page for @var{date} exists, return nil.
1537 @end defun
1540 @node More about Tasks, More about Notes, Navigation, More about Planner
1541 @comment  node-name,  next,  previous,  up
1542 @section More about Tasks
1543 @cindex tasks, more about
1545 This section is divided into three parts. In the first part, you can
1546 read about all the options, strategies and commands to help you
1547 efficiently add new tasks to your planner. In the second part, we'll go
1548 over all of the aspects of Planner that relate to organizing, editing,
1549 rescheduling and viewing the tasks you've already created. Finally,
1550 we'll cover some ways to step back and look at various reports and
1551 overviews that can be generated from your planner pages.
1553 You may also be interested in tracking time spent on tasks with
1554 @ref{Timeclock} and estimating project completion time with
1555 @ref{Schedule} (also see @pxref{schedule.el}).
1557 @menu
1558 * Creating New Tasks::          
1559 * Organizing Your Tasks::       
1560 * Task Reports and Overviews::  
1561 @end menu
1563 @node Creating New Tasks, Organizing Your Tasks, More about Tasks, More about Tasks
1564 @comment  node-name,  next,  previous,  up
1565 @subsection Creating New Tasks
1566 @cindex tasks, creating
1568 Planner makes it very easy to quickly add something to your list of
1569 tasks. Once you get used to the basics of
1570 @command{planner-create-task-from-buffer}, you might want to take a
1571 closer look at some things in Planner that can help you create new tasks
1572 in a way that fits with your system.
1574 @menu
1575 * Creating a Task::             
1576 * Task Priorities::             
1577 * Task IDs::                    
1578 * Cyclic Tasks::                
1579 * Task Detail::                 
1580 * Deadlines::                   
1581 @end menu
1583 @node Creating a Task, Task Priorities, Creating New Tasks, Creating New Tasks
1584 @comment  node-name,  next,  previous,  up
1585 @subsubsection Creating a Task
1586 @cindex tasks, creating
1588 You can create a task from any buffer in Emacs by invoking
1589 @command{M-x planner-create-task-from-buffer}.
1591 This command does more than just add an item to your list of tasks. It
1592 also connects that item to some useful context information.
1594 If you create a task while viewing any buffer other than a Planner
1595 day page, Planner will associate the task with a hyperlink to that
1596 buffer. Try it now by creating a task from this Info buffer.
1598 @enumerate
1599 @item @kbd{M-x planner-create-task-from-buffer}
1600 @item
1601 When prompted for the task name, enter @kbd{Learn how to change a task's
1602 status} and press @key{RET}.
1604 @item
1605 When prompted for the date, press @key{RET} to schedule the task for
1606 today.
1608 @item
1609 When prompted for the project page, press @key{RET} to accept the
1610 default page of @samp{TaskPool}. This is a page for tasks not connected
1611 to a larger plan.
1613 @end enumerate
1615 Planner prompts you for two pieces of information when you ask it
1616 to create a task. First, it asks you when you would like to have the
1617 task show up in your planner. If you would like it to be scheduled for
1618 today, you can just hit @key{RET}. If you would like it to be
1619 scheduled for some day during the current month, you can just enter
1620 the date, without the month, like @samp{16}. If you would like it to
1621 be scheduled for some day in a future month of the current year, you
1622 can enter just the month and date, like @samp{06.16}. If you would
1623 like to schedule something for next year, then enter the full date,
1624 like @samp{06.16.2005}. If you do not want this task to appear on a
1625 day page at all, you can enter @samp{nil}.
1627 The second piece of information Planner asks for is the name of
1628 the project to associate the task with. In the above example, you
1629 associated the task with the project ``TaskPool'', which means that
1630 you did not want to associate the task with a particular project or
1631 goal in your life. Another way to do this is to answer the project
1632 prompt by entering @samp{nil}. But instead, you might enter
1633 @samp{LearnPlanner} as the project. This creates a new page called
1634 ``LearnPlanner'' in your planner directory and places an entry for the
1635 task on that page.
1637 The task then exists in two places: once on your day page, to show how
1638 it fits into your daily work; and once on a project page, to show how
1639 it fits into your larger projects and goals. In the future you might
1640 add related tasks like, ``Memorize Planner keybindings''. These
1641 tasks might be scattered over weeks or months worth of day pages, but
1642 as long as you enter the same project name for each, you will have a
1643 way to look at them all together on a single project page.
1645 Planner also creates hyperlinks to enable you to easily move back
1646 and forth between the day page system and the project page
1647 system. Each task on a day page will have a hyperlink to its project
1648 page. Each task on a project page will have a hyperlink to its day
1649 page.
1651 After using Planner for a while, you may find yourself with quite
1652 a few project pages. Keep in mind that completion is enabled at the
1653 project prompt when you create a task, so hitting @kbd{SPC} or
1654 @kbd{TAB} at the prompt will show you a list of your current project
1655 pages.
1657 Once the task is created, you are returned to the buffer you were
1658 working in again, Planner gets out of your way, and you can go on
1659 about your business. Later on, when you decide to actually work on
1660 that ``Memorize Planner keybindings'' task, you will be able to
1661 follow the hyperlink from that task on your day or project page
1662 directly to the relevant node in the Planner info file!
1664 By default, @command{M-x planner-create-task-from-buffer} creates
1665 medium-priority tasks, marked with the letter @samp{B}.  But you can
1666 specify a particular priority or change the default (@pxref{Task
1667 Priorities}).
1669 You don't have to use @command{planner-create-task-from-buffer} to
1670 create tasks. You can also create new tasks manually by typing them
1671 directly on your day or project page in the format Planner expects. You
1672 can even still create hyperlinks by using Muse formatting as you
1673 manually type the new task. Keep in mind also that tasks do not have to
1674 be linked to any other page.
1676 For convenience, @command{planner-create-task-from-buffer} is bound to
1677 @kbd{C-c C-t} in Planner buffers.  You can bind
1678 @command{planner-create-task-buffer} to a shortcut key.  See the
1679 manual for your Emacs distribution to find out more about keybinding.
1681 @defun planner-create-task-from-buffer title date plan-page
1682 Create a new task named @var{title} on @var{date} based on the current
1683 buffer.
1685 With a prefix, associate the task with the current planner page.  If
1686 you create a task on a date page, you will be prompted for a plan
1687 page.  If you create a task on a plan page, you will be prompted for a
1688 day page.  If nil is specified, the task is created only on the
1689 current page.
1691 See @code{planner-create-task} for more information.
1693 The new task is created at the top or bottom of the first block of
1694 tasks on the scheduled day page (if any), depending on the value of
1695 @code{planner-add-task-at-end-flag}.
1696 @end defun
1698 @defun planner-create-task title date annotation plan-page
1699 Create a new task named @var{title} based on the current Wiki page.
1700 If @var{date} is non-nil, makes a daily entry on @var{date}, else
1701 makes an entry in today's planner page. It's assumed that the current
1702 Wiki page is the page you're using to plan an activity. Any time
1703 accrued to this task will be applied to that page's name in the
1704 timelog file, assuming you use timeclock (@pxref{Time Intervals, , ,
1705 Emacs, GNU Emacs Manual}). If @var{annotation} is non-nil, it will be
1706 used for the page annotation. If @var{plan-page} is non-nil, the task
1707 is associated with the given page.
1709 With a prefix, associate the task with the current planner page.  If
1710 you create a task on a date page, you will be prompted for a plan
1711 page.  If you create a task on a plan page, you will be prompted for a
1712 day page.  If nil is specified, the task is created only on the
1713 current page.
1715 You probably want to call @code{planner-create-task-from-buffer}
1716 instead.
1718 The new task is created at the top or bottom of the first block of
1719 tasks on the scheduled day page (if any), depending on the value of
1720 @code{planner-add-task-at-end-flag}.
1721 @end defun
1723 @node Task Priorities, Task IDs, Creating a Task, Creating New Tasks
1724 @comment  node-name,  next,  previous,  up
1725 @subsubsection Task Priorities
1727 You can set the priority of a task when you create it, rather than
1728 waiting to adjust it after the fact. In order to do this, call the
1729 function corresponding to the priority you want. You probably want to
1730 bind these functions to some keys if you intend to use them much.
1732 @itemize
1733 @item @code{planner-create-high-priority-task-from-buffer}
1734 creates a task with priority @samp{A}.
1736 @item @code{planner-create-medium-priority-task-from-buffer}
1737 creates a task with priority @samp{B}.
1739 @item @code{planner-create-low-priority-task-from-buffer}
1740 creates a task with priority @samp{C}.
1741 @end itemize
1743 Or, you can change the default priority of
1744 @command{planner-create-task-from-buffer} by customizing
1745 @var{planner-default-task-priority}.
1747 You can actually use just one general priority, but using more than
1748 one color-codes your tasks and gives you a better overview of your
1749 day.
1752 @node Task IDs, Cyclic Tasks, Task Priorities, Creating New Tasks
1753 @comment  node-name,  next,  previous,  up
1754 @subsubsection Task IDs
1755 @cindex @file{planner-id.el}, using
1756 @cindex tasks, IDs
1758 After loading @file{planner.el}, make sure that @file{planner-id.el} is
1759 in your load path and add this to your @file{.emacs} (or @file{_emacs}):
1761 @example
1762 (require 'planner-id)
1763 @end example
1765 This module modifies the behavior of @file{planner.el}, adding global
1766 task IDs so that tasks can be edited and updated. Planner IDs are of
1767 the form @samp{@{@{Identifier:Number@}@}}.
1769 @subheading Options
1771 @defopt planner-id-add-task-id-flag
1772 Non-nil means automatically add global task IDs to newly-created
1773 tasks. If nil, use @command{planner-id-add-task-id} to add IDs to
1774 existing tasks, or @command{planner-id-add-task-id-to-all} to add to
1775 all tasks on the current page.
1776 @end defopt
1778 @defopt planner-id-update-automatically
1779 Non-nil means automatically update linked tasks whenever a page is
1780 saved. If nil, use @command{planner-update-task} to update the linked
1781 task. By default, linked tasks are automatically updated.
1782 @end defopt
1784 @defopt planner-id-tracking-file
1785 File that contains ID tracking data. This file is automatically
1786 overwritten.
1787 @end defopt
1789 @subheading Functions
1791 The following interactive functions are defined in @file{planner-id.el}:
1793 @defun planner-id-jump-to-linked-task &optional info
1794 Display the linked task page. If @var{info} is specified, follow that
1795 task instead.
1796 @end defun
1798 @defun planner-id-add-task
1799 Add a task ID for the current task if it does not have one
1800 yet. Update the linked task page, if any.
1801 @end defun
1803 @defun planner-id-update-tasks-on-page &optional force
1804 Update all tasks on this page. Completed or cancelled tasks are not
1805 updated. This can be added to @code{write-file-functions}. If
1806 @var{force} is non-nil, completed and cancelled tasks are also
1807 updated.
1808 @end defun
1810 @defun planner-id-add-task-id-to-all
1811 Add a task ID for all the tasks on the page. Update the linked page,
1812 if any.
1813 @end defun
1815 @defun planner-id-search-id id
1816 Search for all occurrences of @var{id}.
1817 @end defun
1819 @defun planner-id-follow-id-at-point
1820 Display a list of all pages containing the ID at point.
1821 @end defun
1823 @defun planner-id-follow-id-at-mouse event
1824 Display a list of all pages containing the ID at mouse. @var{event} is
1825 the mouse event.
1826 @end defun
1828 @node Cyclic Tasks, Task Detail, Task IDs, Creating New Tasks
1829 @comment  node-name,  next,  previous,  up
1830 @subsubsection Cyclic Tasks
1831 @cindex @file{planner-cyclic.el}, using
1832 @cindex tasks, cyclic
1833 @cindex cyclic tasks
1834 @cindex recurring tasks
1836 If there are tasks that you have to do regularly, you can have Planner
1837 schedule those tasks automatically.
1839 Make sure that @file{planner-cyclic.el} is in your load path and add
1840 this to your @file{.emacs} (or @file{_emacs}):
1842 @example
1843 (require 'planner-cyclic)
1844 @end example
1846 Create a diary file named @file{~/.diary.cyclic-tasks}
1847 (or the value of @code{planner-cyclic-diary-file}). Here is an example:
1849 @example
1850 Tuesday #B0 _ Study Japanese
1851 Friday #B0 _ Study Japanese (JapaneseStudies)
1852 @end example
1854 The first will be a plain task, the second will be linked.  The first
1855 line will automatically create its task every Tuesday, while the
1856 second will create it every Friday.
1858 You can schedule tasks in a variety of ways. This module uses the same
1859 syntax for specifying when tasks will be scheduled as the Emacs diary
1860 uses for appointments and events. See @ref{Date Formats, the GNU Emacs
1861 Manual, Date Formats,emacs, the GNU Emacs Manual}, and @ref{Sexp Diary
1862 Entries, the GNU Emacs Lisp Reference Manual, Sexp Diary
1863 Entries,elisp, the GNU Emacs Lisp Reference Manual}, for a full
1864 description of the possibilities.
1866 By default, planner-cyclic creates multiple tasks if you let tasks build
1867 up (that is, the next Tuesday rolls around and you @emph{still} haven't
1868 marked the task as done.) To turn off this behavior:
1870 @example
1871 (setq planner-cyclic-diary-nag nil)
1872 @end example
1874 @subheading Functions
1876 @file{planner-cyclic-diary} includes the following interactive
1877 functions:
1879 @defun planner-cyclic-create-tasks-maybe
1880 Maybe create cyclic tasks. This will only create tasks for future
1881 dates or today.
1882 @end defun
1884 @node Task Detail, Deadlines, Cyclic Tasks, Creating New Tasks
1885 @comment  node-name,  next,  previous,  up
1886 @subsubsection Task Detail
1887 @cindex tasks
1889 You may find your planner pages getting very full, so that you want to
1890 have one broad task entry be linked to a more specific list of
1891 sub-tasks. Or, maybe you want to have a number of notes linked to a
1892 particular task.
1893 @cindex tasks, sub-
1894 @cindex tasks, meta-
1895 @cindex meta-tasks
1896 @cindex sub-tasks
1898 This can be done with targets.  You can have a task that is really a
1899 meta-task:
1901 @example
1902 #A1  _ Do things in RevelleLog#13 @{@{Tasks:101@}@} (RevelleLog)
1903 @end example
1905 @samp{RevelleLog#13} could then be a list of sub-tasks in the form of
1906 a note, or any kind of note.
1908 Or, instead of pointing to a particular note on @samp{RevelleLog}, you
1909 could have the whole page be tasks that you enter in manually, without
1910 linking them to another page. You can just type them in like this:
1912 @example
1913 #A1  _ First specific thing to do
1914 @end example
1916 This way, the tasks will only appear on this specific project page,
1917 and not on any daily page, so you only see them when you want to look
1918 up all of the specific tasks associated with @samp{#A1  _ Do things in
1919 RevelleLog @{@{Tasks:101@}@} (RevelleLog)}.
1921 As you can see, the ability to manually enter tasks is one of
1922 Planner's nicest features. It allows you to create tasks that are
1923 not assigned to a specific date (by manually entering them on a
1924 project page with no date) or to a specific project (by manually
1925 entering them on a day page with no project). Yet as long as you enter
1926 them using the syntax it understands, Planner will continue to
1927 recognize them as tasks.
1929 Another way to have a task not be connected to a particular date is to
1930 do @kbd{C-c C-c} (@code{planner-copy-or-move-task}) and specify
1931 @samp{nil} when asked for the date.
1933 If you would like to see a list of all of your unfinished tasks, do
1934 @kbd{M-x planner-list-unfinished-tasks}. This function only checks
1935 day plan pages, not project pages.
1937 @node Deadlines,  , Task Detail, Creating New Tasks
1938 @comment  node-name,  next,  previous,  up
1939 @subsubsection Deadlines
1940 @cindex tasks, deadlines for
1941 @cindex deadlines, task
1942 @cindex @file{planner-deadline.el}, using
1944 You can use @file{planner-deadline.el} to automatically recalculate
1945 days to a deadline by adding @code{(require 'planner-deadline)} to
1946 your @file{~/.emacs}. With the default setup, make your tasks of the
1947 form
1949 @example
1950 #A0 _ Some task @{@{Deadline: 2004.09.12@}@}
1951 @end example
1953 (Note: There must be at least one space after the colon.)
1955 After you run @code{planner-deadline-update} to update task descriptions,
1956 the task will be of the form
1958 @example
1959 #A0 _ Some task @{@{Deadline: 2004.09.12 - 2 days@}@}
1960 @end example
1962 @subheading Options
1964 @defopt planner-deadline-regexp
1965 Regular expression for deadline data.
1966 The special deadline string should be regexp group 1. The
1967 date (YYYY.MM.DD) should be regexp group 2.
1968 @end defopt
1970 @subheading Functions
1972 @defun planner-deadline-update
1973 Replace the text for all tasks with deadlines. Deadlines are of the
1974 form @samp{@{@{Deadline: YYYY.MM.DD@}@}} by default.
1975 @end defun
1977 @defun planner-deadline-change &optional date
1978 Change the deadline of current task to @var{date}. If @var{date} is nil,
1979 remove deadline.
1980 @end defun
1982 @node Organizing Your Tasks, Task Reports and Overviews, Creating New Tasks, More about Tasks
1983 @comment  node-name,  next,  previous,  up
1984 @subsection Organizing Your Tasks
1985 @cindex tasks, organizing
1986 @cindex tasks, old
1988 Okay, now that you've gotten the hang of creating tasks, you're probably
1989 facing a really long list of things to do. How can you organize them so
1990 that they don't overwhelm you? Planner gives you a number of strategies
1991 for dealing with large numbers of tasks.
1993 @enumerate
1994 @item Arrange your tasks in the rough order you're going to do them.
1995 @item Use #A, #B and #C task priorities to differentiate between
1996       high-priority, normal and low-priority tasks.
1997 @item Schedule your tasks onto different days.
1998 @item Group your tasks into plan pages.
1999 @item Don't schedule all your tasks.
2000 @end enumerate
2002 @enumerate
2004 @item @emph{Task order}
2006 To remind yourself to do tasks in a certain order, simply edit the
2007 lines so that they're in the order you want. You can use normal
2008 editing commands like kill, yank and transpose-line to reorder the
2009 tasks, or use @key{M-p} (@code{planner-raise-task}) and @key{M-n}
2010 (@code{planner-lower-task}) to rearrange the tasks.
2012 @item @emph{Task priorities}
2014 By default, tasks are created with medium priority (@samp{#B}). You
2015 can make a task high-priority (@samp{#A}) or low-priority (@samp{#C})
2016 by manually editing the task and calling M-x planner-update-task to
2017 update the linked page. Alternatively, you can use @key{C-M-p}
2018 (@code{planner-raise-task-priority}) and @key{C-M-n}
2019 (@code{planner-lower-task-priority}) to modify the task and update the
2020 linked page.
2022 You can edit the priority of a task using @kbd{M-x
2023 planner-edit-task-priority}, or manually edit it and call @kbd{M-x
2024 planner-update-task} to update tasks on the linked page.
2026 @item @emph{Schedule your tasks on different days}
2028 You don't have to do everything today. Is this a task you would rather
2029 do tomorrow? Schedule it for then instead. You can specify @samp{+n}
2030 or @samp{-n} whenever you are asked for a date, where @var{n} is the
2031 number of days before or after the current file's date or today.
2032 Don't over-procrastinate things, though!
2034 @item @emph{Plan pages}
2036 Plan pages let you group related tasks and notes together for easy
2037 reference. For example, you could have a plan page for each major
2038 project or goal in your life, like @samp{GoodHealth} or
2039 @samp{FurtherStudies}.
2041 Although plan pages start by grouping everything under a @samp{*
2042 Tasks} header, you can organize your plan pages in different ways. For
2043 example, you can separate groups of tasks with blank lines, and
2044 Planner will sort tasks within each group.
2046 @item @emph{Tasks without dates}
2048 Plan pages also allow you to have undated tasks or tasks with no
2049 particular deadlines. This keeps your daily task list small and
2050 manageable while making it easier for you to find things to do if you
2051 have free time. Make sure you check your plan pages regularly so that
2052 you don't completely forget about them.
2054 For automated scheduling of the next task on a plan page after you
2055 complete a task, see the section in
2056 @uref{http://sacha.free.net.ph/notebook/emacs/planner-config.el} named
2057 ``Schedule next undated task from same project''.
2059 @end enumerate
2062 @menu
2063 * Multiple Projects::           
2064 * Viewing Tasks::               
2065 * Modifying Tasks::             
2066 * Carrying Over Unfinished Tasks::  
2067 * Task Numbering::              
2068 * Task Ranks::                  
2069 * Grouping Tasks::              
2070 @end menu
2072 @node Multiple Projects, Viewing Tasks, Organizing Your Tasks, Organizing Your Tasks
2073 @comment  node-name,  next,  previous,  up
2074 @subsubsection Associating Tasks with Multiple Projects
2075 @cindex multiple projects
2076 @cindex planner-multi.el, using
2078 You can use @file{planner-multi.el} to associate a task with more than
2079 one project. That way, you can easily keep GTD-style context lists as
2080 well as project-related lists.
2082 To use multiple projects, add the following to your @samp{~/.emacs}:
2084 @example
2085 (require 'planner-multi)
2086 @end example
2088 Under GNU Emacs, you can specify multiple projects by separating them
2089 with a single space. For example, you can specify @kbd{planner doc}
2090 when creating a task to associate the task with those two projects.
2092 Under XEmacs, you can specify multiple projects by typing @kbd{RET}
2093 after each entry and terminating the list with another @kbd{RET}. For
2094 example, to specify @kbd{planner} and @kbd{doc}, you would type
2095 @kbd{planner RET doc RET RET} at the prompt.
2097 If you want to see an overview of all of your tasks as well as
2098 project- or context-specific lists, you can set
2099 @code{planner-multi-copy-tasks-to-page} to your overview page(s). For
2100 example, set it to @samp{TaskPool} to be able to see an overview of
2101 all of your unfinished tasks. You can also set this to multiple pages
2102 such as @samp{[[TasksByProject][p]] [[TasksByContext][c]]} and use
2103 @file{planner-trunk.el} to sort and organize tasks for easy reference.
2104 (@pxref{Grouping Tasks})
2106 @subheading Options
2108 @defopt planner-multi-copy-tasks-to-page
2109 Automatically copy newly-created tasks to the specified page.
2110 @end defopt
2112 By default, tasks are removed from
2113 @code{planner-multi-copy-tasks-to-page} when you call
2114 @code{planner-task-done} or @code{planner-task-cancelled}. If you
2115 prefer to keep a copy of the task, remove
2116 @code{planner-multi-remove-task-from-pool} from
2117 @code{planner-mark-task-hook}.
2119 If you want to use a different separator instead of spaces, customize
2120 the @code{planner-multi-separator} variable.
2122 @defopt planner-multi-separator
2123 String that separates multiple page references.
2125 For best results, this should be something recognized by
2126 @code{muse-link-at-point} so that links are highlighted
2127 separately.
2128 @end defopt
2130 @node Viewing Tasks, Modifying Tasks, Multiple Projects, Organizing Your Tasks
2131 @comment  node-name,  next,  previous,  up
2132 @subsubsection Viewing tasks
2133 @cindex tasks, viewing
2135 Review the tasks scheduled for today by typing @kbd{M-x
2136 planner-goto-today}.  If you created the task from the previous
2137 section in this tutorial, you should see a line that looks like
2139 @example
2140 #A _ Learn how to change a task's status from Tasks (TaskPool)
2141 @end example
2143 If you have @code{planner-use-task-numbers} set to non-nil, you will see
2144 something like the following instead.
2146 @example
2147 #A0 _ Learn how to change a task's status from Tasks (TaskPool)
2148 @end example
2150 From left to right, these are what the symbols mean:
2152 @itemize
2153 @item @samp{A} - Priority.  A (high)
2154 @item
2155 @samp{0} - Priority number.  It is calculated whenever you save the file
2156 or call @command{planner-renumber-tasks}, provided that
2157 @code{planner-use-task-numbers} is non-nil.  Tasks are numbered in
2158 ascending order according to priorities.
2159 @item @samp{_} - Status.  _ (unfinished)
2160 @end itemize
2162 If you click on @samp{Tasks} or press @key{RET} while your cursor is
2163 in the link, Emacs will display the previous info page.
2165 If you select @samp{TaskPool}, Emacs will display the @samp{TaskPool}
2166 plan page.  Plan pages organize your tasks and notes about a project
2167 in one file.
2169 @subheading Functions
2171 You can use @command{planner-seek-next-unfinished-task} to move to the
2172 next unfinished task on the current page.
2174 @defun planner-list-tasks-with-status status &optional pages
2175 Display all tasks that match the STATUS regular expression on all day
2176 pages.  The PAGES argument limits the pages to be checked in this
2177 manner:
2179 @itemize
2180 @item @code{t}: check all pages
2181 @item regexp: search all pages whose filenames match the regexp
2182 @item list of page names: limit to those pages
2183 @item alist of page/filenames: limit to those pages
2184 @end itemize
2186 Called interactively, this function will search day pages by
2187 default. You can specify the start and end dates or leave them as
2188 nil to search all days. Calling this function with an interactive
2189 prefix will prompt for a regular expression to limit pages.
2190 Specify @samp{.} or leave this blank to include all pages.
2192 This function could take a long time.
2193 @end defun
2195 @defun planner-list-unfinished-tasks &optional pages
2196 Display all unfinished tasks. @var{pages} follows
2197 planner-list-tasks-with-status.
2198 @end defun
2200 @defun planner-jump-to-linked-task task-info
2201 Display the task page linked to by the current task or
2202 @var{task-info}.
2203 @end defun
2205 @node Modifying Tasks, Carrying Over Unfinished Tasks, Viewing Tasks, Organizing Your Tasks
2206 @comment  node-name,  next,  previous,  up
2207 @subsubsection Modifying Tasks
2208 @cindex tasks, modifying
2209 @cindex tasks, editing
2211 To select a task, move your cursor to the line containing the task.
2213 Change a task's priority (@samp{A}, @samp{B} or @samp{C}) by editing
2214 the line. @samp{#A} tasks are important. @samp{#B} are medium
2215 priority. @samp{#C} are low priority. Whenever you save the file or
2216 call @kbd{M-x planner-fix-tasks}, tasks are sorted and numbered
2217 according to priority and status.
2219 Change a task's status by calling one of the following functions:
2221 @itemize
2222 @item planner-task-in-progress @samp{o} (@kbd{C-c C-z})
2223 @item planner-task-done @samp{X} (@kbd{C-c C-x})
2224 @item planner-task-cancelled @samp{C} (@kbd{C-c C-S-x})
2225 @item planner-task-delegated @samp{D}
2226 @item planner-task-pending @samp{P}
2227 @item planner-task-open @samp{_}
2228 @end itemize
2230 After changing the status using a function, look at the
2231 @samp{TaskPool} plan page.  The task is also updated on the linked
2232 page.  If you changed the task status manually by replacing the status
2233 with another character, you will need to call
2234 @command{planner-update-task} to update the linked page.
2236 To reschedule a task, call @command{planner-copy-or-move-task} (@kbd{C-c
2237 C-c}) and choose a new date.  You can mark a region and type @kbd{M-x
2238 planner-copy-or-move-region} to reschedule all the contained tasks to a
2239 different date.  Enter @samp{nil} for the date if you don't want the
2240 task or group of tasks to appear on any date page at all anymore. This
2241 is a good way to ``de-schedule'' a task for the time being, but still
2242 keep it linked to a plan page for possible future scheduling.
2244 To change the plan page associated with a task, call
2245 @command{planner-replan-task}.  Enter @samp{nil} for the plan page if
2246 you don't want the task to appear on any plan page anymore. If you
2247 precede the command with a prefix argument, the text of the original
2248 plan page will appear in the prompt for easy editing.
2250 Since the same task may exist on two or more pages, such as a date page
2251 and a plan page, it is dangerous to edit the description of the task by
2252 hand. You should not do it unless you want to make the exact same
2253 changes on all its linked pages.
2255 Instead of doing this by hand, you should use
2256 @command{planner-edit-task-description}. This will prompt you for the
2257 changes to the task description and then update all the other pages to
2258 which the task is linked.  Or, you can just use
2259 @command{planner-delete-task} to remove the task from both pages, and
2260 then create it again with the new desired description.
2262 To remind yourself to do tasks in a certain order, simply edit the
2263 lines so that they're in the order you want.
2264 @command{planner-raise-task} and @command{planner-lower-task} update
2265 the priorities on linked pages automatically. You can organize tasks
2266 into groups by putting a blank line between groups of tasks.
2267 Planner will maintain the groupings and only sort the tasks within
2268 that group.
2270 @subheading Functions
2272 @defun planner-replan-task page-name
2273 Change or assign the plan page for the current task.  @var{page-name}
2274 is the new plan page for the task. Use
2275 @code{planner-copy-or-move-task} if you want to change the date. With a
2276 prefix, provide the current link text for editing.
2277 @end defun
2279 @defun planner-raise-task-priority
2280 Change a low-priority task to a medium-priority task and a
2281 medium-priority task to a high-priority task (C to B to A).
2282 @end defun
2284 @defun planner-lower-task-priority
2285 Change a high-priority task to a medium-priority task and a
2286 medium-priority task to a low-priority task (A to B to C).
2287 @end defun
2289 @defun planner-raise-task arg
2290 Move a task up @var{arg} steps.  By default, @var{arg} is 1.
2291 @end defun
2293 @defun planner-lower-task  arg
2294 Move a task down @var{arg} steps.  By default, @var{arg} is 1.
2295 @end defun
2297 @defun planner-edit-task-description description
2298 Change the description of the current task, updating the linked page
2299 if any.
2300 @end defun
2302 @defun planner-delete-task
2303 Delete this task from the current page and the linked page.
2304 @end defun
2306 @defun planner-update-task
2307 Update the current task's priority and status on the linked page.
2308 Tasks are considered the same if they have the same description.
2309 This function allows you to force a task to be recreated if it
2310 disappeared from the associated page.
2311   
2312 Note that the text of the task must not change. If you want to be able
2313 to update the task description, see @code{planner-edit-task-description}
2314 or @file{planner-id.el}.
2315 @end defun
2317 See @command{planner-install-extra-task-keybindings} for additional
2318 task-related shortcuts.
2320 @node Carrying Over Unfinished Tasks, Task Numbering, Modifying Tasks, Organizing Your Tasks
2321 @comment  node-name,  next,  previous,  up
2322 @subsubsection Carrying Over Unfinished Tasks
2323 @cindex tasks, carrying over
2325 Sometimes you won't be able to cross off all the tasks on your list.
2326 Planner makes it easy for you to keep track of things you still have
2327 to do by automatically rescheduling unfinished tasks from the past few
2328 days. By default, the @command{plan} command searches for unfinished
2329 tasks from the last three days and reschedules them onto today. If you
2330 open Planner every day, this should cover weekends easily.
2332 It's a good idea to start Planner whenever you start Emacs. That way,
2333 Planner can help remind you about today's tasks, appointments, and other
2334 things. To automatically start Planner whenever you start up Emacs, add
2335 the following code to the end of your @file{~/.emacs}:
2337 @example
2338 (plan)
2339 @end example
2341 Now, every time you start Emacs (which should be more or less once a
2342 day), you'll see today's page. If you don't finish all the tasks today,
2343 you'll see them again tomorrow.
2345 It's a good idea to start Planner every time you start Emacs so that
2346 you get reminded about your task list. If you prefer to start Planner
2347 manually, remember to call @kbd{M-x plan} every so often to make sure
2348 that you don't forget any unfinished tasks. Safe in the knowledge that
2349 Planner tasks won't slip through the cracks (unlike little slips of
2350 paper that will invariably get mislaid), you can then get on with the
2351 rest of your life.
2353 If your increased productivity with Planner leads to a well-deserved
2354 two-week vacation, then you'll need to tell Planner to search more days
2355 for unfinished tasks. By using @kbd{M-x plan}, you can automatically
2356 bring forward tasks over a given number of days or even scan all the
2357 days since time immemorial. @kbd{C-u 15 M-x plan} reschedules all
2358 unfinished tasks from the last 15 days. @kbd{C-u -1 M-x plan} checks all
2359 of your past day pages for unfinished tasks.
2361 Like everything else in Planner, you can adapt @kbd{M-x plan} to your
2362 particular way of life. For example, if you find yourself starting up
2363 Emacs and Planner every day--including weekends--because it's just so
2364 much fun, you can set the @code{planner-carry-tasks-forward} to 1.
2365 This can make your Emacs startup marginally faster. On the other hand,
2366 if you normally start Emacs once a week, you can set it to 7 or 8. If
2367 you're worried about tasks dropping off your radar, you can set it to
2368 0. You can set the value of @var{planner-carry-tasks-forward} either
2369 with @key{M-x customize-variable RET planner-carry-tasks-forward RET},
2370 or by putting @code{(setq planner-carry-tasks-forward 3)} (replacing
2371 @code{3} with the value appropriate for what you want) in your
2372 @file{~/.emacs} file.
2374 On the other hand, you might prefer to reschedule tasks yourself. If
2375 you set @code{planner-carry-tasks-forward} to @code{nil}, then
2376 @command{M-x plan} and @code{(plan)} will bring you to the most recent
2377 page with unfinished tasks if there is no page for today. You can then
2378 use @command{planner-copy-or-move-task} and
2379 @command{planner-copy-or-move-region} to reschedule tasks. This is
2380 probably more hassle than it's worth, though, so let Planner take care
2381 of this for you.
2383 @subheading Options
2385 @defopt planner-carry-tasks-forward
2386 If non-nil, carry unfinished tasks forward automatically.
2387 If a positive integer, scan that number of days in the past.
2388 If 0, scan all days for unfinished tasks.
2389 If t, scan one day in the past (old behavior).
2390 If nil, do not carry unfinished tasks forward.
2391 @end defopt
2393 @subheading Functions
2395 @defun plan &optional force-days
2396 Start your planning for the day, carrying unfinished tasks forward.
2398 If @var{force-days} is a positive integer, search that many days in the
2399 past for unfinished tasks.
2400 If @var{force-days} is @code{0} or @code{t}, scan all days.
2401 If @var{force-days} is @code{nil}, use the value of
2402 @code{planner-carry-tasks-forward} instead, except t means scan only
2403 yesterday
2405 @end defun
2407 @defun planner-copy-or-move-task date force
2408 Reschedule the task for @var{date}. If @var{force} is non-nil, the
2409 task is moved regardless of status. It also works for creating tasks
2410 from a Note. Use @code{planner-replan-task} if you want to change the
2411 plan page in order to get better completion.
2412 @end defun
2414 @defun planner-copy-or-move-region beg end date muffle-errors
2415 Move all tasks from @var{beg} to @var{end} to @var{date}.
2416 @code{planner-copy-or-move-region} will copy or move all tasks from
2417 the line containing @var{beg} to the line just before @var{end}. If
2418 @var{muffle-errors} is non-nil, no errors will be reported.
2419 @end defun
2421 @node Task Numbering, Task Ranks, Carrying Over Unfinished Tasks, Organizing Your Tasks
2422 @comment  node-name,  next,  previous,  up
2423 @subsubsection Task Numbering
2425 By default, tasks are numbered according to their position on the
2426 page.  Task numbers allow you to refer to tasks using Muse links.
2427 For example, the @samp{#A1} task in @file{2004.08.16} can be referred to
2428 as @samp{2004.08.16#A1}.
2430 Note that task numbers change every time you re-sort and re-number tasks
2431 with @code{planner-fix-tasks}.  As a result, they are only reliable for
2432 references to past tasks.
2434 If you find yourself not using this functionality, you can turn off task
2435 numbers by using the following option.
2437 @subheading Options
2439 @defopt planner-use-task-numbers
2440 Non-nil means use task numbers when creating tasks.  This allows you
2441 to refer to past tasks if your tasks are numbered appropriately.
2442 If you set this to nil, you can save space in your plan files.
2443 @end defopt
2445 @node Task Ranks, Grouping Tasks, Task Numbering, Organizing Your Tasks
2446 @comment  node-name,  next,  previous,  up
2447 @subsubsection Task Ranks
2448 @cindex ranking tasks
2449 @cindex tasks, ranking
2450 @cindex @file{planner-rank.el}, using
2452 @file{planner-rank.el} models Franklin Covey's Urgency and Importance
2453 principle. When you think about a task, there are two aspects in
2454 consideration: Urgency and Importance. You may want to do the most
2455 urgent things first, like answering an email, or you may want to do
2456 the most important things first, like reading this manual. Or much
2457 better, balance Urgency and Importance and decide what to do.
2459 @file{planner-rank.el} can help you balance.
2461 Urgency and Importance are both measured by scores from 0-9. The
2462 higher the score, the more you want to do it first. 9 stands for ``I
2463 should have done this'' and 0 stands for ``I can forget this''.
2465 If you are using the planner @ref{Deadlines} feature, the Urgency
2466 score is automatically calculated from how many days are left to meet
2467 the deadline. By default, it will score 9 if the task is overdue and 0
2468 if the deadline is years away. Please refer to the docstring of
2469 @code{planner-rank-deadline-urgency-map-list} for detail.
2471 The task rank is calculated from Urgency and Importance scores. As
2472 different people balance urgency and importance differently, a number
2473 of @code{planner-rank-calculate-rank-*} functions are provided. The
2474 algorithms vary from a simple average to something like a weighted
2475 root mean square deviation.
2477 The aggressive versions of these functions
2478 (@code{planner-rank-calculate-rank-*-aggressive}) will make sure if
2479 one of Urgency and Importance is high, the resulting rank will be high
2480 as well. @code{planner-rank-calculate-rank-weighted-*} functions weigh
2481 the Urgency and Important scores depending on
2482 @code{planner-rank-importance-vs-urgency-factor}.
2484 Call @code{planner-rank-test-algorithm} on each of the functions and
2485 check the result tables to see which one you like most, and set it to
2486 @code{planner-rank-rank-calculate-function}. Alternatively, accept the
2487 defaults and tweak them when you get a better feel for ranking.
2489 Once the Rank is calculated, the @ref{Task Priorities} will be
2490 automatically reset. If the Rank is greater than or equal to
2491 @code{planner-rank-priority-A-valve}, the task priority will be
2492 @samp{A}, if the Rank is between @code{planner-rank-priority-A-valve}
2493 and @code{planner-rank-priority-B-valve}, the priority will be @samp{B},
2494 else it will be @samp{C}.
2496 After setting the task importance and deadline, you can leave it as
2497 is. As the deadline approaches, the task priority will automatically
2498 be raised and the task re-colored to catch your eyes.
2500 If you are using @code{planner-sort-tasks} (see @pxref{Making Files
2501 Pretty}), you can set @code{planner-sort-tasks-key-function} to one of
2502 @code{planner-sort-tasks-by-rank},
2503 @code{planner-sort-tasks-by-importance}, and
2504 @code{planner-sort-tasks-by-urgency}.
2506 @subheading Options
2508 @defopt planner-rank-change-hook
2509 Functions to run after @code{planner-rank-change}.
2510 @end defopt
2512 @defopt planner-rank-priority-A-valve
2513 Tasks with rank greater than or equal to this value will be set to
2514 priority @samp{A}.
2515 @end defopt
2517 @defopt planner-rank-priority-B-valve
2518 Tasks with rank greater than or equal to this value and less than
2519 @code{planner-rank-priority-A-valve} will be set to priority
2520 @samp{B}. Tasks with rank less than this value will be set to priority
2521 @samp{C}.
2522 @end defopt
2524 @defopt planner-rank-deadline-urgency-map-list
2525 Defines how to calculate the Urgency score according to how many days
2526 are left to meet the deadline.
2527 @end defopt
2529 @defopt planner-rank-default-importance
2530 Default importance value for newly added rank.
2531 @end defopt
2533 @defopt planner-rank-default-urgency
2534 Default urgency value for newly added rank.
2535 @end defopt
2537 @defopt planner-rank-importance-vs-urgency-factor
2538 How much do you think importance is more ``important'' than urgency.
2539 This will be used in @code{planner-rank-calculate-rank-weighted-*}
2540 functions.
2541 @end defopt
2543 @defopt planner-rank-rank-calculate-function
2544 Define the function called to calculate rank.
2545 @end defopt
2547 @subheading Functions
2549 @defun planner-rank-change &optional importance urgency
2550 Set the Importance and Urgency of the current task.
2551 @end defun
2553 @defun planner-rank-update-current-task
2554 Recalculate rank for the current task.
2555 @end defun
2557 @defun planner-rank-update-all
2558 Recalculate rank for all tasks in the current page
2559 @end defun
2561 @defun planner-rank-update-all
2562 Recalculate rank for all tasks in the current page
2563 @end defun
2565 @node Grouping Tasks,  , Task Ranks, Organizing Your Tasks
2566 @comment  node-name,  next,  previous,  up
2567 @subsubsection Grouping Tasks with planner-trunk.el
2568 @cindex grouping tasks
2569 @cindex tasks, grouping
2570 @cindex @file{planner-trunk.el}, using
2572 @file{planner-trunk.el} helps you automatically group tasks according
2573 to a set of rules. It sorts and splits your tasks, adding a blank line
2574 between groups of tasks. For example, if today's page looks like this:
2576 @example
2577 * Tasks
2579 #B   _ Buy milk (GroceryShopping)
2580 #B   _ Learn how to use planner-trunk (PlannerMode)
2581 #B   _ Buy a notebook (Bookstore)
2582 #B   _ Buy cereal (GroceryShopping)
2583 #B   _ Set up my own planner-trunk rules (PlannerMode)
2584 #B   _ Customize my stylesheet (MuseMode)
2585 #B   _ Go for a health checkup (BetterHealth)
2586 @end example
2588 @noindent
2589 then you might want to group the tasks into: planner and muse,
2590 shopping list, and other items. If you set up the appropriate rules by
2591 customizing @code{planner-trunk-rule-list}, @file{planner-trunk.el}
2592 can automatically rewrite that section line this:
2594 @example
2595 * Tasks
2597 #B   _ Learn how to use planner-trunk (PlannerMode)
2598 #B   _ Set up my own planner-trunk rules (PlannerMode)
2599 #B   _ Customize my stylesheet (MuseMode)
2601 #B   _ Buy milk (GroceryShopping)
2602 #B   _ Buy a notebook (BookstoreShopping)
2603 #B   _ Buy cereal (GroceryShopping)
2605 #B   _ Go for a health checkup
2606 @end example
2608 @noindent
2609 In this case, you would set @code{planner-trunk-rule-list}
2610 to @code{(("." nil ("PlannerMode\\|MuseMode" "Shopping")))}.
2612 You can load @file{planner-trunk} with @kbd{M-x load-library RET
2613 planner-trunk RET} or add @code{(require 'planner-trunk)}. If you're
2614 not yet comfortable with Emacs Lisp, you can use @kbd{M-x
2615 customize-variable RET planner-trunk-rule-list RET} to edit this rule
2616 using an easy-to-use interface.
2618 WARNING: Do not keep non-task information in the Tasks section.
2619 planner-trunk will delete @strong{all} non-task lines from the Tasks
2620 section of your plan page in the process of grouping the tasks.
2622 After you set up @code{planner-trunk-rule-list}, use @command{M-x
2623 planner-trunk-tasks} to try out your rules until you're satistfied.
2625 If you want to do this automatically, you can use @code{(add-hook
2626 'planner-mode-hook 'planner-trunk-tasks)} to trigger it automatically
2627 whenever you open a Planner page.
2629 @node Task Reports and Overviews,  , Organizing Your Tasks, More about Tasks
2630 @subsection Task Reports and Overviews
2631 @cindex task reports
2632 @cindex task overviews
2633 @cindex reports, task
2634 @cindex overviews, task
2635 @cindex reports, accomplishment
2636 @cindex tasks, overview of
2638 Planner provides a number of different ways to generate different
2639 presentations of your tasks.
2641 @menu
2642 * Accomplishments::             
2643 * Task Overviews::              
2644 * <tasks> tag::             
2645 * planner-zoom::                View and navigate tasks by time period    
2646 @end menu
2648 @node Accomplishments, Task Overviews, Task Reports and Overviews, Task Reports and Overviews
2649 @comment  node-name,  next,  previous,  up
2650 @subsubsection Generating Daily Accomplishment Reports
2651 @cindex reports, accomplishment
2652 @cindex @file{planner-accomplishments.el}, using
2653 @cindex tasks, overview of
2654 @cindex task reports
2655 @cindex reports, task
2656 @cindex overviews, task
2657 @cindex task overviews
2659 You can use @file{planner-accomplishments.el} to get a summary of your
2660 task activity for a particular day. The report is grouped by status
2661 and plan (on day pages) or date (on plan pages). An example report
2662 follows:
2664 @example
2665 Link        | Unfinished | In progress | Delegated | Completed | Total
2666 nil         | 1          | 0           | 0         | 6         | 7
2667 TaskPool    | 1          | 1           | 0         | 3         | 5
2668 Planner     | 0          | 0           | 1         | 1         | 2
2669 SchoolWork  | 0          | 0           | 0         | 1         | 1
2670 Total       | 2          | 1           | 1         | 11        | 15
2671 @end example
2673 This lets you see how you balance your time between your projects.
2675 @itemize
2677 There are currently two ways to use @file{planner-accomplishments.el}.
2679 @item Displaying a temporary buffer
2681 You can call @code{planner-accomplishments-show} to display a buffer
2682 containing the current page's accomplishment report.
2684 @item Rewriting sections of your planner
2686 Choose this approach if you want accomplishment reports to be in
2687 their own section and you would like them to be readable in your
2688 plain text files even outside Emacs. Caveat: The accomplishment
2689 section should already exist in your template and will be rewritten
2690 when updated.
2692 To use, set @code{planner-accomplishments-section} to the name of the
2693 section to rewrite (default: @samp{Accomplishments}). If you want
2694 rewriting to be automatically performed, call
2695 @code{planner-accomplishments-insinuate}. The accomplishments will be
2696 rewritten whenever you save a planner page. If you want rewriting to
2697 be manual, call @code{planner-accomplishments-update}.
2699 @end itemize
2701 @subheading Options
2703 @defopt planner-accomplishments-section
2704 Header for the accomplishments section in a plan page.
2705 Used by @code{planner-accomplishments-update}.
2706 @end defopt
2708 @defopt planner-accomplishments-status-display
2709 Alist of status-label maps also defining the order of display.
2710 Used by @code{planner-accomplishments-format-table}.
2711 @end defopt
2713 @subheading Functions
2715 @defun planner-accomplishments-insinuate ()
2716 Automatically call @code{planner-accomplishments-update} when saving
2717 tasks in @code{planner-mode} buffers.
2718 @end defun
2720 @defun planner-accomplishments-update ()
2721 Rewrite @code{planner-accomplishments-section} with a summary of tasks
2722 on this page.
2723 @end defun
2725 @defun planner-accomplishments-show ()
2726 Display a buffer with the current page's accomplishment report.
2727 @end defun
2729 @node Task Overviews, <tasks> tag, Accomplishments, Task Reports and Overviews
2730 @comment  node-name,  next,  previous,  up
2731 @subsubsection Seeing an Overview of Tasks
2732 @cindex tasks, overview of
2733 @cindex task reports
2734 @cindex reports, task
2735 @cindex overviews, task
2736 @cindex task overviews
2737 @cindex @file{planner-tasks-overview.el}, using
2739 You can see a list of tasks with @file{planner-tasks-overview.el}.
2740 Seeing how you've scheduled tasks over the next few days can help you
2741 decide when to schedule another task. Table entries will be of the form
2743 @var{date} | @var{link} | @var{priority} @var{status} | @var{task-description}
2745 @subheading Functions
2747 To display the tasks between a set of day pages, use
2749 @defun planner-tasks-overview start end
2750 Display an overview of your tasks from @var{start} to @var{end}. If
2751 @var{start} is nil, start from the very first day page. If @var{end}
2752 is nil, include the very last day page. You can use
2753 @code{planner-expand-name} shortcuts here, like @kbd{+1} or @kbd{-1}.
2754 Pressing @key{RET} at the prompt will use today.
2756 Once in a @code{planner-tasks-overview} buffer, you can use
2757 the keyboard shortcut @key{o} to change the overview period.
2758 @end defun
2760 You can sort the task display with the following functions:
2762 @defun planner-tasks-overview-sort-by-date
2763 Sort the tasks by date. Keyboard shortcut: @key{1}
2764 @end defun
2766 @defun planner-tasks-overview-sort-by-plan
2767 Sort the tasks by associated plan page. Keyboard shortcut: @key{2}
2768 @end defun
2770 @defun planner-tasks-overview-sort-by-priority
2771 Sort the tasks by priority. Keyboard shortcut: @key{3}
2772 @end defun
2774 @defun planner-tasks-overview-sort-by-status
2775 Sort the tasks by status. Keyboard shortcut: @key{4}
2776 @end defun
2778 You can jump to linked tasks with
2780 @defun planner-tasks-overview-jump other-window
2781 Display the current task. If a prefix argument is supplied, show the
2782 task in another window. Keyboard shortcut: @key{j}
2783 @end defun
2785 @defun planner-tasks-overview-jump-other-window
2786 Display the current task in another window. Keyboard shortcut: @kbd{C-u j}
2787 @end defun
2789 You can view a summary of the tasks in your plan pages with
2791 @defun planner-tasks-overview-show-summary &optional file-list
2792 Count unscheduled, scheduled, and completed tasks for FILE-LIST. If
2793 called with an interactive prefix, prompt for the plan page(s) to
2794 display. Load @file{planner-multi.el} to be able to specify multiple
2795 pages.
2796 @end defun
2798 @subheading Keys
2800 @key{TAB}, @kbd{SHIFT-TAB} and @key{RET} navigate links in the usual
2801 fashion.
2803 @node <tasks> tag, planner-zoom, Task Overviews, Task Reports and Overviews
2804 @subsubsection <tasks> tag
2805 @cindex <tasks> tag
2806 @cindex task reports
2807 @cindex reports, task
2808 @cindex overviews, task
2809 @cindex task overviews
2810 @cindex tasks, overview of
2812 @samp{<tasks>} is replaced by a report of tasks over all day pages in
2813 published pages (@pxref{Publishing}).
2815 @example
2816 All incomplete tasks
2818 <tasks status="^X">
2820 All completed tasks
2822 <tasks status="X">
2824 All tasks
2826 <tasks>
2827 @end example
2829 Warning: this function can be slow, as it checks all the day pages!
2831 @node planner-zoom, ,<tasks> tag, Task Reports and Overviews
2832 @comment  node-name,  next,  previous,  up
2833 @section planner-zoom
2834 @cindex planner-zoom
2835 @cindex view, weekly
2836 @cindex view, quarterly
2837 @cindex view, monthly
2838 @cindex view, yearly
2840 When assessing where you stand in relation to the tasks you have set
2841 out for yourself, you might want a way to survey those tasks in groups
2842 divided by time periods, like by the week or by the month. You could
2843 create all of these overview pages by hand, but if you like to have
2844 this kind of overview frequently, you might find manually creating
2845 such pages to be tedious and time consuming.
2847 @file{planner-zoom} is an optional module designed to make it easy to
2848 view your task information grouped by year, quarter, month, week or
2849 day.
2851 To install this module, just load it in your @file{.emacs} (or
2852 @file{_emacs}):
2854 @example
2855 (require 'planner-zoom)
2856 @end example
2858 This module will recognize planner pages named according to the
2859 following scheme:
2861 @table @asis
2863 @item year view
2864 @file{2006.Year}
2866 @item quarter view
2867 @file{2006.Quarter2}
2869 @item month view
2870 @file{2006.January}
2872 @item week view
2873 @file{2006.January.Week3}
2875 @item day view
2876 @file{2006.01.02}
2878 @end table
2880 @subheading Keybindings
2882 This module also adds key bindings that you can use when looking at a
2883 Planner page to easily jump between the different time-period views.
2885 @table @kbd
2887 @item S-up
2888 Move to the view corresponding to the time period one step larger than
2889 the current one. For example, it moves from the weekly view to the
2890 monthly view. It calls @code{planner-zoom-iup}.
2892 @item S-down 
2893 Move to the view corresponding to the time period one step smaller
2894 than the current one. For example, it moves from the weekly view to
2895 the daily view. It calls @code{planner-zoom-idown}.
2897 @item S-left
2898 Stay in the same time-period view as the current one, but move one
2899 interval earlier. For example, it moves from @file{2006.January.Week3}
2900 to @file{2006.January.Week2}. It calls @code{planner-zoom-iprev}.
2902 @item S-right
2903 Stay in the same time-period view as the current one, but move one
2904 interval later. For example, it moves from @file{2006.January.Week3}
2905 to @file{2006.January.Week4}. It calls @code{planner-zoom-inext}.
2907 @end table
2909 @subheading Example usage
2911 Look at the page named @file{2006.January} and then hit @kbd{S-down}
2912 which will show @file{2006.January.Week1}. Then hit @kbd{S-left} and
2913 @kbd{S-right} to look at @file{2006.January.Week2},
2914 @file{2006.January.Week3}, etc.
2916 @subheading Advanced tips and options
2918 You can use any prefix argument with @code{planner-zoom-iup} and
2919 @code{planner-zoom-idown} to have the new view display in a window
2920 other than the current one. This also works with a nonnumeric prefix
2921 argument and @code{planner-zoom-inext} or @code{planner-zoom-iprev}.
2922 For these two functions, a numeric prefix will specify the number of
2923 intervals to move.
2925 If you don't like the default patterns for naming the time-period view
2926 pages, you can change them by customizing @code{planner-zoom-regexps}.
2928 Some people believe weeks start with Sunday, and some believe they
2929 start with Monday. To accommodate both of these colliding worldviews,
2930 @code{planner-zoom-first-day-of-week} can be customized. Its default
2931 value is @samp{1}, which is Monday. If you would prefer Sunday, change
2932 it to @samp{0}. The month to which a week belongs is the month in
2933 which the first day of the week falls.
2935 @subheading Command reference
2937 @defun planner-zoom-iup name other-window
2938 Move to the next higher level in the hierarchy. With a prefix
2939 argument, show the desired page in the other window.
2940 @end defun
2942 @defun planner-zoom-idown name other-window
2943 Move to the next lower level in the hierarchy. If the current date is
2944 within the higher-level time range, zoom to the lower level time range
2945 that also contains today. Otherwise, just go to the first lower-level
2946 time range. With a prefix argument, show the desired page in the other
2947 window.
2948 @end defun
2950 @defun panner-zoom-inext name num other-window
2951 Move to the next time range at the same level in the hierarchy. With a
2952 numeric prefix argument, move by that number of time ranges. With a
2953 non-numeric prefix argument, show the desired page in the other window.
2954 @end defun
2956 @defun planner-zoom-iprev name num other-window
2957 Move to the previous time range at the same level in the hierarchy.
2958 With a numeric prefix argument, move by that number of time ranges.
2959 With a non-numeric prefix argument, show the desired page in the other
2960 window.
2961 @end defun
2963 @node More about Notes, Making Files Pretty, More about Tasks, More about Planner
2964 @section More about Notes
2965 @cindex notes, more about
2966 You can put anything in this section. Notes added by
2967 @file{remember-planner.el} look like this:
2969 @example
2970 .#1 Headline
2971 Body
2972 @end example
2974 and are outlined at the @code{H3} level. If you want to take notes
2975 conveniently, check out @file{remember-planner.el}.
2977 Planner by default organizes the notes on a planner page so that
2978 the most recent note is first. Each note is numbered, with the oldest
2979 note labeled @samp{.#1}. If you would like to reverse this behavior,
2980 look at @kbd{C-h v planner-reverse-chronological-notes}.
2982 Notes are associated with day pages, but can also be associated with
2983 plan pages when they are created.  A linked note looks like this:
2985 @example
2986 .#1 Headline (LinkedNote#1)
2987 Text
2988 @end example
2990 You can jump to the linked note with
2991 @command{planner-jump-to-linked-note}.
2993 Deleting a note can be dangerous, as the notes are automatically
2994 numbered.  Removing a note could break links in other pages.
2996 @subheading Functions
2998 @defun planner-create-note page
2999 Create a note to be remembered in @var{page} (today if @var{page} is
3000 nil).  If @code{planner-reverse-chronological-notes} is non-nil, create
3001 the note at the beginning of the notes section; otherwise, add it to
3002 the end.  Position point after the anchor.
3003 @end defun
3005 @defun planner-create-note-from-task
3006 Create a note based on the current task and update the current task to
3007 link to the note.
3008 @end defun
3010 @defun planner-renumber-notes
3011 Update note numbering.
3012 @end defun
3014 @defun planner-jump-to-linked-note note-info
3015 Display the note linked to by the current note or @var{note-info} if
3016 non-nil.
3017 @end defun
3019 @defun planner-search-notes regexp limit
3020 Return a buffer with all the notes returned by the query for
3021 @var{regexp}.  If called with a prefix argument, prompt for
3022 @var{limit} and search days on or after @var{limit}.
3023 @end defun
3025 The following sections include instructions for displaying,
3026 manipulating, and navigating your notes efficiently.
3028 @menu
3029 * Using Allout Mode::           Quickly navigating your notes
3030 * <notes>::                     Note headlines
3031 * <past-notes>::                Index of past notes
3032 * Note Indices::                
3033 @end menu
3035 @node Using Allout Mode, <notes>, More about Notes, More about Notes
3036 @subsection Using Allout Mode
3037 @cindex Allout mode
3038 @cindex notes, navigating
3039 @cindex notes, formatting
3040 @cindex notes, displaying
3042 The format of the notes in Planner works well with Allout mode, which
3043 provides helpful commands for navigating and formatting outlines. You
3044 can, for example, hide the bodies of all the notes on a page so you can
3045 see just their headlines. You can also jump easily from headline to
3046 headline, skipping over the bodies in between.
3048 The commands for using Allout mode vary depending on which Emacs version
3049 you are using. In either case, type @kbd{M-x load-library @key{RET}
3050 allout @key{RET}} to start. If you are using CVS Emacs, type @kbd{M-x
3051 allout-mode @key{RET}}. If you are using an earlier version of Emacs,
3052 type @kbd{M-x outline-mode @key{RET}}.
3054 The exact commands then available to you differ depending on your Emacs
3055 version, but you can view the commands and their keybindings by typing
3056 @kbd{C-h m}. In CVS Emacs, they will start with @command{allout-}, while
3057 in previous versions, they will start with @command{outline-}.
3059 @node <notes>, <past-notes>, Using Allout Mode, More about Notes
3060 @subsection <notes>
3062 @samp{<notes>} is replaced by a list of note headlines when the page
3063 is published. For example, the notes tag in the following example will
3064 be replaced by the two headlines when published. (@pxref{Publishing})
3066 @example
3067 <notes>
3069 * Notes
3071 .#1 This is a headline
3073 and this is body text
3075 .#2 This is another headline
3077 and this is more body text
3078 @end example
3080 @samp{<notes>} is useful if you want to provide a quick summary of
3081 blog entries at the top of your page. Just add it to your
3082 @code{planner-day-page-template}.
3084 @node <past-notes>, Note Indices, <notes>, More about Notes
3085 @subsection <past-notes>
3087 @samp{<past-notes>} is replaced by an index of note headlines.
3088 If @var{start} is specified, it lists notes starting from that date.
3089 If @var{directory} is specified, you can index notes in another
3090 planner directory.
3092 @example
3093 All the notes I've taken in 2004:
3095 <past-notes start="2004.01.01" end="2004.12.31">
3096 @end example
3098 @node Note Indices,  , <past-notes>, More about Notes
3099 @comment  node-name,  next,  previous,  up
3100 @subsection Note Indices
3101 @cindex @file{planner-notes-index.el}, using
3102 @cindex notes, indexing
3104 Make sure that @file{planner-notes-index.el} is in your load path and
3105 add this to your @file{.emacs} (or @file{_emacs}):
3107 @example
3108 (require 'planner-notes-index)
3109 @end example
3111 Then you can use tags of the form:
3113 @example
3114 <planner-notes-index page="2004.03.02">
3115 <planner-notes-index from="2004.03.01" to="2004.03.31">
3116 <planner-notes-index limit="10">
3117 <planner-notes-index page="PlanPage">
3118 <planner-notes-index-month-table month="2004.03" limit="5">
3119 <planner-notes-index-month-table month="2004.03">
3120 @end example
3122 You can also use the following interactive functions:
3124 @code{planner-notes-index}
3125 @code{planner-notes-index-days}
3126 @code{planner-notes-index-weeks}
3127 @code{planner-notes-index-months}
3128 @code{planner-notes-index-years}    (wow!)
3130 These work based on the current date (date of current buffer, or today).
3132 If a single page is specified, this page is scanned for headlines
3133 of the form:
3135 @example
3136  .#1 Headline
3137 @end example
3139 The results are presented as a bulleted list.
3141 If @var{from} and @var{to} are specified, all date pages between them
3142 (inclusive) are scanned. If @var{from} is omitted, it is assumed to be
3143 the earliest entry.  If @var{to} is omitted, it is assumed to be the
3144 latest entry.
3146 If @var{recent} is specified, the list includes only that many recent
3147 headlines.  and the results are presented as a bulleted list.
3149 To customize presentation, you can write a function that generates
3150 the appropriate @code{<planner-notes-index>} tags. You can also use
3151 @code{planner-extract-note-headlines} in your own functions.
3153 @subheading Functions
3155 The following interactive functions are defined in
3156 @file{planner-notes-index.el}:
3158 @defun planner-notes-index &optional from to limit
3159 Display a clickable notes index. If called from a Lisp program,
3160 display only dates between @var{from} and @var{to}. With a prefix arg
3161 @var{limit}, display only that number of entries.
3162 @end defun
3164 @defun planner-notes-index-days days
3165 Display an index of notes posted over the past few @var{days}. The
3166 list ends with the day of the current buffer or @code{planner-today}.
3167 @end defun
3169 @defun planner-notes-index-weeks weeks
3170 Display an index of notes posted over the past few @var{weeks}. The
3171 list ends with the week of the current buffer or
3172 @code{planner-today}. Weeks start from Sunday.
3173 @end defun
3175 @defun planner-notes-index-months months
3176 Display an index of notes posted over the past few @var{months}. The
3177 list ends with the month of the current buffer or @code{planner-today}.
3178 @end defun
3180 @defun planner-notes-index-years years
3181 Display an index of notes posted over the past few @var{years}. The
3182 current year is included.
3183 @end defun
3185 @file{planner-notes-index.el} does not define any keybindings.
3188 @node Making Files Pretty, Annotations, More about Notes, More about Planner
3189 @section Making Files Pretty
3191 By default, planner does a little bit of fancy reformatting when you
3192 save a file. Tasks are sorted by priority (ABC) and status (_oP>XC) on
3193 day pages. On plan pages, tasks are sorted by priority (ABC), status
3194 (XC), and date. Undated tasks are sorted after dated tasks.
3196 @subheading Options
3198 @defopt planner-sort-tasks-key-function
3199 Control task sorting. Some options include
3200 @code{planner-sort-tasks-default-key},
3201 @code{planner-sort-tasks-basic}, @code{planner-sort-tasks-by-date}, and
3202 @code{planner-sort-tasks-by-link}.
3203 @end defopt
3205 @defopt planner-sort-undated-tasks-equivalent
3206 This option controls the behavior of task sorting on plan pages.  By
3207 default, the value @samp{9999.99.99} causes dated tasks to be listed
3208 before undated tasks.  To sort undated tasks before dated tasks,
3209 set this to a blank string.
3210 @end defopt
3212 @defopt planner-sort-tasks-automatically
3213 Non-nil means sort tasks whenever a planner file is saved.  On day
3214 pages, tasks are sorted by status.  On plan pages, they are sorted by
3215 status and date.  Sorting can take a while.
3216 @end defopt
3218 @defopt planner-renumber-tasks-automatically
3219 Non-nil means renumber tasks from 1 to N whenever a planner file is
3220 saved. This allows you to refer to tasks in previous day pages using
3221 anchors like @samp{2003.08.12#A1}. If you use this function, make sure
3222 @code{planner-use-task-numbers} is non-nil so that new tasks are created
3223 with task numbers.
3224 @end defopt
3226 @defopt planner-align-tasks-automatically
3227 Non-nil means align tasks whenever a planner file is saved.  This
3228 causes the status to line up in a neat column if you have less than
3229 100 tasks.
3230 @end defopt
3232 @defopt planner-renumber-notes-automatically
3233 Non-nil means renumber the notes. If most of your notes are only on
3234 one page, you might like seeing the notes renumbered if you delete a
3235 note in the middle. However, if you use a lot of cross-referencing,
3236 note renumbering will break those links.
3237 @end defopt
3239 @subheading Functions
3241 @defun planner-sort-tasks
3242 Sort tasks according to planner-sort-tasks-key-function. By default,
3243 sort tasks according to priority and position on day pages, and
3244 according to status, priority, date, and position on plan pages.
3245 @end defun
3247 @defun planner-renumber-tasks
3248 Update task numbering.
3249 @end defun
3251 @defun planner-align-tasks
3252 Align tasks neatly. You can add this to @code{write-file-functions} to
3253 have the tasks automatically lined up whenever you save.  For best
3254 results, ensure @code{planner-align-tasks} is run after
3255 @code{planner-renumber-tasks}.
3256 @end defun
3258 @defun planner-fix-tasks
3259 Sort, renumber and align tasks.
3260 @end defun
3262 @node Annotations, Interactive Lisp, Making Files Pretty, More about Planner
3263 @comment  node-name,  next,  previous,  up
3264 @section Annotations
3266 The context included when you create a task and the context included
3267 when you create a note are gained the same way. It sounds like black
3268 magic, but it turns out not to be.
3270 All that happens is, Planner has a list of functions,
3271 @code{planner-annotation-functions}. When you create a task from a
3272 buffer, or remember a note from a buffer, Planner goes through
3273 this list from top to bottom. The first one that returns true is the
3274 one it uses.
3276 For example, if you're in Wanderlust, and you hit the key you've bound
3277 to @code{planner-create-task-from-buffer}, it looks at this list and
3278 does something like this.  Is it an ERC buffer? No. Is it a BBDB
3279 buffer? No. Are we in w3m? No. Are we in Wanderlust? Yes. So this
3280 function succeeds. It stops searching and runs the annotation function
3281 for Wanderlust, which in this case finds out who the message is from
3282 and what the message ID of the message is. It then takes those and
3283 constructs a link back to that message, with a link title something
3284 like @samp{Email from Joe Blogs}.
3286 So, you've read the email from Joe Blogs. He's asked you to do
3287 something and you've hit your key to add that task to your list of
3288 things to do. So what you end up with is a description of the task,
3289 and a link back to what made you create the task in the first place.
3291 The same happens with remembering notes, except that it ends up in the
3292 @samp{* Notes} section of your page instead.
3294 By default, @file{planner.el} can annotate tasks and notes based on
3295 the current filename.
3297 @subheading Options
3299 To change the behavior of annotations, customize the following options:
3301 @defopt planner-annotation-functions
3302 A list of functions tried in order by
3303 @command{planner-create-task-from-buffer} and other functions that
3304 pick up context.  The first non-nil value returned is used as the
3305 annotation.  To cause an item to @strong{not} be annotated, return the
3306 empty string @samp{""}.
3307 @end defopt
3309 @defopt planner-annotation-strip-directory
3310 File links are usually generated with the full path to the file so
3311 that you can easily tell apart files with the same base name.  If
3312 @code{planner-annotation-strip-directory} is non-nil, though, only the
3313 base name of the file will be displayed.  For example, a link to
3314 @samp{/foo/bar/baz} will be displayed as @samp{baz} and hyperlinked to
3315 the file.
3316 @end defopt
3318 @defopt planner-annotation-use-relative-file
3319 If t, always use relative filenames.
3320 @code{planner-annotation-use-relative-file} can also be a function that
3321 takes the filename and returns non-nil if the link should be relative.
3322 Filenames are resolved relative to the first directory of your Planner
3323 project in @code{muse-project-alist}.  That is, the created link will be
3324 of the form @samp{../../somefile} instead of
3325 @samp{/absolute/path/to/file}.  This can be helpful if you publish your
3326 planner files to the Net and your directory structure ensures that
3327 relative links resolve the same from your Plan pages and their
3328 respective publishing directory.
3329 @end defopt
3331 @node Interactive Lisp, Publishing, Annotations, More about Planner
3332 @comment  node-name,  next,  previous,  up
3333 @section Interactive Lisp with planner-lisp.el
3334 @cindex Lisp functions, using with Planner
3335 @cindex interactive Lisp fuctions, using with Planner
3336 @cindex @file{planner-lisp.el}, using
3338 You can include interactive Lisp functions in your planner pages.
3340 First, you need @file{planner-lisp.el}. Put this in your @file{.emacs}
3341 (or @file{_emacs}):
3343 @example
3344 (require 'planner-lisp)
3345 @end example
3347 Then, add a link to the Lisp function to your page, like:
3349 @example
3351 [[lisp:/plan][Plan]]
3353 @end example
3355 This will be rendered as @samp{Plan}. Selecting the link will run the
3356 @code{plan} function interactively.
3358 You can also execute other Lisp expressions. For example:
3360 @example
3361 [[lisp:/(planner-goto (planner-expand-name "+7"))][Next week]]
3362 @end example
3364 @file{planner-lisp.el} does not provide any interactive functions or
3365 keybindings.
3367 @node Publishing, Experimental Functions, Interactive Lisp, More about Planner
3368 @section Publishing
3370 You can publish your planner files to HTML and put them on a normal
3371 web server--no special server support required. This gives you an easy
3372 way to keep other people up to date on your tasks, keep a web log, or
3373 simply organize information.
3375 Publish your planner wiki with @kbd{C-c C-p}
3376 (@code{muse-project-publish}). You can publish individual files with
3377 @kbd{C-c C-t} (@code{muse-publish-this-file}). To automatically publish
3378 files when you save them, add the following code to your
3379 @file{~/.emacs}:
3381 @example
3382 (eval-after-load "muse-mode"
3383   (add-hook 'after-save-hook
3384             #'(lambda ()
3385                 (when (planner-derived-mode-p 'muse-mode)
3386                   (muse-project-publish nil)))
3387             nil t))
3388 @end example
3390 Published files are stored in the path specified by
3391 @code{muse-project-alist} for your Planner project.  Just copy the
3392 contents of this directory to your webserver, and you're all set! Of
3393 course, publishing is completely optional.
3395 Here are some more features related to publishing:
3397 @menu
3398 * Publishing Planner pages::    planner-publish.el
3399 * Publishing Calendars::        planner-calendar.el
3400 * Authz Access Restriction::    planner-authz.el
3401 * RSS Publication::             Sharing notes with planner-rss.el
3402 * iCal Task Publication::       Sharing tasks with planner-ical.el
3403 * RDF Publication::             planner-rdf.el
3404 @end menu
3407 @node Publishing Planner pages, Publishing Calendars, Publishing, Publishing
3408 @comment  node-name,  next,  previous,  up
3409 @subsection Publishing Planner pages
3410 @cindex publishing
3411 @cindex @file{planner-publish.el}, using
3413 The task of publishing Planner pages is handled by
3414 @file{planner-publish.el}.  It is loaded by default when Planner is
3415 loaded.  To publish an entire Planner project, set up
3416 @code{muse-project-alist} (@pxref{Creating Your Planner}) and hit
3417 @kbd{C-c C-p}.  To publish an individual page, hit @kbd{C-c C-t}.
3419 Publishing works by providing Muse with the settings and environment for
3420 Planner publishing.
3422 @subheading Styles provided
3424 The following publishing styles are available.
3426 @table @code
3428 @cindex publishing styles, planner-html
3429 @item planner-html
3430 Publish Planner pages to HTML.
3432 @cindex publishing styles, planner-xhtml
3433 @item planner-xhtml
3434 Publish Planner pages to XHTML.
3436 @cindex publishing styles, planner-xml
3437 @item planner-xml
3438 Publish Planner pages to XML.
3440 @end table
3442 @subheading Options provided
3444 The following options may be customized to enhance your publishing
3445 experience.
3447 @table @code
3449 @item planner-publish-markup-regexps
3450 List of markup rules for publishing Planner pages.
3452 @item planner-publish-markup-functions
3453 Specify which function to use for publishing different kinds of markup.
3455 @item planner-publish-markup-tags
3456 A list of custom HTML-like tags to recognize when publishing.
3458 @item planner-xml-markup-strings
3459 Strings that are inserted to publish XML markup.
3461 @item planner-xml-header
3462 Header used when publishing Planner XML files.
3463 This may be text or a filename.
3465 @item planner-xml-footer
3466 Footer used when publishing Planner XML files.
3467 This may be text or a filename.
3469 @item planner-html-markup-strings
3470 Strings that are inserted to publish HTML markup.
3472 @item planner-html-style-sheet
3473 CSS stylesheet elements used in Planner HTML and XHTML files.
3474 This can also be one or more @samp{<link>} tags.
3476 @item planner-html-header
3477 Header used when publishing Planner HTML files.
3478 This may be text or a filename.
3480 @item planner-html-footer
3481 Footer used when publishing Planner HTML files.
3482 This may be text or a filename.
3484 @item planner-xhtml-header
3485 Header used when publishing Planner XHTML files.
3486 This may be text or a filename.
3488 @item planner-xhtml-footer
3489 Footer used when publishing Planner XHTML files.
3490 This may be text or a filename.
3492 @item planner-html-inner-header
3493 Extra header section that can be embedded within
3494 @code{planner-html-header} and @code{planner-xhtml-header}.
3496 @item planner-html-inner-footer
3497 Extra header section that can be embedded within
3498 @code{planner-html-footer} and @code{planner-xhtml-footer}.
3500 @item planner-publish-prepare-regexps
3501 List of markup rules to apply before publishing a page with Planner.
3503 @item planner-publish-finalize-regexps
3504 List of markup rules to apply after publishing a page with Planner.
3506 @end table
3508 @node Publishing Calendars, Authz Access Restriction, Publishing Planner pages, Publishing
3509 @comment  node-name,  next,  previous,  up
3510 @subsection Publishing Calendars
3511 @cindex calendar, publishing
3512 @cindex @file{planner-calendar.el}, using
3514 To publish calendars in your day pages, it is necessary to do two steps.
3516 @itemize
3517 @item Add @code{(require 'planner-calendar)} to your configuration.
3518 @item Add a @samp{<calendar>} tag to either your header, footer, or
3519 @var{planner-day-page-template}, depending on where you want it to
3520 appear.
3521 @end itemize
3523 To display a calendar based on a different day (given here as DAYPAGE),
3524 use @code{<calendar page="DAYPAGE">}.
3526 To get arrows to previous and next months to show up, use
3527 @code{<calendar arrows="t">}.  The text in
3528 @var{planner-calendar-prev-month-button} and
3529 @var{planner-calendar-next-month-button} will be used for the arrows to
3530 the previous and next months, respectively.
3532 By default, Muse will not display the arrows properly, due to
3533 limitations in the special-escaping algorithm.  To work around this,
3534 remove the @samp{&} rule from @var{muse-xml-markup-specials}, or from
3535 @var{muse-html-markup-specials} if you are using the 3.02.6 version of
3536 Muse.
3538 It is also possible to create a symlink from the current day page to the
3539 page name specified by @var{planner-calendar-today-page-name}.  To
3540 accomplish this, add the following to your configuration.
3542 @example
3543 (eval-after-load "muse-publish"
3544   '(add-hook 'muse-after-publish-hook
3545              'planner-calendar-create-today-link))
3546 @end example
3548 @subheading Options
3550 @defopt planner-calendar-prev-month-button
3551 HTML text used for previous month buttons.
3552 @end defopt
3554 @defopt planner-calendar-next-month-button
3555 HTML text used for next month buttons.
3556 @end defopt
3558 @defopt planner-calendar-day-header-chars
3559 Number of characters to use for day column header names.
3560 @end defopt
3562 @defopt planner-calendar-today-page-name
3563 Default name for published today page link.
3564 @end defopt
3566 @subheading Functions
3568 @defun planner-calendar-create-today-link
3569 Add this function to @code{muse-after-publish-hook} to
3570 create a ``today'' soft-link to the newest published planner day page,
3571 on operating systems that support POSIX @command{ln}.
3572 @end defun
3574 @node Authz Access Restriction, RSS Publication, Publishing Calendars, Publishing
3575 @comment  node-name,  next,  previous,  up
3576 @subsection Authz Access Restriction
3577 @cindex @file{planner-authz.el}, using
3578 @cindex Mason, restricting portions with
3579 @cindex access, restricting
3581 @file{planner-authz.el} was written by Andrew J. Korty in order to
3582 allow the easy restriction of portions of published pages.  It uses
3583 the HTML::Mason module available on CPAN
3584 (@url{http://www.cpan.org}).  Setting up HTML::Mason is
3585 outside the scope of this document.  Make sure that it works before
3586 trying out @file{planner-authz.el}.
3588 @file{planner-authz.el} modifies the behavior of
3589 @command{muse-project-publish} so that published pages follow access
3590 modifiers.
3592 This library lets you publish your planner pages while controlling
3593 access to certain portions of them to users you specify.  When you
3594 load this library, you gain access to two additional markup directives
3595 to use in your planner pages.  The @samp{<authz>} tag lets you
3596 restrict access to arbitrary content as follows:
3598 @example
3599 Here is a sentence everyone should see.  This sentence also
3600 contains no sensitive data whatsoever.  <authz users="ajk">This
3601 sentence, however, talks about my predilection for that French
3602 vanilla instant coffee that comes in the little tin, and I'm
3603 embarrassed for anyone else to know about that.</authz> And
3604 here's some more perfectly innocuous content.
3605 @end example
3607 You can use @samp{<authz>} tags to mark up entire paragraphs, tasks,
3608 notes, and anything else.  The tags are replaced with Mason code in
3609 the published pages.
3611 The @samp{#authz} directive restricts access to an entire page.  A Mason
3612 call is added to this page to generate a 403 error when someone not
3613 listed tries to access it.  Any notes or tasks on a
3614 @samp{#authz}-protected page are also wrapped in Mason code on linked
3615 pages. To add a @samp{#authz} directive to a Muse page, place
3616 @samp{#authz} followed by a space-delimited list of users on one
3617 line. For example:
3619 @example
3620 #authz ajk sacha
3621 @end example
3623 @subheading Options
3625 @defopt planner-authz-project-default
3626 Default access list for project pages (not day pages).  If a given
3627 project page doesn't contain a @samp{#authz} tag, it will receive the
3628 access list defined here.  If this variable is nil, all users will be
3629 allowed to view the page.  No corresponding variable is provided for
3630 day pages because it doesn't seem like you'd ever want to control
3631 access based on what day it was.  (But I will accept patches. :) Notes
3632 and tasks referencing pages without @samp{#authz} tags will also be
3633 restricted to the users listed here.
3634 @end defopt
3636 @defopt planner-authz-day-note-default
3637 Default access list for notes on day pages not associated with
3638 any project.  There is way to set a default for notes on project
3639 pages for the reason above; they would only be associated with
3640 date pages anyway.
3641 @end defopt
3643 @defopt planner-authz-day-task-default
3644 Same as @kbd{planner-authz-day-note-default}, but for tasks.
3645 @end defopt
3647 @subheading Functions
3649 @defun planner-authz-publish-index
3650 Publish an index for the planner marked up with Mason code.
3651 Only those links to pages which the remote user is authorized to
3652 access will be shown.
3653 @end defun
3655 @node RSS Publication, iCal Task Publication, Authz Access Restriction, Publishing
3656 @comment  node-name,  next,  previous,  up
3657 @subsection RSS Publication
3658 @cindex @file{planner-rss.el}, using
3659 @cindex notes, RSS
3660 @cindex RSS
3662 @file{planner-rss.el} allows you to publish your notes in the RSS 2.0
3663 XML format for blog syndication. You will also want to customize the
3664 following variables:
3666 To manually add the current note to all the matching RSS feeds, invoke
3667 @command{planner-rss-add-note}. You can specify a filename with the
3668 universal prefix, like this: @kbd{C-u M-x planner-rss-add-note}.
3670 If you use the @file{remember-planner.el} module to create notes, you
3671 can automatically publish new notes to RSS feeds by adding the
3672 following code to your @file{.emacs} (or @file{_emacs}).
3674 @example
3675 (add-to-list 'remember-planner-append-hook 'planner-rss-add-note t)
3676 @end example
3678 @subheading Options
3680 @defopt planner-rss-base-url
3681 Base absolute URL for published blog entries. Should include trailing
3682 @samp{/}.
3683 @end defopt
3685 @defopt planner-rss-category-feeds
3686 Rules for automatic categorization of posts and publishing to RSS
3687 files. A blog entry is matched against each condition. If it matches
3688 the regular expression or the function returns a non-nil value, the
3689 blog entry is copied into the specified file.
3690 @end defopt
3692 @defopt planner-rss-feed-limits
3693 A list of regular expressions that match feed filenames and the size
3694 and item limits for feeds that match. For example, you can use
3695 @samp{(("." nil 10))} to ensure that all feeds are limited to the 10
3696 most recent items.
3697 @end defopt
3699 @subheading Functions
3701 @file{planner-rss.el} defines the following interactive functions:
3703 @defun planner-rss-add-note @var{feed}
3704 Export the current note using @code{planner-add-item}. If @var{feed}
3705 is specified, add the entry to the specified file. Else, add the entry
3706 to all matching RSS feeds specified by
3707 @code{planner-rss-category-feeds}.
3708 @end defun
3710 @node iCal Task Publication, RDF Publication, RSS Publication, Publishing
3711 @comment  node-name,  next,  previous,  up
3712 @subsection iCal Publication
3714 iCal is an Internet Engineering Task Force (IETF) standard for
3715 calendaring and scheduling. @uref{http://www.ietf.org/rfc/rfc2445.txt}
3717 You can export your tasks to the iCal format using
3718 @file{planner-ical}. Add @code{(require 'planner-ical)} to your
3719 @file{~/.emacs}. Then you can use @kbd{M-x planner-ical-export-page}
3720 to display the iCal equivalent of tasks on a page, which you can then
3721 save to a file.
3723 To export today's tasks to a file in your publishing directory, add
3724 the following to your @file{~/.emacs}.
3726 @example
3727 (planner-ical-export-file
3728  (planner-today)
3729  (expand-file-name
3730    "tasks.ics"
3731    (muse-style-element :path (car (cddr (muse-project planner-project))))))
3732 @end example
3734 @subheading Functions
3736 @defun planner-ical-export-page page &optional file
3737 Export PAGE's tasks in the iCal format.
3738 If FILE is non-nil, results are saved to that file.
3739 If FILE is nil, results are displayed in a `planner-ical-export-buffer'.
3740 @end defun
3742 @defun planner-ical-export-this-page
3743 Display the tasks on the current page in iCal format.
3744 @end defun
3746 @node RDF Publication,  , iCal Task Publication, Publishing
3747 @comment  node-name,  next,  previous,  up
3748 @subsection RDF Publication
3749 @cindex @file{planner-rdf.el}, using
3750 @cindex RDF, publishing to
3752 Put planner-rdf.el in a directory that is in your Emacs load-path and
3753 the following into your ~/.emacs file:
3755 @example
3756 (require 'planner-rdf)
3757 (eval-after-load "muse-publish"
3758   '(progn
3759      (add-hook 'muse-after-publish-hook
3760                'planner-rdf-publish-file)
3761      (add-hook 'muse-after-publish-hook
3762                'planner-rdf-publish-index)))
3763 @end example
3765 @menu
3766 * Publishing with planner-rdf::  
3767 * planner-rdf Tags::            
3768 * planner-rdf Usage Examples::  
3769 @end menu
3771 @node Publishing with planner-rdf, planner-rdf Tags, RDF Publication, RDF Publication
3772 @subsubsection Publishing with planner-rdf
3774 Planner-rdf is now included in the normal Planner publishing process.
3775 Pressing @key{C-p} will create a .owl and a .rdf file for every planner
3776 file. Additionally it creates an index, @file{index.rdf}.
3778 By default all generated files will be stored in the normal Planner
3779 publishing directory, where the HTML files end up. If you would ike to
3780 change that, set the variable @code{planner-rdf-directory} to the desired
3781 location.
3783 The generated files:
3785 @itemize
3786 @item
3787 @file{index.rdf} - a collection with pointers to the
3788 @file{<plan-page>.rdf} files.
3789 @item
3790 @file{<plan-page>.rdf} - contains Dublin Core metadata about the files
3791 related to the current Planner page. Currently it contains metadata
3792 about the source file, the Emacs plan page, the generated HTML page, and
3793 the generated OWL file.
3794 @item
3795 @file{<plan-page>.owl} - contains task and note data from the Planner
3796 file. Task information is stored completely. For notes, the note
3797 headline is stored.
3798 @end itemize
3800 @node planner-rdf Tags, planner-rdf Usage Examples, Publishing with planner-rdf, RDF Publication
3801 @subsubsection planner-rdf Tags
3803 Besides the factual information, e.g. the task status or description,
3804 planner-rdf extracts links (in the format @samp{[[...][...]]} or
3805 @samp{[[...]]}) and tags (@samp{@{@{...:...}@}@}) from tasks and notes
3806 (including the notes text). Links and tags provide context for the plan
3807 elements and so are stored and linked with the containing elements.
3809 Links point to locations that can be used to enrich the information in
3810 the Planner pages (e.g, by retrieving data from them and adding it),
3811 tags -- like the one for the task ids @samp{@{@{Tasks:198@}@}} -- can be
3812 used to express abstract qualities. Some examples:
3814 @itemize
3815 @item
3816 an @samp{@{@{audience:myteam@}@}} tag, can be used to restrict
3817 publishing of items to a certain user group;
3818 @item a @samp{@{@{lang:de@}@}} tag, signifying the language of the text;
3819 @item
3820 a @samp{@{@{location:Hamburg@}@}} tag, can be used to make geographic
3821 reference to an entity that is not stored in your address book, bbdb.
3822 @end itemize
3824 What tags to use is up to the user. Planner-rdf makes no assumptions
3825 about them, it just extracts and stores them. Only the applications
3826 using the data know what to do with them.
3828 @node planner-rdf Usage Examples,  , planner-rdf Tags, RDF Publication
3829 @subsubsection Usage Examples
3831 Report generation with OpenOffice
3833 The Perl file @file{this-week.pl}
3834 (@url{http://www.rainervolz.de/planner-rdf/this-week.pl}) creates a
3835 simple report for the current week. The script extracts task and note
3836 information from the generated OWL files and inserts it into a simple
3837 OpenOffice Writer document. Nothing fancy, just a proof of concept, to
3838 show how planner-rdf can be used to integrate Planner Mode with other
3839 applications.
3841 Besides Perl and OpenOffice you'll need the Redland RDF Application
3842 Framework (@url{http://www.redland.opensource.ac.uk/}). It is used to
3843 process the RDF data. Redland is small, but powerful, and available
3844 for many platforms and languages.
3846 As an example the application loads the RDF data each time it is run.
3847 In the real world you probably would use Redland to store the Planner
3848 data in a database, to save the loading step each time you access the
3849 data.
3851 Importing Planner data into Protege
3853 Protege is a popular ontology editor and knowledge management
3854 application. A simple way to import data into it, is to provide a OWL
3855 file that contains the data as well as the schema. To do this:
3857 @itemize
3858 @item
3859 Use @file{planner2protege.pl}
3860 (@url{http://www.rainervolz.de/planner-rdf/planner2protege.pl}) to
3861 combine all OWL files into a single one.
3862 @item
3863 Use CWM (@url{http://www.w3.org/2000/10/swap/doc/cwm.html}) to combine
3864 schema and data, with @code{python cmw --rdf planner-rdf.owl
3865 planner-data.owl --think --rdf >planner2.owl}
3866 @end itemize
3868 Not the most straightforward process, but it works. The resulting file,
3869 here planner2.owl, can then be loaded into Protege.
3871 @node Experimental Functions,  , Publishing, More about Planner
3872 @comment  node-name,  next,  previous,  up
3873 @section Experimental Functions
3874 @cindex @file{planner-experimental.el}, using
3875 @cindex experimental functions, Planner
3877 These functions are experimental. This means that they may not do
3878 exactly what you expect them to do, so keep backups, be careful, and
3879 don't blame us.
3881 To use these functions, make sure that @file{planner-experimental.el} is
3882 in your load path, and add this to your @file{.emacs} (or
3883 @file{_emacs}):
3885 @example
3886 (require 'planner-experimental)
3887 @end example
3889 @subheading Functions
3891 @file{planner-experimental.el} defines the following interactive
3892 functions:
3894 @defun planner-search-notes-next-match
3895 Jump to the next matching entry.  Call after
3896 @code{planner-search-notes}.
3897 @end defun
3899 @defun planner-search-notes-previous-match
3900 Jump to the previous matching entry.  Call after
3901 @code{planner-search-notes}.
3902 @end defun
3904 @defun planner-remove-duplicates
3905 Remove duplicate tasks.
3906 @end defun
3908 @file{planner-experimental.el} does not define any keybindings.
3910 @node Managing Your Information, Advanced Configuration, More about Planner, Top
3911 @comment  node-name,  next,  previous,  up
3912 @chapter Managing Your Information
3914 Planner can be integrated with other Emacs and even some non-Emacs
3915 programs by loading additional modules. You can pick and choose from
3916 these modules, choosing those that work with programs you use and that
3917 produce information you want to have included in your Planner pages.
3919 @menu
3920 * E-mail::                      Linking notes and tasks to messages
3921 * Scheduling and Time::         Tracking appointments and where your time goes
3922 * Finances::                    Display your account balances and more
3923 * Contacts and Conversations::  BBDB and ERC
3924 * Tracking Research and Resources::  The Web, bibliographies, and bookmarks
3925 * Tracking Development::        
3926 @end menu
3928 @node E-mail, Scheduling and Time, Managing Your Information, Managing Your Information
3929 @comment  node-name,  next,  previous,  up
3930 @section E-mail
3932 Planner can work together with several different Emacs e-mail
3933 clients. If you load the appropriate module for the e-mail client you
3934 use, then your notes and tasks can be annotated with information
3935 pointing to the specific e-mail message you were reading when you
3936 created that note or task. When you are looking at the note or task, you
3937 will be able to jump straight to that message.
3939 @menu
3940 * Unix mail::                   Unix mailboxes: planner-unix-mail.el              
3941 * Gnus::                        Gnus mail and news reader: planner-gnus.el
3942 * VM::                          VM mail reader: planner-vm.el
3943 * Wanderlust::                  Wanderlust mail reader: planner-wl.el
3944 * MH-E::                        MH-E mail reader: planner-mhe.el
3945 * Rmail::                       Rmail: planner-rmail.el
3946 @end menu
3949 @node Unix mail, Gnus, E-mail, E-mail
3950 @comment  node-name,  next,  previous,  up
3951 @subsection Unix mail
3952 @cindex mbox, using Planner with
3953 @cindex Unix mail, using Planner with
3954 @cindex mail client, using Planner with
3956 This module supports links from any kind of Unix mailbox (mbox). To
3957 use this module, make sure that @file{planner-unix-mail.el} is in your
3958 load path and add this to your @file{.emacs} (or @file{_emacs}):
3960 @example
3961 (require 'planner-unix-mail)
3962 @end example
3964 Unix mail URLs are of the form:
3966 @example
3967 ;; mail://PATH/TO/INBOX/message-id
3968 @end example
3970 Annotations will be of the form:
3972 @smallexample
3973 [[mail://PATH/TO/INBOX/E1AyTpt-0000JR-LU%40sacha.ateneo.edu][E-mail from Sacha Chua]]
3974 @end smallexample
3976 @file{planner-unix-mail.el} does not define any interactive functions or
3977 create any new keybindings.
3979 @node Gnus, VM, Unix mail, E-mail
3980 @comment  node-name,  next,  previous,  up
3981 @subsection Gnus
3982 @cindex Gnus, using Planner with
3983 @cindex mail client, using Planner with, Gnus
3985 To use this module, make sure that it is in your load path and put
3986 this in your @file{.emacs} (or @file{_emacs}):
3988 @example
3989 (require 'planner-gnus)
3990 (planner-gnus-insinuate)
3991 @end example
3993 With this module loaded, when you create tasks from Gnus summary or
3994 message buffers, the tasks will be annotated with information from the
3995 message you were looking at when you created each task. A link will also
3996 be created on your planner page that you can select in order to return
3997 to the message.
3999 So, the created task will look something like this:
4001 @smallexample
4002 #A34 _ Send writing to publishme.com from
4003 [[gnus://alt.books.beatgeneration/<Ifo5c.24632$F9.9567@@nwrddc01.gnilink.net>][E-Mail
4004 from editor@@verizon.net]] @{@{Tasks:71@}@} ([[Writing]])
4005 @end smallexample
4007 This module also binds @kbd{C-c C-t} in the Gnus summary and article
4008 views to the command to create a new task.
4010 @file{planner-gnus.el} does not define any interactive functions.
4012 For more information about Gnus, see @inforef{Top, The Gnus Newsreader,
4013 gnus}.
4015 @node VM, Wanderlust, Gnus, E-mail
4016 @comment  node-name,  next,  previous,  up
4017 @subsection VM
4018 @cindex VM, using Planner with
4019 @cindex mail client, using Planner with, VM
4021 To use this module, make sure that @file{planner-vm.el} is in your load
4022 path and add this to your @file{.emacs} (or @file{_emacs}):
4024 @example
4025 (require 'planner-vm)
4026 @end example
4028 VM URLs are of the form:
4030 @example
4031 vm://path/to/inbox/message-id
4032 @end example
4034 Annotations will be of the form:
4036 @smallexample
4037 [[vm://home/test/INBOX/<E1AyTpt-0000JR-LU@@sacha.ateneo.edu>][E-mail from Sacha Chua]]
4038 @end smallexample
4040 @file{planner-vm.el} does not define any interactive functions or
4041 keybindings.
4044 @node Wanderlust, MH-E, VM, E-mail
4045 @comment  node-name,  next,  previous,  up
4046 @subsection Wanderlust
4047 @cindex Wanderlust, using Planner with
4048 @cindex mail client, using Planner with, Wanderlust
4050 To use this module, make sure that @file{planner-wl.el} is in your
4051 load path and add this to your @file{.emacs} (or @file{_emacs}):
4053 @example
4054 (require 'planner-wl)
4055 @end example
4057 Then, when you call @kbd{M-x planner-create-task-from-buffer} from
4058 Wanderlust summary or message buffers, the task will be created with
4059 the correct annotation.
4061 @file{planner-wl} does not define any interactive functions.
4063 @subheading Keys
4065 To add keybindings to Wanderlust, call:
4067 @example
4068 (planner-wl-insinuate)
4069 @end example
4071 This binds @kbd{F} to @command{planner-create-task-from-buffer}.
4073 @node MH-E, Rmail, Wanderlust, E-mail
4074 @comment  node-name,  next,  previous,  up
4075 @subsection MH-E
4076 @cindex MH-E, using Planner with
4077 @cindex mail client, using Planner with, MH-E
4079 To use this module, make sure that @file{planner-mhe.el} is in your
4080 load path and add this to your @file{.emacs} (or @file{_emacs}):
4082 @example
4083 (require 'planner-mhe)
4084 @end example
4086 Then, when you call @kbd{M-x planner-create-task-from-buffer} from
4087 MH-E summary or message buffers, the task will be created with
4088 the correct annotation.
4090 @file{planner-mhe} does not define any interactive functions.
4092 @node Rmail,  , MH-E, E-mail
4093 @comment  node-name,  next,  previous,  up
4094 @subsection Rmail
4095 @cindex Rmail, using Planner with
4096 @cindex mail client, using Planner with, Rmail
4098 To use this module, make sure that @file{planner-rmail.el} is in your
4099 load path and add this to your @file{.emacs} (or @file{_emacs}):
4101 @example
4102 (require 'planner-rmail)
4103 @end example
4105 Rmail URLs are of the form:
4107 @example
4108 rmail://message-id
4109 @end example
4111 Annotations will be of the form:
4113 @smallexample
4114 [[rmail://<E1AyTpt-0000JR-LU@@sacha.ateneo.edu>][E-mail from Sacha Chua]]
4115 @end smallexample
4117 @file{planner-rmail.el} does not define any interactive functions or
4118 create any new keybindings.
4120 For more information about Rmail, see @inforef{Rmail, Reading Mail With
4121 Rmail, Emacs}.
4123 @node Scheduling and Time, Finances, E-mail, Managing Your Information
4124 @comment  node-name,  next,  previous,  up
4125 @section Scheduling and Time
4127 @menu
4128 * Diary::                       Using the Emacs diary
4129 * Appointments::                Appointments in plan pages: planner-appt.el
4130 * Timeclock::                   Time tracking: planner-timeclock.el
4131 * schedule.el::                 Project completion: planner-schedule.el
4132 @end menu
4135 @node Diary, Appointments, Scheduling and Time, Scheduling and Time
4136 @comment  node-name,  next,  previous,  up
4137 @subsection Diary
4138 @cindex diary, using Planner with
4139 @cindex @file{planner-diary.el}, using
4141 If you use Emacs's diary feature, Planner-Diary could be helpful for
4142 you. It puts all diary entries for the current day in the @samp{*
4143 Diary} section of your day plan page. This section is updated every
4144 time you display the file in Emacs. By default the diary section of
4145 past pages is not updated; it's pretty unlikely that you want to add
4146 new diary entries for the past. (@pxref{Diary, , , Emacs, GNU Emacs
4147 Manual})
4149 If you want to use @file{planner-diary.el}, make sure the file is in
4150 your load path and add this to your @file{.emacs} (or @file{_emacs}):
4152 @example
4153 (require 'planner-diary)
4154 @end example
4156 @file{planner-diary.el} needs @command{fancy-diary-display}.  To use
4157 @command{fancy-diary-display}, add this to your @file{.emacs} (or
4158 @file{_emacs}):
4160 @example
4161 (add-hook 'diary-display-hook 'fancy-diary-display)
4162 @end example
4164 You can use Planner-Diary in two different ways:
4166 @enumerate
4168 @item
4169 If you want the saved files to contain your entries and not just a line
4170 of Lisp, add the following lines to your @file{.emacs} (or @file{_emacs}):
4172 @example
4173 (setq planner-diary-use-diary t)
4174 (planner-diary-insinuate)
4175 @end example
4177 You should also customize or set @code{planner-day-page-template} to
4178 include a @samp{* Diary}:
4180 @example
4181 (setq planner-day-page-template
4182  "* Tasks\n\n\n* Schedule\n\n\n* Diary\n\n\n* Notes")
4183 @end example
4185 @item
4186 (GNU EMACS ONLY) You can put the following line of Lisp code in your
4187 day plan pages to display your diary entries:
4189 @example
4190 <lisp>(planner-diary-entries-here)</lisp>
4191 @end example
4193 You can do this automatically for all day plan pages:
4195 @smallexample
4196 (setq planner-day-page-template
4197   "* Tasks\n\n\n* Diary\n\n<lisp>(planner-diary-entries-here)</lisp>
4198 \n* Notes")
4199 @end smallexample
4201 When you open a day plan page outside Emacs, you will see the line of
4202 Lisp code and not your diary entries.
4204 @end enumerate
4206 If you want to see your diary entries for more than just one day, set
4207 @code{planner-diary-number-of-days} accordingly.  This works for either
4208 of the two approaches.
4210 @kbd{C-c C-e} updates the diary sections.  @kbd{C-u C-c C-e} forces an
4211 update---it inserts the diary section for the day, even if the day is in
4212 the past or if there is no @samp{Diary} section in the buffer.
4214 If you want to use the Cal-Desk package, simply follow the instructions
4215 in @file{cal-desk.el}.  If you get the Cal-Desk layout from the Calendar
4216 buffer, you get it in the day plan buffer, too.
4218 If you use Planner-Diary, you might consider using the Calendar support
4219 of Planner. (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}) To get
4220 Calendar integration, add this to your @file{.emacs} (or @file{_emacs}):
4222 @example
4223 (planner-insinuate-calendar)
4224 @end example
4226 If @code{planner-diary-create-section-flag} is non-nil, sections are
4227 always inserted if necessary.
4229 @subheading Options
4231 @defopt planner-diary-create-section-flag
4232 Non-nil means create the requested diary sections if they do not
4233 exist. By default, planner-diary tries to create the section. If you
4234 want more control over your pages, you can set this to nil. Trying to
4235 write a diary section to a page that does not have it yet will then
4236 result in an error.
4237 @end defopt
4239 By default, planner-diary lists only the appointments you have on that
4240 day. If you want the date headers included even when showing the diary
4241 entries for a single day, set planner-diary-include-all-output to
4242 non-nil.
4244 @defopt planner-diary-include-all-output-flag
4245 Non-nil means don't omit any data when copying diary entries into day
4246 pages.
4247 @end defopt
4249 @subheading Functions
4251 @file{planner-diary.el} defines the following interactive functions:
4253 @defun planner-diary-add-entry date time text
4254 Prompt for a diary entry to add to @code{diary-file} on @var{date}.
4255 Uses @code{planner-annotation-functions} to make hyperlinks.
4256 @var{time} and @var{text} are used in the description."
4257 @end defun
4259 @defun planner-diary-insert-diary force
4260 Insert the fancy diary for the day into the day plan file. If
4261 @var{force} is non-nil, insert a diary section even if there is no
4262 @var{planner-diary-string} in the buffer.
4263 @end defun
4265 @defun planner-diary-insert-diary-maybe force
4266 Maybe insert the fancy diary for the day into the day plan file. If the
4267 current day is in the past and @var{force} is nil, don't do anything. If
4268 @var{force} is non-nil, insert a diary section even if there is no
4269 @code{planner-diary-string} in the buffer.
4270 @end defun
4272 @defun planner-diary-insert-appts force
4273 Insert the diary appointments for the day into the day plan file.  If
4274 @var{force} is non-nil, insert a diary appointments section even if
4275 there is no @code{planner-diary-appts-string} in the buffer.
4276 @end defun
4278 @defun planner-diary-insert-appts-maybe force
4279 Maybe insert the diary appointments for the day into the day plan file.
4280 If the current day is in the past and @var{force} is nil, don't do
4281 anything.  If @var{force} is non-nil, insert a diary appointments
4282 section even if there is no @code{planner-diary-appts-string} in the
4283 buffer.
4284 @end defun
4286 @defun planner-diary-insert-cal-desk force
4287 Insert the cal-desk diary for the day into the day plan file.  If
4288 @var{force} is non-nil, insert a cal-desk diary section even if there is
4289 no @code{planner-diary-cal-desk-string} in the buffer.
4290 @end defun
4292 @defun planner-diary-insert-cal-desk-maybe force
4293 Maybe insert the cal-desk diary for the day into the day plan file.  If
4294 the current day is in the past and @var{force} is nil, don't do
4295 anything.  If @var{force} is non-nil, insert a cal-desk appointments
4296 section even if there is no @code{planner-diary-cal-desk-string} in the
4297 buffer.
4298 @end defun
4300 @defun planner-diary-insert-public force
4301 Insert the public diary for the day into the day plan file.  If
4302 @var{force} is non-nil, insert a public diary section even if there is
4303 no @code{planner-diary-public-string} in the buffer.
4304 @end defun
4306 @defun planner-diary-insert-public-maybe force
4307 Maybe insert the public diary for the day into the day plan file.  If
4308 the current day is in the past and @var{force} is nil, don't do
4309 anything.  If @var{force} is non-nil, insert a public appointments
4310 section even if there is no @code{planner-diary-public-string} in the
4311 buffer.
4312 @end defun
4314 @defun planner-diary-insert-private force
4315 Insert the private diary for the day into the day plan file.  If
4316 @var{force} is non-nil, insert a private diary section even if there is
4317 no @code{planner-diary-private-string} in the buffer.
4318 @end defun
4320 @defun planner-diary-insert-private-maybe force
4321 Maybe insert the private diary for the day into the day plan file.  If
4322 the current day is in the past and @var{force} is nil, don't do
4323 anything.  If @var{force} is non-nil, insert a private appointments
4324 section even if there is no @code{planner-diary-private-string} in the
4325 buffer.
4326 @end defun
4328 @defun planner-diary-insert-all-diaries force
4329 Update all diary sections in a day plan file.  If @var{force} is
4330 non-nil, insert a diary section even if there is no section header.  It
4331 only inserts diaries if the corresponding @code{planner-diary-use-}*
4332 variable is @samp{t}.
4333 @end defun
4335 @defun planner-diary-insert-all-diaries-maybe force
4336 Update all diary sections in a day plan file.  If the current day is in
4337 the past and @var{force} is nil, don't do anything.  If @var{force} is
4338 non-nil, insert a diary section even if there is no section header.  It
4339 only inserts diaries if the corresponding @code{planner-diary-use-}*
4340 variable is @samp{t}.
4341 @end defun
4343 @defun planner-diary-show-day-plan-or-diary
4344 Show the day plan or diary entries for the date under point in calendar.
4345 Add this to @code{calendar-move-hook} if you want to use it.  In that
4346 case, you should also @command{remove-hook} @samp{planner-calendar-show}
4347 from @code{calendar-move-hook}.
4348 @end defun
4350 @subheading Keys
4352 @file{planner-diary.el} adds the following keybinding to Planner, if
4353 @command{planner-diary-insinuate} is in your @file{.emacs} (or
4354 @file{_emacs}):
4356 @itemize
4358 @item
4359 @kbd{C-c C-e} updates the diary sections.
4361 @end itemize
4363 @menu
4364 * Planner-Diary Advanced Features::  
4365 @end menu
4367 @node Planner-Diary Advanced Features,  , Diary, Diary
4368 @comment  node-name,  next,  previous,  up
4369 @subsubsection Planner-Diary Advanced Features
4370 @cindex diary, using Planner with
4371 @cindex @file{planner-diary.el}, advanced features
4373 The features described here are part of the development version.  They
4374 are subject to change without notice.  They may be buggy.  The
4375 documentation may be inaccurate.  Use at your own risk.
4377 There is a lot of code redundancy in the development version.  This is
4378 intentional and makes it easier to change the code for one type of diary
4379 section without breaking others.
4381 @subheading Diary views
4383 @cindex @file{planner-diary.el}, views
4384 Currently Planner-Diary supports six different views of your diary
4385 entries:
4387 @enumerate
4388 @item
4389 Ordinary fancy diary display (what you get by pressing @kbd{d} in the
4390 calendar buffer with @code{fancy-diary-display} switched on)
4392 @item
4393 Schedule/Appointments (all entries from 1 that have a time assigned to
4394 them
4396 @item
4397 Diary without appts (1 without 2)
4399 @item
4400 cal-desk display (appts on top, non appts entries at bottom)
4402 @item
4403 A private diary (same as 1, but uses a different diary-file)
4405 @item
4406 A public diary (same as 1, but uses a different diary-file)
4407 @end enumerate
4409 Put the following line of Lisp code in your day plan pages to display
4410 your diary entries:
4412 @example
4413 <lisp>(planner-diary-entries-here)</lisp>
4414 @end example
4416 The function @code{planner-diary-entries-here} takes two optional
4417 arguments---the diary file you want to use and the number of days you
4418 want to display.
4420 @subheading Exporting Planner-specific Diary files
4422 @cindex @file{planner-diary.el}, exporting entries
4423 If you would like to export diary entries from your Planner pages to
4424 separate Diary files, add @code{(require 'planner-export-diary)} to your
4425 config.  The following steps describe the usage of the functions and
4426 options contained in this file.
4428 @enumerate
4430 @item
4431 Customize @code{planner-export-diary-file}.  The default value is
4432 ``~/diary.planner''.
4434 @item
4435 Add the following line to your main Diary file (default: ``~/diary'').
4437 @example
4438 #include ~/diary.planner
4439 @end example
4441 @item
4442 Then, call @command{M-x planner-export-diary-future} whenever you want
4443 future diary entries published. You can automatically publish entries by
4444 adding either of the following to your .emacs.
4446 @itemize
4448 @item (planner-export-diary-future)
4449 Publish future entries on startup.
4451 @item (add-hook 'planner-mode-hook 'planner-export-diary-setup)
4452 Publish future entries whenever you save a Planner file.
4454 @end itemize
4456 @end enumerate
4458 @node Appointments, Timeclock, Diary, Scheduling and Time
4459 @comment  node-name,  next,  previous,  up
4460 @subsection Appointments
4461 @cindex appointments
4462 @cindex @file{planner-appt.el}, using
4464 If you would like to use planner for your appointment alerts
4465 instead of using the diary system, you might like to try
4466 @file{planner-appt}.
4468 According to your preferences, you may choose from two different
4469 approaches. Appointments in task descriptions on today's plan
4470 page are like this:
4472 @example
4473 #A   _ @@12:45 Do something (TaskPool)
4474 @end example
4476 @noindent
4477 and appointments in today's schedule section are like this:
4479 @example
4480 * Schedule
4482   9:00 | 12:00 | Read Simmel's Philosophy of Money
4483 @@12:45 |       | Do Something Else
4484 @@13:00 | 14:00 | lunch
4485 @end example
4487 @noindent
4488 You can even use both at the same time if you like.
4490 @c Jim Ottaway <j.ottaway@lse.ac.uk>: Changed these kinds of heading
4491 @c back to @unnumberedsec, but left the originals commented out in
4492 @c case there was a good reason for the @strong formatting.
4494 @c @noindent
4495 @c @strong{Usage}
4496 @unnumberedsubsubsec Usage
4498 In the file where you configure Planner, add one of the following.
4500 @itemize
4501 @item
4502 For task-based appointments: @code{(planner-appt-use-tasks)}
4503 @item
4504 For schedule-based appointments: @code{(planner-appt-use-schedule)}
4505 @item
4506 For both task- and schedule-based appointments:
4507 @code{(planner-appt-use-tasks-and-schedule)}
4508 @end itemize
4510 @noindent
4511 And finally if you want everything to be updated automatically add:
4513 @example
4514 (planner-appt-insinuate)
4515 @end example
4517 If you don't want to do the insinuation then you can call:
4519 @example
4520 M-x planner-appt-update
4521 @end example
4523 @noindent
4524 after editing appointments on the page (note that this is not
4525 necessary if you use tasks for the appointments and you don't edit
4526 the task descriptions outside of @code{planner-edit-task-description}).
4528 Try both methods; if you find that you prefer one over the
4529 other, use one of the specific @code{planner-appt-use-} functions, as
4530 there are some performance gains when using one method exclusively.
4532 @menu
4533 * Task-based Appointments::     
4534 * Schedule-based Appointments::  
4535 * Viewing Appointments::        
4536 * Appointment Updating on Save::  
4537 * Appointment and Calendar Integration::  
4538 * Appointment Hooks::           
4539 @end menu
4542 @node Task-based Appointments, Schedule-based Appointments, Appointments, Appointments
4543 @comment  node-name,  next,  previous,  up
4544 @subsubsection Task-based Appointments
4545 @cindex appointments, task-based
4546 @cindex task-based appointments
4548 A task has an appointment if it looks like this:
4550 @example
4551 #A   _ @@12:45 Do something (TaskPool)
4552 @end example
4554 @noindent
4555 i.e., if it has @@ followed by a time at the beginning.  This means
4556 the task is a regular appointment, and will not be carried forward
4557 at the start of a new day.
4559 Alternatively, it may have a !, like this:
4561 @example
4562 #A   _ !12:45 Do something else (TaskPool)
4563 @end example
4565 @noindent
4566 This makes it a "nagging" appointment, which @emph{will} be carried
4567 forward.  It will, however, lose the appointment time in the
4568 process.
4570 This may seem like a strange feature, but here is Henrik's
4571 reasoning:
4573 @quotation
4574 Sometimes I have a task that I want to do at a certain time, so I
4575 make it an appointment.  If I don't get around to doing it anyway,
4576 I want it to be carried forward.  Basically, I sometimes use
4577 appointments on tasks to annoy me until I get them done. :)
4578 @end quotation
4580 You can edit, move and delete tasks with the usual functions, and
4581 appointments will be updated automatically.
4583 You can update all task appointments on your page with
4585 @example
4586 M-x planner-appt-update
4587 @end example
4589 @c @noindent
4590 @c @strong{Cyclic Entries}
4592 @unnumberedsubsubsec Cyclic Entries
4593 @cindex appointments, cyclic task entries
4595 If you have @file{planner-cyclic} (@pxref{Cyclic Tasks}) loaded, entries
4596 in your cyclical tasks file such as
4598 @example
4599 Friday #A _ @@12:45 staff meeting
4600 @end example
4602 @noindent
4603 will appear every Friday and there will be an appointment alert set
4606 @c @noindent
4607 @c @strong{Appointments Section}
4608 @unnumberedsubsubsec Appointments Section
4609 @cindex appointments, appointments section
4611 You can have all task-based appointments copied to a separate section,
4612 providing an overview of your appointments.
4614 To do this, add
4616 @example
4617 (setq planner-appt-task-use-appointments-section-flag t)
4618 @end example
4620 @noindent to your configuration, or use @kbd{M-x customize-variable}.
4622 The variable @code{planner-appt-task-appointments-section} is the name
4623 of the section where the appointments will be copied.  By default, it is
4624 set to @code{"Schedule"}, which means that task appointments will be
4625 intermingled with schedule entries.
4627 It is also a good idea to add the section you wish to use to
4628 @code{planner-day-page-template} in order to control where that section
4629 will appear on the page (otherwise it will appear at the top).
4631 The format of the appointments follows that of a schedule; if you
4632 don't like the way it looks, you can write something different and set
4633 @code{planner-appt-format-appt-section-line-function} appropriately.
4634 See the documentation for
4635 @code{planner-appt-format-appt-section-line-function} for details.  It
4636 should be fairly easy to see what needs to be done if you look at the
4637 source for the default function (which is
4638 @code{planner-appt-format-appt-section-line}).
4640 If the section specified in
4641 @code{planner-appt-task-appointments-section} is the same as the
4642 schedule section specified in @code{planner-appt-schedule-section} (by
4643 default @code{"Schedule"}), the default formatting function adds a
4644 @samp{#} to the description so that one can visually distinguish
4645 appointments from the task list from those that have been added to the
4646 schedule.
4648 @node Schedule-based Appointments, Viewing Appointments, Task-based Appointments, Appointments
4649 @comment node-name,  next,  previous,  up
4650 @subsubsection Schedule-Based Appointments
4651 @cindex appointments, schedule-based
4652 @cindex schedule-based appointments
4654 Some scheduled tasks require reminders, others don't.  In this
4655 schedule:
4657 @example
4658 * Schedule
4660 9:00   | 12:00 | Read Simmel's Philosophy of Money
4661 @@12:45          Do Something Else
4662 @@13:00 | 14:00 | lunch
4663 @@14:30 |       | Meet jrs to discuss his dissertation
4664 @@16:00           Test Society seminar
4665 18:00            go home
4666 @end example
4668 @noindent
4669 those that have an @@ prefix will be added to the appointment
4670 reminder list; the others will not.  The formats that are
4671 recognized are fairly flexible, as you can see from the example.
4673 If you change your schedule, you can update the appointment list
4674 with
4676 @example
4677 M-x planner-appt-update
4678 @end example
4680 @noindent You can also have the schedule sorted as part of the update,
4681 if you have this in your configuration:
4683 @example
4684 (setq planner-appt-sort-schedule-on-update-flag t)
4685 @end example
4687 @c @noindent 
4688 @c @strong{Cyclical Entries}
4689 @unnumberedsubsubsec Cyclical Entries
4690 @cindex appointments, cyclic schedule entries
4692 You can also have cyclical schedule entries(@pxref{Cyclic Tasks}) if you
4695 @example
4696 (planner-appt-schedule-cyclic-insinuate)
4697 @end example
4699 @noindent to your configuration.
4701 If you put an entry in your cyclical task file like this
4703 @example
4704 Friday @@12:45 | 13:45 | Staff Meeting
4705 @end example
4707 @noindent
4708 then it will appear in your schedule every Friday, and an
4709 appointment alert will be set up.
4711 @node Viewing Appointments, Appointment Updating on Save, Schedule-based Appointments, Appointments
4712 @comment  node-name,  next,  previous,  up
4713 @subsubsection Viewing Appointments
4714 @cindex appointments, viewing
4716 The command @command{planner-appt-show-alerts} will show all appointment
4717 alerts currently scheduled.
4719 @subheading Functions
4721 There are two commands that show appointments in the future; the one
4722 displays them in a pop-up buffer, the other puts the information into
4723 the current day page.
4725 @deffn {Command} planner-appt-forthcoming-display &optional days
4726 Display a buffer of appointments for today and the next
4727 @var{days}. Optional prefix argument @var{days} is the number of days
4728 ahead to look. Its default value is defined by
4729 @code{planner-appt-forthcoming-days}.
4730 @end deffn
4732 @deffn {Command} planner-appt-forthcoming-update-section &optional days
4733 In today's plan page, add or update a list of forthcoming
4734 appointments. Optional prefix argument @var{days} is the number of
4735 days ahead to look. Its default value is defined by
4736 @code{planner-appt-forthcoming-days}.  The section heading to use is
4737 defined by @code{planner-appt-forthcoming-appt-section}.
4738 @end deffn
4740 @subheading Options
4742 @defopt planner-appt-forthcoming-days
4743 The number of days to look ahead for forthcoming appointments.  The
4744 default value is seven days.
4745 @end defopt
4747 @defopt planner-appt-forthcoming-appt-section
4748 The name of the section to use for inserting a list of forthcoming
4749 appts.  The default value is @code{"Forthcoming Appointments"}.
4750 @end defopt
4752 @defopt planner-appt-forthcoming-show-day-names-flag
4753 When non-nil (the default), day names will be shown in forthcoming
4754 appointments.
4755 @end defopt
4757 @defopt planner-appt-forthcoming-repeat-date-string
4758 String to insert for repeated dates.
4760 When there are multiple appointments for a date, the date is inserted
4761 in the first appointment and the others have this string in their date
4762 cell.
4764 If the string consists of anything other than whitespace, then a link
4765 to the day page for the appoinment is created.
4766 @end defopt
4768 @defopt planner-appt-forthcoming-look-at-cyclic-flag
4769 When non-nil, find forthcoming appointments in the cyclic diary file
4770 (@pxref{Cyclic Tasks}) as well as in plan pages. Default is @samp{t}.
4771 @end defopt
4773 @node Appointment Updating on Save, Appointment and Calendar Integration, Viewing Appointments, Appointments
4774 @comment  node-name,  next,  previous,  up
4775 @subsubsection Appointment Updating on Save
4776 @cindex appointments, updating on save
4778 @subheading Options
4780 @defopt planner-appt-update-appts-on-save-flag
4781 When non-nil, update appointment reminders whenever today's plan page is
4782 saved. Default value is @samp{nil}.
4783 @end defopt
4785 @node Appointment and Calendar Integration, Appointment Hooks, Appointment Updating on Save, Appointments
4786 @comment  node-name,  next,  previous,  up
4787 @subsubsection Appointment and Calendar Integration
4789 Not strictly part of appointment handling, but if one isn't using
4790 the diary, marking dates with plan pages seems to make sense.
4792 @subheading Functions
4794 @defun planner-appt-calendar-insinuate
4795 Add a hook to diary display so that dates in the calendar that have day
4796 pages are highlighted
4797 @end defun
4799 @node Appointment Hooks,  , Appointment and Calendar Integration, Appointments
4800 @comment  node-name,  next,  previous,  up
4801 @subsubsection Appointment Hooks
4803 @subheading Options
4805 @defvr {Hook} planner-appt-update-hook
4806 Hook run after @code{planner-appt-update} has updated the appointment
4807 list.
4808 @end defvr
4810 @node Timeclock, schedule.el, Appointments, Scheduling and Time
4811 @comment  node-name,  next,  previous,  up
4812 @subsection Timeclock
4813 @cindex @file{planner-timeclock.el}, using
4814 @cindex @file{planner-timeclock-summary.el}, using
4815 @cindex @file{planner-timeclock-summary-proj.el}, using
4816 @cindex timeclock, using Planner with
4818 This module allows you to clock in and clock out of your projects
4819 (@pxref{Time Intervals, , , Emacs, GNU Emacs Manual}). You can also
4820 generate reports with the @code{<timeclock-report>} tag. You may want
4821 to read the @ref{Keeping Track of Time} page to see how you can use
4822 planner-timeclock to produce detailed reports.
4824 @file{timeclock.el} is part of GNU Emacs.  If you are using XEmacs,
4825 please use the version of @file{timeclock.el} the comes with Planner in
4826 the @file{contrib} directory.
4828 With @file{planner-timeclock.el} loaded,
4829 @command{planner-task-in-progress} clocks in a task.  To clock out,
4830 use @command{planner-task-done} or @command{timeclock-out}.
4832 @file{planner-timeclock.el} defines the following keybindings:
4834 @itemize
4835 @item @kbd{C-c C-i}: @code{planner-task-in-progress}.
4836 @item @kbd{C-c C-o}: @code{timeclock-out}.
4837 @item @kbd{C-c C-T C-i}: @code{planner-timeclock-in}. (XEmacs)
4838 @item @kbd{C-c C-T C-o}: @code{timeclock-out}. (XEmacs)
4839 @item @kbd{C-c C-S-t C-i}: @code{planner-timeclock-in}. (GNU Emacs)
4840 @item @kbd{C-c C-S-t C-o}: @code{timeclock-out}. (GNU Emacs)
4841 @end itemize
4843 If you use @code{timeclock} a lot, you may also be interested in
4844 Dryice Liu's @file{planner-timeclock-summary.el}, which produces
4845 timeclock reports for planner files.
4847 Here is a sample report:
4849 @example
4850 Project               |     Time| Ratio| Task
4851 PlannerMaintenance    |  0:03:58|  1.1%| Merge doc patch
4852                       |  0:17:09|  5.0%| Track down subdirectories
4853                       |  0:18:11|  5.3%| Merge planner-timeclock-summary-proj.el
4854                Total: |  0:39:18| 11.4%|
4855 JapanCaseStudy        |  2:37:56| 45.6%| Prototype search result page
4856                       |  0:31:50|  9.2%| Update design documents
4857                Total: |  3:09:46| 54.8%|
4858 ChristmasLetter       |  1:46:37| 30.8%| Write and send my Christmas letters
4859                Total: |  1:46:37| 30.8%|
4860 LinuxPeople           |  0:10:29|  3.0%| Send questions for Linux in Education
4861                Total: |  0:10:29|  3.0%|
4862 @end example
4864 If you add @code{(require 'planner-timeclock-summary)} to your
4865 @file{~/.emacs}, you can then use it in two ways.
4867 @itemize
4869 @item Display a temporary buffer
4871 Call @code{planner-timeclock-summary-show} and Emacs will ask you which
4872 day's summary do you want. Choose the date as anywhere else of
4873 Emacs planner, and a tempory buffer will be displayed with the
4874 timeclock summary of that day.
4876 To review tasks over a date range, use
4877 @code{planner-timeclock-summary-show-range}. You can use a regexp or a
4878 function to filter tasks by calling
4879 @code{planner-timeclock-summary-show-range-filter}.
4881 @item Rewrite sections of your planner
4883 Choose this approach if you want timeclock summary to be in their
4884 own section and you would like them to be readable in your plain
4885 text files even outside Emacs. Caveat: The timeclock summary
4886 section should already exist in your template and will be rewritten
4887 when updated. Tip: Add @code{planner-timeclock-summary-section}
4888 (default: @samp{"Timeclock"}) to your @code{planner-day-page-template}.
4890 To use, call @code{planner-timeclock-summary-update} in the planner
4891 day page to update the section. If you want rewriting to be
4892 automatically performed, call
4893 @code{planner-timeclock-summary-insinuate} in your @file{.emacs} file.
4894 @end itemize
4896 @file{planner-timeclock-summary-proj.el} produces task / time
4897 breakdowns on plan pages. Reports are of the form:
4899 @example
4900 TASK 0 | duration
4901 TASK 1 | duration
4902  TOTAL | duration.
4903 @end example
4905 To use, add @code{(require 'planner-timeclock-summary)} to your
4906 @file{~/.emacs}. Call @code{planner-timeclock-summary-proj-current}
4907 from a project page. The report is inserted at the current position in
4908 the buffer. The function @code{planner-timeclock-summary-proj-section}
4909 does the same but the report is inserted inside a section called
4910 @samp{* Report}.
4912 @node schedule.el,  , Timeclock, Scheduling and Time
4913 @comment  node-name,  next,  previous,  up
4914 @subsection @file{schedule.el}
4915 @cindex @file{planner-schedule.el}, using
4916 @cindex @file{schedule.el}, using Planner with
4918 @file{planner-schedule.el} allows you to project task completion time.
4919 Tasks should be of the form:
4921 @example
4922 #A0 _ 2h Do something
4923 #B0 _ 1h30m Do something
4924 #B0 _ 2d Do something
4925 #B0 _ 2w Do something
4926 #B0 _ 10s Do something
4928 s: seconds, m: minutes, h: hours, d: days, w: weeks
4929 @end example
4931 @file{schedule.el} is included with Planner in the @file{contrib}
4932 directory, but you can alternatively get it from
4933 @url{http://www.newartisans.com/johnw/Emacs/schedule.el} if desired.
4935 @file{schedule.el} provides a single Lisp function,
4936 @code{schedule-completion-time}. It takes an Emacs time object and a
4937 quantity of seconds. It returns an Emacs time object that represents
4938 when the given number of seconds will be completed, assuming that work
4939 can only be done during work hours.
4941 The available work hours are affected by several factors:
4943 @enumerate
4945 @item
4946 If @file{timeclock.el} is being used, the amount of time left in the
4947 current work day (@code{timeclock-workday-remaining})
4948 (@pxref{Time Intervals, , , Emacs, GNU Emacs Manual})
4950 @item
4951 The amount of time in each work day (@code{schedule-workday})
4953 @item
4954 The definition of a work week (@code{schedule-week})
4956 @item
4957 Any holidays defined in the Emacs calendar
4958 (@pxref{Holidays, , , Emacs, GNU Emacs Manual})
4960 @item
4961 Any appointments in the Emacs diary
4962 (@pxref{Appointments, , , Emacs, GNU Emacs Manual})
4964 @end enumerate
4966 Taking all of the ``block out'' periods into account,
4967 @code{schedule-completion-time} will compute when the given number of
4968 seconds will be done, based on your current definitions of time
4969 available.
4971 As an example, here's a function which, given a list of durations
4972 in seconds, will return a list of completion times starting from
4973 the current moment:
4975 @example
4977   (defun compute-completion-times (&rest durations)
4978     ``Compute completion times for a list of DURATIONS (in seconds).''
4979     (let ((now (current-time)))
4980       (mapcar
4981        (function
4982         (lambda (dura)
4983           (setq now (schedule-completion-time now dura))))
4984        durations)))
4986 @end example
4988 To call this function, do:
4990 @example
4992 (compute-completion-times 3600 7200 3600)
4994 @end example
4996 @subheading Keys
4998 @file{planner-schedule.el} defines the following keybindings:
5000 @kbd{C-c RET} is bound to @command{planner-schedule-show-end-project}.
5001 @kbd{C-c C-m} is also bound to
5002 @command{planner-schedule-show-end-project}.
5004 In XEmacs, @command{planner-schedule-show-end-project} is bound to
5005 @kbd{C-c C-T c-e} and @kbd{C-c C-S-t C-e}.
5007 @subheading Functions
5009 @file{planner-schedule.el} defines the following interactive
5010 functions:
5012 @defun planner-schedule-show-end-project
5013 Display the estimated project completion time.
5014 @end defun
5016 @file{schedule.el} does not define any interactive functions, or
5017 keybindings.
5019 @node Finances, Contacts and Conversations, Scheduling and Time, Managing Your Information
5020 @comment  node-name,  next,  previous,  up
5021 @section Finances
5022 @cindex finances
5024 Currently, Planner provides one module dedicated to tracking your
5025 finances. This module works with a program called Ledger.
5027 @menu
5028 * Ledger::                      Personal finances: planner-ledger.el
5029 @end menu
5031 @node Ledger,  , Finances, Finances
5032 @comment  node-name,  next,  previous,  up
5033 @subsection Ledger
5034 @cindex finances
5035 @cindex @file{planner-ledger.el}, using
5036 @cindex @file{ledger}, using Planner with
5038 @file{planner-ledger.el} provides integration between planner and John
5039 Wiegley's ledger accounting program, which can be found at
5040 @url{http://newartisans.com/johnw/ledger.tar.gz}.
5042 To use planner-ledger to insert a ledger balance overview and a list
5043 of pending transactions into planner day pages, make sure that your
5044 day page includes sections that match
5045 @code{planner-ledger-balance-regexp} and
5046 @code{planner-ledger-pending-regexp}. Example:
5048 @example
5049 * Tasks
5051 * Ledger
5053 ** Pending transactions
5055 * Notes
5057 @end example
5059 You can manually update ledger sections with the
5060 @command{planner-ledger-insert-maybe} command.
5062 You can also automatically update ledger sections with the following
5063 hook:
5065 @example
5066 (add-hook 'planner-goto-hook 'planner-ledger-insert-maybe)
5067 @end example
5069 You can create ledger entries from specially-formatted tasks using
5070 @command{planner-ledger-add-entry-from-task}.  Tasks should be of the
5071 form @samp{payment due: payee, amount [comment]}.  Example:
5073 @example
5074 #A1 _ payment due: foobar, $1000.00 some comment here
5075 #A2 _ payment due: baz, 1000.00
5076 @end example
5078 @subheading Options
5080 @defopt planner-ledger-balance-accounts
5081 List of accounts to be included or excluded from the balance overview.
5082 @samp{+} includes all matching accounts, and @samp{-} excludes
5083 matching accounts.  See the documentation for
5084 @command{ledger-run-ledger} for more details.
5085 @end defopt
5087 @defopt planner-ledger-balance-regexp
5088 Regular expression matching section for ledger balance.  Do not store
5089 other data in this section, as it will be overwritten.
5090 @end defopt
5092 @defopt planner-ledger-pending-regexp
5093 Regular expression matching section for ledger balance.  Do not store
5094 other data in this section, as it will be overwritten.
5095 @end defopt
5097 @defopt planner-ledger-payment-task-regexp
5098 Regular expression matching special ledger tasks.
5099 @end defopt
5101 @subheading Functions
5103 @defun planner-ledger-insert-maybe
5104 Update any ledger sections on the current page.
5105 @end defun
5107 @defun planner-ledger-add-entry-from-task
5108 Create a ledger entry based on the task at point.  Task should match
5109 @code{planner-ledger-payment-task-regexp}.
5110 @end defun
5112 @node Contacts and Conversations, Tracking Research and Resources, Finances, Managing Your Information
5113 @comment  node-name,  next,  previous,  up
5114 @section Contacts and Conversations
5115 @cindex contacts
5116 @cindex conversations
5118 Planner has two modules available for keeping track of contact and
5119 conversation information. The first uses the Big Brother Database
5120 (BBDB), and the second uses Emacs Relay Chat (ERC). BBDB is a full
5121 contact database. ERC is a client for chatting online on Internet Relay
5122 Chat (IRC) networks. The ERC module for Planner will help you keep
5123 track of online conversations you have if you use ERC for those
5124 conversations, but does not by itself store contact information other
5125 than the time you had the conversation, the network and channel you were
5126 on when you had it, and maybe who you had it with. If you are looking
5127 for a way to manage your full address book, then @file{planner-bbdb.el}
5128 in combination with BBDB is what you are looking for.
5130 @menu
5131 * BBDB::                        Contacts: planner-bbdb.el
5132 * Emacs Relay Chat::            Internet Relay Chat: planner-erc.el
5133 @end menu
5135 @node BBDB, Emacs Relay Chat, Contacts and Conversations, Contacts and Conversations
5136 @comment  node-name,  next,  previous,  up
5137 @subsection BBDB
5138 @cindex @file{planner-bbdb.el}, using
5139 @cindex BBDB, using Planner with
5141 @file{planner-bbdb.el} allows you to refer to your contacts easily
5142 from within a planner page. @inforef{Top, the BBDB Manual, bbdb}.
5144 @samp{[[bbdb://Sacha.*Chua][Sacha]]}, for example, will be linked to
5145 the blog, web or net fields of the first matching BBDB record.
5147 @file{planner-bbdb.el} does not define any interactive functions, or
5148 keybindings.
5150 @node Emacs Relay Chat,  , BBDB, Contacts and Conversations
5151 @comment  node-name,  next,  previous,  up
5152 @subsection Emacs Relay Chat
5153 @cindex @file{planner-erc.el}, using
5154 @cindex ERC, using Planner with
5155 @cindex Emacs Relay Chat, using Planner with
5156 @cindex IRC, using Planner with
5157 @cindex Internet Relay Chat, using Planner with
5159 To use planner-erc, place @file{planner-erc.el} in your load path
5160 and add this to your @file{.emacs} (or @file{_emacs}):
5162 @example
5164 (require 'planner-erc)
5166 @end example
5168 IRC URLs may be of the following forms.
5170 @example
5171 irc://server/nick,isnick
5172 irc://server/#channel
5173 irc://server
5174 @end example
5176 Annotations will be in the following forms.
5178 @example
5179 [[irc://server/nick,isnick][Chat with nick on server#channel]]
5180 [[irc://server/nick,isnick][Chat with nick on server]]
5181 [[irc://server/#channel][Chat on server#channel]]
5182 [[irc://server][Chat on server]]
5183 @end example
5185 @file{planner-erc.el} does not define any interactive functions, or
5186 keybindings.
5188 @node Tracking Research and Resources, Tracking Development, Contacts and Conversations, Managing Your Information
5189 @comment  node-name,  next,  previous,  up
5190 @section Tracking Research and Resources
5192 Planner provides three modules for keeping track of information
5193 involving three specific tools: w3m, BibTeX, and @file{bookmark.el}.
5195 @menu
5196 * W3m::                         Web browser: planner-w3m.el
5197 * BibTeX::                      Bibliographies: planner-bibtex.el
5198 * Bookmark::                    Bookmarks: planner-bookmark.el
5199 @end menu
5201 @node W3m, BibTeX, Tracking Research and Resources, Tracking Research and Resources
5202 @comment node-name,  next,  previous,  up
5203 @subsection W3m
5204 @cindex @file{planner-w3m.el}, using
5205 @cindex w3m, using Planner with
5207 This module allows you to create tasks from a w3m buffer.
5209 @file{planner-w3m.el} does not define any interactive functions, or
5210 keybindings.
5212 @node BibTeX, Bookmark, W3m, Tracking Research and Resources
5213 @comment node-name,  next,  previous,  up
5214 @subsection BibTeX
5215 @cindex @file{planner-bibtex.el}, using
5217 BibTeX URLs are of the form @samp{bibtex:file/name:key}.
5219 @file{planner-bibtex.el} does not define any interactive functions.
5221 @node Bookmark,  , BibTeX, Tracking Research and Resources
5222 @comment  node-name,  next,  previous,  up
5223 @subsection Bookmark
5224 @cindex bookmarks
5225 @cindex @file{bookmark.el}, using Planner with
5226 @cindex @file{planner-bookmark.el}, using
5228 @file{planner-bookmark.el} uses the @file{remember} package to create a
5229 note whenever you create a bookmark (see @inforef{Bookmarks, Bookmarks,
5230 Emacs}). For more information about @file{remember}, please check out
5232 @itemize
5233 @item
5234 @uref{http://www.emacswiki.org/cgi-bin/wiki/RememberMode} -
5235 EmacsWiki.org page
5236 @item
5237 @uref{http://sacha.free.net.ph/notebook/doc/dev/remember/remember.html}
5238 - Online info documentation
5239 @end itemize
5241 Configure remember according to the instructions in
5242 @file{remember-planner.el} so that notes are saved to your planner
5243 pages.
5245 @defopt planner-bookmark-take-note-after-set-bookmark-flag
5246 Non-nil means show a @code{remember} buffer after setting a new
5247 bookmark.
5248 @end defopt
5250 When you create a bookmark, Emacs will open a buffer for your notes.
5251 @kbd{C-c C-c} saves the buffer to today's page. If you don't want to
5252 save a note, you can kill the buffer.
5254 Bookmark URLs are of the form @samp{bookmark://bookmark-name}.
5256 @file{planner-bookmark.el} does not define any interactive functions.
5258 @node Tracking Development,  , Tracking Research and Resources, Managing Your Information
5259 @comment  node-name,  next,  previous,  up
5260 @section Tracking Development
5261 @cindex version control, using Planner with
5263 Planner has three modules geared toward programmers. Two modules deal
5264 with version control and integrating information from those projects
5265 into the planner page. One module deals with the Gnats bug-tracking
5266 system.
5268 @menu
5269 * Log Edit::                    Changelogs: planner-log-edit.el
5270 * PSVN::                        svn changesets: planner-psvn.el
5271 * XTLA::                        TLA changesets: planner-xtla.el
5272 * Gnats::                       Gnats: The GNU bug reporting system
5273 @end menu
5275 @node Log Edit, PSVN, Tracking Development, Tracking Development
5276 @comment  node-name,  next,  previous,  up
5277 @subsection Log Edit
5278 @cindex cvs, using Planner with
5279 @cindex @file{planner-log-edit}, using
5280 @cindex version control, using Planner with
5282 This module allows you to automatically record CVS (and VC) commits
5283 in today's page.
5285 You can load the module with @code{(require 'planner-log-edit)}. When
5286 you load the module, @code{planner-log-edit-add-note} will be added to
5287 @code{log-edit-done-hook}.  A note containing the text of the commit
5288 and optionally a list of modified files will be added to today's page
5289 if you use the the Emacs version control interface. (@pxref{Version
5290 Control, , , Emacs, GNU Emacs Manual})
5292 @subheading Options
5294 @defopt planner-log-edit-include-files-flag
5295 Non-nil means include a list of committed files in the note.
5296 @end defopt
5298 @defopt planner-log-edit-notice-commit-function
5299 Non-nil means include a list of committed files in the note. If you
5300 want to enable this feature for some projects but not for others, set
5301 this to a function that returns t only for the commits you want to
5302 note.
5303 @end defopt
5305 @file{planner-log-edit.el} does not define any interactive functions.
5307 @node PSVN, XTLA, Log Edit, Tracking Development
5308 @comment  node-name,  next,  previous,  up
5309 @subsection PSVN
5310 @cindex PSVN
5311 @cindex @file{planner-psvn.el}, using
5313 This file allows you to refer to your svn changesets easily from within
5314 a Planner page.  You can load the module with @code{(require
5315 'planner-psvn)}.
5317 PSVN URLs are of the form
5318 @samp{psvn://http://my.svn-repos.at/svn/project1/trunk@@39}
5320 Additionally there is functionality to generate a note for your commits
5321 via subversion: just set
5322 @var{planner-psvn-log-edit-notice-commit-function} to t.
5324 @file{planner-psvn.el} does not define any interactive functions.
5326 @node XTLA, Gnats, PSVN, Tracking Development
5327 @comment  node-name,  next,  previous,  up
5328 @subsection XTLA
5329 @cindex XTLA
5330 @cindex @file{planner-xtla.el}, using
5332 This module allows you to refer to changesets in Tom Lord's Arch (tla)
5333 version control system. You can load the module with @code{(require
5334 'planner-xtla)}. When you load the module, you can create tasks from
5335 XTLA windows by positioning point on a revision.
5337 XTLA URLs are of the form
5338 @samp{xtla://miles@@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-19}
5340 @file{planner-xtla.el} does not define any interactive functions.
5342 @node Gnats,  , XTLA, Tracking Development
5343 @comment  node-name,  next,  previous,  up
5344 @subsection Gnats
5346 @cindex Gnats
5347 @cindex @file{planner-gnats.el}, using
5348 @cindex bug reports, tracking
5350 @file{planner-gnats.el} provides support for the GNU problem report
5351 management system Gnats. This module allows you to refer to problem
5352 reports using hyperlinks.
5354 Configure your Emacs for Gnats access, then add @samp{(require
5355 'planner-gnats)} to your @file{.emacs}. You can then create tasks from
5356 Gnats edit or view buffers.
5358 To add keybindings to Gnats, use @samp{(planner-gnats-insinuate)}.
5360 Gnats URLs are of the form @samp{gnats:pr-number}.
5362 @file{planner-gnats.el} does not define any interactive functions.
5364 @node Advanced Configuration, Reference Material, Managing Your Information, Top
5365 @comment  node-name,  next,  previous,  up
5366 @chapter Advanced Configuration
5367 @cindex configuration, advanced
5369 @menu
5370 * Customizing Your Day Pages::  Change your templates
5371 * Variables to Customize::      Change various aspects of Planner behavior
5372 * Ideas for Other Keybindings::  Add to and change the default keybindings
5373 @end menu
5375 @node Customizing Your Day Pages, Variables to Customize, Advanced Configuration, Advanced Configuration
5376 @comment  node-name,  next,  previous,  up
5377 @section Customizing Your Day Pages
5379 With the variable @code{planner-day-page-template}, you can define how
5380 you want any newly created day planner pages to look.
5382 You might want to include a section for your diary entries. For how to
5383 do this, see @ref{Diary}.
5385 You can add interactive Lisp buttons with the @file{planner-lisp.el}
5386 module. (@pxref{Interactive Lisp})
5388 Your @code{planner-day-page-template} can also include @samp{|<lisp>|}
5389 tags.
5391 For more complex day pages, you can set
5392 @code{planner-day-page-template} to a function that will be called
5393 from an empty day page buffer. The function should initialize the
5394 contents of the day page.
5396 @node Variables to Customize, Ideas for Other Keybindings, Customizing Your Day Pages, Advanced Configuration
5397 @comment  node-name,  next,  previous,  up
5398 @section Variables to Customize
5399 @cindex customize, variables to
5400 @cindex variables, customization of
5401 @cindex configuration, advanced, variables
5403 If you want to change @code{planner-directory} and some other
5404 variables, either use Customize (@kbd{M-x customize-group RET planner
5405 RET}) or use @code{setq}.  An example of the latter follows.
5407 @example
5408 (setq planner-directory "~/Plans")
5409 @end example
5411 Other user options are:
5413 @vindex planner-use-day-pages
5414 @defopt planner-use-day-pages
5415 If you really don't like day pages, you can set this variable to nil
5416 and you won't be prompted for dates for tasks (and notes, if using
5417 @file{remember-planner}).
5418 @end defopt
5420 @vindex planner-use-plan-pages
5421 @defopt planner-use-plan-pages
5422 If you really don't like plan pages, you can set this variable to nil
5423 and you won't be prompted for plan pages for tasks (and notes, if
5424 using @file{remember-planner}).
5425 @end defopt
5427 @vindex planner-mode-hook
5428 @defopt planner-mode-hook
5429 List of functions to run after @code{planner-mode} is initialized.
5430 @end defopt
5432 @vindex planner-tasks-file-behavior
5433 @defopt planner-tasks-file-behavior
5434 This variable controls what happens to files Planner opens by itself.
5435 If your tasks are associated with plan pages, the plan pages are
5436 updated whenever a task is rescheduled.  This could lead to a lot of
5437 open buffers as Planner applies updates to all linked files.
5438 By default, Planner is configured to do nothing.
5439 A value of @samp{save} means save but do not close buffers, and a
5440 value of @samp{nil} means do not save any of the buffers.
5441 @end defopt
5443 @vindex planner-add-task-at-end-flag
5444 @defopt planner-add-task-at-end-flag
5445 This variable controls where new tasks are created.  Non-nil means
5446 create tasks at the bottom of the first task block.  If you set this
5447 to non-nil, new tasks will be listed in order of creation (oldest).
5448 Tasks carried over from previous days will appear at the bottom of the
5449 list.
5451 Nil means create tasks at the top of the first task block.
5452 Carried-over tasks and newly created tasks are prominently placed on
5453 top of the list of tasks for the day.
5454 @end defopt
5456 @vindex planner-default-page
5457 @defopt planner-default-page
5458 Default page for created tasks.  This is used as the initial value for
5459 tasks.  After you create a task, it will be set to the previous page
5460 used.
5461 @end defopt
5463 @vindex planner-hide-task-status-when-highlighting
5464 @defopt planner-hide-task-status-when-highlighting
5465 Font-locking for tasks may be enough for you to determine status and
5466 priority.  Set this to non-nil if you want to hide the status marker
5467 and rely on font-locking instead.
5468 @end defopt
5470 @vindex planner-create-task-hook
5471 @defopt planner-create-task-hook
5472 Functions run after creating a task. @code{planner-id} hooks into
5473 this.
5474 @end defopt
5476 @vindex planner-expand-name-favor-future-p
5477 @defopt planner-expand-name-favor-future-p
5478 If non-nil, partial dates (ex: @kbd{2} or @kbd{5.2}) are completed to
5479 dates in the future instead of using the current year and month.
5480 @end defopt
5482 @vindex planner-task-dates-favor-future-p
5483 @defopt planner-task-dates-favor-future-p
5484 Like @code{planner-expand-name-favor-future-p}, but only for tasks.
5485 @end defopt
5487 @vindex planner-publish-dates-first-p
5488 @defopt planner-publish-dates-first-p
5489 Non-nil means list day pages first in the planner index.
5490 @end defopt
5492 @node Ideas for Other Keybindings,  , Variables to Customize, Advanced Configuration
5493 @comment  node-name,  next,  previous,  up
5494 @section Ideas for Other Keybindings
5495 @cindex keybindings, customization of
5496 @cindex configuration, advanced, keybindings
5497 @cindex customize, keybindings to
5499 By default and for backward compatibility, the following operations
5500 do not have keybindings, and are only accessible from the Planner
5501 menu:
5503 @itemize @bullet
5505 @item
5506 @code{planner-copy-or-move-region}
5508 @item
5509 @code{planner-delete-task}
5511 @item
5512 @code{planner-task-delegated}
5514 @item
5515 @code{planner-task-pending}
5517 @item
5518 @code{planner-task-open}
5520 @item
5521 @code{planner-renumber-tasks}
5523 @end itemize
5525 You may find it easier to install keybindings for those operations by
5526 inserting the following in your @file{.emacs} (or @file{_emacs}).
5527 Note: This changes some of the default keybindings for Planner.
5529 @example
5530 (planner-install-extra-task-keybindings)
5531 @end example
5533 If you install the extra task keybindings, your keybindings will
5534 include:
5536 @itemize @bullet
5538 @item
5539 @kbd{C-c C-t} will be unbound from the default and will serve as the
5540 prefix for the other task keybindings.
5542 @item
5543 @kbd{C-c C-t C-t}: @code{planner-create-task-from-buffer}.
5545 @item
5546 @kbd{C-c C-t C-k}: @code{planner-delete-task}.
5548 @item
5549 @kbd{C-c C-t C-u}: @code{planner-update-task}.
5551 @item
5552 @kbd{C-c C-t C-c}: @code{planner-copy-or-move-task}.
5554 @item
5555 @kbd{C-c C-t C-S-c}: @code{planner-copy-or-move-region}.
5557 @item
5558 @kbd{C-c C-t C-x}: @code{planner-task-done}.
5560 @item
5561 @kbd{C-c C-t C-S-x}: @code{planner-task-cancelled}.
5563 @item
5564 @kbd{C-c C-t C-d}: @code{planner-task-delegated}.
5566 @item
5567 @kbd{C-c C-t C-p}: @code{planner-task-pending}.
5569 @item
5570 @kbd{C-c C-t C-o}: @code{planner-task-in-progress}.
5572 @item
5573 @kbd{C-c C-t C-r}: @code{planner-raise-task}.
5575 @item
5576 @kbd{C-c C-t C-l}: @code{planner-lower-task}.
5578 @item
5579 @kbd{C-c C-t C-n}: @code{planner-renumber-tasks}.
5581 @end itemize
5583 Other keybindings can be configured by adding this to your
5584 @file{.emacs} (or @file{_emacs}):
5586 @example
5587 (planner-install-extra-context-keybindings)
5588 @end example
5590 This will set up the following keybindings:
5592 @itemize @bullet
5594 @item
5595 @kbd{shift up} @code{planner-move-up}
5597 @item
5598 @kbd{shift down} @code{planner-move-down}
5600 @item
5601 @kbd{shift right} @code{planner-jump-to-link}
5603 @end itemize
5605 @node Reference Material, Getting Help, Advanced Configuration, Top
5606 @comment  node-name,  next,  previous,  up
5607 @chapter Reference Material
5609 @menu
5610 * Keeping Track of Time::       
5611 * Other Interactive Functions::  
5612 * Planner Keybindings::         Default keybindings for Planner
5613 * Sample Configuration Files::  
5614 @end menu
5616 @node Keeping Track of Time, Other Interactive Functions, Reference Material, Reference Material
5617 @section Keeping Track of Time
5619 One of the coolest things you can do with Planner is keep track of how
5620 much time you spend not only on projects but even on particular tasks.
5621 @file{planner-timeclock.el} makes it as easy and natural as marking a
5622 task as in progress, postponed, or done. This can help you determine
5623 just how much time you spend working each day. If you add estimates to
5624 your task descriptions, you'll also be able to use this information to
5625 improve your time estimation skills.
5627 Here's how you can keep track of the time you
5630 Then the fun began. I wanted to see if I could match my estimates.
5631 Before I started working on a task, I used @kbd{C-c TAB} to mark it
5632 @code{in progress} and start the clock. If I decided to work on
5633 something else, I used @kbd{C-c TAB} to clock out of the previous task
5634 and clock into the new one.
5636 When I finished it, I used @kbd{C-c C-x} (@code{planner-task-done}) to
5637 mark it completed and automatically clock out. This is not yet done
5638 for cancelled tasks, so I clocked out of those manually with @kbd{C-c
5639 C-o} (@code{timeclock-out}). I also clocked out whenever I caught
5640 myself being distracted so that the totals wouldn't include the time I
5641 spent chatting on #emacs or checking out del.icio.us links. =) At the
5642 end of the day, I used
5643 @code{planner-timeclock-summary-show-range-filter} to show me the time
5644 elapsed for all of the tasks I'd worked on over the past two days.
5645 Here's the report for that project, edited to reflect how it looks on
5646 my screen and annotated with comments:
5648 @example
5649 Timeclock summary report for 2004.12.28 - 2004.12.29
5651 Project     |     Time| Ratio| Task
5652 JapanProject|  0:23:17|  3.6%| Translate javadoc comment for Messages.java
5653             |  0:33:48|  5.3%| Translate javadoc comment for LoginAction.java
5654             |  1:54:07| 17.8%| Study Struts in Japanese
5655             |  0:46:08|  7.2%| Add javadoc tags for input, output and forwards
5656             |  1:03:48|  9.9%| Help review code
5657             |  0:04:14|  0.7%| Import todo list
5658             |  0:00:37|  0.1%| 2min       Fix Menu Action's unnecessary code - delegated
5659             |  0:01:01|  0.2%| 2min       Remove unnecessary list in UserRemoveSetupAction - cancelled
5660             |  0:02:10|  0.3%| 2min       Remove hard-coded database path from MenuAction
5661             |  0:02:46|  0.4%| 30min      Create a superclass for our action classes that handles initialization of database and handling of privileges - remove all privilege handling in logic classes. ...
5662             |  0:07:32|  1.2%| 5min       Add a method that returns the validity of a user in MUserPeer.
5663             |  0:08:28|  1.3%| 5min       Fix indentation
5664             |  0:03:52|  0.6%| 10min      Fix UserPeer so that it doesn't get null pointer exceptions
5665             |  0:04:34|  0.7%| 5min       Add current password field in user_modify page
5666             |  0:21:56|  3.4%| 15min      Make a super class for our service classes that will receive the database connection. (cancelled)
5667             |  0:06:05|  0.9%| 10min      Remove hard-coded constants from the Logic classes
5668             |  0:10:55|  1.7%| 10min      Move logic from UserBean.checkPassword to UserListLogic
5669             |  0:01:20|  0.2%| 20min      Guard against null pointer exceptions in peer classes
5670             |  0:04:57|  0.8%| 10min      Instead of displaying uneditable data with bean:write, just disable the html:text element
5671             |  0:25:03|  3.9%| 10min      Deploy 10:00 version
5672             |  0:04:46|  0.7%| 5min       Separate the configuration file of database and system into another uninternationalized property file.
5673             |  2:09:48| 20.2%| 1h         Decide on a naming convention for localized messages and update files
5674             |  0:00:07|  0.0%| 20min      Explain what is happening in UserModifyAction's nested ifs - pending
5675             |  1:50:23| 17.2%| 2h         Write Javadoc comments in English and Japanese to explain bean structure
5676             |  0:04:19|  0.7%| 2h         Write Javadoc comments in English and Japanese to explain peer operations (pending)
5677             |  0:05:40|  0.9%| 20min      Make a factory class for the database - pending
5678      Total: | 10:41:41|100.0%|      
5680 Day began: 13:03:58, Day ended: 20:51:46
5681 Time elapsed: 31:47:48, Time clocked: 10:41:41
5682 Time clocked ratio: 33.6%
5683 @end example
5685 The time record isn't perfect. I cancelled some tasks after thinking
5686 about them a little and did some tasks simultaneously. Sometimes I
5687 didn't notice that I was getting distracted, too. Still, having all of
5688 that time information neatly summarized made me realize a number of
5689 things.
5691 First, I goof off much less when I have a nice, broken-down task list
5692 in front of me. There's just something about knowing there's a five-
5693 or ten-minute hack you can get out of the way. I found myself looking
5694 forward to getting to the next task just to see if I could make my
5695 estimate. That said, seeing a five-minute task stretch and stretch due
5696 to unforeseen problems did make me a little nervous. I should probably
5697 just make generous estimates so that I don't end up with bugs because
5698 of haste.
5700 Second, I don't goof off as much as I thought I did, although there's
5701 still room for improvement. Yesterday's workday was 9:00 - 12:00, 1:00
5702 - 5:30--7.5 hours. Today was the last day of work, so cleaning and
5703 celebration interrupted my hacking at around 3:00--5 hours of work.
5704 According to my task list, 10:41/12:30 was productive work. Hmm. 1:49
5705 hours unclocked time when I was thinking or goofing off.
5706 planner-timeclock-summary-show for today reveals that I actually
5707 clocked 5:30 today, which means the goofing off happened yesterday.
5708 That makes sense; I remember a pretty long unclocked segment
5709 recuperating from Japanese overload. (This was before we came up with
5710 the task list.)
5712 Third, keeping track of time is way, way cool even if you don't bill
5713 anyone for your time.
5715 Like the idea? It's easy to try out. Just add
5717 @example
5718 (require 'planner-timeclock)
5719 (require 'planner-timeclock-summary)
5720 @end example
5722 to your ~/.emacs. If you want to try it out now, eval those statements
5723 in your Emacs session. After that, simply use @kbd{C-c TAB} to ``clock
5724 in'' a task before you start working on it and @kbd{C-c C-x}
5725 (@code{planner-task-done}) to mark it completed. @kbd{M-x
5726 planner-task-pending} also clocks out the current task if it was
5727 clocked in. To see a summary of how you spent your day, check out the
5728 different functions in @file{planner-timeclock-summary}.
5730 See @ref{Timeclock} for more details.
5732 Happy hacking!
5734 @node Other Interactive Functions, Planner Keybindings, Keeping Track of Time, Reference Material
5735 @comment  node-name,  next,  previous,  up
5736 @section Other Interactive Functions
5738 With @file{planner.el} loaded, you can use any of the functions in this
5739 section by typing @kbd{M-x} followed by the name of the function. Many
5740 of these functions are also bound to keys.
5742 For a list of Planner keybindings, see @ref{Planner Keybindings}.
5744 They are listed in no particular order.
5746 @file{planner.el} defines the following interactive functions:
5749 @defun planner-create-high-priority-task-from-buffer
5750 Create a high priority task based on this buffer.  Do not use this in
5751 LISP programs. Instead, set the value of
5752 @var{planner-default-task-priority} and call @code{planner-create-task}
5753 or @code{planner-create-task-from-buffer}.
5754 @end defun
5756 @defun defun planner-create-medium-priority-task-from-buffer
5757 Create a medium-priority task based on this buffer.  Do not use this in
5758 LISP programs. Instead, set the value of
5759 @var{planner-default-task-priority} and call @code{planner-create-task}
5760 or @code{planner-create-task-from-buffer}.
5761 @end defun
5763 @defun planner-create-low-priority-task-from-buffer
5764 Create a high-priority task based on this buffer.
5765 Do not use this in LISP programs. Instead, set the value of
5766 @var{planner-default-task-priority} and call @code{planner-create-task} or
5767 @code{planner-create-task-from-buffer}.
5768 @end defun
5770 @defun planner-install-extra-context-keybindings
5771 Install extra context-sensitive keybindings. These keybindings
5772 conflict with @file{windmove.el}, but might be useful.
5773 @end defun
5775 @defun planner-narrow-to-section section &optional create
5776 Widen to the whole page and narrow to the section labelled
5777 @var{section}.  If @var{create} is non-nil and the section is not found,
5778 the section is created.  Return non-nil if @var{section} was found or
5779 created.
5780 @end defun
5782 @defun planner-save-buffers
5783 Save all planner-mode buffers.
5784 @end defun
5786 @defun planner-seek-to-first section
5787 Positions the point at the specified @var{section}, or @samp{Tasks} if
5788 not specified.
5789 @end defun
5791 @defun planner-save-buffers
5792 Save all planner buffers.
5793 @end defun
5795 @defun planner-calendar-insinuate
5796 This hooks Planner into  Emacs Calendar (@pxref{Calendar/Diary, ,
5797 , Emacs, GNU Emacs Manual}).
5799 It adds special planner key bindings to @code{calendar-mode-map}.
5800 After this function is evaluated, you can use the following
5801 planner-related keybindings in @code{calendar-mode-map}:
5803 @table @kbd
5805 @item  n
5806 Jump to the planner page for the current day.
5808 @item  N
5809 Display the planner page for the current day.
5810 @end table
5812 @end defun
5814 @defun planner-kill-calendar-files
5815 Remove planner files shown from Calendar (@pxref{Calendar/Diary, , ,
5816 Emacs, GNU Emacs Manual}).
5818 @end defun
5820 @defun planner-calendar-goto
5821 Goto the plan page corresponding to the calendar date
5822 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
5823 @end defun
5825 @defun planner-calendar-show
5826 Show the plan page for the calendar date under point in another window
5827 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
5828 @end defun
5830 @defun planner-calendar-select
5831 Return to @code{planner-read-date} with the date currently selected
5832 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
5833 @end defun
5835 @defun planner-jump-to-link
5836 Jump to the item linked to by the current item.
5837 @end defun
5839 @defun planner-move-up
5840 Move a task up. You can use this to indicate that you will do a task
5841 before another one. On a note, go to the previous note. On a headline,
5842 go to the previous headline of the same depth.
5843 @end defun
5845 @defun planner-move-down 
5846 Move down. You can use this to indicate that you will do a task after
5847 another one. On a note, go to the next note. On a headline, go to the
5848 next headline of the same depth.
5849 @end defun
5851 @node Planner Keybindings, Sample Configuration Files, Other Interactive Functions, Reference Material
5852 @comment  node-name,  next,  previous,  up
5853 @section Planner Keybindings
5854 @cindex keybindings, list
5856 In order to refresh and renumber all of your tasks according to their
5857 actual order in the buffer, simply save the file or call
5858 @kbd{M-x planner-renumber-tasks}.
5860 Here is a summary of the keystrokes available:
5862 @table @kbd
5864 @item M-x plan
5865 Begin your planning session.  This goes to the last day for which
5866 there is any planning info (or today if none), allowing you to review,
5867 and create/move tasks from that day.
5869 @item C-c C-u
5870 Move a task up.
5872 @item C-c C-d
5873 Move a task down.
5875 @item C-c C-s
5876 Mark the task as in progress or delegated.
5878 @item C-c C-x
5879 Mark the task as finished.
5881 @item C-c C-t
5882 Create a task associated with the current Wiki page. If you are on the
5883 opening line of a Note entry, it is assumed that the note itself is the
5884 origin of the task.
5886 @item C-c C-c
5887 Move or copy the current task to another date. If the current task is
5888 an original (meaning you are in the buffer where's defined, hopefully
5889 a planning page) then it will be copied, and the original task will
5890 also now point to the copy.  If the current task is a copy, it will
5891 just be moved to the new day, and the original task's link will be
5892 updated.
5894 @item C-c C-n
5895 Jump to today's task page.  If you call
5896 @code{(planner-calendar-insinuate)}, typing @kbd{n} in the Emacs
5897 calendar (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}) will jump
5898 to today's task page.
5900 @item C-c C-x
5901 @code{planner-task-done}
5903 @item C-c C-z
5904 @code{planner-task-in-progress}
5906 @item C-c C-d
5907 @code{planner-lower-task}
5909 @item C-c C-u
5910 @code{planner-raise-task}
5912 @item C-c C-c
5913 @code{planner-copy-or-move-task}
5915 @item C-c C-t
5916 @code{planner-create-task-from-buffer}
5918 @item C-c C-j
5919 This is a prefix command.
5921 @item C-c C-n
5922 @code{planner-goto-today}
5924 @item C-c C-j C-r
5925 @code{planner-goto-most-recent}
5927 @item C-c C-j C-t
5928 @code{planner-goto-tomorrow}
5930 @item C-c C-j C-y
5931 @code{planner-goto-yesterday}
5933 @item C-c C-j C-j
5934 @code{planner-goto-today}
5936 @item C-c C-j C-n
5937 @code{planner-goto-next-daily-page}
5939 @item C-c C-j C-p
5940 @code{planner-goto-previous-daily-page}
5942 @item C-c C-j C-d
5943 @code{planner-goto}
5945 @end table
5947 @node Sample Configuration Files,  , Planner Keybindings, Reference Material
5948 @comment  node-name,  next,  previous,  up
5949 @section Sample Configuration Files
5950 @cindex configuration, sample
5952 This section includes some sample configuration files. This way, once
5953 you've got the hang of the basics, you can see some different, more
5954 advanced, setups.
5956 There is no One True Way to plan. Every person is different. We hope
5957 you'll find a good starting point among the example configurations
5958 below. If what you want to do does not perfectly fit under one of these
5959 examples, please post a description of the way you plan to our mailing
5960 list (@pxref{Getting Help}).  We look forward to helping you customizing
5961 planner to fit your needs.
5963 @menu
5964 * File Organization::           
5965 * Bare-Bones Planning::         
5966 * Bare-Bones Planning with Plan Pages::  
5967 * Tasks on Plan Pages with Some Day Pages::  
5968 * Hierarchical Tasks::          
5969 @end menu
5971 @node File Organization, Bare-Bones Planning, Sample Configuration Files, Sample Configuration Files
5972 @subsection File Organization
5974 @itemize
5975 @item @strong{Tasks, schedule and notes on day pages.}
5977 By default, tasks, schedule entries and notes are filed on day pages.
5978 This makes it easy for you to see all the entries relevant to a single
5979 day without becoming overwhelmed with information. Unfinished tasks
5980 are carried over to the next day when you use @kbd{M-x plan}, so it's
5981 always kept up to date. Completed tasks are left on the day page you
5982 finished them on, which helps when reviewing one's progress and writing
5983 accomplishment reports.
5985 @item @strong{Cross-referenced with plan pages.}
5987 You can associate your tasks with projects either when you create the
5988 task or later, with @kbd{M-x planner-replan-task}. This makes it easy
5989 for you to see all the information associated with a particular
5990 project. If you use RememberMode to create notes, you will also be
5991 able to associate notes with a plan page.
5993 @item @strong{Just plan pages.}
5995 If your tasks don't usually have dates, you can turn day pages off by
5996 customizing @code{planner-use-day-pages}. If so, then all of your
5997 tasks and notes will be stored on the WelcomePage and/or a plan page.
5999 @end itemize
6001 @node Bare-Bones Planning, Bare-Bones Planning with Plan Pages, File Organization, Sample Configuration Files
6002 @subsection Bare-Bones Planning
6004 You can keep all of your tasks, notes and schedules in a single file:
6005 WelcomePage.  This is good for people who are used to storing all of
6006 their information in a flat text file.  By storing your information in
6007 planner, you'll be able to take advantage of automatic hyperlinking to
6008 files and other resources.  You can also sort your tasks by priority
6009 and status.
6011 To set your system up for bare-bones planning, set the
6012 @code{planner-use-day-pages} variable to nil before loading planner.
6013 For example, you can put this in your @file{~/.emacs} (or @file{_emacs}):
6015 @example
6016 (setq planner-use-day-pages nil)
6017 (setq planner-default-page nil)
6018 (require 'planner)
6019 @end example
6021 When you create a task or note, planner will not prompt you for a
6022 date.  If you press @key{RET} when prompted for a plan page, it will
6023 accept the default of nil, so no other plan pages will be used.  All
6024 of your data will be kept in one file, which can then be easily backed
6027 You can use commands like @command{planner-create-task-from-buffer} to
6028 create tasks, or you can type tasks in manually.  You can edit or
6029 delete anything in the page without having to update other files.
6031 @node Bare-Bones Planning with Plan Pages, Tasks on Plan Pages with Some Day Pages, Bare-Bones Planning, Sample Configuration Files
6032 @subsection Bare-Bones Planning with Plan Pages
6034 When you create a task or note, Planner.el can copy this to a plan
6035 page. Plan pages allow you to see an overview of all the data for a
6036 project.
6038 For convenience, the @command{planner-create-task-from-buffer} command
6039 prompts you for a plan page when you create a task.
6043 @node Tasks on Plan Pages with Some Day Pages, Hierarchical Tasks, Bare-Bones Planning with Plan Pages, Sample Configuration Files
6044 @subsection Tasks on Plan Pages with Some Day Pages
6046 If most of your tasks are associated with plan pages but you want to
6047 schedule some tasks on day pages, you can leave day pages on (default)
6048 and then write a function that turns off day pages. For example, the
6049 following code snippet turns off day pages for task creation from
6050 buffers.
6052 @example
6053 (require 'planner)
6055 (defun my-planner-create-task-from-buffer ()
6056   "Call `planner-create-task-from-buffer', but without dates."
6057   (interactive)
6058   (let ((planner-use-day-pages nil))
6059     (call-interactively 'planner-create-task-from-buffer)))
6060 @end example
6062 @node Hierarchical Tasks,  , Tasks on Plan Pages with Some Day Pages, Sample Configuration Files
6063 @subsection Hierarchical Tasks
6064 @cindex hierarchical tasks
6065 @cindex tasks, hierarchy of
6067 You can use @file{allout.el} or other modes for outlining to support
6068 hierarchical tasks in plan pages. No special support is needed.
6070 Tasks created by @command{planner-create-task-from-buffer} and
6071 @code{planner-create-task} are created in the @samp{* Tasks} section.
6072 If @code{planner-add-task-at-end-flag} is non-nil, tasks are added to
6073 the end of the first task block, else they are added to the beginning.
6074 You can then copy and paste tasks into your preferred hierarchy.
6075 Blank lines delimit blocks of tasks upon which automatic sorting is
6076 performed.
6078 You can also type in tasks manually. You may find this approach faster
6079 when you are comfortable with planner.
6081 For example, a @file{LearnPlanner} plan page might contain the
6082 following lines:
6084 @example
6085 * Learn how to use planner.el
6087 ** Installation
6089 #C0 _ Decide where to put Planner
6090 #C0 _ Download the archives
6092 ** Configuration
6094 *** Load path
6096 #C0 _ Figure out how to add things to my load path
6097 #C0 _ Actually add it to my load path
6100 @end example
6102 If you create tasks for the finest level of detail available at the
6103 moment, you can schedule them onto day pages with @kbd{C-c C-c}
6104 (@command{planner-copy-or-move-task}). Then you can use
6105 @command{planner-jump-to-link} to switch between the day page and the
6106 plan page link.
6109 @node Getting Help, Acknowledgements, Reference Material, Top
6110 @comment  node-name,  next,  previous,  up
6111 @chapter Getting Help
6112 @cindex help, getting
6113 @cindex bugs, reporting
6115 After you have read this guide, if you still have questions about
6116 Planner, or if you have bugs to report, there are several places
6117 you can go.
6119 Planner has an official website at @url{http://www.plannerlove.com/}.
6120 It is a collaborative wiki.
6122 Bugs may be reported using the Planner Bug-Tracker at
6123 @url{http://gna.org/bugs/?group=planner-el}.
6125 Planner has three mailing lists.
6127 @table @samp
6129 @item planner-el-announce
6130 Low-traffic list for planner-related announcements.
6132 You can join this mailing list (@email{planner-el-announce@@gna.org})
6133 using the subscription form at
6134 @url{http://mail.gna.org/listinfo/planner-el-announce/}.  This
6135 mailing list is also available via Gmane (@url{http://gmane.org/}). The
6136 group is called @samp{gmane.emacs.planner.announce}.
6138 @item planner-el-discuss
6139 Discussion, bugfixes, suggestions, tips, and the like for Planner.
6140 This mailing list also includes the content of planner-el-announce.
6142 You can join this mailing list (@email{planner-el-discuss@@gna.org})
6143 using the subscription form at
6144 @url{http://mail.gna.org/listinfo/planner-el-discuss/}.  This mailing
6145 list is also available via Gmane with the identifier
6146 @samp{gmane.emacs.planner.general}.
6148 @item planner-el-cvs
6149 Log messages for changes committed to Planner.
6151 You can join this mailing list (@email{planner-el-cvs@@gna.org}) using
6152 the subscription form at
6153 @url{http://mail.gna.org/listinfo/planner-el-cvs/}.  This mailing list
6154 is also available via Gmane with the identifier
6155 @samp{gmane.emacs.planner.cvs}.
6157 @end table
6159 You can also contact the maintainer of Planner, Michael Olson, at
6160 @email{mwolson@@gnu.org}, but it is better to use the other options.
6162 You can explore the relevant sections of the EmacsWiki.org:
6164 @itemize @bullet
6166 @item
6167 @url{http://www.emacswiki.org/cgi-bin/wiki/PlannerMode}
6169 @item
6170 @url{http://www.emacswiki.org/cgi-bin/wiki/MuseMode}
6172 @item
6173 @url{http://www.emacswiki.org/cgi-bin/wiki/RememberMode}
6175 @end itemize
6177 You can visit the IRC Freenode channel @samp{#emacs}. Many of the
6178 contributors are frequently around and willing to answer your
6179 questions.
6181 There is an Orkut community called PlannerMode.
6183 For issues relating to this documentation, please contact John
6184 Sullivan at @email{johnsu01@@yahoo.com}.
6186 @node Acknowledgements, GNU General Public License, Getting Help, Top
6187 @comment  node-name,  next,  previous,  up
6188 @chapter Acknowledgements
6189 @itemize
6190 @item Maintainers
6192 @cindex maintainers
6194 @itemize
6195 @item 2005
6197 Michael Olson, Sacha Chua, and several others from the Planner community
6198 ported Planner to use Muse instead of emacs-wiki.  Michael Olson became
6199 the maintainer of Planner.
6201 @item 2004
6203 Damien Elmes handed EmacsWikiMode to Mark Triggs for a short period of
6204 time.  Mark Triggs deferred to Sacha Chua as official maintainer of
6205 Planner.  Sacha Chua volunteered to maintain RememberMode.
6206 Michael Olson became the maintainer of both emacs-wiki and Muse.
6208 @item 2003
6210 Sacha Chua volunteered to maintain Planner.  Damien Elmes
6211 volunteered to maintain EmacsWikiMode.
6213 @item 2001
6215 John Wiegley wrote EmacsWikiMode and Planner.
6216 @end itemize
6218 @item Contributors
6219 @cindex contributors
6221 For a complete list of people who have helped out with Planner, please
6222 check out the @file{AUTHORS} file that is included with Planner.
6224 @end itemize
6226 @node GNU General Public License, Concept Index, Acknowledgements, Top
6227 @comment  node-name,  next,  previous,  up
6228 @appendix GNU GENERAL PUBLIC LICENSE
6229 @center Version 2, June 1991
6230 @cindex GPL
6231 @cindex GNU General Public License
6233 @c This file is intended to be included in another file.
6235 @display
6236 Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
6237 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
6239 Everyone is permitted to copy and distribute verbatim copies
6240 of this license document, but changing it is not allowed.
6241 @end display
6243 @appendixsec Preamble
6245   The licenses for most software are designed to take away your
6246 freedom to share and change it.  By contrast, the GNU General Public
6247 License is intended to guarantee your freedom to share and change free
6248 software---to make sure the software is free for all its users.  This
6249 General Public License applies to most of the Free Software
6250 Foundation's software and to any other program whose authors commit to
6251 using it.  (Some other Free Software Foundation software is covered by
6252 the GNU Library General Public License instead.)  You can apply it to
6253 your programs, too.
6255   When we speak of free software, we are referring to freedom, not
6256 price.  Our General Public Licenses are designed to make sure that you
6257 have the freedom to distribute copies of free software (and charge for
6258 this service if you wish), that you receive source code or can get it
6259 if you want it, that you can change the software or use pieces of it
6260 in new free programs; and that you know you can do these things.
6262   To protect your rights, we need to make restrictions that forbid
6263 anyone to deny you these rights or to ask you to surrender the rights.
6264 These restrictions translate to certain responsibilities for you if you
6265 distribute copies of the software, or if you modify it.
6267   For example, if you distribute copies of such a program, whether
6268 gratis or for a fee, you must give the recipients all the rights that
6269 you have.  You must make sure that they, too, receive or can get the
6270 source code.  And you must show them these terms so they know their
6271 rights.
6273   We protect your rights with two steps: (1) copyright the software, and
6274 (2) offer you this license which gives you legal permission to copy,
6275 distribute and/or modify the software.
6277   Also, for each author's protection and ours, we want to make certain
6278 that everyone understands that there is no warranty for this free
6279 software.  If the software is modified by someone else and passed on, we
6280 want its recipients to know that what they have is not the original, so
6281 that any problems introduced by others will not reflect on the original
6282 authors' reputations.
6284   Finally, any free program is threatened constantly by software
6285 patents.  We wish to avoid the danger that redistributors of a free
6286 program will individually obtain patent licenses, in effect making the
6287 program proprietary.  To prevent this, we have made it clear that any
6288 patent must be licensed for everyone's free use or not licensed at all.
6290   The precise terms and conditions for copying, distribution and
6291 modification follow.
6293 @iftex
6294 @appendixsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
6295 @end iftex
6296 @ifinfo
6297 @center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
6298 @end ifinfo
6300 @enumerate 0
6301 @item
6302 This License applies to any program or other work which contains
6303 a notice placed by the copyright holder saying it may be distributed
6304 under the terms of this General Public License.  The ``Program'', below,
6305 refers to any such program or work, and a ``work based on the Program''
6306 means either the Program or any derivative work under copyright law:
6307 that is to say, a work containing the Program or a portion of it,
6308 either verbatim or with modifications and/or translated into another
6309 language.  (Hereinafter, translation is included without limitation in
6310 the term ``modification''.)  Each licensee is addressed as ``you''.
6312 Activities other than copying, distribution and modification are not
6313 covered by this License; they are outside its scope.  The act of
6314 running the Program is not restricted, and the output from the Program
6315 is covered only if its contents constitute a work based on the
6316 Program (independent of having been made by running the Program).
6317 Whether that is true depends on what the Program does.
6319 @item
6320 You may copy and distribute verbatim copies of the Program's
6321 source code as you receive it, in any medium, provided that you
6322 conspicuously and appropriately publish on each copy an appropriate
6323 copyright notice and disclaimer of warranty; keep intact all the
6324 notices that refer to this License and to the absence of any warranty;
6325 and give any other recipients of the Program a copy of this License
6326 along with the Program.
6328 You may charge a fee for the physical act of transferring a copy, and
6329 you may at your option offer warranty protection in exchange for a fee.
6331 @item
6332 You may modify your copy or copies of the Program or any portion
6333 of it, thus forming a work based on the Program, and copy and
6334 distribute such modifications or work under the terms of Section 1
6335 above, provided that you also meet all of these conditions:
6337 @enumerate a
6338 @item
6339 You must cause the modified files to carry prominent notices
6340 stating that you changed the files and the date of any change.
6342 @item
6343 You must cause any work that you distribute or publish, that in
6344 whole or in part contains or is derived from the Program or any
6345 part thereof, to be licensed as a whole at no charge to all third
6346 parties under the terms of this License.
6348 @item
6349 If the modified program normally reads commands interactively
6350 when run, you must cause it, when started running for such
6351 interactive use in the most ordinary way, to print or display an
6352 announcement including an appropriate copyright notice and a
6353 notice that there is no warranty (or else, saying that you provide
6354 a warranty) and that users may redistribute the program under
6355 these conditions, and telling the user how to view a copy of this
6356 License.  (Exception: if the Program itself is interactive but
6357 does not normally print such an announcement, your work based on
6358 the Program is not required to print an announcement.)
6359 @end enumerate
6361 These requirements apply to the modified work as a whole.  If
6362 identifiable sections of that work are not derived from the Program,
6363 and can be reasonably considered independent and separate works in
6364 themselves, then this License, and its terms, do not apply to those
6365 sections when you distribute them as separate works.  But when you
6366 distribute the same sections as part of a whole which is a work based
6367 on the Program, the distribution of the whole must be on the terms of
6368 this License, whose permissions for other licensees extend to the
6369 entire whole, and thus to each and every part regardless of who wrote it.
6371 Thus, it is not the intent of this section to claim rights or contest
6372 your rights to work written entirely by you; rather, the intent is to
6373 exercise the right to control the distribution of derivative or
6374 collective works based on the Program.
6376 In addition, mere aggregation of another work not based on the Program
6377 with the Program (or with a work based on the Program) on a volume of
6378 a storage or distribution medium does not bring the other work under
6379 the scope of this License.
6381 @item
6382 You may copy and distribute the Program (or a work based on it,
6383 under Section 2) in object code or executable form under the terms of
6384 Sections 1 and 2 above provided that you also do one of the following:
6386 @enumerate a
6387 @item
6388 Accompany it with the complete corresponding machine-readable
6389 source code, which must be distributed under the terms of Sections
6390 1 and 2 above on a medium customarily used for software interchange; or,
6392 @item
6393 Accompany it with a written offer, valid for at least three
6394 years, to give any third party, for a charge no more than your
6395 cost of physically performing source distribution, a complete
6396 machine-readable copy of the corresponding source code, to be
6397 distributed under the terms of Sections 1 and 2 above on a medium
6398 customarily used for software interchange; or,
6400 @item
6401 Accompany it with the information you received as to the offer
6402 to distribute corresponding source code.  (This alternative is
6403 allowed only for noncommercial distribution and only if you
6404 received the program in object code or executable form with such
6405 an offer, in accord with Subsection b above.)
6406 @end enumerate
6408 The source code for a work means the preferred form of the work for
6409 making modifications to it.  For an executable work, complete source
6410 code means all the source code for all modules it contains, plus any
6411 associated interface definition files, plus the scripts used to
6412 control compilation and installation of the executable.  However, as a
6413 special exception, the source code distributed need not include
6414 anything that is normally distributed (in either source or binary
6415 form) with the major components (compiler, kernel, and so on) of the
6416 operating system on which the executable runs, unless that component
6417 itself accompanies the executable.
6419 If distribution of executable or object code is made by offering
6420 access to copy from a designated place, then offering equivalent
6421 access to copy the source code from the same place counts as
6422 distribution of the source code, even though third parties are not
6423 compelled to copy the source along with the object code.
6425 @item
6426 You may not copy, modify, sublicense, or distribute the Program
6427 except as expressly provided under this License.  Any attempt
6428 otherwise to copy, modify, sublicense or distribute the Program is
6429 void, and will automatically terminate your rights under this License.
6430 However, parties who have received copies, or rights, from you under
6431 this License will not have their licenses terminated so long as such
6432 parties remain in full compliance.
6434 @item
6435 You are not required to accept this License, since you have not
6436 signed it.  However, nothing else grants you permission to modify or
6437 distribute the Program or its derivative works.  These actions are
6438 prohibited by law if you do not accept this License.  Therefore, by
6439 modifying or distributing the Program (or any work based on the
6440 Program), you indicate your acceptance of this License to do so, and
6441 all its terms and conditions for copying, distributing or modifying
6442 the Program or works based on it.
6444 @item
6445 Each time you redistribute the Program (or any work based on the
6446 Program), the recipient automatically receives a license from the
6447 original licensor to copy, distribute or modify the Program subject to
6448 these terms and conditions.  You may not impose any further
6449 restrictions on the recipients' exercise of the rights granted herein.
6450 You are not responsible for enforcing compliance by third parties to
6451 this License.
6453 @item
6454 If, as a consequence of a court judgment or allegation of patent
6455 infringement or for any other reason (not limited to patent issues),
6456 conditions are imposed on you (whether by court order, agreement or
6457 otherwise) that contradict the conditions of this License, they do not
6458 excuse you from the conditions of this License.  If you cannot
6459 distribute so as to satisfy simultaneously your obligations under this
6460 License and any other pertinent obligations, then as a consequence you
6461 may not distribute the Program at all.  For example, if a patent
6462 license would not permit royalty-free redistribution of the Program by
6463 all those who receive copies directly or indirectly through you, then
6464 the only way you could satisfy both it and this License would be to
6465 refrain entirely from distribution of the Program.
6467 If any portion of this section is held invalid or unenforceable under
6468 any particular circumstance, the balance of the section is intended to
6469 apply and the section as a whole is intended to apply in other
6470 circumstances.
6472 It is not the purpose of this section to induce you to infringe any
6473 patents or other property right claims or to contest validity of any
6474 such claims; this section has the sole purpose of protecting the
6475 integrity of the free software distribution system, which is
6476 implemented by public license practices.  Many people have made
6477 generous contributions to the wide range of software distributed
6478 through that system in reliance on consistent application of that
6479 system; it is up to the author/donor to decide if he or she is willing
6480 to distribute software through any other system and a licensee cannot
6481 impose that choice.
6483 This section is intended to make thoroughly clear what is believed to
6484 be a consequence of the rest of this License.
6486 @item
6487 If the distribution and/or use of the Program is restricted in
6488 certain countries either by patents or by copyrighted interfaces, the
6489 original copyright holder who places the Program under this License
6490 may add an explicit geographical distribution limitation excluding
6491 those countries, so that distribution is permitted only in or among
6492 countries not thus excluded.  In such case, this License incorporates
6493 the limitation as if written in the body of this License.
6495 @item
6496 The Free Software Foundation may publish revised and/or new versions
6497 of the General Public License from time to time.  Such new versions will
6498 be similar in spirit to the present version, but may differ in detail to
6499 address new problems or concerns.
6501 Each version is given a distinguishing version number.  If the Program
6502 specifies a version number of this License which applies to it and ``any
6503 later version'', you have the option of following the terms and conditions
6504 either of that version or of any later version published by the Free
6505 Software Foundation.  If the Program does not specify a version number of
6506 this License, you may choose any version ever published by the Free Software
6507 Foundation.
6509 @item
6510 If you wish to incorporate parts of the Program into other free
6511 programs whose distribution conditions are different, write to the author
6512 to ask for permission.  For software which is copyrighted by the Free
6513 Software Foundation, write to the Free Software Foundation; we sometimes
6514 make exceptions for this.  Our decision will be guided by the two goals
6515 of preserving the free status of all derivatives of our free software and
6516 of promoting the sharing and reuse of software generally.
6518 @iftex
6519 @heading NO WARRANTY
6520 @end iftex
6521 @ifinfo
6522 @center NO WARRANTY
6523 @end ifinfo
6525 @item
6526 BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
6527 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
6528 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
6529 PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
6530 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
6531 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
6532 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
6533 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
6534 REPAIR OR CORRECTION.
6536 @item
6537 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
6538 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
6539 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
6540 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
6541 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
6542 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
6543 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
6544 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
6545 POSSIBILITY OF SUCH DAMAGES.
6546 @end enumerate
6548 @iftex
6549 @heading END OF TERMS AND CONDITIONS
6550 @end iftex
6551 @ifinfo
6552 @center END OF TERMS AND CONDITIONS
6553 @end ifinfo
6555 @page
6556 @appendixsec Appendix: How to Apply These Terms to Your New Programs
6558   If you develop a new program, and you want it to be of the greatest
6559 possible use to the public, the best way to achieve this is to make it
6560 free software which everyone can redistribute and change under these terms.
6562   To do so, attach the following notices to the program.  It is safest
6563 to attach them to the start of each source file to most effectively
6564 convey the exclusion of warranty; and each file should have at least
6565 the ``copyright'' line and a pointer to where the full notice is found.
6567 @smallexample
6568 @var{one line to give the program's name and a brief idea of what it does.}
6569 Copyright (C) @var{yyyy}  @var{name of author}
6571 This program is free software; you can redistribute it and/or modify
6572 it under the terms of the GNU General Public License as published by
6573 the Free Software Foundation; either version 2 of the License, or
6574 (at your option) any later version.
6576 This program is distributed in the hope that it will be useful,
6577 but WITHOUT ANY WARRANTY; without even the implied warranty of
6578 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6579 GNU General Public License for more details.
6581 You should have received a copy of the GNU General Public License
6582 along with this program; if not, write to the Free Software
6583 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
6584 @end smallexample
6586 Also add information on how to contact you by electronic and paper mail.
6588 If the program is interactive, make it output a short notice like this
6589 when it starts in an interactive mode:
6591 @smallexample
6592 Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
6593 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
6594 This is free software, and you are welcome to redistribute it
6595 under certain conditions; type `show c' for details.
6596 @end smallexample
6598 The hypothetical commands @samp{show w} and @samp{show c} should show
6599 the appropriate parts of the General Public License.  Of course, the
6600 commands you use may be called something other than @samp{show w} and
6601 @samp{show c}; they could even be mouse-clicks or menu items---whatever
6602 suits your program.
6604 You should also get your employer (if you work as a programmer) or your
6605 school, if any, to sign a ``copyright disclaimer'' for the program, if
6606 necessary.  Here is a sample; alter the names:
6608 @example
6609 Yoyodyne, Inc., hereby disclaims all copyright interest in the program
6610 `Gnomovision' (which makes passes at compilers) written by James Hacker.
6612 @var{signature of Ty Coon}, 1 April 1989
6613 Ty Coon, President of Vice
6614 @end example
6616 This General Public License does not permit incorporating your program into
6617 proprietary programs.  If your program is a subroutine library, you may
6618 consider it more useful to permit linking proprietary applications with the
6619 library.  If this is what you want to do, use the GNU Library General
6620 Public License instead of this License.
6622 @node Concept Index,  , GNU General Public License, Top
6623 @comment  node-name,  next,  previous,  up
6624 @unnumbered Index
6626 @printindex cp
6628 @bye