Make allout and Planner work better together by default.
[planner-el.git] / planner-el.texi
blob4667b0b05a26e5dd13f4c81453786274acaeb4b9
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-registry::            Keep track of annotations
140 * planner-zoom::                View and navigate tasks by time period
142 More about Notes
144 * Using Allout Mode::           Quickly navigating your notes
145 * <notes>::                     Note headlines
146 * <past-notes>::                Index of past notes
147 * Note Indices::                
149 Publishing
151 * Publishing Planner pages::    planner-publish.el
152 * Publishing Calendars::        planner-calendar.el
153 * Authz Access Restriction::    planner-authz.el
154 * RSS Publication::             Sharing notes with planner-rss.el
155 * iCal Task Publication::       Sharing tasks with planner-ical.el
156 * RDF Publication::             planner-rdf.el
158 RDF Publication
160 * Publishing with planner-rdf::  
161 * planner-rdf Tags::            
162 * planner-rdf Usage Examples::  
164 Managing Your Information
166 * E-mail::                      Linking notes and tasks to messages
167 * Scheduling and Time::         Tracking appointments and where your time goes
168 * Finances::                    Display your account balances and more
169 * Contacts and Conversations::  BBDB and ERC
170 * Tracking Research and Resources::  The Web, bibliographies, and bookmarks
171 * Tracking Development::        
173 E-mail
175 * Unix mail::                   Unix mailboxes: planner-unix-mail.el              
176 * Gnus::                        Gnus mail and news reader: planner-gnus.el
177 * VM::                          VM mail reader: planner-vm.el
178 * Wanderlust::                  Wanderlust mail reader: planner-wl.el
179 * MH-E::                        MH-E mail reader: planner-mhe.el
180 * Rmail::                       Rmail: planner-rmail.el
182 Scheduling and Time
184 * Diary::                       Using the Emacs diary
185 * Appointments::                Appointments in plan pages: planner-appt.el
186 * Timeclock::                   Time tracking: planner-timeclock.el
187 * schedule.el::                 Project completion: planner-schedule.el
189 Diary
191 * Planner-Diary Advanced Features::  
193 Usage
195 * Task-based Appointments::     
196 * Schedule-based Appointments::  
197 * Viewing Appointments::        
198 * Appointment Updating on Save::  
199 * Appointment and Calendar Integration::  
200 * Appointment Hooks::           
202 Finances
204 * Ledger::                      Personal finances: planner-ledger.el
206 Contacts and Conversations
208 * BBDB::                        Contacts: planner-bbdb.el
209 * Emacs Relay Chat::            Internet Relay Chat: planner-erc.el
211 Tracking Research and Resources
213 * W3m::                         Web browser: planner-w3m.el
214 * BibTeX::                      Bibliographies: planner-bibtex.el
215 * Bookmark::                    Bookmarks: planner-bookmark.el
217 Tracking Development
219 * Log Edit::                    Changelogs: planner-log-edit.el
220 * PSVN::                        svn changesets: planner-psvn.el
221 * XTLA::                        TLA changesets: planner-xtla.el
222 * Gnats::                       Gnats: The GNU bug reporting system
224 Advanced Configuration
226 * Customizing Your Day Pages::  Change your templates
227 * Variables to Customize::      Change various aspects of Planner behavior
228 * Ideas for Other Keybindings::  Add to and change the default keybindings
230 Reference Material
232 * Keeping Track of Time::       
233 * Other Interactive Functions::  
234 * Planner Keybindings::         Default keybindings for Planner
235 * Sample Configuration Files::  
237 Sample Configuration Files
239 * File Organization::           
240 * Bare-Bones Planning::         
241 * Bare-Bones Planning with Plan Pages::  
242 * Tasks on Plan Pages with Some Day Pages::  
243 * Hierarchical Tasks::          
245 @end detailmenu
246 @end menu
248 @node Preface, Introduction, Top, Top
249 @comment  node-name,  next,  previous,  up
250 @chapter Preface
252 This document describes Planner, which was written by John Wiegley and
253 is now maintained by Michael Olson (@pxref{Acknowledgements}).
255 This document is a work in progress, and your contribution will be
256 greatly appreciated. Please e-mail comments and suggestions to the
257 mailing list (@pxref{Getting Help}). In the subject line of your
258 e-mail, include the word @samp{Planner}.
260 This documentation is available in eye-pleasing formats including PDF
261 and HTML at @url{http://www.mwolson.org/static/doc/}.
263 Documentation author: John Sullivan @email{john@@wjsullivan.net}
265 Maintainer: Michael Olson @email{mwolson@@gnu.org}
268 John Sullivan (johnsu01)@*
269 April 25, 2004
271 @node Introduction, Installation, Preface, Top
272 @comment  node-name,  next,  previous,  up
273 @chapter Introduction
275 Planner is an organizer and day planner for Emacs.  It helps you keep
276 track of your pending and completed tasks, daily schedule, dates to
277 remember, notes and inspirations. It is a powerful tool not only for
278 managing your time and productivity, but also for keeping within easy
279 keystroke reach all of the information you need to be productive. It can
280 even publish reports charting your work for your personal web page, your
281 conscience, or your soon-to-be-impressed boss.
283 In fact, because it uses as its building blocks simple plain-text files,
284 it is an incredibly modular and flexible tool capable of shaping and
285 handling your personal information in ways whose variety is limited only
286 by your imagination. Because of this, Planner has a very active and
287 generous community who regularly share their innovations with each
288 other. Many of these modules and extensions are included in the archive
289 that you will download. Once you get the basics down, you'll probably
290 want to explore some of them. But as you read this manual and work with
291 Planner, keep in mind that the basic core is actually very simple, and
292 it might be worth spending time with just that before delving into the
293 customizations.
295 Because they are plain text with very few requirements, the organizer
296 pages kept by Planner can be as basic or as detailed as you
297 like. Your pages can be simple to-do lists with no more additional
298 information than what you would scrawl on a napkin, or they can be a
299 highly technical affair involving hyperlinks, embedded Lisp code,
300 appointment schedules and RSS feeds. As with so much in Emacs, it's
301 all up to you.
303 To get started with Planner, you first need to download it, and possibly
304 also the packages it depends on (@pxref{Installation}).
306 @node Installation, Overview, Introduction, Top
307 @comment  node-name,  next,  previous,  up
308 @chapter Installation
309 @cindex installation
311 Planner depends on Muse. Information for downloading and installing
312 Muse can be found at
313 @url{http://www.mwolson.org/static/doc/muse.html}.
315 Make sure that you use the latest Muse release.  Development code might
316 prove unstable.
318 @menu
319 * Getting the Files::           
320 * Creating Your Planner::       
321 * Components::                  
322 * Advanced Installation::       
323 @end menu
325 @node Getting the Files, Creating Your Planner, Installation, Installation
326 @comment node-name,  next,  previous,  up
327 @section Getting the Files
329 Currently, there are three ways to obtain and install Planner. You can
330 install it from a source archive, Arch repository, or Debian package.
332 @menu
333 * Installing from a Source Archive::  
334 * Installing from Arch::        
335 * Installing from Debian::      
336 @end menu
338 @node Installing from a Source Archive, Installing from Arch, Getting the Files, Getting the Files
339 @comment node-name,  next,  previous,  up
340 @subsection Installing from a Source Archive
341 @cindex source code archive, installing from
343 You can install Planner from the source archive packaged and
344 distributed directly by the maintainer. This archive is provided in
345 both @file{.tar.gz} and @file{.zip} format.
347 @enumerate
348 @item
349 Download and unpack either
350 @url{http://www.mwolson.org/static/dist/planner-latest.tar.gz} or
351 @url{http://www.mwolson.org/static/dist/planner-latest.zip}.
353 @item Edit your @file{~/.emacs} (@file{_emacs} on Microsoft Windows).
355 @example
356 ;; Add the directories to your load path
357 (add-to-list 'load-path "/path/to/muse/lisp")
358 (add-to-list 'load-path "/path/to/planner")
359 (add-to-list 'load-path "/path/to/remember")
361 ;; Load planner
362 (require 'planner)
363 @end example
364 @end enumerate
366 @subsubsection Updating Your Version
368 Download a new version and extract it over the old directory. Don't
369 forget to delete any byte-compiled files (@file{*.elc}) in the
370 directories so that the new code will be used.
372 @node Installing from Arch, Installing from Debian, Installing from a Source Archive, Getting the Files
373 @comment node-name,  next,  previous,  up
374 @subsection Installing from Arch
375 @cindex Arch repositories
376 @cindex Arch, installing from
378 Arch allows you to retrieve previous versions and select specific
379 features and bugfixes. Debian users can install Arch with @kbd{apt-get
380 install tla}. Users of other distributions should see
381 @url{http://regexps.srparish.net/www/}.
383 To get started with Planner using Arch, you'll need to run some initial
384 commands to register your local copy of the archive and retrieve the
385 files.
387 @example
388 # Register the Muse archive
389 tla register-archive http://www.mwolson.org/archives/2006
391 # Register the Planner archive
392 tla register-archive http://arch.gna.org/planner-el/archive-2006
394 # Get the Muse archive
395 tla get mwolson@@gnu.org--2006/muse--main--1.0 muse
397 # Download planner module into the planner/ subdirectory
398 tla get mwolson@@gnu.org--2006-planner-el/planner-el--devel--1.0 planner
399 @end example
401 Then add the following lines to your @code{~/.emacs}:
403 @example
404 ;; Add the directories to your load path
405 (add-to-list 'load-path "/path/to/muse/lisp")
406 (add-to-list 'load-path "/path/to/planner")
407 (add-to-list 'load-path "/path/to/remember")
409 ;; Load planner
410 (require 'planner)
411 @end example
413 You can also browse the Arch repository on the web at
414 @url{http://www.mwolson.org/cgi-bin/archzoom/archzoom.cgi/mwolson@@gnu.org--2006/planner}.
416 @subsubsection Updating Your Version
417 @cindex Arch, updating from
419 To stay up-to-date using Arch, here are some commands that might be
420 useful.
422 To list upstream changes not in local copy:
424 @example
425 # Change to the source directory you are interested in. Example:
426 cd muse/
428 # Display the summary of changes
429 tla missing --summary
430 @end example
432 To update to the latest version:
434 @example
435 cd muse; tla replay
436 cd ../planner; tla replay
437 cd ../remember; tla replay
438 @end example
440 Don't forget to delete any byte-compiled files (@file{*.elc}) in the
441 directories so that the new code will be used.
443 @node Installing from Debian, , Installing from Arch, Getting the Files
444 @comment node-name,  next,  previous,  up
445 @subsection Installing from Debian
446 @cindex Debian package
448 Debian packages for Planner, Muse, and Remember are available in Debian
449 proper as the @code{planner-el}, @code{muse-el}, and @code{remember-el}
450 packages, respectively.
452 If you wish to try experimental packages, add the following lines to
453 your @file{/etc/apt/sources.list}
455 @example
456 deb http://www.mwolson.org/debian/ ./
457 @end example
459 Then, do the following steps as root:
461 @example
462 apt-get update
463 apt-get install muse-el
464 apt-get install planner-el
465 @end example
467 @subsubsection Updating Your Version
468 @cindex Debian package, updating
470 If you installed Planner from Debian, do @kbd{apt-get update; apt-get
471 upgrade} to upgrade all packages that can be upgraded, or @kbd{apt-get
472 update; apt-get install planner-el} to upgrade just planner-el.
474 @node Creating Your Planner, Components, Getting the Files, Installation
475 @section Creating Your Planner
477 Now that you have installed the files for Planner and Muse, you need
478 to set some options to create your first planner.
480 Muse thinks in terms of projects. Each project consists of a group of
481 documents and certain information associated with these
482 documents. Planner is organized as a project within Muse. So, you need
483 to tell Muse a bit about it.
485 Add something like the following code to your @file{.emacs} file.
487 First, give your new Planner project a name. In this case, we use the
488 name, ``WikiPlanner''.
490 @example
491 (setq planner-project "WikiPlanner")
492 @end example
494 Next, add an entry for your project to Muse's master list of
495 projects. Don't forget to use your own name here in place of
496 ``WikiPlanner'' if you have chosen something different.
498 @example
499 (setq muse-project-alist
500       '(("WikiPlanner"
501          ("~/Plans"           ;; where your Planner pages are located
502           :default "TaskPool" ;; use value of `planner-default-page'
503           :major-mode planner-mode
504           :visit-link planner-visit-link)
506          ;; This next part is for specifying where Planner pages
507          ;; should be published and what Muse publishing style to
508          ;; use.  In this example, we will use the XHTML publishing
509          ;; style.
511          (:base "planner-xhtml"
512                 ;; where files are published to
513                 ;; (the value of `planner-publishing-directory', if
514                 ;;  you have a configuration for an older version
515                 ;;  of Planner)
516                 :path "~/public_html/Plans"))))
517 @end example
519 This code should work fine as-is for you as long as the directories
520 you see exist, and as long as you have no other Muse projects besides
521 your planner.
523 The first directory (@file{~/Plans}) is the directory where the
524 source files for your planner will reside. This is the directory where
525 you will actually visit files and edit them.  These files must have a
526 ``.muse'' extension.
528 The second directory (@file{~/public_html/Plans}) is the directory where
529 your planner files will be published by Muse as XHTML.
531 After you have added this code, make sure to either evaluate it or
532 restart Emacs.
534 @node Components, Advanced Installation, Creating Your Planner, Installation
535 @comment node-name,  next,  previous,  up
536 @section Components
538 Now that you have the archive, let's look at what's in it.
540 There should be three directories, named @file{planner}, @file{muse} and
541 @file{remember}.
543 In the @file{planner/} directory, you'll see many files with names like
544 @file{planner-gnus.el}. These are extra modules and extensions for
545 Planner, which you can use to tailor Planner to fit your desired
546 planning and information management habits.
548 In the @file{muse/lisp} directory, you'll see many files with names like
549 @file{muse-blosxom.el}. As in @file{planner/}, these are optional
550 modules and extensions.
552 A minimal working installation includes just @file{planner/planner.el}.
554 You need @file{planner.el} because it provides the core functions for
555 handling tasks, notes, and page navigation. You need @file{Emacs Muse}
556 because it provides the functions used to display your pages (both in an
557 emacs buffer and as HTML), and for connecting them to each other. More
558 specifically, it enables you to have hyperlinks and formatting in your
559 emacs buffers even though the actual files you are working with are
560 saved in plain text. These abilities are used in Planner to format your
561 planner pages the way you like, to create links from your tasks and
562 notes to the materials and projects they refer to, and to optionally
563 ``publish'' your pages in different formats, including HTML.
565 In the @file{remember/} directory are files related to
566 RememberMode. RememberMode does not depend on Planner or Muse, but works
567 best with Planner installed. It is not required in order to use Planner,
568 but it is used by many Planner users to record notes and information to
569 their planner pages.
571 If you are curious, you can open each file in these directories and read
572 the comments at the top, to get an idea of what each extension is used
573 for. They are also all detailed later in this manual.
575 @node Advanced Installation,  , Components, Installation
576 @comment  node-name,  next,  previous,  up
577 @section Advanced Installation
579 Once you decide you want to keep Planner around for a while, there
580 are two additional steps you can take to make using it easier and more
581 efficient. These steps are optional.
583 @itemize
585 @cindex @file{remember.el}
586 @cindex @file{remember-planner.el}
587 @item You can install @file{remember.el} and @file{remember-planner.el}
588 so that you can create Planner notes from anywhere. See the
589 documentation at
590 @uref{http://sacha.free.net.ph/notebook/doc/dev/remember/} for more
591 information.
593 @cindex installing the info file
594 @cindex @file{planner-el.texi}, installing
595 @cindex @file{planner-el.info}, installing
596 @item You can make this document, the Planner info file, appear in
597 the index of info files you see when you type @command{M-x info} or
598 @kbd{C-h i} in Emacs. The instructions for doing this vary depending
599 on whether you have permission to edit certain files on your
600 system. Follow the instructions in @ref{Installing an Info File, ,
601 ,texinfo, Texinfo}, using something like:
603 @example
604 * Planner: (path/to/planner/Planner). Organizer/day planner
605 for Emacs.
606 @end example
608 for the new entry in the info @file{dir} file.
610 @cindex byte compiling
611 @item You can byte-compile @file{planner.el}, @file{Muse},
612 @file{remember.el}, or any of the optional modules you frequently use,
613 in order to improve the speed of their execution. Basically, all you
614 need to do is change to the directory of each project and run
615 @command{make} from the command line. To read more detail about byte
616 compilation, see @ref{Byte Compilation, , ,elisp, Emacs Lisp Reference
617 Manual}.
619 @end itemize
621 @node Overview, Getting Started, Installation, Top
622 @comment node-name,  next,  previous,  up
623 @chapter Overview
625 Planner is a plain-text hyperlinked personal information manager
626 for Emacs that helps you keep track of tasks, notes, and other
627 information. People use Planner to support different ways of planning
628 one's day, from Franklin-Covey and David Allen's Getting Things Done
629 to home-brew hacks. Planner is even used to manage information not
630 normally handled by a personal information manager, like bugtracking,
631 time tracking, and team data. If you start by using Planner as a basic
632 TODO and notes manager, you might find other ways it can help you
633 improve your process.
635 You can use Planner to keep track of your tasks, schedule, notes,
636 and other information you want to store in hyperlinkable text files.
637 You can get the most benefit out of a personal information manager if
638 you use it everyday. Most people add @code{(plan)} to the end of their
639 @file{~/.emacs} so that Planner shows today's schedule and
640 unfinished tasks whenever Emacs starts. If you leave your Emacs
641 running for more than 24 hours, try to get into the habit of running
642 @code{plan} at least once a day.
644 Because your time is important, Planner tries to minimize
645 distractions, making it easier for you to jot down tasks and notes
646 without being distracted from your work. People often make tasks based
647 on the current buffer, so Planner tries to create hyperlinks to
648 whatever you're looking at so that you can jump back to it easily. The
649 @ref{Getting Started} tutorial will show you how to set that up for
650 both tasks and notes.
652 The customizability of Planner means you can make your personal
653 information manager truly personal. Planner strives to be as flexible
654 as possible, and we would love to adapt Planner to fit your needs.
655 Browse through our mailing list (@pxref{Getting Help}) to
656 find out how other people are using Planner, and post your feature
657 requests and bug reports there!
659 Planner is just a tool. It does not dictate a particular way of
660 planning, although it supports some ways better than it supports
661 others. If you want to take some time thinking about planning, read
662 the following reflections for inspiration and ideas. On the other
663 hand, if you want to hit the ground running, see @ref{Getting
664 Started}. If you already have a specific way of planning in mind,
665 check out @ref{Sample Configuration Files}.
667 @menu
668 * Planning based on the Franklin-Covey Approach::  
669 * Why Use Planner::             
670 @end menu
672 @node Planning based on the Franklin-Covey Approach, Why Use Planner, Overview, Overview
673 @comment  node-name,  next,  previous,  up
674 @section Planning Based on the Franklin-Covey Approach
675 @cindex philosophy of planning
677 This is a slightly edited and updated version of an essay by John
678 Wiegley. Read it if you want to get some insights into one way of
679 planning. You can skip this if you want to go straight to planning
680 your day.
682 What is planning?  It can be a nebulous thing to define.  In its
683 essence, however, it is very simple: it's how we achieve our dreams.
685 Our days are filled with time, and hence with actions, whether they
686 be of a mental or physical sort.  But there are two kinds of
687 action: reactive and creative.  Reactive action is a response to
688 the environment, a reaction to stimulus.  Had we enough instincts
689 to ensure survival, we could live according to this kind of action
690 alone.  It is a mode of behavior we share with every living
691 species.
693 The opposite to reactivity is creativity, when we decide upon a
694 course of action that is a wholly a product of personal choice.  We
695 then make decisions as to the steps needed to make this wish a
696 reality.  This is planning.  Planning is essentially a creative
697 endeavor at every step.
699 First, create the idea, what you want to achieve.  Very short-term
700 ideas do not need much more than thinking about how to do it.  But
701 long-term ideas require planning, since the mind cannot contain all
702 of the details.
704 Second, decide how the idea maps into the circumstances you find
705 yourself in.  Some environments will assist your plan, others
706 hinder it.  But step by step, identify every barrier to the
707 realization of your idea, and devise a countermeasure to overcome
708 it.  Once you've mapped things out from beginning to end,
709 accounting for unknowables as best you can, you now have your plan.
711 Third is to break the stages of the plan into parts that are not
712 overwhelming in their complexity.  It is at during this phase that
713 a plan is turned into task items, each to be accomplished within
714 the span of one day's time.  If a task requires several days, break
715 it up further.  The smaller it is, the less your mind will recoil
716 from attempting it.
718 Fourth is to monitor your progress, identifying problems and
719 correcting for them as you go.  Some plans start out unachievable,
720 and remain that way indefinitely, due to a simple lack of
721 observation.  If nothing is working for you, change it.  Otherwise,
722 your plan is merely a well-crafted wish.
724 Fifth is just to do the work, and be patient.  All good plans take a
725 great deal of time, and *cannot* happen immediately.  The groundwork
726 must be laid for each step, or else it will rest on an unsecure
727 foundation.  If you follow your plan doggedly, applying some time to
728 it each day or week, it @emph{will} happen.  Remember the story of the
729 tortoise and the hare.  I've even written a short essay on the
730 necessity of gradual accomplishment, which can be found at
731 @url{http://emacswiki.org/johnw/essays/node2.html}.
733 How can this software help?  Computers are ideal for manipulating
734 information, since they allow you to change things without erasing
735 or rewriting.  And since all plans change quite a bit during their
736 implementation, a planning program can be very helpful.
738 Start by adding the following to your @file{.emacs} (or @file{_emacs}):
740 @example
741 (load "planner")
742 @end example
744 Now, conceive your idea.  I can't believe there's nothing you want
745 from life.  More peace, time to enjoy the world, an end to war?
746 Everyone wants something.  Search deeply, and you will find
747 countless unhoped wishes lurking therein.  Choose one for now, and
748 think on it for a while.
750 Then open a file (using @kbd{C-x C-f}) within the directory named by
751 @code{planner-directory}.  Emacs will automatically recognize this file
752 as a planner file.  Name the file after your plan, such as
753 @file{BetterHealth}.
755 Choose an idea you really want to accomplish.  Struggle to
756 differentiate between the things you want because others want them,
757 and the things you want for yourself.  It takes quite an effort, and
758 may require a long time before you notice the difference.  Many people
759 want to be more healthy to be more attractive, which is an externally
760 driven goal.  Unless @emph{you} really want to accomplish what you
761 envision, the odds are you will fail.  Only our own wishes and dreams
762 possess enough personal energy to see themselves to fruition.  What
763 happens to many of us is simply that we never become conscious of
764 these dreams: what we love, what we desire most.  When I talk to
765 friends, so much of what I hear is things they want because they feel
766 they should want them.  There's just not enough energy there to pursue
767 a good plan, because nearly all of it is negative energy.
769 Do you know what you really want?  Don't worry, many people don't.
770 It's not a question anyone really wants us to pursue, because often
771 we don't want what others do; it doesn't contribute to the social
772 welfare, and all that nonsense.  Somehow we always forget that
773 what's good for the social welfare now, was someone else's crazy
774 dream a hundred years ago.  The human aversion to fundamental
775 change is always one's greatest enemy, so don't waste any time
776 getting bitter about it.
778 For the sake of argument I assume you really do want to be
779 healthier, because you've fallen in love with the ideal of purity,
780 or you understand the connection between your physical self and the
781 world around you, and how this can open up your spirit to desiring
782 more.  I assume.  :)
784 So you're in a Wiki file called @file{BetterHealth}.  Start typing.
785 Type anything related to your idea: what you think about it, your
786 ideas on it, @emph{and especially what the end will look like}.  If
787 you can't visualize the end, you can't plan, since planning is about
788 drawing a line between now and then.
790 When you've typed enough to gain a vision of your goal, start
791 drafting what the possible intermediate steps might be.  Then stop,
792 get up, walk around, enjoy life, and come back to it.  Taking a
793 long time at the beginning is not a bad idea at all, as long as
794 it's not forever.
796 As you chew on your idea, it will begin to become more and more
797 concrete.  You'll have ideas about the smallest pieces, and ideas
798 about the biggest pieces.  Keep going until it starts to take shape
799 before you, and you can see yourself in your mind's eye moving from
800 the present into the future.  Write down this progression, and the
801 sorts of things you might encounter along the way.
803 As you continue, you'll naturally discover discrete phases, or
804 ``milestones'' as managers love to call them.  These are very
805 important, because they let you know you're making progress.  I
806 recommend having a big party with friends every time you achieve a
807 milestone.  A typical plan might have between three and ten.
809 Between the milestones are the bigger pieces of your plan.  Name
810 these pieces using MixedCase words, and you'll notice that Emacs
811 colors and underlines them for you.  Like, FindGoodGym.  Hit return
812 on this highlighted word, and you'll find yourself in another,
813 blank file.  In this file, start drafting your sub-plan, just as
814 you did with the larger plan.  You should find it easier now, since
815 the scope is smaller.
817 As you break down further, you'll notice simple little things that
818 need to get done.  These are your tasks.  Every plan is a
819 succession of tasks.  The difference from reactivity is that each
820 task is part of the larger plan. This is what it means to be
821 systematic: that everything you do helps further your plan.  If you
822 have tasks in your day that contribute to no plan, they are
823 reactive.  Of course, life is full of these, but don't let them
824 take up more than 20% of your day.  If you allow yourself to be
825 dominated by reactive tasks, you'll regret it at the end of your
826 life.  I don't know this personally, but I do know that striving
827 for one's dreams -- and seeing them come to fruition -- is the
828 greatest joy a man can possess.  It is the essence of freedom, of
829 living, of creation.  Reactivity is the opposite of this, and
830 serves only to drain our energy and slacken our spirits.
832 Now that you've thought of a simple task, type @kbd{C-c C-t}. This
833 will ask for a brief description of the task, and when you plan to do
834 it. If you hit @key{RETURN} at the question @samp{When}, it assumes
835 you mean today. It will also pop up a three-month calendar at this
836 question, so you can see where your free days are. Make sure you set
837 the variable @code{mark-diary-entries-in-calendar} to @samp{t} in your
838 @file{.emacs} (or @file{_emacs}) file. This way, you can see which
839 days your appointments fall on. (Read about the Emacs Calendar and
840 Diary in @ref{Calendar/Diary, , , Emacs, GNU Emacs Manual}.)
842 @example
843 (setq mark-diary-entries-in-calendar t)
844 @end example
846 Once your task is in there, go back to your plan and keep
847 generating more tasks.  Generate them all!  Fully describe---as
848 tasks---everything necessary to bring your sub-plan to completion.
849 Don't create tasks for the other sub-plans.  You may have good idea
850 of what they'll look like, but don't bother rendering them into
851 tasks just yet.  Things will change too much between now and then,
852 for that to be a good use of your time.
854 Is your sub-plan now rendered into all of the tasks necessary to
855 reach your first milestone?  Great!  That is the purpose of
856 planner.el.  The rest is really up to you.  If you find that you
857 keep putting things off, and never do them, that's the surest sign
858 you're planning for someone else's dream, and not your own.
860 Here are some of the things planner.el can do, to help you manage
861 and track your tasks:
863 At the beginning of every day, type @kbd{M-x plan}.  This will jump
864 you to the top of the most recent task list before today.  If you
865 skipped a bunch of days, you'll have to open up those files on your
866 own.
868 Probably some of the tasks that day won't be finished -- that's OK.
869 Learning to properly estimate time is a magical, mystical art that few
870 have mastered.  Put your cursor on those undone tasks, and type
871 @kbd{C-c C-c}.  This will move them into today's task page.  You can
872 jump to today's task page at any time by typing @kbd{C-c C-n} (from a
873 Wiki or planning page).  I heartily recommend binding @kbd{C-c n}, to
874 jump you to this page from anywhere:
876 @example
877 (define-key mode-specific-map [?n] 'planner-goto-today)
878 @end example
880 As you look at your task sheet each day, the first thing to do is to
881 ``clock in'' to one of them.  This isn't necessary, and is only
882 helpful if you're around your computer a lot.  But by typing @kbd{C-c
883 C-i} (assuming you have my @file{timeclock.el} on your load-path), it
884 will log the time you spend working on your sub-plan (@pxref{Time
885 Intervals, , , Emacs, GNU Emacs Manual}).  This is helpful for viewing
886 your progress.  Type @kbd{C-c C-o} to clock out.
888 @kbd{C-M-p} and @kbd{C-M-n} will move a task up and down in priority.
889 Priority is represented by a letter A through C.  'A' tasks mean they
890 must be done that day, or else your plan is compromised and you will
891 have to replan.  'B' means they should be done that day, to further the
892 plan, otherwise things will be delayed.  'C' means you can put off the
893 task if you need to, although ultimately it will have to be done.
895 For reactive tasks, the letters mean something different: 'A' means
896 you must do it today, or somebody will roast your chestnuts over an
897 open fire.  'B' means you should do it today, or else someone will
898 be practicing patience at the day's end.  'C' means no one will
899 notice if you don't do it.
901 Again, reactive tasks are ENEMIES OF PLANNING.  Really, until you
902 see them that way, circumstances will push you around and steal
903 your life away.  We have only so many years to use, and everyone is
904 greedy to take them.  It's insidious, almost invisible.  A healthy
905 dislike of reactivity will do wonders for organizing your affairs
906 according to their true priority.
908 The last word that needs to be said concerns ``roles''.  Every person
909 stands in several positions in his life: husband, employee, manager,
910 etc.  These roles will tend to generate tasks not associated with any
911 immediate plan, but necessary to maintain the health and functioning
912 of the role.  My suggestion is to keep this the smallest possible
913 number, and fulfill those that remain well.  How you decide to
914 apportion your time between pursuing grand designs, and fostering deep
915 relationships, is a personal matter.  If you choose well, each will
916 feed the other.
918 I mention this to point that reactivity is something not
919 exclusively associated with tasks that have no master plan, because
920 being a father, for example, is something that rarely proceeds
921 according to orderly plans.  But the role of father itself is its
922 own plan, whose goal is ``to be the best one can'', and whose
923 component tasks are spending time on whatever comes up.  It is, in
924 a sense, an implicit plan.  But reactive tasks follow no plan at
925 all; they are parasites of time that suck the spirit away, whereas
926 properly chose roles actually help fulfill one's own inner needs.
927 At least, this is what I believe.
929 @defun plan force-days
930 Start your planning for the day, beginning with the last day's tasks.
932 If @code{planner-carry-tasks-forward} is non-nil, find the most recent
933 daily page with unfinished tasks and reschedule those tasks to
934 the current day.  If @var{force} is non-nil, examine all past daily
935 pages for unfinished tasks.
937 If @code{planner-carry-tasks-forward} is nil, visit the most recent
938 daily page.  If a daily page for today exists, visit that instead.
940 If @var{force-days} is a positive integer, scan that number of days.
941 If @var{force-days} is @samp{t}, scan all days.
943 @end defun
945 @node Why Use Planner,  , Planning based on the Franklin-Covey Approach, Overview
946 @comment  node-name,  next,  previous,  up
947 @section Why Use Planner?
948 @cindex Planner, why use
950 You can skip this essay if you just want to get started, or read it
951 for some insights into why the previous maintainer is crazy about it.
953 Why I Use Planner, by Sacha Chua
955 I thought about why I liked Planner. Planner as a TODO manager
956 isn't particularly special. Although I can assign tasks to categories
957 and see a breakdown of what projects are taking up my time, Evolution
958 and Microsoft Outlook provide more powerful task support. In other
959 task managers, you can e-mail tasks, assign multiple categories and
960 fill in all sorts of metadata. You can even synchronize your tasks
961 with devices like a phone or PDA. So why use Planner?
963 I realized that integration into my way of life and automatic context
964 clues are what really make planner tasks worth it for me. I don't have
965 to switch to another application to create a task. I can just hit a
966 keyboard shortcut. Planner uses a minibuffer to get the task
967 description. My windows are not rearranged in any way, and I can look
968 at the data that's relevant to a task. Not only that, tasks
969 automatically pick up context clues, like whom I'm talking to on IRC
970 or the file I'm editing at the moment. This cuts down on the explicit
971 context I need to include and makes it easier for me to bring up the
972 task again.
974 As a scheduler, Planner is also not particularly distinguished.
975 Sure, it can display my @file{~/diary}, but for that matter so can
976 @kbd{M-x diary}. Evolution and Outlook can give me a more graphical
977 view of my time, sync with my PDA, and coordinate my schedule with
978 other people. Those applications support detailed schedule entries
979 with powerful cyclic options. On the other hand, Planner gives me
980 a personal, plain text view and (at least the way I use it) requires
981 me to edit a separate file to add new appointments. (I've defined a
982 few shortcut keys to deal with this.) However, it does have one
983 advantage---my schedule is always loaded. I used to use Outlook on
984 Windows, but having my schedule in a separate application meant that I
985 actually looked at it very rarely, as I had turned off reminders
986 because they got annoying.
988 Planner's notes, however, are what really convinced me. I can hit
989 a keyboard shortcut from anywhere and type my notes into a buffer
990 which automatically keeps context information. After typing the note,
991 I can then categorize it. I think that the critical thing here is that
992 interruptions---fleeting thoughts---don't break my flow. I can just
993 pop up a remember buffer, stow that thought away somewhere, and go
994 back to it whenever I want. In contrast, creating a note in Outlook
995 means switching out of my application, making a couple of keystrokes,
996 typing the note in, and then switching back. The context switches make
997 it hard to keep track of where I am and what I'm supposed to remember.
998 Not only that, I need to enter context by hand. Even though I can
999 color my notes and reorganize them in Outlook, I find the context
1000 switch too expensive. I used to keep notes in other knowledge
1001 management tools as well. Some applications allowed me to
1002 drag-and-drop links into the current note, and that was cool. But that
1003 required a manual action, and those applications didn't feel
1004 integrated into my way of working. (Note: You'll need remember.el for
1005 this.)
1007 I guess that's why I like Planner. Unlike other organizers which
1008 don't know anything about the applications I use, Planner tries
1009 its best to integrate into the way I work, and it's easy to extend.
1010 Fortunately I do almost all my work in Emacs, so I can think of my
1011 organizer as integrated into my e-mail client, Internet Relay Chat
1012 client, web browser, file editor and even games. It automatically
1013 picks up context clues from these applications and allows me to easily
1014 jump back to relevant files. It doesn't distract me. It allows me to
1015 key in data and then it gets out of my way.
1017 (That said, it's perfectly okay to use Planner even if you don't live
1018 in Emacs.)
1020 The processing that happens in the background is a bonus, and
1021 publishing my task list and notes online has greatly helped me. It
1022 gives other people a way to see what I'm working on and what I've
1023 planned for the future. Occasionally people write in with additional
1024 resources and helpful tips. (Again, this is purely optional. Many
1025 people don't publish their planner pages. Other people use really
1026 fine-grained access control.)
1028 I think the greatest feature of Planner, though, is its user
1029 community. Because Planner can be easily modified, we can experiment
1030 with a lot of new ideas quickly, and we can tailor Planner to fit our
1031 needs. I love checking my @samp{emacs-wiki-discuss} mail and finding
1032 out how people have tweaked Planner or would like to tweak Planner,
1033 and I've learned a lot by exchanging reflections on organizing one's
1034 life.
1036 I really wasn't an organization freak before I started using Planner.
1037 I often forgot to do my homework or answer important mail. I still
1038 procrastinate now, but at least it's all being kept track of
1039 somewhere! I also really like how Planner lets me to gradually improve
1040 how I'm doing things, and I feel I've come a long way.
1042 Please try it out! We'd love to hear how Planner can become
1043 @emph{your} personal information manager.
1045 @node Getting Started, More about Planner, Overview, Top
1046 @comment  node-name,  next,  previous,  up
1047 @chapter Getting Started
1049 At the end of this tutorial, you will be able to use Planner and
1050 related modules to keep track of your tasks, schedules and notes, all
1051 within the convenience of Emacs.
1053 There are two kinds of pages in a Planner wiki. Day pages show tasks,
1054 schedule, and notes for the day, while plan pages organize related tasks
1055 and notes into a single page.
1057 If you have not yet added planner to your @file{~/.emacs}, add the
1058 following lines:
1060 @example
1061 (add-to-list 'load-path "/path/to/muse/lisp")
1062 (add-to-list 'load-path "/path/to/planner")
1063 (add-to-list 'load-path "/path/to/remember")
1064 (require 'planner)
1065 @end example
1067 This will bring up the most recent day page with unfinished tasks or
1068 create a new day page if necessary. By default, planner pages are
1069 stored in @samp{~/Plans} (@code{planner-directory}).
1071 @menu
1072 * Tasks::                       
1073 * Schedule::                    
1074 * Notes::                       
1075 * Hyperlinks::                  
1076 * Example Page::                
1077 * Review::                      
1078 @end menu
1080 @node Tasks, Schedule, Getting Started, Getting Started
1081 @section Tasks
1083 Let us start by creating a task labelled
1085 @example
1086 Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss
1087 @end example
1089 From anywhere (even this info buffer!), call @kbd{M-x
1090 planner-create-task-from-buffer} to create a new task. Fill in the
1091 description and choose a date by:
1093 @itemize
1094 @item typing 1 - 31 to put the task on that day of the month,
1095 @item accepting the default (today) by pressing RET,
1096 @item selecting the date with mouse-1,
1097 @item
1098 typing +n (where in is an integer) to schedule the task in n days time,
1100 @item typing nil to make an undated task.
1101 @end itemize
1103 For now, accept the default (@samp{today}) by pressing @key{RET}.
1105 You will then be prompted for a plan page. Plan pages gather related
1106 tasks and notes, giving you an overview of what you've done so far.
1107 You can accept the default TaskPool, create your own plan page, or
1108 specify nil to make a task that is not associated with a plan page.
1109 For now, accept the default (@samp{TaskPool}) by pressing RET.
1111 You have created your first task. View today's page with
1112 @kbd{M-x planner-goto-today}. You will see a line of the form
1114 @example
1115 #B  _ Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss (TaskPool)
1116 @end example
1118 If you created the task from this page, then there will be an additional
1119 annotation:
1121 @example
1122 #B  _ Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss : Tasks (TaskPool)
1123 @end example
1125 The URL, @samp{TaskPool} and @samp{Getting Started} are
1126 hyperlinks. You can use TAB and S-TAB to navigate between them and RET
1127 to follow the link.
1129 Create more tasks using @kbd{M-x planner-create-task-from-buffer}.
1130 This is bound to @kbd{C-c C-t} in @code{planner-mode} pages
1131 for your convenience. For example, create the following tasks:
1133 @itemize
1134 @item
1135 @samp{Describe my current way of working and how I would like to work},
1136 for three days from now (@samp{+3}),
1137 @item
1138 @samp{Learn how to schedule a task}, an undated task (@kbd{nil}) on the
1139 TaskPool page,
1140 @item
1141 @samp{Browse through the Planner info manual} for today (@kbd{.} or
1142 accept the defaults), and
1143 @item
1144 @samp{Add (plan) to the end of my [[~/.emacs]]} for today, but without a
1145 plan page (specify @kbd{nil} at the plan page prompt)
1146 @end itemize
1148 Tip: I bind planner-create-task-from-buffer to "F9 t" so that I can
1149 easily call it from anywhere. You can do that with this elisp fragment:
1150 @code{(global-set-key (kbd "<f9> t") 'planner-create-task-from-buffer)}
1152 Next, visit the TaskPool by:
1154 @itemize
1155 @item
1156 @key{TAB}-bing or using the cursor and typing @key{RET} to follow the
1157 link,
1158 @item @kbd{C-x C-f TaskPool RET} to use @code{find-file}, or
1159 @item @kbd{C-c C-f TaskPool RET} to use @code{muse-project-find-file}
1160 @end itemize
1162 You can see an overview of the tasks as scheduled on different days.
1163 Unlike many personal information managers that store all of your data
1164 in one file and then perform magic in order to present different
1165 views, Planner uses plain text files. The data is duplicated and kept
1166 updated by functions. This makes it simpler and easier to modify,
1167 because what you see is (almost) what you get. On the other hand,
1168 you'll need to get used to either editing both files, or using the
1169 built-in functions for editing and updating files. If you prefer not
1170 to work with linked tasks, you can configure Planner to use only plan
1171 pages or use only day pages.
1173 The TaskPool page should list the tasks you created earlier. Go to the
1174 one named Learn how to schedule a task . Type @kbd{C-c C-c}
1175 (@code{planner-copy-or-move-task}) to schedule the task. Type RET to
1176 accept the default (today). Go to the day page by following the link
1177 or calling @kbd{M-x planner-goto} (@kbd{C-c C-j C-d} or the menu bar);
1178 you will see the newly-created task there. You can also use @kbd{C-c
1179 C-c} (@kbd{planner-copy-or-move-task}) to reschedule a task to an
1180 earlier or later date.
1182 Well, that task is done. To mark the task as completed, type @kbd{C-c
1183 C-x} (@code{planner-task-done}). You can also edit the status manually
1184 (change _ to X) as long as you remember to call @kbd{M-x
1185 planner-update-task} to update the link page as well. Updating relies on
1186 the task description being the same, so do not edit this manually.
1188 Quick summary of commands:
1190 @itemize
1191 @item
1192 Go to today's page: @kbd{M-x plan} to carry unfinished tasks forward, or
1193 @kbd{M-x planner-goto-today} to just go to today's page.
1194 @item
1195 Create a task: @kbd{C-c C-t} (@code{planner-create-task-from-buffer}),
1196 or type a task manually (call M-x planner-update-task if the task is
1197 linked)
1198 @item
1199 Mark a task as done: @kbd{C-c C-x} (@code{planner-task-done}), or edit
1200 the task and call @kbd{M-x planner-update-task}
1201 @item Edit a task description: @kbd{M-x planner-edit-task-description}
1202 @item Reschedule a task: @kbd{C-c C-c} (@code{planner-copy-or-move-task})
1203 @item
1204 Reschedule many tasks: Mark a region and use @kbd{M-x
1205 planner-copy-or-move-region}
1206 @item
1207 Change the plan of a task: @kbd{M-x planner-replan-task}, or @kbd{C-c
1208 C-c} (@code{planner-copy-or-move-task}) with a plan page
1209 @item Delete a task: @kbd{M-x planner-delete-task}
1210 @item
1211 Reorder tasks: @key{M-p} (@code{planner-raise-task}) and @key{M-n}
1212 (@code{planner-lower-task}), or normal editing commands like kill and
1213 yank
1214 @item Change task priorities (@samp{#A} > @samp{#B} > @samp{#C}):
1215       @key{C-M-p} (@code{planner-raise-task-priority}) and
1216       @key{C-M-n} (@code{planner-lower-task-priority}),
1217       or edit the task and call @kbd{M-x planner-update-task}.
1218 @end itemize
1220 You can save your tasks with @kbd{C-x C-s} the same way you save any
1221 other file, or Emacs will prompt you to save it when you exit.
1223 @node Schedule, Notes, Tasks, Getting Started
1224 @comment  node-name,  next,  previous,  up
1225 @section Schedule
1227 This is free-form. You can put anything you want into this, or remove
1228 it from @code{planner-day-page-template} entirely. Some people use it
1229 to keep track of their plans for the day with tables like this:
1231 @example
1232 hh:mm | hh:mm | activity
1233 hh:mm | hh:mm | activity
1234 hh:mm | hh:mm | activity
1235 @end example
1237 Remember, Planner files are just plain text. You can add new sections
1238 or remove old ones, or use the suggested sections for entirely
1239 different activities.
1241 @node Notes, Hyperlinks, Schedule, Getting Started
1242 @comment  node-name,  next,  previous,  up
1243 @section Notes
1245 You can put anything you want in this section, or remove it from your
1246 @code{planner-day-page-template} entirely.
1248 You may be interested in @file{remember-planner.el}, part of the
1249 Remember package. @code{remember-planner.el} makes it easy to create
1250 notes from anywhere in Emacs, and it uses the same hyperlink-sensing
1251 code that Planner uses. Notes added by remember-planner.el look like
1252 this:
1254 @example
1255 .#1 Headline 00:00
1256 Body
1257 @end example
1259 and are outlined at the H2 level in published HTML.
1261 If you include the following in your @file{~/.emacs}:
1263 @example
1264 (require 'remember-planner)
1265 (setq remember-handler-functions '(remember-planner-append))
1266 (setq remember-annotation-functions planner-annotation-functions)
1267 @end example
1269 you can easily create context-aware notes. @kbd{M-x remember} will
1270 create a dedicated buffer for you to fill in your note. If Planner
1271 recognizes the buffer as one with context then it will include a
1272 hyperlink at the bottom. The first line is used as a title, so make it
1273 short and meaningful. The rest of the text will be used as the body of
1274 the note. Try it now by creating a note, perhaps about things you'd
1275 like to remember from this tutorial.
1277 Typing @kbd{C-c C-c} after composing will prompt for a plan page to
1278 put this on, with auto-completion. By default, notes will go on
1279 today's page only. If you specify a plan page, the note will go on
1280 today's page and on the plan page. Let's try specifying
1281 @samp{TaskPool} for the note.
1283 If you look at today's page, you'll find a timestamped note that links
1284 to @samp{TaskPool}. Likewise, @samp{TaskPool} contains a note that
1285 links to today's page. Because the text is copied, changes in one will
1286 not be automatically reflected in the other. To update the linked page
1287 after editing a note, use @kbd{M-x planner-update-note}. To change the
1288 plan page of a note, use @kbd{planner-replan-note}.
1290 @node Hyperlinks, Example Page, Notes, Getting Started
1291 @section Hyperlinks
1292 @cindex hyperlinks
1294 Planner automatically creates context-sensitive hyperlinks for your
1295 tasks and notes when you use @code{planner-create-task-from-buffer}
1296 and @code{remember}.
1298 Blue links indicate URLs and Planner pages that already exist. Red links
1299 indicate Planner pages that have not yet been created.
1301 Middle-click or type @key{RET} on any link to view the link in the
1302 current window. Shift-middle-click or type @key{S-RET} to view the
1303 link in another window. @key{TAB} goes to the next link, while
1304 @key{S-TAB} goes to the previous one.
1306 You can pick up hyperlinks using the @code{planner-annotation-as-kill}
1307 function.
1309 @defun planner-annotation-as-kill
1310 Create a context-sensitive hyperlink for the current buffer and copy
1311 it to the kill ring. When called with a prefix argument, prompt for
1312 the link display name.
1313 @end defun
1315 You can then paste it into any Planner buffer by using @kbd{M-x yank}
1316 or the keyboard shortcut.
1318 Hyperlinks are a powerful feature of Planner. You can use them to
1319 hyperlink to mail, news, Web pages, and even IRC connections. See the
1320 section on @ref{Managing Your Information} to find out how to enable
1321 support for various parts of Emacs. Want to add a new hyperlink
1322 scheme? Check out the source code for examples or ask on the mailing
1323 list for help.
1325 @node Example Page, Review, Hyperlinks, Getting Started
1326 @comment  node-name,  next,  previous,  up
1327 @section Example Page
1328 @cindex example page
1329 @cindex planning page, example
1331 An example planner file is given below. You'll notice that Planner
1332 does not have a well-defined user interface. Rather, it's free-form
1333 and open, allowing you to adapt it to your preferences.
1335 @example
1336 ----------------------------------------------------------------------
1337 * Tasks
1339 #B  _ Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss (TaskPool)
1340 #B  _ Browse through the Planner info manual (TaskPool)
1341 #B  _ Add (plan) to the end of my ~/.emacs
1342 #B  X Learn how to schedule a task (TaskPool)
1344 * Schedule
1346 18:00 | 19:00 | Learn how to use Planner
1348 * Notes
1350 Notes are free-form. You can put anything you want into this.
1352 .#1 This is note number one
1354 Notes on note number one!
1356 .#2 This weird ".#2" syntax is used for allout.el enumerated lists
1358 It makes using allout-mode very handy.
1360 @end example
1362 @node Review,  , Example Page, Getting Started
1363 @comment  node-name,  next,  previous,  up
1364 @section Review
1366 @itemize
1368 @item @emph{Ideas for using planner more effectively:}
1370 @itemize
1371 @item
1372 Add @code{(plan)} to the end of your @file{~/.emacs} so that you are
1373 reminded about your tasks every day.
1375 @item
1376 Bind useful functions to shortcut keys and get used to creating tasks
1377 and notes from anywhere.
1379 @item
1380 Think about how you plan your day and look for ways to improve it. Ask
1381 the mailing list (@pxref{Getting Help}) for tips.
1383 @item
1384 Browse the rest of this manual, the source code, and other resources on
1385 the Net for tidbits you can use.
1387 @item Have fun!
1388 @end itemize
1390 @item @emph{Useful functions outside planner buffers:}
1392 @itemize
1393 @item @code{planner-create-task-from-buffer}
1394 @item @code{remember}
1395 @item @code{planner-goto-today}
1396 @item @code{planner-goto}
1397 @item @code{plan}
1398 @end itemize
1400 @item @emph{Useful functions inside planner buffers:}
1402 @itemize
1403 @item @kbd{C-c C-t} (@code{planner-create-task-from-buffer})
1404 @item @kbd{C-c C-x} (@code{planner-task-done})
1405 @item @kbd{M-x planner-edit-task-description}
1407 @item
1408 @kbd{C-c C-c} (@code{planner-copy-or-move-task}), @kbd{M-x
1409 planner-copy-or-move-region}
1411 @item @kbd{M-x planner-replan-task}
1412 @item @kbd{M-x planner-delete-task}
1414 @item
1415 @key{M-p} (@code{planner-raise-task}) and @key{M-n}
1416 (@code{planner-lower-task})
1418 @item @key{C-M-p} (@code{planner-raise-task-priority}) and
1419       @key{C-M-n} (@code{planner-lower-task-priority}),
1420 @item @code{planner-replan-note}
1421 @item @code{planner-update-note}
1422 @end itemize
1424 @end itemize
1426 That's all you need to know in order to use Planner as a basic TODO and
1427 notes manager, but there's a whole lot more. Read through this manual
1428 and our mailing list archives (@pxref{Getting Help}) for lots of
1429 wonderful ideas about planning in Emacs!
1431 @node More about Planner, Managing Your Information, Getting Started, Top
1432 @comment  node-name,  next,  previous,  up
1433 @chapter More about Planner
1435 @menu
1436 * Navigation::                  
1437 * More about Tasks::            
1438 * More about Notes::            
1439 * Making Files Pretty::         
1440 * Annotations::                 
1441 * Interactive Lisp::            
1442 * Publishing::                  
1443 * Experimental Functions::      
1444 @end menu
1446 @node Navigation, More about Tasks, More about Planner, More about Planner
1447 @comment  node-name,  next,  previous,  up
1448 @section Starting with Day Pages
1450 @command{planner-goto-today} opens today's page.  Day pages are named
1451 @samp{YYYY.MM.DD} and contain your notes for the day.
1453 You should see a file that looks like this:
1455 @example
1456 * Tasks
1459 * Schedule
1461 * Notes
1462 @end example
1464 You can type anything you want into this file.  You can add or delete
1465 sections.  When you save, Emacs stores your information in
1466 @code{planner-directory}.
1468 Use the following commands to navigate through day pages:
1470 @defun plan
1471 Start planning the day.  If @code{planner-carry-tasks-forward} is
1472 non-nil, copy the most recent unfinished tasks to today's page, else
1473 open the most recent page.
1474 @end defun
1476 @defun planner-goto (@kbd{C-c C-j C-d})
1477 Prompt for a date using a calendar pop-up and display the
1478 corresponding day page.  You can specify dates partially.  The current
1479 year and month are used if omitted from the input.  For example, if
1480 today is 2004.05.05, then
1482 @itemize
1483 @item @kbd{+1} is one day from now, or @samp{2004.05.06}
1484 @item @kbd{-1} is one day before now, or @samp{2004.05.04}
1485 @item @kbd{12} is equivalent to @samp{2004.05.12}
1486 @item @kbd{8.12} is equivalent to @samp{2004.08.12}
1487 @item @kbd{2005.08.12} is a full date specification
1488 @end itemize
1490 In the calendar buffer, you can also left-click or press @key{RET} on
1491 a date to select it.
1492 @end defun
1494 @defun planner-goto-today (@kbd{C-c C-j C-j})
1495 Display today's page. Create the page if it does not yet exist.
1496 @end defun
1498 @defun planner-goto-tomorrow (@kbd{C-c C-j C-t})
1499 Goto the planner page days @var{after} the currently displayed date.
1500 If @var{days} is nil, go to the day immediately after the currently
1501 displayed date.  If the current buffer is not a daily planner page,
1502 calculate date based on today.
1503 @end defun
1505 @defun planner-goto-yesterday (@kbd{C-c C-j C-y})
1506 Goto the planner page @var{days} before the currently displayed date.
1507 If @var{days} is nil, go to the day immediately before the currently
1508 displayed date.  If the current buffer is not a daily planner page,
1509 calculate date based on today.
1510 @end defun
1512 @defun planner-goto-most-recent
1513 Go to the most recent day with planning info.
1514 @end defun
1516 @defun planner-goto-previous-daily-page
1517 Goto the last plan page before the current date.
1518 The current date is taken from the day page in the current
1519 buffer, or today if the current buffer is not a planner page.
1520 Do not create pages if they do not yet exist.
1521 @end defun
1523 @defun planner-goto-next-daily-page
1524 Goto the first plan page after the current date.
1525 The current date is taken from the day page in the current
1526 buffer, or today if the current buffer is not a planner page.
1527 Do not create pages if they do not yet exist.
1528 @end defun
1530 @defun planner-goto-plan-page page
1531 Opens @var{page} in the the @code{planner-project} Wiki.  Use
1532 @code{planner-goto} if you want fancy calendar completion.
1533 @end defun
1535 @defun planner-show date
1536 Show the plan page for @var{date} in another window, but don't select
1537 it.  If no page for @var{date} exists, return nil.
1538 @end defun
1541 @node More about Tasks, More about Notes, Navigation, More about Planner
1542 @comment  node-name,  next,  previous,  up
1543 @section More about Tasks
1544 @cindex tasks, more about
1546 This section is divided into three parts. In the first part, you can
1547 read about all the options, strategies and commands to help you
1548 efficiently add new tasks to your planner. In the second part, we'll go
1549 over all of the aspects of Planner that relate to organizing, editing,
1550 rescheduling and viewing the tasks you've already created. Finally,
1551 we'll cover some ways to step back and look at various reports and
1552 overviews that can be generated from your planner pages.
1554 You may also be interested in tracking time spent on tasks with
1555 @ref{Timeclock} and estimating project completion time with
1556 @ref{Schedule} (also see @pxref{schedule.el}).
1558 @menu
1559 * Creating New Tasks::          
1560 * Organizing Your Tasks::       
1561 * Task Reports and Overviews::  
1562 @end menu
1564 @node Creating New Tasks, Organizing Your Tasks, More about Tasks, More about Tasks
1565 @comment  node-name,  next,  previous,  up
1566 @subsection Creating New Tasks
1567 @cindex tasks, creating
1569 Planner makes it very easy to quickly add something to your list of
1570 tasks. Once you get used to the basics of
1571 @command{planner-create-task-from-buffer}, you might want to take a
1572 closer look at some things in Planner that can help you create new tasks
1573 in a way that fits with your system.
1575 @menu
1576 * Creating a Task::             
1577 * Task Priorities::             
1578 * Task IDs::                    
1579 * Cyclic Tasks::                
1580 * Task Detail::                 
1581 * Deadlines::                   
1582 @end menu
1584 @node Creating a Task, Task Priorities, Creating New Tasks, Creating New Tasks
1585 @comment  node-name,  next,  previous,  up
1586 @subsubsection Creating a Task
1587 @cindex tasks, creating
1589 You can create a task from any buffer in Emacs by invoking
1590 @command{M-x planner-create-task-from-buffer}.
1592 This command does more than just add an item to your list of tasks. It
1593 also connects that item to some useful context information.
1595 If you create a task while viewing any buffer other than a Planner
1596 day page, Planner will associate the task with a hyperlink to that
1597 buffer. Try it now by creating a task from this Info buffer.
1599 @enumerate
1600 @item @kbd{M-x planner-create-task-from-buffer}
1601 @item
1602 When prompted for the task name, enter @kbd{Learn how to change a task's
1603 status} and press @key{RET}.
1605 @item
1606 When prompted for the date, press @key{RET} to schedule the task for
1607 today.
1609 @item
1610 When prompted for the project page, press @key{RET} to accept the
1611 default page of @samp{TaskPool}. This is a page for tasks not connected
1612 to a larger plan.
1614 @end enumerate
1616 Planner prompts you for two pieces of information when you ask it
1617 to create a task. First, it asks you when you would like to have the
1618 task show up in your planner. If you would like it to be scheduled for
1619 today, you can just hit @key{RET}. If you would like it to be
1620 scheduled for some day during the current month, you can just enter
1621 the date, without the month, like @samp{16}. If you would like it to
1622 be scheduled for some day in a future month of the current year, you
1623 can enter just the month and date, like @samp{06.16}. If you would
1624 like to schedule something for next year, then enter the full date,
1625 like @samp{06.16.2005}. If you do not want this task to appear on a
1626 day page at all, you can enter @samp{nil}.
1628 The second piece of information Planner asks for is the name of
1629 the project to associate the task with. In the above example, you
1630 associated the task with the project ``TaskPool'', which means that
1631 you did not want to associate the task with a particular project or
1632 goal in your life. Another way to do this is to answer the project
1633 prompt by entering @samp{nil}. But instead, you might enter
1634 @samp{LearnPlanner} as the project. This creates a new page called
1635 ``LearnPlanner'' in your planner directory and places an entry for the
1636 task on that page.
1638 The task then exists in two places: once on your day page, to show how
1639 it fits into your daily work; and once on a project page, to show how
1640 it fits into your larger projects and goals. In the future you might
1641 add related tasks like, ``Memorize Planner keybindings''. These
1642 tasks might be scattered over weeks or months worth of day pages, but
1643 as long as you enter the same project name for each, you will have a
1644 way to look at them all together on a single project page.
1646 Planner also creates hyperlinks to enable you to easily move back
1647 and forth between the day page system and the project page
1648 system. Each task on a day page will have a hyperlink to its project
1649 page. Each task on a project page will have a hyperlink to its day
1650 page.
1652 After using Planner for a while, you may find yourself with quite
1653 a few project pages. Keep in mind that completion is enabled at the
1654 project prompt when you create a task, so hitting @kbd{SPC} or
1655 @kbd{TAB} at the prompt will show you a list of your current project
1656 pages.
1658 Once the task is created, you are returned to the buffer you were
1659 working in again, Planner gets out of your way, and you can go on
1660 about your business. Later on, when you decide to actually work on
1661 that ``Memorize Planner keybindings'' task, you will be able to
1662 follow the hyperlink from that task on your day or project page
1663 directly to the relevant node in the Planner info file!
1665 By default, @command{M-x planner-create-task-from-buffer} creates
1666 medium-priority tasks, marked with the letter @samp{B}.  But you can
1667 specify a particular priority or change the default (@pxref{Task
1668 Priorities}).
1670 You don't have to use @command{planner-create-task-from-buffer} to
1671 create tasks. You can also create new tasks manually by typing them
1672 directly on your day or project page in the format Planner expects. You
1673 can even still create hyperlinks by using Muse formatting as you
1674 manually type the new task. Keep in mind also that tasks do not have to
1675 be linked to any other page.
1677 For convenience, @command{planner-create-task-from-buffer} is bound to
1678 @kbd{C-c C-t} in Planner buffers.  You can bind
1679 @command{planner-create-task-buffer} to a shortcut key.  See the
1680 manual for your Emacs distribution to find out more about keybinding.
1682 @defun planner-create-task-from-buffer title date plan-page
1683 Create a new task named @var{title} on @var{date} based on the current
1684 buffer.
1686 With a prefix, associate the task with the current planner page.  If
1687 you create a task on a date page, you will be prompted for a plan
1688 page.  If you create a task on a plan page, you will be prompted for a
1689 day page.  If nil is specified, the task is created only on the
1690 current page.
1692 See @code{planner-create-task} for more information.
1694 The new task is created at the top or bottom of the first block of
1695 tasks on the scheduled day page (if any), depending on the value of
1696 @code{planner-add-task-at-end-flag}.
1697 @end defun
1699 @defun planner-create-task title date annotation plan-page
1700 Create a new task named @var{title} based on the current Wiki page.
1701 If @var{date} is non-nil, makes a daily entry on @var{date}, else
1702 makes an entry in today's planner page. It's assumed that the current
1703 Wiki page is the page you're using to plan an activity. Any time
1704 accrued to this task will be applied to that page's name in the
1705 timelog file, assuming you use timeclock (@pxref{Time Intervals, , ,
1706 Emacs, GNU Emacs Manual}). If @var{annotation} is non-nil, it will be
1707 used for the page annotation. If @var{plan-page} is non-nil, the task
1708 is associated with the given page.
1710 With a prefix, associate the task with the current planner page.  If
1711 you create a task on a date page, you will be prompted for a plan
1712 page.  If you create a task on a plan page, you will be prompted for a
1713 day page.  If nil is specified, the task is created only on the
1714 current page.
1716 You probably want to call @code{planner-create-task-from-buffer}
1717 instead.
1719 The new task is created at the top or bottom of the first block of
1720 tasks on the scheduled day page (if any), depending on the value of
1721 @code{planner-add-task-at-end-flag}.
1722 @end defun
1724 @node Task Priorities, Task IDs, Creating a Task, Creating New Tasks
1725 @comment  node-name,  next,  previous,  up
1726 @subsubsection Task Priorities
1728 You can set the priority of a task when you create it, rather than
1729 waiting to adjust it after the fact. In order to do this, call the
1730 function corresponding to the priority you want. You probably want to
1731 bind these functions to some keys if you intend to use them much.
1733 @itemize
1734 @item @code{planner-create-high-priority-task-from-buffer}
1735 creates a task with priority @samp{A}.
1737 @item @code{planner-create-medium-priority-task-from-buffer}
1738 creates a task with priority @samp{B}.
1740 @item @code{planner-create-low-priority-task-from-buffer}
1741 creates a task with priority @samp{C}.
1742 @end itemize
1744 Or, you can change the default priority of
1745 @command{planner-create-task-from-buffer} by customizing
1746 @var{planner-default-task-priority}.
1748 You can actually use just one general priority, but using more than
1749 one color-codes your tasks and gives you a better overview of your
1750 day.
1753 @node Task IDs, Cyclic Tasks, Task Priorities, Creating New Tasks
1754 @comment  node-name,  next,  previous,  up
1755 @subsubsection Task IDs
1756 @cindex @file{planner-id.el}, using
1757 @cindex tasks, IDs
1759 After loading @file{planner.el}, make sure that @file{planner-id.el} is
1760 in your load path and add this to your @file{.emacs} (or @file{_emacs}):
1762 @example
1763 (require 'planner-id)
1764 @end example
1766 This module modifies the behavior of @file{planner.el}, adding global
1767 task IDs so that tasks can be edited and updated. Planner IDs are of
1768 the form @samp{@{@{Identifier:Number@}@}}.
1770 @subheading Options
1772 @defopt planner-id-add-task-id-flag
1773 Non-nil means automatically add global task IDs to newly-created
1774 tasks. If nil, use @command{planner-id-add-task-id} to add IDs to
1775 existing tasks, or @command{planner-id-add-task-id-to-all} to add to
1776 all tasks on the current page.
1777 @end defopt
1779 @defopt planner-id-update-automatically
1780 Non-nil means automatically update linked tasks whenever a page is
1781 saved. If nil, use @command{planner-update-task} to update the linked
1782 task. By default, linked tasks are automatically updated.
1783 @end defopt
1785 @defopt planner-id-tracking-file
1786 File that contains ID tracking data. This file is automatically
1787 overwritten.
1788 @end defopt
1790 @subheading Functions
1792 The following interactive functions are defined in @file{planner-id.el}:
1794 @defun planner-id-jump-to-linked-task &optional info
1795 Display the linked task page. If @var{info} is specified, follow that
1796 task instead.
1797 @end defun
1799 @defun planner-id-add-task
1800 Add a task ID for the current task if it does not have one
1801 yet. Update the linked task page, if any.
1802 @end defun
1804 @defun planner-id-update-tasks-on-page &optional force
1805 Update all tasks on this page. Completed or cancelled tasks are not
1806 updated. This can be added to @code{write-file-functions}. If
1807 @var{force} is non-nil, completed and cancelled tasks are also
1808 updated.
1809 @end defun
1811 @defun planner-id-add-task-id-to-all
1812 Add a task ID for all the tasks on the page. Update the linked page,
1813 if any.
1814 @end defun
1816 @defun planner-id-search-id id
1817 Search for all occurrences of @var{id}.
1818 @end defun
1820 @defun planner-id-follow-id-at-point
1821 Display a list of all pages containing the ID at point.
1822 @end defun
1824 @defun planner-id-follow-id-at-mouse event
1825 Display a list of all pages containing the ID at mouse. @var{event} is
1826 the mouse event.
1827 @end defun
1829 @node Cyclic Tasks, Task Detail, Task IDs, Creating New Tasks
1830 @comment  node-name,  next,  previous,  up
1831 @subsubsection Cyclic Tasks
1832 @cindex @file{planner-cyclic.el}, using
1833 @cindex tasks, cyclic
1834 @cindex cyclic tasks
1835 @cindex recurring tasks
1837 If there are tasks that you have to do regularly, you can have Planner
1838 schedule those tasks automatically.
1840 Make sure that @file{planner-cyclic.el} is in your load path and add
1841 this to your @file{.emacs} (or @file{_emacs}):
1843 @example
1844 (require 'planner-cyclic)
1845 @end example
1847 Create a diary file named @file{~/.diary.cyclic-tasks}
1848 (or the value of @code{planner-cyclic-diary-file}). Here is an example:
1850 @example
1851 Tuesday #B0 _ Study Japanese
1852 Friday #B0 _ Study Japanese (JapaneseStudies)
1853 @end example
1855 The first will be a plain task, the second will be linked.  The first
1856 line will automatically create its task every Tuesday, while the
1857 second will create it every Friday.
1859 You can schedule tasks in a variety of ways. This module uses the same
1860 syntax for specifying when tasks will be scheduled as the Emacs diary
1861 uses for appointments and events. See @ref{Date Formats, the GNU Emacs
1862 Manual, Date Formats,emacs, the GNU Emacs Manual}, and @ref{Sexp Diary
1863 Entries, the GNU Emacs Lisp Reference Manual, Sexp Diary
1864 Entries,elisp, the GNU Emacs Lisp Reference Manual}, for a full
1865 description of the possibilities.
1867 By default, planner-cyclic creates multiple tasks if you let tasks build
1868 up (that is, the next Tuesday rolls around and you @emph{still} haven't
1869 marked the task as done.) To turn off this behavior:
1871 @example
1872 (setq planner-cyclic-diary-nag nil)
1873 @end example
1875 @subheading Functions
1877 @file{planner-cyclic-diary} includes the following interactive
1878 functions:
1880 @defun planner-cyclic-create-tasks-maybe
1881 Maybe create cyclic tasks. This will only create tasks for future
1882 dates or today.
1883 @end defun
1885 @node Task Detail, Deadlines, Cyclic Tasks, Creating New Tasks
1886 @comment  node-name,  next,  previous,  up
1887 @subsubsection Task Detail
1888 @cindex tasks
1890 You may find your planner pages getting very full, so that you want to
1891 have one broad task entry be linked to a more specific list of
1892 sub-tasks. Or, maybe you want to have a number of notes linked to a
1893 particular task.
1894 @cindex tasks, sub-
1895 @cindex tasks, meta-
1896 @cindex meta-tasks
1897 @cindex sub-tasks
1899 This can be done with targets.  You can have a task that is really a
1900 meta-task:
1902 @example
1903 #A1  _ Do things in RevelleLog#13 @{@{Tasks:101@}@} (RevelleLog)
1904 @end example
1906 @samp{RevelleLog#13} could then be a list of sub-tasks in the form of
1907 a note, or any kind of note.
1909 Or, instead of pointing to a particular note on @samp{RevelleLog}, you
1910 could have the whole page be tasks that you enter in manually, without
1911 linking them to another page. You can just type them in like this:
1913 @example
1914 #A1  _ First specific thing to do
1915 @end example
1917 This way, the tasks will only appear on this specific project page,
1918 and not on any daily page, so you only see them when you want to look
1919 up all of the specific tasks associated with @samp{#A1  _ Do things in
1920 RevelleLog @{@{Tasks:101@}@} (RevelleLog)}.
1922 As you can see, the ability to manually enter tasks is one of
1923 Planner's nicest features. It allows you to create tasks that are
1924 not assigned to a specific date (by manually entering them on a
1925 project page with no date) or to a specific project (by manually
1926 entering them on a day page with no project). Yet as long as you enter
1927 them using the syntax it understands, Planner will continue to
1928 recognize them as tasks.
1930 Another way to have a task not be connected to a particular date is to
1931 do @kbd{C-c C-c} (@code{planner-copy-or-move-task}) and specify
1932 @samp{nil} when asked for the date.
1934 If you would like to see a list of all of your unfinished tasks, do
1935 @kbd{M-x planner-list-unfinished-tasks}. This function only checks
1936 day plan pages, not project pages.
1938 @node Deadlines,  , Task Detail, Creating New Tasks
1939 @comment  node-name,  next,  previous,  up
1940 @subsubsection Deadlines
1941 @cindex tasks, deadlines for
1942 @cindex deadlines, task
1943 @cindex @file{planner-deadline.el}, using
1945 You can use @file{planner-deadline.el} to automatically recalculate
1946 days to a deadline by adding @code{(require 'planner-deadline)} to
1947 your @file{~/.emacs}. With the default setup, make your tasks of the
1948 form
1950 @example
1951 #A0 _ Some task @{@{Deadline: 2004.09.12@}@}
1952 @end example
1954 (Note: There must be at least one space after the colon.)
1956 After you run @code{planner-deadline-update} to update task descriptions,
1957 the task will be of the form
1959 @example
1960 #A0 _ Some task @{@{Deadline: 2004.09.12 - 2 days@}@}
1961 @end example
1963 @subheading Options
1965 @defopt planner-deadline-regexp
1966 Regular expression for deadline data.
1967 The special deadline string should be regexp group 1. The
1968 date (YYYY.MM.DD) should be regexp group 2.
1969 @end defopt
1971 @subheading Functions
1973 @defun planner-deadline-update
1974 Replace the text for all tasks with deadlines. Deadlines are of the
1975 form @samp{@{@{Deadline: YYYY.MM.DD@}@}} by default.
1976 @end defun
1978 @defun planner-deadline-change &optional date
1979 Change the deadline of current task to @var{date}. If @var{date} is nil,
1980 remove deadline.
1981 @end defun
1983 @node Organizing Your Tasks, Task Reports and Overviews, Creating New Tasks, More about Tasks
1984 @comment  node-name,  next,  previous,  up
1985 @subsection Organizing Your Tasks
1986 @cindex tasks, organizing
1987 @cindex tasks, old
1989 Okay, now that you've gotten the hang of creating tasks, you're probably
1990 facing a really long list of things to do. How can you organize them so
1991 that they don't overwhelm you? Planner gives you a number of strategies
1992 for dealing with large numbers of tasks.
1994 @enumerate
1995 @item Arrange your tasks in the rough order you're going to do them.
1996 @item Use #A, #B and #C task priorities to differentiate between
1997       high-priority, normal and low-priority tasks.
1998 @item Schedule your tasks onto different days.
1999 @item Group your tasks into plan pages.
2000 @item Don't schedule all your tasks.
2001 @end enumerate
2003 @enumerate
2005 @item @emph{Task order}
2007 To remind yourself to do tasks in a certain order, simply edit the
2008 lines so that they're in the order you want. You can use normal
2009 editing commands like kill, yank and transpose-line to reorder the
2010 tasks, or use @key{M-p} (@code{planner-raise-task}) and @key{M-n}
2011 (@code{planner-lower-task}) to rearrange the tasks.
2013 @item @emph{Task priorities}
2015 By default, tasks are created with medium priority (@samp{#B}). You
2016 can make a task high-priority (@samp{#A}) or low-priority (@samp{#C})
2017 by manually editing the task and calling M-x planner-update-task to
2018 update the linked page. Alternatively, you can use @key{C-M-p}
2019 (@code{planner-raise-task-priority}) and @key{C-M-n}
2020 (@code{planner-lower-task-priority}) to modify the task and update the
2021 linked page.
2023 You can edit the priority of a task using @kbd{M-x
2024 planner-edit-task-priority}, or manually edit it and call @kbd{M-x
2025 planner-update-task} to update tasks on the linked page.
2027 @item @emph{Schedule your tasks on different days}
2029 You don't have to do everything today. Is this a task you would rather
2030 do tomorrow? Schedule it for then instead. You can specify @samp{+n}
2031 or @samp{-n} whenever you are asked for a date, where @var{n} is the
2032 number of days before or after the current file's date or today.
2033 Don't over-procrastinate things, though!
2035 @item @emph{Plan pages}
2037 Plan pages let you group related tasks and notes together for easy
2038 reference. For example, you could have a plan page for each major
2039 project or goal in your life, like @samp{GoodHealth} or
2040 @samp{FurtherStudies}.
2042 Although plan pages start by grouping everything under a @samp{*
2043 Tasks} header, you can organize your plan pages in different ways. For
2044 example, you can separate groups of tasks with blank lines, and
2045 Planner will sort tasks within each group.
2047 @item @emph{Tasks without dates}
2049 Plan pages also allow you to have undated tasks or tasks with no
2050 particular deadlines. This keeps your daily task list small and
2051 manageable while making it easier for you to find things to do if you
2052 have free time. Make sure you check your plan pages regularly so that
2053 you don't completely forget about them.
2055 For automated scheduling of the next task on a plan page after you
2056 complete a task, see the section in
2057 @uref{http://sacha.free.net.ph/notebook/emacs/planner-config.el} named
2058 ``Schedule next undated task from same project''.
2060 @end enumerate
2063 @menu
2064 * Multiple Projects::           
2065 * Viewing Tasks::               
2066 * Modifying Tasks::             
2067 * Carrying Over Unfinished Tasks::  
2068 * Task Numbering::              
2069 * Task Ranks::                  
2070 * Grouping Tasks::              
2071 @end menu
2073 @node Multiple Projects, Viewing Tasks, Organizing Your Tasks, Organizing Your Tasks
2074 @comment  node-name,  next,  previous,  up
2075 @subsubsection Associating Tasks with Multiple Projects
2076 @cindex multiple projects
2077 @cindex planner-multi.el, using
2079 You can use @file{planner-multi.el} to associate a task with more than
2080 one project. That way, you can easily keep GTD-style context lists as
2081 well as project-related lists.
2083 To use multiple projects, add the following to your @samp{~/.emacs}:
2085 @example
2086 (require 'planner-multi)
2087 @end example
2089 Under GNU Emacs, you can specify multiple projects by separating them
2090 with a single space. For example, you can specify @kbd{planner doc}
2091 when creating a task to associate the task with those two projects.
2093 Under XEmacs, you can specify multiple projects by typing @kbd{RET}
2094 after each entry and terminating the list with another @kbd{RET}. For
2095 example, to specify @kbd{planner} and @kbd{doc}, you would type
2096 @kbd{planner RET doc RET RET} at the prompt.
2098 If you want to see an overview of all of your tasks as well as
2099 project- or context-specific lists, you can set
2100 @code{planner-multi-copy-tasks-to-page} to your overview page(s). For
2101 example, set it to @samp{TaskPool} to be able to see an overview of
2102 all of your unfinished tasks. You can also set this to multiple pages
2103 such as @samp{[[TasksByProject][p]] [[TasksByContext][c]]} and use
2104 @file{planner-trunk.el} to sort and organize tasks for easy reference.
2105 (@pxref{Grouping Tasks})
2107 @subheading Options
2109 @defopt planner-multi-copy-tasks-to-page
2110 Automatically copy newly-created tasks to the specified page.
2111 @end defopt
2113 By default, tasks are removed from
2114 @code{planner-multi-copy-tasks-to-page} when you call
2115 @code{planner-task-done} or @code{planner-task-cancelled}. If you
2116 prefer to keep a copy of the task, remove
2117 @code{planner-multi-remove-task-from-pool} from
2118 @code{planner-mark-task-hook}.
2120 If you want to use a different separator instead of spaces, customize
2121 the @code{planner-multi-separator} variable.
2123 @defopt planner-multi-separator
2124 String that separates multiple page references.
2126 For best results, this should be something recognized by
2127 @code{muse-link-at-point} so that links are highlighted
2128 separately.
2129 @end defopt
2131 @node Viewing Tasks, Modifying Tasks, Multiple Projects, Organizing Your Tasks
2132 @comment  node-name,  next,  previous,  up
2133 @subsubsection Viewing tasks
2134 @cindex tasks, viewing
2136 Review the tasks scheduled for today by typing @kbd{M-x
2137 planner-goto-today}.  If you created the task from the previous
2138 section in this tutorial, you should see a line that looks like
2140 @example
2141 #A _ Learn how to change a task's status from Tasks (TaskPool)
2142 @end example
2144 If you have @code{planner-use-task-numbers} set to non-nil, you will see
2145 something like the following instead.
2147 @example
2148 #A0 _ Learn how to change a task's status from Tasks (TaskPool)
2149 @end example
2151 From left to right, these are what the symbols mean:
2153 @itemize
2154 @item @samp{A} - Priority.  A (high)
2155 @item
2156 @samp{0} - Priority number.  It is calculated whenever you save the file
2157 or call @command{planner-renumber-tasks}, provided that
2158 @code{planner-use-task-numbers} is non-nil.  Tasks are numbered in
2159 ascending order according to priorities.
2160 @item @samp{_} - Status.  _ (unfinished)
2161 @end itemize
2163 If you click on @samp{Tasks} or press @key{RET} while your cursor is
2164 in the link, Emacs will display the previous info page.
2166 If you select @samp{TaskPool}, Emacs will display the @samp{TaskPool}
2167 plan page.  Plan pages organize your tasks and notes about a project
2168 in one file.
2170 @subheading Functions
2172 You can use @command{planner-seek-next-unfinished-task} to move to the
2173 next unfinished task on the current page.
2175 @defun planner-list-tasks-with-status status &optional pages
2176 Display all tasks that match the STATUS regular expression on all day
2177 pages.  The PAGES argument limits the pages to be checked in this
2178 manner:
2180 @itemize
2181 @item @code{t}: check all pages
2182 @item regexp: search all pages whose filenames match the regexp
2183 @item list of page names: limit to those pages
2184 @item alist of page/filenames: limit to those pages
2185 @end itemize
2187 Called interactively, this function will search day pages by
2188 default. You can specify the start and end dates or leave them as
2189 nil to search all days. Calling this function with an interactive
2190 prefix will prompt for a regular expression to limit pages.
2191 Specify @samp{.} or leave this blank to include all pages.
2193 This function could take a long time.
2194 @end defun
2196 @defun planner-list-unfinished-tasks &optional pages
2197 Display all unfinished tasks. @var{pages} follows
2198 planner-list-tasks-with-status.
2199 @end defun
2201 @defun planner-jump-to-linked-task task-info
2202 Display the task page linked to by the current task or
2203 @var{task-info}.
2204 @end defun
2206 @node Modifying Tasks, Carrying Over Unfinished Tasks, Viewing Tasks, Organizing Your Tasks
2207 @comment  node-name,  next,  previous,  up
2208 @subsubsection Modifying Tasks
2209 @cindex tasks, modifying
2210 @cindex tasks, editing
2212 To select a task, move your cursor to the line containing the task.
2214 Change a task's priority (@samp{A}, @samp{B} or @samp{C}) by editing
2215 the line. @samp{#A} tasks are important. @samp{#B} are medium
2216 priority. @samp{#C} are low priority. Whenever you save the file or
2217 call @kbd{M-x planner-fix-tasks}, tasks are sorted and numbered
2218 according to priority and status.
2220 Change a task's status by calling one of the following functions:
2222 @itemize
2223 @item planner-task-in-progress @samp{o} (@kbd{C-c C-z})
2224 @item planner-task-done @samp{X} (@kbd{C-c C-x})
2225 @item planner-task-cancelled @samp{C} (@kbd{C-c C-S-x})
2226 @item planner-task-delegated @samp{D}
2227 @item planner-task-pending @samp{P}
2228 @item planner-task-open @samp{_}
2229 @end itemize
2231 After changing the status using a function, look at the
2232 @samp{TaskPool} plan page.  The task is also updated on the linked
2233 page.  If you changed the task status manually by replacing the status
2234 with another character, you will need to call
2235 @command{planner-update-task} to update the linked page.
2237 To reschedule a task, call @command{planner-copy-or-move-task} (@kbd{C-c
2238 C-c}) and choose a new date.  You can mark a region and type @kbd{M-x
2239 planner-copy-or-move-region} to reschedule all the contained tasks to a
2240 different date.  Enter @samp{nil} for the date if you don't want the
2241 task or group of tasks to appear on any date page at all anymore. This
2242 is a good way to ``de-schedule'' a task for the time being, but still
2243 keep it linked to a plan page for possible future scheduling.
2245 To change the plan page associated with a task, call
2246 @command{planner-replan-task}.  Enter @samp{nil} for the plan page if
2247 you don't want the task to appear on any plan page anymore. If you
2248 precede the command with a prefix argument, the text of the original
2249 plan page will appear in the prompt for easy editing.
2251 Since the same task may exist on two or more pages, such as a date page
2252 and a plan page, it is dangerous to edit the description of the task by
2253 hand. You should not do it unless you want to make the exact same
2254 changes on all its linked pages.
2256 Instead of doing this by hand, you should use
2257 @command{planner-edit-task-description}. This will prompt you for the
2258 changes to the task description and then update all the other pages to
2259 which the task is linked.  Or, you can just use
2260 @command{planner-delete-task} to remove the task from both pages, and
2261 then create it again with the new desired description.
2263 To remind yourself to do tasks in a certain order, simply edit the
2264 lines so that they're in the order you want.
2265 @command{planner-raise-task} and @command{planner-lower-task} update
2266 the priorities on linked pages automatically. You can organize tasks
2267 into groups by putting a blank line between groups of tasks.
2268 Planner will maintain the groupings and only sort the tasks within
2269 that group.
2271 @subheading Functions
2273 @defun planner-replan-task page-name
2274 Change or assign the plan page for the current task.  @var{page-name}
2275 is the new plan page for the task. Use
2276 @code{planner-copy-or-move-task} if you want to change the date. With a
2277 prefix, provide the current link text for editing.
2278 @end defun
2280 @defun planner-raise-task-priority
2281 Change a low-priority task to a medium-priority task and a
2282 medium-priority task to a high-priority task (C to B to A).
2283 @end defun
2285 @defun planner-lower-task-priority
2286 Change a high-priority task to a medium-priority task and a
2287 medium-priority task to a low-priority task (A to B to C).
2288 @end defun
2290 @defun planner-raise-task arg
2291 Move a task up @var{arg} steps.  By default, @var{arg} is 1.
2292 @end defun
2294 @defun planner-lower-task  arg
2295 Move a task down @var{arg} steps.  By default, @var{arg} is 1.
2296 @end defun
2298 @defun planner-edit-task-description description
2299 Change the description of the current task, updating the linked page
2300 if any.
2301 @end defun
2303 @defun planner-delete-task
2304 Delete this task from the current page and the linked page.
2305 @end defun
2307 @defun planner-update-task
2308 Update the current task's priority and status on the linked page.
2309 Tasks are considered the same if they have the same description.
2310 This function allows you to force a task to be recreated if it
2311 disappeared from the associated page.
2312   
2313 Note that the text of the task must not change. If you want to be able
2314 to update the task description, see @code{planner-edit-task-description}
2315 or @file{planner-id.el}.
2316 @end defun
2318 See @command{planner-install-extra-task-keybindings} for additional
2319 task-related shortcuts.
2321 @node Carrying Over Unfinished Tasks, Task Numbering, Modifying Tasks, Organizing Your Tasks
2322 @comment  node-name,  next,  previous,  up
2323 @subsubsection Carrying Over Unfinished Tasks
2324 @cindex tasks, carrying over
2326 Sometimes you won't be able to cross off all the tasks on your list.
2327 Planner makes it easy for you to keep track of things you still have
2328 to do by automatically rescheduling unfinished tasks from the past few
2329 days. By default, the @command{plan} command searches for unfinished
2330 tasks from the last three days and reschedules them onto today. If you
2331 open Planner every day, this should cover weekends easily.
2333 It's a good idea to start Planner whenever you start Emacs. That way,
2334 Planner can help remind you about today's tasks, appointments, and other
2335 things. To automatically start Planner whenever you start up Emacs, add
2336 the following code to the end of your @file{~/.emacs}:
2338 @example
2339 (plan)
2340 @end example
2342 Now, every time you start Emacs (which should be more or less once a
2343 day), you'll see today's page. If you don't finish all the tasks today,
2344 you'll see them again tomorrow.
2346 It's a good idea to start Planner every time you start Emacs so that
2347 you get reminded about your task list. If you prefer to start Planner
2348 manually, remember to call @kbd{M-x plan} every so often to make sure
2349 that you don't forget any unfinished tasks. Safe in the knowledge that
2350 Planner tasks won't slip through the cracks (unlike little slips of
2351 paper that will invariably get mislaid), you can then get on with the
2352 rest of your life.
2354 If your increased productivity with Planner leads to a well-deserved
2355 two-week vacation, then you'll need to tell Planner to search more days
2356 for unfinished tasks. By using @kbd{M-x plan}, you can automatically
2357 bring forward tasks over a given number of days or even scan all the
2358 days since time immemorial. @kbd{C-u 15 M-x plan} reschedules all
2359 unfinished tasks from the last 15 days. @kbd{C-u -1 M-x plan} checks all
2360 of your past day pages for unfinished tasks.
2362 Like everything else in Planner, you can adapt @kbd{M-x plan} to your
2363 particular way of life. For example, if you find yourself starting up
2364 Emacs and Planner every day--including weekends--because it's just so
2365 much fun, you can set the @code{planner-carry-tasks-forward} to 1.
2366 This can make your Emacs startup marginally faster. On the other hand,
2367 if you normally start Emacs once a week, you can set it to 7 or 8. If
2368 you're worried about tasks dropping off your radar, you can set it to
2369 0. You can set the value of @var{planner-carry-tasks-forward} either
2370 with @key{M-x customize-variable RET planner-carry-tasks-forward RET},
2371 or by putting @code{(setq planner-carry-tasks-forward 3)} (replacing
2372 @code{3} with the value appropriate for what you want) in your
2373 @file{~/.emacs} file.
2375 On the other hand, you might prefer to reschedule tasks yourself. If
2376 you set @code{planner-carry-tasks-forward} to @code{nil}, then
2377 @command{M-x plan} and @code{(plan)} will bring you to the most recent
2378 page with unfinished tasks if there is no page for today. You can then
2379 use @command{planner-copy-or-move-task} and
2380 @command{planner-copy-or-move-region} to reschedule tasks. This is
2381 probably more hassle than it's worth, though, so let Planner take care
2382 of this for you.
2384 @subheading Options
2386 @defopt planner-carry-tasks-forward
2387 If non-nil, carry unfinished tasks forward automatically.
2388 If a positive integer, scan that number of days in the past.
2389 If 0, scan all days for unfinished tasks.
2390 If t, scan one day in the past (old behavior).
2391 If nil, do not carry unfinished tasks forward.
2392 @end defopt
2394 @subheading Functions
2396 @defun plan &optional force-days
2397 Start your planning for the day, carrying unfinished tasks forward.
2399 If @var{force-days} is a positive integer, search that many days in the
2400 past for unfinished tasks.
2401 If @var{force-days} is @code{0} or @code{t}, scan all days.
2402 If @var{force-days} is @code{nil}, use the value of
2403 @code{planner-carry-tasks-forward} instead, except t means scan only
2404 yesterday
2406 @end defun
2408 @defun planner-copy-or-move-task date force
2409 Reschedule the task for @var{date}. If @var{force} is non-nil, the
2410 task is moved regardless of status. It also works for creating tasks
2411 from a Note. Use @code{planner-replan-task} if you want to change the
2412 plan page in order to get better completion.
2413 @end defun
2415 @defun planner-copy-or-move-region beg end date muffle-errors
2416 Move all tasks from @var{beg} to @var{end} to @var{date}.
2417 @code{planner-copy-or-move-region} will copy or move all tasks from
2418 the line containing @var{beg} to the line just before @var{end}. If
2419 @var{muffle-errors} is non-nil, no errors will be reported.
2420 @end defun
2422 @node Task Numbering, Task Ranks, Carrying Over Unfinished Tasks, Organizing Your Tasks
2423 @comment  node-name,  next,  previous,  up
2424 @subsubsection Task Numbering
2426 By default, tasks are numbered according to their position on the
2427 page.  Task numbers allow you to refer to tasks using Muse links.
2428 For example, the @samp{#A1} task in @file{2004.08.16} can be referred to
2429 as @samp{2004.08.16#A1}.
2431 Note that task numbers change every time you re-sort and re-number tasks
2432 with @code{planner-fix-tasks}.  As a result, they are only reliable for
2433 references to past tasks.
2435 If you find yourself not using this functionality, you can turn off task
2436 numbers by using the following option.
2438 @subheading Options
2440 @defopt planner-use-task-numbers
2441 Non-nil means use task numbers when creating tasks.  This allows you
2442 to refer to past tasks if your tasks are numbered appropriately.
2443 If you set this to nil, you can save space in your plan files.
2444 @end defopt
2446 @node Task Ranks, Grouping Tasks, Task Numbering, Organizing Your Tasks
2447 @comment  node-name,  next,  previous,  up
2448 @subsubsection Task Ranks
2449 @cindex ranking tasks
2450 @cindex tasks, ranking
2451 @cindex @file{planner-rank.el}, using
2453 @file{planner-rank.el} models Franklin Covey's Urgency and Importance
2454 principle. When you think about a task, there are two aspects in
2455 consideration: Urgency and Importance. You may want to do the most
2456 urgent things first, like answering an email, or you may want to do
2457 the most important things first, like reading this manual. Or much
2458 better, balance Urgency and Importance and decide what to do.
2460 @file{planner-rank.el} can help you balance.
2462 Urgency and Importance are both measured by scores from 0-9. The
2463 higher the score, the more you want to do it first. 9 stands for ``I
2464 should have done this'' and 0 stands for ``I can forget this''.
2466 If you are using the planner @ref{Deadlines} feature, the Urgency
2467 score is automatically calculated from how many days are left to meet
2468 the deadline. By default, it will score 9 if the task is overdue and 0
2469 if the deadline is years away. Please refer to the docstring of
2470 @code{planner-rank-deadline-urgency-map-list} for detail.
2472 The task rank is calculated from Urgency and Importance scores. As
2473 different people balance urgency and importance differently, a number
2474 of @code{planner-rank-calculate-rank-*} functions are provided. The
2475 algorithms vary from a simple average to something like a weighted
2476 root mean square deviation.
2478 The aggressive versions of these functions
2479 (@code{planner-rank-calculate-rank-*-aggressive}) will make sure if
2480 one of Urgency and Importance is high, the resulting rank will be high
2481 as well. @code{planner-rank-calculate-rank-weighted-*} functions weigh
2482 the Urgency and Important scores depending on
2483 @code{planner-rank-importance-vs-urgency-factor}.
2485 Call @code{planner-rank-test-algorithm} on each of the functions and
2486 check the result tables to see which one you like most, and set it to
2487 @code{planner-rank-rank-calculate-function}. Alternatively, accept the
2488 defaults and tweak them when you get a better feel for ranking.
2490 Once the Rank is calculated, the @ref{Task Priorities} will be
2491 automatically reset. If the Rank is greater than or equal to
2492 @code{planner-rank-priority-A-valve}, the task priority will be
2493 @samp{A}, if the Rank is between @code{planner-rank-priority-A-valve}
2494 and @code{planner-rank-priority-B-valve}, the priority will be @samp{B},
2495 else it will be @samp{C}.
2497 After setting the task importance and deadline, you can leave it as
2498 is. As the deadline approaches, the task priority will automatically
2499 be raised and the task re-colored to catch your eyes.
2501 If you are using @code{planner-sort-tasks} (see @pxref{Making Files
2502 Pretty}), you can set @code{planner-sort-tasks-key-function} to one of
2503 @code{planner-sort-tasks-by-rank},
2504 @code{planner-sort-tasks-by-importance}, and
2505 @code{planner-sort-tasks-by-urgency}.
2507 @subheading Options
2509 @defopt planner-rank-change-hook
2510 Functions to run after @code{planner-rank-change}.
2511 @end defopt
2513 @defopt planner-rank-priority-A-valve
2514 Tasks with rank greater than or equal to this value will be set to
2515 priority @samp{A}.
2516 @end defopt
2518 @defopt planner-rank-priority-B-valve
2519 Tasks with rank greater than or equal to this value and less than
2520 @code{planner-rank-priority-A-valve} will be set to priority
2521 @samp{B}. Tasks with rank less than this value will be set to priority
2522 @samp{C}.
2523 @end defopt
2525 @defopt planner-rank-deadline-urgency-map-list
2526 Defines how to calculate the Urgency score according to how many days
2527 are left to meet the deadline.
2528 @end defopt
2530 @defopt planner-rank-default-importance
2531 Default importance value for newly added rank.
2532 @end defopt
2534 @defopt planner-rank-default-urgency
2535 Default urgency value for newly added rank.
2536 @end defopt
2538 @defopt planner-rank-importance-vs-urgency-factor
2539 How much do you think importance is more ``important'' than urgency.
2540 This will be used in @code{planner-rank-calculate-rank-weighted-*}
2541 functions.
2542 @end defopt
2544 @defopt planner-rank-rank-calculate-function
2545 Define the function called to calculate rank.
2546 @end defopt
2548 @subheading Functions
2550 @defun planner-rank-change &optional importance urgency
2551 Set the Importance and Urgency of the current task.
2552 @end defun
2554 @defun planner-rank-update-current-task
2555 Recalculate rank for the current task.
2556 @end defun
2558 @defun planner-rank-update-all
2559 Recalculate rank for all tasks in the current page
2560 @end defun
2562 @defun planner-rank-update-all
2563 Recalculate rank for all tasks in the current page
2564 @end defun
2566 @node Grouping Tasks,  , Task Ranks, Organizing Your Tasks
2567 @comment  node-name,  next,  previous,  up
2568 @subsubsection Grouping Tasks with planner-trunk.el
2569 @cindex grouping tasks
2570 @cindex tasks, grouping
2571 @cindex @file{planner-trunk.el}, using
2573 @file{planner-trunk.el} helps you automatically group tasks according
2574 to a set of rules. It sorts and splits your tasks, adding a blank line
2575 between groups of tasks. For example, if today's page looks like this:
2577 @example
2578 * Tasks
2580 #B   _ Buy milk (GroceryShopping)
2581 #B   _ Learn how to use planner-trunk (PlannerMode)
2582 #B   _ Buy a notebook (Bookstore)
2583 #B   _ Buy cereal (GroceryShopping)
2584 #B   _ Set up my own planner-trunk rules (PlannerMode)
2585 #B   _ Customize my stylesheet (MuseMode)
2586 #B   _ Go for a health checkup (BetterHealth)
2587 @end example
2589 @noindent
2590 then you might want to group the tasks into: planner and muse,
2591 shopping list, and other items. If you set up the appropriate rules by
2592 customizing @code{planner-trunk-rule-list}, @file{planner-trunk.el}
2593 can automatically rewrite that section line this:
2595 @example
2596 * Tasks
2598 #B   _ Learn how to use planner-trunk (PlannerMode)
2599 #B   _ Set up my own planner-trunk rules (PlannerMode)
2600 #B   _ Customize my stylesheet (MuseMode)
2602 #B   _ Buy milk (GroceryShopping)
2603 #B   _ Buy a notebook (BookstoreShopping)
2604 #B   _ Buy cereal (GroceryShopping)
2606 #B   _ Go for a health checkup
2607 @end example
2609 @noindent
2610 In this case, you would set @code{planner-trunk-rule-list}
2611 to @code{(("." nil ("PlannerMode\\|MuseMode" "Shopping")))}.
2613 You can load @file{planner-trunk} with @kbd{M-x load-library RET
2614 planner-trunk RET} or add @code{(require 'planner-trunk)}. If you're
2615 not yet comfortable with Emacs Lisp, you can use @kbd{M-x
2616 customize-variable RET planner-trunk-rule-list RET} to edit this rule
2617 using an easy-to-use interface.
2619 WARNING: Do not keep non-task information in the Tasks section.
2620 planner-trunk will delete @strong{all} non-task lines from the Tasks
2621 section of your plan page in the process of grouping the tasks.
2623 After you set up @code{planner-trunk-rule-list}, use @command{M-x
2624 planner-trunk-tasks} to try out your rules until you're satistfied.
2626 If you want to do this automatically, you can use @code{(add-hook
2627 'planner-mode-hook 'planner-trunk-tasks)} to trigger it automatically
2628 whenever you open a Planner page.
2630 @node Task Reports and Overviews,  , Organizing Your Tasks, More about Tasks
2631 @subsection Task Reports and Overviews
2632 @cindex task reports
2633 @cindex task overviews
2634 @cindex reports, task
2635 @cindex overviews, task
2636 @cindex reports, accomplishment
2637 @cindex tasks, overview of
2639 Planner provides a number of different ways to generate different
2640 presentations of your tasks.
2642 @menu
2643 * Accomplishments::             
2644 * Task Overviews::              
2645 * <tasks> tag::             
2646 * planner-registry::            Keep track of annotations
2647 * planner-zoom::                View and navigate tasks by time period
2648 @end menu
2650 @node Accomplishments, Task Overviews, Task Reports and Overviews, Task Reports and Overviews
2651 @comment  node-name,  next,  previous,  up
2652 @subsubsection Generating Daily Accomplishment Reports
2653 @cindex reports, accomplishment
2654 @cindex @file{planner-accomplishments.el}, using
2655 @cindex tasks, overview of
2656 @cindex task reports
2657 @cindex reports, task
2658 @cindex overviews, task
2659 @cindex task overviews
2661 You can use @file{planner-accomplishments.el} to get a summary of your
2662 task activity for a particular day. The report is grouped by status
2663 and plan (on day pages) or date (on plan pages). An example report
2664 follows:
2666 @example
2667 Link        | Unfinished | In progress | Delegated | Completed | Total
2668 nil         | 1          | 0           | 0         | 6         | 7
2669 TaskPool    | 1          | 1           | 0         | 3         | 5
2670 Planner     | 0          | 0           | 1         | 1         | 2
2671 SchoolWork  | 0          | 0           | 0         | 1         | 1
2672 Total       | 2          | 1           | 1         | 11        | 15
2673 @end example
2675 This lets you see how you balance your time between your projects.
2677 @itemize
2679 There are currently two ways to use @file{planner-accomplishments.el}.
2681 @item Displaying a temporary buffer
2683 You can call @code{planner-accomplishments-show} to display a buffer
2684 containing the current page's accomplishment report.
2686 @item Rewriting sections of your planner
2688 Choose this approach if you want accomplishment reports to be in
2689 their own section and you would like them to be readable in your
2690 plain text files even outside Emacs. Caveat: The accomplishment
2691 section should already exist in your template and will be rewritten
2692 when updated.
2694 To use, set @code{planner-accomplishments-section} to the name of the
2695 section to rewrite (default: @samp{Accomplishments}). If you want
2696 rewriting to be automatically performed, call
2697 @code{planner-accomplishments-insinuate}. The accomplishments will be
2698 rewritten whenever you save a planner page. If you want rewriting to
2699 be manual, call @code{planner-accomplishments-update}.
2701 @end itemize
2703 @subheading Options
2705 @defopt planner-accomplishments-section
2706 Header for the accomplishments section in a plan page.
2707 Used by @code{planner-accomplishments-update}.
2708 @end defopt
2710 @defopt planner-accomplishments-status-display
2711 Alist of status-label maps also defining the order of display.
2712 Used by @code{planner-accomplishments-format-table}.
2713 @end defopt
2715 @subheading Functions
2717 @defun planner-accomplishments-insinuate ()
2718 Automatically call @code{planner-accomplishments-update} when saving
2719 tasks in @code{planner-mode} buffers.
2720 @end defun
2722 @defun planner-accomplishments-update ()
2723 Rewrite @code{planner-accomplishments-section} with a summary of tasks
2724 on this page.
2725 @end defun
2727 @defun planner-accomplishments-show ()
2728 Display a buffer with the current page's accomplishment report.
2729 @end defun
2731 @node Task Overviews, <tasks> tag, Accomplishments, Task Reports and Overviews
2732 @comment  node-name,  next,  previous,  up
2733 @subsubsection Seeing an Overview of Tasks
2734 @cindex tasks, overview of
2735 @cindex task reports
2736 @cindex reports, task
2737 @cindex overviews, task
2738 @cindex task overviews
2739 @cindex @file{planner-tasks-overview.el}, using
2741 You can see a list of tasks with @file{planner-tasks-overview.el}.
2742 Seeing how you've scheduled tasks over the next few days can help you
2743 decide when to schedule another task. Table entries will be of the form
2745 @var{date} | @var{link} | @var{priority} @var{status} | @var{task-description}
2747 @subheading Functions
2749 To display the tasks between a set of day pages, use
2751 @defun planner-tasks-overview start end
2752 Display an overview of your tasks from @var{start} to @var{end}. If
2753 @var{start} is nil, start from the very first day page. If @var{end}
2754 is nil, include the very last day page. You can use
2755 @code{planner-expand-name} shortcuts here, like @kbd{+1} or @kbd{-1}.
2756 Pressing @key{RET} at the prompt will use today.
2758 Once in a @code{planner-tasks-overview} buffer, you can use
2759 the keyboard shortcut @key{o} to change the overview period.
2760 @end defun
2762 You can sort the task display with the following functions:
2764 @defun planner-tasks-overview-sort-by-date
2765 Sort the tasks by date. Keyboard shortcut: @key{1}
2766 @end defun
2768 @defun planner-tasks-overview-sort-by-plan
2769 Sort the tasks by associated plan page. Keyboard shortcut: @key{2}
2770 @end defun
2772 @defun planner-tasks-overview-sort-by-priority
2773 Sort the tasks by priority. Keyboard shortcut: @key{3}
2774 @end defun
2776 @defun planner-tasks-overview-sort-by-status
2777 Sort the tasks by status. Keyboard shortcut: @key{4}
2778 @end defun
2780 You can jump to linked tasks with
2782 @defun planner-tasks-overview-jump other-window
2783 Display the current task. If a prefix argument is supplied, show the
2784 task in another window. Keyboard shortcut: @key{j}
2785 @end defun
2787 @defun planner-tasks-overview-jump-other-window
2788 Display the current task in another window. Keyboard shortcut: @kbd{C-u j}
2789 @end defun
2791 You can view a summary of the tasks in your plan pages with
2793 @defun planner-tasks-overview-show-summary &optional file-list
2794 Count unscheduled, scheduled, and completed tasks for FILE-LIST. If
2795 called with an interactive prefix, prompt for the plan page(s) to
2796 display. Load @file{planner-multi.el} to be able to specify multiple
2797 pages.
2798 @end defun
2800 @subheading Keys
2802 @key{TAB}, @kbd{SHIFT-TAB} and @key{RET} navigate links in the usual
2803 fashion.
2805 @node <tasks> tag, planner-registry, Task Overviews, Task Reports and Overviews
2806 @subsubsection <tasks> tag
2807 @cindex <tasks> tag
2808 @cindex task reports
2809 @cindex reports, task
2810 @cindex overviews, task
2811 @cindex task overviews
2812 @cindex tasks, overview of
2814 @samp{<tasks>} is replaced by a report of tasks over all day pages in
2815 published pages (@pxref{Publishing}).
2817 @example
2818 All incomplete tasks
2820 <tasks status="^X">
2822 All completed tasks
2824 <tasks status="X">
2826 All tasks
2828 <tasks>
2829 @end example
2831 Warning: this function can be slow, as it checks all the day pages!
2833 @node planner-registry, planner-zoom ,<tasks> tag, Task Reports and Overviews
2834 @comment  node-name,  next,  previous,  up
2835 @section planner-registry
2836 @cindex planner-registry
2838 The @file{planner-registry} module provides a way to keep track of all
2839 the URLs in your projects, and to list them depending on the current
2840 buffer.  The URLs are defined in @code{muse-url-protocols} module from
2841 Muse.
2843 If a URL has been created by @code{planner-create-task-from-buffer},
2844 going to that buffer and calling @code{planner-registry-show} will show
2845 you where Planner put the URL.
2847 @subheading Getting started
2849 To begin using @file{planner-registry}, add the following to your
2850 Planner configuration file.
2852 @example
2853 (require 'planner-registry)
2854 (planner-registry-initialize)
2855 @end example
2857 You must put it after the place where Planner has been loaded in your
2858 configuration file.
2860 If you want the registry to be updated each time you save a Planner
2861 file, add the following to your Planner configuration.
2863 @example
2864 (planner-registry-insinuate)
2865 @end example
2867 If you don't want to update the registry each time a file is written,
2868 you can do it manually with @code{planner-registry-update}: it will
2869 update the registry for saved Planner/Muse buffers only.
2871 @file{planner-registry} does not define any keybindings by default.  Its
2872 most useful interactive function is @code{planner-registry-show}.
2874 @subheading Example usage
2876 Say for example that you created a task from an e-mail.  Go to that
2877 e-mail and call @code{planner-registry-show}: it will open a new buffer
2878 displaying the files (in a muse links format) where a link to this
2879 e-mail has been added.
2881 @subheading Options
2883 @file{planner-registry} defines the following options.
2885 @defopt planner-registry-file
2886 The file where @file{planner-registry} stores its URL registry.
2887 @end defopt
2889 @defopt planner-registry-min-keyword-size
2890 The minimum size for keywords.
2891 @end defopt
2893 @defopt planner-registry-max-keyword-size
2894 The maximum size for keywords.
2895 @end defopt
2897 @defopt planner-registry-max-number-of-keywords
2898 The maximum number of keywords.
2899 @end defopt
2901 @defopt planner-registry-ignore-keywords
2902 A list of keywords to ignore.
2903 @end defopt
2905 @defopt planner-registry-show-level
2906 Level used by the @code{planner-registry-show} function.
2907 0 means that this function shows only exact matches.
2908 1 means that this function also shows descriptive matches.
2909 2 (or more) means that this function also shows fuzzy matches.
2910 @end defopt
2912 @node planner-zoom, , planner-registry, Task Reports and Overviews
2913 @comment  node-name,  next,  previous,  up
2914 @section planner-zoom
2915 @cindex planner-zoom
2916 @cindex view, weekly
2917 @cindex view, quarterly
2918 @cindex view, monthly
2919 @cindex view, yearly
2921 When assessing where you stand in relation to the tasks you have set
2922 out for yourself, you might want a way to survey those tasks in groups
2923 divided by time periods, like by the week or by the month. You could
2924 create all of these overview pages by hand, but if you like to have
2925 this kind of overview frequently, you might find manually creating
2926 such pages to be tedious and time consuming.
2928 @file{planner-zoom} is an optional module designed to make it easy to
2929 view your task information grouped by year, quarter, month, week or
2930 day.
2932 To install this module, just load it in your @file{.emacs} (or
2933 @file{_emacs}):
2935 @example
2936 (require 'planner-zoom)
2937 @end example
2939 This module will recognize planner pages named according to the
2940 following scheme:
2942 @table @asis
2944 @item year view
2945 @file{2006.Year}
2947 @item quarter view
2948 @file{2006.Quarter2}
2950 @item month view
2951 @file{2006.January}
2953 @item week view
2954 @file{2006.January.Week3}
2956 @item day view
2957 @file{2006.01.02}
2959 @end table
2961 @subheading Keybindings
2963 This module also adds key bindings that you can use when looking at a
2964 Planner page to easily jump between the different time-period views.
2966 @table @kbd
2968 @item S-up
2969 Move to the view corresponding to the time period one step larger than
2970 the current one. For example, it moves from the weekly view to the
2971 monthly view. It calls @code{planner-zoom-iup}.
2973 @item S-down 
2974 Move to the view corresponding to the time period one step smaller
2975 than the current one. For example, it moves from the weekly view to
2976 the daily view. It calls @code{planner-zoom-idown}.
2978 @item S-left
2979 Stay in the same time-period view as the current one, but move one
2980 interval earlier. For example, it moves from @file{2006.January.Week3}
2981 to @file{2006.January.Week2}. It calls @code{planner-zoom-iprev}.
2983 @item S-right
2984 Stay in the same time-period view as the current one, but move one
2985 interval later. For example, it moves from @file{2006.January.Week3}
2986 to @file{2006.January.Week4}. It calls @code{planner-zoom-inext}.
2988 @end table
2990 @subheading Example usage
2992 Look at the page named @file{2006.January} and then hit @kbd{S-down}
2993 which will show @file{2006.January.Week1}. Then hit @kbd{S-left} and
2994 @kbd{S-right} to look at @file{2006.January.Week2},
2995 @file{2006.January.Week3}, etc.
2997 @subheading Advanced tips and options
2999 You can use any prefix argument with @code{planner-zoom-iup} and
3000 @code{planner-zoom-idown} to have the new view display in a window
3001 other than the current one. This also works with a nonnumeric prefix
3002 argument and @code{planner-zoom-inext} or @code{planner-zoom-iprev}.
3003 For these two functions, a numeric prefix will specify the number of
3004 intervals to move.
3006 If you don't like the default patterns for naming the time-period view
3007 pages, you can change them by customizing @code{planner-zoom-regexps}.
3009 Some people believe weeks start with Sunday, and some believe they
3010 start with Monday. To accommodate both of these colliding worldviews,
3011 @code{planner-zoom-first-day-of-week} can be customized. Its default
3012 value is @samp{1}, which is Monday. If you would prefer Sunday, change
3013 it to @samp{0}. The month to which a week belongs is the month in
3014 which the first day of the week falls.
3016 @subheading Command reference
3018 @defun planner-zoom-iup name other-window
3019 Move to the next higher level in the hierarchy. With a prefix
3020 argument, show the desired page in the other window.
3021 @end defun
3023 @defun planner-zoom-idown name other-window
3024 Move to the next lower level in the hierarchy. If the current date is
3025 within the higher-level time range, zoom to the lower level time range
3026 that also contains today. Otherwise, just go to the first lower-level
3027 time range. With a prefix argument, show the desired page in the other
3028 window.
3029 @end defun
3031 @defun panner-zoom-inext name num other-window
3032 Move to the next time range at the same level in the hierarchy. With a
3033 numeric prefix argument, move by that number of time ranges. With a
3034 non-numeric prefix argument, show the desired page in the other window.
3035 @end defun
3037 @defun planner-zoom-iprev name num other-window
3038 Move to the previous time range at the same level in the hierarchy.
3039 With a numeric prefix argument, move by that number of time ranges.
3040 With a non-numeric prefix argument, show the desired page in the other
3041 window.
3042 @end defun
3044 @node More about Notes, Making Files Pretty, More about Tasks, More about Planner
3045 @section More about Notes
3046 @cindex notes, more about
3047 You can put anything in this section. Notes added by
3048 @file{remember-planner.el} look like this:
3050 @example
3051 .#1 Headline
3052 Body
3053 @end example
3055 and are outlined at the @code{H3} level. If you want to take notes
3056 conveniently, check out @file{remember-planner.el}.
3058 Planner by default organizes the notes on a planner page so that
3059 the most recent note is first. Each note is numbered, with the oldest
3060 note labeled @samp{.#1}. If you would like to reverse this behavior,
3061 look at @kbd{C-h v planner-reverse-chronological-notes}.
3063 Notes are associated with day pages, but can also be associated with
3064 plan pages when they are created.  A linked note looks like this:
3066 @example
3067 .#1 Headline (LinkedNote#1)
3068 Text
3069 @end example
3071 You can jump to the linked note with
3072 @command{planner-jump-to-linked-note}.
3074 Deleting a note can be dangerous, as the notes are automatically
3075 numbered.  Removing a note could break links in other pages.
3077 @subheading Functions
3079 @defun planner-create-note page
3080 Create a note to be remembered in @var{page} (today if @var{page} is
3081 nil).  If @code{planner-reverse-chronological-notes} is non-nil, create
3082 the note at the beginning of the notes section; otherwise, add it to
3083 the end.  Position point after the anchor.
3084 @end defun
3086 @defun planner-create-note-from-task
3087 Create a note based on the current task and update the current task to
3088 link to the note.
3089 @end defun
3091 @defun planner-renumber-notes
3092 Update note numbering.
3093 @end defun
3095 @defun planner-jump-to-linked-note note-info
3096 Display the note linked to by the current note or @var{note-info} if
3097 non-nil.
3098 @end defun
3100 @defun planner-search-notes regexp limit
3101 Return a buffer with all the notes returned by the query for
3102 @var{regexp}.  If called with a prefix argument, prompt for
3103 @var{limit} and search days on or after @var{limit}.
3104 @end defun
3106 The following sections include instructions for displaying,
3107 manipulating, and navigating your notes efficiently.
3109 @menu
3110 * Using Allout Mode::           Quickly navigating your notes
3111 * <notes>::                     Note headlines
3112 * <past-notes>::                Index of past notes
3113 * Note Indices::                
3114 @end menu
3116 @node Using Allout Mode, <notes>, More about Notes, More about Notes
3117 @subsection Using Allout Mode
3118 @cindex Allout mode
3119 @cindex notes, navigating
3120 @cindex notes, formatting
3121 @cindex notes, displaying
3123 The format of the notes in Planner works well with Allout mode, which
3124 provides helpful commands for navigating and formatting outlines. You
3125 can, for example, hide the bodies of all the notes on a page so you can
3126 see just their headlines. You can also jump easily from headline to
3127 headline, skipping over the bodies in between.
3129 The commands for using Allout mode vary depending on which Emacs version
3130 you are using. In either case, type @kbd{M-x load-library @key{RET}
3131 allout @key{RET}} to start. If you are using CVS Emacs, type @kbd{M-x
3132 allout-mode @key{RET}}. If you are using an earlier version of Emacs,
3133 type @kbd{M-x outline-mode @key{RET}}.
3135 The exact commands then available to you differ depending on your Emacs
3136 version, but you can view the commands and their keybindings by typing
3137 @kbd{C-h m}. In CVS Emacs, they will start with @command{allout-}, while
3138 in previous versions, they will start with @command{outline-}.
3140 @node <notes>, <past-notes>, Using Allout Mode, More about Notes
3141 @subsection <notes>
3143 @samp{<notes>} is replaced by a list of note headlines when the page
3144 is published. For example, the notes tag in the following example will
3145 be replaced by the two headlines when published. (@pxref{Publishing})
3147 @example
3148 <notes>
3150 * Notes
3152 .#1 This is a headline
3154 and this is body text
3156 .#2 This is another headline
3158 and this is more body text
3159 @end example
3161 @samp{<notes>} is useful if you want to provide a quick summary of
3162 blog entries at the top of your page. Just add it to your
3163 @code{planner-day-page-template}.
3165 @node <past-notes>, Note Indices, <notes>, More about Notes
3166 @subsection <past-notes>
3168 @samp{<past-notes>} is replaced by an index of note headlines.
3169 If @var{start} is specified, it lists notes starting from that date.
3170 If @var{directory} is specified, you can index notes in another
3171 planner directory.
3173 @example
3174 All the notes I've taken in 2004:
3176 <past-notes start="2004.01.01" end="2004.12.31">
3177 @end example
3179 @node Note Indices,  , <past-notes>, More about Notes
3180 @comment  node-name,  next,  previous,  up
3181 @subsection Note Indices
3182 @cindex @file{planner-notes-index.el}, using
3183 @cindex notes, indexing
3185 Make sure that @file{planner-notes-index.el} is in your load path and
3186 add this to your @file{.emacs} (or @file{_emacs}):
3188 @example
3189 (require 'planner-notes-index)
3190 @end example
3192 Then you can use tags of the form:
3194 @example
3195 <planner-notes-index page="2004.03.02">
3196 <planner-notes-index from="2004.03.01" to="2004.03.31">
3197 <planner-notes-index limit="10">
3198 <planner-notes-index page="PlanPage">
3199 <planner-notes-index-month-table month="2004.03" limit="5">
3200 <planner-notes-index-month-table month="2004.03">
3201 @end example
3203 You can also use the following interactive functions:
3205 @code{planner-notes-index}
3206 @code{planner-notes-index-days}
3207 @code{planner-notes-index-weeks}
3208 @code{planner-notes-index-months}
3209 @code{planner-notes-index-years}    (wow!)
3211 These work based on the current date (date of current buffer, or today).
3213 If a single page is specified, this page is scanned for headlines
3214 of the form:
3216 @example
3217  .#1 Headline
3218 @end example
3220 The results are presented as a bulleted list.
3222 If @var{from} and @var{to} are specified, all date pages between them
3223 (inclusive) are scanned. If @var{from} is omitted, it is assumed to be
3224 the earliest entry.  If @var{to} is omitted, it is assumed to be the
3225 latest entry.
3227 If @var{recent} is specified, the list includes only that many recent
3228 headlines.  and the results are presented as a bulleted list.
3230 To customize presentation, you can write a function that generates
3231 the appropriate @code{<planner-notes-index>} tags. You can also use
3232 @code{planner-extract-note-headlines} in your own functions.
3234 @subheading Functions
3236 The following interactive functions are defined in
3237 @file{planner-notes-index.el}:
3239 @defun planner-notes-index &optional from to limit
3240 Display a clickable notes index. If called from a Lisp program,
3241 display only dates between @var{from} and @var{to}. With a prefix arg
3242 @var{limit}, display only that number of entries.
3243 @end defun
3245 @defun planner-notes-index-days days
3246 Display an index of notes posted over the past few @var{days}. The
3247 list ends with the day of the current buffer or @code{planner-today}.
3248 @end defun
3250 @defun planner-notes-index-weeks weeks
3251 Display an index of notes posted over the past few @var{weeks}. The
3252 list ends with the week of the current buffer or
3253 @code{planner-today}. Weeks start from Sunday.
3254 @end defun
3256 @defun planner-notes-index-months months
3257 Display an index of notes posted over the past few @var{months}. The
3258 list ends with the month of the current buffer or @code{planner-today}.
3259 @end defun
3261 @defun planner-notes-index-years years
3262 Display an index of notes posted over the past few @var{years}. The
3263 current year is included.
3264 @end defun
3266 @file{planner-notes-index.el} does not define any keybindings.
3269 @node Making Files Pretty, Annotations, More about Notes, More about Planner
3270 @section Making Files Pretty
3272 By default, planner does a little bit of fancy reformatting when you
3273 save a file. Tasks are sorted by priority (ABC) and status (_oP>XC) on
3274 day pages. On plan pages, tasks are sorted by priority (ABC), status
3275 (XC), and date. Undated tasks are sorted after dated tasks.
3277 @subheading Options
3279 @defopt planner-sort-tasks-key-function
3280 Control task sorting. Some options include
3281 @code{planner-sort-tasks-default-key},
3282 @code{planner-sort-tasks-basic}, @code{planner-sort-tasks-by-date}, and
3283 @code{planner-sort-tasks-by-link}.
3284 @end defopt
3286 @defopt planner-sort-undated-tasks-equivalent
3287 This option controls the behavior of task sorting on plan pages.  By
3288 default, the value @samp{9999.99.99} causes dated tasks to be listed
3289 before undated tasks.  To sort undated tasks before dated tasks,
3290 set this to a blank string.
3291 @end defopt
3293 @defopt planner-sort-tasks-automatically
3294 Non-nil means sort tasks whenever a planner file is saved.  On day
3295 pages, tasks are sorted by status.  On plan pages, they are sorted by
3296 status and date.  Sorting can take a while.
3297 @end defopt
3299 @defopt planner-renumber-tasks-automatically
3300 Non-nil means renumber tasks from 1 to N whenever a planner file is
3301 saved. This allows you to refer to tasks in previous day pages using
3302 anchors like @samp{2003.08.12#A1}. If you use this function, make sure
3303 @code{planner-use-task-numbers} is non-nil so that new tasks are created
3304 with task numbers.
3305 @end defopt
3307 @defopt planner-align-tasks-automatically
3308 Non-nil means align tasks whenever a planner file is saved.  This
3309 causes the status to line up in a neat column if you have less than
3310 100 tasks.
3311 @end defopt
3313 @defopt planner-renumber-notes-automatically
3314 Non-nil means renumber the notes. If most of your notes are only on
3315 one page, you might like seeing the notes renumbered if you delete a
3316 note in the middle. However, if you use a lot of cross-referencing,
3317 note renumbering will break those links.
3318 @end defopt
3320 @subheading Functions
3322 @defun planner-sort-tasks
3323 Sort tasks according to planner-sort-tasks-key-function. By default,
3324 sort tasks according to priority and position on day pages, and
3325 according to status, priority, date, and position on plan pages.
3326 @end defun
3328 @defun planner-renumber-tasks
3329 Update task numbering.
3330 @end defun
3332 @defun planner-align-tasks
3333 Align tasks neatly. You can add this to @code{write-file-functions} to
3334 have the tasks automatically lined up whenever you save.  For best
3335 results, ensure @code{planner-align-tasks} is run after
3336 @code{planner-renumber-tasks}.
3337 @end defun
3339 @defun planner-fix-tasks
3340 Sort, renumber and align tasks.
3341 @end defun
3343 @node Annotations, Interactive Lisp, Making Files Pretty, More about Planner
3344 @comment  node-name,  next,  previous,  up
3345 @section Annotations
3347 The context included when you create a task and the context included
3348 when you create a note are gained the same way. It sounds like black
3349 magic, but it turns out not to be.
3351 All that happens is, Planner has a list of functions,
3352 @code{planner-annotation-functions}. When you create a task from a
3353 buffer, or remember a note from a buffer, Planner goes through
3354 this list from top to bottom. The first one that returns true is the
3355 one it uses.
3357 For example, if you're in Wanderlust, and you hit the key you've bound
3358 to @code{planner-create-task-from-buffer}, it looks at this list and
3359 does something like this.  Is it an ERC buffer? No. Is it a BBDB
3360 buffer? No. Are we in w3m? No. Are we in Wanderlust? Yes. So this
3361 function succeeds. It stops searching and runs the annotation function
3362 for Wanderlust, which in this case finds out who the message is from
3363 and what the message ID of the message is. It then takes those and
3364 constructs a link back to that message, with a link title something
3365 like @samp{Email from Joe Blogs}.
3367 So, you've read the email from Joe Blogs. He's asked you to do
3368 something and you've hit your key to add that task to your list of
3369 things to do. So what you end up with is a description of the task,
3370 and a link back to what made you create the task in the first place.
3372 The same happens with remembering notes, except that it ends up in the
3373 @samp{* Notes} section of your page instead.
3375 By default, @file{planner.el} can annotate tasks and notes based on
3376 the current filename.
3378 @subheading Options
3380 To change the behavior of annotations, customize the following options:
3382 @defopt planner-annotation-functions
3383 A list of functions tried in order by
3384 @command{planner-create-task-from-buffer} and other functions that
3385 pick up context.  The first non-nil value returned is used as the
3386 annotation.  To cause an item to @strong{not} be annotated, return the
3387 empty string @samp{""}.
3388 @end defopt
3390 @defopt planner-annotation-strip-directory
3391 File links are usually generated with the full path to the file so
3392 that you can easily tell apart files with the same base name.  If
3393 @code{planner-annotation-strip-directory} is non-nil, though, only the
3394 base name of the file will be displayed.  For example, a link to
3395 @samp{/foo/bar/baz} will be displayed as @samp{baz} and hyperlinked to
3396 the file.
3397 @end defopt
3399 @defopt planner-annotation-use-relative-file
3400 If t, always use relative filenames.
3401 @code{planner-annotation-use-relative-file} can also be a function that
3402 takes the filename and returns non-nil if the link should be relative.
3403 Filenames are resolved relative to the first directory of your Planner
3404 project in @code{muse-project-alist}.  That is, the created link will be
3405 of the form @samp{../../somefile} instead of
3406 @samp{/absolute/path/to/file}.  This can be helpful if you publish your
3407 planner files to the Net and your directory structure ensures that
3408 relative links resolve the same from your Plan pages and their
3409 respective publishing directory.
3410 @end defopt
3412 @node Interactive Lisp, Publishing, Annotations, More about Planner
3413 @comment  node-name,  next,  previous,  up
3414 @section Interactive Lisp with planner-lisp.el
3415 @cindex Lisp functions, using with Planner
3416 @cindex interactive Lisp fuctions, using with Planner
3417 @cindex @file{planner-lisp.el}, using
3419 You can include interactive Lisp functions in your planner pages.
3421 First, you need @file{planner-lisp.el}. Put this in your @file{.emacs}
3422 (or @file{_emacs}):
3424 @example
3425 (require 'planner-lisp)
3426 @end example
3428 Then, add a link to the Lisp function to your page, like:
3430 @example
3432 [[lisp:/plan][Plan]]
3434 @end example
3436 This will be rendered as @samp{Plan}. Selecting the link will run the
3437 @code{plan} function interactively.
3439 You can also execute other Lisp expressions. For example:
3441 @example
3442 [[lisp:/(planner-goto (planner-expand-name "+7"))][Next week]]
3443 @end example
3445 @file{planner-lisp.el} does not provide any interactive functions or
3446 keybindings.
3448 @node Publishing, Experimental Functions, Interactive Lisp, More about Planner
3449 @section Publishing
3451 You can publish your planner files to HTML and put them on a normal
3452 web server--no special server support required. This gives you an easy
3453 way to keep other people up to date on your tasks, keep a web log, or
3454 simply organize information.
3456 Publish your planner wiki with @kbd{C-c C-p}
3457 (@code{muse-project-publish}). You can publish individual files with
3458 @kbd{C-c C-t} (@code{muse-publish-this-file}). To automatically publish
3459 files when you save them, add the following code to your
3460 @file{~/.emacs}:
3462 @example
3463 (eval-after-load "muse-mode"
3464   (add-hook 'after-save-hook
3465             #'(lambda ()
3466                 (when (planner-derived-mode-p 'muse-mode)
3467                   (muse-project-publish nil)))
3468             nil t))
3469 @end example
3471 Published files are stored in the path specified by
3472 @code{muse-project-alist} for your Planner project.  Just copy the
3473 contents of this directory to your webserver, and you're all set! Of
3474 course, publishing is completely optional.
3476 Here are some more features related to publishing:
3478 @menu
3479 * Publishing Planner pages::    planner-publish.el
3480 * Publishing Calendars::        planner-calendar.el
3481 * Authz Access Restriction::    planner-authz.el
3482 * RSS Publication::             Sharing notes with planner-rss.el
3483 * iCal Task Publication::       Sharing tasks with planner-ical.el
3484 * RDF Publication::             planner-rdf.el
3485 @end menu
3488 @node Publishing Planner pages, Publishing Calendars, Publishing, Publishing
3489 @comment  node-name,  next,  previous,  up
3490 @subsection Publishing Planner pages
3491 @cindex publishing
3492 @cindex @file{planner-publish.el}, using
3494 The task of publishing Planner pages is handled by
3495 @file{planner-publish.el}.  It is loaded by default when Planner is
3496 loaded.  To publish an entire Planner project, set up
3497 @code{muse-project-alist} (@pxref{Creating Your Planner}) and hit
3498 @kbd{C-c C-p}.  To publish an individual page, hit @kbd{C-c C-t}.
3500 Publishing works by providing Muse with the settings and environment for
3501 Planner publishing.
3503 @subheading Styles provided
3505 The following publishing styles are available.
3507 @table @code
3509 @cindex publishing styles, planner-html
3510 @item planner-html
3511 Publish Planner pages to HTML.
3513 @cindex publishing styles, planner-xhtml
3514 @item planner-xhtml
3515 Publish Planner pages to XHTML.
3517 @cindex publishing styles, planner-xml
3518 @item planner-xml
3519 Publish Planner pages to XML.
3521 @end table
3523 @subheading Options provided
3525 The following options may be customized to enhance your publishing
3526 experience.
3528 @table @code
3530 @item planner-publish-markup-regexps
3531 List of markup rules for publishing Planner pages.
3533 @item planner-publish-markup-functions
3534 Specify which function to use for publishing different kinds of markup.
3536 @item planner-publish-markup-tags
3537 A list of custom HTML-like tags to recognize when publishing.
3539 @item planner-xml-markup-strings
3540 Strings that are inserted to publish XML markup.
3542 @item planner-xml-header
3543 Header used when publishing Planner XML files.
3544 This may be text or a filename.
3546 @item planner-xml-footer
3547 Footer used when publishing Planner XML files.
3548 This may be text or a filename.
3550 @item planner-html-markup-strings
3551 Strings that are inserted to publish HTML markup.
3553 @item planner-html-style-sheet
3554 CSS stylesheet elements used in Planner HTML and XHTML files.
3555 This can also be one or more @samp{<link>} tags.
3557 @item planner-html-header
3558 Header used when publishing Planner HTML files.
3559 This may be text or a filename.
3561 @item planner-html-footer
3562 Footer used when publishing Planner HTML files.
3563 This may be text or a filename.
3565 @item planner-xhtml-header
3566 Header used when publishing Planner XHTML files.
3567 This may be text or a filename.
3569 @item planner-xhtml-footer
3570 Footer used when publishing Planner XHTML files.
3571 This may be text or a filename.
3573 @item planner-html-inner-header
3574 Extra header section that can be embedded within
3575 @code{planner-html-header} and @code{planner-xhtml-header}.
3577 @item planner-html-inner-footer
3578 Extra header section that can be embedded within
3579 @code{planner-html-footer} and @code{planner-xhtml-footer}.
3581 @item planner-publish-prepare-regexps
3582 List of markup rules to apply before publishing a page with Planner.
3584 @item planner-publish-finalize-regexps
3585 List of markup rules to apply after publishing a page with Planner.
3587 @end table
3589 @node Publishing Calendars, Authz Access Restriction, Publishing Planner pages, Publishing
3590 @comment  node-name,  next,  previous,  up
3591 @subsection Publishing Calendars
3592 @cindex calendar, publishing
3593 @cindex @file{planner-calendar.el}, using
3595 To publish calendars in your day pages, it is necessary to do two steps.
3597 @itemize
3598 @item Add @code{(require 'planner-calendar)} to your configuration.
3599 @item Add a @samp{<calendar>} tag to either your header, footer, or
3600 @var{planner-day-page-template}, depending on where you want it to
3601 appear.
3602 @end itemize
3604 To display a calendar based on a different day (given here as DAYPAGE),
3605 use @code{<calendar page="DAYPAGE">}.
3607 To get arrows to previous and next months to show up, use
3608 @code{<calendar arrows="t">}.  The text in
3609 @var{planner-calendar-prev-month-button} and
3610 @var{planner-calendar-next-month-button} will be used for the arrows to
3611 the previous and next months, respectively.
3613 By default, Muse will not display the arrows properly, due to
3614 limitations in the special-escaping algorithm.  To work around this,
3615 remove the @samp{&} rule from @var{muse-xml-markup-specials}, or from
3616 @var{muse-html-markup-specials} if you are using the 3.02.6 version of
3617 Muse.
3619 It is also possible to create a symlink from the current day page to the
3620 page name specified by @var{planner-calendar-today-page-name}.  To
3621 accomplish this, add the following to your configuration.
3623 @example
3624 (eval-after-load "muse-publish"
3625   '(add-hook 'muse-after-publish-hook
3626              'planner-calendar-create-today-link))
3627 @end example
3629 @subheading Options
3631 @defopt planner-calendar-prev-month-button
3632 HTML text used for previous month buttons.
3633 @end defopt
3635 @defopt planner-calendar-next-month-button
3636 HTML text used for next month buttons.
3637 @end defopt
3639 @defopt planner-calendar-day-header-chars
3640 Number of characters to use for day column header names.
3641 @end defopt
3643 @defopt planner-calendar-today-page-name
3644 Default name for published today page link.
3645 @end defopt
3647 @subheading Functions
3649 @defun planner-calendar-create-today-link
3650 Add this function to @code{muse-after-publish-hook} to
3651 create a ``today'' soft-link to the newest published planner day page,
3652 on operating systems that support POSIX @command{ln}.
3653 @end defun
3655 @node Authz Access Restriction, RSS Publication, Publishing Calendars, Publishing
3656 @comment  node-name,  next,  previous,  up
3657 @subsection Authz Access Restriction
3658 @cindex @file{planner-authz.el}, using
3659 @cindex Mason, restricting portions with
3660 @cindex access, restricting
3662 @file{planner-authz.el} was written by Andrew J. Korty in order to
3663 allow the easy restriction of portions of published pages.  It uses
3664 the HTML::Mason module available on CPAN
3665 (@url{http://www.cpan.org}).  Setting up HTML::Mason is
3666 outside the scope of this document.  Make sure that it works before
3667 trying out @file{planner-authz.el}.
3669 @file{planner-authz.el} modifies the behavior of
3670 @command{muse-project-publish} so that published pages follow access
3671 modifiers.
3673 This library lets you publish your planner pages while controlling
3674 access to certain portions of them to users you specify.  When you
3675 load this library, you gain access to two additional markup directives
3676 to use in your planner pages.  The @samp{<authz>} tag lets you
3677 restrict access to arbitrary content as follows:
3679 @example
3680 Here is a sentence everyone should see.  This sentence also
3681 contains no sensitive data whatsoever.  <authz users="ajk">This
3682 sentence, however, talks about my predilection for that French
3683 vanilla instant coffee that comes in the little tin, and I'm
3684 embarrassed for anyone else to know about that.</authz> And
3685 here's some more perfectly innocuous content.
3686 @end example
3688 You can use @samp{<authz>} tags to mark up entire paragraphs, tasks,
3689 notes, and anything else.  The tags are replaced with Mason code in
3690 the published pages.
3692 The @samp{#authz} directive restricts access to an entire page.  A Mason
3693 call is added to this page to generate a 403 error when someone not
3694 listed tries to access it.  Any notes or tasks on a
3695 @samp{#authz}-protected page are also wrapped in Mason code on linked
3696 pages. To add a @samp{#authz} directive to a Muse page, place
3697 @samp{#authz} followed by a space-delimited list of users on one
3698 line. For example:
3700 @example
3701 #authz ajk sacha
3702 @end example
3704 @subheading Options
3706 @defopt planner-authz-project-default
3707 Default access list for project pages (not day pages).  If a given
3708 project page doesn't contain a @samp{#authz} tag, it will receive the
3709 access list defined here.  If this variable is nil, all users will be
3710 allowed to view the page.  No corresponding variable is provided for
3711 day pages because it doesn't seem like you'd ever want to control
3712 access based on what day it was.  (But I will accept patches. :) Notes
3713 and tasks referencing pages without @samp{#authz} tags will also be
3714 restricted to the users listed here.
3715 @end defopt
3717 @defopt planner-authz-day-note-default
3718 Default access list for notes on day pages not associated with
3719 any project.  There is way to set a default for notes on project
3720 pages for the reason above; they would only be associated with
3721 date pages anyway.
3722 @end defopt
3724 @defopt planner-authz-day-task-default
3725 Same as @kbd{planner-authz-day-note-default}, but for tasks.
3726 @end defopt
3728 @subheading Functions
3730 @defun planner-authz-publish-index
3731 Publish an index for the planner marked up with Mason code.
3732 Only those links to pages which the remote user is authorized to
3733 access will be shown.
3734 @end defun
3736 @node RSS Publication, iCal Task Publication, Authz Access Restriction, Publishing
3737 @comment  node-name,  next,  previous,  up
3738 @subsection RSS Publication
3739 @cindex @file{planner-rss.el}, using
3740 @cindex notes, RSS
3741 @cindex RSS
3743 @file{planner-rss.el} allows you to publish your notes in the RSS 2.0
3744 XML format for blog syndication. You will also want to customize the
3745 following variables:
3747 To manually add the current note to all the matching RSS feeds, invoke
3748 @command{planner-rss-add-note}. You can specify a filename with the
3749 universal prefix, like this: @kbd{C-u M-x planner-rss-add-note}.
3751 If you use the @file{remember-planner.el} module to create notes, you
3752 can automatically publish new notes to RSS feeds by adding the
3753 following code to your @file{.emacs} (or @file{_emacs}).
3755 @example
3756 (add-to-list 'remember-planner-append-hook 'planner-rss-add-note t)
3757 @end example
3759 @subheading Options
3761 @defopt planner-rss-base-url
3762 Base absolute URL for published blog entries. Should include trailing
3763 @samp{/}.
3764 @end defopt
3766 @defopt planner-rss-category-feeds
3767 Rules for automatic categorization of posts and publishing to RSS
3768 files. A blog entry is matched against each condition. If it matches
3769 the regular expression or the function returns a non-nil value, the
3770 blog entry is copied into the specified file.
3771 @end defopt
3773 @defopt planner-rss-feed-limits
3774 A list of regular expressions that match feed filenames and the size
3775 and item limits for feeds that match. For example, you can use
3776 @samp{(("." nil 10))} to ensure that all feeds are limited to the 10
3777 most recent items.
3778 @end defopt
3780 @subheading Functions
3782 @file{planner-rss.el} defines the following interactive functions:
3784 @defun planner-rss-add-note @var{feed}
3785 Export the current note using @code{planner-add-item}. If @var{feed}
3786 is specified, add the entry to the specified file. Else, add the entry
3787 to all matching RSS feeds specified by
3788 @code{planner-rss-category-feeds}.
3789 @end defun
3791 @node iCal Task Publication, RDF Publication, RSS Publication, Publishing
3792 @comment  node-name,  next,  previous,  up
3793 @subsection iCal Publication
3795 iCal is an Internet Engineering Task Force (IETF) standard for
3796 calendaring and scheduling. @uref{http://www.ietf.org/rfc/rfc2445.txt}
3798 You can export your tasks to the iCal format using
3799 @file{planner-ical}. Add @code{(require 'planner-ical)} to your
3800 @file{~/.emacs}. Then you can use @kbd{M-x planner-ical-export-page}
3801 to display the iCal equivalent of tasks on a page, which you can then
3802 save to a file.
3804 To export today's tasks to a file in your publishing directory, add
3805 the following to your @file{~/.emacs}.
3807 @example
3808 (planner-ical-export-file
3809  (planner-today)
3810  (expand-file-name
3811    "tasks.ics"
3812    (muse-style-element :path (car (cddr (muse-project planner-project))))))
3813 @end example
3815 @subheading Functions
3817 @defun planner-ical-export-page page &optional file
3818 Export PAGE's tasks in the iCal format.
3819 If FILE is non-nil, results are saved to that file.
3820 If FILE is nil, results are displayed in a `planner-ical-export-buffer'.
3821 @end defun
3823 @defun planner-ical-export-this-page
3824 Display the tasks on the current page in iCal format.
3825 @end defun
3827 @node RDF Publication,  , iCal Task Publication, Publishing
3828 @comment  node-name,  next,  previous,  up
3829 @subsection RDF Publication
3830 @cindex @file{planner-rdf.el}, using
3831 @cindex RDF, publishing to
3833 Put planner-rdf.el in a directory that is in your Emacs load-path and
3834 the following into your ~/.emacs file:
3836 @example
3837 (require 'planner-rdf)
3838 (eval-after-load "muse-publish"
3839   '(progn
3840      (add-hook 'muse-after-publish-hook
3841                'planner-rdf-publish-file)
3842      (add-hook 'muse-after-publish-hook
3843                'planner-rdf-publish-index)))
3844 @end example
3846 @menu
3847 * Publishing with planner-rdf::  
3848 * planner-rdf Tags::            
3849 * planner-rdf Usage Examples::  
3850 @end menu
3852 @node Publishing with planner-rdf, planner-rdf Tags, RDF Publication, RDF Publication
3853 @subsubsection Publishing with planner-rdf
3855 Planner-rdf is now included in the normal Planner publishing process.
3856 Pressing @key{C-p} will create a .owl and a .rdf file for every planner
3857 file. Additionally it creates an index, @file{index.rdf}.
3859 By default all generated files will be stored in the normal Planner
3860 publishing directory, where the HTML files end up. If you would ike to
3861 change that, set the variable @code{planner-rdf-directory} to the desired
3862 location.
3864 The generated files:
3866 @itemize
3867 @item
3868 @file{index.rdf} - a collection with pointers to the
3869 @file{<plan-page>.rdf} files.
3870 @item
3871 @file{<plan-page>.rdf} - contains Dublin Core metadata about the files
3872 related to the current Planner page. Currently it contains metadata
3873 about the source file, the Emacs plan page, the generated HTML page, and
3874 the generated OWL file.
3875 @item
3876 @file{<plan-page>.owl} - contains task and note data from the Planner
3877 file. Task information is stored completely. For notes, the note
3878 headline is stored.
3879 @end itemize
3881 @node planner-rdf Tags, planner-rdf Usage Examples, Publishing with planner-rdf, RDF Publication
3882 @subsubsection planner-rdf Tags
3884 Besides the factual information, e.g. the task status or description,
3885 planner-rdf extracts links (in the format @samp{[[...][...]]} or
3886 @samp{[[...]]}) and tags (@samp{@{@{...:...}@}@}) from tasks and notes
3887 (including the notes text). Links and tags provide context for the plan
3888 elements and so are stored and linked with the containing elements.
3890 Links point to locations that can be used to enrich the information in
3891 the Planner pages (e.g, by retrieving data from them and adding it),
3892 tags -- like the one for the task ids @samp{@{@{Tasks:198@}@}} -- can be
3893 used to express abstract qualities. Some examples:
3895 @itemize
3896 @item
3897 an @samp{@{@{audience:myteam@}@}} tag, can be used to restrict
3898 publishing of items to a certain user group;
3899 @item a @samp{@{@{lang:de@}@}} tag, signifying the language of the text;
3900 @item
3901 a @samp{@{@{location:Hamburg@}@}} tag, can be used to make geographic
3902 reference to an entity that is not stored in your address book, bbdb.
3903 @end itemize
3905 What tags to use is up to the user. Planner-rdf makes no assumptions
3906 about them, it just extracts and stores them. Only the applications
3907 using the data know what to do with them.
3909 @node planner-rdf Usage Examples,  , planner-rdf Tags, RDF Publication
3910 @subsubsection Usage Examples
3912 Report generation with OpenOffice
3914 The Perl file @file{this-week.pl}
3915 (@url{http://www.rainervolz.de/planner-rdf/this-week.pl}) creates a
3916 simple report for the current week. The script extracts task and note
3917 information from the generated OWL files and inserts it into a simple
3918 OpenOffice Writer document. Nothing fancy, just a proof of concept, to
3919 show how planner-rdf can be used to integrate Planner Mode with other
3920 applications.
3922 Besides Perl and OpenOffice you'll need the Redland RDF Application
3923 Framework (@url{http://www.redland.opensource.ac.uk/}). It is used to
3924 process the RDF data. Redland is small, but powerful, and available
3925 for many platforms and languages.
3927 As an example the application loads the RDF data each time it is run.
3928 In the real world you probably would use Redland to store the Planner
3929 data in a database, to save the loading step each time you access the
3930 data.
3932 Importing Planner data into Protege
3934 Protege is a popular ontology editor and knowledge management
3935 application. A simple way to import data into it, is to provide a OWL
3936 file that contains the data as well as the schema. To do this:
3938 @itemize
3939 @item
3940 Use @file{planner2protege.pl}
3941 (@url{http://www.rainervolz.de/planner-rdf/planner2protege.pl}) to
3942 combine all OWL files into a single one.
3943 @item
3944 Use CWM (@url{http://www.w3.org/2000/10/swap/doc/cwm.html}) to combine
3945 schema and data, with @code{python cmw --rdf planner-rdf.owl
3946 planner-data.owl --think --rdf >planner2.owl}
3947 @end itemize
3949 Not the most straightforward process, but it works. The resulting file,
3950 here planner2.owl, can then be loaded into Protege.
3952 @node Experimental Functions,  , Publishing, More about Planner
3953 @comment  node-name,  next,  previous,  up
3954 @section Experimental Functions
3955 @cindex @file{planner-experimental.el}, using
3956 @cindex experimental functions, Planner
3958 These functions are experimental. This means that they may not do
3959 exactly what you expect them to do, so keep backups, be careful, and
3960 don't blame us.
3962 To use these functions, make sure that @file{planner-experimental.el} is
3963 in your load path, and add this to your @file{.emacs} (or
3964 @file{_emacs}):
3966 @example
3967 (require 'planner-experimental)
3968 @end example
3970 @subheading Functions
3972 @file{planner-experimental.el} defines the following interactive
3973 functions:
3975 @defun planner-search-notes-next-match
3976 Jump to the next matching entry.  Call after
3977 @code{planner-search-notes}.
3978 @end defun
3980 @defun planner-search-notes-previous-match
3981 Jump to the previous matching entry.  Call after
3982 @code{planner-search-notes}.
3983 @end defun
3985 @defun planner-remove-duplicates
3986 Remove duplicate tasks.
3987 @end defun
3989 @file{planner-experimental.el} does not define any keybindings.
3991 @node Managing Your Information, Advanced Configuration, More about Planner, Top
3992 @comment  node-name,  next,  previous,  up
3993 @chapter Managing Your Information
3995 Planner can be integrated with other Emacs and even some non-Emacs
3996 programs by loading additional modules. You can pick and choose from
3997 these modules, choosing those that work with programs you use and that
3998 produce information you want to have included in your Planner pages.
4000 @menu
4001 * E-mail::                      Linking notes and tasks to messages
4002 * Scheduling and Time::         Tracking appointments and where your time goes
4003 * Finances::                    Display your account balances and more
4004 * Contacts and Conversations::  BBDB and ERC
4005 * Tracking Research and Resources::  The Web, bibliographies, and bookmarks
4006 * Tracking Development::        
4007 @end menu
4009 @node E-mail, Scheduling and Time, Managing Your Information, Managing Your Information
4010 @comment  node-name,  next,  previous,  up
4011 @section E-mail
4013 Planner can work together with several different Emacs e-mail
4014 clients. If you load the appropriate module for the e-mail client you
4015 use, then your notes and tasks can be annotated with information
4016 pointing to the specific e-mail message you were reading when you
4017 created that note or task. When you are looking at the note or task, you
4018 will be able to jump straight to that message.
4020 @menu
4021 * Unix mail::                   Unix mailboxes: planner-unix-mail.el              
4022 * Gnus::                        Gnus mail and news reader: planner-gnus.el
4023 * VM::                          VM mail reader: planner-vm.el
4024 * Wanderlust::                  Wanderlust mail reader: planner-wl.el
4025 * MH-E::                        MH-E mail reader: planner-mhe.el
4026 * Rmail::                       Rmail: planner-rmail.el
4027 @end menu
4030 @node Unix mail, Gnus, E-mail, E-mail
4031 @comment  node-name,  next,  previous,  up
4032 @subsection Unix mail
4033 @cindex mbox, using Planner with
4034 @cindex Unix mail, using Planner with
4035 @cindex mail client, using Planner with
4037 This module supports links from any kind of Unix mailbox (mbox). To
4038 use this module, make sure that @file{planner-unix-mail.el} is in your
4039 load path and add this to your @file{.emacs} (or @file{_emacs}):
4041 @example
4042 (require 'planner-unix-mail)
4043 @end example
4045 Unix mail URLs are of the form:
4047 @example
4048 ;; mail://PATH/TO/INBOX/message-id
4049 @end example
4051 Annotations will be of the form:
4053 @smallexample
4054 [[mail://PATH/TO/INBOX/E1AyTpt-0000JR-LU%40sacha.ateneo.edu][E-mail from Sacha Chua]]
4055 @end smallexample
4057 @file{planner-unix-mail.el} does not define any interactive functions or
4058 create any new keybindings.
4060 @node Gnus, VM, Unix mail, E-mail
4061 @comment  node-name,  next,  previous,  up
4062 @subsection Gnus
4063 @cindex Gnus, using Planner with
4064 @cindex mail client, using Planner with, Gnus
4066 To use this module, make sure that it is in your load path and put
4067 this in your @file{.emacs} (or @file{_emacs}):
4069 @example
4070 (require 'planner-gnus)
4071 (planner-gnus-insinuate)
4072 @end example
4074 With this module loaded, when you create tasks from Gnus summary or
4075 message buffers, the tasks will be annotated with information from the
4076 message you were looking at when you created each task. A link will also
4077 be created on your planner page that you can select in order to return
4078 to the message.
4080 So, the created task will look something like this:
4082 @smallexample
4083 #A34 _ Send writing to publishme.com from
4084 [[gnus://alt.books.beatgeneration/<Ifo5c.24632$F9.9567@@nwrddc01.gnilink.net>][E-Mail
4085 from editor@@verizon.net]] @{@{Tasks:71@}@} ([[Writing]])
4086 @end smallexample
4088 This module also binds @kbd{C-c C-t} in the Gnus summary and article
4089 views to the command to create a new task.
4091 @file{planner-gnus.el} does not define any interactive functions.
4093 For more information about Gnus, see @inforef{Top, The Gnus Newsreader,
4094 gnus}.
4096 @node VM, Wanderlust, Gnus, E-mail
4097 @comment  node-name,  next,  previous,  up
4098 @subsection VM
4099 @cindex VM, using Planner with
4100 @cindex mail client, using Planner with, VM
4102 To use this module, make sure that @file{planner-vm.el} is in your load
4103 path and add this to your @file{.emacs} (or @file{_emacs}):
4105 @example
4106 (require 'planner-vm)
4107 @end example
4109 VM URLs are of the form:
4111 @example
4112 vm://path/to/inbox/message-id
4113 @end example
4115 Annotations will be of the form:
4117 @smallexample
4118 [[vm://home/test/INBOX/<E1AyTpt-0000JR-LU@@sacha.ateneo.edu>][E-mail from Sacha Chua]]
4119 @end smallexample
4121 @file{planner-vm.el} does not define any interactive functions or
4122 keybindings.
4125 @node Wanderlust, MH-E, VM, E-mail
4126 @comment  node-name,  next,  previous,  up
4127 @subsection Wanderlust
4128 @cindex Wanderlust, using Planner with
4129 @cindex mail client, using Planner with, Wanderlust
4131 To use this module, make sure that @file{planner-wl.el} is in your
4132 load path and add this to your @file{.emacs} (or @file{_emacs}):
4134 @example
4135 (require 'planner-wl)
4136 @end example
4138 Then, when you call @kbd{M-x planner-create-task-from-buffer} from
4139 Wanderlust summary or message buffers, the task will be created with
4140 the correct annotation.
4142 @file{planner-wl} does not define any interactive functions.
4144 @subheading Keys
4146 To add keybindings to Wanderlust, call:
4148 @example
4149 (planner-wl-insinuate)
4150 @end example
4152 This binds @kbd{F} to @command{planner-create-task-from-buffer}.
4154 @node MH-E, Rmail, Wanderlust, E-mail
4155 @comment  node-name,  next,  previous,  up
4156 @subsection MH-E
4157 @cindex MH-E, using Planner with
4158 @cindex mail client, using Planner with, MH-E
4160 To use this module, make sure that @file{planner-mhe.el} is in your
4161 load path and add this to your @file{.emacs} (or @file{_emacs}):
4163 @example
4164 (require 'planner-mhe)
4165 @end example
4167 Then, when you call @kbd{M-x planner-create-task-from-buffer} from
4168 MH-E summary or message buffers, the task will be created with
4169 the correct annotation.
4171 @file{planner-mhe} does not define any interactive functions.
4173 @node Rmail,  , MH-E, E-mail
4174 @comment  node-name,  next,  previous,  up
4175 @subsection Rmail
4176 @cindex Rmail, using Planner with
4177 @cindex mail client, using Planner with, Rmail
4179 To use this module, make sure that @file{planner-rmail.el} is in your
4180 load path and add this to your @file{.emacs} (or @file{_emacs}):
4182 @example
4183 (require 'planner-rmail)
4184 @end example
4186 Rmail URLs are of the form:
4188 @example
4189 rmail://message-id
4190 @end example
4192 Annotations will be of the form:
4194 @smallexample
4195 [[rmail://<E1AyTpt-0000JR-LU@@sacha.ateneo.edu>][E-mail from Sacha Chua]]
4196 @end smallexample
4198 @file{planner-rmail.el} does not define any interactive functions or
4199 create any new keybindings.
4201 For more information about Rmail, see @inforef{Rmail, Reading Mail With
4202 Rmail, Emacs}.
4204 @node Scheduling and Time, Finances, E-mail, Managing Your Information
4205 @comment  node-name,  next,  previous,  up
4206 @section Scheduling and Time
4208 @menu
4209 * Diary::                       Using the Emacs diary
4210 * Appointments::                Appointments in plan pages: planner-appt.el
4211 * Timeclock::                   Time tracking: planner-timeclock.el
4212 * schedule.el::                 Project completion: planner-schedule.el
4213 @end menu
4216 @node Diary, Appointments, Scheduling and Time, Scheduling and Time
4217 @comment  node-name,  next,  previous,  up
4218 @subsection Diary
4219 @cindex diary, using Planner with
4220 @cindex @file{planner-diary.el}, using
4222 If you use Emacs's diary feature, Planner-Diary could be helpful for
4223 you. It puts all diary entries for the current day in the @samp{*
4224 Diary} section of your day plan page. This section is updated every
4225 time you display the file in Emacs. By default the diary section of
4226 past pages is not updated; it's pretty unlikely that you want to add
4227 new diary entries for the past. (@pxref{Diary, , , Emacs, GNU Emacs
4228 Manual})
4230 If you want to use @file{planner-diary.el}, make sure the file is in
4231 your load path and add this to your @file{.emacs} (or @file{_emacs}):
4233 @example
4234 (require 'planner-diary)
4235 @end example
4237 @file{planner-diary.el} needs @command{fancy-diary-display}.  To use
4238 @command{fancy-diary-display}, add this to your @file{.emacs} (or
4239 @file{_emacs}):
4241 @example
4242 (add-hook 'diary-display-hook 'fancy-diary-display)
4243 @end example
4245 You can use Planner-Diary in two different ways:
4247 @enumerate
4249 @item
4250 If you want the saved files to contain your entries and not just a line
4251 of Lisp, add the following lines to your @file{.emacs} (or @file{_emacs}):
4253 @example
4254 (setq planner-diary-use-diary t)
4255 (planner-diary-insinuate)
4256 @end example
4258 You should also customize or set @code{planner-day-page-template} to
4259 include a @samp{* Diary}:
4261 @example
4262 (setq planner-day-page-template
4263  "* Tasks\n\n\n* Schedule\n\n\n* Diary\n\n\n* Notes")
4264 @end example
4266 @item
4267 (GNU EMACS ONLY) You can put the following line of Lisp code in your
4268 day plan pages to display your diary entries:
4270 @example
4271 <lisp>(planner-diary-entries-here)</lisp>
4272 @end example
4274 You can do this automatically for all day plan pages:
4276 @smallexample
4277 (setq planner-day-page-template
4278   "* Tasks\n\n\n* Diary\n\n<lisp>(planner-diary-entries-here)</lisp>
4279 \n* Notes")
4280 @end smallexample
4282 When you open a day plan page outside Emacs, you will see the line of
4283 Lisp code and not your diary entries.
4285 @end enumerate
4287 If you want to see your diary entries for more than just one day, set
4288 @code{planner-diary-number-of-days} accordingly.  This works for either
4289 of the two approaches.
4291 @kbd{C-c C-e} updates the diary sections.  @kbd{C-u C-c C-e} forces an
4292 update---it inserts the diary section for the day, even if the day is in
4293 the past or if there is no @samp{Diary} section in the buffer.
4295 If you want to use the Cal-Desk package, simply follow the instructions
4296 in @file{cal-desk.el}.  If you get the Cal-Desk layout from the Calendar
4297 buffer, you get it in the day plan buffer, too.
4299 If you use Planner-Diary, you might consider using the Calendar support
4300 of Planner. (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}) To get
4301 Calendar integration, add this to your @file{.emacs} (or @file{_emacs}):
4303 @example
4304 (planner-insinuate-calendar)
4305 @end example
4307 If @code{planner-diary-create-section-flag} is non-nil, sections are
4308 always inserted if necessary.
4310 @subheading Options
4312 @defopt planner-diary-create-section-flag
4313 Non-nil means create the requested diary sections if they do not
4314 exist. By default, planner-diary tries to create the section. If you
4315 want more control over your pages, you can set this to nil. Trying to
4316 write a diary section to a page that does not have it yet will then
4317 result in an error.
4318 @end defopt
4320 By default, planner-diary lists only the appointments you have on that
4321 day. If you want the date headers included even when showing the diary
4322 entries for a single day, set planner-diary-include-all-output to
4323 non-nil.
4325 @defopt planner-diary-include-all-output-flag
4326 Non-nil means don't omit any data when copying diary entries into day
4327 pages.
4328 @end defopt
4330 @subheading Functions
4332 @file{planner-diary.el} defines the following interactive functions:
4334 @defun planner-diary-add-entry date time text
4335 Prompt for a diary entry to add to @code{diary-file} on @var{date}.
4336 Uses @code{planner-annotation-functions} to make hyperlinks.
4337 @var{time} and @var{text} are used in the description."
4338 @end defun
4340 @defun planner-diary-insert-diary force
4341 Insert the fancy diary for the day into the day plan file. If
4342 @var{force} is non-nil, insert a diary section even if there is no
4343 @var{planner-diary-string} in the buffer.
4344 @end defun
4346 @defun planner-diary-insert-diary-maybe force
4347 Maybe insert the fancy diary for the day into the day plan file. If the
4348 current day is in the past and @var{force} is nil, don't do anything. If
4349 @var{force} is non-nil, insert a diary section even if there is no
4350 @code{planner-diary-string} in the buffer.
4351 @end defun
4353 @defun planner-diary-insert-appts force
4354 Insert the diary appointments for the day into the day plan file.  If
4355 @var{force} is non-nil, insert a diary appointments section even if
4356 there is no @code{planner-diary-appts-string} in the buffer.
4357 @end defun
4359 @defun planner-diary-insert-appts-maybe force
4360 Maybe insert the diary appointments for the day into the day plan file.
4361 If the current day is in the past and @var{force} is nil, don't do
4362 anything.  If @var{force} is non-nil, insert a diary appointments
4363 section even if there is no @code{planner-diary-appts-string} in the
4364 buffer.
4365 @end defun
4367 @defun planner-diary-insert-cal-desk force
4368 Insert the cal-desk diary for the day into the day plan file.  If
4369 @var{force} is non-nil, insert a cal-desk diary section even if there is
4370 no @code{planner-diary-cal-desk-string} in the buffer.
4371 @end defun
4373 @defun planner-diary-insert-cal-desk-maybe force
4374 Maybe insert the cal-desk diary for the day into the day plan file.  If
4375 the current day is in the past and @var{force} is nil, don't do
4376 anything.  If @var{force} is non-nil, insert a cal-desk appointments
4377 section even if there is no @code{planner-diary-cal-desk-string} in the
4378 buffer.
4379 @end defun
4381 @defun planner-diary-insert-public force
4382 Insert the public diary for the day into the day plan file.  If
4383 @var{force} is non-nil, insert a public diary section even if there is
4384 no @code{planner-diary-public-string} in the buffer.
4385 @end defun
4387 @defun planner-diary-insert-public-maybe force
4388 Maybe insert the public diary for the day into the day plan file.  If
4389 the current day is in the past and @var{force} is nil, don't do
4390 anything.  If @var{force} is non-nil, insert a public appointments
4391 section even if there is no @code{planner-diary-public-string} in the
4392 buffer.
4393 @end defun
4395 @defun planner-diary-insert-private force
4396 Insert the private diary for the day into the day plan file.  If
4397 @var{force} is non-nil, insert a private diary section even if there is
4398 no @code{planner-diary-private-string} in the buffer.
4399 @end defun
4401 @defun planner-diary-insert-private-maybe force
4402 Maybe insert the private diary for the day into the day plan file.  If
4403 the current day is in the past and @var{force} is nil, don't do
4404 anything.  If @var{force} is non-nil, insert a private appointments
4405 section even if there is no @code{planner-diary-private-string} in the
4406 buffer.
4407 @end defun
4409 @defun planner-diary-insert-all-diaries force
4410 Update all diary sections in a day plan file.  If @var{force} is
4411 non-nil, insert a diary section even if there is no section header.  It
4412 only inserts diaries if the corresponding @code{planner-diary-use-}*
4413 variable is @samp{t}.
4414 @end defun
4416 @defun planner-diary-insert-all-diaries-maybe force
4417 Update all diary sections in a day plan file.  If the current day is in
4418 the past and @var{force} is nil, don't do anything.  If @var{force} is
4419 non-nil, insert a diary section even if there is no section header.  It
4420 only inserts diaries if the corresponding @code{planner-diary-use-}*
4421 variable is @samp{t}.
4422 @end defun
4424 @defun planner-diary-show-day-plan-or-diary
4425 Show the day plan or diary entries for the date under point in calendar.
4426 Add this to @code{calendar-move-hook} if you want to use it.  In that
4427 case, you should also @command{remove-hook} @samp{planner-calendar-show}
4428 from @code{calendar-move-hook}.
4429 @end defun
4431 @subheading Keys
4433 @file{planner-diary.el} adds the following keybinding to Planner, if
4434 @command{planner-diary-insinuate} is in your @file{.emacs} (or
4435 @file{_emacs}):
4437 @itemize
4439 @item
4440 @kbd{C-c C-e} updates the diary sections.
4442 @end itemize
4444 @menu
4445 * Planner-Diary Advanced Features::  
4446 @end menu
4448 @node Planner-Diary Advanced Features,  , Diary, Diary
4449 @comment  node-name,  next,  previous,  up
4450 @subsubsection Planner-Diary Advanced Features
4451 @cindex diary, using Planner with
4452 @cindex @file{planner-diary.el}, advanced features
4454 The features described here are part of the development version.  They
4455 are subject to change without notice.  They may be buggy.  The
4456 documentation may be inaccurate.  Use at your own risk.
4458 There is a lot of code redundancy in the development version.  This is
4459 intentional and makes it easier to change the code for one type of diary
4460 section without breaking others.
4462 @subheading Diary views
4464 @cindex @file{planner-diary.el}, views
4465 Currently Planner-Diary supports six different views of your diary
4466 entries:
4468 @enumerate
4469 @item
4470 Ordinary fancy diary display (what you get by pressing @kbd{d} in the
4471 calendar buffer with @code{fancy-diary-display} switched on)
4473 @item
4474 Schedule/Appointments (all entries from 1 that have a time assigned to
4475 them
4477 @item
4478 Diary without appts (1 without 2)
4480 @item
4481 cal-desk display (appts on top, non appts entries at bottom)
4483 @item
4484 A private diary (same as 1, but uses a different diary-file)
4486 @item
4487 A public diary (same as 1, but uses a different diary-file)
4488 @end enumerate
4490 Put the following line of Lisp code in your day plan pages to display
4491 your diary entries:
4493 @example
4494 <lisp>(planner-diary-entries-here)</lisp>
4495 @end example
4497 The function @code{planner-diary-entries-here} takes two optional
4498 arguments---the diary file you want to use and the number of days you
4499 want to display.
4501 @subheading Exporting Planner-specific Diary files
4503 @cindex @file{planner-diary.el}, exporting entries
4504 If you would like to export diary entries from your Planner pages to
4505 separate Diary files, add @code{(require 'planner-export-diary)} to your
4506 config.  The following steps describe the usage of the functions and
4507 options contained in this file.
4509 @enumerate
4511 @item
4512 Customize @code{planner-export-diary-file}.  The default value is
4513 ``~/diary.planner''.
4515 @item
4516 Add the following line to your main Diary file (default: ``~/diary'').
4518 @example
4519 #include ~/diary.planner
4520 @end example
4522 @item
4523 Then, call @command{M-x planner-export-diary-future} whenever you want
4524 future diary entries published. You can automatically publish entries by
4525 adding either of the following to your .emacs.
4527 @itemize
4529 @item (planner-export-diary-future)
4530 Publish future entries on startup.
4532 @item (add-hook 'planner-mode-hook 'planner-export-diary-setup)
4533 Publish future entries whenever you save a Planner file.
4535 @end itemize
4537 @end enumerate
4539 @node Appointments, Timeclock, Diary, Scheduling and Time
4540 @comment  node-name,  next,  previous,  up
4541 @subsection Appointments
4542 @cindex appointments
4543 @cindex @file{planner-appt.el}, using
4545 If you would like to use planner for your appointment alerts
4546 instead of using the diary system, you might like to try
4547 @file{planner-appt}.
4549 According to your preferences, you may choose from two different
4550 approaches. Appointments in task descriptions on today's plan
4551 page are like this:
4553 @example
4554 #A   _ @@12:45 Do something (TaskPool)
4555 @end example
4557 @noindent
4558 and appointments in today's schedule section are like this:
4560 @example
4561 * Schedule
4563   9:00 | 12:00 | Read Simmel's Philosophy of Money
4564 @@12:45 |       | Do Something Else
4565 @@13:00 | 14:00 | lunch
4566 @end example
4568 @noindent
4569 You can even use both at the same time if you like.
4571 @c Jim Ottaway <j.ottaway@lse.ac.uk>: Changed these kinds of heading
4572 @c back to @unnumberedsec, but left the originals commented out in
4573 @c case there was a good reason for the @strong formatting.
4575 @c @noindent
4576 @c @strong{Usage}
4577 @unnumberedsubsubsec Usage
4579 In the file where you configure Planner, add one of the following.
4581 @itemize
4582 @item
4583 For task-based appointments: @code{(planner-appt-use-tasks)}
4584 @item
4585 For schedule-based appointments: @code{(planner-appt-use-schedule)}
4586 @item
4587 For both task- and schedule-based appointments:
4588 @code{(planner-appt-use-tasks-and-schedule)}
4589 @end itemize
4591 @noindent
4592 And finally if you want everything to be updated automatically add:
4594 @example
4595 (planner-appt-insinuate)
4596 @end example
4598 If you don't want to do the insinuation then you can call:
4600 @example
4601 M-x planner-appt-update
4602 @end example
4604 @noindent
4605 after editing appointments on the page (note that this is not
4606 necessary if you use tasks for the appointments and you don't edit
4607 the task descriptions outside of @code{planner-edit-task-description}).
4609 Try both methods; if you find that you prefer one over the
4610 other, use one of the specific @code{planner-appt-use-} functions, as
4611 there are some performance gains when using one method exclusively.
4613 @menu
4614 * Task-based Appointments::     
4615 * Schedule-based Appointments::  
4616 * Viewing Appointments::        
4617 * Appointment Updating on Save::  
4618 * Appointment and Calendar Integration::  
4619 * Appointment Hooks::           
4620 @end menu
4623 @node Task-based Appointments, Schedule-based Appointments, Appointments, Appointments
4624 @comment  node-name,  next,  previous,  up
4625 @subsubsection Task-based Appointments
4626 @cindex appointments, task-based
4627 @cindex task-based appointments
4629 A task has an appointment if it looks like this:
4631 @example
4632 #A   _ @@12:45 Do something (TaskPool)
4633 @end example
4635 @noindent
4636 i.e., if it has @@ followed by a time at the beginning.  This means
4637 the task is a regular appointment, and will not be carried forward
4638 at the start of a new day.
4640 Alternatively, it may have a !, like this:
4642 @example
4643 #A   _ !12:45 Do something else (TaskPool)
4644 @end example
4646 @noindent
4647 This makes it a "nagging" appointment, which @emph{will} be carried
4648 forward.  It will, however, lose the appointment time in the
4649 process.
4651 This may seem like a strange feature, but here is Henrik's
4652 reasoning:
4654 @quotation
4655 Sometimes I have a task that I want to do at a certain time, so I
4656 make it an appointment.  If I don't get around to doing it anyway,
4657 I want it to be carried forward.  Basically, I sometimes use
4658 appointments on tasks to annoy me until I get them done. :)
4659 @end quotation
4661 You can edit, move and delete tasks with the usual functions, and
4662 appointments will be updated automatically.
4664 You can update all task appointments on your page with
4666 @example
4667 M-x planner-appt-update
4668 @end example
4670 @c @noindent
4671 @c @strong{Cyclic Entries}
4673 @unnumberedsubsubsec Cyclic Entries
4674 @cindex appointments, cyclic task entries
4676 If you have @file{planner-cyclic} (@pxref{Cyclic Tasks}) loaded, entries
4677 in your cyclical tasks file such as
4679 @example
4680 Friday #A _ @@12:45 staff meeting
4681 @end example
4683 @noindent
4684 will appear every Friday and there will be an appointment alert set
4687 @c @noindent
4688 @c @strong{Appointments Section}
4689 @unnumberedsubsubsec Appointments Section
4690 @cindex appointments, appointments section
4692 You can have all task-based appointments copied to a separate section,
4693 providing an overview of your appointments.
4695 To do this, add
4697 @example
4698 (setq planner-appt-task-use-appointments-section-flag t)
4699 @end example
4701 @noindent to your configuration, or use @kbd{M-x customize-variable}.
4703 The variable @code{planner-appt-task-appointments-section} is the name
4704 of the section where the appointments will be copied.  By default, it is
4705 set to @code{"Schedule"}, which means that task appointments will be
4706 intermingled with schedule entries.
4708 It is also a good idea to add the section you wish to use to
4709 @code{planner-day-page-template} in order to control where that section
4710 will appear on the page (otherwise it will appear at the top).
4712 The format of the appointments follows that of a schedule; if you
4713 don't like the way it looks, you can write something different and set
4714 @code{planner-appt-format-appt-section-line-function} appropriately.
4715 See the documentation for
4716 @code{planner-appt-format-appt-section-line-function} for details.  It
4717 should be fairly easy to see what needs to be done if you look at the
4718 source for the default function (which is
4719 @code{planner-appt-format-appt-section-line}).
4721 If the section specified in
4722 @code{planner-appt-task-appointments-section} is the same as the
4723 schedule section specified in @code{planner-appt-schedule-section} (by
4724 default @code{"Schedule"}), the default formatting function adds a
4725 @samp{#} to the description so that one can visually distinguish
4726 appointments from the task list from those that have been added to the
4727 schedule.
4729 @node Schedule-based Appointments, Viewing Appointments, Task-based Appointments, Appointments
4730 @comment node-name,  next,  previous,  up
4731 @subsubsection Schedule-Based Appointments
4732 @cindex appointments, schedule-based
4733 @cindex schedule-based appointments
4735 Some scheduled tasks require reminders, others don't.  In this
4736 schedule:
4738 @example
4739 * Schedule
4741 9:00   | 12:00 | Read Simmel's Philosophy of Money
4742 @@12:45          Do Something Else
4743 @@13:00 | 14:00 | lunch
4744 @@14:30 |       | Meet jrs to discuss his dissertation
4745 @@16:00           Test Society seminar
4746 18:00            go home
4747 @end example
4749 @noindent
4750 those that have an @@ prefix will be added to the appointment
4751 reminder list; the others will not.  The formats that are
4752 recognized are fairly flexible, as you can see from the example.
4754 If you change your schedule, you can update the appointment list
4755 with
4757 @example
4758 M-x planner-appt-update
4759 @end example
4761 @noindent You can also have the schedule sorted as part of the update,
4762 if you have this in your configuration:
4764 @example
4765 (setq planner-appt-sort-schedule-on-update-flag t)
4766 @end example
4768 @c @noindent 
4769 @c @strong{Cyclical Entries}
4770 @unnumberedsubsubsec Cyclical Entries
4771 @cindex appointments, cyclic schedule entries
4773 You can also have cyclical schedule entries(@pxref{Cyclic Tasks}) if you
4776 @example
4777 (planner-appt-schedule-cyclic-insinuate)
4778 @end example
4780 @noindent to your configuration.
4782 If you put an entry in your cyclical task file like this
4784 @example
4785 Friday @@12:45 | 13:45 | Staff Meeting
4786 @end example
4788 @noindent
4789 then it will appear in your schedule every Friday, and an
4790 appointment alert will be set up.
4792 @node Viewing Appointments, Appointment Updating on Save, Schedule-based Appointments, Appointments
4793 @comment  node-name,  next,  previous,  up
4794 @subsubsection Viewing Appointments
4795 @cindex appointments, viewing
4797 The command @command{planner-appt-show-alerts} will show all appointment
4798 alerts currently scheduled.
4800 @subheading Functions
4802 There are two commands that show appointments in the future; the one
4803 displays them in a pop-up buffer, the other puts the information into
4804 the current day page.
4806 @deffn {Command} planner-appt-forthcoming-display &optional days
4807 Display a buffer of appointments for today and the next
4808 @var{days}. Optional prefix argument @var{days} is the number of days
4809 ahead to look. Its default value is defined by
4810 @code{planner-appt-forthcoming-days}.
4811 @end deffn
4813 @deffn {Command} planner-appt-forthcoming-update-section &optional days
4814 In today's plan page, add or update a list of forthcoming
4815 appointments. Optional prefix argument @var{days} is the number of
4816 days ahead to look. Its default value is defined by
4817 @code{planner-appt-forthcoming-days}.  The section heading to use is
4818 defined by @code{planner-appt-forthcoming-appt-section}.
4819 @end deffn
4821 @subheading Options
4823 @defopt planner-appt-forthcoming-days
4824 The number of days to look ahead for forthcoming appointments.  The
4825 default value is seven days.
4826 @end defopt
4828 @defopt planner-appt-forthcoming-appt-section
4829 The name of the section to use for inserting a list of forthcoming
4830 appts.  The default value is @code{"Forthcoming Appointments"}.
4831 @end defopt
4833 @defopt planner-appt-forthcoming-show-day-names-flag
4834 When non-nil (the default), day names will be shown in forthcoming
4835 appointments.
4836 @end defopt
4838 @defopt planner-appt-forthcoming-repeat-date-string
4839 String to insert for repeated dates.
4841 When there are multiple appointments for a date, the date is inserted
4842 in the first appointment and the others have this string in their date
4843 cell.
4845 If the string consists of anything other than whitespace, then a link
4846 to the day page for the appoinment is created.
4847 @end defopt
4849 @defopt planner-appt-forthcoming-look-at-cyclic-flag
4850 When non-nil, find forthcoming appointments in the cyclic diary file
4851 (@pxref{Cyclic Tasks}) as well as in plan pages. Default is @samp{t}.
4852 @end defopt
4854 @node Appointment Updating on Save, Appointment and Calendar Integration, Viewing Appointments, Appointments
4855 @comment  node-name,  next,  previous,  up
4856 @subsubsection Appointment Updating on Save
4857 @cindex appointments, updating on save
4859 @subheading Options
4861 @defopt planner-appt-update-appts-on-save-flag
4862 When non-nil, update appointment reminders whenever today's plan page is
4863 saved. Default value is @samp{nil}.
4864 @end defopt
4866 @node Appointment and Calendar Integration, Appointment Hooks, Appointment Updating on Save, Appointments
4867 @comment  node-name,  next,  previous,  up
4868 @subsubsection Appointment and Calendar Integration
4870 Not strictly part of appointment handling, but if one isn't using
4871 the diary, marking dates with plan pages seems to make sense.
4873 @subheading Functions
4875 @defun planner-appt-calendar-insinuate
4876 Add a hook to diary display so that dates in the calendar that have day
4877 pages are highlighted
4878 @end defun
4880 @node Appointment Hooks,  , Appointment and Calendar Integration, Appointments
4881 @comment  node-name,  next,  previous,  up
4882 @subsubsection Appointment Hooks
4884 @subheading Options
4886 @defvr {Hook} planner-appt-update-hook
4887 Hook run after @code{planner-appt-update} has updated the appointment
4888 list.
4889 @end defvr
4891 @node Timeclock, schedule.el, Appointments, Scheduling and Time
4892 @comment  node-name,  next,  previous,  up
4893 @subsection Timeclock
4894 @cindex @file{planner-timeclock.el}, using
4895 @cindex @file{planner-timeclock-summary.el}, using
4896 @cindex @file{planner-timeclock-summary-proj.el}, using
4897 @cindex timeclock, using Planner with
4899 This module allows you to clock in and clock out of your projects
4900 (@pxref{Time Intervals, , , Emacs, GNU Emacs Manual}). You can also
4901 generate reports with the @code{<timeclock-report>} tag. You may want
4902 to read the @ref{Keeping Track of Time} page to see how you can use
4903 planner-timeclock to produce detailed reports.
4905 @file{timeclock.el} is part of GNU Emacs.  If you are using XEmacs,
4906 please use the version of @file{timeclock.el} the comes with Planner in
4907 the @file{contrib} directory.
4909 With @file{planner-timeclock.el} loaded,
4910 @command{planner-task-in-progress} clocks in a task.  To clock out,
4911 use @command{planner-task-done} or @command{timeclock-out}.
4913 @file{planner-timeclock.el} defines the following keybindings:
4915 @itemize
4916 @item @kbd{C-c C-i}: @code{planner-task-in-progress}.
4917 @item @kbd{C-c C-o}: @code{timeclock-out}.
4918 @item @kbd{C-c C-T C-i}: @code{planner-timeclock-in}. (XEmacs)
4919 @item @kbd{C-c C-T C-o}: @code{timeclock-out}. (XEmacs)
4920 @item @kbd{C-c C-S-t C-i}: @code{planner-timeclock-in}. (GNU Emacs)
4921 @item @kbd{C-c C-S-t C-o}: @code{timeclock-out}. (GNU Emacs)
4922 @end itemize
4924 If you use @code{timeclock} a lot, you may also be interested in
4925 Dryice Liu's @file{planner-timeclock-summary.el}, which produces
4926 timeclock reports for planner files.
4928 Here is a sample report:
4930 @example
4931 Project               |     Time| Ratio| Task
4932 PlannerMaintenance    |  0:03:58|  1.1%| Merge doc patch
4933                       |  0:17:09|  5.0%| Track down subdirectories
4934                       |  0:18:11|  5.3%| Merge planner-timeclock-summary-proj.el
4935                Total: |  0:39:18| 11.4%|
4936 JapanCaseStudy        |  2:37:56| 45.6%| Prototype search result page
4937                       |  0:31:50|  9.2%| Update design documents
4938                Total: |  3:09:46| 54.8%|
4939 ChristmasLetter       |  1:46:37| 30.8%| Write and send my Christmas letters
4940                Total: |  1:46:37| 30.8%|
4941 LinuxPeople           |  0:10:29|  3.0%| Send questions for Linux in Education
4942                Total: |  0:10:29|  3.0%|
4943 @end example
4945 If you add @code{(require 'planner-timeclock-summary)} to your
4946 @file{~/.emacs}, you can then use it in two ways.
4948 @itemize
4950 @item Display a temporary buffer
4952 Call @code{planner-timeclock-summary-show} and Emacs will ask you which
4953 day's summary do you want. Choose the date as anywhere else of
4954 Emacs planner, and a tempory buffer will be displayed with the
4955 timeclock summary of that day.
4957 To review tasks over a date range, use
4958 @code{planner-timeclock-summary-show-range}. You can use a regexp or a
4959 function to filter tasks by calling
4960 @code{planner-timeclock-summary-show-range-filter}.
4962 @item Rewrite sections of your planner
4964 Choose this approach if you want timeclock summary to be in their
4965 own section and you would like them to be readable in your plain
4966 text files even outside Emacs. Caveat: The timeclock summary
4967 section should already exist in your template and will be rewritten
4968 when updated. Tip: Add @code{planner-timeclock-summary-section}
4969 (default: @samp{"Timeclock"}) to your @code{planner-day-page-template}.
4971 To use, call @code{planner-timeclock-summary-update} in the planner
4972 day page to update the section. If you want rewriting to be
4973 automatically performed, call
4974 @code{planner-timeclock-summary-insinuate} in your @file{.emacs} file.
4975 @end itemize
4977 @file{planner-timeclock-summary-proj.el} produces task / time
4978 breakdowns on plan pages. Reports are of the form:
4980 @example
4981 TASK 0 | duration
4982 TASK 1 | duration
4983  TOTAL | duration.
4984 @end example
4986 To use, add @code{(require 'planner-timeclock-summary)} to your
4987 @file{~/.emacs}. Call @code{planner-timeclock-summary-proj-current}
4988 from a project page. The report is inserted at the current position in
4989 the buffer. The function @code{planner-timeclock-summary-proj-section}
4990 does the same but the report is inserted inside a section called
4991 @samp{* Report}.
4993 @node schedule.el,  , Timeclock, Scheduling and Time
4994 @comment  node-name,  next,  previous,  up
4995 @subsection @file{schedule.el}
4996 @cindex @file{planner-schedule.el}, using
4997 @cindex @file{schedule.el}, using Planner with
4999 @file{planner-schedule.el} allows you to project task completion time.
5000 Tasks should be of the form:
5002 @example
5003 #A0 _ 2h Do something
5004 #B0 _ 1h30m Do something
5005 #B0 _ 2d Do something
5006 #B0 _ 2w Do something
5007 #B0 _ 10s Do something
5009 s: seconds, m: minutes, h: hours, d: days, w: weeks
5010 @end example
5012 @file{schedule.el} is included with Planner in the @file{contrib}
5013 directory, but you can alternatively get it from
5014 @url{http://www.newartisans.com/johnw/Emacs/schedule.el} if desired.
5016 @file{schedule.el} provides a single Lisp function,
5017 @code{schedule-completion-time}. It takes an Emacs time object and a
5018 quantity of seconds. It returns an Emacs time object that represents
5019 when the given number of seconds will be completed, assuming that work
5020 can only be done during work hours.
5022 The available work hours are affected by several factors:
5024 @enumerate
5026 @item
5027 If @file{timeclock.el} is being used, the amount of time left in the
5028 current work day (@code{timeclock-workday-remaining})
5029 (@pxref{Time Intervals, , , Emacs, GNU Emacs Manual})
5031 @item
5032 The amount of time in each work day (@code{schedule-workday})
5034 @item
5035 The definition of a work week (@code{schedule-week})
5037 @item
5038 Any holidays defined in the Emacs calendar
5039 (@pxref{Holidays, , , Emacs, GNU Emacs Manual})
5041 @item
5042 Any appointments in the Emacs diary
5043 (@pxref{Appointments, , , Emacs, GNU Emacs Manual})
5045 @end enumerate
5047 Taking all of the ``block out'' periods into account,
5048 @code{schedule-completion-time} will compute when the given number of
5049 seconds will be done, based on your current definitions of time
5050 available.
5052 As an example, here's a function which, given a list of durations
5053 in seconds, will return a list of completion times starting from
5054 the current moment:
5056 @example
5058   (defun compute-completion-times (&rest durations)
5059     ``Compute completion times for a list of DURATIONS (in seconds).''
5060     (let ((now (current-time)))
5061       (mapcar
5062        (function
5063         (lambda (dura)
5064           (setq now (schedule-completion-time now dura))))
5065        durations)))
5067 @end example
5069 To call this function, do:
5071 @example
5073 (compute-completion-times 3600 7200 3600)
5075 @end example
5077 @subheading Keys
5079 @file{planner-schedule.el} defines the following keybindings:
5081 @kbd{C-c RET} is bound to @command{planner-schedule-show-end-project}.
5082 @kbd{C-c C-m} is also bound to
5083 @command{planner-schedule-show-end-project}.
5085 In XEmacs, @command{planner-schedule-show-end-project} is bound to
5086 @kbd{C-c C-T c-e} and @kbd{C-c C-S-t C-e}.
5088 @subheading Functions
5090 @file{planner-schedule.el} defines the following interactive
5091 functions:
5093 @defun planner-schedule-show-end-project
5094 Display the estimated project completion time.
5095 @end defun
5097 @file{schedule.el} does not define any interactive functions, or
5098 keybindings.
5100 @node Finances, Contacts and Conversations, Scheduling and Time, Managing Your Information
5101 @comment  node-name,  next,  previous,  up
5102 @section Finances
5103 @cindex finances
5105 Currently, Planner provides one module dedicated to tracking your
5106 finances. This module works with a program called Ledger.
5108 @menu
5109 * Ledger::                      Personal finances: planner-ledger.el
5110 @end menu
5112 @node Ledger,  , Finances, Finances
5113 @comment  node-name,  next,  previous,  up
5114 @subsection Ledger
5115 @cindex finances
5116 @cindex @file{planner-ledger.el}, using
5117 @cindex @file{ledger}, using Planner with
5119 @file{planner-ledger.el} provides integration between planner and John
5120 Wiegley's ledger accounting program, which can be found at
5121 @url{http://newartisans.com/johnw/ledger.tar.gz}.
5123 To use planner-ledger to insert a ledger balance overview and a list
5124 of pending transactions into planner day pages, make sure that your
5125 day page includes sections that match
5126 @code{planner-ledger-balance-regexp} and
5127 @code{planner-ledger-pending-regexp}. Example:
5129 @example
5130 * Tasks
5132 * Ledger
5134 ** Pending transactions
5136 * Notes
5138 @end example
5140 You can manually update ledger sections with the
5141 @command{planner-ledger-insert-maybe} command.
5143 You can also automatically update ledger sections with the following
5144 hook:
5146 @example
5147 (add-hook 'planner-goto-hook 'planner-ledger-insert-maybe)
5148 @end example
5150 You can create ledger entries from specially-formatted tasks using
5151 @command{planner-ledger-add-entry-from-task}.  Tasks should be of the
5152 form @samp{payment due: payee, amount [comment]}.  Example:
5154 @example
5155 #A1 _ payment due: foobar, $1000.00 some comment here
5156 #A2 _ payment due: baz, 1000.00
5157 @end example
5159 @subheading Options
5161 @defopt planner-ledger-balance-accounts
5162 List of accounts to be included or excluded from the balance overview.
5163 @samp{+} includes all matching accounts, and @samp{-} excludes
5164 matching accounts.  See the documentation for
5165 @command{ledger-run-ledger} for more details.
5166 @end defopt
5168 @defopt planner-ledger-balance-regexp
5169 Regular expression matching section for ledger balance.  Do not store
5170 other data in this section, as it will be overwritten.
5171 @end defopt
5173 @defopt planner-ledger-pending-regexp
5174 Regular expression matching section for ledger balance.  Do not store
5175 other data in this section, as it will be overwritten.
5176 @end defopt
5178 @defopt planner-ledger-payment-task-regexp
5179 Regular expression matching special ledger tasks.
5180 @end defopt
5182 @subheading Functions
5184 @defun planner-ledger-insert-maybe
5185 Update any ledger sections on the current page.
5186 @end defun
5188 @defun planner-ledger-add-entry-from-task
5189 Create a ledger entry based on the task at point.  Task should match
5190 @code{planner-ledger-payment-task-regexp}.
5191 @end defun
5193 @node Contacts and Conversations, Tracking Research and Resources, Finances, Managing Your Information
5194 @comment  node-name,  next,  previous,  up
5195 @section Contacts and Conversations
5196 @cindex contacts
5197 @cindex conversations
5199 Planner has two modules available for keeping track of contact and
5200 conversation information. The first uses the Big Brother Database
5201 (BBDB), and the second uses Emacs Relay Chat (ERC). BBDB is a full
5202 contact database. ERC is a client for chatting online on Internet Relay
5203 Chat (IRC) networks. The ERC module for Planner will help you keep
5204 track of online conversations you have if you use ERC for those
5205 conversations, but does not by itself store contact information other
5206 than the time you had the conversation, the network and channel you were
5207 on when you had it, and maybe who you had it with. If you are looking
5208 for a way to manage your full address book, then @file{planner-bbdb.el}
5209 in combination with BBDB is what you are looking for.
5211 @menu
5212 * BBDB::                        Contacts: planner-bbdb.el
5213 * Emacs Relay Chat::            Internet Relay Chat: planner-erc.el
5214 @end menu
5216 @node BBDB, Emacs Relay Chat, Contacts and Conversations, Contacts and Conversations
5217 @comment  node-name,  next,  previous,  up
5218 @subsection BBDB
5219 @cindex @file{planner-bbdb.el}, using
5220 @cindex BBDB, using Planner with
5222 @file{planner-bbdb.el} allows you to refer to your contacts easily
5223 from within a planner page. @inforef{Top, the BBDB Manual, bbdb}.
5225 @samp{[[bbdb://Sacha.*Chua][Sacha]]}, for example, will be linked to
5226 the blog, web or net fields of the first matching BBDB record.
5228 @file{planner-bbdb.el} does not define any interactive functions, or
5229 keybindings.
5231 @node Emacs Relay Chat,  , BBDB, Contacts and Conversations
5232 @comment  node-name,  next,  previous,  up
5233 @subsection Emacs Relay Chat
5234 @cindex @file{planner-erc.el}, using
5235 @cindex ERC, using Planner with
5236 @cindex Emacs Relay Chat, using Planner with
5237 @cindex IRC, using Planner with
5238 @cindex Internet Relay Chat, using Planner with
5240 To use planner-erc, place @file{planner-erc.el} in your load path
5241 and add this to your @file{.emacs} (or @file{_emacs}):
5243 @example
5245 (require 'planner-erc)
5247 @end example
5249 IRC URLs may be of the following forms.
5251 @example
5252 irc://server/nick,isnick
5253 irc://server/#channel
5254 irc://server
5255 @end example
5257 Annotations will be in the following forms.
5259 @example
5260 [[irc://server/nick,isnick][Chat with nick on server#channel]]
5261 [[irc://server/nick,isnick][Chat with nick on server]]
5262 [[irc://server/#channel][Chat on server#channel]]
5263 [[irc://server][Chat on server]]
5264 @end example
5266 @file{planner-erc.el} does not define any interactive functions, or
5267 keybindings.
5269 @node Tracking Research and Resources, Tracking Development, Contacts and Conversations, Managing Your Information
5270 @comment  node-name,  next,  previous,  up
5271 @section Tracking Research and Resources
5273 Planner provides three modules for keeping track of information
5274 involving three specific tools: w3m, BibTeX, and @file{bookmark.el}.
5276 @menu
5277 * W3m::                         Web browser: planner-w3m.el
5278 * BibTeX::                      Bibliographies: planner-bibtex.el
5279 * Bookmark::                    Bookmarks: planner-bookmark.el
5280 @end menu
5282 @node W3m, BibTeX, Tracking Research and Resources, Tracking Research and Resources
5283 @comment node-name,  next,  previous,  up
5284 @subsection W3m
5285 @cindex @file{planner-w3m.el}, using
5286 @cindex w3m, using Planner with
5288 This module allows you to create tasks from a w3m buffer.
5290 @file{planner-w3m.el} does not define any interactive functions, or
5291 keybindings.
5293 @node BibTeX, Bookmark, W3m, Tracking Research and Resources
5294 @comment node-name,  next,  previous,  up
5295 @subsection BibTeX
5296 @cindex @file{planner-bibtex.el}, using
5298 BibTeX URLs are of the form @samp{bibtex:file/name:key}.
5300 @file{planner-bibtex.el} does not define any interactive functions.
5302 @node Bookmark,  , BibTeX, Tracking Research and Resources
5303 @comment  node-name,  next,  previous,  up
5304 @subsection Bookmark
5305 @cindex bookmarks
5306 @cindex @file{bookmark.el}, using Planner with
5307 @cindex @file{planner-bookmark.el}, using
5309 @file{planner-bookmark.el} uses the @file{remember} package to create a
5310 note whenever you create a bookmark (see @inforef{Bookmarks, Bookmarks,
5311 Emacs}). For more information about @file{remember}, please check out
5313 @itemize
5314 @item
5315 @uref{http://www.emacswiki.org/cgi-bin/wiki/RememberMode} -
5316 EmacsWiki.org page
5317 @item
5318 @uref{http://sacha.free.net.ph/notebook/doc/dev/remember/remember.html}
5319 - Online info documentation
5320 @end itemize
5322 Configure remember according to the instructions in
5323 @file{remember-planner.el} so that notes are saved to your planner
5324 pages.
5326 @defopt planner-bookmark-take-note-after-set-bookmark-flag
5327 Non-nil means show a @code{remember} buffer after setting a new
5328 bookmark.
5329 @end defopt
5331 When you create a bookmark, Emacs will open a buffer for your notes.
5332 @kbd{C-c C-c} saves the buffer to today's page. If you don't want to
5333 save a note, you can kill the buffer.
5335 Bookmark URLs are of the form @samp{bookmark://bookmark-name}.
5337 @file{planner-bookmark.el} does not define any interactive functions.
5339 @node Tracking Development,  , Tracking Research and Resources, Managing Your Information
5340 @comment  node-name,  next,  previous,  up
5341 @section Tracking Development
5342 @cindex version control, using Planner with
5344 Planner has three modules geared toward programmers. Two modules deal
5345 with version control and integrating information from those projects
5346 into the planner page. One module deals with the Gnats bug-tracking
5347 system.
5349 @menu
5350 * Log Edit::                    Changelogs: planner-log-edit.el
5351 * PSVN::                        svn changesets: planner-psvn.el
5352 * XTLA::                        TLA changesets: planner-xtla.el
5353 * Gnats::                       Gnats: The GNU bug reporting system
5354 @end menu
5356 @node Log Edit, PSVN, Tracking Development, Tracking Development
5357 @comment  node-name,  next,  previous,  up
5358 @subsection Log Edit
5359 @cindex cvs, using Planner with
5360 @cindex @file{planner-log-edit}, using
5361 @cindex version control, using Planner with
5363 This module allows you to automatically record CVS (and VC) commits
5364 in today's page.
5366 You can load the module with @code{(require 'planner-log-edit)}. When
5367 you load the module, @code{planner-log-edit-add-note} will be added to
5368 @code{log-edit-done-hook}.  A note containing the text of the commit
5369 and optionally a list of modified files will be added to today's page
5370 if you use the the Emacs version control interface. (@pxref{Version
5371 Control, , , Emacs, GNU Emacs Manual})
5373 @subheading Options
5375 @defopt planner-log-edit-include-files-flag
5376 Non-nil means include a list of committed files in the note.
5377 @end defopt
5379 @defopt planner-log-edit-notice-commit-function
5380 Non-nil means include a list of committed files in the note. If you
5381 want to enable this feature for some projects but not for others, set
5382 this to a function that returns t only for the commits you want to
5383 note.
5384 @end defopt
5386 @file{planner-log-edit.el} does not define any interactive functions.
5388 @node PSVN, XTLA, Log Edit, Tracking Development
5389 @comment  node-name,  next,  previous,  up
5390 @subsection PSVN
5391 @cindex PSVN
5392 @cindex @file{planner-psvn.el}, using
5394 This file allows you to refer to your svn changesets easily from within
5395 a Planner page.  You can load the module with @code{(require
5396 'planner-psvn)}.
5398 PSVN URLs are of the form
5399 @samp{psvn://http://my.svn-repos.at/svn/project1/trunk@@39}
5401 Additionally there is functionality to generate a note for your commits
5402 via subversion: just set
5403 @var{planner-psvn-log-edit-notice-commit-function} to t.
5405 @file{planner-psvn.el} does not define any interactive functions.
5407 @node XTLA, Gnats, PSVN, Tracking Development
5408 @comment  node-name,  next,  previous,  up
5409 @subsection XTLA
5410 @cindex XTLA
5411 @cindex @file{planner-xtla.el}, using
5413 This module allows you to refer to changesets in Tom Lord's Arch (tla)
5414 version control system. You can load the module with @code{(require
5415 'planner-xtla)}. When you load the module, you can create tasks from
5416 XTLA windows by positioning point on a revision.
5418 XTLA URLs are of the form
5419 @samp{xtla://miles@@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-19}
5421 @file{planner-xtla.el} does not define any interactive functions.
5423 @node Gnats,  , XTLA, Tracking Development
5424 @comment  node-name,  next,  previous,  up
5425 @subsection Gnats
5427 @cindex Gnats
5428 @cindex @file{planner-gnats.el}, using
5429 @cindex bug reports, tracking
5431 @file{planner-gnats.el} provides support for the GNU problem report
5432 management system Gnats. This module allows you to refer to problem
5433 reports using hyperlinks.
5435 Configure your Emacs for Gnats access, then add @samp{(require
5436 'planner-gnats)} to your @file{.emacs}. You can then create tasks from
5437 Gnats edit or view buffers.
5439 To add keybindings to Gnats, use @samp{(planner-gnats-insinuate)}.
5441 Gnats URLs are of the form @samp{gnats:pr-number}.
5443 @file{planner-gnats.el} does not define any interactive functions.
5445 @node Advanced Configuration, Reference Material, Managing Your Information, Top
5446 @comment  node-name,  next,  previous,  up
5447 @chapter Advanced Configuration
5448 @cindex configuration, advanced
5450 @menu
5451 * Customizing Your Day Pages::  Change your templates
5452 * Variables to Customize::      Change various aspects of Planner behavior
5453 * Ideas for Other Keybindings::  Add to and change the default keybindings
5454 @end menu
5456 @node Customizing Your Day Pages, Variables to Customize, Advanced Configuration, Advanced Configuration
5457 @comment  node-name,  next,  previous,  up
5458 @section Customizing Your Day Pages
5460 With the variable @code{planner-day-page-template}, you can define how
5461 you want any newly created day planner pages to look.
5463 You might want to include a section for your diary entries. For how to
5464 do this, see @ref{Diary}.
5466 You can add interactive Lisp buttons with the @file{planner-lisp.el}
5467 module. (@pxref{Interactive Lisp})
5469 Your @code{planner-day-page-template} can also include @samp{|<lisp>|}
5470 tags.
5472 For more complex day pages, you can set
5473 @code{planner-day-page-template} to a function that will be called
5474 from an empty day page buffer. The function should initialize the
5475 contents of the day page.
5477 @node Variables to Customize, Ideas for Other Keybindings, Customizing Your Day Pages, Advanced Configuration
5478 @comment  node-name,  next,  previous,  up
5479 @section Variables to Customize
5480 @cindex customize, variables to
5481 @cindex variables, customization of
5482 @cindex configuration, advanced, variables
5484 If you want to change @code{planner-directory} and some other
5485 variables, either use Customize (@kbd{M-x customize-group RET planner
5486 RET}) or use @code{setq}.  An example of the latter follows.
5488 @example
5489 (setq planner-directory "~/Plans")
5490 @end example
5492 Other user options are:
5494 @vindex planner-use-day-pages
5495 @defopt planner-use-day-pages
5496 If you really don't like day pages, you can set this variable to nil
5497 and you won't be prompted for dates for tasks (and notes, if using
5498 @file{remember-planner}).
5499 @end defopt
5501 @vindex planner-use-plan-pages
5502 @defopt planner-use-plan-pages
5503 If you really don't like plan pages, you can set this variable to nil
5504 and you won't be prompted for plan pages for tasks (and notes, if
5505 using @file{remember-planner}).
5506 @end defopt
5508 @vindex planner-mode-hook
5509 @defopt planner-mode-hook
5510 List of functions to run after @code{planner-mode} is initialized.
5511 @end defopt
5513 @vindex planner-tasks-file-behavior
5514 @defopt planner-tasks-file-behavior
5515 This variable controls what happens to files Planner opens by itself.
5516 If your tasks are associated with plan pages, the plan pages are
5517 updated whenever a task is rescheduled.  This could lead to a lot of
5518 open buffers as Planner applies updates to all linked files.
5519 By default, Planner is configured to do nothing.
5520 A value of @samp{save} means save but do not close buffers, and a
5521 value of @samp{nil} means do not save any of the buffers.
5522 @end defopt
5524 @vindex planner-add-task-at-end-flag
5525 @defopt planner-add-task-at-end-flag
5526 This variable controls where new tasks are created.  Non-nil means
5527 create tasks at the bottom of the first task block.  If you set this
5528 to non-nil, new tasks will be listed in order of creation (oldest).
5529 Tasks carried over from previous days will appear at the bottom of the
5530 list.
5532 Nil means create tasks at the top of the first task block.
5533 Carried-over tasks and newly created tasks are prominently placed on
5534 top of the list of tasks for the day.
5535 @end defopt
5537 @vindex planner-default-page
5538 @defopt planner-default-page
5539 Default page for created tasks.  This is used as the initial value for
5540 tasks.  After you create a task, it will be set to the previous page
5541 used.
5542 @end defopt
5544 @vindex planner-hide-task-status-when-highlighting
5545 @defopt planner-hide-task-status-when-highlighting
5546 Font-locking for tasks may be enough for you to determine status and
5547 priority.  Set this to non-nil if you want to hide the status marker
5548 and rely on font-locking instead.
5549 @end defopt
5551 @vindex planner-create-task-hook
5552 @defopt planner-create-task-hook
5553 Functions run after creating a task. @code{planner-id} hooks into
5554 this.
5555 @end defopt
5557 @vindex planner-expand-name-favor-future-p
5558 @defopt planner-expand-name-favor-future-p
5559 If non-nil, partial dates (ex: @kbd{2} or @kbd{5.2}) are completed to
5560 dates in the future instead of using the current year and month.
5561 @end defopt
5563 @vindex planner-task-dates-favor-future-p
5564 @defopt planner-task-dates-favor-future-p
5565 Like @code{planner-expand-name-favor-future-p}, but only for tasks.
5566 @end defopt
5568 @vindex planner-publish-dates-first-p
5569 @defopt planner-publish-dates-first-p
5570 Non-nil means list day pages first in the planner index.
5571 @end defopt
5573 @node Ideas for Other Keybindings,  , Variables to Customize, Advanced Configuration
5574 @comment  node-name,  next,  previous,  up
5575 @section Ideas for Other Keybindings
5576 @cindex keybindings, customization of
5577 @cindex configuration, advanced, keybindings
5578 @cindex customize, keybindings to
5580 By default and for backward compatibility, the following operations
5581 do not have keybindings, and are only accessible from the Planner
5582 menu:
5584 @itemize @bullet
5586 @item
5587 @code{planner-copy-or-move-region}
5589 @item
5590 @code{planner-delete-task}
5592 @item
5593 @code{planner-task-delegated}
5595 @item
5596 @code{planner-task-pending}
5598 @item
5599 @code{planner-task-open}
5601 @item
5602 @code{planner-renumber-tasks}
5604 @end itemize
5606 You may find it easier to install keybindings for those operations by
5607 inserting the following in your @file{.emacs} (or @file{_emacs}).
5608 Note: This changes some of the default keybindings for Planner.
5610 @example
5611 (planner-install-extra-task-keybindings)
5612 @end example
5614 If you install the extra task keybindings, your keybindings will
5615 include:
5617 @itemize @bullet
5619 @item
5620 @kbd{C-c C-t} will be unbound from the default and will serve as the
5621 prefix for the other task keybindings.
5623 @item
5624 @kbd{C-c C-t C-t}: @code{planner-create-task-from-buffer}.
5626 @item
5627 @kbd{C-c C-t C-k}: @code{planner-delete-task}.
5629 @item
5630 @kbd{C-c C-t C-u}: @code{planner-update-task}.
5632 @item
5633 @kbd{C-c C-t C-c}: @code{planner-copy-or-move-task}.
5635 @item
5636 @kbd{C-c C-t C-S-c}: @code{planner-copy-or-move-region}.
5638 @item
5639 @kbd{C-c C-t C-x}: @code{planner-task-done}.
5641 @item
5642 @kbd{C-c C-t C-S-x}: @code{planner-task-cancelled}.
5644 @item
5645 @kbd{C-c C-t C-d}: @code{planner-task-delegated}.
5647 @item
5648 @kbd{C-c C-t C-p}: @code{planner-task-pending}.
5650 @item
5651 @kbd{C-c C-t C-o}: @code{planner-task-in-progress}.
5653 @item
5654 @kbd{C-c C-t C-r}: @code{planner-raise-task}.
5656 @item
5657 @kbd{C-c C-t C-l}: @code{planner-lower-task}.
5659 @item
5660 @kbd{C-c C-t C-n}: @code{planner-renumber-tasks}.
5662 @end itemize
5664 Other keybindings can be configured by adding this to your
5665 @file{.emacs} (or @file{_emacs}):
5667 @example
5668 (planner-install-extra-context-keybindings)
5669 @end example
5671 This will set up the following keybindings:
5673 @itemize @bullet
5675 @item
5676 @kbd{shift up} @code{planner-move-up}
5678 @item
5679 @kbd{shift down} @code{planner-move-down}
5681 @item
5682 @kbd{shift right} @code{planner-jump-to-link}
5684 @end itemize
5686 @node Reference Material, Getting Help, Advanced Configuration, Top
5687 @comment  node-name,  next,  previous,  up
5688 @chapter Reference Material
5690 @menu
5691 * Keeping Track of Time::       
5692 * Other Interactive Functions::  
5693 * Planner Keybindings::         Default keybindings for Planner
5694 * Sample Configuration Files::  
5695 @end menu
5697 @node Keeping Track of Time, Other Interactive Functions, Reference Material, Reference Material
5698 @section Keeping Track of Time
5700 One of the coolest things you can do with Planner is keep track of how
5701 much time you spend not only on projects but even on particular tasks.
5702 @file{planner-timeclock.el} makes it as easy and natural as marking a
5703 task as in progress, postponed, or done. This can help you determine
5704 just how much time you spend working each day. If you add estimates to
5705 your task descriptions, you'll also be able to use this information to
5706 improve your time estimation skills.
5708 Here's how you can keep track of the time you
5711 Then the fun began. I wanted to see if I could match my estimates.
5712 Before I started working on a task, I used @kbd{C-c TAB} to mark it
5713 @code{in progress} and start the clock. If I decided to work on
5714 something else, I used @kbd{C-c TAB} to clock out of the previous task
5715 and clock into the new one.
5717 When I finished it, I used @kbd{C-c C-x} (@code{planner-task-done}) to
5718 mark it completed and automatically clock out. This is not yet done
5719 for cancelled tasks, so I clocked out of those manually with @kbd{C-c
5720 C-o} (@code{timeclock-out}). I also clocked out whenever I caught
5721 myself being distracted so that the totals wouldn't include the time I
5722 spent chatting on #emacs or checking out del.icio.us links. =) At the
5723 end of the day, I used
5724 @code{planner-timeclock-summary-show-range-filter} to show me the time
5725 elapsed for all of the tasks I'd worked on over the past two days.
5726 Here's the report for that project, edited to reflect how it looks on
5727 my screen and annotated with comments:
5729 @example
5730 Timeclock summary report for 2004.12.28 - 2004.12.29
5732 Project     |     Time| Ratio| Task
5733 JapanProject|  0:23:17|  3.6%| Translate javadoc comment for Messages.java
5734             |  0:33:48|  5.3%| Translate javadoc comment for LoginAction.java
5735             |  1:54:07| 17.8%| Study Struts in Japanese
5736             |  0:46:08|  7.2%| Add javadoc tags for input, output and forwards
5737             |  1:03:48|  9.9%| Help review code
5738             |  0:04:14|  0.7%| Import todo list
5739             |  0:00:37|  0.1%| 2min       Fix Menu Action's unnecessary code - delegated
5740             |  0:01:01|  0.2%| 2min       Remove unnecessary list in UserRemoveSetupAction - cancelled
5741             |  0:02:10|  0.3%| 2min       Remove hard-coded database path from MenuAction
5742             |  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. ...
5743             |  0:07:32|  1.2%| 5min       Add a method that returns the validity of a user in MUserPeer.
5744             |  0:08:28|  1.3%| 5min       Fix indentation
5745             |  0:03:52|  0.6%| 10min      Fix UserPeer so that it doesn't get null pointer exceptions
5746             |  0:04:34|  0.7%| 5min       Add current password field in user_modify page
5747             |  0:21:56|  3.4%| 15min      Make a super class for our service classes that will receive the database connection. (cancelled)
5748             |  0:06:05|  0.9%| 10min      Remove hard-coded constants from the Logic classes
5749             |  0:10:55|  1.7%| 10min      Move logic from UserBean.checkPassword to UserListLogic
5750             |  0:01:20|  0.2%| 20min      Guard against null pointer exceptions in peer classes
5751             |  0:04:57|  0.8%| 10min      Instead of displaying uneditable data with bean:write, just disable the html:text element
5752             |  0:25:03|  3.9%| 10min      Deploy 10:00 version
5753             |  0:04:46|  0.7%| 5min       Separate the configuration file of database and system into another uninternationalized property file.
5754             |  2:09:48| 20.2%| 1h         Decide on a naming convention for localized messages and update files
5755             |  0:00:07|  0.0%| 20min      Explain what is happening in UserModifyAction's nested ifs - pending
5756             |  1:50:23| 17.2%| 2h         Write Javadoc comments in English and Japanese to explain bean structure
5757             |  0:04:19|  0.7%| 2h         Write Javadoc comments in English and Japanese to explain peer operations (pending)
5758             |  0:05:40|  0.9%| 20min      Make a factory class for the database - pending
5759      Total: | 10:41:41|100.0%|      
5761 Day began: 13:03:58, Day ended: 20:51:46
5762 Time elapsed: 31:47:48, Time clocked: 10:41:41
5763 Time clocked ratio: 33.6%
5764 @end example
5766 The time record isn't perfect. I cancelled some tasks after thinking
5767 about them a little and did some tasks simultaneously. Sometimes I
5768 didn't notice that I was getting distracted, too. Still, having all of
5769 that time information neatly summarized made me realize a number of
5770 things.
5772 First, I goof off much less when I have a nice, broken-down task list
5773 in front of me. There's just something about knowing there's a five-
5774 or ten-minute hack you can get out of the way. I found myself looking
5775 forward to getting to the next task just to see if I could make my
5776 estimate. That said, seeing a five-minute task stretch and stretch due
5777 to unforeseen problems did make me a little nervous. I should probably
5778 just make generous estimates so that I don't end up with bugs because
5779 of haste.
5781 Second, I don't goof off as much as I thought I did, although there's
5782 still room for improvement. Yesterday's workday was 9:00 - 12:00, 1:00
5783 - 5:30--7.5 hours. Today was the last day of work, so cleaning and
5784 celebration interrupted my hacking at around 3:00--5 hours of work.
5785 According to my task list, 10:41/12:30 was productive work. Hmm. 1:49
5786 hours unclocked time when I was thinking or goofing off.
5787 planner-timeclock-summary-show for today reveals that I actually
5788 clocked 5:30 today, which means the goofing off happened yesterday.
5789 That makes sense; I remember a pretty long unclocked segment
5790 recuperating from Japanese overload. (This was before we came up with
5791 the task list.)
5793 Third, keeping track of time is way, way cool even if you don't bill
5794 anyone for your time.
5796 Like the idea? It's easy to try out. Just add
5798 @example
5799 (require 'planner-timeclock)
5800 (require 'planner-timeclock-summary)
5801 @end example
5803 to your ~/.emacs. If you want to try it out now, eval those statements
5804 in your Emacs session. After that, simply use @kbd{C-c TAB} to ``clock
5805 in'' a task before you start working on it and @kbd{C-c C-x}
5806 (@code{planner-task-done}) to mark it completed. @kbd{M-x
5807 planner-task-pending} also clocks out the current task if it was
5808 clocked in. To see a summary of how you spent your day, check out the
5809 different functions in @file{planner-timeclock-summary}.
5811 See @ref{Timeclock} for more details.
5813 Happy hacking!
5815 @node Other Interactive Functions, Planner Keybindings, Keeping Track of Time, Reference Material
5816 @comment  node-name,  next,  previous,  up
5817 @section Other Interactive Functions
5819 With @file{planner.el} loaded, you can use any of the functions in this
5820 section by typing @kbd{M-x} followed by the name of the function. Many
5821 of these functions are also bound to keys.
5823 For a list of Planner keybindings, see @ref{Planner Keybindings}.
5825 They are listed in no particular order.
5827 @file{planner.el} defines the following interactive functions:
5830 @defun planner-create-high-priority-task-from-buffer
5831 Create a high priority task based on this buffer.  Do not use this in
5832 LISP programs. Instead, set the value of
5833 @var{planner-default-task-priority} and call @code{planner-create-task}
5834 or @code{planner-create-task-from-buffer}.
5835 @end defun
5837 @defun defun planner-create-medium-priority-task-from-buffer
5838 Create a medium-priority task based on this buffer.  Do not use this in
5839 LISP programs. Instead, set the value of
5840 @var{planner-default-task-priority} and call @code{planner-create-task}
5841 or @code{planner-create-task-from-buffer}.
5842 @end defun
5844 @defun planner-create-low-priority-task-from-buffer
5845 Create a high-priority task based on this buffer.
5846 Do not use this in LISP programs. Instead, set the value of
5847 @var{planner-default-task-priority} and call @code{planner-create-task} or
5848 @code{planner-create-task-from-buffer}.
5849 @end defun
5851 @defun planner-install-extra-context-keybindings
5852 Install extra context-sensitive keybindings. These keybindings
5853 conflict with @file{windmove.el}, but might be useful.
5854 @end defun
5856 @defun planner-narrow-to-section section &optional create
5857 Widen to the whole page and narrow to the section labelled
5858 @var{section}.  If @var{create} is non-nil and the section is not found,
5859 the section is created.  Return non-nil if @var{section} was found or
5860 created.
5861 @end defun
5863 @defun planner-save-buffers
5864 Save all planner-mode buffers.
5865 @end defun
5867 @defun planner-seek-to-first section
5868 Positions the point at the specified @var{section}, or @samp{Tasks} if
5869 not specified.
5870 @end defun
5872 @defun planner-save-buffers
5873 Save all planner buffers.
5874 @end defun
5876 @defun planner-calendar-insinuate
5877 This hooks Planner into  Emacs Calendar (@pxref{Calendar/Diary, ,
5878 , Emacs, GNU Emacs Manual}).
5880 It adds special planner key bindings to @code{calendar-mode-map}.
5881 After this function is evaluated, you can use the following
5882 planner-related keybindings in @code{calendar-mode-map}:
5884 @table @kbd
5886 @item  n
5887 Jump to the planner page for the current day.
5889 @item  N
5890 Display the planner page for the current day.
5891 @end table
5893 @end defun
5895 @defun planner-kill-calendar-files
5896 Remove planner files shown from Calendar (@pxref{Calendar/Diary, , ,
5897 Emacs, GNU Emacs Manual}).
5899 @end defun
5901 @defun planner-calendar-goto
5902 Goto the plan page corresponding to the calendar date
5903 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
5904 @end defun
5906 @defun planner-calendar-show
5907 Show the plan page for the calendar date under point in another window
5908 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
5909 @end defun
5911 @defun planner-calendar-select
5912 Return to @code{planner-read-date} with the date currently selected
5913 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
5914 @end defun
5916 @defun planner-jump-to-link
5917 Jump to the item linked to by the current item.
5918 @end defun
5920 @defun planner-move-up
5921 Move a task up. You can use this to indicate that you will do a task
5922 before another one. On a note, go to the previous note. On a headline,
5923 go to the previous headline of the same depth.
5924 @end defun
5926 @defun planner-move-down 
5927 Move down. You can use this to indicate that you will do a task after
5928 another one. On a note, go to the next note. On a headline, go to the
5929 next headline of the same depth.
5930 @end defun
5932 @node Planner Keybindings, Sample Configuration Files, Other Interactive Functions, Reference Material
5933 @comment  node-name,  next,  previous,  up
5934 @section Planner Keybindings
5935 @cindex keybindings, list
5937 In order to refresh and renumber all of your tasks according to their
5938 actual order in the buffer, simply save the file or call
5939 @kbd{M-x planner-renumber-tasks}.
5941 Here is a summary of the keystrokes available:
5943 @table @kbd
5945 @item M-x plan
5946 Begin your planning session.  This goes to the last day for which
5947 there is any planning info (or today if none), allowing you to review,
5948 and create/move tasks from that day.
5950 @item C-c C-u
5951 Move a task up.
5953 @item C-c C-d
5954 Move a task down.
5956 @item C-c C-s
5957 Mark the task as in progress or delegated.
5959 @item C-c C-x
5960 Mark the task as finished.
5962 @item C-c C-t
5963 Create a task associated with the current Wiki page. If you are on the
5964 opening line of a Note entry, it is assumed that the note itself is the
5965 origin of the task.
5967 @item C-c C-c
5968 Move or copy the current task to another date. If the current task is
5969 an original (meaning you are in the buffer where's defined, hopefully
5970 a planning page) then it will be copied, and the original task will
5971 also now point to the copy.  If the current task is a copy, it will
5972 just be moved to the new day, and the original task's link will be
5973 updated.
5975 @item C-c C-n
5976 Jump to today's task page.  If you call
5977 @code{(planner-calendar-insinuate)}, typing @kbd{n} in the Emacs
5978 calendar (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}) will jump
5979 to today's task page.
5981 @item C-c C-x
5982 @code{planner-task-done}
5984 @item C-c C-z
5985 @code{planner-task-in-progress}
5987 @item C-c C-d
5988 @code{planner-lower-task}
5990 @item C-c C-u
5991 @code{planner-raise-task}
5993 @item C-c C-c
5994 @code{planner-copy-or-move-task}
5996 @item C-c C-t
5997 @code{planner-create-task-from-buffer}
5999 @item C-c C-j
6000 This is a prefix command.
6002 @item C-c C-n
6003 @code{planner-goto-today}
6005 @item C-c C-j C-r
6006 @code{planner-goto-most-recent}
6008 @item C-c C-j C-t
6009 @code{planner-goto-tomorrow}
6011 @item C-c C-j C-y
6012 @code{planner-goto-yesterday}
6014 @item C-c C-j C-j
6015 @code{planner-goto-today}
6017 @item C-c C-j C-n
6018 @code{planner-goto-next-daily-page}
6020 @item C-c C-j C-p
6021 @code{planner-goto-previous-daily-page}
6023 @item C-c C-j C-d
6024 @code{planner-goto}
6026 @end table
6028 @node Sample Configuration Files,  , Planner Keybindings, Reference Material
6029 @comment  node-name,  next,  previous,  up
6030 @section Sample Configuration Files
6031 @cindex configuration, sample
6033 This section includes some sample configuration files. This way, once
6034 you've got the hang of the basics, you can see some different, more
6035 advanced, setups.
6037 There is no One True Way to plan. Every person is different. We hope
6038 you'll find a good starting point among the example configurations
6039 below. If what you want to do does not perfectly fit under one of these
6040 examples, please post a description of the way you plan to our mailing
6041 list (@pxref{Getting Help}).  We look forward to helping you customizing
6042 planner to fit your needs.
6044 @menu
6045 * File Organization::           
6046 * Bare-Bones Planning::         
6047 * Bare-Bones Planning with Plan Pages::  
6048 * Tasks on Plan Pages with Some Day Pages::  
6049 * Hierarchical Tasks::          
6050 @end menu
6052 @node File Organization, Bare-Bones Planning, Sample Configuration Files, Sample Configuration Files
6053 @subsection File Organization
6055 @itemize
6056 @item @strong{Tasks, schedule and notes on day pages.}
6058 By default, tasks, schedule entries and notes are filed on day pages.
6059 This makes it easy for you to see all the entries relevant to a single
6060 day without becoming overwhelmed with information. Unfinished tasks
6061 are carried over to the next day when you use @kbd{M-x plan}, so it's
6062 always kept up to date. Completed tasks are left on the day page you
6063 finished them on, which helps when reviewing one's progress and writing
6064 accomplishment reports.
6066 @item @strong{Cross-referenced with plan pages.}
6068 You can associate your tasks with projects either when you create the
6069 task or later, with @kbd{M-x planner-replan-task}. This makes it easy
6070 for you to see all the information associated with a particular
6071 project. If you use RememberMode to create notes, you will also be
6072 able to associate notes with a plan page.
6074 @item @strong{Just plan pages.}
6076 If your tasks don't usually have dates, you can turn day pages off by
6077 customizing @code{planner-use-day-pages}. If so, then all of your
6078 tasks and notes will be stored on the WelcomePage and/or a plan page.
6080 @end itemize
6082 @node Bare-Bones Planning, Bare-Bones Planning with Plan Pages, File Organization, Sample Configuration Files
6083 @subsection Bare-Bones Planning
6085 You can keep all of your tasks, notes and schedules in a single file:
6086 WelcomePage.  This is good for people who are used to storing all of
6087 their information in a flat text file.  By storing your information in
6088 planner, you'll be able to take advantage of automatic hyperlinking to
6089 files and other resources.  You can also sort your tasks by priority
6090 and status.
6092 To set your system up for bare-bones planning, set the
6093 @code{planner-use-day-pages} variable to nil before loading planner.
6094 For example, you can put this in your @file{~/.emacs} (or @file{_emacs}):
6096 @example
6097 (setq planner-use-day-pages nil)
6098 (setq planner-default-page nil)
6099 (require 'planner)
6100 @end example
6102 When you create a task or note, planner will not prompt you for a
6103 date.  If you press @key{RET} when prompted for a plan page, it will
6104 accept the default of nil, so no other plan pages will be used.  All
6105 of your data will be kept in one file, which can then be easily backed
6108 You can use commands like @command{planner-create-task-from-buffer} to
6109 create tasks, or you can type tasks in manually.  You can edit or
6110 delete anything in the page without having to update other files.
6112 @node Bare-Bones Planning with Plan Pages, Tasks on Plan Pages with Some Day Pages, Bare-Bones Planning, Sample Configuration Files
6113 @subsection Bare-Bones Planning with Plan Pages
6115 When you create a task or note, Planner.el can copy this to a plan
6116 page. Plan pages allow you to see an overview of all the data for a
6117 project.
6119 For convenience, the @command{planner-create-task-from-buffer} command
6120 prompts you for a plan page when you create a task.
6124 @node Tasks on Plan Pages with Some Day Pages, Hierarchical Tasks, Bare-Bones Planning with Plan Pages, Sample Configuration Files
6125 @subsection Tasks on Plan Pages with Some Day Pages
6127 If most of your tasks are associated with plan pages but you want to
6128 schedule some tasks on day pages, you can leave day pages on (default)
6129 and then write a function that turns off day pages. For example, the
6130 following code snippet turns off day pages for task creation from
6131 buffers.
6133 @example
6134 (require 'planner)
6136 (defun my-planner-create-task-from-buffer ()
6137   "Call `planner-create-task-from-buffer', but without dates."
6138   (interactive)
6139   (let ((planner-use-day-pages nil))
6140     (call-interactively 'planner-create-task-from-buffer)))
6141 @end example
6143 @node Hierarchical Tasks,  , Tasks on Plan Pages with Some Day Pages, Sample Configuration Files
6144 @subsection Hierarchical Tasks
6145 @cindex hierarchical tasks
6146 @cindex tasks, hierarchy of
6148 You can use @file{allout.el} or other modes for outlining to support
6149 hierarchical tasks in plan pages. No special support is needed.
6151 Tasks created by @command{planner-create-task-from-buffer} and
6152 @code{planner-create-task} are created in the @samp{* Tasks} section.
6153 If @code{planner-add-task-at-end-flag} is non-nil, tasks are added to
6154 the end of the first task block, else they are added to the beginning.
6155 You can then copy and paste tasks into your preferred hierarchy.
6156 Blank lines delimit blocks of tasks upon which automatic sorting is
6157 performed.
6159 You can also type in tasks manually. You may find this approach faster
6160 when you are comfortable with planner.
6162 For example, a @file{LearnPlanner} plan page might contain the
6163 following lines:
6165 @example
6166 * Learn how to use planner.el
6168 ** Installation
6170 #C0 _ Decide where to put Planner
6171 #C0 _ Download the archives
6173 ** Configuration
6175 *** Load path
6177 #C0 _ Figure out how to add things to my load path
6178 #C0 _ Actually add it to my load path
6181 @end example
6183 If you create tasks for the finest level of detail available at the
6184 moment, you can schedule them onto day pages with @kbd{C-c C-c}
6185 (@command{planner-copy-or-move-task}). Then you can use
6186 @command{planner-jump-to-link} to switch between the day page and the
6187 plan page link.
6190 @node Getting Help, Acknowledgements, Reference Material, Top
6191 @comment  node-name,  next,  previous,  up
6192 @chapter Getting Help
6193 @cindex help, getting
6194 @cindex bugs, reporting
6196 After you have read this guide, if you still have questions about
6197 Planner, or if you have bugs to report, there are several places
6198 you can go.
6200 Planner has an official website at @url{http://www.plannerlove.com/}.
6201 It is a collaborative wiki.
6203 Bugs may be reported using the Planner Bug-Tracker at
6204 @url{http://gna.org/bugs/?group=planner-el}.
6206 Planner has three mailing lists.
6208 @table @samp
6210 @item planner-el-announce
6211 Low-traffic list for planner-related announcements.
6213 You can join this mailing list (@email{planner-el-announce@@gna.org})
6214 using the subscription form at
6215 @url{http://mail.gna.org/listinfo/planner-el-announce/}.  This
6216 mailing list is also available via Gmane (@url{http://gmane.org/}). The
6217 group is called @samp{gmane.emacs.planner.announce}.
6219 @item planner-el-discuss
6220 Discussion, bugfixes, suggestions, tips, and the like for Planner.
6221 This mailing list also includes the content of planner-el-announce.
6223 You can join this mailing list (@email{planner-el-discuss@@gna.org})
6224 using the subscription form at
6225 @url{http://mail.gna.org/listinfo/planner-el-discuss/}.  This mailing
6226 list is also available via Gmane with the identifier
6227 @samp{gmane.emacs.planner.general}.
6229 @item planner-el-cvs
6230 Log messages for changes committed to Planner.
6232 You can join this mailing list (@email{planner-el-cvs@@gna.org}) using
6233 the subscription form at
6234 @url{http://mail.gna.org/listinfo/planner-el-cvs/}.  This mailing list
6235 is also available via Gmane with the identifier
6236 @samp{gmane.emacs.planner.cvs}.
6238 @end table
6240 You can also contact the maintainer of Planner, Michael Olson, at
6241 @email{mwolson@@gnu.org}, but it is better to use the other options.
6243 You can explore the relevant sections of the EmacsWiki.org:
6245 @itemize @bullet
6247 @item
6248 @url{http://www.emacswiki.org/cgi-bin/wiki/PlannerMode}
6250 @item
6251 @url{http://www.emacswiki.org/cgi-bin/wiki/MuseMode}
6253 @item
6254 @url{http://www.emacswiki.org/cgi-bin/wiki/RememberMode}
6256 @end itemize
6258 You can visit the IRC Freenode channel @samp{#emacs}. Many of the
6259 contributors are frequently around and willing to answer your
6260 questions.
6262 There is an Orkut community called PlannerMode.
6264 For issues relating to this documentation, please contact John
6265 Sullivan at @email{johnsu01@@yahoo.com}.
6267 @node Acknowledgements, GNU General Public License, Getting Help, Top
6268 @comment  node-name,  next,  previous,  up
6269 @chapter Acknowledgements
6270 @itemize
6271 @item Maintainers
6273 @cindex maintainers
6275 @itemize
6276 @item 2005
6278 Michael Olson, Sacha Chua, and several others from the Planner community
6279 ported Planner to use Muse instead of emacs-wiki.  Michael Olson became
6280 the maintainer of Planner.
6282 @item 2004
6284 Damien Elmes handed EmacsWikiMode to Mark Triggs for a short period of
6285 time.  Mark Triggs deferred to Sacha Chua as official maintainer of
6286 Planner.  Sacha Chua volunteered to maintain RememberMode.
6287 Michael Olson became the maintainer of both emacs-wiki and Muse.
6289 @item 2003
6291 Sacha Chua volunteered to maintain Planner.  Damien Elmes
6292 volunteered to maintain EmacsWikiMode.
6294 @item 2001
6296 John Wiegley wrote EmacsWikiMode and Planner.
6297 @end itemize
6299 @item Contributors
6300 @cindex contributors
6302 For a complete list of people who have helped out with Planner, please
6303 check out the @file{AUTHORS} file that is included with Planner.
6305 @end itemize
6307 @node GNU General Public License, Concept Index, Acknowledgements, Top
6308 @comment  node-name,  next,  previous,  up
6309 @appendix GNU GENERAL PUBLIC LICENSE
6310 @center Version 2, June 1991
6311 @cindex GPL
6312 @cindex GNU General Public License
6314 @c This file is intended to be included in another file.
6316 @display
6317 Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
6318 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
6320 Everyone is permitted to copy and distribute verbatim copies
6321 of this license document, but changing it is not allowed.
6322 @end display
6324 @appendixsec Preamble
6326   The licenses for most software are designed to take away your
6327 freedom to share and change it.  By contrast, the GNU General Public
6328 License is intended to guarantee your freedom to share and change free
6329 software---to make sure the software is free for all its users.  This
6330 General Public License applies to most of the Free Software
6331 Foundation's software and to any other program whose authors commit to
6332 using it.  (Some other Free Software Foundation software is covered by
6333 the GNU Library General Public License instead.)  You can apply it to
6334 your programs, too.
6336   When we speak of free software, we are referring to freedom, not
6337 price.  Our General Public Licenses are designed to make sure that you
6338 have the freedom to distribute copies of free software (and charge for
6339 this service if you wish), that you receive source code or can get it
6340 if you want it, that you can change the software or use pieces of it
6341 in new free programs; and that you know you can do these things.
6343   To protect your rights, we need to make restrictions that forbid
6344 anyone to deny you these rights or to ask you to surrender the rights.
6345 These restrictions translate to certain responsibilities for you if you
6346 distribute copies of the software, or if you modify it.
6348   For example, if you distribute copies of such a program, whether
6349 gratis or for a fee, you must give the recipients all the rights that
6350 you have.  You must make sure that they, too, receive or can get the
6351 source code.  And you must show them these terms so they know their
6352 rights.
6354   We protect your rights with two steps: (1) copyright the software, and
6355 (2) offer you this license which gives you legal permission to copy,
6356 distribute and/or modify the software.
6358   Also, for each author's protection and ours, we want to make certain
6359 that everyone understands that there is no warranty for this free
6360 software.  If the software is modified by someone else and passed on, we
6361 want its recipients to know that what they have is not the original, so
6362 that any problems introduced by others will not reflect on the original
6363 authors' reputations.
6365   Finally, any free program is threatened constantly by software
6366 patents.  We wish to avoid the danger that redistributors of a free
6367 program will individually obtain patent licenses, in effect making the
6368 program proprietary.  To prevent this, we have made it clear that any
6369 patent must be licensed for everyone's free use or not licensed at all.
6371   The precise terms and conditions for copying, distribution and
6372 modification follow.
6374 @iftex
6375 @appendixsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
6376 @end iftex
6377 @ifinfo
6378 @center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
6379 @end ifinfo
6381 @enumerate 0
6382 @item
6383 This License applies to any program or other work which contains
6384 a notice placed by the copyright holder saying it may be distributed
6385 under the terms of this General Public License.  The ``Program'', below,
6386 refers to any such program or work, and a ``work based on the Program''
6387 means either the Program or any derivative work under copyright law:
6388 that is to say, a work containing the Program or a portion of it,
6389 either verbatim or with modifications and/or translated into another
6390 language.  (Hereinafter, translation is included without limitation in
6391 the term ``modification''.)  Each licensee is addressed as ``you''.
6393 Activities other than copying, distribution and modification are not
6394 covered by this License; they are outside its scope.  The act of
6395 running the Program is not restricted, and the output from the Program
6396 is covered only if its contents constitute a work based on the
6397 Program (independent of having been made by running the Program).
6398 Whether that is true depends on what the Program does.
6400 @item
6401 You may copy and distribute verbatim copies of the Program's
6402 source code as you receive it, in any medium, provided that you
6403 conspicuously and appropriately publish on each copy an appropriate
6404 copyright notice and disclaimer of warranty; keep intact all the
6405 notices that refer to this License and to the absence of any warranty;
6406 and give any other recipients of the Program a copy of this License
6407 along with the Program.
6409 You may charge a fee for the physical act of transferring a copy, and
6410 you may at your option offer warranty protection in exchange for a fee.
6412 @item
6413 You may modify your copy or copies of the Program or any portion
6414 of it, thus forming a work based on the Program, and copy and
6415 distribute such modifications or work under the terms of Section 1
6416 above, provided that you also meet all of these conditions:
6418 @enumerate a
6419 @item
6420 You must cause the modified files to carry prominent notices
6421 stating that you changed the files and the date of any change.
6423 @item
6424 You must cause any work that you distribute or publish, that in
6425 whole or in part contains or is derived from the Program or any
6426 part thereof, to be licensed as a whole at no charge to all third
6427 parties under the terms of this License.
6429 @item
6430 If the modified program normally reads commands interactively
6431 when run, you must cause it, when started running for such
6432 interactive use in the most ordinary way, to print or display an
6433 announcement including an appropriate copyright notice and a
6434 notice that there is no warranty (or else, saying that you provide
6435 a warranty) and that users may redistribute the program under
6436 these conditions, and telling the user how to view a copy of this
6437 License.  (Exception: if the Program itself is interactive but
6438 does not normally print such an announcement, your work based on
6439 the Program is not required to print an announcement.)
6440 @end enumerate
6442 These requirements apply to the modified work as a whole.  If
6443 identifiable sections of that work are not derived from the Program,
6444 and can be reasonably considered independent and separate works in
6445 themselves, then this License, and its terms, do not apply to those
6446 sections when you distribute them as separate works.  But when you
6447 distribute the same sections as part of a whole which is a work based
6448 on the Program, the distribution of the whole must be on the terms of
6449 this License, whose permissions for other licensees extend to the
6450 entire whole, and thus to each and every part regardless of who wrote it.
6452 Thus, it is not the intent of this section to claim rights or contest
6453 your rights to work written entirely by you; rather, the intent is to
6454 exercise the right to control the distribution of derivative or
6455 collective works based on the Program.
6457 In addition, mere aggregation of another work not based on the Program
6458 with the Program (or with a work based on the Program) on a volume of
6459 a storage or distribution medium does not bring the other work under
6460 the scope of this License.
6462 @item
6463 You may copy and distribute the Program (or a work based on it,
6464 under Section 2) in object code or executable form under the terms of
6465 Sections 1 and 2 above provided that you also do one of the following:
6467 @enumerate a
6468 @item
6469 Accompany it with the complete corresponding machine-readable
6470 source code, which must be distributed under the terms of Sections
6471 1 and 2 above on a medium customarily used for software interchange; or,
6473 @item
6474 Accompany it with a written offer, valid for at least three
6475 years, to give any third party, for a charge no more than your
6476 cost of physically performing source distribution, a complete
6477 machine-readable copy of the corresponding source code, to be
6478 distributed under the terms of Sections 1 and 2 above on a medium
6479 customarily used for software interchange; or,
6481 @item
6482 Accompany it with the information you received as to the offer
6483 to distribute corresponding source code.  (This alternative is
6484 allowed only for noncommercial distribution and only if you
6485 received the program in object code or executable form with such
6486 an offer, in accord with Subsection b above.)
6487 @end enumerate
6489 The source code for a work means the preferred form of the work for
6490 making modifications to it.  For an executable work, complete source
6491 code means all the source code for all modules it contains, plus any
6492 associated interface definition files, plus the scripts used to
6493 control compilation and installation of the executable.  However, as a
6494 special exception, the source code distributed need not include
6495 anything that is normally distributed (in either source or binary
6496 form) with the major components (compiler, kernel, and so on) of the
6497 operating system on which the executable runs, unless that component
6498 itself accompanies the executable.
6500 If distribution of executable or object code is made by offering
6501 access to copy from a designated place, then offering equivalent
6502 access to copy the source code from the same place counts as
6503 distribution of the source code, even though third parties are not
6504 compelled to copy the source along with the object code.
6506 @item
6507 You may not copy, modify, sublicense, or distribute the Program
6508 except as expressly provided under this License.  Any attempt
6509 otherwise to copy, modify, sublicense or distribute the Program is
6510 void, and will automatically terminate your rights under this License.
6511 However, parties who have received copies, or rights, from you under
6512 this License will not have their licenses terminated so long as such
6513 parties remain in full compliance.
6515 @item
6516 You are not required to accept this License, since you have not
6517 signed it.  However, nothing else grants you permission to modify or
6518 distribute the Program or its derivative works.  These actions are
6519 prohibited by law if you do not accept this License.  Therefore, by
6520 modifying or distributing the Program (or any work based on the
6521 Program), you indicate your acceptance of this License to do so, and
6522 all its terms and conditions for copying, distributing or modifying
6523 the Program or works based on it.
6525 @item
6526 Each time you redistribute the Program (or any work based on the
6527 Program), the recipient automatically receives a license from the
6528 original licensor to copy, distribute or modify the Program subject to
6529 these terms and conditions.  You may not impose any further
6530 restrictions on the recipients' exercise of the rights granted herein.
6531 You are not responsible for enforcing compliance by third parties to
6532 this License.
6534 @item
6535 If, as a consequence of a court judgment or allegation of patent
6536 infringement or for any other reason (not limited to patent issues),
6537 conditions are imposed on you (whether by court order, agreement or
6538 otherwise) that contradict the conditions of this License, they do not
6539 excuse you from the conditions of this License.  If you cannot
6540 distribute so as to satisfy simultaneously your obligations under this
6541 License and any other pertinent obligations, then as a consequence you
6542 may not distribute the Program at all.  For example, if a patent
6543 license would not permit royalty-free redistribution of the Program by
6544 all those who receive copies directly or indirectly through you, then
6545 the only way you could satisfy both it and this License would be to
6546 refrain entirely from distribution of the Program.
6548 If any portion of this section is held invalid or unenforceable under
6549 any particular circumstance, the balance of the section is intended to
6550 apply and the section as a whole is intended to apply in other
6551 circumstances.
6553 It is not the purpose of this section to induce you to infringe any
6554 patents or other property right claims or to contest validity of any
6555 such claims; this section has the sole purpose of protecting the
6556 integrity of the free software distribution system, which is
6557 implemented by public license practices.  Many people have made
6558 generous contributions to the wide range of software distributed
6559 through that system in reliance on consistent application of that
6560 system; it is up to the author/donor to decide if he or she is willing
6561 to distribute software through any other system and a licensee cannot
6562 impose that choice.
6564 This section is intended to make thoroughly clear what is believed to
6565 be a consequence of the rest of this License.
6567 @item
6568 If the distribution and/or use of the Program is restricted in
6569 certain countries either by patents or by copyrighted interfaces, the
6570 original copyright holder who places the Program under this License
6571 may add an explicit geographical distribution limitation excluding
6572 those countries, so that distribution is permitted only in or among
6573 countries not thus excluded.  In such case, this License incorporates
6574 the limitation as if written in the body of this License.
6576 @item
6577 The Free Software Foundation may publish revised and/or new versions
6578 of the General Public License from time to time.  Such new versions will
6579 be similar in spirit to the present version, but may differ in detail to
6580 address new problems or concerns.
6582 Each version is given a distinguishing version number.  If the Program
6583 specifies a version number of this License which applies to it and ``any
6584 later version'', you have the option of following the terms and conditions
6585 either of that version or of any later version published by the Free
6586 Software Foundation.  If the Program does not specify a version number of
6587 this License, you may choose any version ever published by the Free Software
6588 Foundation.
6590 @item
6591 If you wish to incorporate parts of the Program into other free
6592 programs whose distribution conditions are different, write to the author
6593 to ask for permission.  For software which is copyrighted by the Free
6594 Software Foundation, write to the Free Software Foundation; we sometimes
6595 make exceptions for this.  Our decision will be guided by the two goals
6596 of preserving the free status of all derivatives of our free software and
6597 of promoting the sharing and reuse of software generally.
6599 @iftex
6600 @heading NO WARRANTY
6601 @end iftex
6602 @ifinfo
6603 @center NO WARRANTY
6604 @end ifinfo
6606 @item
6607 BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
6608 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
6609 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
6610 PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
6611 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
6612 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
6613 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
6614 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
6615 REPAIR OR CORRECTION.
6617 @item
6618 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
6619 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
6620 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
6621 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
6622 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
6623 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
6624 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
6625 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
6626 POSSIBILITY OF SUCH DAMAGES.
6627 @end enumerate
6629 @iftex
6630 @heading END OF TERMS AND CONDITIONS
6631 @end iftex
6632 @ifinfo
6633 @center END OF TERMS AND CONDITIONS
6634 @end ifinfo
6636 @page
6637 @appendixsec Appendix: How to Apply These Terms to Your New Programs
6639   If you develop a new program, and you want it to be of the greatest
6640 possible use to the public, the best way to achieve this is to make it
6641 free software which everyone can redistribute and change under these terms.
6643   To do so, attach the following notices to the program.  It is safest
6644 to attach them to the start of each source file to most effectively
6645 convey the exclusion of warranty; and each file should have at least
6646 the ``copyright'' line and a pointer to where the full notice is found.
6648 @smallexample
6649 @var{one line to give the program's name and a brief idea of what it does.}
6650 Copyright (C) @var{yyyy}  @var{name of author}
6652 This program is free software; you can redistribute it and/or modify
6653 it under the terms of the GNU General Public License as published by
6654 the Free Software Foundation; either version 2 of the License, or
6655 (at your option) any later version.
6657 This program is distributed in the hope that it will be useful,
6658 but WITHOUT ANY WARRANTY; without even the implied warranty of
6659 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6660 GNU General Public License for more details.
6662 You should have received a copy of the GNU General Public License
6663 along with this program; if not, write to the Free Software
6664 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
6665 @end smallexample
6667 Also add information on how to contact you by electronic and paper mail.
6669 If the program is interactive, make it output a short notice like this
6670 when it starts in an interactive mode:
6672 @smallexample
6673 Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
6674 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
6675 This is free software, and you are welcome to redistribute it
6676 under certain conditions; type `show c' for details.
6677 @end smallexample
6679 The hypothetical commands @samp{show w} and @samp{show c} should show
6680 the appropriate parts of the General Public License.  Of course, the
6681 commands you use may be called something other than @samp{show w} and
6682 @samp{show c}; they could even be mouse-clicks or menu items---whatever
6683 suits your program.
6685 You should also get your employer (if you work as a programmer) or your
6686 school, if any, to sign a ``copyright disclaimer'' for the program, if
6687 necessary.  Here is a sample; alter the names:
6689 @example
6690 Yoyodyne, Inc., hereby disclaims all copyright interest in the program
6691 `Gnomovision' (which makes passes at compilers) written by James Hacker.
6693 @var{signature of Ty Coon}, 1 April 1989
6694 Ty Coon, President of Vice
6695 @end example
6697 This General Public License does not permit incorporating your program into
6698 proprietary programs.  If your program is a subroutine library, you may
6699 consider it more useful to permit linking proprietary applications with the
6700 library.  If this is what you want to do, use the GNU Library General
6701 Public License instead of this License.
6703 @node Concept Index,  , GNU General Public License, Top
6704 @comment  node-name,  next,  previous,  up
6705 @unnumbered Index
6707 @printindex cp
6709 @bye