Update planner-tasks-overview
[planner-el.git] / planner-el.texi
blobce757819b5d9e0b34e1c75a14d45ded05c7ca33e
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.41.
17 Copyright @copyright{} 2001, 2004, 2005, 2006, 2007 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::            planner-lisp.el
106 * Publishing::                  planner-publish.el
107 * Experimental Functions::      planner-experimental.el
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::                    planner-id.el
120 * Cyclic Tasks::                planner-cyclic.el
121 * Task Detail::                 
122 * Deadlines::                   planner-deadline.el
124 Organizing Your Tasks
126 * Multiple Projects::           
127 * Viewing Tasks::               
128 * Modifying Tasks::             
129 * Carrying Over Unfinished Tasks::  
130 * Task Numbering::              
131 * Task Ranks::                  planner-rank.el
132 * Grouping Tasks::              planner-trunk.el
134 Task Reports and Overviews
136 * Accomplishments::             planner-accomplishments.el
137 * Status Reports::              planner-report.el
138 * Task Overviews::              planner-tasks-overview.el
139 * <tasks> tag::                 
140 * planner-registry::            Keep track of annotations
141 * planner-zoom::                View and navigate tasks by time period
143 More about Notes
145 * Using Allout Mode::           Quickly navigating your notes
146 * <notes>::                     Note headlines
147 * <past-notes>::                Index of past notes
148 * Note Indices::                planner-notes-index.el
150 Publishing
152 * Publishing Planner pages::    planner-publish.el
153 * Publishing Calendars::        planner-calendar.el
154 * Authz Access Restriction::    planner-authz.el
155 * RSS Publication::             Sharing notes with planner-rss.el
156 * iCal Task Publication::       Sharing tasks with planner-ical.el
157 * RDF Publication::             planner-rdf.el
159 RDF Publication
161 * Publishing with planner-rdf::  
162 * planner-rdf Tags::            
163 * planner-rdf Usage Examples::  
165 Managing Your Information
167 * E-mail::                      Linking notes and tasks to messages
168 * Scheduling and Time::         Tracking appointments and where your time goes
169 * Finances::                    Display your account balances and more
170 * Contacts and Conversations::  BBDB and ERC
171 * Tracking Research and Resources::  The Web, bibliographies, and bookmarks
172 * Tracking Development::        
174 E-mail
176 * Unix mail::                   Unix mailboxes: planner-unix-mail.el
177 * Gnus::                        Gnus mail and news reader: planner-gnus.el
178 * VM::                          VM mail reader: planner-vm.el
179 * Wanderlust::                  Wanderlust mail reader: planner-wl.el
180 * MH-E::                        MH-E mail reader: planner-mhe.el
181 * Rmail::                       Rmail: planner-rmail.el
183 Scheduling and Time
185 * Diary::                       Using the Emacs diary: planner-diary.el
186 * Appointments::                Appointments in plan pages: planner-appt.el
187 * Timeclock::                   Time tracking: planner-timeclock.el
188 * schedule.el::                 Project completion: planner-schedule.el
190 Diary
192 * Planner-Diary Advanced Features::  
194 Usage
196 * Task-based Appointments::     
197 * Schedule-based Appointments::  
198 * Viewing Appointments::        
199 * Appointment Updating on Save::  
200 * Appointment and Calendar Integration::  
201 * Appointment Hooks::           
203 Finances
205 * Ledger::                      Personal finances: planner-ledger.el
207 Contacts and Conversations
209 * BBDB::                        Contacts: planner-bbdb.el
210 * Emacs Relay Chat::            Internet Relay Chat: planner-erc.el
212 Tracking Research and Resources
214 * W3m::                         Web browser: planner-w3m.el
215 * BibTeX::                      Bibliographies: planner-bibtex.el
216 * Bookmark::                    Bookmarks: planner-bookmark.el
218 Tracking Development
220 * Log Edit::                    Changelogs: planner-log-edit.el
221 * PSVN::                        svn changesets: planner-psvn.el
222 * XTLA::                        TLA changesets: planner-xtla.el
223 * Gnats::                       Gnats: The GNU bug reporting system
225 Advanced Configuration
227 * Customizing Your Day Pages::  Change your templates
228 * Variables to Customize::      Change various aspects of Planner behavior
229 * Ideas for Other Keybindings::  Add to and change the default keybindings
231 Reference Material
233 * Keeping Track of Time::       
234 * Other Interactive Functions::  
235 * Planner Keybindings::         Default keybindings for Planner
236 * Sample Configuration Files::  
238 Sample Configuration Files
240 * File Organization::           
241 * Bare-Bones Planning::         
242 * Bare-Bones Planning with Plan Pages::  
243 * Tasks on Plan Pages with Some Day Pages::  
244 * Hierarchical Tasks::          
246 @end detailmenu
247 @end menu
249 @node Preface, Introduction, Top, Top
250 @comment  node-name,  next,  previous,  up
251 @chapter Preface
253 This document describes Planner, which was written by John Wiegley and
254 is now maintained by John Sullivan (@pxref{Acknowledgements}).
256 This document is a work in progress, and your contribution will be
257 greatly appreciated. Please e-mail comments and suggestions to the
258 mailing list (@pxref{Getting Help}). In the subject line of your
259 e-mail, include the word @samp{Planner}.
261 This documentation is available in eye-pleasing formats including PDF
262 and HTML at @url{http://wjsullivan.net/static/doc/planner/}.
264 Documentation author and maintainer: John Sullivan
265 @email{john@@wjsullivan.net}
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://mwolson.org/static/doc/muse.html}.
315 Planner and Muse are intended to work with version 21 or later of Emacs
316 and XEmacs.
318 Make sure that you use the latest Muse release.  Development code might
319 prove unstable.
321 @menu
322 * Getting the Files::           
323 * Creating Your Planner::       
324 * Components::                  
325 * Advanced Installation::       
326 @end menu
328 @node Getting the Files, Creating Your Planner, Installation, Installation
329 @comment node-name,  next,  previous,  up
330 @section Getting the Files
332 Currently, there are three ways to obtain and install Planner. You can
333 install it from a source archive, Arch repository, or Debian package.
335 @menu
336 * Installing from a Source Archive::  
337 * Installing from Arch::        
338 * Installing from Debian::      
339 @end menu
341 @node Installing from a Source Archive, Installing from Arch, Getting the Files, Getting the Files
342 @comment node-name,  next,  previous,  up
343 @subsection Installing from a Source Archive
344 @cindex source code archive, installing from
346 You can install Planner from the source archive packaged and
347 distributed directly by the maintainer. This archive is provided in
348 both @file{.tar.gz} and @file{.zip} format.  If you don't know where to
349 extract these archives, create a @file{~/elisp} directory, and extract
350 them there.
352 @enumerate
353 @item
354 Download and unpack either
355 @url{http://mwolson.org/static/dist/planner-latest.tar.gz} or
356 @url{http://mwolson.org/static/dist/planner-latest.zip}.
358 @item
359 Likewise for
360 @url{http://mwolson.org/static/dist/muse-latest.tar.gz} or
361 @url{http://mwolson.org/static/dist/muse-latest.zip}.
363 @item
364 Likewise for
365 @url{http://mwolson.org/static/dist/remember-latest.tar.gz} or
366 @url{http://mwolson.org/static/dist/remember-latest.zip}.
368 @item Edit your @file{~/.emacs} (@file{_emacs} on Microsoft Windows).
370 Replace @file{/path/to} with wherever you extracted the files.
372 @example
373 ;; Add the directories to your load path
374 (add-to-list 'load-path "/path/to/muse/lisp")
375 (add-to-list 'load-path "/path/to/planner")
376 (add-to-list 'load-path "/path/to/remember")
378 ;; Load planner
379 (require 'planner)
380 @end example
381 @end enumerate
383 @subheading Updating Your Version
385 Download a new version and extract it over the old directory. Don't
386 forget to delete any byte-compiled files (@file{*.elc}) in the
387 directories (which can be accomplished by running ``make clean'') so
388 that the new code will be used.
390 @node Installing from Arch, Installing from Debian, Installing from a Source Archive, Getting the Files
391 @comment node-name,  next,  previous,  up
392 @subsection Installing from Arch
393 @cindex Arch repositories
394 @cindex Arch, installing from
396 Arch allows you to retrieve previous versions and select specific
397 features and bugfixes. Debian users can install Arch with @kbd{apt-get
398 install tla}. Users of other distributions should see
399 @url{http://regexps.srparish.net/www/}.
401 To get started with Planner using Arch, you'll need to run some initial
402 commands to register your local copy of the archive and retrieve the
403 files.
405 Note that Muse is now developed with git, so you will need to install
406 that as well.  For Debian, that involves doing @kbd{apt-get install
407 git-core}.
409 @example
410 # Register the Planner archive
411 tla register-archive -f http://arch.gna.org/planner-el/archive-2006
413 # Register the Remember archive
414 tla register-archive -f http://arch.gna.org/remember-el/archive
416 # Download Muse
417 git clone git://repo.or.cz/muse-el.git muse
418 # If that didn't work (due to a restrictive firewall), then try the
419 # following instead:
420 # git clone http://repo.or.cz/r/muse-el.git muse
422 # Download planner module into the planner/ subdirectory
423 tla get mwolson@@gnu.org--2006-planner-el/planner-el--devel--0 planner
425 # Get Remember
426 tla get remember-el@@arch.gna.org/remember--main--0 remember
428 @end example
430 Then add the following lines to your @code{~/.emacs}:
432 @example
433 ;; Add the directories to your load path
434 (add-to-list 'load-path "/path/to/muse/lisp")
435 (add-to-list 'load-path "/path/to/planner")
436 (add-to-list 'load-path "/path/to/remember")
438 ;; Load planner
439 (require 'planner)
440 @end example
442 You can also browse Planner's Arch repository on the web at
443 @url{http://archzoom.mwolson.org/cgi-bin/archzoom.cgi/mwolson@@gnu.org--2006-planner-el}.
445 @subheading Updating Your Version
446 @cindex Arch, updating from
448 To stay up-to-date using Arch, here are some commands that might be
449 useful.
451 To list upstream changes not in local copy:
453 @example
454 # Change to the source directory you are interested in. Example:
455 cd muse/
457 # Display the summary of changes
458 tla missing --summary
459 @end example
461 To update to the latest version:
463 @example
464 cd muse; git pull
465 cd ../planner; tla update
466 cd ../remember; tla update
467 @end example
469 Don't forget to delete any byte-compiled files (@file{*.elc}) in the
470 directories so that the new code will be used.
472 @node Installing from Debian, , Installing from Arch, Getting the Files
473 @comment node-name,  next,  previous,  up
474 @subsection Installing from Debian
475 @cindex Debian package
477 Debian packages for Planner, Muse, and Remember are available in Debian
478 proper as the @code{planner-el}, @code{muse-el}, and @code{remember-el}
479 packages, respectively.
481 If you wish to try experimental packages, add the following lines to
482 your @file{/etc/apt/sources.list}
484 @example
485 deb http://mwolson.org/debian/ ./
486 @end example
488 Then, do the following steps as root:
490 @example
491 apt-get update
492 apt-get install muse-el
493 apt-get install planner-el
494 apt-get install remember-el
495 @end example
497 If you get some warning about the key not being trusted, you can either
498 ignore it or do the following.
500 @example
501 gpg --keyserver pgpkeys.mit.edu --recv-key f3a8d319
502 gpg -a --export f3a8d319 | sudo apt-key add -
503 @end example
505 @subheading Updating Your Version
506 @cindex Debian package, updating
508 If you installed Planner from Debian, do @kbd{apt-get update; apt-get
509 upgrade} to upgrade all packages that can be upgraded, or @kbd{apt-get
510 update; apt-get install planner-el} to upgrade just planner-el.
512 @node Creating Your Planner, Components, Getting the Files, Installation
513 @section Creating Your Planner
515 Now that you have installed the files for Planner and Muse, you need
516 to set some options to create your first planner.
518 Muse thinks in terms of projects. Each project consists of a group of
519 documents and certain information associated with these
520 documents. Planner is organized as a project within Muse. So, you need
521 to tell Muse a bit about it.
523 Add something like the following code to your @file{.emacs} file.
525 First, give your new Planner project a name. In this case, we use the
526 name, ``WikiPlanner''.
528 @example
529 (setq planner-project "WikiPlanner")
530 @end example
532 Next, add an entry for your project to Muse's master list of
533 projects. Don't forget to use your own name here in place of
534 ``WikiPlanner'' if you have chosen something different.
536 @example
537 (setq muse-project-alist
538       '(("WikiPlanner"
539          ("~/Plans"           ;; where your Planner pages are located
540           :default "TaskPool" ;; use value of `planner-default-page'
541           :major-mode planner-mode
542           :visit-link planner-visit-link)
544          ;; This next part is for specifying where Planner pages
545          ;; should be published and what Muse publishing style to
546          ;; use.  In this example, we will use the XHTML publishing
547          ;; style.
549          (:base "planner-xhtml"
550                 ;; where files are published to
551                 ;; (the value of `planner-publishing-directory', if
552                 ;;  you have a configuration for an older version
553                 ;;  of Planner)
554                 :path "~/public_html/Plans"))))
555 @end example
557 This code should work fine as-is for you as long as the directories
558 you see exist, and as long as you have no other Muse projects besides
559 your planner.
561 The first directory (@file{~/Plans}) is the directory where the
562 source files for your planner will reside. This is the directory where
563 you will actually visit files and edit them.  These files must have a
564 ``.muse'' extension.
566 The second directory (@file{~/public_html/Plans}) is the directory
567 where your planner files will be published by Muse as XHTML
568 (@pxref{Publishing}).
570 After you have added this code, make sure to either evaluate it or
571 restart Emacs.
573 @node Components, Advanced Installation, Creating Your Planner, Installation
574 @comment node-name,  next,  previous,  up
575 @section Components
577 Now that you have the archive, let's look at what's in it.
579 There should be three directories, named @file{planner}, @file{muse} and
580 @file{remember}.
582 In the @file{planner/} directory, you'll see many files with names like
583 @file{planner-gnus.el}. These are extra modules and extensions for
584 Planner, which you can use to tailor Planner to fit your desired
585 planning and information management habits.
587 In the @file{muse/lisp} directory, you'll see many files with names like
588 @file{muse-blosxom.el}. As in @file{planner/}, these are optional
589 modules and extensions.
591 A minimal working installation includes just @file{planner/planner.el}.
593 You need @file{planner.el} because it provides the core functions for
594 handling tasks, notes, and page navigation. You need @file{Emacs Muse}
595 because it provides the functions used to display your pages (both in an
596 emacs buffer and as HTML), and for connecting them to each other. More
597 specifically, it enables you to have hyperlinks and formatting in your
598 emacs buffers even though the actual files you are working with are
599 saved in plain text. These abilities are used in Planner to format your
600 planner pages the way you like, to create links from your tasks and
601 notes to the materials and projects they refer to, and to optionally
602 ``publish'' your pages in different formats, including HTML.
604 In the @file{remember/} directory are files related to
605 RememberMode. RememberMode does not depend on Planner or Muse, but works
606 best with Planner installed. It is not required in order to use Planner,
607 but it is used by many Planner users to record notes and information to
608 their planner pages.
610 If you are curious, you can open each file in these directories and read
611 the comments at the top, to get an idea of what each extension is used
612 for. They are also all detailed later in this manual.
614 @node Advanced Installation,  , Components, Installation
615 @comment  node-name,  next,  previous,  up
616 @section Advanced Installation
618 Once you decide you want to keep Planner around for a while, there
619 are two additional steps you can take to make using it easier and more
620 efficient. These steps are optional.
622 @itemize
623 @cindex installing the info file
624 @cindex @file{planner-el.texi}, installing
625 @cindex @file{planner-el.info}, installing
626 @item You can make this document, the Planner info file, appear in
627 the index of info files you see when you type @command{M-x info} or
628 @kbd{C-h i} in Emacs. The instructions for doing this vary depending
629 on whether you have permission to edit certain files on your
630 system. Follow the instructions in @ref{Installing an Info File, ,
631 ,texinfo, Texinfo}, using something like:
633 @example
634 * Planner: (path/to/planner/Planner). Organizer/day planner
635 for Emacs.
636 @end example
638 for the new entry in the info @file{dir} file.
640 @cindex byte compiling
641 @item You can byte-compile @file{planner.el}, @file{Muse},
642 @file{remember.el}, or any of the optional modules you frequently use,
643 in order to improve the speed of their execution. Basically, all you
644 need to do is change to the directory of each project in
645 @file{scripts/planner-build.el} and run @command{make} from the command
646 line. To read more detail about byte compilation, see
647 @ref{Byte Compilation, , ,elisp, Emacs Lisp Reference Manual}.
649 @end itemize
651 @node Overview, Getting Started, Installation, Top
652 @comment node-name,  next,  previous,  up
653 @chapter Overview
655 Planner is a plain-text hyperlinked personal information manager
656 for Emacs that helps you keep track of tasks, notes, and other
657 information. People use Planner to support different ways of planning
658 one's day, from Franklin-Covey and David Allen's Getting Things Done
659 to home-brew hacks. Planner is even used to manage information not
660 normally handled by a personal information manager, like bugtracking,
661 time tracking, and team data. If you start by using Planner as a basic
662 TODO and notes manager, you might find other ways it can help you
663 improve your process.
665 You can use Planner to keep track of your tasks, schedule, notes,
666 and other information you want to store in hyperlinkable text files.
667 You can get the most benefit out of a personal information manager if
668 you use it everyday. Most people add @code{(plan)} to the end of their
669 @file{~/.emacs} so that Planner shows today's schedule and
670 unfinished tasks whenever Emacs starts. If you leave your Emacs
671 running for more than 24 hours, try to get into the habit of running
672 @code{plan} at least once a day.
674 Because your time is important, Planner tries to minimize
675 distractions, making it easier for you to jot down tasks and notes
676 without being distracted from your work. People often make tasks based
677 on the current buffer, so Planner tries to create hyperlinks to
678 whatever you're looking at so that you can jump back to it easily. The
679 @ref{Getting Started} tutorial will show you how to set that up for
680 both tasks and notes.
682 The customizability of Planner means you can make your personal
683 information manager truly personal. Planner strives to be as flexible
684 as possible, and we would love to adapt Planner to fit your needs.
685 Browse through our mailing list (@pxref{Getting Help}) to
686 find out how other people are using Planner, and post your feature
687 requests and bug reports there!
689 Planner is just a tool. It does not dictate a particular way of
690 planning, although it supports some ways better than it supports
691 others. If you want to take some time thinking about planning, read
692 the following reflections for inspiration and ideas. On the other
693 hand, if you want to hit the ground running, see @ref{Getting
694 Started}. If you already have a specific way of planning in mind,
695 check out @ref{Sample Configuration Files}.
697 @menu
698 * Planning based on the Franklin-Covey Approach::  
699 * Why Use Planner::             
700 @end menu
702 @node Planning based on the Franklin-Covey Approach, Why Use Planner, Overview, Overview
703 @comment  node-name,  next,  previous,  up
704 @section Planning Based on the Franklin-Covey Approach
705 @cindex philosophy of planning
707 (This is an edited and updated version of an essay originally by John
708 Wiegley. Read it if you want to get some insights into one way of
709 planning. You can skip this if you want to go straight to planning your
710 day.)
712 What is planning?  It can be a nebulous thing to define.  In its
713 essence, however, it is very simple: it's how we achieve our dreams.
715 Our days are filled with time, and hence with actions, whether they
716 be of a mental or physical sort.  But there are two kinds of
717 action: reactive and creative.  Reactive action is a response to
718 the environment, a reaction to stimulus.  Had we enough instincts
719 to ensure survival, we could live according to this kind of action
720 alone.  It is a mode of behavior we share with every living
721 species.
723 The opposite to reactivity is creativity, when we decide upon a
724 course of action that is a wholly a product of personal choice.  We
725 then make decisions as to the steps needed to make this wish a
726 reality.  This is planning.  Planning is essentially a creative
727 endeavor at every step.
729 First, create the idea, what you want to achieve.  Very short-term
730 ideas do not need much more than thinking about how to do it.  But
731 long-term ideas require planning, since the mind cannot contain all
732 of the details.
734 Second, decide how the idea maps into the circumstances you find
735 yourself in.  Some environments will assist your plan, others
736 hinder it.  But step by step, identify every barrier to the
737 realization of your idea, and devise a countermeasure to overcome
738 it.  Once you've mapped things out from beginning to end,
739 accounting for unknowables as best you can, you now have your plan.
741 Third is to break the stages of the plan into parts that are not
742 overwhelming in their complexity.  It is at during this phase that
743 a plan is turned into task items, each to be accomplished within
744 the span of one day's time.  If a task requires several days, break
745 it up further.  The smaller it is, the less your mind will recoil
746 from attempting it.
748 Fourth is to monitor your progress, identifying problems and
749 correcting for them as you go.  Some plans start out unachievable,
750 and remain that way indefinitely, due to a simple lack of
751 observation.  If nothing is working for you, change it.  Otherwise,
752 your plan is merely a well-crafted wish.
754 Fifth is just to do the work, and be patient.  All good plans take a
755 great deal of time, and *cannot* happen immediately.  The groundwork
756 must be laid for each step, or else it will rest on an insecure
757 foundation.  If you follow your plan doggedly, applying some time to
758 it each day or week, it @emph{will} happen.  Remember the story of the
759 tortoise and the hare.  I've even written a short essay on the
760 necessity of gradual accomplishment, which can be found at
761 @url{http://emacswiki.org/johnw/essays/node2.html}.
763 How can this software help?  Computers are ideal for manipulating
764 information, since they allow you to change things without erasing
765 or rewriting.  And since all plans change quite a bit during their
766 implementation, a planning program can be very helpful.
768 Start by installing Planner and Muse (@pxref{Installation}).
770 Now, conceive your idea.  I can't believe there's nothing you want
771 from life.  More peace, time to enjoy the world, an end to war?
772 Everyone wants something.  Search deeply, and you will find
773 countless unhoped wishes lurking therein.  Choose one for now, and
774 think on it for a while.
776 Then open a file (using @kbd{C-x C-f}) within the directory you named in
777 your @code{muse-project-alist}. Make sure the file has a @file{.muse}
778 extension so that Emacs will automatically recognize it as a planner
779 file. Name the file after your plan, such as @file{BetterHealth.muse}.
781 Choose an idea you really want to accomplish.  Struggle to
782 differentiate between the things you want because others want them,
783 and the things you want for yourself.  It takes quite an effort, and
784 may require a long time before you notice the difference.  Many people
785 want to be more healthy to be more attractive, which is an externally
786 driven goal.  Unless @emph{you} really want to accomplish what you
787 envision, the odds are you will fail.  Only our own wishes and dreams
788 possess enough personal energy to see themselves to fruition.  What
789 happens to many of us is simply that we never become conscious of
790 these dreams: what we love, what we desire most.  When I talk to
791 friends, so much of what I hear is things they want because they feel
792 they should want them.  There's just not enough energy there to pursue
793 a good plan, because nearly all of it is negative energy.
795 Do you know what you really want?  Don't worry, many people don't.
796 It's not a question anyone really wants us to pursue, because often
797 we don't want what others do; it doesn't contribute to the social
798 welfare, and all that nonsense.  Somehow we always forget that
799 what's good for the social welfare now, was someone else's crazy
800 dream a hundred years ago.  The human aversion to fundamental
801 change is always one's greatest enemy, so don't waste any time
802 getting bitter about it.
804 For the sake of argument I assume you really do want to be
805 healthier, because you've fallen in love with the ideal of purity,
806 or you understand the connection between your physical self and the
807 world around you, and how this can open up your spirit to desiring
808 more.  I assume.  :)
810 So you're in a Wiki file called @file{BetterHealth}.  Start typing.
811 Type anything related to your idea: what you think about it, your
812 ideas on it, @emph{and especially what the end will look like}.  If
813 you can't visualize the end, you can't plan, since planning is about
814 drawing a line between now and then.
816 When you've typed enough to gain a vision of your goal, start
817 drafting what the possible intermediate steps might be.  Then stop,
818 get up, walk around, enjoy life, and come back to it.  Taking a
819 long time at the beginning is not a bad idea at all, as long as
820 it's not forever.
822 As you chew on your idea, it will begin to become more and more
823 concrete.  You'll have ideas about the smallest pieces, and ideas
824 about the biggest pieces.  Keep going until it starts to take shape
825 before you, and you can see yourself in your mind's eye moving from
826 the present into the future.  Write down this progression, and the
827 sorts of things you might encounter along the way.
829 As you continue, you'll naturally discover discrete phases, or
830 ``milestones'' as managers love to call them.  These are very
831 important, because they let you know you're making progress.  I
832 recommend having a big party with friends every time you achieve a
833 milestone.  A typical plan might have between three and ten.
835 Between the milestones are the bigger pieces of your plan. You might
836 find it convenient to name these pieces using MixedCase words. Try
837 adding these lines to your @file{.emacs} or @file{_emacs} file.
839 @example
840 (require 'muse-wiki)
841 (setq muse-wiki-allow-nonexistent-wikiword t)
842 @end example
844 You'll notice that Emacs colors and underlines them for you. Like,
845 FindGoodGym. Hit return on this highlighted word, and you'll find
846 yourself in another, blank file. In this file, start drafting your
847 sub-plan, just as you did with the larger plan. You should find it
848 easier now, since the scope is smaller.
850 As you break down further, you'll notice simple little things that
851 need to get done.  These are your tasks.  Every plan is a
852 succession of tasks.  The difference from reactivity is that each
853 task is part of the larger plan. This is what it means to be
854 systematic: that everything you do helps further your plan.  If you
855 have tasks in your day that contribute to no plan, they are
856 reactive.  Of course, life is full of these, but don't let them
857 take up more than 20% of your day.  If you allow yourself to be
858 dominated by reactive tasks, you'll regret it at the end of your
859 life.  I don't know this personally, but I do know that striving
860 for one's dreams -- and seeing them come to fruition -- is the
861 greatest joy a man can possess.  It is the essence of freedom, of
862 living, of creation.  Reactivity is the opposite of this, and
863 serves only to drain our energy and slacken our spirits.
865 Now that you've thought of a simple task, type @kbd{C-c C-t}. This
866 will ask for a brief description of the task, and when you plan to do
867 it. If you hit @key{RETURN} at the question @samp{When}, it assumes
868 you mean today. It will also pop up a three-month calendar at this
869 question, so you can see where your free days are. Make sure you set
870 the variable @code{mark-diary-entries-in-calendar} to @samp{t} in your
871 @file{.emacs} (or @file{_emacs}) file. This way, you can see which
872 days your appointments fall on. (Read about the Emacs Calendar and
873 Diary in @ref{Calendar/Diary, , , Emacs, GNU Emacs Manual}.)
875 @example
876 (setq mark-diary-entries-in-calendar t)
877 @end example
879 Once your task is in there, go back to your plan and keep
880 generating more tasks.  Generate them all!  Fully describe---as
881 tasks---everything necessary to bring your sub-plan to completion.
882 Don't create tasks for the other sub-plans.  You may have good idea
883 of what they'll look like, but don't bother rendering them into
884 tasks just yet.  Things will change too much between now and then,
885 for that to be a good use of your time.
887 Is your sub-plan now rendered into all of the tasks necessary to
888 reach your first milestone?  Great!  That is the purpose of
889 planner.el.  The rest is really up to you.  If you find that you
890 keep putting things off, and never do them, that's the surest sign
891 you're planning for someone else's dream, and not your own.
893 Here are some of the things planner.el can do, to help you manage
894 and track your tasks:
896 At the beginning of every day, type @kbd{M-x plan}.  This will jump
897 you to the top of the most recent task list before today.  If you
898 skipped a bunch of days, you'll have to open up those files on your
899 own.
901 Probably some of the tasks that day won't be finished -- that's OK.
902 Learning to properly estimate time is a magical, mystical art that few
903 have mastered.  Put your cursor on those undone tasks, and type
904 @kbd{C-c C-c}.  This will move them into today's task page.  You can
905 jump to today's task page at any time by typing @kbd{C-c C-n} (from a
906 Wiki or planning page).  I heartily recommend binding @kbd{C-c n}, to
907 jump you to this page from anywhere:
909 @example
910 (define-key mode-specific-map [?n] 'planner-goto-today)
911 @end example
913 As you look at your task sheet each day, the first thing to do is to
914 ``clock in'' to one of them. This isn't necessary, and is only helpful
915 if you're around your computer a lot. But by typing @kbd{C-c C-i}
916 (assuming you have @file{timeclock.el} on your load-path), it will log
917 the time you spend working on your sub-plan (@pxref{Time Intervals, , ,
918 Emacs, GNU Emacs Manual}). This is helpful for viewing your progress.
919 Type @kbd{C-c C-o} to clock out.
921 @kbd{C-M-p} and @kbd{C-M-n} will move a task up and down in priority.
922 Priority is represented by a letter A through C.  'A' tasks mean they
923 must be done that day, or else your plan is compromised and you will
924 have to replan.  'B' means they should be done that day, to further the
925 plan, otherwise things will be delayed.  'C' means you can put off the
926 task if you need to, although ultimately it will have to be done.
928 For reactive tasks, the letters mean something different: 'A' means
929 you must do it today, or somebody will roast your chestnuts over an
930 open fire.  'B' means you should do it today, or else someone will
931 be practicing patience at the day's end.  'C' means no one will
932 notice if you don't do it.
934 Again, reactive tasks are ENEMIES OF PLANNING.  Really, until you
935 see them that way, circumstances will push you around and steal
936 your life away.  We have only so many years to use, and everyone is
937 greedy to take them.  It's insidious, almost invisible.  A healthy
938 dislike of reactivity will do wonders for organizing your affairs
939 according to their true priority.
941 The last word that needs to be said concerns ``roles''.  Every person
942 stands in several positions in his life: husband, employee, manager,
943 etc.  These roles will tend to generate tasks not associated with any
944 immediate plan, but necessary to maintain the health and functioning
945 of the role.  My suggestion is to keep this the smallest possible
946 number, and fulfill those that remain well.  How you decide to
947 apportion your time between pursuing grand designs, and fostering deep
948 relationships, is a personal matter.  If you choose well, each will
949 feed the other.
951 I mention this to point that reactivity is something not
952 exclusively associated with tasks that have no master plan, because
953 being a father, for example, is something that rarely proceeds
954 according to orderly plans.  But the role of father itself is its
955 own plan, whose goal is ``to be the best one can'', and whose
956 component tasks are spending time on whatever comes up.  It is, in
957 a sense, an implicit plan.  But reactive tasks follow no plan at
958 all; they are parasites of time that suck the spirit away, whereas
959 properly chose roles actually help fulfill one's own inner needs.
960 At least, this is what I believe.
962 @defun plan force-days
963 Start your planning for the day, beginning with the last day's tasks.
965 If @code{planner-carry-tasks-forward} is non-nil, find the most recent
966 daily page with unfinished tasks and reschedule those tasks to
967 the current day.  If @var{force} is non-nil, examine all past daily
968 pages for unfinished tasks.
970 If @code{planner-carry-tasks-forward} is nil, visit the most recent
971 daily page.  If a daily page for today exists, visit that instead.
973 If @var{force-days} is a positive integer, scan that number of days.
974 If @var{force-days} is @samp{t}, scan all days.
976 @end defun
978 @node Why Use Planner,  , Planning based on the Franklin-Covey Approach, Overview
979 @comment  node-name,  next,  previous,  up
980 @section Why Use Planner?
981 @cindex Planner, why use
983 You can skip this essay if you just want to get started, or read it
984 for some insights into why the previous maintainer is crazy about it.
986 Why I Use Planner, by Sacha Chua
988 I thought about why I liked Planner. Planner as a TODO manager
989 isn't particularly special. Although I can assign tasks to categories
990 and see a breakdown of what projects are taking up my time, Evolution
991 and Microsoft Outlook provide more powerful task support. In other
992 task managers, you can e-mail tasks, assign multiple categories and
993 fill in all sorts of metadata. You can even synchronize your tasks
994 with devices like a phone or PDA. So why use Planner?
996 I realized that integration into my way of life and automatic context
997 clues are what really make planner tasks worth it for me. I don't have
998 to switch to another application to create a task. I can just hit a
999 keyboard shortcut. Planner uses a minibuffer to get the task
1000 description. My windows are not rearranged in any way, and I can look
1001 at the data that's relevant to a task. Not only that, tasks
1002 automatically pick up context clues, like whom I'm talking to on IRC
1003 or the file I'm editing at the moment. This cuts down on the explicit
1004 context I need to include and makes it easier for me to bring up the
1005 task again.
1007 As a scheduler, Planner is also not particularly distinguished.
1008 Sure, it can display my @file{~/diary}, but for that matter so can
1009 @kbd{M-x diary}. Evolution and Outlook can give me a more graphical
1010 view of my time, sync with my PDA, and coordinate my schedule with
1011 other people. Those applications support detailed schedule entries
1012 with powerful cyclic options. On the other hand, Planner gives me
1013 a personal, plain text view and (at least the way I use it) requires
1014 me to edit a separate file to add new appointments. (I've defined a
1015 few shortcut keys to deal with this.) However, it does have one
1016 advantage---my schedule is always loaded. I used to use Outlook on
1017 Windows, but having my schedule in a separate application meant that I
1018 actually looked at it very rarely, as I had turned off reminders
1019 because they got annoying.
1021 Planner's notes, however, are what really convinced me. I can hit
1022 a keyboard shortcut from anywhere and type my notes into a buffer
1023 which automatically keeps context information. After typing the note,
1024 I can then categorize it. I think that the critical thing here is that
1025 interruptions---fleeting thoughts---don't break my flow. I can just
1026 pop up a remember buffer, stow that thought away somewhere, and go
1027 back to it whenever I want. In contrast, creating a note in Outlook
1028 means switching out of my application, making a couple of keystrokes,
1029 typing the note in, and then switching back. The context switches make
1030 it hard to keep track of where I am and what I'm supposed to remember.
1031 Not only that, I need to enter context by hand. Even though I can
1032 color my notes and reorganize them in Outlook, I find the context
1033 switch too expensive. I used to keep notes in other knowledge
1034 management tools as well. Some applications allowed me to
1035 drag-and-drop links into the current note, and that was cool. But that
1036 required a manual action, and those applications didn't feel
1037 integrated into my way of working. (Note: You'll need remember.el for
1038 this.)
1040 I guess that's why I like Planner. Unlike other organizers which
1041 don't know anything about the applications I use, Planner tries
1042 its best to integrate into the way I work, and it's easy to extend.
1043 Fortunately I do almost all my work in Emacs, so I can think of my
1044 organizer as integrated into my e-mail client, Internet Relay Chat
1045 client, web browser, file editor and even games. It automatically
1046 picks up context clues from these applications and allows me to easily
1047 jump back to relevant files. It doesn't distract me. It allows me to
1048 key in data and then it gets out of my way.
1050 (That said, it's perfectly okay to use Planner even if you don't live
1051 in Emacs.)
1053 The processing that happens in the background is a bonus, and
1054 publishing my task list and notes online has greatly helped me. It
1055 gives other people a way to see what I'm working on and what I've
1056 planned for the future. Occasionally people write in with additional
1057 resources and helpful tips. (Again, this is purely optional. Many
1058 people don't publish their planner pages. Other people use really
1059 fine-grained access control.)
1061 I think the greatest feature of Planner, though, is its user
1062 community. Because Planner can be easily modified, we can experiment
1063 with a lot of new ideas quickly, and we can tailor Planner to fit our
1064 needs. I love checking my @samp{planner-el-discuss} mail and finding
1065 out how people have tweaked Planner or would like to tweak Planner,
1066 and I've learned a lot by exchanging reflections on organizing one's
1067 life.
1069 I really wasn't an organization freak before I started using Planner.
1070 I often forgot to do my homework or answer important mail. I still
1071 procrastinate now, but at least it's all being kept track of
1072 somewhere! I also really like how Planner lets me to gradually improve
1073 how I'm doing things, and I feel I've come a long way.
1075 Please try it out! We'd love to hear how Planner can become
1076 @emph{your} personal information manager.
1078 @node Getting Started, More about Planner, Overview, Top
1079 @comment  node-name,  next,  previous,  up
1080 @chapter Getting Started
1082 At the end of this tutorial, you will be able to use Planner and
1083 related modules to keep track of your tasks, schedules and notes, all
1084 within the convenience of Emacs.
1086 There are two kinds of pages in a Planner wiki. Day pages show tasks,
1087 schedule, and notes for the day, while plan pages organize related tasks
1088 and notes into a single page.
1090 If you have not yet added planner to your @file{~/.emacs}, add the
1091 following lines:
1093 @example
1094 (add-to-list 'load-path "/path/to/muse/lisp")
1095 (add-to-list 'load-path "/path/to/planner")
1096 (add-to-list 'load-path "/path/to/remember")
1097 (require 'planner)
1098 @end example
1100 This will bring up the most recent day page with unfinished tasks or
1101 create a new day page if necessary. By default, planner pages are
1102 stored in @samp{~/Plans} (@code{planner-directory}).
1104 @menu
1105 * Tasks::                       
1106 * Schedule::                    
1107 * Notes::                       
1108 * Hyperlinks::                  
1109 * Example Page::                
1110 * Review::                      
1111 @end menu
1113 @node Tasks, Schedule, Getting Started, Getting Started
1114 @section Tasks
1116 Let us start by creating a task labelled
1118 @example
1119 Join http://mail.gna.org/listinfo/planner-el-discuss/
1120 @end example
1122 From anywhere (even this info buffer!), call @kbd{M-x
1123 planner-create-task-from-buffer} to create a new task. Fill in the
1124 description and choose a date by:
1126 @itemize
1127 @item typing 1 - 31 to put the task on that day of the month,
1128 @item accepting the default (today) by pressing RET,
1129 @item selecting the date with mouse-1,
1130 @item
1131 typing +n (where in is an integer) to schedule the task in n days time,
1133 @item typing nil to make an undated task.
1134 @end itemize
1136 For now, accept the default (@samp{today}) by pressing @key{RET}.
1138 You will then be prompted for a plan page. Plan pages gather related
1139 tasks and notes, giving you an overview of what you've done so far.
1140 You can accept the default TaskPool, create your own plan page, or
1141 specify nil to make a task that is not associated with a plan page.
1142 For now, accept the default (@samp{TaskPool}) by pressing RET.
1144 You have created your first task. View today's page with
1145 @kbd{M-x planner-goto-today}. You will see a line of the form
1147 @example
1148 #B  _ Join http://mail.gna.org/listinfo/planner-el-discuss/ (TaskPool)
1149 @end example
1151 If you created the task from this page, then there will be an additional
1152 annotation:
1154 @example
1155 #B  _ Join http://mail.gna.org/listinfo/planner-el-discuss/ : Tasks (TaskPool)
1156 @end example
1158 The URL, @samp{TaskPool} and @samp{Getting Started} are
1159 hyperlinks. You can use TAB and S-TAB to navigate between them and RET
1160 to follow the link.
1162 Create more tasks using @kbd{M-x planner-create-task-from-buffer}.
1163 This is bound to @kbd{C-c C-t} in @code{planner-mode} pages
1164 for your convenience. For example, create the following tasks:
1166 @itemize
1167 @item
1168 @samp{Describe my current way of working and how I would like to work},
1169 for three days from now (@samp{+3}),
1170 @item
1171 @samp{Learn how to schedule a task}, an undated task (@kbd{nil}) on the
1172 TaskPool page,
1173 @item
1174 @samp{Browse through the Planner info manual} for today (@kbd{.} or
1175 accept the defaults), and
1176 @item
1177 @samp{Add (plan) to the end of my [[~/.emacs]]} for today, but without a
1178 plan page (specify @kbd{nil} at the plan page prompt)
1179 @end itemize
1181 Tip: I bind planner-create-task-from-buffer to "F9 t" so that I can
1182 easily call it from anywhere. You can do that with this elisp fragment:
1183 @code{(global-set-key (kbd "<f9> t") 'planner-create-task-from-buffer)}
1185 Next, visit the TaskPool by:
1187 @itemize
1188 @item
1189 @key{TAB}-bing or using the cursor and typing @key{RET} to follow the
1190 link,
1191 @item @kbd{C-x C-f TaskPool RET} to use @code{find-file}, or
1192 @item @kbd{C-c C-f TaskPool RET} to use @code{muse-project-find-file}
1193 @end itemize
1195 You can see an overview of the tasks as scheduled on different days.
1196 Unlike many personal information managers that store all of your data
1197 in one file and then perform magic in order to present different
1198 views, Planner uses plain text files. The data is duplicated and kept
1199 updated by functions. This makes it simpler and easier to modify,
1200 because what you see is (almost) what you get. On the other hand,
1201 you'll need to get used to either editing both files, or using the
1202 built-in functions for editing and updating files. If you prefer not
1203 to work with linked tasks, you can configure Planner to use only plan
1204 pages or use only day pages.
1206 The TaskPool page should list the tasks you created earlier. Go to the
1207 one named Learn how to schedule a task . Type @kbd{C-c C-c}
1208 (@code{planner-copy-or-move-task}) to schedule the task. Type RET to
1209 accept the default (today). Go to the day page by following the link
1210 or calling @kbd{M-x planner-goto} (@kbd{C-c C-j C-d} or the menu bar);
1211 you will see the newly-created task there. You can also use @kbd{C-c
1212 C-c} (@kbd{planner-copy-or-move-task}) to reschedule a task to an
1213 earlier or later date.
1215 Well, that task is done. To mark the task as completed, type @kbd{C-c
1216 C-x} (@code{planner-task-done}). You can also edit the status manually
1217 (change _ to X) as long as you remember to call @kbd{M-x
1218 planner-update-task} to update the link page as well. Updating relies on
1219 the task description being the same, so do not edit this manually.
1221 Quick summary of commands:
1223 @itemize
1224 @item
1225 Go to today's page: @kbd{M-x plan} to carry unfinished tasks forward, or
1226 @kbd{M-x planner-goto-today} to just go to today's page.
1227 @item
1228 Create a task: @kbd{C-c C-t} (@code{planner-create-task-from-buffer}),
1229 or type a task manually (call M-x planner-update-task if the task is
1230 linked)
1231 @item
1232 Mark a task as done: @kbd{C-c C-x} (@code{planner-task-done}), or edit
1233 the task and call @kbd{M-x planner-update-task}
1234 @item Edit a task description: @kbd{M-x planner-edit-task-description}
1235 @item Reschedule a task: @kbd{C-c C-c} (@code{planner-copy-or-move-task})
1236 @item
1237 Reschedule many tasks: Mark a region and use @kbd{M-x
1238 planner-copy-or-move-region}
1239 @item
1240 Change the plan of a task: @kbd{M-x planner-replan-task}, or do
1241 @kbd{C-c C-c} (@code{planner-copy-or-move-task}) and type in a
1242 plan page rather than a date
1243 @item Delete a task: @kbd{M-x planner-delete-task}
1244 @item
1245 Reorder tasks: @key{M-p} (@code{planner-raise-task}) and @key{M-n}
1246 (@code{planner-lower-task}), or normal editing commands like kill and
1247 yank
1248 @item Change task priorities (@samp{#A} > @samp{#B} > @samp{#C}):
1249       @key{C-M-p} (@code{planner-raise-task-priority}) and
1250       @key{C-M-n} (@code{planner-lower-task-priority}),
1251       or edit the task and call @kbd{M-x planner-update-task}.
1252 @end itemize
1254 You can save your tasks with @kbd{C-x C-s} the same way you save any
1255 other file, or Emacs will prompt you to save it when you exit.
1257 @node Schedule, Notes, Tasks, Getting Started
1258 @comment  node-name,  next,  previous,  up
1259 @section Schedule
1261 This is free-form. You can put anything you want into this, or remove
1262 it from @code{planner-day-page-template} entirely. Some people use it
1263 to keep track of their plans for the day with tables like this:
1265 @example
1266 hh:mm | hh:mm | activity
1267 hh:mm | hh:mm | activity
1268 hh:mm | hh:mm | activity
1269 @end example
1271 Remember, Planner files are just plain text. You can add new sections
1272 or remove old ones, or use the suggested sections for entirely
1273 different activities.
1275 @node Notes, Hyperlinks, Schedule, Getting Started
1276 @comment  node-name,  next,  previous,  up
1277 @section Notes
1278 @cindex @file{remember.el}
1279 @cindex @file{remember-planner.el}
1280 @cindex notes
1282 By default, your Planner pages will have a Notes section. You can put
1283 anything you want in this section, or remove it from your
1284 @code{planner-day-page-template} entirely.
1286 You may be interested in @file{remember-planner.el}, part of the
1287 Remember package (see @inforef{Top, remember-el, remember-el}). You
1288 can download Remember at @uref{http://gna.org/projects/remember-el/}).
1290 @code{remember-planner.el} makes it easy to create notes from anywhere
1291 in Emacs, and it uses the same context-sensing code that Planner uses.
1292 Notes added by @code{remember-planner.el} look like this:
1294 @example
1295 .#1 Headline 00:00
1296 Body
1298 [[context hyperlink]]
1299 @end example
1301 and are outlined at the H2 level in published HTML.
1303 You can easily create context-aware notes if you include the following
1304 in your @file{~/.emacs}:
1306 @example
1307 (require 'remember-planner)
1308 (setq remember-handler-functions '(remember-planner-append))
1309 (setq remember-annotation-functions planner-annotation-functions)
1310 @end example
1312 Then @kbd{M-x remember} will open a dedicated buffer for you to write
1313 your note. If Planner recognizes your current buffer as one with
1314 context then it will include a hyperlink at the bottom of the note.
1315 The first line of the note is used as a title, so make it short and
1316 meaningful. The rest of the text will be used as the body. Try it now
1317 by creating a note, perhaps about things you'd like to remember from
1318 this tutorial.
1320 Typing @kbd{C-c C-c} after composing will prompt for a plan page to
1321 put the note on, with auto-completion. If you don't enter a page, the
1322 note will just be saved on today's page. If you do specify a plan
1323 page, the note will go on both today's page and on the specified page.
1324 Let's try specifying @samp{TaskPool} for the note.
1326 If you look at today's page, you'll find a timestamped note that links
1327 to @samp{TaskPool}. Likewise, @samp{TaskPool} contains a note that
1328 links to today's page. To change the plan page of a note, use
1329 @kbd{planner-replan-note}.
1331 If you decide to edit the note on one of these pages after it has been
1332 saved, be aware that your changes will not be automatically reflected
1333 on the linked page. To update the linked page after editing a note,
1334 use @kbd{M-x planner-update-note}.
1336 @node Hyperlinks, Example Page, Notes, Getting Started
1337 @section Hyperlinks
1338 @cindex hyperlinks
1340 Planner automatically creates context-sensitive hyperlinks for your
1341 tasks and notes when you use @code{planner-create-task-from-buffer}
1342 and @code{remember}.
1344 Blue links indicate URLs and Planner pages that already exist. Red links
1345 indicate Planner pages that have not yet been created.
1347 Middle-click or type @key{RET} on any link to view the link in the
1348 current window. Shift-middle-click or type @key{S-RET} to view the
1349 link in another window. @key{TAB} goes to the next link, while
1350 @key{S-TAB} goes to the previous one.
1352 You can pick up hyperlinks using the @code{planner-annotation-as-kill}
1353 function.
1355 @defun planner-annotation-as-kill
1356 Create a context-sensitive hyperlink for the current buffer and copy
1357 it to the kill ring. When called with a prefix argument, prompt for
1358 the link display name.
1359 @end defun
1361 You can then paste it into any Planner buffer by using @kbd{M-x yank}
1362 or the keyboard shortcut.
1364 Alternatively, you can create hyperlinks by typing them directly, using
1365 the syntax defined by Muse. Anything inside double square brackets will
1366 be treated as a link. For example, if you type @samp{[[GroceryList]]} in
1367 a Planner buffer, you will end up with a link to a page called
1368 @samp{GroceryList}. @inforef{Implicit Links, Bare URLs WikiNames and
1369 InterWiki links, muse}, for more information about Muse syntax.
1371 Hyperlinks are a powerful feature of Planner. You can use them to
1372 hyperlink to mail, news, Web pages, and even IRC connections. See the
1373 section on @ref{Managing Your Information} to find out how to enable
1374 support for various parts of Emacs. Want to add a new hyperlink
1375 scheme? Check out the source code for examples or ask on the mailing
1376 list for help.
1378 @node Example Page, Review, Hyperlinks, Getting Started
1379 @comment  node-name,  next,  previous,  up
1380 @section Example Page
1381 @cindex example page
1382 @cindex planning page, example
1384 An example planner file is given below. You'll notice that Planner
1385 does not have a well-defined user interface. Rather, it's free-form
1386 and open, allowing you to adapt it to your preferences.
1388 @example
1389 ----------------------------------------------------------------------
1390 * Tasks
1392 #B  _ Join http://mail.gna.org/listinfo/planner-el-discuss/ (TaskPool)
1393 #B  _ Browse through the Planner info manual (TaskPool)
1394 #B  _ Add (plan) to the end of my ~/.emacs
1395 #B  X Learn how to schedule a task (TaskPool)
1397 * Schedule
1399 18:00 | 19:00 | Learn how to use Planner
1401 * Notes
1403 Notes are free-form. You can put anything you want into this.
1405 .#1 This is note number one
1407 Notes on note number one!
1409 .#2 This weird ".#2" syntax is used for allout.el enumerated lists
1411 It makes using allout-mode very handy.
1413 @end example
1415 @node Review,  , Example Page, Getting Started
1416 @comment  node-name,  next,  previous,  up
1417 @section Review
1419 @itemize
1421 @item @emph{Ideas for using planner more effectively:}
1423 @itemize
1424 @item
1425 Add @code{(plan)} to the end of your @file{~/.emacs} so that you are
1426 reminded about your tasks every day.
1428 @item
1429 Bind useful functions to shortcut keys and get used to creating tasks
1430 and notes from anywhere.
1432 @item
1433 Think about how you plan your day and look for ways to improve it. Ask
1434 the mailing list (@pxref{Getting Help}) for tips.
1436 @item
1437 Browse the rest of this manual, the source code, and other resources on
1438 the Net for tidbits you can use.
1440 @item Have fun!
1441 @end itemize
1443 @item @emph{Useful functions outside planner buffers:}
1445 @itemize
1446 @item @code{planner-create-task-from-buffer}
1447 @item @code{remember}
1448 @item @code{planner-goto-today}
1449 @item @code{planner-goto}
1450 @item @code{plan}
1451 @end itemize
1453 @item @emph{Useful functions inside planner buffers:}
1455 @itemize
1456 @item @kbd{C-c C-t} (@code{planner-create-task-from-buffer})
1457 @item @kbd{C-c C-x} (@code{planner-task-done})
1458 @item @kbd{M-x planner-edit-task-description}
1460 @item
1461 @kbd{C-c C-c} (@code{planner-copy-or-move-task}), @kbd{M-x
1462 planner-copy-or-move-region}
1464 @item @kbd{M-x planner-replan-task}
1465 @item @kbd{M-x planner-delete-task}
1467 @item
1468 @key{M-p} (@code{planner-raise-task}) and @key{M-n}
1469 (@code{planner-lower-task})
1471 @item @key{C-M-p} (@code{planner-raise-task-priority}) and
1472       @key{C-M-n} (@code{planner-lower-task-priority}),
1473 @item @code{planner-replan-note}
1474 @item @code{planner-update-note}
1475 @end itemize
1477 @end itemize
1479 That's all you need to know in order to use Planner as a basic TODO and
1480 notes manager, but there's a whole lot more. Read through this manual
1481 and our mailing list archives (@pxref{Getting Help}) for lots of
1482 wonderful ideas about planning in Emacs!
1484 @node More about Planner, Managing Your Information, Getting Started, Top
1485 @comment  node-name,  next,  previous,  up
1486 @chapter More about Planner
1488 @menu
1489 * Navigation::                  
1490 * More about Tasks::            
1491 * More about Notes::            
1492 * Making Files Pretty::         
1493 * Annotations::                 
1494 * Interactive Lisp::            planner-lisp.el
1495 * Publishing::                  planner-publish.el
1496 * Experimental Functions::      planner-experimental.el
1497 @end menu
1499 @node Navigation, More about Tasks, More about Planner, More about Planner
1500 @comment  node-name,  next,  previous,  up
1501 @section Starting with Day Pages
1503 @command{planner-goto-today} opens today's page.  Day pages are named
1504 @samp{YYYY.MM.DD} and contain your notes for the day.
1506 You should see a file that looks like this:
1508 @example
1509 * Tasks
1512 * Schedule
1514 * Notes
1515 @end example
1517 You can type anything you want into this file.  You can add or delete
1518 sections.  When you save, Emacs stores your information in
1519 @code{planner-directory}.
1521 Use the following commands to navigate through day pages:
1523 @defun plan
1524 Start planning the day.  If @code{planner-carry-tasks-forward} is
1525 non-nil, copy the most recent unfinished tasks to today's page, else
1526 open the most recent page.
1527 @end defun
1529 @defun planner-goto (@kbd{C-c C-j C-d})
1530 Prompt for a date using a calendar pop-up and display the
1531 corresponding day page.  You can specify dates partially.  The current
1532 year and month are used if omitted from the input.  For example, if
1533 today is 2004.05.05, then
1535 @itemize
1536 @item @kbd{+1} is one day from now, or @samp{2004.05.06}
1537 @item @kbd{-1} is one day before now, or @samp{2004.05.04}
1538 @item @kbd{12} is equivalent to @samp{2004.05.12}
1539 @item @kbd{8.12} is equivalent to @samp{2004.08.12}
1540 @item @kbd{2005.08.12} is a full date specification
1541 @end itemize
1543 In the calendar buffer, you can also left-click or press @key{RET} on
1544 a date to select it.
1545 @end defun
1547 @defun planner-goto-today (@kbd{C-c C-j C-j})
1548 Display today's page. Create the page if it does not yet exist.
1549 @end defun
1551 @defun planner-goto-tomorrow (@kbd{C-c C-j C-t})
1552 Goto the planner page days @var{after} the currently displayed date.
1553 If @var{days} is nil, go to the day immediately after the currently
1554 displayed date.  If the current buffer is not a daily planner page,
1555 calculate date based on today.
1556 @end defun
1558 @defun planner-goto-yesterday (@kbd{C-c C-j C-y})
1559 Goto the planner page @var{days} before the currently displayed date.
1560 If @var{days} is nil, go to the day immediately before the currently
1561 displayed date.  If the current buffer is not a daily planner page,
1562 calculate date based on today.
1563 @end defun
1565 @defun planner-goto-most-recent
1566 Go to the most recent day with planning info.
1567 @end defun
1569 @defun planner-goto-previous-daily-page
1570 Goto the last plan page before the current date.
1571 The current date is taken from the day page in the current
1572 buffer, or today if the current buffer is not a planner page.
1573 Do not create pages if they do not yet exist.
1574 @end defun
1576 @defun planner-goto-next-daily-page
1577 Goto the first plan page after the current date.
1578 The current date is taken from the day page in the current
1579 buffer, or today if the current buffer is not a planner page.
1580 Do not create pages if they do not yet exist.
1581 @end defun
1583 @defun planner-goto-plan-page page
1584 Opens @var{page} in the the @code{planner-project} Wiki.  Use
1585 @code{planner-goto} if you want fancy calendar completion.
1586 @end defun
1588 @defun planner-show date
1589 Show the plan page for @var{date} in another window, but don't select
1590 it.  If no page for @var{date} exists, return nil.
1591 @end defun
1594 @node More about Tasks, More about Notes, Navigation, More about Planner
1595 @comment  node-name,  next,  previous,  up
1596 @section More about Tasks
1597 @cindex tasks, more about
1599 This section is divided into three parts. In the first part, you can
1600 read about all the options, strategies and commands to help you
1601 efficiently add new tasks to your planner. In the second part, we'll go
1602 over all of the aspects of Planner that relate to organizing, editing,
1603 rescheduling and viewing the tasks you've already created. Finally,
1604 we'll cover some ways to step back and look at various reports and
1605 overviews that can be generated from your planner pages.
1607 You may also be interested in tracking time spent on tasks with
1608 @ref{Timeclock} and estimating project completion time with
1609 @ref{Schedule} (also see @pxref{schedule.el}).
1611 @menu
1612 * Creating New Tasks::          
1613 * Organizing Your Tasks::       
1614 * Task Reports and Overviews::  
1615 @end menu
1617 @node Creating New Tasks, Organizing Your Tasks, More about Tasks, More about Tasks
1618 @comment  node-name,  next,  previous,  up
1619 @subsection Creating New Tasks
1620 @cindex tasks, creating
1622 Planner makes it very easy to quickly add something to your list of
1623 tasks. Once you get used to the basics of
1624 @command{planner-create-task-from-buffer}, you might want to take a
1625 closer look at some things in Planner that can help you create new tasks
1626 in a way that fits with your system.
1628 @menu
1629 * Creating a Task::             
1630 * Task Priorities::             
1631 * Task IDs::                    planner-id.el
1632 * Cyclic Tasks::                planner-cyclic.el
1633 * Task Detail::                 
1634 * Deadlines::                   planner-deadline.el
1635 @end menu
1637 @node Creating a Task, Task Priorities, Creating New Tasks, Creating New Tasks
1638 @comment  node-name,  next,  previous,  up
1639 @subsubsection Creating a Task
1640 @cindex tasks, creating
1642 You can create a task from any buffer in Emacs by invoking
1643 @command{M-x planner-create-task-from-buffer}.
1645 This command does more than just add an item to your list of tasks. It
1646 also connects that item to some useful context information.
1648 If you create a task while viewing any buffer other than a Planner
1649 day page, Planner will associate the task with a hyperlink to that
1650 buffer. Try it now by creating a task from this Info buffer.
1652 @enumerate
1653 @item @kbd{M-x planner-create-task-from-buffer}
1654 @item
1655 When prompted for the task name, enter @kbd{Learn how to change a task's
1656 status} and press @key{RET}.
1658 @item
1659 When prompted for the date, press @key{RET} to schedule the task for
1660 today.
1662 @item
1663 When prompted for the project page, press @key{RET} to accept the
1664 default page of @samp{TaskPool}. This is a page for tasks not connected
1665 to a larger plan.
1667 @end enumerate
1669 Planner prompts you for two pieces of information when you ask it
1670 to create a task. First, it asks you when you would like to have the
1671 task show up in your planner. If you would like it to be scheduled for
1672 today, you can just hit @key{RET}. If you would like it to be
1673 scheduled for some day during the current month, you can just enter
1674 the date, without the month, like @samp{16}. If you would like it to
1675 be scheduled for some day in a future month of the current year, you
1676 can enter just the month and date, like @samp{06.16}. If you would
1677 like to schedule something for next year, then enter the full date,
1678 like @samp{06.16.2005}. If you do not want this task to appear on a
1679 day page at all, you can enter @samp{nil}.
1681 The second piece of information Planner asks for is the name of
1682 the project to associate the task with. In the above example, you
1683 associated the task with the project ``TaskPool'', which means that
1684 you did not want to associate the task with a particular project or
1685 goal in your life. Another way to do this is to answer the project
1686 prompt by entering @samp{nil}. But instead, you might enter
1687 @samp{LearnPlanner} as the project. This creates a new page called
1688 ``LearnPlanner'' in your planner directory and places an entry for the
1689 task on that page.
1691 The task then exists in two places: once on your day page, to show how
1692 it fits into your daily work; and once on a project page, to show how
1693 it fits into your larger projects and goals. In the future you might
1694 add related tasks like, ``Memorize Planner keybindings''. These
1695 tasks might be scattered over weeks or months worth of day pages, but
1696 as long as you enter the same project name for each, you will have a
1697 way to look at them all together on a single project page.
1699 Planner also creates hyperlinks to enable you to easily move back
1700 and forth between the day page system and the project page
1701 system. Each task on a day page will have a hyperlink to its project
1702 page. Each task on a project page will have a hyperlink to its day
1703 page.
1705 After using Planner for a while, you may find yourself with quite
1706 a few project pages. Keep in mind that completion is enabled at the
1707 project prompt when you create a task, so hitting @kbd{SPC} or
1708 @kbd{TAB} at the prompt will show you a list of your current project
1709 pages.
1711 Once the task is created, you are returned to the buffer you were
1712 working in again, Planner gets out of your way, and you can go on
1713 about your business. Later on, when you decide to actually work on
1714 that ``Memorize Planner keybindings'' task, you will be able to
1715 follow the hyperlink from that task on your day or project page
1716 directly to the relevant node in the Planner info file!
1718 By default, @command{M-x planner-create-task-from-buffer} creates
1719 medium-priority tasks, marked with the letter @samp{B}.  But you can
1720 specify a particular priority or change the default (@pxref{Task
1721 Priorities}).
1723 You don't have to use @command{planner-create-task-from-buffer} to
1724 create tasks. You can also create new tasks manually by typing them
1725 directly on your day or project page in the format Planner expects. You
1726 can even still create hyperlinks by using Muse formatting as you
1727 manually type the new task (@pxref{Hyperlinks}). Keep in mind also that
1728 tasks do not have to be linked to any other page.
1730 For convenience, @command{planner-create-task-from-buffer} is bound to
1731 @kbd{C-c C-t} in Planner buffers.  You can bind
1732 @command{planner-create-task-buffer} to a shortcut key.  See the
1733 manual for your Emacs distribution to find out more about keybinding.
1735 @defun planner-create-task-from-buffer title date plan-page
1736 Create a new task named @var{title} on @var{date} based on the current
1737 buffer.
1739 With a prefix, associate the task with the current planner page.  If
1740 you create a task on a date page, you will be prompted for a plan
1741 page.  If you create a task on a plan page, you will be prompted for a
1742 day page.  If nil is specified, the task is created only on the
1743 current page.
1745 See @code{planner-create-task} for more information.
1747 The new task is created at the top or bottom of the first block of
1748 tasks on the scheduled day page (if any), depending on the value of
1749 @code{planner-add-task-at-end-flag}.
1750 @end defun
1752 @defun planner-create-task title date annotation plan-page
1753 Create a new task named @var{title} based on the current Wiki page.
1754 If @var{date} is non-nil, makes a daily entry on @var{date}, else
1755 makes an entry in today's planner page. It's assumed that the current
1756 Wiki page is the page you're using to plan an activity. Any time
1757 accrued to this task will be applied to that page's name in the
1758 timelog file, assuming you use timeclock (@pxref{Time Intervals, , ,
1759 Emacs, GNU Emacs Manual}). If @var{annotation} is non-nil, it will be
1760 used for the page annotation. If @var{plan-page} is non-nil, the task
1761 is associated with the given page.
1763 With a prefix, associate the task with the current planner page.  If
1764 you create a task on a date page, you will be prompted for a plan
1765 page.  If you create a task on a plan page, you will be prompted for a
1766 day page.  If nil is specified, the task is created only on the
1767 current page.
1769 You probably want to call @code{planner-create-task-from-buffer}
1770 instead.
1772 The new task is created at the top or bottom of the first block of
1773 tasks on the scheduled day page (if any), depending on the value of
1774 @code{planner-add-task-at-end-flag}.
1775 @end defun
1777 @node Task Priorities, Task IDs, Creating a Task, Creating New Tasks
1778 @comment  node-name,  next,  previous,  up
1779 @subsubsection Task Priorities
1781 You can set the priority of a task when you create it, rather than
1782 waiting to adjust it after the fact. In order to do this, call the
1783 function corresponding to the priority you want. You probably want to
1784 bind these functions to some keys if you intend to use them much.
1786 @itemize
1787 @item @code{planner-create-high-priority-task-from-buffer}
1788 creates a task with priority @samp{A}.
1790 @item @code{planner-create-medium-priority-task-from-buffer}
1791 creates a task with priority @samp{B}.
1793 @item @code{planner-create-low-priority-task-from-buffer}
1794 creates a task with priority @samp{C}.
1795 @end itemize
1797 Or, you can change the default priority of
1798 @command{planner-create-task-from-buffer} by customizing
1799 @var{planner-default-task-priority}.
1801 You can actually use just one general priority, but using more than
1802 one color-codes your tasks and gives you a better overview of your
1803 day.
1806 @node Task IDs, Cyclic Tasks, Task Priorities, Creating New Tasks
1807 @comment  node-name,  next,  previous,  up
1808 @subsubsection Task IDs
1809 @cindex @file{planner-id.el}, using
1810 @cindex tasks, IDs
1812 After loading @file{planner.el}, make sure that @file{planner-id.el} is
1813 in your load path and add this to your @file{.emacs} (or @file{_emacs}):
1815 @example
1816 (require 'planner-id)
1817 @end example
1819 This module modifies the behavior of @file{planner.el}, adding global
1820 task IDs so that tasks can be edited and updated. Planner IDs are of
1821 the form @samp{@{@{Identifier:Number@}@}}.
1823 @subheading Options
1825 @defopt planner-id-add-task-id-flag
1826 Non-nil means automatically add global task IDs to newly-created
1827 tasks. If nil, use @command{planner-id-add-task-id} to add IDs to
1828 existing tasks, or @command{planner-id-add-task-id-to-all} to add to
1829 all tasks on the current page.
1830 @end defopt
1832 @defopt planner-id-update-automatically
1833 Non-nil means automatically update linked tasks whenever a page is
1834 saved. If nil, use @command{planner-update-task} to update the linked
1835 task. By default, linked tasks are automatically updated.
1836 @end defopt
1838 @defopt planner-id-tracking-file
1839 File that contains ID tracking data. This file is automatically
1840 overwritten.
1841 @end defopt
1843 @subheading Functions
1845 The following interactive functions are defined in @file{planner-id.el}:
1847 @defun planner-id-jump-to-linked-task &optional info
1848 Display the linked task page. If @var{info} is specified, follow that
1849 task instead.
1850 @end defun
1852 @defun planner-id-add-task
1853 Add a task ID for the current task if it does not have one
1854 yet. Update the linked task page, if any.
1855 @end defun
1857 @defun planner-id-update-tasks-on-page &optional force
1858 Update all tasks on this page. Completed or cancelled tasks are not
1859 updated. This can be added to @code{write-file-functions}. If
1860 @var{force} is non-nil, completed and cancelled tasks are also
1861 updated.
1862 @end defun
1864 @defun planner-id-add-task-id-to-all
1865 Add a task ID for all the tasks on the page. Update the linked page,
1866 if any.
1867 @end defun
1869 @defun planner-id-search-id id
1870 Search for all occurrences of @var{id}.
1871 @end defun
1873 @defun planner-id-follow-id-at-point
1874 Display a list of all pages containing the ID at point.
1875 @end defun
1877 @defun planner-id-follow-id-at-mouse event
1878 Display a list of all pages containing the ID at mouse. @var{event} is
1879 the mouse event.
1880 @end defun
1882 @node Cyclic Tasks, Task Detail, Task IDs, Creating New Tasks
1883 @comment  node-name,  next,  previous,  up
1884 @subsubsection Cyclic Tasks
1885 @cindex @file{planner-cyclic.el}, using
1886 @cindex tasks, cyclic
1887 @cindex cyclic tasks
1888 @cindex recurring tasks
1890 If there are tasks that you have to do regularly, you can have Planner
1891 schedule those tasks automatically.
1893 Make sure that @file{planner-cyclic.el} is in your load path and add
1894 this to your @file{.emacs} (or @file{_emacs}):
1896 @example
1897 (require 'planner-cyclic)
1898 @end example
1900 Create a diary file named @file{~/.diary.cyclic-tasks}
1901 (or the value of @code{planner-cyclic-diary-file}). Here is an example:
1903 @example
1904 Tuesday #B0 _ Study Japanese
1905 Friday #B0 _ Study Japanese (JapaneseStudies)
1906 @end example
1908 The first will be a plain task, the second will be linked.  The first
1909 line will automatically create its task every Tuesday, while the
1910 second will create it every Friday.
1912 You can schedule tasks in a variety of ways. This module uses the same
1913 syntax for specifying when tasks will be scheduled as the Emacs diary
1914 uses for appointments and events. See @ref{Date Formats, the GNU Emacs
1915 Manual, Date Formats,emacs, the GNU Emacs Manual}, and @ref{Sexp Diary
1916 Entries, the GNU Emacs Lisp Reference Manual, Sexp Diary
1917 Entries,elisp, the GNU Emacs Lisp Reference Manual}, for a full
1918 description of the possibilities.
1920 By default, planner-cyclic creates multiple tasks if you let tasks build
1921 up (that is, the next Tuesday rolls around and you @emph{still} haven't
1922 marked the task as done.) To turn off this behavior:
1924 @example
1925 (setq planner-cyclic-diary-nag nil)
1926 @end example
1928 @subheading Functions
1930 @file{planner-cyclic-diary} includes the following interactive
1931 functions:
1933 @defun planner-cyclic-create-tasks-maybe
1934 Maybe create cyclic tasks. This will only create tasks for future
1935 dates or today.
1936 @end defun
1938 @node Task Detail, Deadlines, Cyclic Tasks, Creating New Tasks
1939 @comment  node-name,  next,  previous,  up
1940 @subsubsection Task Detail
1941 @cindex tasks
1943 You may find your planner pages getting very full, so that you want to
1944 have one broad task entry be linked to a more specific list of
1945 sub-tasks. Or, maybe you want to have a number of notes linked to a
1946 particular task.
1947 @cindex tasks, sub-
1948 @cindex tasks, meta-
1949 @cindex meta-tasks
1950 @cindex sub-tasks
1952 This can be done with targets.  You can have a task that is really a
1953 meta-task:
1955 @example
1956 #A1  _ Do things in RevelleLog#13 @{@{Tasks:101@}@} (RevelleLog)
1957 @end example
1959 @samp{RevelleLog#13} could then be a list of sub-tasks in the form of
1960 a note, or any kind of note.
1962 Or, instead of pointing to a particular note on @samp{RevelleLog}, you
1963 could have the whole page be tasks that you enter in manually, without
1964 linking them to another page. You can just type them in like this:
1966 @example
1967 #A1  _ First specific thing to do
1968 @end example
1970 This way, the tasks will only appear on this specific project page,
1971 and not on any daily page, so you only see them when you want to look
1972 up all of the specific tasks associated with @samp{#A1  _ Do things in
1973 RevelleLog @{@{Tasks:101@}@} (RevelleLog)}.
1975 As you can see, the ability to manually enter tasks is one of
1976 Planner's nicest features. It allows you to create tasks that are
1977 not assigned to a specific date (by manually entering them on a
1978 project page with no date) or to a specific project (by manually
1979 entering them on a day page with no project). Yet as long as you enter
1980 them using the syntax it understands, Planner will continue to
1981 recognize them as tasks.
1983 Another way to have a task not be connected to a particular date is to
1984 do @kbd{C-c C-c} (@code{planner-copy-or-move-task}) and specify
1985 @samp{nil} when asked for the date.
1987 If you would like to see a list of all of your unfinished scheduled
1988 tasks, do @kbd{M-x planner-list-unfinished-tasks}.  It is only intended
1989 to give you an overview.  Any editing you want to do, like marking tasks
1990 complete or editing their description, still needs to be done on one of
1991 the tasks' ``real'' planner pages.
1993 @node Deadlines,  , Task Detail, Creating New Tasks
1994 @comment  node-name,  next,  previous,  up
1995 @subsubsection Deadlines
1996 @cindex tasks, deadlines for
1997 @cindex deadlines, task
1998 @cindex @file{planner-deadline.el}, using
2000 You can use @file{planner-deadline.el} to automatically recalculate
2001 days to a deadline by adding @code{(require 'planner-deadline)} to
2002 your @file{~/.emacs}. With the default setup, make your tasks of the
2003 form
2005 @example
2006 #A0 _ Some task @{@{Deadline: 2004.09.12@}@}
2007 @end example
2009 (Note: There must be at least one space after the colon.)
2011 After you run @code{planner-deadline-update} to update task descriptions,
2012 the task will be of the form
2014 @example
2015 #A0 _ Some task @{@{Deadline: 2004.09.12 - 2 days@}@}
2016 @end example
2018 @subheading Options
2020 @defopt planner-deadline-regexp
2021 Regular expression for deadline data.
2022 The special deadline string should be regexp group 1. The
2023 date (YYYY.MM.DD) should be regexp group 2.
2024 @end defopt
2026 @subheading Functions
2028 @defun planner-deadline-update
2029 Replace the text for all tasks with deadlines. Deadlines are of the
2030 form @samp{@{@{Deadline: YYYY.MM.DD@}@}} by default.
2031 @end defun
2033 @defun planner-deadline-change &optional date
2034 Change the deadline of current task to @var{date}. If @var{date} is nil,
2035 remove deadline.
2036 @end defun
2038 @node Organizing Your Tasks, Task Reports and Overviews, Creating New Tasks, More about Tasks
2039 @comment  node-name,  next,  previous,  up
2040 @subsection Organizing Your Tasks
2041 @cindex tasks, organizing
2042 @cindex tasks, old
2044 Okay, now that you've gotten the hang of creating tasks, you're probably
2045 facing a really long list of things to do. How can you organize them so
2046 that they don't overwhelm you? Planner gives you a number of strategies
2047 for dealing with large numbers of tasks.
2049 @enumerate
2050 @item Arrange your tasks in the rough order you're going to do them.
2051 @item Use #A, #B and #C task priorities to differentiate between
2052       high-priority, normal and low-priority tasks.
2053 @item Schedule your tasks onto different days.
2054 @item Group your tasks into plan pages.
2055 @item Don't schedule all your tasks.
2056 @end enumerate
2058 @enumerate
2060 @item @emph{Task order}
2062 To remind yourself to do tasks in a certain order, simply edit the
2063 lines so that they're in the order you want. You can use normal
2064 editing commands like kill, yank and transpose-line to reorder the
2065 tasks, or use @key{M-p} (@code{planner-raise-task}) and @key{M-n}
2066 (@code{planner-lower-task}) to rearrange the tasks.
2068 @item @emph{Task priorities}
2070 By default, tasks are created with medium priority (@samp{#B}). You
2071 can make a task high-priority (@samp{#A}) or low-priority (@samp{#C})
2072 by manually editing the task and calling M-x planner-update-task to
2073 update the linked page. Alternatively, you can use @key{C-M-p}
2074 (@code{planner-raise-task-priority}) and @key{C-M-n}
2075 (@code{planner-lower-task-priority}) to modify the task and update the
2076 linked page.
2078 You can edit the priority of a task using @kbd{M-x
2079 planner-edit-task-priority}, or manually edit it and call @kbd{M-x
2080 planner-update-task} to update tasks on the linked page.
2082 @item @emph{Schedule your tasks on different days}
2084 You don't have to do everything today. Is this a task you would rather
2085 do tomorrow? Schedule it for then instead. You can specify @samp{+n}
2086 or @samp{-n} whenever you are asked for a date, where @var{n} is the
2087 number of days before or after the current file's date or today.
2088 Don't over-procrastinate things, though!
2090 @item @emph{Plan pages}
2092 Plan pages let you group related tasks and notes together for easy
2093 reference. For example, you could have a plan page for each major
2094 project or goal in your life, like @samp{GoodHealth} or
2095 @samp{FurtherStudies}.
2097 Although plan pages start by grouping everything under a @samp{*
2098 Tasks} header, you can organize your plan pages in different ways. For
2099 example, you can separate groups of tasks with blank lines, and
2100 Planner will sort tasks within each group.
2102 @item @emph{Tasks without dates}
2104 Plan pages also allow you to have undated tasks or tasks with no
2105 particular deadlines. This keeps your daily task list small and
2106 manageable while making it easier for you to find things to do if you
2107 have free time. Make sure you check your plan pages regularly so that
2108 you don't completely forget about them.
2110 For automated scheduling of the next task on a plan page after you
2111 complete a task, see the section in
2112 @uref{http://sacha.free.net.ph/notebook/emacs/planner-config.el} named
2113 ``Schedule next undated task from same project''.
2115 @end enumerate
2118 @menu
2119 * Multiple Projects::           
2120 * Viewing Tasks::               
2121 * Modifying Tasks::             
2122 * Carrying Over Unfinished Tasks::  
2123 * Task Numbering::              
2124 * Task Ranks::                  planner-rank.el
2125 * Grouping Tasks::              planner-trunk.el
2126 @end menu
2128 @node Multiple Projects, Viewing Tasks, Organizing Your Tasks, Organizing Your Tasks
2129 @comment  node-name,  next,  previous,  up
2130 @subsubsection Associating Tasks with Multiple Projects
2131 @cindex multiple projects
2132 @cindex @file{planner-multi.el}, using
2134 You can use @file{planner-multi.el} to associate a task with more than
2135 one project. That way, you can easily keep GTD-style context lists as
2136 well as project-related lists.
2138 To use multiple projects, add the following to your @samp{~/.emacs}:
2140 @example
2141 (require 'planner-multi)
2142 @end example
2144 Under GNU Emacs, you can specify multiple projects by separating them
2145 with a single space. For example, you can specify @kbd{planner doc}
2146 when creating a task to associate the task with those two projects.
2148 Under XEmacs, you can specify multiple projects by typing @kbd{RET}
2149 after each entry and terminating the list with another @kbd{RET}. For
2150 example, to specify @kbd{planner} and @kbd{doc}, you would type
2151 @kbd{planner RET doc RET RET} at the prompt.
2153 If you want to see an overview of all of your tasks as well as
2154 project- or context-specific lists, you can set
2155 @code{planner-multi-copy-tasks-to-page} to your overview page(s). For
2156 example, set it to @samp{TaskPool} to be able to see an overview of
2157 all of your unfinished tasks. You can also set this to multiple pages
2158 such as @samp{[[TasksByProject][p]] [[TasksByContext][c]]} and use
2159 @file{planner-trunk.el} to sort and organize tasks for easy reference.
2160 (@pxref{Grouping Tasks})
2162 @subheading Options
2164 @defopt planner-multi-copy-tasks-to-page
2165 Automatically copy newly-created tasks to the specified page.
2166 @end defopt
2168 By default, tasks are removed from
2169 @code{planner-multi-copy-tasks-to-page} when you call
2170 @code{planner-task-done} or @code{planner-task-cancelled}. If you
2171 prefer to keep a copy of the task, remove
2172 @code{planner-multi-remove-task-from-pool} from
2173 @code{planner-mark-task-hook}.
2175 If you want to use a different separator instead of spaces, customize
2176 the @code{planner-multi-separator} variable.
2178 @defopt planner-multi-separator
2179 String that separates multiple page references.
2181 For best results, this should be something recognized by
2182 @code{muse-link-at-point} so that links are highlighted
2183 separately.
2184 @end defopt
2186 @node Viewing Tasks, Modifying Tasks, Multiple Projects, Organizing Your Tasks
2187 @comment  node-name,  next,  previous,  up
2188 @subsubsection Viewing tasks
2189 @cindex tasks, viewing
2191 Review the tasks scheduled for today by typing @kbd{M-x
2192 planner-goto-today}.  If you created the task from the previous
2193 section in this tutorial, you should see a line that looks like
2195 @example
2196 #A _ Learn how to change a task's status from Tasks (TaskPool)
2197 @end example
2199 If you have @code{planner-use-task-numbers} set to non-nil, you will see
2200 something like the following instead.
2202 @example
2203 #A0 _ Learn how to change a task's status from Tasks (TaskPool)
2204 @end example
2206 From left to right, these are what the symbols mean:
2208 @itemize
2209 @item @samp{A} - Priority.  A (high)
2210 @item
2211 @samp{0} - Priority number.  It is calculated whenever you save the file
2212 or call @command{planner-renumber-tasks}, provided that
2213 @code{planner-use-task-numbers} is non-nil.  Tasks are numbered in
2214 ascending order according to priorities.
2215 @item @samp{_} - Status.  _ (unfinished)
2216 @end itemize
2218 If you click on @samp{Tasks} or press @key{RET} while your cursor is
2219 in the link, Emacs will display the previous info page.
2221 If you select @samp{TaskPool}, Emacs will display the @samp{TaskPool}
2222 plan page.  Plan pages organize your tasks and notes about a project
2223 in one file.
2225 @subheading Functions
2227 You can use @command{planner-seek-next-unfinished-task} to move to the
2228 next unfinished task on the current page.
2230 @defun planner-list-tasks-with-status status &optional pages
2231 Display all tasks that match the STATUS regular expression on all day
2232 pages.  The PAGES argument limits the pages to be checked in this
2233 manner:
2235 @itemize
2236 @item @code{t}: check all pages
2237 @item regexp: search all pages whose filenames match the regexp
2238 @item list of page names: limit to those pages
2239 @item alist of page/filenames: limit to those pages
2240 @end itemize
2242 Called interactively, this function will search day pages by
2243 default. You can specify the start and end dates or leave them as
2244 nil to search all days. Calling this function with an interactive
2245 prefix will prompt for a regular expression to limit pages.
2246 Specify @samp{.} or leave this blank to include all pages.
2248 This function could take a long time.
2249 @end defun
2251 @defun planner-list-unfinished-tasks &optional pages
2252 Display all unfinished tasks. @var{pages} follows
2253 planner-list-tasks-with-status.
2254 @end defun
2256 @defun planner-jump-to-linked-task task-info
2257 Display the task page linked to by the current task or
2258 @var{task-info}.
2259 @end defun
2261 @node Modifying Tasks, Carrying Over Unfinished Tasks, Viewing Tasks, Organizing Your Tasks
2262 @comment  node-name,  next,  previous,  up
2263 @subsubsection Modifying Tasks
2264 @cindex tasks, modifying
2265 @cindex tasks, editing
2267 To select a task, move your cursor to the line containing the task.
2269 Change a task's priority (@samp{A}, @samp{B} or @samp{C}) by editing
2270 the line. @samp{#A} tasks are important. @samp{#B} are medium
2271 priority. @samp{#C} are low priority. Whenever you save the file or
2272 call @kbd{M-x planner-fix-tasks}, tasks are sorted and numbered
2273 according to priority and status.
2275 Change a task's status by calling one of the following functions:
2277 @itemize
2278 @item planner-task-in-progress @samp{o} (@kbd{C-c C-z})
2279 @item planner-task-done @samp{X} (@kbd{C-c C-x})
2280 @item planner-task-cancelled @samp{C} (@kbd{C-c C-S-x})
2281 @item planner-task-delegated @samp{D}
2282 @item planner-task-pending @samp{P}
2283 @item planner-task-open @samp{_}
2284 @end itemize
2286 After changing the status using a function, look at the
2287 @samp{TaskPool} plan page.  The task is also updated on the linked
2288 page.  If you changed the task status manually by replacing the status
2289 with another character, you will need to call
2290 @command{planner-update-task} to update the linked page.
2292 To reschedule a task, call @command{planner-copy-or-move-task} (@kbd{C-c
2293 C-c}) and choose a new date.  You can mark a region and type @kbd{M-x
2294 planner-copy-or-move-region} to reschedule all the contained tasks to a
2295 different date.  Enter @samp{nil} for the date if you don't want the
2296 task or group of tasks to appear on any date page at all anymore. This
2297 is a good way to ``de-schedule'' a task for the time being, but still
2298 keep it linked to a plan page for possible future scheduling.
2300 To change the plan page associated with a task, call
2301 @command{planner-replan-task}.  Enter @samp{nil} for the plan page if
2302 you don't want the task to appear on any plan page anymore. If you
2303 precede the command with a prefix argument, the text of the original
2304 plan page will appear in the prompt for easy editing.
2306 Since the same task may exist on two or more pages, such as a date page
2307 and a plan page, it is dangerous to edit the description of the task by
2308 hand. You should not do it unless you want to make the exact same
2309 changes on all its linked pages.
2311 Instead of doing this by hand, you should use
2312 @command{planner-edit-task-description}. This will prompt you for the
2313 changes to the task description and then update all the other pages to
2314 which the task is linked.  Or, you can just use
2315 @command{planner-delete-task} to remove the task from both pages, and
2316 then create it again with the new desired description.
2318 To remind yourself to do tasks in a certain order, simply edit the
2319 lines so that they're in the order you want.
2320 @command{planner-raise-task} and @command{planner-lower-task} update
2321 the priorities on linked pages automatically. You can organize tasks
2322 into groups by putting a blank line between groups of tasks.
2323 Planner will maintain the groupings and only sort the tasks within
2324 that group.
2326 @subheading Functions
2328 @defun planner-replan-task page-name
2329 Change or assign the plan page for the current task.  @var{page-name}
2330 is the new plan page for the task. Use
2331 @code{planner-copy-or-move-task} if you want to change the date. With a
2332 prefix, provide the current link text for editing.
2333 @end defun
2335 @defun planner-raise-task-priority
2336 Change a low-priority task to a medium-priority task and a
2337 medium-priority task to a high-priority task (C to B to A).
2338 @end defun
2340 @defun planner-lower-task-priority
2341 Change a high-priority task to a medium-priority task and a
2342 medium-priority task to a low-priority task (A to B to C).
2343 @end defun
2345 @defun planner-raise-task arg
2346 Move a task up @var{arg} steps.  By default, @var{arg} is 1.
2347 @end defun
2349 @defun planner-lower-task  arg
2350 Move a task down @var{arg} steps.  By default, @var{arg} is 1.
2351 @end defun
2353 @defun planner-edit-task-description description
2354 Change the description of the current task, updating the linked page
2355 if any.
2356 @end defun
2358 @defun planner-delete-task
2359 Delete this task from the current page and the linked page.
2360 @end defun
2362 @defun planner-update-task
2363 Update the current task's priority and status on the linked page.
2364 Tasks are considered the same if they have the same description.
2365 This function allows you to force a task to be recreated if it
2366 disappeared from the associated page.
2367   
2368 Note that the text of the task must not change. If you want to be able
2369 to update the task description, see @code{planner-edit-task-description}
2370 or @file{planner-id.el}.
2371 @end defun
2373 See @command{planner-install-extra-task-keybindings} for additional
2374 task-related shortcuts.
2376 @node Carrying Over Unfinished Tasks, Task Numbering, Modifying Tasks, Organizing Your Tasks
2377 @comment  node-name,  next,  previous,  up
2378 @subsubsection Carrying Over Unfinished Tasks
2379 @cindex tasks, carrying over
2381 Sometimes you won't be able to cross off all the tasks on your list.
2382 Planner makes it easy for you to keep track of things you still have
2383 to do by automatically rescheduling unfinished tasks from the past few
2384 days. By default, the @command{plan} command searches for unfinished
2385 tasks from the last three days and reschedules them onto today. If you
2386 open Planner every day, this should cover weekends easily.
2388 It's a good idea to start Planner whenever you start Emacs. That way,
2389 Planner can help remind you about today's tasks, appointments, and other
2390 things. To automatically start Planner whenever you start up Emacs, add
2391 the following code to the end of your @file{~/.emacs}:
2393 @example
2394 (plan)
2395 @end example
2397 Now, every time you start Emacs (which should be more or less once a
2398 day), you'll see today's page. If you don't finish all the tasks today,
2399 you'll see them again tomorrow.
2401 It's a good idea to start Planner every time you start Emacs so that
2402 you get reminded about your task list. If you prefer to start Planner
2403 manually, remember to call @kbd{M-x plan} every so often to make sure
2404 that you don't forget any unfinished tasks. Safe in the knowledge that
2405 Planner tasks won't slip through the cracks (unlike little slips of
2406 paper that will invariably get mislaid), you can then get on with the
2407 rest of your life.
2409 If your increased productivity with Planner leads to a well-deserved
2410 two-week vacation, then you'll need to tell Planner to search more days
2411 for unfinished tasks. By using @kbd{M-x plan}, you can automatically
2412 bring forward tasks over a given number of days or even scan all the
2413 days since time immemorial. @kbd{C-u 15 M-x plan} reschedules all
2414 unfinished tasks from the last 15 days. @kbd{C-u -1 M-x plan} checks all
2415 of your past day pages for unfinished tasks.
2417 Like everything else in Planner, you can adapt @kbd{M-x plan} to your
2418 particular way of life. For example, if you find yourself starting up
2419 Emacs and Planner every day--including weekends--because it's just so
2420 much fun, you can set the @code{planner-carry-tasks-forward} to 1.
2421 This can make your Emacs startup marginally faster. On the other hand,
2422 if you normally start Emacs once a week, you can set it to 7 or 8. If
2423 you're worried about tasks dropping off your radar, you can set it to
2424 0. You can set the value of @var{planner-carry-tasks-forward} either
2425 with @key{M-x customize-variable RET planner-carry-tasks-forward RET},
2426 or by putting @code{(setq planner-carry-tasks-forward 3)} (replacing
2427 @code{3} with the value appropriate for what you want) in your
2428 @file{~/.emacs} file.
2430 On the other hand, you might prefer to reschedule tasks yourself. If
2431 you set @code{planner-carry-tasks-forward} to @code{nil}, then
2432 @command{M-x plan} and @code{(plan)} will bring you to the most recent
2433 page with unfinished tasks if there is no page for today. You can then
2434 use @command{planner-copy-or-move-task} and
2435 @command{planner-copy-or-move-region} to reschedule tasks. This is
2436 probably more hassle than it's worth, though, so let Planner take care
2437 of this for you.
2439 @subheading Options
2441 @defopt planner-carry-tasks-forward
2442 If non-nil, carry unfinished tasks forward automatically.
2443 If a positive integer, scan that number of days in the past.
2444 If 0, scan all days for unfinished tasks.
2445 If t, scan one day in the past (old behavior).
2446 If nil, do not carry unfinished tasks forward.
2447 @end defopt
2449 @subheading Functions
2451 @defun plan &optional force-days
2452 Start your planning for the day, carrying unfinished tasks forward.
2454 If @var{force-days} is a positive integer, search that many days in the
2455 past for unfinished tasks.
2456 If @var{force-days} is @code{0} or @code{t}, scan all days.
2457 If @var{force-days} is @code{nil}, use the value of
2458 @code{planner-carry-tasks-forward} instead, except t means scan only
2459 yesterday
2461 @end defun
2463 @defun planner-copy-or-move-task date force
2464 Reschedule the task for @var{date}. If @var{force} is non-nil, the
2465 task is moved regardless of status. It also works for creating tasks
2466 from a Note. Use @code{planner-replan-task} if you want to change the
2467 plan page in order to get better completion.
2468 @end defun
2470 @defun planner-copy-or-move-region beg end date muffle-errors
2471 Move all tasks from @var{beg} to @var{end} to @var{date}.
2472 @code{planner-copy-or-move-region} will copy or move all tasks from
2473 the line containing @var{beg} to the line just before @var{end}. If
2474 @var{muffle-errors} is non-nil, no errors will be reported.
2475 @end defun
2477 @node Task Numbering, Task Ranks, Carrying Over Unfinished Tasks, Organizing Your Tasks
2478 @comment  node-name,  next,  previous,  up
2479 @subsubsection Task Numbering
2481 By default, tasks are numbered according to their position on the
2482 page.  Task numbers allow you to refer to tasks using Muse links.
2483 For example, the @samp{#A1} task in @file{2004.08.16} can be referred to
2484 as @samp{2004.08.16#A1}.
2486 Note that task numbers change every time you re-sort and re-number tasks
2487 with @code{planner-fix-tasks}.  As a result, they are only reliable for
2488 references to past tasks.
2490 If you find yourself not using this functionality, you can turn off task
2491 numbers by using the following option.
2493 @subheading Options
2495 @defopt planner-use-task-numbers
2496 Non-nil means use task numbers when creating tasks.  This allows you
2497 to refer to past tasks if your tasks are numbered appropriately.
2498 If you set this to nil, you can save space in your plan files.
2499 @end defopt
2501 @node Task Ranks, Grouping Tasks, Task Numbering, Organizing Your Tasks
2502 @comment  node-name,  next,  previous,  up
2503 @subsubsection Task Ranks
2504 @cindex ranking tasks
2505 @cindex tasks, ranking
2506 @cindex @file{planner-rank.el}, using
2508 @file{planner-rank.el} models Franklin Covey's Urgency and Importance
2509 principle. When you think about a task, there are two aspects in
2510 consideration: Urgency and Importance. You may want to do the most
2511 urgent things first, like answering an email, or you may want to do
2512 the most important things first, like reading this manual. Or much
2513 better, balance Urgency and Importance and decide what to do.
2515 @file{planner-rank.el} can help you balance.
2517 Urgency and Importance are both measured by scores from 0-9. The
2518 higher the score, the more you want to do it first. 9 stands for ``I
2519 should have done this'' and 0 stands for ``I can forget this''.
2521 If you are using the planner @ref{Deadlines} feature, the Urgency
2522 score is automatically calculated from how many days are left to meet
2523 the deadline. By default, it will score 9 if the task is overdue and 0
2524 if the deadline is years away. Please refer to the docstring of
2525 @code{planner-rank-deadline-urgency-map-list} for detail.
2527 The task rank is calculated from Urgency and Importance scores. As
2528 different people balance urgency and importance differently, a number
2529 of @code{planner-rank-calculate-rank-*} functions are provided. The
2530 algorithms vary from a simple average to something like a weighted
2531 root mean square deviation.
2533 The aggressive versions of these functions
2534 (@code{planner-rank-calculate-rank-*-aggressive}) will make sure if
2535 one of Urgency and Importance is high, the resulting rank will be high
2536 as well. @code{planner-rank-calculate-rank-weighted-*} functions weigh
2537 the Urgency and Important scores depending on
2538 @code{planner-rank-importance-vs-urgency-factor}.
2540 Call @code{planner-rank-test-algorithm} on each of the functions and
2541 check the result tables to see which one you like most, and set it to
2542 @code{planner-rank-rank-calculate-function}. Alternatively, accept the
2543 defaults and tweak them when you get a better feel for ranking.
2545 Once the Rank is calculated, the @ref{Task Priorities} will be
2546 automatically reset. If the Rank is greater than or equal to
2547 @code{planner-rank-priority-A-valve}, the task priority will be
2548 @samp{A}, if the Rank is between @code{planner-rank-priority-A-valve}
2549 and @code{planner-rank-priority-B-valve}, the priority will be @samp{B},
2550 else it will be @samp{C}.
2552 After setting the task importance and deadline, you can leave it as
2553 is. As the deadline approaches, the task priority will automatically
2554 be raised and the task re-colored to catch your eyes.
2556 If you are using @code{planner-sort-tasks} (see @pxref{Making Files
2557 Pretty}), you can set @code{planner-sort-tasks-key-function} to one of
2558 @code{planner-sort-tasks-by-rank},
2559 @code{planner-sort-tasks-by-importance}, and
2560 @code{planner-sort-tasks-by-urgency}.
2562 @subheading Options
2564 @defopt planner-rank-change-hook
2565 Functions to run after @code{planner-rank-change}.
2566 @end defopt
2568 @defopt planner-rank-priority-A-valve
2569 Tasks with rank greater than or equal to this value will be set to
2570 priority @samp{A}.
2571 @end defopt
2573 @defopt planner-rank-priority-B-valve
2574 Tasks with rank greater than or equal to this value and less than
2575 @code{planner-rank-priority-A-valve} will be set to priority
2576 @samp{B}. Tasks with rank less than this value will be set to priority
2577 @samp{C}.
2578 @end defopt
2580 @defopt planner-rank-deadline-urgency-map-list
2581 Defines how to calculate the Urgency score according to how many days
2582 are left to meet the deadline.
2583 @end defopt
2585 @defopt planner-rank-default-importance
2586 Default importance value for newly added rank.
2587 @end defopt
2589 @defopt planner-rank-default-urgency
2590 Default urgency value for newly added rank.
2591 @end defopt
2593 @defopt planner-rank-importance-vs-urgency-factor
2594 How much do you think importance is more ``important'' than urgency.
2595 This will be used in @code{planner-rank-calculate-rank-weighted-*}
2596 functions.
2597 @end defopt
2599 @defopt planner-rank-rank-calculate-function
2600 Define the function called to calculate rank.
2601 @end defopt
2603 @subheading Functions
2605 @defun planner-rank-change &optional importance urgency
2606 Set the Importance and Urgency of the current task.
2607 @end defun
2609 @defun planner-rank-update-current-task
2610 Recalculate rank for the current task.
2611 @end defun
2613 @defun planner-rank-update-all
2614 Recalculate rank for all tasks in the current page
2615 @end defun
2617 @defun planner-rank-update-all
2618 Recalculate rank for all tasks in the current page
2619 @end defun
2621 @node Grouping Tasks,  , Task Ranks, Organizing Your Tasks
2622 @comment  node-name,  next,  previous,  up
2623 @subsubsection Grouping Tasks with planner-trunk.el
2624 @cindex grouping tasks
2625 @cindex tasks, grouping
2626 @cindex @file{planner-trunk.el}, using
2628 @file{planner-trunk.el} helps you automatically group tasks according
2629 to a set of rules. It sorts and splits your tasks, adding a blank line
2630 between groups of tasks. For example, if today's page looks like this:
2632 @example
2633 * Tasks
2635 #B   _ Buy milk (GroceryShopping)
2636 #B   _ Learn how to use planner-trunk (PlannerMode)
2637 #B   _ Buy a notebook (Bookstore)
2638 #B   _ Buy cereal (GroceryShopping)
2639 #B   _ Set up my own planner-trunk rules (PlannerMode)
2640 #B   _ Customize my stylesheet (MuseMode)
2641 #B   _ Go for a health checkup (BetterHealth)
2642 @end example
2644 @noindent
2645 then you might want to group the tasks into: planner and muse,
2646 shopping list, and other items. If you set up the appropriate rules by
2647 customizing @code{planner-trunk-rule-list}, @file{planner-trunk.el}
2648 can automatically rewrite that section line this:
2650 @example
2651 * Tasks
2653 #B   _ Learn how to use planner-trunk (PlannerMode)
2654 #B   _ Set up my own planner-trunk rules (PlannerMode)
2655 #B   _ Customize my stylesheet (MuseMode)
2657 #B   _ Buy milk (GroceryShopping)
2658 #B   _ Buy a notebook (BookstoreShopping)
2659 #B   _ Buy cereal (GroceryShopping)
2661 #B   _ Go for a health checkup
2662 @end example
2664 @noindent
2665 In this case, you would set @code{planner-trunk-rule-list}
2666 to @code{(("." nil ("PlannerMode\\|MuseMode" "Shopping")))}.
2668 You can load @file{planner-trunk} with @kbd{M-x load-library RET
2669 planner-trunk RET} or add @code{(require 'planner-trunk)}. If you're
2670 not yet comfortable with Emacs Lisp, you can use @kbd{M-x
2671 customize-variable RET planner-trunk-rule-list RET} to edit this rule
2672 using an easy-to-use interface.
2674 WARNING: Do not keep non-task information in the Tasks section.
2675 planner-trunk will delete @strong{all} non-task lines from the Tasks
2676 section of your plan page in the process of grouping the tasks.
2678 After you set up @code{planner-trunk-rule-list}, use @command{M-x
2679 planner-trunk-tasks} to try out your rules until you're satistfied.
2681 If you want to do this automatically, you can use @code{(add-hook
2682 'planner-mode-hook 'planner-trunk-tasks)} to trigger it automatically
2683 whenever you open a Planner page.
2685 @node Task Reports and Overviews,  , Organizing Your Tasks, More about Tasks
2686 @subsection Task Reports and Overviews
2687 @cindex task reports
2688 @cindex task overviews
2689 @cindex reports, task
2690 @cindex overviews, task
2691 @cindex reports, accomplishment
2692 @cindex tasks, overview of
2694 Planner provides a number of different ways to generate different
2695 presentations of your tasks.
2697 @menu
2698 * Accomplishments::             planner-accomplishments.el
2699 * Status Reports::              planner-report.el
2700 * Task Overviews::              planner-tasks-overview.el
2701 * <tasks> tag::             
2702 * planner-registry::            Keep track of annotations
2703 * planner-zoom::                View and navigate tasks by time period
2704 @end menu
2706 @node Accomplishments, Status Reports, Task Reports and Overviews, Task Reports and Overviews
2707 @comment  node-name,  next,  previous,  up
2708 @subsubsection Generating Daily Accomplishment Reports
2709 @cindex reports, accomplishment
2710 @cindex @file{planner-accomplishments.el}, using
2711 @cindex tasks, overview of
2712 @cindex task reports
2713 @cindex reports, task
2714 @cindex overviews, task
2715 @cindex task overviews
2717 You can use @file{planner-accomplishments.el} to get a summary of your
2718 task activity for a particular day. The report is grouped by status
2719 and plan (on day pages) or date (on plan pages). An example report
2720 follows:
2722 @example
2723 Link        | Unfinished | In progress | Delegated | Completed | Total
2724 nil         | 1          | 0           | 0         | 6         | 7
2725 TaskPool    | 1          | 1           | 0         | 3         | 5
2726 Planner     | 0          | 0           | 1         | 1         | 2
2727 SchoolWork  | 0          | 0           | 0         | 1         | 1
2728 Total       | 2          | 1           | 1         | 11        | 15
2729 @end example
2731 This lets you see how you balance your time between your projects.
2733 @itemize
2735 There are currently two ways to use @file{planner-accomplishments.el}.
2737 @item Displaying a temporary buffer
2739 You can call @code{planner-accomplishments-show} to display a buffer
2740 containing the current page's accomplishment report.
2742 @item Rewriting sections of your planner
2744 Choose this approach if you want accomplishment reports to be in
2745 their own section and you would like them to be readable in your
2746 plain text files even outside Emacs. Caveat: The accomplishment
2747 section should already exist in your template and will be rewritten
2748 when updated.
2750 To use, set @code{planner-accomplishments-section} to the name of the
2751 section to rewrite (default: @samp{Accomplishments}). If you want
2752 rewriting to be automatically performed, call
2753 @code{planner-accomplishments-insinuate}. The accomplishments will be
2754 rewritten whenever you save a planner page. If you want rewriting to
2755 be manual, call @code{planner-accomplishments-update}.
2757 @end itemize
2759 @subheading Options
2761 @defopt planner-accomplishments-section
2762 Header for the accomplishments section in a plan page.
2763 Used by @code{planner-accomplishments-update}.
2764 @end defopt
2766 @defopt planner-accomplishments-status-display
2767 Alist of status-label maps also defining the order of display.
2768 Used by @code{planner-accomplishments-format-table}.
2769 @end defopt
2771 @subheading Functions
2773 @defun planner-accomplishments-insinuate ()
2774 Automatically call @code{planner-accomplishments-update} when saving
2775 tasks in @code{planner-mode} buffers.
2776 @end defun
2778 @defun planner-accomplishments-update ()
2779 Rewrite @code{planner-accomplishments-section} with a summary of tasks
2780 on this page.
2781 @end defun
2783 @defun planner-accomplishments-show ()
2784 Display a buffer with the current page's accomplishment report.
2785 @end defun
2787 @node Status Reports, Task Overviews, Accomplishments, Task Reports and Overviews
2788 @comment  node-name,  next,  previous,  up
2789 @subsubsection Status Reports
2790 @cindex status reports
2791 @cindex reports, status
2792 @cindex @file{planner-report.el}, using
2794 @file{planner-report.el} creates a status report for a given timespan.
2795 The report itself is just another Planner page in your planner
2796 directory.  Once generated, it contains tasks and notes culled from
2797 active project pages.  Tasks are only shown if they are incomplete or
2798 were completed within the timespan.  Notes are shown if they were
2799 created during the timespan.  Tasks and notes are grouped together under
2800 a heading for their corresponding project.
2802 The idea is you have one of these status reports generated periodically
2803 (say, every couple of weeks).  Perhaps you use cron to run them
2804 automatically and then mail you a reminder that they've been done.  Then
2805 you can edit the page, adding verbiage where it is needed and removing
2806 irrelevant items.  This editing process is as easy as editing any other
2807 Planner page.  Finally, you can publish the page along with the rest of
2808 your planner using @kbd{M-x muse-project-publish}.
2810 If you use planner-authz.el, you can tell planner-report.el only to
2811 consult project pages that a given list of users
2812 (@var{planner-report-authz}) can access when generating the report.  For
2813 example, if you're preparing a status report for your boss, add yourself
2814 and him to @var{planner-report-authz}.  The resulting status report will
2815 only contain information the two of you are supposed to have access to,
2816 and the report itself will be similarly restricted.
2818 @subheading Getting started
2820 Add the following to your .emacs file:
2822 @example
2823 (require 'planner-report)
2824 @end example
2826 Then you can use the following command to generate a status report:
2828 @example
2829 M-x planner-report-generate
2830 @end example
2832 You will be prompted for a beginning and ending date, and then the
2833 status report will be generated.  You can then edit it to your liking
2834 and publish it just like you would the rest of your planner.
2836 @subheading Options
2838 @defopt planner-report-authz
2839 List of users a status report should be restricted to.
2840 When status reports are generated, only planner pages accessible
2841 by these users will be consulted, and the resulting status report
2842 will be similarly restricted.
2843 @end defopt
2845 @defopt planner-report-pretty-print-plan-pages
2846 If non-nil, pretty print plan pages.
2847 If nil, leave page names as-is.
2848 This requires that @file{muse-wiki.el} be loaded to work properly.
2849 @end defopt
2851 @defopt planner-report-remove-task-numbers
2852 Remove task numbers when generating status reports.
2853 @end defopt
2855 @defopt planner-report-replace-note-numbers
2856 If non-nil, a string with which to replace note numbers when
2857 generating status reports.
2858 @end defopt
2860 @defopt planner-report-unfinished-offset
2861 If non-nil, the offset in days from the current date of
2862 unfinished tasks to include in the status report.  If nil,
2863 include all unfinished tasks.
2864 @end defopt
2866 @subheading Functions
2868 @defun planner-report-generate begin end
2869 Generate a status report spanning a period from @var{begin} to @var{end}.
2870 @var{begin} and @var{end} are in the format YYYY.MM.DD.
2871 @end defun
2873 @node Task Overviews, <tasks> tag, Status Reports, Task Reports and Overviews
2874 @comment  node-name,  next,  previous,  up
2875 @subsubsection Seeing an Overview of Tasks
2876 @cindex tasks, overview of
2877 @cindex task reports
2878 @cindex reports, task
2879 @cindex overviews, task
2880 @cindex task overviews
2881 @cindex @file{planner-tasks-overview.el}, using
2883 You can see a list of tasks with @file{planner-tasks-overview.el}.
2884 Seeing how you've scheduled tasks over the next few days can help you
2885 decide when to schedule another task. Table entries will be of the form
2887 @var{date} | @var{link} | @var{priority} @var{status} | @var{task-description}
2889 @subheading Functions
2891 To display the tasks between a set of day pages, use
2893 @defun planner-tasks-overview start end
2894 Display an overview of your tasks from @var{start} to @var{end}. If
2895 @var{start} is nil, start from the very first day page. If @var{end}
2896 is nil, include the very last day page. You can use
2897 @code{planner-expand-name} shortcuts here, like @kbd{+1} or @kbd{-1}.
2898 Pressing @key{RET} at the prompt will use today.
2900 Once in a @code{planner-tasks-overview} buffer, you can use
2901 the keyboard shortcut @key{o} to change the overview period.
2902 @end defun
2904 You can sort the task display with the following functions:
2906 @defun planner-tasks-overview-sort-by-date
2907 Sort the tasks by date. Keyboard shortcut: @key{1}
2908 @end defun
2910 @defun planner-tasks-overview-sort-by-plan
2911 Sort the tasks by associated plan page. Keyboard shortcut: @key{2}
2912 @end defun
2914 @defun planner-tasks-overview-sort-by-priority
2915 Sort the tasks by priority. Keyboard shortcut: @key{3}
2916 @end defun
2918 @defun planner-tasks-overview-sort-by-status
2919 Sort the tasks by status. Keyboard shortcut: @key{4}
2920 @end defun
2922 You can jump to linked tasks with
2924 @defun planner-tasks-overview-jump other-window
2925 Display the current task. If a prefix argument is supplied, show the
2926 task in another window. Keyboard shortcut: @key{j}
2927 @end defun
2929 @defun planner-tasks-overview-jump-other-window
2930 Display the current task in another window. Keyboard shortcut: @kbd{C-u j}
2931 @end defun
2933 You can view a summary of the tasks in your plan pages with
2935 @defun planner-tasks-overview-show-summary &optional file-list
2936 Count unscheduled, scheduled, and completed tasks for FILE-LIST. If
2937 called with an interactive prefix, prompt for the plan page(s) to
2938 display. Load @file{planner-multi.el} to be able to specify multiple
2939 pages.
2940 @end defun
2942 @subheading Keys
2944 @key{TAB}, @kbd{SHIFT-TAB} and @key{RET} navigate links in the usual
2945 fashion.
2947 @node <tasks> tag, planner-registry, Task Overviews, Task Reports and Overviews
2948 @subsubsection <tasks> tag
2949 @cindex <tasks> tag
2950 @cindex task reports
2951 @cindex reports, task
2952 @cindex overviews, task
2953 @cindex task overviews
2954 @cindex tasks, overview of
2956 @samp{<tasks>} is replaced by a report of tasks over all day pages in
2957 published pages (@pxref{Publishing}).
2959 @example
2960 All incomplete tasks
2962 <tasks status="^X">
2964 All completed tasks
2966 <tasks status="X">
2968 All tasks
2970 <tasks>
2971 @end example
2973 Warning: this function can be slow, as it checks all the day pages!
2975 @node planner-registry, planner-zoom ,<tasks> tag, Task Reports and Overviews
2976 @comment  node-name,  next,  previous,  up
2977 @section planner-registry
2978 @cindex @file{planner-registry.el}, using
2980 The @file{planner-registry} module provides a way to keep track of all
2981 the URLs in your projects, and to list them depending on the current
2982 buffer.  The URLs are defined in @code{muse-url-protocols} module from
2983 Muse.
2985 If a URL has been created by @code{planner-create-task-from-buffer},
2986 going to that buffer and calling @code{planner-registry-show} will show
2987 you where Planner put the URL.
2989 @subheading Getting started
2991 To begin using @file{planner-registry}, add the following to your
2992 Planner configuration file.
2994 @example
2995 (require 'planner-registry)
2996 (planner-registry-initialize)
2997 @end example
2999 You must put it after the place where Planner has been loaded in your
3000 configuration file.
3002 If you want the registry to be updated each time you save a Planner
3003 file, add the following to your Planner configuration.
3005 @example
3006 (planner-registry-insinuate)
3007 @end example
3009 If you don't want to update the registry each time a file is written,
3010 you can do it manually with @code{planner-registry-update}: it will
3011 update the registry for saved Planner/Muse buffers only.
3013 @file{planner-registry} does not define any keybindings by default.  Its
3014 most useful interactive function is @code{planner-registry-show}.
3016 @subheading Example usage
3018 Say for example that you created a task from an e-mail.  Go to that
3019 e-mail and call @code{planner-registry-show}: it will open a new buffer
3020 displaying the files (in a muse links format) where a link to this
3021 e-mail has been added.
3023 @subheading Options
3025 @file{planner-registry} defines the following options.
3027 @defopt planner-registry-file
3028 The file where @file{planner-registry} stores its URL registry.
3029 @end defopt
3031 @defopt planner-registry-min-keyword-size
3032 The minimum size for keywords.
3033 @end defopt
3035 @defopt planner-registry-max-keyword-size
3036 The maximum size for keywords.
3037 @end defopt
3039 @defopt planner-registry-max-number-of-keywords
3040 The maximum number of keywords.
3041 @end defopt
3043 @defopt planner-registry-ignore-keywords
3044 A list of keywords to ignore.
3045 @end defopt
3047 @defopt planner-registry-show-level
3048 Level used by the @code{planner-registry-show} function.
3049 0 means that this function shows only exact matches.
3050 1 means that this function also shows descriptive matches.
3051 2 (or more) means that this function also shows fuzzy matches.
3052 @end defopt
3054 @node planner-zoom, , planner-registry, Task Reports and Overviews
3055 @comment  node-name,  next,  previous,  up
3056 @section planner-zoom
3057 @cindex @file{planner-zoom.el}, using
3058 @cindex view, weekly
3059 @cindex view, quarterly
3060 @cindex view, monthly
3061 @cindex view, yearly
3063 When assessing where you stand in relation to the tasks you have set
3064 out for yourself, you might want a way to survey those tasks in groups
3065 divided by time periods, like by the week or by the month. You could
3066 create all of these overview pages by hand, but if you like to have
3067 this kind of overview frequently, you might find manually creating
3068 such pages to be tedious and time consuming.
3070 @file{planner-zoom} is an optional module designed to make it easy to
3071 view your task information grouped by year, quarter, month, week or
3072 day.
3074 To install this module, just load it in your @file{.emacs} (or
3075 @file{_emacs}):
3077 @example
3078 (require 'planner-zoom)
3079 @end example
3081 This module will recognize planner pages named according to the
3082 following scheme:
3084 @table @asis
3086 @item year view
3087 @file{2006.Year}
3089 @item quarter view
3090 @file{2006.Quarter2}
3092 @item month view
3093 @file{2006.January}
3095 @item week view
3096 @file{2006.January.Week3}
3098 @item day view
3099 @file{2006.01.02}
3101 @end table
3103 @subheading Keybindings
3105 This module also adds key bindings that you can use when looking at a
3106 Planner page to easily jump between the different time-period views.
3108 @table @kbd
3110 @item S-up
3111 Move to the view corresponding to the time period one step larger than
3112 the current one. For example, it moves from the weekly view to the
3113 monthly view. It calls @code{planner-zoom-iup}.
3115 @item S-down 
3116 Move to the view corresponding to the time period one step smaller
3117 than the current one. For example, it moves from the weekly view to
3118 the daily view. It calls @code{planner-zoom-idown}.
3120 @item S-left
3121 Stay in the same time-period view as the current one, but move one
3122 interval earlier. For example, it moves from @file{2006.January.Week3}
3123 to @file{2006.January.Week2}. It calls @code{planner-zoom-iprev}.
3125 @item S-right
3126 Stay in the same time-period view as the current one, but move one
3127 interval later. For example, it moves from @file{2006.January.Week3}
3128 to @file{2006.January.Week4}. It calls @code{planner-zoom-inext}.
3130 @end table
3132 @subheading Example usage
3134 Look at the page named @file{2006.January} and then hit @kbd{S-down}
3135 which will show @file{2006.January.Week1}. Then hit @kbd{S-left} and
3136 @kbd{S-right} to look at @file{2006.January.Week2},
3137 @file{2006.January.Week3}, etc.
3139 @subheading Advanced tips and options
3141 You can use any prefix argument with @code{planner-zoom-iup} and
3142 @code{planner-zoom-idown} to have the new view display in a window
3143 other than the current one. This also works with a nonnumeric prefix
3144 argument and @code{planner-zoom-inext} or @code{planner-zoom-iprev}.
3145 For these two functions, a numeric prefix will specify the number of
3146 intervals to move.
3148 If you don't like the default patterns for naming the time-period view
3149 pages, you can change them by customizing @code{planner-zoom-regexps}.
3151 Some people believe weeks start with Sunday, and some believe they
3152 start with Monday. To accommodate both of these colliding worldviews,
3153 @code{planner-zoom-first-day-of-week} can be customized. Its default
3154 value is @samp{1}, which is Monday. If you would prefer Sunday, change
3155 it to @samp{0}. The month to which a week belongs is the month in
3156 which the first day of the week falls.
3158 @subheading Command reference
3160 @defun planner-zoom-iup name other-window
3161 Move to the next higher level in the hierarchy. With a prefix
3162 argument, show the desired page in the other window.
3163 @end defun
3165 @defun planner-zoom-idown name other-window
3166 Move to the next lower level in the hierarchy. If the current date is
3167 within the higher-level time range, zoom to the lower level time range
3168 that also contains today. Otherwise, just go to the first lower-level
3169 time range. With a prefix argument, show the desired page in the other
3170 window.
3171 @end defun
3173 @defun panner-zoom-inext name num other-window
3174 Move to the next time range at the same level in the hierarchy. With a
3175 numeric prefix argument, move by that number of time ranges. With a
3176 non-numeric prefix argument, show the desired page in the other window.
3177 @end defun
3179 @defun planner-zoom-iprev name num other-window
3180 Move to the previous time range at the same level in the hierarchy.
3181 With a numeric prefix argument, move by that number of time ranges.
3182 With a non-numeric prefix argument, show the desired page in the other
3183 window.
3184 @end defun
3186 @node More about Notes, Making Files Pretty, More about Tasks, More about Planner
3187 @section More about Notes
3188 @cindex notes, more about
3190 Planner by default organizes the notes on a planner page so that
3191 the most recent note is first. Each note is numbered, with the oldest
3192 note labeled @samp{.#1}. If you would like to reverse this behavior,
3193 look at @kbd{C-h v planner-reverse-chronological-notes}.
3195 Notes are associated with day pages, but can also be associated with
3196 plan pages when they are created.  A linked note looks like this:
3198 @example
3199 .#1 Headline (LinkedNote#1)
3200 Text
3201 @end example
3203 You can jump to the linked note with
3204 @command{planner-jump-to-linked-note}.
3206 Deleting a note can be dangerous, as the notes are automatically
3207 numbered.  Removing a note could break links in other pages.
3209 @subheading Functions
3211 @defun planner-create-note page
3212 Create a note to be remembered in @var{page} (today if @var{page} is
3213 nil).  If @code{planner-reverse-chronological-notes} is non-nil, create
3214 the note at the beginning of the notes section; otherwise, add it to
3215 the end.  Position point after the anchor.
3216 @end defun
3218 @defun planner-create-note-from-task
3219 Create a note based on the current task and update the current task to
3220 link to the note.
3221 @end defun
3223 @defun planner-renumber-notes
3224 Update note numbering.
3225 @end defun
3227 @defun planner-jump-to-linked-note note-info
3228 Display the note linked to by the current note or @var{note-info} if
3229 non-nil.
3230 @end defun
3232 @defun planner-search-notes regexp limit
3233 Return a buffer with all the notes returned by the query for
3234 @var{regexp}.  If called with a prefix argument, prompt for
3235 @var{limit} and search days on or after @var{limit}.
3236 @end defun
3238 The following sections include instructions for displaying,
3239 manipulating, and navigating your notes efficiently.
3241 @menu
3242 * Using Allout Mode::           Quickly navigating your notes
3243 * <notes>::                     Note headlines
3244 * <past-notes>::                Index of past notes
3245 * Note Indices::                planner-notes-index.el
3246 @end menu
3248 @node Using Allout Mode, <notes>, More about Notes, More about Notes
3249 @subsection Using Allout Mode
3250 @cindex Allout mode
3251 @cindex notes, navigating
3252 @cindex notes, formatting
3253 @cindex notes, displaying
3255 The format of the notes in Planner works well with Allout mode, which
3256 provides helpful commands for navigating and formatting outlines. You
3257 can, for example, hide the bodies of all the notes on a page so you can
3258 see just their headlines. You can also jump easily from headline to
3259 headline, skipping over the bodies in between.
3261 The commands for using Allout mode vary depending on which Emacs
3262 version you are using. In either case, type @kbd{M-x load-library
3263 @key{RET} allout @key{RET}} to start. If you are using Emacs 22 or
3264 later, type @kbd{M-x allout-mode @key{RET}}. If you are using an
3265 earlier version of Emacs, type @kbd{M-x outline-mode @key{RET}}.
3267 The exact commands then available to you differ depending on your
3268 Emacs version, but you can view the commands and their keybindings by
3269 typing @kbd{C-h m}. In Emacs 22 or later, they will start with
3270 @command{allout-}, while in previous versions, they will start with
3271 @command{outline-}.
3273 For more information about using Allout mode, see @kbd{C-h f
3274 allout-mode @key{RET}}.
3276 @node <notes>, <past-notes>, Using Allout Mode, More about Notes
3277 @subsection <notes>
3279 @samp{<notes>} is replaced by a list of note headlines when the page
3280 is published. For example, the notes tag in the following example will
3281 be replaced by the two headlines when published. (@pxref{Publishing})
3283 @example
3284 <notes>
3286 * Notes
3288 .#1 This is a headline
3290 and this is body text
3292 .#2 This is another headline
3294 and this is more body text
3295 @end example
3297 @samp{<notes>} is useful if you want to provide a quick summary of
3298 blog entries at the top of your page. Just add it to your
3299 @code{planner-day-page-template}.
3301 @node <past-notes>, Note Indices, <notes>, More about Notes
3302 @subsection <past-notes>
3304 @samp{<past-notes>} is replaced by an index of note headlines.
3305 If @var{start} is specified, it lists notes starting from that date.
3306 If @var{directory} is specified, you can index notes in another
3307 planner directory.
3309 @example
3310 All the notes I've taken in 2004:
3312 <past-notes start="2004.01.01" end="2004.12.31">
3313 @end example
3315 @node Note Indices,  , <past-notes>, More about Notes
3316 @comment  node-name,  next,  previous,  up
3317 @subsection Note Indices
3318 @cindex @file{planner-notes-index.el}, using
3319 @cindex notes, indexing
3321 Make sure that @file{planner-notes-index.el} is in your load path and
3322 add this to your @file{.emacs} (or @file{_emacs}):
3324 @example
3325 (require 'planner-notes-index)
3326 @end example
3328 Then you can use tags of the form:
3330 @example
3331 <planner-notes-index page="2004.03.02">
3332 <planner-notes-index from="2004.03.01" to="2004.03.31">
3333 <planner-notes-index limit="10">
3334 <planner-notes-index page="PlanPage">
3335 <planner-notes-index-month-table month="2004.03" limit="5">
3336 <planner-notes-index-month-table month="2004.03">
3337 @end example
3339 You can also use the following interactive functions:
3341 @code{planner-notes-index}
3342 @code{planner-notes-index-days}
3343 @code{planner-notes-index-weeks}
3344 @code{planner-notes-index-months}
3345 @code{planner-notes-index-years}    (wow!)
3347 These work based on the current date (date of current buffer, or today).
3349 If a single page is specified, this page is scanned for headlines
3350 of the form:
3352 @example
3353  .#1 Headline
3354 @end example
3356 The results are presented as a bulleted list.
3358 If @var{from} and @var{to} are specified, all date pages between them
3359 (inclusive) are scanned. If @var{from} is omitted, it is assumed to be
3360 the earliest entry.  If @var{to} is omitted, it is assumed to be the
3361 latest entry.
3363 If @var{recent} is specified, the list includes only that many recent
3364 headlines.  and the results are presented as a bulleted list.
3366 To customize presentation, you can write a function that generates
3367 the appropriate @code{<planner-notes-index>} tags. You can also use
3368 @code{planner-extract-note-headlines} in your own functions.
3370 @subheading Functions
3372 The following interactive functions are defined in
3373 @file{planner-notes-index.el}:
3375 @defun planner-notes-index &optional from to limit
3376 Display a clickable notes index. If called from a Lisp program,
3377 display only dates between @var{from} and @var{to}. With a prefix arg
3378 @var{limit}, display only that number of entries.
3379 @end defun
3381 @defun planner-notes-index-days days
3382 Display an index of notes posted over the past few @var{days}. The
3383 list ends with the day of the current buffer or @code{planner-today}.
3384 @end defun
3386 @defun planner-notes-index-weeks weeks
3387 Display an index of notes posted over the past few @var{weeks}. The
3388 list ends with the week of the current buffer or
3389 @code{planner-today}. Weeks start from Sunday.
3390 @end defun
3392 @defun planner-notes-index-months months
3393 Display an index of notes posted over the past few @var{months}. The
3394 list ends with the month of the current buffer or @code{planner-today}.
3395 @end defun
3397 @defun planner-notes-index-years years
3398 Display an index of notes posted over the past few @var{years}. The
3399 current year is included.
3400 @end defun
3402 @file{planner-notes-index.el} does not define any keybindings.
3405 @node Making Files Pretty, Annotations, More about Notes, More about Planner
3406 @section Making Files Pretty
3408 By default, planner does a little bit of fancy reformatting when you
3409 save a file. Tasks are sorted by priority (ABC) and status (_oP>XC) on
3410 day pages. On plan pages, tasks are sorted by priority (ABC), status
3411 (XC), and date. Undated tasks are sorted after dated tasks.
3413 @subheading Options
3415 @defopt planner-sort-tasks-key-function
3416 Control task sorting. Some options include
3417 @code{planner-sort-tasks-default-key},
3418 @code{planner-sort-tasks-basic}, @code{planner-sort-tasks-by-date}, and
3419 @code{planner-sort-tasks-by-link}.
3420 @end defopt
3422 @defopt planner-sort-undated-tasks-equivalent
3423 This option controls the behavior of task sorting on plan pages.  By
3424 default, the value @samp{9999.99.99} causes dated tasks to be listed
3425 before undated tasks.  To sort undated tasks before dated tasks,
3426 set this to a blank string.
3427 @end defopt
3429 @defopt planner-sort-tasks-automatically
3430 Non-nil means sort tasks whenever a planner file is saved.  On day
3431 pages, tasks are sorted by status.  On plan pages, they are sorted by
3432 status and date.  Sorting can take a while.
3433 @end defopt
3435 @defopt planner-renumber-tasks-automatically
3436 Non-nil means renumber tasks from 1 to N whenever a planner file is
3437 saved. This allows you to refer to tasks in previous day pages using
3438 anchors like @samp{2003.08.12#A1}. If you use this function, make sure
3439 @code{planner-use-task-numbers} is non-nil so that new tasks are created
3440 with task numbers.
3441 @end defopt
3443 @defopt planner-align-tasks-automatically
3444 Non-nil means align tasks whenever a planner file is saved.  This
3445 causes the status to line up in a neat column if you have less than
3446 100 tasks.
3447 @end defopt
3449 @defopt planner-renumber-notes-automatically
3450 Non-nil means renumber the notes. If most of your notes are only on
3451 one page, you might like seeing the notes renumbered if you delete a
3452 note in the middle. However, if you use a lot of cross-referencing,
3453 note renumbering will break those links.
3454 @end defopt
3456 @subheading Functions
3458 @defun planner-sort-tasks
3459 Sort tasks according to planner-sort-tasks-key-function. By default,
3460 sort tasks according to priority and position on day pages, and
3461 according to status, priority, date, and position on plan pages.
3462 @end defun
3464 @defun planner-renumber-tasks
3465 Update task numbering.
3466 @end defun
3468 @defun planner-align-tasks
3469 Align tasks neatly. You can add this to @code{write-file-functions} to
3470 have the tasks automatically lined up whenever you save.  For best
3471 results, ensure @code{planner-align-tasks} is run after
3472 @code{planner-renumber-tasks}.
3473 @end defun
3475 @defun planner-fix-tasks
3476 Sort, renumber and align tasks.
3477 @end defun
3479 @node Annotations, Interactive Lisp, Making Files Pretty, More about Planner
3480 @comment  node-name,  next,  previous,  up
3481 @section Annotations
3483 The context included when you create a task and the context included
3484 when you create a note are gained the same way. It sounds like black
3485 magic, but it turns out not to be.
3487 All that happens is, Planner has a list of functions,
3488 @code{planner-annotation-functions}. When you create a task from a
3489 buffer, or remember a note from a buffer, Planner goes through
3490 this list from top to bottom. The first one that returns true is the
3491 one it uses.
3493 For example, if you're in Wanderlust, and you hit the key you've bound
3494 to @code{planner-create-task-from-buffer}, it looks at this list and
3495 does something like this.  Is it an ERC buffer? No. Is it a BBDB
3496 buffer? No. Are we in w3m? No. Are we in Wanderlust? Yes. So this
3497 function succeeds. It stops searching and runs the annotation function
3498 for Wanderlust, which in this case finds out who the message is from
3499 and what the message ID of the message is. It then takes those and
3500 constructs a link back to that message, with a link title something
3501 like @samp{Email from Joe Blogs}.
3503 So, you've read the email from Joe Blogs. He's asked you to do
3504 something and you've hit your key to add that task to your list of
3505 things to do. So what you end up with is a description of the task,
3506 and a link back to what made you create the task in the first place.
3508 The same happens with remembering notes, except that it ends up in the
3509 @samp{* Notes} section of your page instead.
3511 @subheading Options
3513 To change the behavior of annotations, customize the following options:
3515 @defopt planner-annotation-functions
3516 A list of functions tried in order by
3517 @command{planner-create-task-from-buffer} and other functions that
3518 pick up context.  The first non-nil value returned is used as the
3519 annotation.  To cause an item to @strong{not} be annotated, return the
3520 empty string @samp{""}.
3521 @end defopt
3523 @defopt planner-annotation-strip-directory
3524 File links are usually generated with the full path to the file so
3525 that you can easily tell apart files with the same base name.  If
3526 @code{planner-annotation-strip-directory} is non-nil, though, only the
3527 base name of the file will be displayed.  For example, a link to
3528 @samp{/foo/bar/baz} will be displayed as @samp{baz} and hyperlinked to
3529 the file.
3530 @end defopt
3532 @defopt planner-annotation-use-relative-file
3533 If t, always use relative filenames.
3534 @code{planner-annotation-use-relative-file} can also be a function that
3535 takes the filename and returns non-nil if the link should be relative.
3536 Filenames are resolved relative to the first directory of your Planner
3537 project in @code{muse-project-alist}.  That is, the created link will be
3538 of the form @samp{../../somefile} instead of
3539 @samp{/absolute/path/to/file}.  This can be helpful if you publish your
3540 planner files to the Net and your directory structure ensures that
3541 relative links resolve the same from your Plan pages and their
3542 respective publishing directory.
3543 @end defopt
3545 @node Interactive Lisp, Publishing, Annotations, More about Planner
3546 @comment  node-name,  next,  previous,  up
3547 @section Interactive Lisp with planner-lisp.el
3548 @cindex Lisp functions, using with Planner
3549 @cindex interactive Lisp fuctions, using with Planner
3550 @cindex @file{planner-lisp.el}, using
3552 You can include interactive Lisp functions in your planner pages.
3554 First, you need @file{planner-lisp.el}. Put this in your @file{.emacs}
3555 (or @file{_emacs}):
3557 @example
3558 (require 'planner-lisp)
3559 @end example
3561 Then, add a link to the Lisp function to your page, like:
3563 @example
3565 [[lisp:/plan][Plan]]
3567 @end example
3569 This will be rendered as @samp{Plan}. Selecting the link will run the
3570 @code{plan} function interactively.
3572 You can also execute other Lisp expressions. For example:
3574 @example
3575 [[lisp:/(planner-goto (planner-expand-name "+7"))][Next week]]
3576 @end example
3578 @file{planner-lisp.el} does not provide any interactive functions or
3579 keybindings.
3581 @node Publishing, Experimental Functions, Interactive Lisp, More about Planner
3582 @section Publishing
3583 @cindex publishing
3585 You can publish your planner files to a variety of different formats.
3586 For example, you can publish your planner in HTML and put it on a
3587 normal web server. No special server support is required. This gives
3588 you an easy way to keep other people up to date on your tasks, keep a
3589 web log, or simply organize information.
3591 Published files are stored in the path specified by
3592 @code{muse-project-alist} for your Planner project. Just copy the
3593 contents of this directory to your web server, and you're all set! Of
3594 course, publishing is completely optional.
3596 Here are some more features related to publishing:
3598 @menu
3599 * Publishing Planner pages::    planner-publish.el
3600 * Publishing Calendars::        planner-calendar.el
3601 * Authz Access Restriction::    planner-authz.el
3602 * RSS Publication::             Sharing notes with planner-rss.el
3603 * iCal Task Publication::       Sharing tasks with planner-ical.el
3604 * RDF Publication::             planner-rdf.el
3605 @end menu
3607 @node Publishing Planner pages, Publishing Calendars, Publishing, Publishing
3608 @comment  node-name,  next,  previous,  up
3609 @subsection Publishing Planner pages
3610 @cindex publishing
3611 @cindex @file{planner-publish.el}, using
3613 Publishing works by providing Muse with the settings and environment for
3614 Planner publishing.
3616 First, make sure that you have set up a proper
3617 @code{muse-project-alist} (@pxref{Creating Your Planner}).
3619 Second, add:
3621 @example
3622 (require 'planner-publish)
3623 @end example
3625 to your @file{.emacs} (or @file{_emacs}).
3627 To publish your entire Planner project, hit @kbd{C-c C-p}
3628 (@code{muse-project-publish}). To publish just the current buffer, hit
3629 @kbd{C-c C-t} (@code{muse-publish-this-file}).
3631 To automatically publish files when you save them, add the following
3632 code to your @file{~/.emacs} (or @file{_emacs}):
3634 @example
3635 (eval-after-load "muse-mode"
3636   (add-hook 'after-save-hook
3637             #'(lambda ()
3638                 (when (planner-derived-mode-p 'muse-mode)
3639                   (muse-project-publish nil)))
3640             nil t))
3641 @end example
3643 @subheading Styles provided
3645 The following publishing styles are available.
3647 @table @code
3649 @cindex publishing styles, planner-html
3650 @item planner-html
3651 Publish Planner pages to HTML.
3653 @cindex publishing styles, planner-xhtml
3654 @item planner-xhtml
3655 Publish Planner pages to XHTML.
3657 @cindex publishing styles, planner-xml
3658 @item planner-xml
3659 Publish Planner pages to XML.
3661 @end table
3663 @subheading Options provided
3665 The following options may be customized to enhance your publishing
3666 experience.
3668 @table @code
3670 @item planner-publish-markup-regexps
3671 List of markup rules for publishing Planner pages.
3673 @item planner-publish-markup-functions
3674 Specify which function to use for publishing different kinds of markup.
3676 @item planner-publish-markup-tags
3677 A list of custom HTML-like tags to recognize when publishing.
3679 @item planner-xml-markup-strings
3680 Strings that are inserted to publish XML markup.
3682 @item planner-xml-header
3683 Header used when publishing Planner XML files.
3684 This may be text or a filename.
3686 @item planner-xml-footer
3687 Footer used when publishing Planner XML files.
3688 This may be text or a filename.
3690 @item planner-html-markup-strings
3691 Strings that are inserted to publish HTML markup.
3693 @item planner-html-style-sheet
3694 CSS stylesheet elements used in Planner HTML and XHTML files.
3695 This can also be one or more @samp{<link>} tags.
3697 @item planner-html-header
3698 Header used when publishing Planner HTML files.
3699 This may be text or a filename.
3701 @item planner-html-footer
3702 Footer used when publishing Planner HTML files.
3703 This may be text or a filename.
3705 @item planner-xhtml-header
3706 Header used when publishing Planner XHTML files.
3707 This may be text or a filename.
3709 @item planner-xhtml-footer
3710 Footer used when publishing Planner XHTML files.
3711 This may be text or a filename.
3713 @item planner-html-inner-header
3714 Extra header section that can be embedded within
3715 @code{planner-html-header} and @code{planner-xhtml-header}.
3717 @item planner-html-inner-footer
3718 Extra header section that can be embedded within
3719 @code{planner-html-footer} and @code{planner-xhtml-footer}.
3721 @item planner-publish-prepare-regexps
3722 List of markup rules to apply before publishing a page with Planner.
3724 @item planner-publish-finalize-regexps
3725 List of markup rules to apply after publishing a page with Planner.
3727 @end table
3729 @node Publishing Calendars, Authz Access Restriction, Publishing Planner pages, Publishing
3730 @comment  node-name,  next,  previous,  up
3731 @subsection Publishing Calendars
3732 @cindex calendar, publishing
3733 @cindex @file{planner-calendar.el}, using
3735 To publish calendars in your day pages, it is necessary to do two steps.
3737 @itemize
3738 @item Add @code{(require 'planner-calendar)} to your configuration.
3739 @item Add a @samp{<calendar>} tag to either your header, footer, or
3740 @var{planner-day-page-template}, depending on where you want it to
3741 appear.
3742 @end itemize
3744 To display a calendar based on a different day (given here as DAYPAGE),
3745 use @code{<calendar page="DAYPAGE">}.
3747 To get arrows to previous and next months to show up, use
3748 @code{<calendar arrows="t">}.  The text in
3749 @var{planner-calendar-prev-month-button} and
3750 @var{planner-calendar-next-month-button} will be used for the arrows to
3751 the previous and next months, respectively.
3753 By default, Muse will not display the arrows properly, due to
3754 limitations in the special-escaping algorithm.  To work around this,
3755 remove the @samp{&} rule from @var{muse-xml-markup-specials}, or from
3756 @var{muse-html-markup-specials} if you are using the 3.02.6 version of
3757 Muse.
3759 It is also possible to create a symlink from the current day page to the
3760 page name specified by @var{planner-calendar-today-page-name}.  To
3761 accomplish this, add the following to your configuration.
3763 @example
3764 (eval-after-load "muse-publish"
3765   '(add-hook 'muse-after-publish-hook
3766              'planner-calendar-create-today-link))
3767 @end example
3769 @subheading Options
3771 @defopt planner-calendar-prev-month-button
3772 HTML text used for previous month buttons.
3773 @end defopt
3775 @defopt planner-calendar-next-month-button
3776 HTML text used for next month buttons.
3777 @end defopt
3779 @defopt planner-calendar-day-header-chars
3780 Number of characters to use for day column header names.
3781 @end defopt
3783 @defopt planner-calendar-today-page-name
3784 Default name for published today page link.
3785 @end defopt
3787 @subheading Functions
3789 @defun planner-calendar-create-today-link
3790 Add this function to @code{muse-after-publish-hook} to
3791 create a ``today'' soft-link to the newest published planner day page,
3792 on operating systems that support POSIX @command{ln}.
3793 @end defun
3795 @node Authz Access Restriction, RSS Publication, Publishing Calendars, Publishing
3796 @comment  node-name,  next,  previous,  up
3797 @subsection Authz Access Restriction
3798 @cindex @file{planner-authz.el}, using
3799 @cindex Mason, restricting portions with
3800 @cindex access, restricting
3802 @file{planner-authz.el} was written by Andrew J. Korty in order to
3803 allow the easy restriction of portions of published pages.  It uses
3804 the HTML::Mason module available on CPAN
3805 (@url{http://www.cpan.org}).  Setting up HTML::Mason is
3806 outside the scope of this document.  Make sure that it works before
3807 trying out @file{planner-authz.el}.
3809 @file{planner-authz.el} modifies the behavior of
3810 @command{muse-project-publish} so that published pages follow access
3811 modifiers.
3813 This library lets you publish your planner pages while controlling
3814 access to certain portions of them to users you specify.  When you
3815 load this library, you gain access to two additional markup directives
3816 to use in your planner pages.  The @samp{<authz>} tag lets you
3817 restrict access to arbitrary content as follows:
3819 @example
3820 Here is a sentence everyone should see.  This sentence also
3821 contains no sensitive data whatsoever.  <authz users="ajk">This
3822 sentence, however, talks about my predilection for that French
3823 vanilla instant coffee that comes in the little tin, and I'm
3824 embarrassed for anyone else to know about that.</authz> And
3825 here's some more perfectly innocuous content.
3826 @end example
3828 You can use @samp{<authz>} tags to mark up entire paragraphs, tasks,
3829 notes, and anything else.  The tags are replaced with Mason code in
3830 the published pages.
3832 The @samp{#authz} directive restricts access to an entire page.  A Mason
3833 call is added to this page to generate a 403 error when someone not
3834 listed tries to access it.  Any notes or tasks on a
3835 @samp{#authz}-protected page are also wrapped in Mason code on linked
3836 pages. To add a @samp{#authz} directive to a Muse page, place
3837 @samp{#authz} followed by a space-delimited list of users on one
3838 line. For example:
3840 @example
3841 #authz ajk sacha
3842 @end example
3844 @subheading Getting started
3846 Add the following to your .emacs file to cause @kbd{M-x
3847 muse-project-publish} to automatically use planner-authz features.
3849 @example
3850 (require 'planner-authz)
3851 @end example
3853 @subheading Diary markup
3855 If your pages have a section with diary entries maintained by
3856 planner-appt.el (or by any other means), you can control access to these
3857 entries.  First, customize @code{planner-section-tagnames} to map your
3858 diary section ("* Schedule", in this example) to a tag called
3859 "diary-section".  An example follows.
3861 @example
3862 (add-to-list 'planner-section-tagnames '("Schedule" . "diary-section"))
3863 @end example
3865 If the name of your diary section is "* Diary", you will not need to
3866 customize @code{planner-section-tagnames} by default.
3868 Then make sure the diary entries you want restricted contain a
3869 corresponding plan page name in parentheses, as in the following
3870 example.
3872 @example
3873 10:00 10:30 Meeting with boss (WorkStuff)
3874 @end example
3876 @subheading Options
3878 @defopt planner-authz-project-default
3879 Default access list for project pages (not day pages).  If a given
3880 project page doesn't contain a @samp{#authz} tag, it will receive the
3881 access list defined here.  If this variable is nil, all users will be
3882 allowed to view the page.  No corresponding variable is provided for
3883 day pages because it doesn't seem like you'd ever want to control
3884 access based on what day it was.  (But I will accept patches. :) Notes
3885 and tasks referencing pages without @samp{#authz} tags will also be
3886 restricted to the users listed here.
3887 @end defopt
3889 @defopt planner-authz-day-note-default
3890 Default access list for notes on day pages not associated with
3891 any project.  There is way to set a default for notes on project
3892 pages for the reason above; they would only be associated with
3893 date pages anyway.
3894 @end defopt
3896 @defopt planner-authz-day-task-default
3897 Same as @kbd{planner-authz-day-note-default}, but for tasks.
3898 @end defopt
3900 @subheading Functions
3902 @defun planner-authz-publish-index
3903 Publish an index for the planner marked up with Mason code.
3904 Only those links to pages which the remote user is authorized to
3905 access will be shown.
3906 @end defun
3908 @node RSS Publication, iCal Task Publication, Authz Access Restriction, Publishing
3909 @comment  node-name,  next,  previous,  up
3910 @subsection RSS Publication
3911 @cindex @file{planner-rss.el}, using
3912 @cindex notes, RSS
3913 @cindex RSS
3915 @file{planner-rss.el} allows you to publish your notes in the RSS 2.0
3916 XML format for blog syndication. You will also want to customize the
3917 following variables:
3919 To manually add the current note to all the matching RSS feeds, invoke
3920 @command{planner-rss-add-note}. You can specify a filename with the
3921 universal prefix, like this: @kbd{C-u M-x planner-rss-add-note}.
3923 If you use the @file{remember-planner.el} module to create notes, you
3924 can automatically publish new notes to RSS feeds by adding the
3925 following code to your @file{.emacs} (or @file{_emacs}).
3927 @example
3928 (add-to-list 'remember-planner-append-hook 'planner-rss-add-note t)
3929 @end example
3931 @subheading Options
3933 @defopt planner-rss-base-url
3934 Base absolute URL for published blog entries. Should include trailing
3935 @samp{/}.
3936 @end defopt
3938 @defopt planner-rss-category-feeds
3939 Rules for automatic categorization of posts and publishing to RSS
3940 files. A blog entry is matched against each condition. If it matches
3941 the regular expression or the function returns a non-nil value, the
3942 blog entry is copied into the specified file.
3943 @end defopt
3945 @defopt planner-rss-feed-limits
3946 A list of regular expressions that match feed filenames and the size
3947 and item limits for feeds that match. For example, you can use
3948 @samp{(("." nil 10))} to ensure that all feeds are limited to the 10
3949 most recent items.
3950 @end defopt
3952 @subheading Functions
3954 @file{planner-rss.el} defines the following interactive functions:
3956 @defun planner-rss-add-note @var{feed}
3957 Export the current note using @code{planner-add-item}. If @var{feed}
3958 is specified, add the entry to the specified file. Else, add the entry
3959 to all matching RSS feeds specified by
3960 @code{planner-rss-category-feeds}.
3961 @end defun
3963 @node iCal Task Publication, RDF Publication, RSS Publication, Publishing
3964 @comment  node-name,  next,  previous,  up
3965 @cindex @file{planner-ical.el}, using
3966 @subsection iCal Publication
3968 iCal is an Internet Engineering Task Force (IETF) standard for
3969 calendaring and scheduling. @uref{http://www.ietf.org/rfc/rfc2445.txt}
3971 You can export your tasks to the iCal format using
3972 @file{planner-ical}. Add @code{(require 'planner-ical)} to your
3973 @file{~/.emacs}. Then you can use @kbd{M-x planner-ical-export-page}
3974 to display the iCal equivalent of tasks on a page, which you can then
3975 save to a file.
3977 To export today's tasks to a file in your publishing directory, add
3978 the following to your @file{~/.emacs}.
3980 @example
3981 (planner-ical-export-file
3982  (planner-today)
3983  (expand-file-name
3984    "tasks.ics"
3985    (muse-style-element :path (car (cddr (muse-project planner-project))))))
3986 @end example
3988 @subheading Functions
3990 @defun planner-ical-export-page page &optional file
3991 Export PAGE's tasks in the iCal format.
3992 If FILE is non-nil, results are saved to that file.
3993 If FILE is nil, results are displayed in a `planner-ical-export-buffer'.
3994 @end defun
3996 @defun planner-ical-export-this-page
3997 Display the tasks on the current page in iCal format.
3998 @end defun
4000 @node RDF Publication,  , iCal Task Publication, Publishing
4001 @comment  node-name,  next,  previous,  up
4002 @subsection RDF Publication
4003 @cindex @file{planner-rdf.el}, using
4004 @cindex RDF, publishing to
4006 Put planner-rdf.el in a directory that is in your Emacs load-path and
4007 the following into your ~/.emacs file:
4009 @example
4010 (require 'planner-rdf)
4011 (eval-after-load "muse-publish"
4012   '(progn
4013      (add-hook 'muse-after-publish-hook
4014                'planner-rdf-publish-file)
4015      (add-hook 'muse-after-publish-hook
4016                'planner-rdf-publish-index)))
4017 @end example
4019 @menu
4020 * Publishing with planner-rdf::  
4021 * planner-rdf Tags::            
4022 * planner-rdf Usage Examples::  
4023 @end menu
4025 @node Publishing with planner-rdf, planner-rdf Tags, RDF Publication, RDF Publication
4026 @subsubsection Publishing with planner-rdf
4028 Planner-rdf is now included in the normal Planner publishing process.
4029 Pressing @key{C-p} will create a .owl and a .rdf file for every planner
4030 file. Additionally it creates an index, @file{index.rdf}.
4032 By default all generated files will be stored in the normal Planner
4033 publishing directory, where the HTML files end up. If you would ike to
4034 change that, set the variable @code{planner-rdf-directory} to the desired
4035 location.
4037 The generated files:
4039 @itemize
4040 @item
4041 @file{index.rdf} - a collection with pointers to the
4042 @file{<plan-page>.rdf} files.
4043 @item
4044 @file{<plan-page>.rdf} - contains Dublin Core metadata about the files
4045 related to the current Planner page. Currently it contains metadata
4046 about the source file, the Emacs plan page, the generated HTML page, and
4047 the generated OWL file.
4048 @item
4049 @file{<plan-page>.owl} - contains task and note data from the Planner
4050 file. Task information is stored completely. For notes, the note
4051 headline is stored.
4052 @end itemize
4054 @node planner-rdf Tags, planner-rdf Usage Examples, Publishing with planner-rdf, RDF Publication
4055 @subsubsection planner-rdf Tags
4057 Besides the factual information, e.g. the task status or description,
4058 planner-rdf extracts links (in the format @samp{[[...][...]]} or
4059 @samp{[[...]]}) and tags (@samp{@{@{...:...}@}@}) from tasks and notes
4060 (including the notes text). Links and tags provide context for the plan
4061 elements and so are stored and linked with the containing elements.
4063 Links point to locations that can be used to enrich the information in
4064 the Planner pages (e.g, by retrieving data from them and adding it),
4065 tags -- like the one for the task ids @samp{@{@{Tasks:198@}@}} -- can be
4066 used to express abstract qualities. Some examples:
4068 @itemize
4069 @item
4070 an @samp{@{@{audience:myteam@}@}} tag, can be used to restrict
4071 publishing of items to a certain user group;
4072 @item a @samp{@{@{lang:de@}@}} tag, signifying the language of the text;
4073 @item
4074 a @samp{@{@{location:Hamburg@}@}} tag, can be used to make geographic
4075 reference to an entity that is not stored in your address book, bbdb.
4076 @end itemize
4078 What tags to use is up to the user. Planner-rdf makes no assumptions
4079 about them, it just extracts and stores them. Only the applications
4080 using the data know what to do with them.
4082 @node planner-rdf Usage Examples,  , planner-rdf Tags, RDF Publication
4083 @subsubsection Usage Examples
4085 Report generation with OpenOffice
4087 The Perl file @file{this-week.pl}
4088 (@url{http://www.rainervolz.de/planner-rdf/this-week.pl}) creates a
4089 simple report for the current week. The script extracts task and note
4090 information from the generated OWL files and inserts it into a simple
4091 OpenOffice Writer document. Nothing fancy, just a proof of concept, to
4092 show how planner-rdf can be used to integrate Planner Mode with other
4093 applications.
4095 Besides Perl and OpenOffice you'll need the Redland RDF Application
4096 Framework (@url{http://www.redland.opensource.ac.uk/}). It is used to
4097 process the RDF data. Redland is small, but powerful, and available
4098 for many platforms and languages.
4100 As an example the application loads the RDF data each time it is run.
4101 In the real world you probably would use Redland to store the Planner
4102 data in a database, to save the loading step each time you access the
4103 data.
4105 Importing Planner data into Protege
4107 Protege is a popular ontology editor and knowledge management
4108 application. A simple way to import data into it, is to provide a OWL
4109 file that contains the data as well as the schema. To do this:
4111 @itemize
4112 @item
4113 Use @file{planner2protege.pl}
4114 (@url{http://www.rainervolz.de/planner-rdf/planner2protege.pl}) to
4115 combine all OWL files into a single one.
4116 @item
4117 Use CWM (@url{http://www.w3.org/2000/10/swap/doc/cwm.html}) to combine
4118 schema and data, with @code{python cmw --rdf planner-rdf.owl
4119 planner-data.owl --think --rdf >planner2.owl}
4120 @end itemize
4122 Not the most straightforward process, but it works. The resulting file,
4123 here planner2.owl, can then be loaded into Protege.
4125 @node Experimental Functions,  , Publishing, More about Planner
4126 @comment  node-name,  next,  previous,  up
4127 @section Experimental Functions
4128 @cindex @file{planner-experimental.el}, using
4129 @cindex experimental functions, Planner
4131 These functions are experimental. This means that they may not do
4132 exactly what you expect them to do, so keep backups, be careful, and
4133 don't blame us.
4135 To use these functions, make sure that @file{planner-experimental.el} is
4136 in your load path, and add this to your @file{.emacs} (or
4137 @file{_emacs}):
4139 @example
4140 (require 'planner-experimental)
4141 @end example
4143 @subheading Functions
4145 @file{planner-experimental.el} defines the following interactive
4146 functions:
4148 @defun planner-search-notes-next-match
4149 Jump to the next matching entry.  Call after
4150 @code{planner-search-notes}.
4151 @end defun
4153 @defun planner-search-notes-previous-match
4154 Jump to the previous matching entry.  Call after
4155 @code{planner-search-notes}.
4156 @end defun
4158 @defun planner-remove-duplicates
4159 Remove duplicate tasks.
4160 @end defun
4162 @file{planner-experimental.el} does not define any keybindings.
4164 @node Managing Your Information, Advanced Configuration, More about Planner, Top
4165 @comment  node-name,  next,  previous,  up
4166 @chapter Managing Your Information
4168 Planner can be integrated with other Emacs and even some non-Emacs
4169 programs by loading additional modules. You can pick and choose from
4170 these modules, choosing those that work with programs you use and that
4171 produce information you want to have included in your Planner pages.
4173 @menu
4174 * E-mail::                      Linking notes and tasks to messages
4175 * Scheduling and Time::         Tracking appointments and where your time goes
4176 * Finances::                    Display your account balances and more
4177 * Contacts and Conversations::  BBDB and ERC
4178 * Tracking Research and Resources::  The Web, bibliographies, and bookmarks
4179 * Tracking Development::        
4180 @end menu
4182 @node E-mail, Scheduling and Time, Managing Your Information, Managing Your Information
4183 @comment  node-name,  next,  previous,  up
4184 @section E-mail
4186 Planner can work together with several different Emacs e-mail
4187 clients. If you load the appropriate module for the e-mail client you
4188 use, then your notes and tasks can be annotated with information
4189 pointing to the specific e-mail message you were reading when you
4190 created that note or task. When you are looking at the note or task, you
4191 will be able to jump straight to that message.
4193 @menu
4194 * Unix mail::                   Unix mailboxes: planner-unix-mail.el              
4195 * Gnus::                        Gnus mail and news reader: planner-gnus.el
4196 * VM::                          VM mail reader: planner-vm.el
4197 * Wanderlust::                  Wanderlust mail reader: planner-wl.el
4198 * MH-E::                        MH-E mail reader: planner-mhe.el
4199 * Rmail::                       Rmail: planner-rmail.el
4200 @end menu
4203 @node Unix mail, Gnus, E-mail, E-mail
4204 @comment  node-name,  next,  previous,  up
4205 @subsection Unix mail
4206 @cindex @file{planner-unix-mail.el}, using
4207 @cindex mbox, using Planner with
4208 @cindex Unix mail, using Planner with
4209 @cindex mail client, using Planner with
4211 This module supports links from any kind of Unix mailbox (mbox). To
4212 use this module, make sure that @file{planner-unix-mail.el} is in your
4213 load path and add this to your @file{.emacs} (or @file{_emacs}):
4215 @example
4216 (require 'planner-unix-mail)
4217 @end example
4219 Unix mail URLs are of the form:
4221 @example
4222 ;; mail://PATH/TO/INBOX/message-id
4223 @end example
4225 Annotations will be of the form:
4227 @smallexample
4228 [[mail://PATH/TO/INBOX/E1AyTpt-0000JR-LU%40sacha.ateneo.edu][E-mail from Sacha Chua]]
4229 @end smallexample
4231 @file{planner-unix-mail.el} does not define any interactive functions or
4232 create any new keybindings.
4234 @node Gnus, VM, Unix mail, E-mail
4235 @comment  node-name,  next,  previous,  up
4236 @subsection Gnus
4237 @cindex Gnus, using Planner with
4238 @cindex mail client, using Planner with, Gnus
4239 @cindex @file{planner-gnus.el}, using
4241 To use this module, make sure that it is in your load path and put
4242 this in your @file{.emacs} (or @file{_emacs}):
4244 @example
4245 (require 'planner-gnus)
4246 (planner-gnus-insinuate)
4247 @end example
4249 With this module loaded, when you create tasks from Gnus summary or
4250 message buffers, the tasks will be annotated with information from the
4251 message you were looking at when you created each task. A link will also
4252 be created on your planner page that you can select in order to return
4253 to the message.
4255 So, the created task will look something like this:
4257 @smallexample
4258 #A34 _ Send writing to publishme.com from
4259 [[gnus://alt.books.beatgeneration/<Ifo5c.24632$F9.9567@@nwrddc01.gnilink.net>][E-Mail
4260 from editor@@verizon.net]] @{@{Tasks:71@}@} ([[Writing]])
4261 @end smallexample
4263 This module also binds @kbd{C-c C-t} in the Gnus summary and article
4264 views to the command to create a new task.
4266 @file{planner-gnus.el} does not define any interactive functions.
4268 For more information about Gnus, see @inforef{Top, The Gnus Newsreader,
4269 gnus}.
4271 @node VM, Wanderlust, Gnus, E-mail
4272 @comment  node-name,  next,  previous,  up
4273 @subsection VM
4274 @cindex VM, using Planner with
4275 @cindex mail client, using Planner with, VM
4276 @cindex @file{planner-vm.el}, using
4278 To use this module, make sure that @file{planner-vm.el} is in your load
4279 path and add this to your @file{.emacs} (or @file{_emacs}):
4281 @example
4282 (require 'planner-vm)
4283 @end example
4285 VM URLs are of the form:
4287 @example
4288 vm://path/to/inbox/message-id
4289 @end example
4291 Annotations will be of the form:
4293 @smallexample
4294 [[vm://home/test/INBOX/<E1AyTpt-0000JR-LU@@sacha.ateneo.edu>][E-mail from Sacha Chua]]
4295 @end smallexample
4297 @file{planner-vm.el} does not define any interactive functions or
4298 keybindings.
4301 @node Wanderlust, MH-E, VM, E-mail
4302 @comment  node-name,  next,  previous,  up
4303 @subsection Wanderlust
4304 @cindex Wanderlust, using Planner with
4305 @cindex mail client, using Planner with, Wanderlust
4306 @cindex @file{planner-wl.el}, using
4308 To use this module, make sure that @file{planner-wl.el} is in your
4309 load path and add this to your @file{.emacs} (or @file{_emacs}):
4311 @example
4312 (require 'planner-wl)
4313 @end example
4315 Then, when you call @kbd{M-x planner-create-task-from-buffer} from
4316 Wanderlust summary or message buffers, the task will be created with
4317 the correct annotation.
4319 @subheading Keys
4321 To add keybindings to Wanderlust, call:
4323 @example
4324 (planner-wl-insinuate)
4325 @end example
4327 This binds @kbd{C-c C-t} to @command{planner-create-task-from-buffer}.
4329 @node MH-E, Rmail, Wanderlust, E-mail
4330 @comment  node-name,  next,  previous,  up
4331 @subsection MH-E
4332 @cindex MH-E, using Planner with
4333 @cindex mail client, using Planner with, MH-E
4334 @cindex @file{planner-mhe.el}, using
4336 To use this module, make sure that @file{planner-mhe.el} is in your
4337 load path and add this to your @file{.emacs} (or @file{_emacs}):
4339 @example
4340 (require 'planner-mhe)
4341 @end example
4343 Then, when you call @kbd{M-x planner-create-task-from-buffer} from
4344 MH-E summary or message buffers, the task will be created with
4345 the correct annotation.
4347 @file{planner-mhe} does not define any interactive functions.
4349 @node Rmail,  , MH-E, E-mail
4350 @comment  node-name,  next,  previous,  up
4351 @subsection Rmail
4352 @cindex Rmail, using Planner with
4353 @cindex mail client, using Planner with, Rmail
4354 @cindex @file{planner-rmail.el}, using
4356 To use this module, make sure that @file{planner-rmail.el} is in your
4357 load path and add this to your @file{.emacs} (or @file{_emacs}):
4359 @example
4360 (require 'planner-rmail)
4361 @end example
4363 Rmail URLs are of the form:
4365 @example
4366 rmail://message-id
4367 @end example
4369 Annotations will be of the form:
4371 @smallexample
4372 [[rmail://<E1AyTpt-0000JR-LU@@sacha.ateneo.edu>][E-mail from Sacha Chua]]
4373 @end smallexample
4375 @file{planner-rmail.el} does not define any interactive functions or
4376 create any new keybindings.
4378 For more information about Rmail, see @inforef{Rmail, Reading Mail With
4379 Rmail, Emacs}.
4381 @node Scheduling and Time, Finances, E-mail, Managing Your Information
4382 @comment  node-name,  next,  previous,  up
4383 @section Scheduling and Time
4385 @menu
4386 * Diary::                       Using the Emacs diary: planner-diary.el
4387 * Appointments::                Appointments in plan pages: planner-appt.el
4388 * Timeclock::                   Time tracking: planner-timeclock.el
4389 * schedule.el::                 Project completion: planner-schedule.el
4390 @end menu
4393 @node Diary, Appointments, Scheduling and Time, Scheduling and Time
4394 @comment  node-name,  next,  previous,  up
4395 @subsection Diary
4396 @cindex diary, using Planner with
4397 @cindex @file{planner-diary.el}, using
4399 If you use Emacs's diary feature, Planner-Diary could be helpful for
4400 you. It puts all diary entries for the current day in the @samp{*
4401 Diary} section of your day plan page. This section is updated every
4402 time you display the file in Emacs. By default the diary section of
4403 past pages is not updated; it's pretty unlikely that you want to add
4404 new diary entries for the past. (@pxref{Diary, , , Emacs, GNU Emacs
4405 Manual})
4407 If you want to use @file{planner-diary.el}, make sure the file is in
4408 your load path and add this to your @file{.emacs} (or @file{_emacs}):
4410 @example
4411 (require 'planner-diary)
4412 @end example
4414 @file{planner-diary.el} needs @command{fancy-diary-display}.  To use
4415 @command{fancy-diary-display}, add this to your @file{.emacs} (or
4416 @file{_emacs}):
4418 @example
4419 (add-hook 'diary-display-hook 'fancy-diary-display)
4420 @end example
4422 You can use Planner-Diary in two different ways:
4424 @enumerate
4426 @item
4427 If you want the saved files to contain your entries and not just a line
4428 of Lisp, add the following lines to your @file{.emacs} (or @file{_emacs}):
4430 @example
4431 (setq planner-diary-use-diary t)
4432 (planner-diary-insinuate)
4433 @end example
4435 You should also customize or set @code{planner-day-page-template} to
4436 include a @samp{* Diary}:
4438 @example
4439 (setq planner-day-page-template
4440  "* Tasks\n\n\n* Schedule\n\n\n* Diary\n\n\n* Notes")
4441 @end example
4443 @kbd{C-c C-e} updates the diary sections.  @kbd{C-u C-c C-e} forces an
4444 update---it inserts the diary section for the day, even if the day is in
4445 the past or if there is no @samp{Diary} section in the buffer.
4447 @item
4448 (GNU EMACS ONLY) You can put the following line of Lisp code in your
4449 day plan pages to display your diary entries:
4451 @example
4452 <lisp>(planner-diary-entries-here)</lisp>
4453 @end example
4455 You can do this automatically for all day plan pages:
4457 @smallexample
4458 (setq planner-day-page-template
4459   "* Tasks\n\n\n* Diary\n\n<lisp>(planner-diary-entries-here)</lisp>
4460 \n* Notes")
4461 @end smallexample
4463 When you open a day plan page outside Emacs, you will see the line of
4464 Lisp code and not your diary entries.
4466 @end enumerate
4468 If you want to see your diary entries for more than just one day, set
4469 @code{planner-diary-number-of-days} accordingly.  This works for either
4470 of the two approaches.
4472 These diary sections are only intended for display. Editing them will
4473 not affect your diary file. If you want to add entries to your diary,
4474 you should use the usual Emacs diary and calendar methods for doing
4475 that, or call @code{planner-diary-add-entry}.
4477 If you want to use the Cal-Desk package, simply follow the instructions
4478 in @file{cal-desk.el}.  If you get the Cal-Desk layout from the Calendar
4479 buffer, you get it in the day plan buffer, too.
4481 If you use Planner-Diary, you might consider using the Calendar support
4482 of Planner. (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}) To get
4483 Calendar integration, add this to your @file{.emacs} (or @file{_emacs}):
4485 @example
4486 (planner-insinuate-calendar)
4487 @end example
4489 If @code{planner-diary-create-section-flag} is non-nil, sections are
4490 always inserted if necessary.
4492 @cindex planner2diary.py, using
4493 If you want to import Planner entries into your Diary file, the
4494 @file{planner2diary.py} script will accomplish this for you.  To use it,
4495 execute @code{planner2diary.py} on the command line, specifying your
4496 planner directory as the first and only argument.
4498 @subheading Options
4500 @defopt planner-diary-create-section-flag
4501 Non-nil means create the requested diary sections if they do not
4502 exist. By default, planner-diary tries to create the section. If you
4503 want more control over your pages, you can set this to nil. Trying to
4504 write a diary section to a page that does not have it yet will then
4505 result in an error.
4506 @end defopt
4508 By default, planner-diary lists only the appointments you have on that
4509 day. If you want the date headers included even when showing the diary
4510 entries for a single day, set planner-diary-include-all-output to
4511 non-nil.
4513 @defopt planner-diary-include-all-output-flag
4514 Non-nil means don't omit any data when copying diary entries into day
4515 pages.
4516 @end defopt
4518 @subheading Functions
4520 @file{planner-diary.el} defines the following interactive functions:
4522 @defun planner-diary-add-entry date time text
4523 Prompt for a diary entry to add to @code{diary-file} on @var{date}.
4524 Uses @code{planner-annotation-functions} to make hyperlinks.
4525 @var{time} and @var{text} are used in the description."
4526 @end defun
4528 @defun planner-diary-insert-diary force
4529 Insert the fancy diary for the day into the day plan file. If
4530 @var{force} is non-nil, insert a diary section even if there is no
4531 @var{planner-diary-string} in the buffer.
4532 @end defun
4534 @defun planner-diary-insert-diary-maybe force
4535 Maybe insert the fancy diary for the day into the day plan file. If the
4536 current day is in the past and @var{force} is nil, don't do anything. If
4537 @var{force} is non-nil, insert a diary section even if there is no
4538 @code{planner-diary-string} in the buffer.
4539 @end defun
4541 @defun planner-diary-insert-appts force
4542 Insert the diary appointments for the day into the day plan file.  If
4543 @var{force} is non-nil, insert a diary appointments section even if
4544 there is no @code{planner-diary-appts-string} in the buffer.
4545 @end defun
4547 @defun planner-diary-insert-appts-maybe force
4548 Maybe insert the diary appointments for the day into the day plan file.
4549 If the current day is in the past and @var{force} is nil, don't do
4550 anything.  If @var{force} is non-nil, insert a diary appointments
4551 section even if there is no @code{planner-diary-appts-string} in the
4552 buffer.
4553 @end defun
4555 @defun planner-diary-insert-cal-desk force
4556 Insert the cal-desk diary for the day into the day plan file.  If
4557 @var{force} is non-nil, insert a cal-desk diary section even if there is
4558 no @code{planner-diary-cal-desk-string} in the buffer.
4559 @end defun
4561 @defun planner-diary-insert-cal-desk-maybe force
4562 Maybe insert the cal-desk diary for the day into the day plan file.  If
4563 the current day is in the past and @var{force} is nil, don't do
4564 anything.  If @var{force} is non-nil, insert a cal-desk appointments
4565 section even if there is no @code{planner-diary-cal-desk-string} in the
4566 buffer.
4567 @end defun
4569 @defun planner-diary-insert-public force
4570 Insert the public diary for the day into the day plan file.  If
4571 @var{force} is non-nil, insert a public diary section even if there is
4572 no @code{planner-diary-public-string} in the buffer.
4573 @end defun
4575 @defun planner-diary-insert-public-maybe force
4576 Maybe insert the public diary for the day into the day plan file.  If
4577 the current day is in the past and @var{force} is nil, don't do
4578 anything.  If @var{force} is non-nil, insert a public appointments
4579 section even if there is no @code{planner-diary-public-string} in the
4580 buffer.
4581 @end defun
4583 @defun planner-diary-insert-private force
4584 Insert the private diary for the day into the day plan file.  If
4585 @var{force} is non-nil, insert a private diary section even if there is
4586 no @code{planner-diary-private-string} in the buffer.
4587 @end defun
4589 @defun planner-diary-insert-private-maybe force
4590 Maybe insert the private diary for the day into the day plan file.  If
4591 the current day is in the past and @var{force} is nil, don't do
4592 anything.  If @var{force} is non-nil, insert a private appointments
4593 section even if there is no @code{planner-diary-private-string} in the
4594 buffer.
4595 @end defun
4597 @defun planner-diary-insert-all-diaries force
4598 Update all diary sections in a day plan file.  If @var{force} is
4599 non-nil, insert a diary section even if there is no section header.  It
4600 only inserts diaries if the corresponding @code{planner-diary-use-}*
4601 variable is @samp{t}.
4602 @end defun
4604 @defun planner-diary-insert-all-diaries-maybe force
4605 Update all diary sections in a day plan file.  If the current day is in
4606 the past and @var{force} is nil, don't do anything.  If @var{force} is
4607 non-nil, insert a diary section even if there is no section header.  It
4608 only inserts diaries if the corresponding @code{planner-diary-use-}*
4609 variable is @samp{t}.
4610 @end defun
4612 @defun planner-diary-show-day-plan-or-diary
4613 Show the day plan or diary entries for the date under point in calendar.
4614 Add this to @code{calendar-move-hook} if you want to use it.  In that
4615 case, you should also @command{remove-hook} @samp{planner-calendar-show}
4616 from @code{calendar-move-hook}.
4617 @end defun
4619 @subheading Keys
4621 @file{planner-diary.el} adds the following keybinding to Planner, if
4622 @command{planner-diary-insinuate} is in your @file{.emacs} (or
4623 @file{_emacs}):
4625 @itemize
4627 @item
4628 @kbd{C-c C-e} updates the diary sections by calling
4629 @code{planner-diary-insert-all-diaries-maybe}.
4631 @end itemize
4633 @menu
4634 * Planner-Diary Advanced Features::  
4635 @end menu
4637 @node Planner-Diary Advanced Features,  , Diary, Diary
4638 @comment  node-name,  next,  previous,  up
4639 @subsubsection Planner-Diary Advanced Features
4640 @cindex diary, using Planner with
4641 @cindex @file{planner-diary.el}, advanced features
4643 The features described here are part of the development version.  They
4644 are subject to change without notice.  They may be buggy.  The
4645 documentation may be inaccurate.  Use at your own risk.
4647 There is a lot of code redundancy in the development version.  This is
4648 intentional and makes it easier to change the code for one type of diary
4649 section without breaking others.
4651 @subheading Diary views
4653 @cindex @file{planner-diary.el}, views
4654 Currently Planner-Diary supports six different views of your diary
4655 entries:
4657 @enumerate
4658 @item
4659 Ordinary fancy diary display (what you get by pressing @kbd{d} in the
4660 calendar buffer with @code{fancy-diary-display} switched on)
4662 @item
4663 Schedule/Appointments (all entries from 1 that have a time assigned to
4664 them
4666 @item
4667 Diary without appts (1 without 2)
4669 @item
4670 cal-desk display (appts on top, non appts entries at bottom)
4672 @item
4673 A private diary (same as 1, but uses a different diary-file)
4675 @item
4676 A public diary (same as 1, but uses a different diary-file)
4677 @end enumerate
4679 Put the following line of Lisp code in your day plan pages to display
4680 your diary entries:
4682 @example
4683 <lisp>(planner-diary-entries-here)</lisp>
4684 @end example
4686 The function @code{planner-diary-entries-here} takes two optional
4687 arguments---the diary file you want to use and the number of days you
4688 want to display.
4690 @subheading Exporting Planner-specific Diary files
4692 @cindex @file{planner-diary.el}, exporting entries
4693 If you would like to export diary entries from your Planner pages to
4694 separate Diary files, add @code{(require 'planner-export-diary)} to your
4695 config.  The following steps describe the usage of the functions and
4696 options contained in this file.
4698 @enumerate
4700 @item
4701 Customize @code{planner-export-diary-file}.  The default value is
4702 ``~/diary.planner''.
4704 @item
4705 Add the following line to your main Diary file (default: ``~/diary'').
4707 @example
4708 #include ~/diary.planner
4709 @end example
4711 @item
4712 Then, call @command{M-x planner-export-diary-future} whenever you want
4713 future diary entries published. You can automatically publish entries by
4714 adding either of the following to your .emacs.
4716 @itemize
4718 @item (planner-export-diary-future)
4719 Publish future entries on startup.
4721 @item (add-hook 'planner-mode-hook 'planner-export-diary-setup)
4722 Publish future entries whenever you save a Planner file.
4724 @end itemize
4726 @end enumerate
4728 @node Appointments, Timeclock, Diary, Scheduling and Time
4729 @comment  node-name,  next,  previous,  up
4730 @subsection Appointments
4731 @cindex appointments
4732 @cindex @file{planner-appt.el}, using
4734 If you would like to use planner for your appointment alerts
4735 instead of using the diary system, you might like to try
4736 @file{planner-appt}.
4738 According to your preferences, you may choose from two different
4739 approaches. Appointments in task descriptions on today's plan
4740 page are like this:
4742 @example
4743 #A   _ @@12:45 Do something (TaskPool)
4744 @end example
4746 @noindent
4747 and appointments in today's schedule section are like this:
4749 @example
4750 * Schedule
4752   9:00 | 12:00 | Read Simmel's Philosophy of Money
4753 @@12:45 |       | Do Something Else
4754 @@13:00 | 14:00 | lunch
4755 @end example
4757 @noindent
4758 You can even use both at the same time if you like.
4760 @c Jim Ottaway <j.ottaway@lse.ac.uk>: Changed these kinds of heading
4761 @c back to @unnumberedsec, but left the originals commented out in
4762 @c case there was a good reason for the @strong formatting.
4764 @c @noindent
4765 @c @strong{Usage}
4766 @unnumberedsubsubsec Usage
4768 In the file where you configure Planner, add one of the following.
4770 @itemize
4771 @item
4772 For task-based appointments: @code{(planner-appt-use-tasks)}
4773 @item
4774 For schedule-based appointments: @code{(planner-appt-use-schedule)}
4775 @item
4776 For both task- and schedule-based appointments:
4777 @code{(planner-appt-use-tasks-and-schedule)}
4778 @end itemize
4780 @noindent
4781 And finally if you want everything to be updated automatically add:
4783 @example
4784 (planner-appt-insinuate)
4785 @end example
4787 If you don't want to do the insinuation then you can call:
4789 @example
4790 M-x planner-appt-update
4791 @end example
4793 @noindent
4794 after editing appointments on the page (note that this is not
4795 necessary if you use tasks for the appointments and you don't edit
4796 the task descriptions outside of @code{planner-edit-task-description}).
4798 Try both methods; if you find that you prefer one over the
4799 other, use one of the specific @code{planner-appt-use-} functions, as
4800 there are some performance gains when using one method exclusively.
4802 @menu
4803 * Task-based Appointments::     
4804 * Schedule-based Appointments::  
4805 * Viewing Appointments::        
4806 * Appointment Updating on Save::  
4807 * Appointment and Calendar Integration::  
4808 * Appointment Hooks::           
4809 @end menu
4812 @node Task-based Appointments, Schedule-based Appointments, Appointments, Appointments
4813 @comment  node-name,  next,  previous,  up
4814 @subsubsection Task-based Appointments
4815 @cindex appointments, task-based
4816 @cindex task-based appointments
4818 A task has an appointment if it looks like this:
4820 @example
4821 #A   _ @@12:45 Do something (TaskPool)
4822 @end example
4824 @noindent
4825 i.e., if it has @@ followed by a time at the beginning.  This means
4826 the task is a regular appointment, and will not be carried forward
4827 at the start of a new day.
4829 Alternatively, it may have a !, like this:
4831 @example
4832 #A   _ !12:45 Do something else (TaskPool)
4833 @end example
4835 @noindent
4836 This makes it a "nagging" appointment, which @emph{will} be carried
4837 forward.  It will, however, lose the appointment time in the
4838 process.
4840 This may seem like a strange feature, but here is Henrik's
4841 reasoning:
4843 @quotation
4844 Sometimes I have a task that I want to do at a certain time, so I
4845 make it an appointment.  If I don't get around to doing it anyway,
4846 I want it to be carried forward.  Basically, I sometimes use
4847 appointments on tasks to annoy me until I get them done. :)
4848 @end quotation
4850 You can edit, move and delete tasks with the usual functions, and
4851 appointments will be updated automatically.
4853 You can update all task appointments on your page with
4855 @example
4856 M-x planner-appt-update
4857 @end example
4859 @c @noindent
4860 @c @strong{Cyclic Entries}
4862 @unnumberedsubsubsec Cyclic Entries
4863 @cindex appointments, cyclic task entries
4865 If you have @file{planner-cyclic} (@pxref{Cyclic Tasks}) loaded, entries
4866 in your cyclical tasks file such as
4868 @example
4869 Friday #A _ @@12:45 staff meeting
4870 @end example
4872 @noindent
4873 will appear every Friday and there will be an appointment alert set
4876 @c @noindent
4877 @c @strong{Appointments Section}
4878 @unnumberedsubsubsec Appointments Section
4879 @cindex appointments, appointments section
4881 You can have all task-based appointments copied to a separate section,
4882 providing an overview of your appointments.
4884 To do this, add
4886 @example
4887 (setq planner-appt-task-use-appointments-section-flag t)
4888 @end example
4890 @noindent to your configuration, or use @kbd{M-x customize-variable}.
4892 The variable @code{planner-appt-task-appointments-section} is the name
4893 of the section where the appointments will be copied.  By default, it is
4894 set to @code{"Schedule"}, which means that task appointments will be
4895 intermingled with schedule entries.
4897 It is also a good idea to add the section you wish to use to
4898 @code{planner-day-page-template} in order to control where that section
4899 will appear on the page (otherwise it will appear at the top).
4901 The format of the appointments follows that of a schedule; if you
4902 don't like the way it looks, you can write something different and set
4903 @code{planner-appt-format-appt-section-line-function} appropriately.
4904 See the documentation for
4905 @code{planner-appt-format-appt-section-line-function} for details.  It
4906 should be fairly easy to see what needs to be done if you look at the
4907 source for the default function (which is
4908 @code{planner-appt-format-appt-section-line}).
4910 If the section specified in
4911 @code{planner-appt-task-appointments-section} is the same as the
4912 schedule section specified in @code{planner-appt-schedule-section} (by
4913 default @code{"Schedule"}), the default formatting function adds a
4914 @samp{#} to the description so that one can visually distinguish
4915 appointments from the task list from those that have been added to the
4916 schedule.
4918 @node Schedule-based Appointments, Viewing Appointments, Task-based Appointments, Appointments
4919 @comment node-name,  next,  previous,  up
4920 @subsubsection Schedule-Based Appointments
4921 @cindex appointments, schedule-based
4922 @cindex schedule-based appointments
4924 Some scheduled tasks require reminders, others don't.  In this
4925 schedule:
4927 @example
4928 * Schedule
4930 9:00   | 12:00 | Read Simmel's Philosophy of Money
4931 @@12:45          Do Something Else
4932 @@13:00 | 14:00 | lunch
4933 @@14:30 |       | Meet jrs to discuss his dissertation
4934 @@16:00           Test Society seminar
4935 18:00            go home
4936 @end example
4938 @noindent
4939 those that have an @@ prefix will be added to the appointment
4940 reminder list; the others will not.  The formats that are
4941 recognized are fairly flexible, as you can see from the example.
4943 If you change your schedule, you can update the appointment list
4944 with
4946 @example
4947 M-x planner-appt-update
4948 @end example
4950 @noindent You can also have the schedule sorted as part of the update,
4951 if you have this in your configuration:
4953 @example
4954 (setq planner-appt-sort-schedule-on-update-flag t)
4955 @end example
4957 @c @noindent 
4958 @c @strong{Cyclical Entries}
4959 @unnumberedsubsubsec Cyclical Entries
4960 @cindex appointments, cyclic schedule entries
4962 You can also have cyclical schedule entries(@pxref{Cyclic Tasks}) if you
4965 @example
4966 (planner-appt-schedule-cyclic-insinuate)
4967 @end example
4969 @noindent to your configuration.
4971 If you put an entry in your cyclical task file like this
4973 @example
4974 Friday @@12:45 | 13:45 | Staff Meeting
4975 @end example
4977 @noindent
4978 then it will appear in your schedule every Friday, and an
4979 appointment alert will be set up.
4981 @node Viewing Appointments, Appointment Updating on Save, Schedule-based Appointments, Appointments
4982 @comment  node-name,  next,  previous,  up
4983 @subsubsection Viewing Appointments
4984 @cindex appointments, viewing
4986 The command @command{planner-appt-show-alerts} will show all appointment
4987 alerts currently scheduled.
4989 @subheading Functions
4991 There are two commands that show appointments in the future; the one
4992 displays them in a pop-up buffer, the other puts the information into
4993 the current day page.
4995 @deffn {Command} planner-appt-forthcoming-display &optional days
4996 Display a buffer of appointments for today and the next
4997 @var{days}. Optional prefix argument @var{days} is the number of days
4998 ahead to look. Its default value is defined by
4999 @code{planner-appt-forthcoming-days}.
5000 @end deffn
5002 @deffn {Command} planner-appt-forthcoming-update-section &optional days
5003 In today's plan page, add or update a list of forthcoming
5004 appointments. Optional prefix argument @var{days} is the number of
5005 days ahead to look. Its default value is defined by
5006 @code{planner-appt-forthcoming-days}.  The section heading to use is
5007 defined by @code{planner-appt-forthcoming-appt-section}.
5008 @end deffn
5010 @subheading Options
5012 @defopt planner-appt-forthcoming-days
5013 The number of days to look ahead for forthcoming appointments.  The
5014 default value is seven days.
5015 @end defopt
5017 @defopt planner-appt-forthcoming-appt-section
5018 The name of the section to use for inserting a list of forthcoming
5019 appts.  The default value is @code{"Forthcoming Appointments"}.
5020 @end defopt
5022 @defopt planner-appt-forthcoming-show-day-names-flag
5023 When non-nil (the default), day names will be shown in forthcoming
5024 appointments.
5025 @end defopt
5027 @defopt planner-appt-forthcoming-repeat-date-string
5028 String to insert for repeated dates.
5030 When there are multiple appointments for a date, the date is inserted
5031 in the first appointment and the others have this string in their date
5032 cell.
5034 If the string consists of anything other than whitespace, then a link
5035 to the day page for the appoinment is created.
5036 @end defopt
5038 @defopt planner-appt-forthcoming-look-at-cyclic-flag
5039 When non-nil, find forthcoming appointments in the cyclic diary file
5040 (@pxref{Cyclic Tasks}) as well as in plan pages. Default is @samp{t}.
5041 @end defopt
5043 @node Appointment Updating on Save, Appointment and Calendar Integration, Viewing Appointments, Appointments
5044 @comment  node-name,  next,  previous,  up
5045 @subsubsection Appointment Updating on Save
5046 @cindex appointments, updating on save
5048 @subheading Options
5050 @defopt planner-appt-update-appts-on-save-flag
5051 When non-nil, update appointment reminders whenever today's plan page is
5052 saved. Default value is @samp{nil}.
5053 @end defopt
5055 @node Appointment and Calendar Integration, Appointment Hooks, Appointment Updating on Save, Appointments
5056 @comment  node-name,  next,  previous,  up
5057 @subsubsection Appointment and Calendar Integration
5059 Not strictly part of appointment handling, but if one isn't using
5060 the diary, marking dates with plan pages seems to make sense.
5062 @subheading Functions
5064 @defun planner-appt-calendar-insinuate
5065 Add a hook to diary display so that dates in the calendar that have day
5066 pages are highlighted
5067 @end defun
5069 @node Appointment Hooks,  , Appointment and Calendar Integration, Appointments
5070 @comment  node-name,  next,  previous,  up
5071 @subsubsection Appointment Hooks
5073 @subheading Options
5075 @defvr {Hook} planner-appt-update-hook
5076 Hook run after @code{planner-appt-update} has updated the appointment
5077 list.
5078 @end defvr
5080 @node Timeclock, schedule.el, Appointments, Scheduling and Time
5081 @comment  node-name,  next,  previous,  up
5082 @subsection Timeclock
5083 @cindex @file{planner-timeclock.el}, using
5084 @cindex @file{planner-timeclock-summary.el}, using
5085 @cindex @file{planner-timeclock-summary-proj.el}, using
5086 @cindex timeclock, using Planner with
5088 This module allows you to clock in and clock out of your projects
5089 (@pxref{Time Intervals, , , Emacs, GNU Emacs Manual}) You can also
5090 generate reports with the @code{<timeclock-report>} tag. You may want to
5091 read the ``Keeping Track of Time'' page to see how you can use
5092 planner-timeclock to produce detailed reports;
5093 @xref{Keeping Track of Time}.
5095 @file{timeclock.el} is part of GNU Emacs. If you are using XEmacs,
5096 please use the version of @file{timeclock.el} that comes with Planner in
5097 the @file{contrib} directory.
5099 With @file{planner-timeclock.el} loaded,
5100 @command{planner-task-in-progress} clocks in a task.  To clock out,
5101 use @command{planner-task-done} or @command{timeclock-out}.
5103 @file{planner-timeclock.el} defines the following keybindings:
5105 @itemize
5106 @item @kbd{C-c C-i}: @code{planner-task-in-progress}.
5107 @item @kbd{C-c C-o}: @code{timeclock-out}.
5108 @item @kbd{C-c C-T C-i}: @code{planner-timeclock-in}. (XEmacs)
5109 @item @kbd{C-c C-T C-o}: @code{timeclock-out}. (XEmacs)
5110 @item @kbd{C-c C-S-t C-i}: @code{planner-timeclock-in}. (GNU Emacs)
5111 @item @kbd{C-c C-S-t C-o}: @code{timeclock-out}. (GNU Emacs)
5112 @end itemize
5114 If you use @code{timeclock} a lot, you may also be interested in
5115 Dryice Liu's @file{planner-timeclock-summary.el}, which produces
5116 timeclock reports for planner files.
5118 Here is a sample report:
5120 @example
5121 Project               |     Time| Ratio| Task
5122 PlannerMaintenance    |  0:03:58|  1.1%| Merge doc patch
5123                       |  0:17:09|  5.0%| Track down subdirectories
5124                       |  0:18:11|  5.3%| Merge planner-timeclock-summary-proj.el
5125                Total: |  0:39:18| 11.4%|
5126 JapanCaseStudy        |  2:37:56| 45.6%| Prototype search result page
5127                       |  0:31:50|  9.2%| Update design documents
5128                Total: |  3:09:46| 54.8%|
5129 ChristmasLetter       |  1:46:37| 30.8%| Write and send my Christmas letters
5130                Total: |  1:46:37| 30.8%|
5131 LinuxPeople           |  0:10:29|  3.0%| Send questions for Linux in Education
5132                Total: |  0:10:29|  3.0%|
5133 @end example
5135 If you add @code{(require 'planner-timeclock-summary)} to your
5136 @file{~/.emacs}, you can then use it in two ways.
5138 @itemize
5140 @item Display a temporary buffer
5142 Call @code{planner-timeclock-summary-show} and Emacs will ask you which
5143 day's summary do you want. Choose the date as anywhere else of
5144 Emacs planner, and a tempory buffer will be displayed with the
5145 timeclock summary of that day.
5147 To review tasks over a date range, use
5148 @code{planner-timeclock-summary-show-range}. You can use a regexp or a
5149 function to filter tasks by calling
5150 @code{planner-timeclock-summary-show-range-filter}.
5152 @item Rewrite sections of your planner
5154 Choose this approach if you want timeclock summary to be in their
5155 own section and you would like them to be readable in your plain
5156 text files even outside Emacs. Caveat: The timeclock summary
5157 section should already exist in your template and will be rewritten
5158 when updated. Tip: Add @code{planner-timeclock-summary-section}
5159 (default: @samp{"Timeclock"}) to your @code{planner-day-page-template}.
5161 To use, call @code{planner-timeclock-summary-update} in the planner
5162 day page to update the section. If you want rewriting to be
5163 automatically performed, call
5164 @code{planner-timeclock-summary-insinuate} in your @file{.emacs} file.
5165 @end itemize
5167 @file{planner-timeclock-summary-proj.el} produces task / time
5168 breakdowns on plan pages. Reports are of the form:
5170 @example
5171 TASK 0 | duration
5172 TASK 1 | duration
5173  TOTAL | duration.
5174 @end example
5176 To use, add @code{(require 'planner-timeclock-summary)} to your
5177 @file{~/.emacs}. Call @code{planner-timeclock-summary-proj-current}
5178 from a project page. The report is inserted at the current position in
5179 the buffer. The function @code{planner-timeclock-summary-proj-section}
5180 does the same but the report is inserted inside a section called
5181 @samp{* Report}.
5183 @node schedule.el,  , Timeclock, Scheduling and Time
5184 @comment  node-name,  next,  previous,  up
5185 @subsection @file{schedule.el}
5186 @cindex @file{planner-schedule.el}, using
5187 @cindex @file{schedule.el}, using Planner with
5189 @file{planner-schedule.el} allows you to project task completion time.
5190 Tasks should be of the form:
5192 @example
5193 #A0 _ 2h Do something
5194 #B0 _ 1h30m Do something
5195 #B0 _ 2d Do something
5196 #B0 _ 2w Do something
5197 #B0 _ 10s Do something
5199 s: seconds, m: minutes, h: hours, d: days, w: weeks
5200 @end example
5202 @file{schedule.el} is included with Planner in the @file{contrib}
5203 directory, but you can alternatively get it from
5204 @url{http://www.newartisans.com/johnw/Emacs/schedule.el} if desired.
5206 @file{schedule.el} provides a single Lisp function,
5207 @code{schedule-completion-time}. It takes an Emacs time object and a
5208 quantity of seconds. It returns an Emacs time object that represents
5209 when the given number of seconds will be completed, assuming that work
5210 can only be done during work hours.
5212 The available work hours are affected by several factors:
5214 @enumerate
5216 @item
5217 If @file{timeclock.el} is being used, the amount of time left in the
5218 current work day (@code{timeclock-workday-remaining})
5219 (@pxref{Time Intervals, , , Emacs, GNU Emacs Manual})
5221 @item
5222 The amount of time in each work day (@code{schedule-workday})
5224 @item
5225 The definition of a work week (@code{schedule-week})
5227 @item
5228 Any holidays defined in the Emacs calendar
5229 (@pxref{Holidays, , , Emacs, GNU Emacs Manual})
5231 @item
5232 Any appointments in the Emacs diary
5233 (@pxref{Appointments, , , Emacs, GNU Emacs Manual})
5235 @end enumerate
5237 Taking all of the ``block out'' periods into account,
5238 @code{schedule-completion-time} will compute when the given number of
5239 seconds will be done, based on your current definitions of time
5240 available.
5242 As an example, here's a function which, given a list of durations
5243 in seconds, will return a list of completion times starting from
5244 the current moment:
5246 @example
5248   (defun compute-completion-times (&rest durations)
5249     ``Compute completion times for a list of DURATIONS (in seconds).''
5250     (let ((now (current-time)))
5251       (mapcar
5252        (function
5253         (lambda (dura)
5254           (setq now (schedule-completion-time now dura))))
5255        durations)))
5257 @end example
5259 To call this function, do:
5261 @example
5263 (compute-completion-times 3600 7200 3600)
5265 @end example
5267 @subheading Keys
5269 @file{planner-schedule.el} defines the following keybindings:
5271 @kbd{C-c RET} is bound to @command{planner-schedule-show-end-project}.
5272 @kbd{C-c C-m} is also bound to
5273 @command{planner-schedule-show-end-project}.
5275 In XEmacs, @command{planner-schedule-show-end-project} is bound to
5276 @kbd{C-c C-T c-e} and @kbd{C-c C-S-t C-e}.
5278 @subheading Functions
5280 @file{planner-schedule.el} defines the following interactive
5281 functions:
5283 @defun planner-schedule-show-end-project
5284 Display the estimated project completion time.
5285 @end defun
5287 @file{schedule.el} does not define any interactive functions, or
5288 keybindings.
5290 @node Finances, Contacts and Conversations, Scheduling and Time, Managing Your Information
5291 @comment  node-name,  next,  previous,  up
5292 @section Finances
5293 @cindex finances
5295 Currently, Planner provides one module dedicated to tracking your
5296 finances. This module works with a program called Ledger.
5298 @menu
5299 * Ledger::                      Personal finances: planner-ledger.el
5300 @end menu
5302 @node Ledger,  , Finances, Finances
5303 @comment  node-name,  next,  previous,  up
5304 @subsection Ledger
5305 @cindex finances
5306 @cindex @file{planner-ledger.el}, using
5307 @cindex @file{ledger}, using Planner with
5309 @file{planner-ledger.el} provides integration between planner and John
5310 Wiegley's ledger accounting program, which can be found at
5311 @url{http://newartisans.com/johnw/ledger.tar.gz}.
5313 To use planner-ledger to insert a ledger balance overview and a list
5314 of pending transactions into planner day pages, make sure that your
5315 day page includes sections that match
5316 @code{planner-ledger-balance-regexp} and
5317 @code{planner-ledger-pending-regexp}. Example:
5319 @example
5320 * Tasks
5322 * Ledger
5324 ** Pending transactions
5326 * Notes
5328 @end example
5330 You can manually update ledger sections with the
5331 @command{planner-ledger-insert-maybe} command.
5333 You can also automatically update ledger sections with the following
5334 hook:
5336 @example
5337 (add-hook 'planner-goto-hook 'planner-ledger-insert-maybe)
5338 @end example
5340 You can create ledger entries from specially-formatted tasks using
5341 @command{planner-ledger-add-entry-from-task}.  Tasks should be of the
5342 form @samp{payment due: payee, amount [comment]}.  Example:
5344 @example
5345 #A1 _ payment due: foobar, $1000.00 some comment here
5346 #A2 _ payment due: baz, 1000.00
5347 @end example
5349 @subheading Options
5351 @defopt planner-ledger-balance-accounts
5352 List of accounts to be included or excluded from the balance overview.
5353 @samp{+} includes all matching accounts, and @samp{-} excludes
5354 matching accounts.  See the documentation for
5355 @command{ledger-run-ledger} for more details.
5356 @end defopt
5358 @defopt planner-ledger-balance-regexp
5359 Regular expression matching section for ledger balance.  Do not store
5360 other data in this section, as it will be overwritten.
5361 @end defopt
5363 @defopt planner-ledger-pending-regexp
5364 Regular expression matching section for ledger balance.  Do not store
5365 other data in this section, as it will be overwritten.
5366 @end defopt
5368 @defopt planner-ledger-payment-task-regexp
5369 Regular expression matching special ledger tasks.
5370 @end defopt
5372 @subheading Functions
5374 @defun planner-ledger-insert-maybe
5375 Update any ledger sections on the current page.
5376 @end defun
5378 @defun planner-ledger-add-entry-from-task
5379 Create a ledger entry based on the task at point.  Task should match
5380 @code{planner-ledger-payment-task-regexp}.
5381 @end defun
5383 @node Contacts and Conversations, Tracking Research and Resources, Finances, Managing Your Information
5384 @comment  node-name,  next,  previous,  up
5385 @section Contacts and Conversations
5386 @cindex contacts
5387 @cindex conversations
5389 Planner has two modules available for keeping track of contact and
5390 conversation information. The first uses the Big Brother Database
5391 (BBDB), and the second uses Emacs Relay Chat (ERC). BBDB is a full
5392 contact database. ERC is a client for chatting online on Internet Relay
5393 Chat (IRC) networks. The ERC module for Planner will help you keep
5394 track of online conversations you have if you use ERC for those
5395 conversations, but does not by itself store contact information other
5396 than the time you had the conversation, the network and channel you were
5397 on when you had it, and maybe who you had it with. If you are looking
5398 for a way to manage your full address book, then @file{planner-bbdb.el}
5399 in combination with BBDB is what you are looking for.
5401 @menu
5402 * BBDB::                        Contacts: planner-bbdb.el
5403 * Emacs Relay Chat::            Internet Relay Chat: planner-erc.el
5404 @end menu
5406 @node BBDB, Emacs Relay Chat, Contacts and Conversations, Contacts and Conversations
5407 @comment  node-name,  next,  previous,  up
5408 @subsection BBDB
5409 @cindex @file{planner-bbdb.el}, using
5410 @cindex BBDB, using Planner with
5412 @file{planner-bbdb.el} allows you to refer to your contacts easily
5413 from within a planner page. @inforef{Top, the BBDB Manual, bbdb}.
5415 @samp{[[bbdb://Sacha.*Chua][Sacha]]}, for example, will be linked to
5416 the blog, web or net fields of the first matching BBDB record.
5418 @file{planner-bbdb.el} does not define any interactive functions, or
5419 keybindings.
5421 @node Emacs Relay Chat,  , BBDB, Contacts and Conversations
5422 @comment  node-name,  next,  previous,  up
5423 @subsection Emacs Relay Chat
5424 @cindex @file{planner-erc.el}, using
5425 @cindex ERC, using Planner with
5426 @cindex Emacs Relay Chat, using Planner with
5427 @cindex IRC, using Planner with
5428 @cindex Internet Relay Chat, using Planner with
5430 To use planner-erc, place @file{planner-erc.el} in your load path
5431 and add this to your @file{.emacs} (or @file{_emacs}):
5433 @example
5435 (require 'planner-erc)
5437 @end example
5439 IRC URLs may be of the following forms.
5441 @example
5442 irc://server/nick,isnick
5443 irc://server/#channel
5444 irc://server
5445 @end example
5447 Annotations will be in the following forms.
5449 @example
5450 [[irc://server/nick,isnick][Chat with nick on server#channel]]
5451 [[irc://server/nick,isnick][Chat with nick on server]]
5452 [[irc://server/#channel][Chat on server#channel]]
5453 [[irc://server][Chat on server]]
5454 @end example
5456 @file{planner-erc.el} does not define any interactive functions, or
5457 keybindings.
5459 @node Tracking Research and Resources, Tracking Development, Contacts and Conversations, Managing Your Information
5460 @comment  node-name,  next,  previous,  up
5461 @section Tracking Research and Resources
5463 Planner provides three modules for keeping track of information
5464 involving three specific tools: w3m, BibTeX, and @file{bookmark.el}.
5466 @menu
5467 * W3m::                         Web browser: planner-w3m.el
5468 * BibTeX::                      Bibliographies: planner-bibtex.el
5469 * Bookmark::                    Bookmarks: planner-bookmark.el
5470 @end menu
5472 @node W3m, BibTeX, Tracking Research and Resources, Tracking Research and Resources
5473 @comment node-name,  next,  previous,  up
5474 @subsection W3m
5475 @cindex @file{planner-w3m.el}, using
5476 @cindex w3m, using Planner with
5478 This module allows you to create tasks from a w3m buffer.
5480 @file{planner-w3m.el} does not define any interactive functions, or
5481 keybindings.
5483 @node BibTeX, Bookmark, W3m, Tracking Research and Resources
5484 @comment node-name,  next,  previous,  up
5485 @subsection BibTeX
5486 @cindex @file{planner-bibtex.el}, using
5488 BibTeX URLs are of the form @samp{bibtex:file/name:key}.
5490 @file{planner-bibtex.el} does not define any interactive functions.
5492 @node Bookmark,  , BibTeX, Tracking Research and Resources
5493 @comment  node-name,  next,  previous,  up
5494 @subsection Bookmark
5495 @cindex bookmarks
5496 @cindex @file{bookmark.el}, using Planner with
5497 @cindex @file{planner-bookmark.el}, using
5499 @file{planner-bookmark.el} uses the @file{remember} package to create a
5500 note whenever you create a bookmark (see @inforef{Bookmarks, Bookmarks,
5501 Emacs}). For more information about @file{remember}, please check out
5503 @itemize
5504 @item
5505 @uref{http://www.emacswiki.org/cgi-bin/wiki/RememberMode} -
5506 EmacsWiki.org page
5507 @item
5508 @uref{http://sacha.free.net.ph/notebook/doc/dev/remember/remember.html}
5509 - Online info documentation
5510 @end itemize
5512 Configure remember according to the instructions in
5513 @file{remember-planner.el} so that notes are saved to your planner
5514 pages.
5516 @defopt planner-bookmark-take-note-after-set-bookmark-flag
5517 Non-nil means show a @code{remember} buffer after setting a new
5518 bookmark.
5519 @end defopt
5521 When you create a bookmark, Emacs will open a buffer for your notes.
5522 @kbd{C-c C-c} saves the buffer to today's page. If you don't want to
5523 save a note, you can kill the buffer.
5525 Bookmark URLs are of the form @samp{bookmark://bookmark-name}.
5527 @file{planner-bookmark.el} does not define any interactive functions.
5529 @node Tracking Development,  , Tracking Research and Resources, Managing Your Information
5530 @comment  node-name,  next,  previous,  up
5531 @section Tracking Development
5532 @cindex version control, using Planner with
5534 Planner has three modules geared toward programmers. Two modules deal
5535 with version control and integrating information from those projects
5536 into the planner page. One module deals with the Gnats bug-tracking
5537 system.
5539 @menu
5540 * Log Edit::                    Changelogs: planner-log-edit.el
5541 * PSVN::                        svn changesets: planner-psvn.el
5542 * XTLA::                        TLA changesets: planner-xtla.el
5543 * Gnats::                       Gnats: The GNU bug reporting system
5544 @end menu
5546 @node Log Edit, PSVN, Tracking Development, Tracking Development
5547 @comment  node-name,  next,  previous,  up
5548 @subsection Log Edit
5549 @cindex cvs, using Planner with
5550 @cindex @file{planner-log-edit.el}, using
5551 @cindex version control, using Planner with
5553 This module allows you to automatically record CVS (and VC) commits
5554 in today's page.
5556 You can load the module with @code{(require 'planner-log-edit)}. When
5557 you load the module, @code{planner-log-edit-add-note} will be added to
5558 @code{log-edit-done-hook}.  A note containing the text of the commit
5559 and optionally a list of modified files will be added to today's page
5560 if you use the the Emacs version control interface. (@pxref{Version
5561 Control, , , Emacs, GNU Emacs Manual})
5563 @subheading Options
5565 @defopt planner-log-edit-include-files-flag
5566 Non-nil means include a list of committed files in the note.
5567 @end defopt
5569 @defopt planner-log-edit-notice-commit-function
5570 Non-nil means include a list of committed files in the note. If you
5571 want to enable this feature for some projects but not for others, set
5572 this to a function that returns t only for the commits you want to
5573 note.
5574 @end defopt
5576 @file{planner-log-edit.el} does not define any interactive functions.
5578 @node PSVN, XTLA, Log Edit, Tracking Development
5579 @comment  node-name,  next,  previous,  up
5580 @subsection PSVN
5581 @cindex PSVN
5582 @cindex @file{planner-psvn.el}, using
5583 @cindex Subversion, integration with
5585 This module enables you to refer to your Subversion (svn) changesets
5586 easily from within a Planner page, and to have your svn commits recorded
5587 automatically as notes in your planner.
5589 You must also have @file{psvn.el}, which is often packaged with
5590 Subversion in GNU/Linux distributions.
5592 You can then load the module by adding @code{(require 'planner-psvn)} to
5593 your @file{~/.emacs}.
5595 Once the module is loaded, Planner will pick up annotation information
5596 from any psvn *svn-log-view* buffer. If you create a task or note while
5597 in such a buffer, that task will have a hyperlink you can follow to
5598 return to the changeset later.
5600 These hyperlinks are of the form
5601 @samp{psvn://http://my.svn-repos.at/svn/project1/trunk@@39}
5603 Additionally, you can have notes for your commits automatically
5604 generated. Set @var{planner-psvn-log-edit-notice-commit-function} to t
5605 to enable this.
5607 By default, these commit notes will include a list of the files
5608 modified. If you would prefer to have this list not included, set
5609 @var{planner-psvn-log-edit-include-files-flag} to nil.
5611 @node XTLA, Gnats, PSVN, Tracking Development
5612 @comment  node-name,  next,  previous,  up
5613 @subsection XTLA
5614 @cindex XTLA
5615 @cindex @file{planner-xtla.el}, using
5617 This module allows you to refer to changesets in Tom Lord's Arch (tla)
5618 version control system. You can load the module with @code{(require
5619 'planner-xtla)}. When you load the module, you can create tasks from
5620 XTLA windows by positioning point on a revision.
5622 XTLA URLs are of the form
5623 @samp{xtla://miles@@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-19}
5625 @file{planner-xtla.el} does not define any interactive functions.
5627 @node Gnats,  , XTLA, Tracking Development
5628 @comment  node-name,  next,  previous,  up
5629 @subsection Gnats
5631 @cindex Gnats
5632 @cindex @file{planner-gnats.el}, using
5633 @cindex bug reports, tracking
5635 @file{planner-gnats.el} provides support for the GNU problem report
5636 management system Gnats. This module allows you to refer to problem
5637 reports using hyperlinks.
5639 Configure your Emacs for Gnats access, then add @samp{(require
5640 'planner-gnats)} to your @file{.emacs}. You can then create tasks from
5641 Gnats edit or view buffers.
5643 To add keybindings to Gnats, use @samp{(planner-gnats-insinuate)}.
5645 Gnats URLs are of the form @samp{gnats:pr-number}.
5647 @file{planner-gnats.el} does not define any interactive functions.
5649 @node Advanced Configuration, Reference Material, Managing Your Information, Top
5650 @comment  node-name,  next,  previous,  up
5651 @chapter Advanced Configuration
5652 @cindex configuration, advanced
5654 @menu
5655 * Customizing Your Day Pages::  Change your templates
5656 * Variables to Customize::      Change various aspects of Planner behavior
5657 * Ideas for Other Keybindings::  Add to and change the default keybindings
5658 @end menu
5660 @node Customizing Your Day Pages, Variables to Customize, Advanced Configuration, Advanced Configuration
5661 @comment  node-name,  next,  previous,  up
5662 @section Customizing Your Day Pages
5664 With the variable @code{planner-day-page-template}, you can define how
5665 you want any newly created day planner pages to look.
5667 You might want to include a section for your diary entries. For how to
5668 do this, see @ref{Diary}.
5670 You can add interactive Lisp buttons with the @file{planner-lisp.el}
5671 module. (@pxref{Interactive Lisp})
5673 Your @code{planner-day-page-template} can also include @samp{|<lisp>|}
5674 tags.
5676 For more complex day pages, you can set
5677 @code{planner-day-page-template} to a function that will be called
5678 from an empty day page buffer. The function should initialize the
5679 contents of the day page.
5681 @node Variables to Customize, Ideas for Other Keybindings, Customizing Your Day Pages, Advanced Configuration
5682 @comment  node-name,  next,  previous,  up
5683 @section Variables to Customize
5684 @cindex customize, variables to
5685 @cindex variables, customization of
5686 @cindex configuration, advanced, variables
5688 If you want to change @code{planner-directory} and some other
5689 variables, either use Customize (@kbd{M-x customize-group RET planner
5690 RET}) or use @code{setq}.  An example of the latter follows.
5692 @example
5693 (setq planner-directory "~/Plans")
5694 @end example
5696 Other user options are:
5698 @vindex planner-use-day-pages
5699 @defopt planner-use-day-pages
5700 If you really don't like day pages, you can set this variable to nil
5701 and you won't be prompted for dates for tasks (and notes, if using
5702 @file{remember-planner}).
5703 @end defopt
5705 @vindex planner-use-plan-pages
5706 @defopt planner-use-plan-pages
5707 If you really don't like plan pages, you can set this variable to nil
5708 and you won't be prompted for plan pages for tasks (and notes, if
5709 using @file{remember-planner}).
5710 @end defopt
5712 @vindex planner-mode-hook
5713 @defopt planner-mode-hook
5714 List of functions to run after @code{planner-mode} is initialized.
5715 @end defopt
5717 @vindex planner-tasks-file-behavior
5718 @defopt planner-tasks-file-behavior
5719 This variable controls what happens to files Planner opens by itself.
5720 If your tasks are associated with plan pages, the plan pages are
5721 updated whenever a task is rescheduled.  This could lead to a lot of
5722 open buffers as Planner applies updates to all linked files.
5723 By default, Planner is configured to do nothing.
5724 A value of @samp{save} means save but do not close buffers, and a
5725 value of @samp{nil} means do not save any of the buffers.
5726 @end defopt
5728 @vindex planner-add-task-at-end-flag
5729 @defopt planner-add-task-at-end-flag
5730 This variable controls where new tasks are created.  Non-nil means
5731 create tasks at the bottom of the first task block.  If you set this
5732 to non-nil, new tasks will be listed in order of creation (oldest).
5733 Tasks carried over from previous days will appear at the bottom of the
5734 list.
5736 Nil means create tasks at the top of the first task block.
5737 Carried-over tasks and newly created tasks are prominently placed on
5738 top of the list of tasks for the day.
5739 @end defopt
5741 @vindex planner-default-page
5742 @defopt planner-default-page
5743 Default page for created tasks.  This is used as the initial value for
5744 tasks.  After you create a task, it will be set to the previous page
5745 used.
5746 @end defopt
5748 @vindex planner-hide-task-status-when-highlighting
5749 @defopt planner-hide-task-status-when-highlighting
5750 Font-locking for tasks may be enough for you to determine status and
5751 priority.  Set this to non-nil if you want to hide the status marker
5752 and rely on font-locking instead.
5753 @end defopt
5755 @vindex planner-create-task-hook
5756 @defopt planner-create-task-hook
5757 Functions run after creating a task. @code{planner-id} hooks into
5758 this.
5759 @end defopt
5761 @vindex planner-expand-name-favor-future-p
5762 @defopt planner-expand-name-favor-future-p
5763 If non-nil, partial dates (ex: @kbd{2} or @kbd{5.2}) are completed to
5764 dates in the future instead of using the current year and month.
5765 @end defopt
5767 @vindex planner-task-dates-favor-future-p
5768 @defopt planner-task-dates-favor-future-p
5769 Like @code{planner-expand-name-favor-future-p}, but only for tasks.
5770 @end defopt
5772 @vindex planner-publish-dates-first-p
5773 @defopt planner-publish-dates-first-p
5774 Non-nil means list day pages first in the planner index.
5775 @end defopt
5777 @node Ideas for Other Keybindings,  , Variables to Customize, Advanced Configuration
5778 @comment  node-name,  next,  previous,  up
5779 @section Ideas for Other Keybindings
5780 @cindex keybindings, customization of
5781 @cindex configuration, advanced, keybindings
5782 @cindex customize, keybindings to
5784 By default and for backward compatibility, the following operations
5785 do not have keybindings, and are only accessible from the Planner
5786 menu:
5788 @itemize @bullet
5790 @item
5791 @code{planner-copy-or-move-region}
5793 @item
5794 @code{planner-delete-task}
5796 @item
5797 @code{planner-task-delegated}
5799 @item
5800 @code{planner-task-pending}
5802 @item
5803 @code{planner-task-open}
5805 @item
5806 @code{planner-renumber-tasks}
5808 @end itemize
5810 You may find it easier to install keybindings for those operations by
5811 inserting the following in your @file{.emacs} (or @file{_emacs}).
5812 Note: This changes some of the default keybindings for Planner.
5814 @example
5815 (planner-install-extra-task-keybindings)
5816 @end example
5818 If you install the extra task keybindings, your keybindings will
5819 include:
5821 @itemize @bullet
5823 @item
5824 @kbd{C-c C-t} will be unbound from the default and will serve as the
5825 prefix for the other task keybindings.
5827 @item
5828 @kbd{C-c C-t C-t}: @code{planner-create-task-from-buffer}.
5830 @item
5831 @kbd{C-c C-t C-k}: @code{planner-delete-task}.
5833 @item
5834 @kbd{C-c C-t C-u}: @code{planner-update-task}.
5836 @item
5837 @kbd{C-c C-t C-c}: @code{planner-copy-or-move-task}.
5839 @item
5840 @kbd{C-c C-t C-S-c}: @code{planner-copy-or-move-region}.
5842 @item
5843 @kbd{C-c C-t C-x}: @code{planner-task-done}.
5845 @item
5846 @kbd{C-c C-t C-S-x}: @code{planner-task-cancelled}.
5848 @item
5849 @kbd{C-c C-t C-d}: @code{planner-task-delegated}.
5851 @item
5852 @kbd{C-c C-t C-p}: @code{planner-task-pending}.
5854 @item
5855 @kbd{C-c C-t C-o}: @code{planner-task-in-progress}.
5857 @item
5858 @kbd{C-c C-t C-r}: @code{planner-raise-task}.
5860 @item
5861 @kbd{C-c C-t C-l}: @code{planner-lower-task}.
5863 @item
5864 @kbd{C-c C-t C-n}: @code{planner-renumber-tasks}.
5866 @end itemize
5868 Other keybindings can be configured by adding this to your
5869 @file{.emacs} (or @file{_emacs}):
5871 @example
5872 (planner-install-extra-context-keybindings)
5873 @end example
5875 This will set up the following keybindings:
5877 @itemize @bullet
5879 @item
5880 @kbd{shift up} @code{planner-move-up}
5882 @item
5883 @kbd{shift down} @code{planner-move-down}
5885 @item
5886 @kbd{shift right} @code{planner-jump-to-link}
5888 @end itemize
5890 @node Reference Material, Getting Help, Advanced Configuration, Top
5891 @comment  node-name,  next,  previous,  up
5892 @chapter Reference Material
5894 @menu
5895 * Keeping Track of Time::       
5896 * Other Interactive Functions::  
5897 * Planner Keybindings::         Default keybindings for Planner
5898 * Sample Configuration Files::  
5899 @end menu
5901 @node Keeping Track of Time, Other Interactive Functions, Reference Material, Reference Material
5902 @section Keeping Track of Time
5904 One of the coolest things you can do with Planner is keep track of how
5905 much time you spend not only on projects but even on particular tasks.
5906 @file{planner-timeclock.el} makes it as easy and natural as marking a
5907 task as in progress, postponed, or done. This can help you determine
5908 just how much time you spend working each day. If you add estimates to
5909 your task descriptions, you'll also be able to use this information to
5910 improve your time estimation skills.
5912 Here's how you can keep track of the time you
5915 Then the fun began. I wanted to see if I could match my estimates.
5916 Before I started working on a task, I used @kbd{C-c TAB} to mark it
5917 @code{in progress} and start the clock. If I decided to work on
5918 something else, I used @kbd{C-c TAB} to clock out of the previous task
5919 and clock into the new one.
5921 When I finished it, I used @kbd{C-c C-x} (@code{planner-task-done}) to
5922 mark it completed and automatically clock out. This is not yet done
5923 for cancelled tasks, so I clocked out of those manually with @kbd{C-c
5924 C-o} (@code{timeclock-out}). I also clocked out whenever I caught
5925 myself being distracted so that the totals wouldn't include the time I
5926 spent chatting on #emacs or checking out del.icio.us links. =) At the
5927 end of the day, I used
5928 @code{planner-timeclock-summary-show-range-filter} to show me the time
5929 elapsed for all of the tasks I'd worked on over the past two days.
5930 Here's the report for that project, edited to reflect how it looks on
5931 my screen and annotated with comments:
5933 @example
5934 Timeclock summary report for 2004.12.28 - 2004.12.29
5936 Project     |     Time| Ratio| Task
5937 JapanProject|  0:23:17|  3.6%| Translate javadoc comment for Messages.java
5938             |  0:33:48|  5.3%| Translate javadoc comment for LoginAction.java
5939             |  1:54:07| 17.8%| Study Struts in Japanese
5940             |  0:46:08|  7.2%| Add javadoc tags for input, output and forwards
5941             |  1:03:48|  9.9%| Help review code
5942             |  0:04:14|  0.7%| Import todo list
5943             |  0:00:37|  0.1%| 2min       Fix Menu Action's unnecessary code - delegated
5944             |  0:01:01|  0.2%| 2min       Remove unnecessary list in UserRemoveSetupAction - cancelled
5945             |  0:02:10|  0.3%| 2min       Remove hard-coded database path from MenuAction
5946             |  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. ...
5947             |  0:07:32|  1.2%| 5min       Add a method that returns the validity of a user in MUserPeer.
5948             |  0:08:28|  1.3%| 5min       Fix indentation
5949             |  0:03:52|  0.6%| 10min      Fix UserPeer so that it doesn't get null pointer exceptions
5950             |  0:04:34|  0.7%| 5min       Add current password field in user_modify page
5951             |  0:21:56|  3.4%| 15min      Make a super class for our service classes that will receive the database connection. (cancelled)
5952             |  0:06:05|  0.9%| 10min      Remove hard-coded constants from the Logic classes
5953             |  0:10:55|  1.7%| 10min      Move logic from UserBean.checkPassword to UserListLogic
5954             |  0:01:20|  0.2%| 20min      Guard against null pointer exceptions in peer classes
5955             |  0:04:57|  0.8%| 10min      Instead of displaying uneditable data with bean:write, just disable the html:text element
5956             |  0:25:03|  3.9%| 10min      Deploy 10:00 version
5957             |  0:04:46|  0.7%| 5min       Separate the configuration file of database and system into another uninternationalized property file.
5958             |  2:09:48| 20.2%| 1h         Decide on a naming convention for localized messages and update files
5959             |  0:00:07|  0.0%| 20min      Explain what is happening in UserModifyAction's nested ifs - pending
5960             |  1:50:23| 17.2%| 2h         Write Javadoc comments in English and Japanese to explain bean structure
5961             |  0:04:19|  0.7%| 2h         Write Javadoc comments in English and Japanese to explain peer operations (pending)
5962             |  0:05:40|  0.9%| 20min      Make a factory class for the database - pending
5963      Total: | 10:41:41|100.0%|      
5965 Day began: 13:03:58, Day ended: 20:51:46
5966 Time elapsed: 31:47:48, Time clocked: 10:41:41
5967 Time clocked ratio: 33.6%
5968 @end example
5970 The time record isn't perfect. I cancelled some tasks after thinking
5971 about them a little and did some tasks simultaneously. Sometimes I
5972 didn't notice that I was getting distracted, too. Still, having all of
5973 that time information neatly summarized made me realize a number of
5974 things.
5976 First, I goof off much less when I have a nice, broken-down task list
5977 in front of me. There's just something about knowing there's a five-
5978 or ten-minute hack you can get out of the way. I found myself looking
5979 forward to getting to the next task just to see if I could make my
5980 estimate. That said, seeing a five-minute task stretch and stretch due
5981 to unforeseen problems did make me a little nervous. I should probably
5982 just make generous estimates so that I don't end up with bugs because
5983 of haste.
5985 Second, I don't goof off as much as I thought I did, although there's
5986 still room for improvement. Yesterday's workday was 9:00 - 12:00, 1:00
5987 - 5:30--7.5 hours. Today was the last day of work, so cleaning and
5988 celebration interrupted my hacking at around 3:00--5 hours of work.
5989 According to my task list, 10:41/12:30 was productive work. Hmm. 1:49
5990 hours unclocked time when I was thinking or goofing off.
5991 planner-timeclock-summary-show for today reveals that I actually
5992 clocked 5:30 today, which means the goofing off happened yesterday.
5993 That makes sense; I remember a pretty long unclocked segment
5994 recuperating from Japanese overload. (This was before we came up with
5995 the task list.)
5997 Third, keeping track of time is way, way cool even if you don't bill
5998 anyone for your time.
6000 Like the idea? It's easy to try out. Just add
6002 @example
6003 (require 'planner-timeclock)
6004 (require 'planner-timeclock-summary)
6005 @end example
6007 to your ~/.emacs. If you want to try it out now, eval those statements
6008 in your Emacs session. After that, simply use @kbd{C-c TAB} to ``clock
6009 in'' a task before you start working on it and @kbd{C-c C-x}
6010 (@code{planner-task-done}) to mark it completed. @kbd{M-x
6011 planner-task-pending} also clocks out the current task if it was
6012 clocked in. To see a summary of how you spent your day, check out the
6013 different functions in @file{planner-timeclock-summary}.
6015 See @ref{Timeclock} for more details.
6017 Happy hacking!
6019 @node Other Interactive Functions, Planner Keybindings, Keeping Track of Time, Reference Material
6020 @comment  node-name,  next,  previous,  up
6021 @section Other Interactive Functions
6023 With @file{planner.el} loaded, you can use any of the functions in this
6024 section by typing @kbd{M-x} followed by the name of the function. Many
6025 of these functions are also bound to keys.
6027 For a list of Planner keybindings, see @ref{Planner Keybindings}.
6029 They are listed in no particular order.
6031 @file{planner.el} defines the following interactive functions:
6034 @defun planner-create-high-priority-task-from-buffer
6035 Create a high priority task based on this buffer.  Do not use this in
6036 LISP programs. Instead, set the value of
6037 @var{planner-default-task-priority} and call @code{planner-create-task}
6038 or @code{planner-create-task-from-buffer}.
6039 @end defun
6041 @defun defun planner-create-medium-priority-task-from-buffer
6042 Create a medium-priority task based on this buffer.  Do not use this in
6043 LISP programs. Instead, set the value of
6044 @var{planner-default-task-priority} and call @code{planner-create-task}
6045 or @code{planner-create-task-from-buffer}.
6046 @end defun
6048 @defun planner-create-low-priority-task-from-buffer
6049 Create a high-priority task based on this buffer.
6050 Do not use this in LISP programs. Instead, set the value of
6051 @var{planner-default-task-priority} and call @code{planner-create-task} or
6052 @code{planner-create-task-from-buffer}.
6053 @end defun
6055 @defun planner-install-extra-context-keybindings
6056 Install extra context-sensitive keybindings. These keybindings
6057 conflict with @file{windmove.el}, but might be useful.
6058 @end defun
6060 @defun planner-narrow-to-section section &optional create
6061 Widen to the whole page and narrow to the section labelled
6062 @var{section}.  If @var{create} is non-nil and the section is not found,
6063 the section is created.  Return non-nil if @var{section} was found or
6064 created.
6065 @end defun
6067 @defun planner-save-buffers
6068 Save all planner-mode buffers.
6069 @end defun
6071 @defun planner-seek-to-first section
6072 Positions the point at the specified @var{section}, or @samp{Tasks} if
6073 not specified.
6074 @end defun
6076 @defun planner-save-buffers
6077 Save all planner buffers.
6078 @end defun
6080 @defun planner-calendar-insinuate
6081 This hooks Planner into  Emacs Calendar (@pxref{Calendar/Diary, ,
6082 , Emacs, GNU Emacs Manual}).
6084 It adds special planner key bindings to @code{calendar-mode-map}.
6085 After this function is evaluated, you can use the following
6086 planner-related keybindings in @code{calendar-mode-map}:
6088 @table @kbd
6090 @item  n
6091 Jump to the planner page for the current day.
6093 @item  N
6094 Display the planner page for the current day.
6095 @end table
6097 @end defun
6099 @defun planner-kill-calendar-files
6100 Remove planner files shown from Calendar (@pxref{Calendar/Diary, , ,
6101 Emacs, GNU Emacs Manual}).
6103 @end defun
6105 @defun planner-calendar-goto
6106 Goto the plan page corresponding to the calendar date
6107 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
6108 @end defun
6110 @defun planner-calendar-show
6111 Show the plan page for the calendar date under point in another window
6112 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
6113 @end defun
6115 @defun planner-calendar-select
6116 Return to @code{planner-read-date} with the date currently selected
6117 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
6118 @end defun
6120 @defun planner-jump-to-link
6121 Jump to the item linked to by the current item.
6122 @end defun
6124 @defun planner-move-up
6125 Move a task up. You can use this to indicate that you will do a task
6126 before another one. On a note, go to the previous note. On a headline,
6127 go to the previous headline of the same depth.
6128 @end defun
6130 @defun planner-move-down 
6131 Move down. You can use this to indicate that you will do a task after
6132 another one. On a note, go to the next note. On a headline, go to the
6133 next headline of the same depth.
6134 @end defun
6136 @node Planner Keybindings, Sample Configuration Files, Other Interactive Functions, Reference Material
6137 @comment  node-name,  next,  previous,  up
6138 @section Planner Keybindings
6139 @cindex keybindings, list
6141 In order to refresh and renumber all of your tasks according to their
6142 actual order in the buffer, simply save the file or call
6143 @kbd{M-x planner-renumber-tasks}.
6145 Here is a summary of the keystrokes available:
6147 @table @kbd
6149 @item M-x plan
6150 Begin your planning session.  This goes to the last day for which
6151 there is any planning info (or today if none), allowing you to review,
6152 and create/move tasks from that day.
6154 @item C-c C-u
6155 Move a task up.
6157 @item C-c C-d
6158 Move a task down.
6160 @item C-c C-s
6161 Mark the task as in progress or delegated.
6163 @item C-c C-x
6164 Mark the task as finished.
6166 @item C-c C-t
6167 Create a task associated with the current Wiki page. If you are on the
6168 opening line of a Note entry, it is assumed that the note itself is the
6169 origin of the task.
6171 @item C-c C-c
6172 Move or copy the current task to another date. If the current task is
6173 an original (meaning you are in the buffer where's defined, hopefully
6174 a planning page) then it will be copied, and the original task will
6175 also now point to the copy.  If the current task is a copy, it will
6176 just be moved to the new day, and the original task's link will be
6177 updated.
6179 @item C-c C-n
6180 Jump to today's task page.  If you call
6181 @code{(planner-calendar-insinuate)}, typing @kbd{n} in the Emacs
6182 calendar (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}) will jump
6183 to today's task page.
6185 @item C-c C-x
6186 @code{planner-task-done}
6188 @item C-c C-z
6189 @code{planner-task-in-progress}
6191 @item C-c C-d
6192 @code{planner-lower-task}
6194 @item C-c C-u
6195 @code{planner-raise-task}
6197 @item C-c C-c
6198 @code{planner-copy-or-move-task}
6200 @item C-c C-t
6201 @code{planner-create-task-from-buffer}
6203 @item C-c C-j
6204 This is a prefix command.
6206 @item C-c C-n
6207 @code{planner-goto-today}
6209 @item C-c C-j C-r
6210 @code{planner-goto-most-recent}
6212 @item C-c C-j C-t
6213 @code{planner-goto-tomorrow}
6215 @item C-c C-j C-y
6216 @code{planner-goto-yesterday}
6218 @item C-c C-j C-j
6219 @code{planner-goto-today}
6221 @item C-c C-j C-n
6222 @code{planner-goto-next-daily-page}
6224 @item C-c C-j C-p
6225 @code{planner-goto-previous-daily-page}
6227 @item C-c C-j C-d
6228 @code{planner-goto}
6230 @end table
6232 @node Sample Configuration Files,  , Planner Keybindings, Reference Material
6233 @comment  node-name,  next,  previous,  up
6234 @section Sample Configuration Files
6235 @cindex configuration, sample
6237 This section includes some sample configuration files. This way, once
6238 you've got the hang of the basics, you can see some different, more
6239 advanced, setups.
6241 There is no One True Way to plan. Every person is different. We hope
6242 you'll find a good starting point among the example configurations
6243 below. If what you want to do does not perfectly fit under one of these
6244 examples, please post a description of the way you plan to our mailing
6245 list (@pxref{Getting Help}).  We look forward to helping you customizing
6246 planner to fit your needs.
6248 @menu
6249 * File Organization::           
6250 * Bare-Bones Planning::         
6251 * Bare-Bones Planning with Plan Pages::  
6252 * Tasks on Plan Pages with Some Day Pages::  
6253 * Hierarchical Tasks::          
6254 @end menu
6256 @node File Organization, Bare-Bones Planning, Sample Configuration Files, Sample Configuration Files
6257 @subsection File Organization
6259 @itemize
6260 @item @strong{Tasks, schedule and notes on day pages.}
6262 By default, tasks, schedule entries and notes are filed on day pages.
6263 This makes it easy for you to see all the entries relevant to a single
6264 day without becoming overwhelmed with information. Unfinished tasks
6265 are carried over to the next day when you use @kbd{M-x plan}, so it's
6266 always kept up to date. Completed tasks are left on the day page you
6267 finished them on, which helps when reviewing one's progress and writing
6268 accomplishment reports.
6270 @item @strong{Cross-referenced with plan pages.}
6272 You can associate your tasks with projects either when you create the
6273 task or later, with @kbd{M-x planner-replan-task}. This makes it easy
6274 for you to see all the information associated with a particular
6275 project. If you use RememberMode to create notes, you will also be
6276 able to associate notes with a plan page.
6278 @item @strong{Just plan pages.}
6280 If your tasks don't usually have dates, you can turn day pages off by
6281 customizing @code{planner-use-day-pages}. If so, then all of your
6282 tasks and notes will be stored on the WelcomePage and/or a plan page.
6284 @end itemize
6286 @node Bare-Bones Planning, Bare-Bones Planning with Plan Pages, File Organization, Sample Configuration Files
6287 @subsection Bare-Bones Planning
6289 You can keep all of your tasks, notes and schedules in a single file:
6290 WelcomePage.  This is good for people who are used to storing all of
6291 their information in a flat text file.  By storing your information in
6292 planner, you'll be able to take advantage of automatic hyperlinking to
6293 files and other resources.  You can also sort your tasks by priority
6294 and status.
6296 To set your system up for bare-bones planning, set the
6297 @code{planner-use-day-pages} variable to nil before loading planner.
6298 For example, you can put this in your @file{~/.emacs} (or @file{_emacs}):
6300 @example
6301 (setq planner-use-day-pages nil)
6302 (setq planner-default-page nil)
6303 (require 'planner)
6304 @end example
6306 When you create a task or note, planner will not prompt you for a
6307 date.  If you press @key{RET} when prompted for a plan page, it will
6308 accept the default of nil, so no other plan pages will be used.  All
6309 of your data will be kept in one file, which can then be easily backed
6312 You can use commands like @command{planner-create-task-from-buffer} to
6313 create tasks, or you can type tasks in manually.  You can edit or
6314 delete anything in the page without having to update other files.
6316 @node Bare-Bones Planning with Plan Pages, Tasks on Plan Pages with Some Day Pages, Bare-Bones Planning, Sample Configuration Files
6317 @subsection Bare-Bones Planning with Plan Pages
6319 When you create a task or note, Planner.el can copy this to a plan
6320 page. Plan pages allow you to see an overview of all the data for a
6321 project.
6323 For convenience, the @command{planner-create-task-from-buffer} command
6324 prompts you for a plan page when you create a task.
6328 @node Tasks on Plan Pages with Some Day Pages, Hierarchical Tasks, Bare-Bones Planning with Plan Pages, Sample Configuration Files
6329 @subsection Tasks on Plan Pages with Some Day Pages
6331 If most of your tasks are associated with plan pages but you want to
6332 schedule some tasks on day pages, you can leave day pages on (default)
6333 and then write a function that turns off day pages. For example, the
6334 following code snippet turns off day pages for task creation from
6335 buffers.
6337 @example
6338 (require 'planner)
6340 (defun my-planner-create-task-from-buffer ()
6341   "Call `planner-create-task-from-buffer', but without dates."
6342   (interactive)
6343   (let ((planner-use-day-pages nil))
6344     (call-interactively 'planner-create-task-from-buffer)))
6345 @end example
6347 @node Hierarchical Tasks,  , Tasks on Plan Pages with Some Day Pages, Sample Configuration Files
6348 @subsection Hierarchical Tasks
6349 @cindex hierarchical tasks
6350 @cindex tasks, hierarchy of
6352 You can use @file{allout.el} or other modes for outlining to support
6353 hierarchical tasks in plan pages. No special support is needed.
6355 Tasks created by @command{planner-create-task-from-buffer} and
6356 @code{planner-create-task} are created in the @samp{* Tasks} section.
6357 If @code{planner-add-task-at-end-flag} is non-nil, tasks are added to
6358 the end of the first task block, else they are added to the beginning.
6359 You can then copy and paste tasks into your preferred hierarchy.
6360 Blank lines delimit blocks of tasks upon which automatic sorting is
6361 performed.
6363 You can also type in tasks manually. You may find this approach faster
6364 when you are comfortable with planner.
6366 For example, a @file{LearnPlanner} plan page might contain the
6367 following lines:
6369 @example
6370 * Learn how to use planner.el
6372 ** Installation
6374 #C0 _ Decide where to put Planner
6375 #C0 _ Download the archives
6377 ** Configuration
6379 *** Load path
6381 #C0 _ Figure out how to add things to my load path
6382 #C0 _ Actually add it to my load path
6385 @end example
6387 If you create tasks for the finest level of detail available at the
6388 moment, you can schedule them onto day pages with @kbd{C-c C-c}
6389 (@command{planner-copy-or-move-task}). Then you can use
6390 @command{planner-jump-to-link} to switch between the day page and the
6391 plan page link.
6394 @node Getting Help, Acknowledgements, Reference Material, Top
6395 @comment  node-name,  next,  previous,  up
6396 @chapter Getting Help
6397 @cindex help, getting
6398 @cindex bugs, reporting
6400 After you have read this guide, if you still have questions about
6401 Planner, or if you have bugs to report, there are several places
6402 you can go.
6404 Planner has an official website at
6405 @url{http://www.emacswiki.org/cgi-bin/wiki/PlannerMode}.  It is a
6406 collaborative wiki.
6408 Bugs may be reported using the Planner Bug-Tracker at
6409 @url{http://gna.org/bugs/?group=planner-el}.
6411 Planner has three mailing lists.
6413 @table @samp
6415 @item planner-el-announce
6416 Low-traffic list for planner-related announcements.
6418 You can join this mailing list (@email{planner-el-announce@@gna.org})
6419 using the subscription form at
6420 @url{http://mail.gna.org/listinfo/planner-el-announce/}.  This
6421 mailing list is also available via Gmane (@url{http://gmane.org/}). The
6422 group is called @samp{gmane.emacs.planner.announce}.
6424 @item planner-el-discuss
6425 Discussion, bugfixes, suggestions, tips, and the like for Planner.
6426 This mailing list also includes the content of planner-el-announce.
6428 You can join this mailing list (@email{planner-el-discuss@@gna.org})
6429 using the subscription form at
6430 @url{http://mail.gna.org/listinfo/planner-el-discuss/}.  This mailing
6431 list is also available via Gmane with the identifier
6432 @samp{gmane.emacs.planner.general}.
6434 @item planner-el-logs
6435 Log messages for commits made to Planner.
6437 You can join this mailing list (@email{planner-el-logs@@gna.org}) using
6438 the subscription form at
6439 @url{http://mail.gna.org/listinfo/planner-el-logs/}.  This mailing list
6440 is also available via Gmane with the identifier
6441 @samp{gmane.emacs.planner.scm}.
6443 @item planner-el-cvs
6444 Generated bug reports for Planner.
6446 You can join this mailing list (@email{planner-el-cvs@@gna.org}) using
6447 the subscription form at
6448 @url{http://mail.gna.org/listinfo/planner-el-cvs/}.  This mailing list
6449 is also available via Gmane with the identifier
6450 @samp{gmane.emacs.planner.cvs}.
6452 @end table
6454 You can also contact the maintainer of Planner, John Sullivan, at
6455 @email{john@@wjsullivan.net}, but it is better to use the other options.
6457 You can explore the relevant sections of the EmacsWiki.org:
6459 @itemize @bullet
6461 @item
6462 @url{http://www.emacswiki.org/cgi-bin/wiki/PlannerMode}
6464 @item
6465 @url{http://www.emacswiki.org/cgi-bin/wiki/MuseMode}
6467 @item
6468 @url{http://www.emacswiki.org/cgi-bin/wiki/RememberMode}
6470 @end itemize
6472 You can visit the IRC Freenode channel @samp{#emacs}. Many of the
6473 contributors are frequently around and willing to answer your
6474 questions.
6476 There is an Orkut community called PlannerMode.
6478 For issues relating to this documentation, please contact John
6479 Sullivan at @email{john@@wjsullivan.net}.
6481 @node Acknowledgements, GNU General Public License, Getting Help, Top
6482 @comment  node-name,  next,  previous,  up
6483 @chapter Acknowledgements
6484 @itemize
6485 @item Maintainers
6487 @cindex maintainers
6489 @itemize
6490 @item 2006
6492 John Sullivan volunteered to maintain Planner, and Michael Olson passed
6493 the maintainership on to him with the release of Planner 3.41.
6495 @item 2005
6497 Michael Olson, Sacha Chua, and several others from the Planner community
6498 ported Planner to use Muse instead of emacs-wiki.  Michael Olson became
6499 the maintainer of Planner.
6501 @item 2004
6503 Damien Elmes handed EmacsWikiMode to Mark Triggs for a short period of
6504 time.  Mark Triggs deferred to Sacha Chua as official maintainer of
6505 Planner.  Sacha Chua volunteered to maintain RememberMode.
6506 Michael Olson became the maintainer of both emacs-wiki and Muse.
6508 @item 2003
6510 Sacha Chua volunteered to maintain Planner.  Damien Elmes
6511 volunteered to maintain EmacsWikiMode.
6513 @item 2001
6515 John Wiegley wrote EmacsWikiMode and Planner.
6516 @end itemize
6518 @item Contributors
6519 @cindex contributors
6521 For a complete list of people who have helped out with Planner, please
6522 check out the @file{AUTHORS} file that is included with Planner.
6524 @end itemize
6526 @node GNU General Public License, Concept Index, Acknowledgements, Top
6527 @comment  node-name,  next,  previous,  up
6528 @appendix GNU GENERAL PUBLIC LICENSE
6529 @center Version 2, June 1991
6530 @cindex GPL
6531 @cindex GNU General Public License
6533 @c This file is intended to be included in another file.
6535 @display
6536 Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
6537 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
6539 Everyone is permitted to copy and distribute verbatim copies
6540 of this license document, but changing it is not allowed.
6541 @end display
6543 @appendixsec Preamble
6545   The licenses for most software are designed to take away your
6546 freedom to share and change it.  By contrast, the GNU General Public
6547 License is intended to guarantee your freedom to share and change free
6548 software---to make sure the software is free for all its users.  This
6549 General Public License applies to most of the Free Software
6550 Foundation's software and to any other program whose authors commit to
6551 using it.  (Some other Free Software Foundation software is covered by
6552 the GNU Library General Public License instead.)  You can apply it to
6553 your programs, too.
6555   When we speak of free software, we are referring to freedom, not
6556 price.  Our General Public Licenses are designed to make sure that you
6557 have the freedom to distribute copies of free software (and charge for
6558 this service if you wish), that you receive source code or can get it
6559 if you want it, that you can change the software or use pieces of it
6560 in new free programs; and that you know you can do these things.
6562   To protect your rights, we need to make restrictions that forbid
6563 anyone to deny you these rights or to ask you to surrender the rights.
6564 These restrictions translate to certain responsibilities for you if you
6565 distribute copies of the software, or if you modify it.
6567   For example, if you distribute copies of such a program, whether
6568 gratis or for a fee, you must give the recipients all the rights that
6569 you have.  You must make sure that they, too, receive or can get the
6570 source code.  And you must show them these terms so they know their
6571 rights.
6573   We protect your rights with two steps: (1) copyright the software, and
6574 (2) offer you this license which gives you legal permission to copy,
6575 distribute and/or modify the software.
6577   Also, for each author's protection and ours, we want to make certain
6578 that everyone understands that there is no warranty for this free
6579 software.  If the software is modified by someone else and passed on, we
6580 want its recipients to know that what they have is not the original, so
6581 that any problems introduced by others will not reflect on the original
6582 authors' reputations.
6584   Finally, any free program is threatened constantly by software
6585 patents.  We wish to avoid the danger that redistributors of a free
6586 program will individually obtain patent licenses, in effect making the
6587 program proprietary.  To prevent this, we have made it clear that any
6588 patent must be licensed for everyone's free use or not licensed at all.
6590   The precise terms and conditions for copying, distribution and
6591 modification follow.
6593 @iftex
6594 @appendixsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
6595 @end iftex
6596 @ifinfo
6597 @center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
6598 @end ifinfo
6600 @enumerate 0
6601 @item
6602 This License applies to any program or other work which contains
6603 a notice placed by the copyright holder saying it may be distributed
6604 under the terms of this General Public License.  The ``Program'', below,
6605 refers to any such program or work, and a ``work based on the Program''
6606 means either the Program or any derivative work under copyright law:
6607 that is to say, a work containing the Program or a portion of it,
6608 either verbatim or with modifications and/or translated into another
6609 language.  (Hereinafter, translation is included without limitation in
6610 the term ``modification''.)  Each licensee is addressed as ``you''.
6612 Activities other than copying, distribution and modification are not
6613 covered by this License; they are outside its scope.  The act of
6614 running the Program is not restricted, and the output from the Program
6615 is covered only if its contents constitute a work based on the
6616 Program (independent of having been made by running the Program).
6617 Whether that is true depends on what the Program does.
6619 @item
6620 You may copy and distribute verbatim copies of the Program's
6621 source code as you receive it, in any medium, provided that you
6622 conspicuously and appropriately publish on each copy an appropriate
6623 copyright notice and disclaimer of warranty; keep intact all the
6624 notices that refer to this License and to the absence of any warranty;
6625 and give any other recipients of the Program a copy of this License
6626 along with the Program.
6628 You may charge a fee for the physical act of transferring a copy, and
6629 you may at your option offer warranty protection in exchange for a fee.
6631 @item
6632 You may modify your copy or copies of the Program or any portion
6633 of it, thus forming a work based on the Program, and copy and
6634 distribute such modifications or work under the terms of Section 1
6635 above, provided that you also meet all of these conditions:
6637 @enumerate a
6638 @item
6639 You must cause the modified files to carry prominent notices
6640 stating that you changed the files and the date of any change.
6642 @item
6643 You must cause any work that you distribute or publish, that in
6644 whole or in part contains or is derived from the Program or any
6645 part thereof, to be licensed as a whole at no charge to all third
6646 parties under the terms of this License.
6648 @item
6649 If the modified program normally reads commands interactively
6650 when run, you must cause it, when started running for such
6651 interactive use in the most ordinary way, to print or display an
6652 announcement including an appropriate copyright notice and a
6653 notice that there is no warranty (or else, saying that you provide
6654 a warranty) and that users may redistribute the program under
6655 these conditions, and telling the user how to view a copy of this
6656 License.  (Exception: if the Program itself is interactive but
6657 does not normally print such an announcement, your work based on
6658 the Program is not required to print an announcement.)
6659 @end enumerate
6661 These requirements apply to the modified work as a whole.  If
6662 identifiable sections of that work are not derived from the Program,
6663 and can be reasonably considered independent and separate works in
6664 themselves, then this License, and its terms, do not apply to those
6665 sections when you distribute them as separate works.  But when you
6666 distribute the same sections as part of a whole which is a work based
6667 on the Program, the distribution of the whole must be on the terms of
6668 this License, whose permissions for other licensees extend to the
6669 entire whole, and thus to each and every part regardless of who wrote it.
6671 Thus, it is not the intent of this section to claim rights or contest
6672 your rights to work written entirely by you; rather, the intent is to
6673 exercise the right to control the distribution of derivative or
6674 collective works based on the Program.
6676 In addition, mere aggregation of another work not based on the Program
6677 with the Program (or with a work based on the Program) on a volume of
6678 a storage or distribution medium does not bring the other work under
6679 the scope of this License.
6681 @item
6682 You may copy and distribute the Program (or a work based on it,
6683 under Section 2) in object code or executable form under the terms of
6684 Sections 1 and 2 above provided that you also do one of the following:
6686 @enumerate a
6687 @item
6688 Accompany it with the complete corresponding machine-readable
6689 source code, which must be distributed under the terms of Sections
6690 1 and 2 above on a medium customarily used for software interchange; or,
6692 @item
6693 Accompany it with a written offer, valid for at least three
6694 years, to give any third party, for a charge no more than your
6695 cost of physically performing source distribution, a complete
6696 machine-readable copy of the corresponding source code, to be
6697 distributed under the terms of Sections 1 and 2 above on a medium
6698 customarily used for software interchange; or,
6700 @item
6701 Accompany it with the information you received as to the offer
6702 to distribute corresponding source code.  (This alternative is
6703 allowed only for noncommercial distribution and only if you
6704 received the program in object code or executable form with such
6705 an offer, in accord with Subsection b above.)
6706 @end enumerate
6708 The source code for a work means the preferred form of the work for
6709 making modifications to it.  For an executable work, complete source
6710 code means all the source code for all modules it contains, plus any
6711 associated interface definition files, plus the scripts used to
6712 control compilation and installation of the executable.  However, as a
6713 special exception, the source code distributed need not include
6714 anything that is normally distributed (in either source or binary
6715 form) with the major components (compiler, kernel, and so on) of the
6716 operating system on which the executable runs, unless that component
6717 itself accompanies the executable.
6719 If distribution of executable or object code is made by offering
6720 access to copy from a designated place, then offering equivalent
6721 access to copy the source code from the same place counts as
6722 distribution of the source code, even though third parties are not
6723 compelled to copy the source along with the object code.
6725 @item
6726 You may not copy, modify, sublicense, or distribute the Program
6727 except as expressly provided under this License.  Any attempt
6728 otherwise to copy, modify, sublicense or distribute the Program is
6729 void, and will automatically terminate your rights under this License.
6730 However, parties who have received copies, or rights, from you under
6731 this License will not have their licenses terminated so long as such
6732 parties remain in full compliance.
6734 @item
6735 You are not required to accept this License, since you have not
6736 signed it.  However, nothing else grants you permission to modify or
6737 distribute the Program or its derivative works.  These actions are
6738 prohibited by law if you do not accept this License.  Therefore, by
6739 modifying or distributing the Program (or any work based on the
6740 Program), you indicate your acceptance of this License to do so, and
6741 all its terms and conditions for copying, distributing or modifying
6742 the Program or works based on it.
6744 @item
6745 Each time you redistribute the Program (or any work based on the
6746 Program), the recipient automatically receives a license from the
6747 original licensor to copy, distribute or modify the Program subject to
6748 these terms and conditions.  You may not impose any further
6749 restrictions on the recipients' exercise of the rights granted herein.
6750 You are not responsible for enforcing compliance by third parties to
6751 this License.
6753 @item
6754 If, as a consequence of a court judgment or allegation of patent
6755 infringement or for any other reason (not limited to patent issues),
6756 conditions are imposed on you (whether by court order, agreement or
6757 otherwise) that contradict the conditions of this License, they do not
6758 excuse you from the conditions of this License.  If you cannot
6759 distribute so as to satisfy simultaneously your obligations under this
6760 License and any other pertinent obligations, then as a consequence you
6761 may not distribute the Program at all.  For example, if a patent
6762 license would not permit royalty-free redistribution of the Program by
6763 all those who receive copies directly or indirectly through you, then
6764 the only way you could satisfy both it and this License would be to
6765 refrain entirely from distribution of the Program.
6767 If any portion of this section is held invalid or unenforceable under
6768 any particular circumstance, the balance of the section is intended to
6769 apply and the section as a whole is intended to apply in other
6770 circumstances.
6772 It is not the purpose of this section to induce you to infringe any
6773 patents or other property right claims or to contest validity of any
6774 such claims; this section has the sole purpose of protecting the
6775 integrity of the free software distribution system, which is
6776 implemented by public license practices.  Many people have made
6777 generous contributions to the wide range of software distributed
6778 through that system in reliance on consistent application of that
6779 system; it is up to the author/donor to decide if he or she is willing
6780 to distribute software through any other system and a licensee cannot
6781 impose that choice.
6783 This section is intended to make thoroughly clear what is believed to
6784 be a consequence of the rest of this License.
6786 @item
6787 If the distribution and/or use of the Program is restricted in
6788 certain countries either by patents or by copyrighted interfaces, the
6789 original copyright holder who places the Program under this License
6790 may add an explicit geographical distribution limitation excluding
6791 those countries, so that distribution is permitted only in or among
6792 countries not thus excluded.  In such case, this License incorporates
6793 the limitation as if written in the body of this License.
6795 @item
6796 The Free Software Foundation may publish revised and/or new versions
6797 of the General Public License from time to time.  Such new versions will
6798 be similar in spirit to the present version, but may differ in detail to
6799 address new problems or concerns.
6801 Each version is given a distinguishing version number.  If the Program
6802 specifies a version number of this License which applies to it and ``any
6803 later version'', you have the option of following the terms and conditions
6804 either of that version or of any later version published by the Free
6805 Software Foundation.  If the Program does not specify a version number of
6806 this License, you may choose any version ever published by the Free Software
6807 Foundation.
6809 @item
6810 If you wish to incorporate parts of the Program into other free
6811 programs whose distribution conditions are different, write to the author
6812 to ask for permission.  For software which is copyrighted by the Free
6813 Software Foundation, write to the Free Software Foundation; we sometimes
6814 make exceptions for this.  Our decision will be guided by the two goals
6815 of preserving the free status of all derivatives of our free software and
6816 of promoting the sharing and reuse of software generally.
6818 @iftex
6819 @heading NO WARRANTY
6820 @end iftex
6821 @ifinfo
6822 @center NO WARRANTY
6823 @end ifinfo
6825 @item
6826 BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
6827 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
6828 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
6829 PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
6830 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
6831 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
6832 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
6833 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
6834 REPAIR OR CORRECTION.
6836 @item
6837 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
6838 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
6839 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
6840 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
6841 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
6842 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
6843 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
6844 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
6845 POSSIBILITY OF SUCH DAMAGES.
6846 @end enumerate
6848 @iftex
6849 @heading END OF TERMS AND CONDITIONS
6850 @end iftex
6851 @ifinfo
6852 @center END OF TERMS AND CONDITIONS
6853 @end ifinfo
6855 @page
6856 @appendixsec Appendix: How to Apply These Terms to Your New Programs
6858   If you develop a new program, and you want it to be of the greatest
6859 possible use to the public, the best way to achieve this is to make it
6860 free software which everyone can redistribute and change under these terms.
6862   To do so, attach the following notices to the program.  It is safest
6863 to attach them to the start of each source file to most effectively
6864 convey the exclusion of warranty; and each file should have at least
6865 the ``copyright'' line and a pointer to where the full notice is found.
6867 @smallexample
6868 @var{one line to give the program's name and a brief idea of what it does.}
6869 Copyright (C) @var{yyyy}  @var{name of author}
6871 This program is free software; you can redistribute it and/or modify
6872 it under the terms of the GNU General Public License as published by
6873 the Free Software Foundation; either version 2 of the License, or
6874 (at your option) any later version.
6876 This program is distributed in the hope that it will be useful,
6877 but WITHOUT ANY WARRANTY; without even the implied warranty of
6878 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6879 GNU General Public License for more details.
6881 You should have received a copy of the GNU General Public License
6882 along with this program; if not, write to the Free Software
6883 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
6884 @end smallexample
6886 Also add information on how to contact you by electronic and paper mail.
6888 If the program is interactive, make it output a short notice like this
6889 when it starts in an interactive mode:
6891 @smallexample
6892 Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
6893 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
6894 This is free software, and you are welcome to redistribute it
6895 under certain conditions; type `show c' for details.
6896 @end smallexample
6898 The hypothetical commands @samp{show w} and @samp{show c} should show
6899 the appropriate parts of the General Public License.  Of course, the
6900 commands you use may be called something other than @samp{show w} and
6901 @samp{show c}; they could even be mouse-clicks or menu items---whatever
6902 suits your program.
6904 You should also get your employer (if you work as a programmer) or your
6905 school, if any, to sign a ``copyright disclaimer'' for the program, if
6906 necessary.  Here is a sample; alter the names:
6908 @example
6909 Yoyodyne, Inc., hereby disclaims all copyright interest in the program
6910 `Gnomovision' (which makes passes at compilers) written by James Hacker.
6912 @var{signature of Ty Coon}, 1 April 1989
6913 Ty Coon, President of Vice
6914 @end example
6916 This General Public License does not permit incorporating your program into
6917 proprietary programs.  If your program is a subroutine library, you may
6918 consider it more useful to permit linking proprietary applications with the
6919 library.  If this is what you want to do, use the GNU Library General
6920 Public License instead of this License.
6922 @node Concept Index,  , GNU General Public License, Top
6923 @comment  node-name,  next,  previous,  up
6924 @unnumbered Index
6926 @printindex cp
6928 @bye