Merged from mwolson@gnu.org--2006 (patch 36-37)
[planner-el.git] / planner-el.texi
blob92ae8608c2c3521404242e5bc020a2f38aee56ea
1 \input texinfo @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename planner-el.info
4 @settitle planner-el
5 @c %**end of header
7 @dircategory Emacs
8 @direntry
9 * planner-el: (planner-el). planner.el: Day planner/organizer for Emacs.
10 @end direntry
12 @syncodeindex fn cp
14 @copying
15 This manual is for Planner version 3.40.
17 Copyright @copyright{} 2001, 2004, 2005, 2006 Free Software Foundation, Inc.@*
18 Parts copyright @copyright{} 2005 Jim Ottaway@*
19 Parts copyright @copyright{} 2005 Dryice Dong Liu
21 @quotation
22 Permission is granted to copy, distribute and/or modify this document
23 under the terms of the GNU General Public License, Version 2.0
24 or any later version published by the Free Software Foundation.
25 A copy of the license is included in the section entitled ``GNU
26 General Public License.''
27 @end quotation
28 @end copying
30 @titlepage
31 @title Guide to Planner
32 @subtitle a day planner and organizer
33 @subtitle for GNU Emacs and XEmacs
35 @c The following two commands
36 @c start the copyright page.
37 @page
38 @vskip 0pt plus 1filll
39 @insertcopying
40 @end titlepage
42 @c So the toc is printed at the start
43 @contents
45 @ifnottex
46 @node Top, Preface, (dir), (dir)
47 @comment  node-name,  next,  previous,  up
48 @top Planner
50 @insertcopying
51 @end ifnottex
53 @menu
54 * Preface::                     
55 * Introduction::                
56 * Installation::                
57 * Overview::                    A discussion of different approaches to planning
58 * Getting Started::             
59 * More about Planner::          In-depth look at some core features
60 * Managing Your Information::   Integration with external programs
61 * Advanced Configuration::      
62 * Reference Material::          
63 * Getting Help::                
64 * Acknowledgements::            
65 * GNU General Public License::  
66 * Concept Index::               
68 @detailmenu
69  --- The Detailed Node Listing ---
71 Installation
73 * Getting the Files::           
74 * Creating Your Planner::       
75 * Components::                  
76 * Advanced Installation::       
78 Getting the Files
80 * Installing from a Source Archive::  
81 * Installing from Arch::        
82 * Installing from Debian::      
84 Overview
86 * Planning based on the Franklin-Covey Approach::  
87 * Why Use Planner::             
89 Getting Started
91 * Tasks::                       
92 * Schedule::                    
93 * Notes::                       
94 * Hyperlinks::                  
95 * Example Page::                
96 * Review::                      
98 More about Planner
100 * Navigation::                  
101 * More about Tasks::            
102 * More about Notes::            
103 * Making Files Pretty::         
104 * Annotations::                 
105 * Interactive Lisp::            
106 * Publishing::                  
107 * Experimental Functions::      
109 More about Tasks
111 * Creating New Tasks::          
112 * Organizing Your Tasks::       
113 * Task Reports and Overviews::  
115 Creating New Tasks
117 * Creating a Task::             
118 * Task Priorities::             
119 * Task IDs::                    
120 * Cyclic Tasks::                
121 * Task Detail::                 
122 * Deadlines::                   
124 Organizing Your Tasks
126 * Multiple Projects::           
127 * Viewing Tasks::               
128 * Modifying Tasks::             
129 * Carrying Over Unfinished Tasks::  
130 * Task Numbering::              
131 * Task Ranks::                  
132 * Grouping Tasks::              
134 Task Reports and Overviews
136 * Accomplishments::             
137 * Task Overviews::              
138 * <tasks> tag::                 
140 More about Notes
142 * Using Allout Mode::           Quickly navigating your notes
143 * <notes>::                     Note headlines
144 * <past-notes>::                Index of past notes
145 * Note Indices::                
147 Publishing
149 * Publishing Calendars::        planner-calendar.el
150 * Authz Access Restriction::    planner-authz.el
151 * RSS Publication::             Sharing notes with planner-rss.el
152 * iCal Task Publication::       Sharing tasks with planner-ical.el
153 * RDF Publication::             planner-rdf.el
155 RDF Publication
157 * Publishing with planner-rdf::  
158 * planner-rdf Tags::            
159 * planner-rdf Usage Examples::  
161 Managing Your Information
163 * E-mail::                      Linking notes and tasks to messages
164 * Scheduling and Time::         Tracking appointments and where your time goes
165 * Finances::                    Display your account balances and more
166 * Contacts and Conversations::  BBDB and ERC
167 * Tracking Research and Resources::  The Web, bibliographies, and bookmarks
168 * Tracking Development::        
170 E-mail
172 * Unix mail::                   Unix mailboxes: planner-unix-mail.el              
173 * Gnus::                        Gnus mail and news reader: planner-gnus.el
174 * VM::                          VM mail reader: planner-vm.el
175 * Wanderlust::                  Wanderlust mail reader: planner-wl.el
176 * MH-E::                        MH-E mail reader: planner-mhe.el
177 * Rmail::                       Rmail: planner-rmail.el
179 Scheduling and Time
181 * Diary::                       Using the Emacs diary
182 * Appointments::                Appointments in plan pages: planner-appt.el
183 * Timeclock::                   Time tracking: planner-timeclock.el
184 * schedule.el::                 Project completion: planner-schedule.el
186 Diary
188 * Planner-Diary Advanced Features::  
190 Usage
192 * Task-based Appointments::     
193 * Schedule-based Appointments::  
194 * Viewing Appointments::        
195 * Appointment Updating on Save::  
196 * Appointment and Calendar Integration::  
197 * Appointment Hooks::           
199 Finances
201 * Ledger::                      Personal finances: planner-ledger.el
203 Contacts and Conversations
205 * BBDB::                        Contacts: planner-bbdb.el
206 * Emacs Relay Chat::            Internet Relay Chat: planner-erc.el
208 Tracking Research and Resources
210 * W3m::                         Web browser: planner-w3m.el
211 * BibTeX::                      Bibliographies: planner-bibtex.el
212 * Bookmark::                    Bookmarks: planner-bookmark.el
214 Tracking Development
216 * Log Edit::                    Changelogs: planner-log-edit.el
217 * XTLA::                        TLA changesets: planner-xtla.el
218 * Gnats::                       Gnats: The GNU bug reporting system
220 Advanced Configuration
222 * Customizing Your Day Pages::  Change your templates
223 * Variables to Customize::      Change various aspects of Planner behavior
224 * Ideas for Other Keybindings::  Add to and change the default keybindings
226 Reference Material
228 * Keeping Track of Time::       
229 * Other Interactive Functions::  
230 * Planner Keybindings::         Default keybindings for Planner
231 * Sample Configuration Files::  
233 Sample Configuration Files
235 * File Organization::           
236 * Bare-Bones Planning::         
237 * Bare-Bones Planning with Plan Pages::  
238 * Tasks on Plan Pages with Some Day Pages::  
239 * Hierarchical Tasks::          
241 @end detailmenu
242 @end menu
244 @node Preface, Introduction, Top, Top
245 @comment  node-name,  next,  previous,  up
246 @chapter Preface
248 This document describes Planner, which was written by John Wiegley and
249 is now maintained by Michael Olson (@pxref{Acknowledgements}).
251 This document is a work in progress, and your contribution will be
252 greatly appreciated. Please e-mail comments and suggestions to the
253 mailing list (@pxref{Getting Help}). In the subject line of your
254 e-mail, include the word @samp{Planner}.
256 This documentation is available in eye-pleasing formats including PDF
257 and HTML at @url{http://www.mwolson.org/static/doc/}.
259 Documentation author: John Sullivan @email{john@@wjsullivan.net}
261 Maintainer: Michael Olson @email{mwolson@@gnu.org}
264 John Sullivan (johnsu01)@*
265 April 25, 2004
267 @node Introduction, Installation, Preface, Top
268 @comment  node-name,  next,  previous,  up
269 @chapter Introduction
271 Planner is an organizer and day planner for Emacs.  It helps you keep
272 track of your pending and completed tasks, daily schedule, dates to
273 remember, notes and inspirations. It is a powerful tool not only for
274 managing your time and productivity, but also for keeping within easy
275 keystroke reach all of the information you need to be productive. It can
276 even publish reports charting your work for your personal web page, your
277 conscience, or your soon-to-be-impressed boss.
279 In fact, because it uses as its building blocks simple plain-text files,
280 it is an incredibly modular and flexible tool capable of shaping and
281 handling your personal information in ways whose variety is limited only
282 by your imagination. Because of this, Planner has a very active and
283 generous community who regularly share their innovations with each
284 other. Many of these modules and extensions are included in the archive
285 that you will download. Once you get the basics down, you'll probably
286 want to explore some of them. But as you read this manual and work with
287 Planner, keep in mind that the basic core is actually very simple, and
288 it might be worth spending time with just that before delving into the
289 customizations.
291 Because they are plain text with very few requirements, the organizer
292 pages kept by Planner can be as basic or as detailed as you
293 like. Your pages can be simple to-do lists with no more additional
294 information than what you would scrawl on a napkin, or they can be a
295 highly technical affair involving hyperlinks, embedded Lisp code,
296 appointment schedules and RSS feeds. As with so much in Emacs, it's
297 all up to you.
299 To get started with Planner, you first need to download it, and possibly
300 also the packages it depends on (@pxref{Installation}).
302 @node Installation, Overview, Introduction, Top
303 @comment  node-name,  next,  previous,  up
304 @chapter Installation
305 @cindex installation
307 Planner depends on Muse. Information for downloading and installing
308 Muse can be found at
309 @url{http://www.mwolson.org/static/doc/muse.html}.
311 Make sure that you use the latest Muse release.  Development code might
312 prove unstable.
314 @menu
315 * Getting the Files::           
316 * Creating Your Planner::       
317 * Components::                  
318 * Advanced Installation::       
319 @end menu
321 @node Getting the Files, Creating Your Planner, Installation, Installation
322 @comment node-name,  next,  previous,  up
323 @section Getting the Files
325 Currently, there are three ways to obtain and install Planner. You can
326 install it from a source archive, Arch repository, or Debian package.
328 @menu
329 * Installing from a Source Archive::  
330 * Installing from Arch::        
331 * Installing from Debian::      
332 @end menu
334 @node Installing from a Source Archive, Installing from Arch, Getting the Files, Getting the Files
335 @comment node-name,  next,  previous,  up
336 @subsection Installing from a Source Archive
337 @cindex source code archive, installing from
339 You can install Planner from the source archive packaged and
340 distributed directly by the maintainer. This archive is provided in
341 both @file{.tar.gz} and @file{.zip} format.
343 @enumerate
344 @item
345 Download and unpack either
346 @url{http://www.mwolson.org/static/dist/planner-latest.tar.gz} or
347 @url{http://www.mwolson.org/static/dist/planner-latest.zip}.
349 @item Edit your @file{~/.emacs} (@file{_emacs} on Microsoft Windows).
351 @example
352 ;; Add the directories to your load path
353 (add-to-list 'load-path "/path/to/muse/lisp")
354 (add-to-list 'load-path "/path/to/planner")
355 (add-to-list 'load-path "/path/to/remember")
357 ;; Load planner
358 (require 'planner)
359 @end example
360 @end enumerate
362 @subsubsection Updating Your Version
364 Download a new version and extract it over the old directory. Don't
365 forget to delete any byte-compiled files (@file{*.elc}) in the
366 directories so that the new code will be used.
368 @node Installing from Arch, Installing from Debian, Installing from a Source Archive, Getting the Files
369 @comment node-name,  next,  previous,  up
370 @subsection Installing from Arch
371 @cindex Arch repositories
372 @cindex Arch, installing from
374 Arch allows you to retrieve previous versions and select specific
375 features and bugfixes. Debian users can install Arch with @kbd{apt-get
376 install tla}. Users of other distributions should see
377 @url{http://regexps.srparish.net/www/}.
379 To get started with Planner using Arch, you'll need to run some initial
380 commands to register your local copy of the archive and retrieve the
381 files.
383 @example
384 # Register the Muse archive
385 tla register-archive http://www.mwolson.org/archives/2006
387 # Get the Muse archive
388 tla get mwolson@@gnu.org--2006/muse--main--1.0 muse
390 # Download planner module into the planner/ subdirectory
391 tla get mwolson@@gnu.org--2006/planner--main--1.0 planner
392 @end example
394 Then add the following lines to your @code{~/.emacs}:
396 @example
397 ;; Add the directories to your load path
398 (add-to-list 'load-path "/path/to/muse/lisp")
399 (add-to-list 'load-path "/path/to/planner")
400 (add-to-list 'load-path "/path/to/remember")
402 ;; Load planner
403 (require 'planner)
404 @end example
406 You can also browse the Arch repository on the web at
407 @url{http://www.mwolson.org/cgi-bin/archzoom/archzoom.cgi/mwolson@@gnu.org--2006/planner}.
409 @subsubsection Updating Your Version
410 @cindex Arch, updating from
412 To stay up-to-date using Arch, here are some commands that might be
413 useful.
415 To list upstream changes not in local copy:
417 @example
418 # Change to the source directory you are interested in. Example:
419 cd muse/
421 # Display the summary of changes
422 tla missing --summary
423 @end example
425 To update to the latest version:
427 @example
428 cd muse; tla replay
429 cd ../planner; tla replay
430 cd ../remember; tla replay
431 @end example
433 Don't forget to delete any byte-compiled files (@file{*.elc}) in the
434 directories so that the new code will be used.
436 @node Installing from Debian, , Installing from Arch, Getting the Files
437 @comment node-name,  next,  previous,  up
438 @subsection Installing from Debian
439 @cindex Debian package
441 Debian packages for Planner, Muse, and Remember are available in Debian
442 proper as the @code{planner-el}, @code{muse-el}, and @code{remember-el}
443 packages, respectively.
445 If you wish to try experimental packages, add the following lines to
446 your @file{/etc/apt/sources.list}
448 @example
449 deb http://www.mwolson.org/debian/ ./
450 @end example
452 Then, do the following steps as root:
454 @example
455 apt-get update
456 apt-get install muse-el
457 apt-get install planner-el
458 @end example
460 @subsubsection Updating Your Version
461 @cindex Debian package, updating
463 If you installed Planner from Debian, do @kbd{apt-get update; apt-get
464 upgrade} to upgrade all packages that can be upgraded, or @kbd{apt-get
465 update; apt-get install planner-el} to upgrade just planner-el.
467 @node Creating Your Planner, Components, Getting the Files, Installation
468 @section Creating Your Planner
470 Now that you have installed the files for Planner and Muse, you need
471 to set some options to create your first planner.
473 Muse thinks in terms of projects. Each project consists of a group of
474 documents and certain information associated with these
475 documents. Planner is organized as a project within Muse. So, you need
476 to tell Muse a bit about it.
478 Add something like the following code to your @file{.emacs} file.
480 First, give your new Planner project a name. In this case, we use the
481 name, ``WikiPlanner''.
483 @example
484 (setq planner-project "WikiPlanner")
485 @end example
487 Next, add an entry for your project to Muse's master list of
488 projects. Don't forget to use your own name here in place of
489 ``WikiPlanner'' if you have chosen something different.
491 @example
492 (setq muse-project-alist
493       '(("WikiPlanner"
494          ("~/Plans"           ;; where your Planner pages are located
495           :default "TaskPool" ;; use value of `planner-default-page'
496           :major-mode planner-mode
497           :visit-link planner-visit-link)
499          ;; This next part is for specifying where Planner pages
500          ;; should be published and what Muse publishing style to
501          ;; use.  In this example, we will use the XHTML publishing
502          ;; style.
504          (:base "planner-xhtml"
505                 ;; where files are published to
506                 ;; (the value of `planner-publishing-directory', if
507                 ;;  you have a configuration for an older version
508                 ;;  of Planner)
509                 :path "~/public_html/Plans"))))
510 @end example
512 This code should work fine as-is for you as long as the directories
513 you see exist, and as long as you have no other Muse projects besides
514 your planner.
516 The first directory (@file{~/Plans}) is the directory where the
517 source files for your planner will reside. This is the directory where
518 you will actually visit files and edit them.  These files must have a
519 ``.muse'' extension.
521 The second directory (@file{~/public_html/Plans}) is the directory where
522 your planner files will be published by Muse as XHTML.
524 After you have added this code, make sure to either evaluate it or
525 restart Emacs.
527 @node Components, Advanced Installation, Creating Your Planner, Installation
528 @comment node-name,  next,  previous,  up
529 @section Components
531 Now that you have the archive, let's look at what's in it.
533 There should be three directories, named @file{planner}, @file{muse} and
534 @file{remember}.
536 In the @file{planner/} directory, you'll see many files with names like
537 @file{planner-gnus.el}. These are extra modules and extensions for
538 Planner, which you can use to tailor Planner to fit your desired
539 planning and information management habits.
541 In the @file{muse/lisp} directory, you'll see many files with names like
542 @file{muse-blosxom.el}. As in @file{planner/}, these are optional
543 modules and extensions.
545 A minimal working installation includes just @file{planner/planner.el}.
547 You need @file{planner.el} because it provides the core functions for
548 handling tasks, notes, and page navigation. You need @file{Emacs Muse}
549 because it provides the functions used to display your pages (both in an
550 emacs buffer and as HTML), and for connecting them to each other. More
551 specifically, it enables you to have hyperlinks and formatting in your
552 emacs buffers even though the actual files you are working with are
553 saved in plain text. These abilities are used in Planner to format your
554 planner pages the way you like, to create links from your tasks and
555 notes to the materials and projects they refer to, and to optionally
556 ``publish'' your pages in different formats, including HTML.
558 In the @file{remember/} directory are files related to
559 RememberMode. RememberMode does not depend on Planner or Muse, but works
560 best with Planner installed. It is not required in order to use Planner,
561 but it is used by many Planner users to record notes and information to
562 their planner pages.
564 If you are curious, you can open each file in these directories and read
565 the comments at the top, to get an idea of what each extension is used
566 for. They are also all detailed later in this manual.
568 @node Advanced Installation,  , Components, Installation
569 @comment  node-name,  next,  previous,  up
570 @section Advanced Installation
572 Once you decide you want to keep Planner around for a while, there
573 are two additional steps you can take to make using it easier and more
574 efficient. These steps are optional.
576 @itemize
578 @cindex @file{remember.el}
579 @cindex @file{remember-planner.el}
580 @item You can install @file{remember.el} and @file{remember-planner.el}
581 so that you can create Planner notes from anywhere. See the
582 documentation at
583 @uref{http://sacha.free.net.ph/notebook/doc/dev/remember/} for more
584 information.
586 @cindex installing the info file
587 @cindex @file{planner-el.texi}, installing
588 @cindex @file{planner-el.info}, installing
589 @item You can make this document, the Planner info file, appear in
590 the index of info files you see when you type @command{M-x info} or
591 @kbd{C-h i} in Emacs. The instructions for doing this vary depending
592 on whether you have permission to edit certain files on your
593 system. Follow the instructions in @ref{Installing an Info File, ,
594 ,texinfo, Texinfo}, using something like:
596 @example
597 * Planner: (path/to/planner/Planner). Organizer/day planner
598 for Emacs.
599 @end example
601 for the new entry in the info @file{dir} file.
603 @cindex byte compiling
604 @item You can byte-compile @file{planner.el}, @file{Muse},
605 @file{remember.el}, or any of the optional modules you frequently use,
606 in order to improve the speed of their execution. Basically, all you
607 need to do is change to the directory of each project and run
608 @command{make} from the command line. To read more detail about byte
609 compilation, see @ref{Byte Compilation, , ,elisp, Emacs Lisp Reference
610 Manual}.
612 @end itemize
614 @node Overview, Getting Started, Installation, Top
615 @comment node-name,  next,  previous,  up
616 @chapter Overview
618 Planner is a plain-text hyperlinked personal information manager
619 for Emacs that helps you keep track of tasks, notes, and other
620 information. People use Planner to support different ways of planning
621 one's day, from Franklin-Covey and David Allen's Getting Things Done
622 to home-brew hacks. Planner is even used to manage information not
623 normally handled by a personal information manager, like bugtracking,
624 time tracking, and team data. If you start by using Planner as a basic
625 TODO and notes manager, you might find other ways it can help you
626 improve your process.
628 You can use Planner to keep track of your tasks, schedule, notes,
629 and other information you want to store in hyperlinkable text files.
630 You can get the most benefit out of a personal information manager if
631 you use it everyday. Most people add @code{(plan)} to the end of their
632 @file{~/.emacs} so that Planner shows today's schedule and
633 unfinished tasks whenever Emacs starts. If you leave your Emacs
634 running for more than 24 hours, try to get into the habit of running
635 @code{plan} at least once a day.
637 Because your time is important, Planner tries to minimize
638 distractions, making it easier for you to jot down tasks and notes
639 without being distracted from your work. People often make tasks based
640 on the current buffer, so Planner tries to create hyperlinks to
641 whatever you're looking at so that you can jump back to it easily. The
642 @ref{Getting Started} tutorial will show you how to set that up for
643 both tasks and notes.
645 The customizability of Planner means you can make your personal
646 information manager truly personal. Planner strives to be as flexible
647 as possible, and we would love to adapt Planner to fit your needs.
648 Browse through our mailing list at
649 @url{http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss} to
650 find out how other people are using Planner, and post your feature
651 requests and bug reports there!
653 Planner is just a tool. It does not dictate a particular way of
654 planning, although it supports some ways better than it supports
655 others. If you want to take some time thinking about planning, read
656 the following reflections for inspiration and ideas. On the other
657 hand, if you want to hit the ground running, see @ref{Getting
658 Started}. If you already have a specific way of planning in mind,
659 check out @ref{Sample Configuration Files}.
661 @menu
662 * Planning based on the Franklin-Covey Approach::  
663 * Why Use Planner::             
664 @end menu
666 @node Planning based on the Franklin-Covey Approach, Why Use Planner, Overview, Overview
667 @comment  node-name,  next,  previous,  up
668 @section Planning Based on the Franklin-Covey Approach
669 @cindex philosophy of planning
671 This is a slightly edited and updated version of an essay by John
672 Wiegley. Read it if you want to get some insights into one way of
673 planning. You can skip this if you want to go straight to planning
674 your day.
676 What is planning?  It can be a nebulous thing to define.  In its
677 essence, however, it is very simple: it's how we achieve our dreams.
679 Our days are filled with time, and hence with actions, whether they
680 be of a mental or physical sort.  But there are two kinds of
681 action: reactive and creative.  Reactive action is a response to
682 the environment, a reaction to stimulus.  Had we enough instincts
683 to ensure survival, we could live according to this kind of action
684 alone.  It is a mode of behavior we share with every living
685 species.
687 The opposite to reactivity is creativity, when we decide upon a
688 course of action that is a wholly a product of personal choice.  We
689 then make decisions as to the steps needed to make this wish a
690 reality.  This is planning.  Planning is essentially a creative
691 endeavor at every step.
693 First, create the idea, what you want to achieve.  Very short-term
694 ideas do not need much more than thinking about how to do it.  But
695 long-term ideas require planning, since the mind cannot contain all
696 of the details.
698 Second, decide how the idea maps into the circumstances you find
699 yourself in.  Some environments will assist your plan, others
700 hinder it.  But step by step, identify every barrier to the
701 realization of your idea, and devise a countermeasure to overcome
702 it.  Once you've mapped things out from beginning to end,
703 accounting for unknowables as best you can, you now have your plan.
705 Third is to break the stages of the plan into parts that are not
706 overwhelming in their complexity.  It is at during this phase that
707 a plan is turned into task items, each to be accomplished within
708 the span of one day's time.  If a task requires several days, break
709 it up further.  The smaller it is, the less your mind will recoil
710 from attempting it.
712 Fourth is to monitor your progress, identifying problems and
713 correcting for them as you go.  Some plans start out unachievable,
714 and remain that way indefinitely, due to a simple lack of
715 observation.  If nothing is working for you, change it.  Otherwise,
716 your plan is merely a well-crafted wish.
718 Fifth is just to do the work, and be patient.  All good plans take a
719 great deal of time, and *cannot* happen immediately.  The groundwork
720 must be laid for each step, or else it will rest on an unsecure
721 foundation.  If you follow your plan doggedly, applying some time to
722 it each day or week, it @emph{will} happen.  Remember the story of the
723 tortoise and the hare.  I've even written a short essay on the
724 necessity of gradual accomplishment, which can be found at
725 @url{http://emacswiki.org/johnw/essays/node2.html}.
727 How can this software help?  Computers are ideal for manipulating
728 information, since they allow you to change things without erasing
729 or rewriting.  And since all plans change quite a bit during their
730 implementation, a planning program can be very helpful.
732 Start by adding the following to your @file{.emacs} (or @file{_emacs}):
734 @example
735 (load "planner")
736 @end example
738 Now, conceive your idea.  I can't believe there's nothing you want
739 from life.  More peace, time to enjoy the world, an end to war?
740 Everyone wants something.  Search deeply, and you will find
741 countless unhoped wishes lurking therein.  Choose one for now, and
742 think on it for a while.
744 Then open a file (using @kbd{C-x C-f}) within the directory named by
745 @code{planner-directory}.  Emacs will automatically recognize this file
746 as a planner file.  Name the file after your plan, such as
747 @file{BetterHealth}.
749 Choose an idea you really want to accomplish.  Struggle to
750 differentiate between the things you want because others want them,
751 and the things you want for yourself.  It takes quite an effort, and
752 may require a long time before you notice the difference.  Many people
753 want to be more healthy to be more attractive, which is an externally
754 driven goal.  Unless @emph{you} really want to accomplish what you
755 envision, the odds are you will fail.  Only our own wishes and dreams
756 possess enough personal energy to see themselves to fruition.  What
757 happens to many of us is simply that we never become conscious of
758 these dreams: what we love, what we desire most.  When I talk to
759 friends, so much of what I hear is things they want because they feel
760 they should want them.  There's just not enough energy there to pursue
761 a good plan, because nearly all of it is negative energy.
763 Do you know what you really want?  Don't worry, many people don't.
764 It's not a question anyone really wants us to pursue, because often
765 we don't want what others do; it doesn't contribute to the social
766 welfare, and all that nonsense.  Somehow we always forget that
767 what's good for the social welfare now, was someone else's crazy
768 dream a hundred years ago.  The human aversion to fundamental
769 change is always one's greatest enemy, so don't waste any time
770 getting bitter about it.
772 For the sake of argument I assume you really do want to be
773 healthier, because you've fallen in love with the ideal of purity,
774 or you understand the connection between your physical self and the
775 world around you, and how this can open up your spirit to desiring
776 more.  I assume.  :)
778 So you're in a Wiki file called @file{BetterHealth}.  Start typing.
779 Type anything related to your idea: what you think about it, your
780 ideas on it, @emph{and especially what the end will look like}.  If
781 you can't visualize the end, you can't plan, since planning is about
782 drawing a line between now and then.
784 When you've typed enough to gain a vision of your goal, start
785 drafting what the possible intermediate steps might be.  Then stop,
786 get up, walk around, enjoy life, and come back to it.  Taking a
787 long time at the beginning is not a bad idea at all, as long as
788 it's not forever.
790 As you chew on your idea, it will begin to become more and more
791 concrete.  You'll have ideas about the smallest pieces, and ideas
792 about the biggest pieces.  Keep going until it starts to take shape
793 before you, and you can see yourself in your mind's eye moving from
794 the present into the future.  Write down this progression, and the
795 sorts of things you might encounter along the way.
797 As you continue, you'll naturally discover discrete phases, or
798 ``milestones'' as managers love to call them.  These are very
799 important, because they let you know you're making progress.  I
800 recommend having a big party with friends every time you achieve a
801 milestone.  A typical plan might have between three and ten.
803 Between the milestones are the bigger pieces of your plan.  Name
804 these pieces using MixedCase words, and you'll notice that Emacs
805 colors and underlines them for you.  Like, FindGoodGym.  Hit return
806 on this highlighted word, and you'll find yourself in another,
807 blank file.  In this file, start drafting your sub-plan, just as
808 you did with the larger plan.  You should find it easier now, since
809 the scope is smaller.
811 As you break down further, you'll notice simple little things that
812 need to get done.  These are your tasks.  Every plan is a
813 succession of tasks.  The difference from reactivity is that each
814 task is part of the larger plan. This is what it means to be
815 systematic: that everything you do helps further your plan.  If you
816 have tasks in your day that contribute to no plan, they are
817 reactive.  Of course, life is full of these, but don't let them
818 take up more than 20% of your day.  If you allow yourself to be
819 dominated by reactive tasks, you'll regret it at the end of your
820 life.  I don't know this personally, but I do know that striving
821 for one's dreams -- and seeing them come to fruition -- is the
822 greatest joy a man can possess.  It is the essence of freedom, of
823 living, of creation.  Reactivity is the opposite of this, and
824 serves only to drain our energy and slacken our spirits.
826 Now that you've thought of a simple task, type @kbd{C-c C-t}. This
827 will ask for a brief description of the task, and when you plan to do
828 it. If you hit @key{RETURN} at the question @samp{When}, it assumes
829 you mean today. It will also pop up a three-month calendar at this
830 question, so you can see where your free days are. Make sure you set
831 the variable @code{mark-diary-entries-in-calendar} to @samp{t} in your
832 @file{.emacs} (or @file{_emacs}) file. This way, you can see which
833 days your appointments fall on. (Read about the Emacs Calendar and
834 Diary in @ref{Calendar/Diary, , , Emacs, GNU Emacs Manual}.)
836 @example
837 (setq mark-diary-entries-in-calendar t)
838 @end example
840 Once your task is in there, go back to your plan and keep
841 generating more tasks.  Generate them all!  Fully describe---as
842 tasks---everything necessary to bring your sub-plan to completion.
843 Don't create tasks for the other sub-plans.  You may have good idea
844 of what they'll look like, but don't bother rendering them into
845 tasks just yet.  Things will change too much between now and then,
846 for that to be a good use of your time.
848 Is your sub-plan now rendered into all of the tasks necessary to
849 reach your first milestone?  Great!  That is the purpose of
850 planner.el.  The rest is really up to you.  If you find that you
851 keep putting things off, and never do them, that's the surest sign
852 you're planning for someone else's dream, and not your own.
854 Here are some of the things planner.el can do, to help you manage
855 and track your tasks:
857 At the beginning of every day, type @kbd{M-x plan}.  This will jump
858 you to the top of the most recent task list before today.  If you
859 skipped a bunch of days, you'll have to open up those files on your
860 own.
862 Probably some of the tasks that day won't be finished -- that's OK.
863 Learning to properly estimate time is a magical, mystical art that few
864 have mastered.  Put your cursor on those undone tasks, and type
865 @kbd{C-c C-c}.  This will move them into today's task page.  You can
866 jump to today's task page at any time by typing @kbd{C-c C-n} (from a
867 Wiki or planning page).  I heartily recommend binding @kbd{C-c n}, to
868 jump you to this page from anywhere:
870 @example
871 (define-key mode-specific-map [?n] 'planner-goto-today)
872 @end example
874 As you look at your task sheet each day, the first thing to do is to
875 ``clock in'' to one of them.  This isn't necessary, and is only
876 helpful if you're around your computer a lot.  But by typing @kbd{C-c
877 C-i} (assuming you have my @file{timeclock.el} on your load-path), it
878 will log the time you spend working on your sub-plan (@pxref{Time
879 Intervals, , , Emacs, GNU Emacs Manual}).  This is helpful for viewing
880 your progress.  Type @kbd{C-c C-o} to clock out.
882 @kbd{C-M-p} and @kbd{C-M-n} will move a task up and down in priority.
883 Priority is represented by a letter A through C.  'A' tasks mean they
884 must be done that day, or else your plan is compromised and you will
885 have to replan.  'B' means they should be done that day, to further the
886 plan, otherwise things will be delayed.  'C' means you can put off the
887 task if you need to, although ultimately it will have to be done.
889 For reactive tasks, the letters mean something different: 'A' means
890 you must do it today, or somebody will roast your chestnuts over an
891 open fire.  'B' means you should do it today, or else someone will
892 be practicing patience at the day's end.  'C' means no one will
893 notice if you don't do it.
895 Again, reactive tasks are ENEMIES OF PLANNING.  Really, until you
896 see them that way, circumstances will push you around and steal
897 your life away.  We have only so many years to use, and everyone is
898 greedy to take them.  It's insidious, almost invisible.  A healthy
899 dislike of reactivity will do wonders for organizing your affairs
900 according to their true priority.
902 The last word that needs to be said concerns ``roles''.  Every person
903 stands in several positions in his life: husband, employee, manager,
904 etc.  These roles will tend to generate tasks not associated with any
905 immediate plan, but necessary to maintain the health and functioning
906 of the role.  My suggestion is to keep this the smallest possible
907 number, and fulfill those that remain well.  How you decide to
908 apportion your time between pursuing grand designs, and fostering deep
909 relationships, is a personal matter.  If you choose well, each will
910 feed the other.
912 I mention this to point that reactivity is something not
913 exclusively associated with tasks that have no master plan, because
914 being a father, for example, is something that rarely proceeds
915 according to orderly plans.  But the role of father itself is its
916 own plan, whose goal is ``to be the best one can'', and whose
917 component tasks are spending time on whatever comes up.  It is, in
918 a sense, an implicit plan.  But reactive tasks follow no plan at
919 all; they are parasites of time that suck the spirit away, whereas
920 properly chose roles actually help fulfill one's own inner needs.
921 At least, this is what I believe.
923 @defun plan force-days
924 Start your planning for the day, beginning with the last day's tasks.
926 If @code{planner-carry-tasks-forward} is non-nil, find the most recent
927 daily page with unfinished tasks and reschedule those tasks to
928 the current day.  If @var{force} is non-nil, examine all past daily
929 pages for unfinished tasks.
931 If @code{planner-carry-tasks-forward} is nil, visit the most recent
932 daily page.  If a daily page for today exists, visit that instead.
934 If @var{force-days} is a positive integer, scan that number of days.
935 If @var{force-days} is @samp{t}, scan all days.
937 @end defun
939 @node Why Use Planner,  , Planning based on the Franklin-Covey Approach, Overview
940 @comment  node-name,  next,  previous,  up
941 @section Why Use Planner?
942 @cindex Planner, why use
944 You can skip this essay if you just want to get started, or read it
945 for some insights into why the previous maintainer is crazy about it.
947 Why I Use Planner, by Sacha Chua
949 I thought about why I liked Planner. Planner as a TODO manager
950 isn't particularly special. Although I can assign tasks to categories
951 and see a breakdown of what projects are taking up my time, Evolution
952 and Microsoft Outlook provide more powerful task support. In other
953 task managers, you can e-mail tasks, assign multiple categories and
954 fill in all sorts of metadata. You can even synchronize your tasks
955 with devices like a phone or PDA. So why use Planner?
957 I realized that integration into my way of life and automatic context
958 clues are what really make planner tasks worth it for me. I don't have
959 to switch to another application to create a task. I can just hit a
960 keyboard shortcut. Planner uses a minibuffer to get the task
961 description. My windows are not rearranged in any way, and I can look
962 at the data that's relevant to a task. Not only that, tasks
963 automatically pick up context clues, like whom I'm talking to on IRC
964 or the file I'm editing at the moment. This cuts down on the explicit
965 context I need to include and makes it easier for me to bring up the
966 task again.
968 As a scheduler, Planner is also not particularly distinguished.
969 Sure, it can display my @file{~/diary}, but for that matter so can
970 @kbd{M-x diary}. Evolution and Outlook can give me a more graphical
971 view of my time, sync with my PDA, and coordinate my schedule with
972 other people. Those applications support detailed schedule entries
973 with powerful cyclic options. On the other hand, Planner gives me
974 a personal, plain text view and (at least the way I use it) requires
975 me to edit a separate file to add new appointments. (I've defined a
976 few shortcut keys to deal with this.) However, it does have one
977 advantage---my schedule is always loaded. I used to use Outlook on
978 Windows, but having my schedule in a separate application meant that I
979 actually looked at it very rarely, as I had turned off reminders
980 because they got annoying.
982 Planner's notes, however, are what really convinced me. I can hit
983 a keyboard shortcut from anywhere and type my notes into a buffer
984 which automatically keeps context information. After typing the note,
985 I can then categorize it. I think that the critical thing here is that
986 interruptions---fleeting thoughts---don't break my flow. I can just
987 pop up a remember buffer, stow that thought away somewhere, and go
988 back to it whenever I want. In contrast, creating a note in Outlook
989 means switching out of my application, making a couple of keystrokes,
990 typing the note in, and then switching back. The context switches make
991 it hard to keep track of where I am and what I'm supposed to remember.
992 Not only that, I need to enter context by hand. Even though I can
993 color my notes and reorganize them in Outlook, I find the context
994 switch too expensive. I used to keep notes in other knowledge
995 management tools as well. Some applications allowed me to
996 drag-and-drop links into the current note, and that was cool. But that
997 required a manual action, and those applications didn't feel
998 integrated into my way of working. (Note: You'll need remember.el for
999 this.)
1001 I guess that's why I like Planner. Unlike other organizers which
1002 don't know anything about the applications I use, Planner tries
1003 its best to integrate into the way I work, and it's easy to extend.
1004 Fortunately I do almost all my work in Emacs, so I can think of my
1005 organizer as integrated into my e-mail client, Internet Relay Chat
1006 client, web browser, file editor and even games. It automatically
1007 picks up context clues from these applications and allows me to easily
1008 jump back to relevant files. It doesn't distract me. It allows me to
1009 key in data and then it gets out of my way.
1011 (That said, it's perfectly okay to use Planner even if you don't live
1012 in Emacs.)
1014 The processing that happens in the background is a bonus, and
1015 publishing my task list and notes online has greatly helped me. It
1016 gives other people a way to see what I'm working on and what I've
1017 planned for the future. Occasionally people write in with additional
1018 resources and helpful tips. (Again, this is purely optional. Many
1019 people don't publish their planner pages. Other people use really
1020 fine-grained access control.)
1022 I think the greatest feature of Planner, though, is its user
1023 community. Because Planner can be easily modified, we can experiment
1024 with a lot of new ideas quickly, and we can tailor Planner to fit our
1025 needs. I love checking my @samp{emacs-wiki-discuss} mail and finding
1026 out how people have tweaked Planner or would like to tweak Planner,
1027 and I've learned a lot by exchanging reflections on organizing one's
1028 life.
1030 I really wasn't an organization freak before I started using Planner.
1031 I often forgot to do my homework or answer important mail. I still
1032 procrastinate now, but at least it's all being kept track of
1033 somewhere! I also really like how Planner lets me to gradually improve
1034 how I'm doing things, and I feel I've come a long way.
1036 Please try it out! We'd love to hear how Planner can become
1037 @emph{your} personal information manager.
1039 @node Getting Started, More about Planner, Overview, Top
1040 @comment  node-name,  next,  previous,  up
1041 @chapter Getting Started
1043 At the end of this tutorial, you will be able to use Planner and
1044 related modules to keep track of your tasks, schedules and notes, all
1045 within the convenience of Emacs.
1047 There are two kinds of pages in a Planner wiki. Day pages show tasks,
1048 schedule, and notes for the day, while plan pages organize related tasks
1049 and notes into a single page.
1051 If you have not yet added planner to your @file{~/.emacs}, add the
1052 following lines:
1054 @example
1055 (add-to-list 'load-path "/path/to/muse/lisp")
1056 (add-to-list 'load-path "/path/to/planner")
1057 (add-to-list 'load-path "/path/to/remember")
1058 (require 'planner)
1059 @end example
1061 This will bring up the most recent day page with unfinished tasks or
1062 create a new day page if necessary. By default, planner pages are
1063 stored in @samp{~/Plans} (@code{planner-directory}).
1065 @menu
1066 * Tasks::                       
1067 * Schedule::                    
1068 * Notes::                       
1069 * Hyperlinks::                  
1070 * Example Page::                
1071 * Review::                      
1072 @end menu
1074 @node Tasks, Schedule, Getting Started, Getting Started
1075 @section Tasks
1077 Let us start by creating a task labelled
1079 @example
1080 Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss
1081 @end example
1083 From anywhere (even this info buffer!), call @kbd{M-x
1084 planner-create-task-from-buffer} to create a new task. Fill in the
1085 description and choose a date by:
1087 @itemize
1088 @item typing 1 - 31 to put the task on that day of the month,
1089 @item accepting the default (today) by pressing RET,
1090 @item selecting the date with mouse-1,
1091 @item
1092 typing +n (where in is an integer) to schedule the task in n days time,
1094 @item typing nil to make an undated task.
1095 @end itemize
1097 For now, accept the default (@samp{today}) by pressing @key{RET}.
1099 You will then be prompted for a plan page. Plan pages gather related
1100 tasks and notes, giving you an overview of what you've done so far.
1101 You can accept the default TaskPool, create your own plan page, or
1102 specify nil to make a task that is not associated with a plan page.
1103 For now, accept the default (@samp{TaskPool}) by pressing RET.
1105 You have created your first task. View today's page with
1106 @kbd{M-x planner-goto-today}. You will see a line of the form
1108 @example
1109 #B  _ Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss (TaskPool)
1110 @end example
1112 If you created the task from this page, then there will be an additional
1113 annotation:
1115 @example
1116 #B  _ Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss : Tasks (TaskPool)
1117 @end example
1119 The URL, @samp{TaskPool} and @samp{Getting Started} are
1120 hyperlinks. You can use TAB and S-TAB to navigate between them and RET
1121 to follow the link.
1123 Create more tasks using @kbd{M-x planner-create-task-from-buffer}.
1124 This is bound to @kbd{C-c C-t} in @code{planner-mode} pages
1125 for your convenience. For example, create the following tasks:
1127 @itemize
1128 @item
1129 @samp{Describe my current way of working and how I would like to work},
1130 for three days from now (@samp{+3}),
1131 @item
1132 @samp{Learn how to schedule a task}, an undated task (@kbd{nil}) on the
1133 TaskPool page,
1134 @item
1135 @samp{Browse through the Planner info manual} for today (@kbd{.} or
1136 accept the defaults), and
1137 @item
1138 @samp{Add (plan) to the end of my [[~/.emacs]]} for today, but without a
1139 plan page (specify @kbd{nil} at the plan page prompt)
1140 @end itemize
1142 Tip: I bind planner-create-task-from-buffer to "F9 t" so that I can
1143 easily call it from anywhere. You can do that with this elisp fragment:
1144 @code{(global-set-key (kbd "<f9> t") 'planner-create-task-from-buffer)}
1146 Next, visit the TaskPool by:
1148 @itemize
1149 @item
1150 @key{TAB}-bing or using the cursor and typing @key{RET} to follow the
1151 link,
1152 @item @kbd{C-x C-f TaskPool RET} to use @code{find-file}, or
1153 @item @kbd{C-c C-f TaskPool RET} to use @code{muse-project-find-file}
1154 @end itemize
1156 You can see an overview of the tasks as scheduled on different days.
1157 Unlike many personal information managers that store all of your data
1158 in one file and then perform magic in order to present different
1159 views, Planner uses plain text files. The data is duplicated and kept
1160 updated by functions. This makes it simpler and easier to modify,
1161 because what you see is (almost) what you get. On the other hand,
1162 you'll need to get used to either editing both files, or using the
1163 built-in functions for editing and updating files. If you prefer not
1164 to work with linked tasks, you can configure Planner to use only plan
1165 pages or use only day pages.
1167 The TaskPool page should list the tasks you created earlier. Go to the
1168 one named Learn how to schedule a task . Type @kbd{C-c C-c}
1169 (@code{planner-copy-or-move-task}) to schedule the task. Type RET to
1170 accept the default (today). Go to the day page by following the link
1171 or calling @kbd{M-x planner-goto} (@kbd{C-c C-j C-d} or the menu bar);
1172 you will see the newly-created task there. You can also use @kbd{C-c
1173 C-c} (@kbd{planner-copy-or-move-task}) to reschedule a task to an
1174 earlier or later date.
1176 Well, that task is done. To mark the task as completed, type @kbd{C-c
1177 C-x} (@code{planner-task-done}). You can also edit the status manually
1178 (change _ to X) as long as you remember to call @kbd{M-x
1179 planner-update-task} to update the link page as well. Updating relies on
1180 the task description being the same, so do not edit this manually.
1182 Quick summary of commands:
1184 @itemize
1185 @item
1186 Go to today's page: @kbd{M-x plan} to carry unfinished tasks forward, or
1187 @kbd{M-x planner-goto-today} to just go to today's page.
1188 @item
1189 Create a task: @kbd{C-c C-t} (@code{planner-create-task-from-buffer}),
1190 or type a task manually (call M-x planner-update-task if the task is
1191 linked)
1192 @item
1193 Mark a task as done: @kbd{C-c C-x} (@code{planner-task-done}), or edit
1194 the task and call @kbd{M-x planner-update-task}
1195 @item Edit a task description: @kbd{M-x planner-edit-task-description}
1196 @item Reschedule a task: @kbd{C-c C-c} (@code{planner-copy-or-move-task})
1197 @item
1198 Reschedule many tasks: Mark a region and use @kbd{M-x
1199 planner-copy-or-move-region}
1200 @item
1201 Change the plan of a task: @kbd{M-x planner-replan-task}, or @kbd{C-c
1202 C-c} (@code{planner-copy-or-move-task}) with a plan page
1203 @item Delete a task: @kbd{M-x planner-delete-task}
1204 @item
1205 Reorder tasks: @key{M-p} (@code{planner-raise-task}) and @key{M-n}
1206 (@code{planner-lower-task}), or normal editing commands like kill and
1207 yank
1208 @item Change task priorities (@samp{#A} > @samp{#B} > @samp{#C}):
1209       @key{C-M-p} (@code{planner-raise-task-priority}) and
1210       @key{C-M-n} (@code{planner-lower-task-priority}),
1211       or edit the task and call @kbd{M-x planner-update-task}.
1212 @end itemize
1214 You can save your tasks with @kbd{C-x C-s} the same way you save any
1215 other file, or Emacs will prompt you to save it when you exit.
1217 @node Schedule, Notes, Tasks, Getting Started
1218 @comment  node-name,  next,  previous,  up
1219 @section Schedule
1221 This is free-form. You can put anything you want into this, or remove
1222 it from @code{planner-day-page-template} entirely. Some people use it
1223 to keep track of their plans for the day with tables like this:
1225 @example
1226 hh:mm | hh:mm | activity
1227 hh:mm | hh:mm | activity
1228 hh:mm | hh:mm | activity
1229 @end example
1231 Remember, Planner files are just plain text. You can add new sections
1232 or remove old ones, or use the suggested sections for entirely
1233 different activities.
1235 @node Notes, Hyperlinks, Schedule, Getting Started
1236 @comment  node-name,  next,  previous,  up
1237 @section Notes
1239 You can put anything you want in this section, or remove it from your
1240 @code{planner-day-page-template} entirely.
1242 You may be interested in @file{remember-planner.el}, part of the
1243 Remember package. @code{remember-planner.el} makes it easy to create
1244 notes from anywhere in Emacs, and it uses the same hyperlink-sensing
1245 code that Planner uses. Notes added by remember-planner.el look like
1246 this:
1248 @example
1249 .#1 Headline 00:00
1250 Body
1251 @end example
1253 and are outlined at the H2 level in published HTML.
1255 If you include the following in your @file{~/.emacs}:
1257 @example
1258 (require 'remember-planner)
1259 (setq remember-handler-functions '(remember-planner-append))
1260 (setq remember-annotation-functions planner-annotation-functions)
1261 @end example
1263 you can easily create context-aware notes. @kbd{M-x remember} will
1264 create a dedicated buffer for you to fill in your note. If Planner
1265 recognizes the buffer as one with context then it will include a
1266 hyperlink at the bottom. The first line is used as a title, so make it
1267 short and meaningful. The rest of the text will be used as the body of
1268 the note. Try it now by creating a note, perhaps about things you'd
1269 like to remember from this tutorial.
1271 Typing @kbd{C-c C-c} after composing will prompt for a plan page to
1272 put this on, with auto-completion. By default, notes will go on
1273 today's page only. If you specify a plan page, the note will go on
1274 today's page and on the plan page. Let's try specifying
1275 @samp{TaskPool} for the note.
1277 If you look at today's page, you'll find a timestamped note that links
1278 to @samp{TaskPool}. Likewise, @samp{TaskPool} contains a note that
1279 links to today's page. Because the text is copied, changes in one will
1280 not be automatically reflected in the other. To update the linked page
1281 after editing a note, use @kbd{M-x planner-update-note}. To change the
1282 plan page of a note, use @kbd{planner-replan-note}.
1284 @node Hyperlinks, Example Page, Notes, Getting Started
1285 @section Hyperlinks
1286 @cindex hyperlinks
1288 Planner automatically creates context-sensitive hyperlinks for your
1289 tasks and notes when you use @code{planner-create-task-from-buffer}
1290 and @code{remember}.
1292 Blue links indicate URLs and Planner pages that already exist. Red links
1293 indicate Planner pages that have not yet been created.
1295 Middle-click or type @key{RET} on any link to view the link in the
1296 current window. Shift-middle-click or type @key{S-RET} to view the
1297 link in another window. @key{TAB} goes to the next link, while
1298 @key{S-TAB} goes to the previous one.
1300 You can pick up hyperlinks using the @code{planner-annotation-as-kill}
1301 function.
1303 @defun planner-annotation-as-kill
1304 Create a context-sensitive hyperlink for the current buffer and copy
1305 it to the kill ring. When called with a prefix argument, prompt for
1306 the link display name.
1307 @end defun
1309 You can then paste it into any Planner buffer by using @kbd{M-x yank}
1310 or the keyboard shortcut.
1312 Hyperlinks are a powerful feature of Planner. You can use them to
1313 hyperlink to mail, news, Web pages, and even IRC connections. See the
1314 section on @ref{Managing Your Information} to find out how to enable
1315 support for various parts of Emacs. Want to add a new hyperlink
1316 scheme? Check out the source code for examples or ask on the mailing
1317 list for help.
1319 @node Example Page, Review, Hyperlinks, Getting Started
1320 @comment  node-name,  next,  previous,  up
1321 @section Example Page
1322 @cindex example page
1323 @cindex planning page, example
1325 An example planner file is given below. You'll notice that Planner
1326 does not have a well-defined user interface. Rather, it's free-form
1327 and open, allowing you to adapt it to your preferences.
1329 @example
1330 ----------------------------------------------------------------------
1331 * Tasks
1333 #B  _ Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss (TaskPool)
1334 #B  _ Browse through the Planner info manual (TaskPool)
1335 #B  _ Add (plan) to the end of my ~/.emacs
1336 #B  X Learn how to schedule a task (TaskPool)
1338 * Schedule
1340 18:00 | 19:00 | Learn how to use Planner
1342 * Notes
1344 Notes are free-form. You can put anything you want into this.
1346 .#1 This is note number one
1348 Notes on note number one!
1350 .#2 This weird ".#2" syntax is used for allout.el enumerated lists
1352 It makes using allout-mode very handy.
1354 @end example
1356 @node Review,  , Example Page, Getting Started
1357 @comment  node-name,  next,  previous,  up
1358 @section Review
1360 @itemize
1362 @item @emph{Ideas for using planner more effectively:}
1364 @itemize
1365 @item
1366 Add @code{(plan)} to the end of your @file{~/.emacs} so that you are
1367 reminded about your tasks every day.
1369 @item
1370 Bind useful functions to shortcut keys and get used to creating tasks
1371 and notes from anywhere.
1373 @item
1374 Think about how you plan your day and look for ways to improve it. Ask
1375 the mailing list for tips.
1377 @item
1378 Browse the rest of this manual, the source code, and other resources on
1379 the Net for tidbits you can use.
1381 @item Have fun!
1382 @end itemize
1384 @item @emph{Useful functions outside planner buffers:}
1386 @itemize
1387 @item @code{planner-create-task-from-buffer}
1388 @item @code{remember}
1389 @item @code{planner-goto-today}
1390 @item @code{planner-goto}
1391 @item @code{plan}
1392 @end itemize
1394 @item @emph{Useful functions inside planner buffers:}
1396 @itemize
1397 @item @kbd{C-c C-t} (@code{planner-create-task-from-buffer})
1398 @item @kbd{C-c C-x} (@code{planner-task-done})
1399 @item @kbd{M-x planner-edit-task-description}
1401 @item
1402 @kbd{C-c C-c} (@code{planner-copy-or-move-task}), @kbd{M-x
1403 planner-copy-or-move-region}
1405 @item @kbd{M-x planner-replan-task}
1406 @item @kbd{M-x planner-delete-task}
1408 @item
1409 @key{M-p} (@code{planner-raise-task}) and @key{M-n}
1410 (@code{planner-lower-task})
1412 @item @key{C-M-p} (@code{planner-raise-task-priority}) and
1413       @key{C-M-n} (@code{planner-lower-task-priority}),
1414 @item @code{planner-replan-note}
1415 @item @code{planner-update-note}
1416 @end itemize
1418 @end itemize
1420 That's all you need to know in order to use Planner as a basic TODO
1421 and notes manager, but there's a whole lot more. Read through this
1422 manual and our mailing list archives for lots of wonderful ideas about
1423 planning in Emacs!
1425 @node More about Planner, Managing Your Information, Getting Started, Top
1426 @comment  node-name,  next,  previous,  up
1427 @chapter More about Planner
1429 @menu
1430 * Navigation::                  
1431 * More about Tasks::            
1432 * More about Notes::            
1433 * Making Files Pretty::         
1434 * Annotations::                 
1435 * Interactive Lisp::            
1436 * Publishing::                  
1437 * Experimental Functions::      
1438 @end menu
1440 @node Navigation, More about Tasks, More about Planner, More about Planner
1441 @comment  node-name,  next,  previous,  up
1442 @section Starting with Day Pages
1444 @command{planner-goto-today} opens today's page.  Day pages are named
1445 @samp{YYYY.MM.DD} and contain your notes for the day.
1447 You should see a file that looks like this:
1449 @example
1450 * Tasks
1453 * Schedule
1455 * Notes
1456 @end example
1458 You can type anything you want into this file.  You can add or delete
1459 sections.  When you save, Emacs stores your information in
1460 @code{planner-directory}.
1462 Use the following commands to navigate through day pages:
1464 @defun plan
1465 Start planning the day.  If @code{planner-carry-tasks-forward} is
1466 non-nil, copy the most recent unfinished tasks to today's page, else
1467 open the most recent page.
1468 @end defun
1470 @defun planner-goto (@kbd{C-c C-j C-d})
1471 Prompt for a date using a calendar pop-up and display the
1472 corresponding day page.  You can specify dates partially.  The current
1473 year and month are used if omitted from the input.  For example, if
1474 today is 2004.05.05, then
1476 @itemize
1477 @item @kbd{+1} is one day from now, or @samp{2004.05.06}
1478 @item @kbd{-1} is one day before now, or @samp{2004.05.04}
1479 @item @kbd{12} is equivalent to @samp{2004.05.12}
1480 @item @kbd{8.12} is equivalent to @samp{2004.08.12}
1481 @item @kbd{2005.08.12} is a full date specification
1482 @end itemize
1484 In the calendar buffer, you can also left-click or press @key{RET} on
1485 a date to select it.
1486 @end defun
1488 @defun planner-goto-today (@kbd{C-c C-j C-j})
1489 Display today's page. Create the page if it does not yet exist.
1490 @end defun
1492 @defun planner-goto-tomorrow (@kbd{C-c C-j C-t})
1493 Goto the planner page days @var{after} the currently displayed date.
1494 If @var{days} is nil, go to the day immediately after the currently
1495 displayed date.  If the current buffer is not a daily planner page,
1496 calculate date based on today.
1497 @end defun
1499 @defun planner-goto-yesterday (@kbd{C-c C-j C-y})
1500 Goto the planner page @var{days} before the currently displayed date.
1501 If @var{days} is nil, go to the day immediately before the currently
1502 displayed date.  If the current buffer is not a daily planner page,
1503 calculate date based on today.
1504 @end defun
1506 @defun planner-goto-most-recent
1507 Go to the most recent day with planning info.
1508 @end defun
1510 @defun planner-goto-previous-daily-page
1511 Goto the last plan page before the current date.
1512 The current date is taken from the day page in the current
1513 buffer, or today if the current buffer is not a planner page.
1514 Do not create pages if they do not yet exist.
1515 @end defun
1517 @defun planner-goto-next-daily-page
1518 Goto the first plan page after the current date.
1519 The current date is taken from the day page in the current
1520 buffer, or today if the current buffer is not a planner page.
1521 Do not create pages if they do not yet exist.
1522 @end defun
1524 @defun planner-goto-plan-page page
1525 Opens @var{page} in the the @code{planner-project} Wiki.  Use
1526 @code{planner-goto} if you want fancy calendar completion.
1527 @end defun
1529 @defun planner-show date
1530 Show the plan page for @var{date} in another window, but don't select
1531 it.  If no page for @var{date} exists, return nil.
1532 @end defun
1535 @node More about Tasks, More about Notes, Navigation, More about Planner
1536 @comment  node-name,  next,  previous,  up
1537 @section More about Tasks
1538 @cindex tasks, more about
1540 This section is divided into three parts. In the first part, you can
1541 read about all the options, strategies and commands to help you
1542 efficiently add new tasks to your planner. In the second part, we'll go
1543 over all of the aspects of Planner that relate to organizing, editing,
1544 rescheduling and viewing the tasks you've already created. Finally,
1545 we'll cover some ways to step back and look at various reports and
1546 overviews that can be generated from your planner pages.
1548 You may also be interested in tracking time spent on tasks with
1549 @ref{Timeclock} and estimating project completion time with
1550 @ref{Schedule} (also see @pxref{schedule.el}).
1552 @menu
1553 * Creating New Tasks::          
1554 * Organizing Your Tasks::       
1555 * Task Reports and Overviews::  
1556 @end menu
1558 @node Creating New Tasks, Organizing Your Tasks, More about Tasks, More about Tasks
1559 @comment  node-name,  next,  previous,  up
1560 @subsection Creating New Tasks
1561 @cindex tasks, creating
1563 Planner makes it very easy to quickly add something to your list of
1564 tasks. Once you get used to the basics of
1565 @command{planner-create-task-from-buffer}, you might want to take a
1566 closer look at some things in Planner that can help you create new tasks
1567 in a way that fits with your system.
1569 @menu
1570 * Creating a Task::             
1571 * Task Priorities::             
1572 * Task IDs::                    
1573 * Cyclic Tasks::                
1574 * Task Detail::                 
1575 * Deadlines::                   
1576 @end menu
1578 @node Creating a Task, Task Priorities, Creating New Tasks, Creating New Tasks
1579 @comment  node-name,  next,  previous,  up
1580 @subsubsection Creating a Task
1581 @cindex tasks, creating
1583 You can create a task from any buffer in Emacs by invoking
1584 @command{M-x planner-create-task-from-buffer}.
1586 This command does more than just add an item to your list of tasks. It
1587 also connects that item to some useful context information.
1589 If you create a task while viewing any buffer other than a Planner
1590 day page, Planner will associate the task with a hyperlink to that
1591 buffer. Try it now by creating a task from this Info buffer.
1593 @enumerate
1594 @item @kbd{M-x planner-create-task-from-buffer}
1595 @item
1596 When prompted for the task name, enter @kbd{Learn how to change a task's
1597 status} and press @key{RET}.
1599 @item
1600 When prompted for the date, press @key{RET} to schedule the task for
1601 today.
1603 @item
1604 When prompted for the project page, press @key{RET} to accept the
1605 default page of @samp{TaskPool}. This is a page for tasks not connected
1606 to a larger plan.
1608 @end enumerate
1610 Planner prompts you for two pieces of information when you ask it
1611 to create a task. First, it asks you when you would like to have the
1612 task show up in your planner. If you would like it to be scheduled for
1613 today, you can just hit @key{RET}. If you would like it to be
1614 scheduled for some day during the current month, you can just enter
1615 the date, without the month, like @samp{16}. If you would like it to
1616 be scheduled for some day in a future month of the current year, you
1617 can enter just the month and date, like @samp{06.16}. If you would
1618 like to schedule something for next year, then enter the full date,
1619 like @samp{06.16.2005}. If you do not want this task to appear on a
1620 day page at all, you can enter @samp{nil}.
1622 The second piece of information Planner asks for is the name of
1623 the project to associate the task with. In the above example, you
1624 associated the task with the project ``TaskPool'', which means that
1625 you did not want to associate the task with a particular project or
1626 goal in your life. Another way to do this is to answer the project
1627 prompt by entering @samp{nil}. But instead, you might enter
1628 @samp{LearnPlanner} as the project. This creates a new page called
1629 ``LearnPlanner'' in your planner directory and places an entry for the
1630 task on that page.
1632 The task then exists in two places: once on your day page, to show how
1633 it fits into your daily work; and once on a project page, to show how
1634 it fits into your larger projects and goals. In the future you might
1635 add related tasks like, ``Memorize Planner keybindings''. These
1636 tasks might be scattered over weeks or months worth of day pages, but
1637 as long as you enter the same project name for each, you will have a
1638 way to look at them all together on a single project page.
1640 Planner also creates hyperlinks to enable you to easily move back
1641 and forth between the day page system and the project page
1642 system. Each task on a day page will have a hyperlink to its project
1643 page. Each task on a project page will have a hyperlink to its day
1644 page.
1646 After using Planner for a while, you may find yourself with quite
1647 a few project pages. Keep in mind that completion is enabled at the
1648 project prompt when you create a task, so hitting @kbd{SPC} or
1649 @kbd{TAB} at the prompt will show you a list of your current project
1650 pages.
1652 Once the task is created, you are returned to the buffer you were
1653 working in again, Planner gets out of your way, and you can go on
1654 about your business. Later on, when you decide to actually work on
1655 that ``Memorize Planner keybindings'' task, you will be able to
1656 follow the hyperlink from that task on your day or project page
1657 directly to the relevant node in the Planner info file!
1659 By default, @command{M-x planner-create-task-from-buffer} creates
1660 medium-priority tasks, marked with the letter @samp{B}.  But you can
1661 specify a particular priority or change the default (@pxref{Task
1662 Priorities}).
1664 You don't have to use @command{planner-create-task-from-buffer} to
1665 create tasks. You can also create new tasks manually by typing them
1666 directly on your day or project page in the format Planner expects. You
1667 can even still create hyperlinks by using Muse formatting as you
1668 manually type the new task. Keep in mind also that tasks do not have to
1669 be linked to any other page.
1671 For convenience, @command{planner-create-task-from-buffer} is bound to
1672 @kbd{C-c C-t} in Planner buffers.  You can bind
1673 @command{planner-create-task-buffer} to a shortcut key.  See the
1674 manual for your Emacs distribution to find out more about keybinding.
1676 @defun planner-create-task-from-buffer title date plan-page
1677 Create a new task named @var{title} on @var{date} based on the current
1678 buffer.
1680 With a prefix, associate the task with the current planner page.  If
1681 you create a task on a date page, you will be prompted for a plan
1682 page.  If you create a task on a plan page, you will be prompted for a
1683 day page.  If nil is specified, the task is created only on the
1684 current page.
1686 See @code{planner-create-task} for more information.
1688 The new task is created at the top or bottom of the first block of
1689 tasks on the scheduled day page (if any), depending on the value of
1690 @code{planner-add-task-at-end-flag}.
1691 @end defun
1693 @defun planner-create-task title date annotation plan-page
1694 Create a new task named @var{title} based on the current Wiki page.
1695 If @var{date} is non-nil, makes a daily entry on @var{date}, else
1696 makes an entry in today's planner page. It's assumed that the current
1697 Wiki page is the page you're using to plan an activity. Any time
1698 accrued to this task will be applied to that page's name in the
1699 timelog file, assuming you use timeclock (@pxref{Time Intervals, , ,
1700 Emacs, GNU Emacs Manual}). If @var{annotation} is non-nil, it will be
1701 used for the page annotation. If @var{plan-page} is non-nil, the task
1702 is associated with the given page.
1704 With a prefix, associate the task with the current planner page.  If
1705 you create a task on a date page, you will be prompted for a plan
1706 page.  If you create a task on a plan page, you will be prompted for a
1707 day page.  If nil is specified, the task is created only on the
1708 current page.
1710 You probably want to call @code{planner-create-task-from-buffer}
1711 instead.
1713 The new task is created at the top or bottom of the first block of
1714 tasks on the scheduled day page (if any), depending on the value of
1715 @code{planner-add-task-at-end-flag}.
1716 @end defun
1718 @node Task Priorities, Task IDs, Creating a Task, Creating New Tasks
1719 @comment  node-name,  next,  previous,  up
1720 @subsubsection Task Priorities
1722 You can set the priority of a task when you create it, rather than
1723 waiting to adjust it after the fact. In order to do this, call the
1724 function corresponding to the priority you want. You probably want to
1725 bind these functions to some keys if you intend to use them much.
1727 @itemize
1728 @item @code{planner-create-high-priority-task-from-buffer}
1729 creates a task with priority @samp{A}.
1731 @item @code{planner-create-medium-priority-task-from-buffer}
1732 creates a task with priority @samp{B}.
1734 @item @code{planner-create-low-priority-task-from-buffer}
1735 creates a task with priority @samp{C}.
1736 @end itemize
1738 Or, you can change the default priority of
1739 @command{planner-create-task-from-buffer} by customizing
1740 @var{planner-default-task-priority}.
1742 You can actually use just one general priority, but using more than
1743 one color-codes your tasks and gives you a better overview of your
1744 day.
1747 @node Task IDs, Cyclic Tasks, Task Priorities, Creating New Tasks
1748 @comment  node-name,  next,  previous,  up
1749 @subsubsection Task IDs
1750 @cindex @file{planner-id.el}, using
1751 @cindex tasks, IDs
1753 After loading @file{planner.el}, make sure that @file{planner-id.el} is
1754 in your load path and add this to your @file{.emacs} (or @file{_emacs}):
1756 @example
1757 (require 'planner-id)
1758 @end example
1760 This module modifies the behavior of @file{planner.el}, adding global
1761 task IDs so that tasks can be edited and updated. Planner IDs are of
1762 the form @samp{@{@{Identifier:Number@}@}}.
1764 @defopt planner-id-add-task-id-flag
1765 Non-nil means automatically add global task IDs to newly-created
1766 tasks. If nil, use @command{planner-id-add-task-id} to add IDs to
1767 existing tasks, or @command{planner-id-add-task-id-to-all} to add to
1768 all tasks on the current page. (Development version 2004.05.05:
1769 planner--dev--1.0--patch-81)
1770 @end defopt
1772 @defopt planner-id-update-automatically
1773 Non-nil means automatically update linked tasks whenever a page is
1774 saved. If nil, use @command{planner-update-task} to update the linked
1775 task. By default, linked tasks are automatically updated.
1776 @end defopt
1778 @defopt planner-id-tracking-file
1779 File that contains ID tracking data. This file is automatically
1780 overwritten.
1781 @end defopt
1783 The following interactive functions are defined in @file{planner-id.el}:
1785 @defun planner-id-jump-to-linked-task &optional info
1786 Display the linked task page. If @var{info} is specified, follow that
1787 task instead.
1788 @end defun
1790 @defun planner-id-add-task
1791 Add a task ID for the current task if it does not have one
1792 yet. Update the linked task page, if any.
1793 @end defun
1795 @defun planner-id-update-tasks-on-page &optional force
1796 Update all tasks on this page. Completed or cancelled tasks are not
1797 updated. This can be added to @code{write-file-functions}. If
1798 @var{force} is non-nil, completed and cancelled tasks are also
1799 updated.
1800 @end defun
1802 @defun planner-id-add-task-id-to-all
1803 Add a task ID for all the tasks on the page. Update the linked page,
1804 if any.
1805 @end defun
1807 @defun planner-id-search-id id
1808 Search for all occurrences of @var{id}.
1809 @end defun
1811 @defun planner-id-follow-id-at-point
1812 Display a list of all pages containing the ID at point.
1813 @end defun
1815 @defun planner-id-follow-id-at-mouse event
1816 Display a list of all pages containing the ID at mouse. @var{event} is
1817 the mouse event.
1818 @end defun
1820 @node Cyclic Tasks, Task Detail, Task IDs, Creating New Tasks
1821 @comment  node-name,  next,  previous,  up
1822 @subsubsection Cyclic Tasks
1823 @cindex @file{planner-cyclic.el}, using
1824 @cindex tasks, cyclic
1825 @cindex cyclic tasks
1826 @cindex recurring tasks
1828 If there are tasks that you have to do regularly, you can have Planner
1829 schedule those tasks automatically.
1831 Make sure that @file{planner-cyclic.el} is in your load path and add
1832 this to your @file{.emacs} (or @file{_emacs}):
1834 @example
1835 (require 'planner-cyclic)
1836 @end example
1838 Create a diary file named @file{~/.diary.cyclic-tasks}
1839 (or the value of @code{planner-cyclic-diary-file}). Here is an example:
1841 @example
1842 Tuesday #B0 _ Study Japanese
1843 Friday #B0 _ Study Japanese (JapaneseStudies)
1844 @end example
1846 The first will be a plain task, the second will be linked.  The first
1847 line will automatically create its task every Tuesday, while the
1848 second will create it every Friday.
1850 You can schedule tasks in a variety of ways. This module uses the same
1851 syntax for specifying when tasks will be scheduled as the Emacs diary
1852 uses for appointments and events. See @ref{Date Formats, the GNU Emacs
1853 Manual, Date Formats,emacs, the GNU Emacs Manual}, and @ref{Sexp Diary
1854 Entries, the GNU Emacs Lisp Reference Manual, Sexp Diary
1855 Entries,elisp, the GNU Emacs Lisp Reference Manual}, for a full
1856 description of the possibilities.
1858 By default, planner-cyclic creates multiple tasks if you let tasks build
1859 up (that is, the next Tuesday rolls around and you @emph{still} haven't
1860 marked the task as done.) To turn off this behavior:
1862 @example
1863 (setq planner-cyclic-diary-nag nil)
1864 @end example
1866 @file{planner-cyclic-diary} includes the following interactive
1867 functions:
1869 @defun planner-cyclic-create-tasks-maybe
1870 Maybe create cyclic tasks. This will only create tasks for future
1871 dates or today.
1872 @end defun
1874 @node Task Detail, Deadlines, Cyclic Tasks, Creating New Tasks
1875 @comment  node-name,  next,  previous,  up
1876 @subsubsection Task Detail
1877 @cindex tasks
1879 You may find your planner pages getting very full, so that you want to
1880 have one broad task entry be linked to a more specific list of
1881 sub-tasks. Or, maybe you want to have a number of notes linked to a
1882 particular task.
1883 @cindex tasks, sub-
1884 @cindex tasks, meta-
1885 @cindex meta-tasks
1886 @cindex sub-tasks
1888 This can be done with targets.  You can have a task that is really a
1889 meta-task:
1891 @example
1892 #A1  _ Do things in RevelleLog#13 @{@{Tasks:101@}@} (RevelleLog)
1893 @end example
1895 @samp{RevelleLog#13} could then be a list of sub-tasks in the form of
1896 a note, or any kind of note.
1898 Or, instead of pointing to a particular note on @samp{RevelleLog}, you
1899 could have the whole page be tasks that you enter in manually, without
1900 linking them to another page. You can just type them in like this:
1902 @example
1903 #A1  _ First specific thing to do
1904 @end example
1906 This way, the tasks will only appear on this specific project page,
1907 and not on any daily page, so you only see them when you want to look
1908 up all of the specific tasks associated with @samp{#A1  _ Do things in
1909 RevelleLog @{@{Tasks:101@}@} (RevelleLog)}.
1911 As you can see, the ability to manually enter tasks is one of
1912 Planner's nicest features. It allows you to create tasks that are
1913 not assigned to a specific date (by manually entering them on a
1914 project page with no date) or to a specific project (by manually
1915 entering them on a day page with no project). Yet as long as you enter
1916 them using the syntax it understands, Planner will continue to
1917 recognize them as tasks.
1919 Another way to have a task not be connected to a particular date is to
1920 do @kbd{C-c C-c} (@code{planner-copy-or-move-task}) and specify
1921 @samp{nil} when asked for the date.
1923 If you would like to see a list of all of your unfinished tasks, do
1924 @kbd{M-x planner-list-unfinished-tasks}. This function only checks
1925 day plan pages, not project pages.
1927 @node Deadlines,  , Task Detail, Creating New Tasks
1928 @comment  node-name,  next,  previous,  up
1929 @subsubsection Deadlines
1930 @cindex tasks, deadlines for
1931 @cindex deadlines, task
1932 @cindex @file{planner-deadline.el}, using
1934 You can use @file{planner-deadline.el} to automatically recalculate
1935 days to a deadline by adding @code{(require 'planner-deadline)} to
1936 your @file{~/.emacs}. With the default setup, make your tasks of the
1937 form
1939 @example
1940 #A0 _ Some task @{@{Deadline: 2004.09.12@}@}
1941 @end example
1943 (Note: There must be at least one space after the colon.)
1945 After you run @code{planner-deadline-update} to update task descriptions,
1946 the task will be of the form
1948 @example
1949 #A0 _ Some task @{@{Deadline: 2004.09.12 - 2 days@}@}
1950 @end example
1952 @defopt planner-deadline-regexp
1953 Regular expression for deadline data.
1954 The special deadline string should be regexp group 1. The
1955 date (YYYY.MM.DD) should be regexp group 2.
1956 @end defopt
1958 @defun planner-deadline-update
1959 Replace the text for all tasks with deadlines. Deadlines are of the
1960 form @samp{@{@{Deadline: YYYY.MM.DD@}@}} by default.
1961 @end defun
1963 @defun planner-deadline-change &optional date
1964 Change the deadline of current task to @var{date}. If @var{date} is nil,
1965 remove deadline.
1966 @end defun
1968 @node Organizing Your Tasks, Task Reports and Overviews, Creating New Tasks, More about Tasks
1969 @comment  node-name,  next,  previous,  up
1970 @subsection Organizing Your Tasks
1971 @cindex tasks, organizing
1972 @cindex tasks, old
1974 Okay, now that you've gotten the hang of creating tasks, you're probably
1975 facing a really long list of things to do. How can you organize them so
1976 that they don't overwhelm you? Planner gives you a number of strategies
1977 for dealing with large numbers of tasks.
1979 @enumerate
1980 @item Arrange your tasks in the rough order you're going to do them.
1981 @item Use #A, #B and #C task priorities to differentiate between
1982       high-priority, normal and low-priority tasks.
1983 @item Schedule your tasks onto different days.
1984 @item Group your tasks into plan pages.
1985 @item Don't schedule all your tasks.
1986 @end enumerate
1988 @enumerate
1990 @item @emph{Task order}
1992 To remind yourself to do tasks in a certain order, simply edit the
1993 lines so that they're in the order you want. You can use normal
1994 editing commands like kill, yank and transpose-line to reorder the
1995 tasks, or use @key{M-p} (@code{planner-raise-task}) and @key{M-n}
1996 (@code{planner-lower-task}) to rearrange the tasks.
1998 @item @emph{Task priorities}
2000 By default, tasks are created with medium priority (@samp{#B}). You
2001 can make a task high-priority (@samp{#A}) or low-priority (@samp{#C})
2002 by manually editing the task and calling M-x planner-update-task to
2003 update the linked page. Alternatively, you can use @key{C-M-p}
2004 (@code{planner-raise-task-priority}) and @key{C-M-n}
2005 (@code{planner-lower-task-priority}) to modify the task and update the
2006 linked page.
2008 You can edit the priority of a task using @kbd{M-x
2009 planner-edit-task-priority}, or manually edit it and call @kbd{M-x
2010 planner-update-task} to update tasks on the linked page.
2012 @item @emph{Schedule your tasks on different days}
2014 You don't have to do everything today. Is this a task you would rather
2015 do tomorrow? Schedule it for then instead. You can specify @samp{+n}
2016 or @samp{-n} whenever you are asked for a date, where @var{n} is the
2017 number of days before or after the current file's date or today.
2018 Don't over-procrastinate things, though!
2020 @item @emph{Plan pages}
2022 Plan pages let you group related tasks and notes together for easy
2023 reference. For example, you could have a plan page for each major
2024 project or goal in your life, like @samp{GoodHealth} or
2025 @samp{FurtherStudies}.
2027 Although plan pages start by grouping everything under a @samp{*
2028 Tasks} header, you can organize your plan pages in different ways. For
2029 example, you can separate groups of tasks with blank lines, and
2030 Planner will sort tasks within each group.
2032 @item @emph{Tasks without dates}
2034 Plan pages also allow you to have undated tasks or tasks with no
2035 particular deadlines. This keeps your daily task list small and
2036 manageable while making it easier for you to find things to do if you
2037 have free time. Make sure you check your plan pages regularly so that
2038 you don't completely forget about them.
2040 For automated scheduling of the next task on a plan page after you
2041 complete a task, see the section in
2042 @uref{http://sacha.free.net.ph/notebook/emacs/planner-config.el} named
2043 ``Schedule next undated task from same project''.
2045 @end enumerate
2048 @menu
2049 * Multiple Projects::           
2050 * Viewing Tasks::               
2051 * Modifying Tasks::             
2052 * Carrying Over Unfinished Tasks::  
2053 * Task Numbering::              
2054 * Task Ranks::                  
2055 * Grouping Tasks::              
2056 @end menu
2058 @node Multiple Projects, Viewing Tasks, Organizing Your Tasks, Organizing Your Tasks
2059 @comment  node-name,  next,  previous,  up
2060 @subsubsection Associating Tasks with Multiple Projects
2061 @cindex multiple projects
2062 @cindex planner-multi.el, using
2064 You can use @file{planner-multi.el} to associate a task with more than
2065 one project. That way, you can easily keep GTD-style context lists as
2066 well as project-related lists.
2068 To use multiple projects, add the following to your @samp{~/.emacs}:
2070 @example
2071 (require 'planner-multi)
2072 @end example
2074 Under GNU Emacs, you can specify multiple projects by separating them
2075 with a single space. For example, you can specify @kbd{planner doc}
2076 when creating a task to associate the task with those two projects.
2078 Under XEmacs, you can specify multiple projects by typing @kbd{RET}
2079 after each entry and terminating the list with another @kbd{RET}. For
2080 example, to specify @kbd{planner} and @kbd{doc}, you would type
2081 @kbd{planner RET doc RET RET} at the prompt.
2083 If you want to see an overview of all of your tasks as well as
2084 project- or context-specific lists, you can set
2085 @code{planner-multi-copy-tasks-to-page} to your overview page(s). For
2086 example, set it to @samp{TaskPool} to be able to see an overview of
2087 all of your unfinished tasks. You can also set this to multiple pages
2088 such as @samp{[[TasksByProject][p]] [[TasksByContext][c]]} and use
2089 @file{planner-trunk.el} to sort and organize tasks for easy reference.
2090 (@pxref{Grouping Tasks})
2092 @defopt planner-multi-copy-tasks-to-page
2093 Automatically copy newly-created tasks to the specified page.
2094 @end defopt
2096 By default, tasks are removed from
2097 @code{planner-multi-copy-tasks-to-page} when you call
2098 @code{planner-task-done} or @code{planner-task-cancelled}. If you
2099 prefer to keep a copy of the task, remove
2100 @code{planner-multi-remove-task-from-pool} from
2101 @code{planner-mark-task-hook}.
2103 If you want to use a different separator instead of spaces, customize
2104 the @code{planner-multi-separator} variable.
2106 @defopt planner-multi-separator
2107 String that separates multiple page references.
2109 For best results, this should be something recognized by
2110 @code{muse-link-at-point} so that links are highlighted
2111 separately.
2112 @end defopt
2114 @node Viewing Tasks, Modifying Tasks, Multiple Projects, Organizing Your Tasks
2115 @comment  node-name,  next,  previous,  up
2116 @subsubsection Viewing tasks
2117 @cindex tasks, viewing
2119 Review the tasks scheduled for today by typing @kbd{M-x
2120 planner-goto-today}.  If you created the task from the previous
2121 section in this tutorial, you should see a line that looks like
2123 @example
2124 #A _ Learn how to change a task's status from Tasks (TaskPool)
2125 @end example
2127 If you have @code{planner-use-task-numbers} set to non-nil, you will see
2128 something like the following instead.
2130 @example
2131 #A0 _ Learn how to change a task's status from Tasks (TaskPool)
2132 @end example
2134 From left to right, these are what the symbols mean:
2136 @itemize
2137 @item @samp{A} - Priority.  A (high)
2138 @item
2139 @samp{0} - Priority number.  It is calculated whenever you save the file
2140 or call @command{planner-renumber-tasks}, provided that
2141 @code{planner-use-task-numbers} is non-nil.  Tasks are numbered in
2142 ascending order according to priorities.
2143 @item @samp{_} - Status.  _ (unfinished)
2144 @end itemize
2146 If you click on @samp{Tasks} or press @key{RET} while your cursor is
2147 in the link, Emacs will display the previous info page.
2149 If you select @samp{TaskPool}, Emacs will display the @samp{TaskPool}
2150 plan page.  Plan pages organize your tasks and notes about a project
2151 in one file.
2153 You can use @command{planner-seek-next-unfinished-task} to move to the
2154 next unfinished task on the current page.
2156 @defun planner-list-tasks-with-status status &optional pages
2157 Display all tasks that match the STATUS regular expression on all day
2158 pages.  The PAGES argument limits the pages to be checked in this
2159 manner:
2161 @itemize
2162 @item @code{t}: check all pages
2163 @item regexp: search all pages whose filenames match the regexp
2164 @item list of page names: limit to those pages
2165 @item alist of page/filenames: limit to those pages
2166 @end itemize
2168 Called interactively, this function will search day pages by
2169 default. You can specify the start and end dates or leave them as
2170 nil to search all days. Calling this function with an interactive
2171 prefix will prompt for a regular expression to limit pages.
2172 Specify @samp{.} or leave this blank to include all pages.
2174 This function could take a long time.
2175 @end defun
2177 @defun planner-list-unfinished-tasks &optional pages
2178 Display all unfinished tasks. @var{pages} follows
2179 planner-list-tasks-with-status.
2180 @end defun
2182 @defun planner-jump-to-linked-task task-info
2183 Display the task page linked to by the current task or
2184 @var{task-info}.
2185 @end defun
2187 @node Modifying Tasks, Carrying Over Unfinished Tasks, Viewing Tasks, Organizing Your Tasks
2188 @comment  node-name,  next,  previous,  up
2189 @subsubsection Modifying Tasks
2190 @cindex tasks, modifying
2191 @cindex tasks, editing
2193 To select a task, move your cursor to the line containing the task.
2195 Change a task's priority (@samp{A}, @samp{B} or @samp{C}) by editing
2196 the line. @samp{#A} tasks are important. @samp{#B} are medium
2197 priority. @samp{#C} are low priority. Whenever you save the file or
2198 call @kbd{M-x planner-fix-tasks}, tasks are sorted and numbered
2199 according to priority and status.
2201 Change a task's status by calling one of the following functions:
2203 @itemize
2204 @item planner-task-in-progress @samp{o} (@kbd{C-c C-z})
2205 @item planner-task-done @samp{X} (@kbd{C-c C-x})
2206 @item planner-task-cancelled @samp{C} (@kbd{C-c C-S-x})
2207 @item planner-task-delegated @samp{D}
2208 @item planner-task-pending @samp{P}
2209 @item planner-task-open @samp{_}
2210 @end itemize
2212 After changing the status using a function, look at the
2213 @samp{TaskPool} plan page.  The task is also updated on the linked
2214 page.  If you changed the task status manually by replacing the status
2215 with another character, you will need to call
2216 @command{planner-update-task} to update the linked page.
2218 To reschedule a task, call @command{planner-copy-or-move-task} (@kbd{C-c
2219 C-c}) and choose a new date.  You can mark a region and type @kbd{M-x
2220 planner-copy-or-move-region} to reschedule all the contained tasks to a
2221 different date.  Enter @samp{nil} for the date if you don't want the
2222 task or group of tasks to appear on any date page at all anymore. This
2223 is a good way to ``de-schedule'' a task for the time being, but still
2224 keep it linked to a plan page for possible future scheduling.
2226 To change the plan page associated with a task, call
2227 @command{planner-replan-task}.  Enter @samp{nil} for the plan page if
2228 you don't want the task to appear on any plan page anymore. If you
2229 precede the command with a prefix argument, the text of the original
2230 plan page will appear in the prompt for easy editing.
2232 Since the same task may exist on two or more pages, such as a date page
2233 and a plan page, it is dangerous to edit the description of the task by
2234 hand. You should not do it unless you want to make the exact same
2235 changes on all its linked pages.
2237 Instead of doing this by hand, you should use
2238 @command{planner-edit-task-description}. This will prompt you for the
2239 changes to the task description and then update all the other pages to
2240 which the task is linked.  Or, you can just use
2241 @command{planner-delete-task} to remove the task from both pages, and
2242 then create it again with the new desired description.
2244 To remind yourself to do tasks in a certain order, simply edit the
2245 lines so that they're in the order you want.
2246 @command{planner-raise-task} and @command{planner-lower-task} update
2247 the priorities on linked pages automatically. You can organize tasks
2248 into groups by putting a blank line between groups of tasks.
2249 Planner will maintain the groupings and only sort the tasks within
2250 that group.
2252 @defun planner-replan-task page-name
2253 Change or assign the plan page for the current task.  @var{page-name}
2254 is the new plan page for the task. Use
2255 @code{planner-copy-or-move-task} if you want to change the date. With a
2256 prefix, provide the current link text for editing.
2257 @end defun
2259 @defun planner-raise-task-priority
2260 Change a low-priority task to a medium-priority task and a
2261 medium-priority task to a high-priority task (C to B to A).
2262 @end defun
2264 @defun planner-lower-task-priority
2265 Change a high-priority task to a medium-priority task and a
2266 medium-priority task to a low-priority task (A to B to C).
2267 @end defun
2269 @defun planner-raise-task arg
2270 Move a task up @var{arg} steps.  By default, @var{arg} is 1.
2271 @end defun
2273 @defun planner-lower-task  arg
2274 Move a task down @var{arg} steps.  By default, @var{arg} is 1.
2275 @end defun
2277 @defun planner-edit-task-description description
2278 Change the description of the current task, updating the linked page
2279 if any.
2280 @end defun
2282 @defun planner-delete-task
2283 Delete this task from the current page and the linked page.
2284 @end defun
2286 @defun planner-update-task
2287 Update the current task's priority and status on the linked page.
2288 Tasks are considered the same if they have the same description.
2289 This function allows you to force a task to be recreated if it
2290 disappeared from the associated page.
2291   
2292 Note that the text of the task must not change. If you want to be able
2293 to update the task description, see @code{planner-edit-task-description}
2294 or @file{planner-id.el}.
2295 @end defun
2297 See @command{planner-install-extra-task-keybindings} for additional
2298 task-related shortcuts.
2300 @node Carrying Over Unfinished Tasks, Task Numbering, Modifying Tasks, Organizing Your Tasks
2301 @comment  node-name,  next,  previous,  up
2302 @subsubsection Carrying Over Unfinished Tasks
2303 @cindex tasks, carrying over
2305 Sometimes you won't be able to cross off all the tasks on your list.
2306 Planner makes it easy for you to keep track of things you still have
2307 to do by automatically rescheduling unfinished tasks from the past few
2308 days. By default, the @command{plan} command searches for unfinished
2309 tasks from the last three days and reschedules them onto today. If you
2310 open Planner every day, this should cover weekends easily.
2312 It's a good idea to start Planner whenever you start Emacs. That way,
2313 Planner can help remind you about today's tasks, appointments, and other
2314 things. To automatically start Planner whenever you start up Emacs, add
2315 the following code to the end of your @file{~/.emacs}:
2317 @example
2318 (plan)
2319 @end example
2321 Now, every time you start Emacs (which should be more or less once a
2322 day), you'll see today's page. If you don't finish all the tasks today,
2323 you'll see them again tomorrow.
2325 It's a good idea to start Planner every time you start Emacs so that
2326 you get reminded about your task list. If you prefer to start Planner
2327 manually, remember to call @kbd{M-x plan} every so often to make sure
2328 that you don't forget any unfinished tasks. Safe in the knowledge that
2329 Planner tasks won't slip through the cracks (unlike little slips of
2330 paper that will invariably get mislaid), you can then get on with the
2331 rest of your life.
2333 If your increased productivity with Planner leads to a well-deserved
2334 two-week vacation, then you'll need to tell Planner to search more days
2335 for unfinished tasks. By using @kbd{M-x plan}, you can automatically
2336 bring forward tasks over a given number of days or even scan all the
2337 days since time immemorial. @kbd{C-u 15 M-x plan} reschedules all
2338 unfinished tasks from the last 15 days. @kbd{C-u -1 M-x plan} checks all
2339 of your past day pages for unfinished tasks.
2341 Like everything else in Planner, you can adapt @kbd{M-x plan} to your
2342 particular way of life. For example, if you find yourself starting up
2343 Emacs and Planner every day--including weekends--because it's just so
2344 much fun, you can set the @code{planner-carry-tasks-forward} to 1.
2345 This can make your Emacs startup marginally faster. On the other hand,
2346 if you normally start Emacs once a week, you can set it to 7 or 8. If
2347 you're worried about tasks dropping off your radar, you can set it to
2348 0. You can set the value of @var{planner-carry-tasks-forward} either
2349 with @key{M-x customize-variable RET planner-carry-tasks-forward RET},
2350 or by putting @code{(setq planner-carry-tasks-forward 3)} (replacing
2351 @code{3} with the value appropriate for what you want) in your
2352 @file{~/.emacs} file.
2354 On the other hand, you might prefer to reschedule tasks yourself. If
2355 you set @code{planner-carry-tasks-forward} to @code{nil}, then
2356 @command{M-x plan} and @code{(plan)} will bring you to the most recent
2357 page with unfinished tasks if there is no page for today. You can then
2358 use @command{planner-copy-or-move-task} and
2359 @command{planner-copy-or-move-region} to reschedule tasks. This is
2360 probably more hassle than it's worth, though, so let Planner take care
2361 of this for you.
2363 @defopt planner-carry-tasks-forward
2364 If non-nil, carry unfinished tasks forward automatically.
2365 If a positive integer, scan that number of days in the past.
2366 If 0, scan all days for unfinished tasks.
2367 If t, scan one day in the past (old behavior).
2368 If nil, do not carry unfinished tasks forward.
2369 @end defopt
2371 @defun plan &optional force-days
2372 Start your planning for the day, carrying unfinished tasks forward.
2374 If @var{force-days} is a positive integer, search that many days in the
2375 past for unfinished tasks.
2376 If @var{force-days} is @code{0} or @code{t}, scan all days.
2377 If @var{force-days} is @code{nil}, use the value of
2378 @code{planner-carry-tasks-forward} instead, except t means scan only
2379 yesterday
2381 @end defun
2383 @defun planner-copy-or-move-task date force
2384 Reschedule the task for @var{date}. If @var{force} is non-nil, the
2385 task is moved regardless of status. It also works for creating tasks
2386 from a Note. Use @code{planner-replan-task} if you want to change the
2387 plan page in order to get better completion.
2388 @end defun
2390 @defun planner-copy-or-move-region beg end date muffle-errors
2391 Move all tasks from @var{beg} to @var{end} to @var{date}.
2392 @code{planner-copy-or-move-region} will copy or move all tasks from
2393 the line containing @var{beg} to the line just before @var{end}. If
2394 @var{muffle-errors} is non-nil, no errors will be reported.
2395 @end defun
2397 @node Task Numbering, Task Ranks, Carrying Over Unfinished Tasks, Organizing Your Tasks
2398 @comment  node-name,  next,  previous,  up
2399 @subsubsection Task Numbering
2401 By default, tasks are numbered according to their position on the
2402 page.  Task numbers allow you to refer to tasks using Muse links.
2403 For example, the @samp{#A1} task in @file{2004.08.16} can be referred to
2404 as @samp{2004.08.16#A1}.
2406 Note that task numbers change every time you re-sort and re-number tasks
2407 with @code{planner-fix-tasks}.  As a result, they are only reliable for
2408 references to past tasks.
2410 If you find yourself not using this functionality, you can turn off task
2411 numbers by using the following option.
2413 @defopt planner-use-task-numbers
2414 Non-nil means use task numbers when creating tasks.  This allows you
2415 to refer to past tasks if your tasks are numbered appropriately.
2416 If you set this to nil, you can save space in your plan files.
2417 @end defopt
2419 @node Task Ranks, Grouping Tasks, Task Numbering, Organizing Your Tasks
2420 @comment  node-name,  next,  previous,  up
2421 @subsubsection Task Ranks
2422 @cindex ranking tasks
2423 @cindex tasks, ranking
2424 @cindex @file{planner-rank.el}, using
2426 @file{planner-rank.el} models Franklin Covey's Urgency and Importance
2427 principle. When you think about a task, there are two aspects in
2428 consideration: Urgency and Importance. You may want to do the most
2429 urgent things first, like answering an email, or you may want to do
2430 the most important things first, like reading this manual. Or much
2431 better, balance Urgency and Importance and decide what to do.
2433 @file{planner-rank.el} can help you balance.
2435 Urgency and Importance are both measured by scores from 0-9. The
2436 higher the score, the more you want to do it first. 9 stands for ``I
2437 should have done this'' and 0 stands for ``I can forget this''.
2439 If you are using the planner @ref{Deadlines} feature, the Urgency
2440 score is automatically calculated from how many days are left to meet
2441 the deadline. By default, it will score 9 if the task is overdue and 0
2442 if the deadline is years away. Please refer to the docstring of
2443 @code{planner-rank-deadline-urgency-map-list} for detail.
2445 The task rank is calculated from Urgency and Importance scores. As
2446 different people balance urgency and importance differently, a number
2447 of @code{planner-rank-calculate-rank-*} functions are provided. The
2448 algorithms vary from a simple average to something like a weighted
2449 root mean square deviation.
2451 The aggressive versions of these functions
2452 (@code{planner-rank-calculate-rank-*-aggressive}) will make sure if
2453 one of Urgency and Importance is high, the resulting rank will be high
2454 as well. @code{planner-rank-calculate-rank-weighted-*} functions weigh
2455 the Urgency and Important scores depending on
2456 @code{planner-rank-importance-vs-urgency-factor}.
2458 Call @code{planner-rank-test-algorithm} on each of the functions and
2459 check the result tables to see which one you like most, and set it to
2460 @code{planner-rank-rank-calculate-function}. Alternatively, accept the
2461 defaults and tweak them when you get a better feel for ranking.
2463 Once the Rank is calculated, the @ref{Task Priorities} will be
2464 automatically reset. If the Rank is greater than or equal to
2465 @code{planner-rank-priority-A-valve}, the task priority will be
2466 @samp{A}, if the Rank is between @code{planner-rank-priority-A-valve}
2467 and @code{planner-rank-priority-B-valve}, the priority will be @samp{B},
2468 else it will be @samp{C}.
2470 After setting the task importance and deadline, you can leave it as
2471 is. As the deadline approaches, the task priority will automatically
2472 be raised and the task re-colored to catch your eyes.
2474 If you are using @code{planner-sort-tasks} (see @pxref{Making Files
2475 Pretty}), you can set @code{planner-sort-tasks-key-function} to one of
2476 @code{planner-sort-tasks-by-rank},
2477 @code{planner-sort-tasks-by-importance}, and
2478 @code{planner-sort-tasks-by-urgency}.
2480 @defopt planner-rank-change-hook
2481 Functions to run after @code{planner-rank-change}.
2482 @end defopt
2484 @defopt planner-rank-priority-A-valve
2485 Tasks with rank greater than or equal to this value will be set to
2486 priority @samp{A}.
2487 @end defopt
2489 @defopt planner-rank-priority-B-valve
2490 Tasks with rank greater than or equal to this value and less than
2491 @code{planner-rank-priority-A-valve} will be set to priority
2492 @samp{B}. Tasks with rank less than this value will be set to priority
2493 @samp{C}.
2494 @end defopt
2496 @defopt planner-rank-deadline-urgency-map-list
2497 Defines how to calculate the Urgency score according to how many days
2498 are left to meet the deadline.
2499 @end defopt
2501 @defopt planner-rank-default-importance
2502 Default importance value for newly added rank.
2503 @end defopt
2505 @defopt planner-rank-default-urgency
2506 Default urgency value for newly added rank.
2507 @end defopt
2509 @defopt planner-rank-importance-vs-urgency-factor
2510 How much do you think importance is more ``important'' than urgency.
2511 This will be used in @code{planner-rank-calculate-rank-weighted-*}
2512 functions.
2513 @end defopt
2515 @defopt planner-rank-rank-calculate-function
2516 Define the function called to calculate rank.
2517 @end defopt
2519 @defun planner-rank-change &optional importance urgency
2520 Set the Importance and Urgency of the current task.
2521 @end defun
2523 @defun planner-rank-update-current-task
2524 Recalculate rank for the current task.
2525 @end defun
2527 @defun planner-rank-update-all
2528 Recalculate rank for all tasks in the current page
2529 @end defun
2531 @defun planner-rank-update-all
2532 Recalculate rank for all tasks in the current page
2533 @end defun
2535 @node Grouping Tasks,  , Task Ranks, Organizing Your Tasks
2536 @comment  node-name,  next,  previous,  up
2537 @subsubsection Grouping Tasks with planner-trunk.el
2538 @cindex grouping tasks
2539 @cindex tasks, grouping
2540 @cindex @file{planner-trunk.el}, using
2542 @file{planner-trunk.el} helps you automatically group tasks according
2543 to a set of rules. It sorts and splits your tasks, adding a blank line
2544 between groups of tasks. For example, if today's page looks like this:
2546 @example
2547 * Tasks
2549 #B   _ Buy milk (GroceryShopping)
2550 #B   _ Learn how to use planner-trunk (PlannerMode)
2551 #B   _ Buy a notebook (Bookstore)
2552 #B   _ Buy cereal (GroceryShopping)
2553 #B   _ Set up my own planner-trunk rules (PlannerMode)
2554 #B   _ Customize my stylesheet (MuseMode)
2555 #B   _ Go for a health checkup (BetterHealth)
2556 @end example
2558 @noindent
2559 then you might want to group the tasks into: planner and muse,
2560 shopping list, and other items. If you set up the appropriate rules by
2561 customizing @code{planner-trunk-rule-list}, @file{planner-trunk.el}
2562 can automatically rewrite that section line this:
2564 @example
2565 * Tasks
2567 #B   _ Learn how to use planner-trunk (PlannerMode)
2568 #B   _ Set up my own planner-trunk rules (PlannerMode)
2569 #B   _ Customize my stylesheet (MuseMode)
2571 #B   _ Buy milk (GroceryShopping)
2572 #B   _ Buy a notebook (BookstoreShopping)
2573 #B   _ Buy cereal (GroceryShopping)
2575 #B   _ Go for a health checkup
2576 @end example
2578 @noindent
2579 In this case, you would set @code{planner-trunk-rule-list}
2580 to @code{(("." nil ("PlannerMode\\|MuseMode" "Shopping")))}.
2582 You can load @file{planner-trunk} with @kbd{M-x load-library RET
2583 planner-trunk RET} or add @code{(require 'planner-trunk)}. If you're
2584 not yet comfortable with Emacs Lisp, you can use @kbd{M-x
2585 customize-variable RET planner-trunk-rule-list RET} to edit this rule
2586 using an easy-to-use interface.
2588 WARNING: Do not keep non-task information in the Tasks section.
2589 planner-trunk will delete @strong{all} non-task lines from the Tasks
2590 section of your plan page in the process of grouping the tasks.
2592 After you set up @code{planner-trunk-rule-list}, use @command{M-x
2593 planner-trunk-tasks} to try out your rules until you're satistfied.
2595 If you want to do this automatically, you can use @code{(add-hook
2596 'planner-mode-hook 'planner-trunk-tasks)} to trigger it automatically
2597 whenever you open a Planner page.
2599 @node Task Reports and Overviews,  , Organizing Your Tasks, More about Tasks
2600 @subsection Task Reports and Overviews
2601 @cindex task reports
2602 @cindex task overviews
2603 @cindex reports, task
2604 @cindex overviews, task
2605 @cindex reports, accomplishment
2606 @cindex tasks, overview of
2608 Planner provides a number of different ways to generate different
2609 presentations of your tasks.
2611 @menu
2612 * Accomplishments::             
2613 * Task Overviews::              
2614 * <tasks> tag::                 
2615 @end menu
2617 @node Accomplishments, Task Overviews, Task Reports and Overviews, Task Reports and Overviews
2618 @comment  node-name,  next,  previous,  up
2619 @subsubsection Generating Daily Accomplishment Reports
2620 @cindex reports, accomplishment
2621 @cindex @file{planner-accomplishments.el}, using
2622 @cindex tasks, overview of
2623 @cindex task reports
2624 @cindex reports, task
2625 @cindex overviews, task
2626 @cindex task overviews
2628 You can use @file{planner-accomplishments.el} to get a summary of your
2629 task activity for a particular day. The report is grouped by status
2630 and plan (on day pages) or date (on plan pages). An example report
2631 follows:
2633 @example
2634 Link        | Unfinished | In progress | Delegated | Completed | Total
2635 nil         | 1          | 0           | 0         | 6         | 7
2636 TaskPool    | 1          | 1           | 0         | 3         | 5
2637 Planner     | 0          | 0           | 1         | 1         | 2
2638 SchoolWork  | 0          | 0           | 0         | 1         | 1
2639 Total       | 2          | 1           | 1         | 11        | 15
2640 @end example
2642 This lets you see how you balance your time between your projects.
2644 @itemize
2646 There are currently two ways to use @file{planner-accomplishments.el}.
2648 @item Displaying a temporary buffer
2650 You can call @code{planner-accomplishments-show} to display a buffer
2651 containing the current page's accomplishment report.
2653 @item Rewriting sections of your planner
2655 Choose this approach if you want accomplishment reports to be in
2656 their own section and you would like them to be readable in your
2657 plain text files even outside Emacs. Caveat: The accomplishment
2658 section should already exist in your template and will be rewritten
2659 when updated.
2661 To use, set @code{planner-accomplishments-section} to the name of the
2662 section to rewrite (default: @samp{Accomplishments}). If you want
2663 rewriting to be automatically performed, call
2664 @code{planner-accomplishments-insinuate}. The accomplishments will be
2665 rewritten whenever you save a planner page. If you want rewriting to
2666 be manual, call @code{planner-accomplishments-update}.
2668 @end itemize
2670 @defopt planner-accomplishments-section
2671 Header for the accomplishments section in a plan page.
2672 Used by @code{planner-accomplishments-update}.
2673 @end defopt
2675 @defopt planner-accomplishments-status-display
2676 Alist of status-label maps also defining the order of display.
2677 Used by @code{planner-accomplishments-format-table}.
2678 @end defopt
2680 @defun planner-accomplishments-insinuate ()
2681 Automatically call @code{planner-accomplishments-update} when saving
2682 tasks in @code{planner-mode} buffers.
2683 @end defun
2685 @defun planner-accomplishments-update ()
2686 Rewrite @code{planner-accomplishments-section} with a summary of tasks
2687 on this page.
2688 @end defun
2690 @defun planner-accomplishments-show ()
2691 Display a buffer with the current page's accomplishment report.
2692 @end defun
2694 @node Task Overviews, <tasks> tag, Accomplishments, Task Reports and Overviews
2695 @comment  node-name,  next,  previous,  up
2696 @subsubsection Seeing an Overview of Tasks
2697 @cindex tasks, overview of
2698 @cindex task reports
2699 @cindex reports, task
2700 @cindex overviews, task
2701 @cindex task overviews
2702 @cindex @file{planner-tasks-overview.el}, using
2704 You can see a list of tasks with @file{planner-tasks-overview.el}.
2705 Seeing how you've scheduled tasks over the next few days can help you
2706 decide when to schedule another task. Table entries will be of the form
2708 @var{date} | @var{link} | @var{priority} @var{status} | @var{task-description}
2710 To display the tasks between a set of day pages, use
2712 @defun planner-tasks-overview start end
2713 Display an overview of your tasks from @var{start} to @var{end}. If
2714 @var{start} is nil, start from the very first day page. If @var{end}
2715 is nil, include the very last day page. You can use
2716 @code{planner-expand-name} shortcuts here, like @kbd{+1} or @kbd{-1}.
2717 Pressing @key{RET} at the prompt will use today.
2719 Once in a @code{planner-tasks-overview} buffer, you can use
2720 the keyboard shortcut @key{o} to change the overview period.
2721 @end defun
2723 You can sort the task display with the following functions:
2725 @defun planner-tasks-overview-sort-by-date
2726 Sort the tasks by date. Keyboard shortcut: @key{1}
2727 @end defun
2729 @defun planner-tasks-overview-sort-by-plan
2730 Sort the tasks by associated plan page. Keyboard shortcut: @key{2}
2731 @end defun
2733 @defun planner-tasks-overview-sort-by-priority
2734 Sort the tasks by priority. Keyboard shortcut: @key{3}
2735 @end defun
2737 @defun planner-tasks-overview-sort-by-status
2738 Sort the tasks by status. Keyboard shortcut: @key{4}
2739 @end defun
2741 You can jump to linked tasks with
2743 @defun planner-tasks-overview-jump other-window
2744 Display the current task. If a prefix argument is supplied, show the
2745 task in another window. Keyboard shortcut: @key{j}
2746 @end defun
2748 @defun planner-tasks-overview-jump-other-window
2749 Display the current task in another window. Keyboard shortcut: @kbd{C-u j}
2750 @end defun
2752 You can view a summary of the tasks in your plan pages with
2754 @defun planner-tasks-overview-show-summary &optional file-list
2755 Count unscheduled, scheduled, and completed tasks for FILE-LIST. If
2756 called with an interactive prefix, prompt for the plan page(s) to
2757 display. Load @file{planner-multi.el} to be able to specify multiple
2758 pages.
2759 @end defun
2761 @key{TAB}, @kbd{SHIFT-TAB} and @key{RET} navigate links in the usual
2762 fashion.
2764 @node <tasks> tag,  , Task Overviews, Task Reports and Overviews
2765 @subsubsection <tasks> tag
2766 @cindex <tasks> tag
2767 @cindex task reports
2768 @cindex reports, task
2769 @cindex overviews, task
2770 @cindex task overviews
2771 @cindex tasks, overview of
2773 @samp{<tasks>} is replaced by a report of tasks over all day pages in
2774 published pages (@pxref{Publishing}).
2776 @example
2777 All incomplete tasks
2779 <tasks status="^X">
2781 All completed tasks
2783 <tasks status="X">
2785 All tasks
2787 <tasks>
2788 @end example
2790 Warning: this function can be slow, as it checks all the day pages!
2792 @node More about Notes, Making Files Pretty, More about Tasks, More about Planner
2793 @section More about Notes
2794 @cindex notes, more about
2795 You can put anything in this section. Notes added by
2796 @file{remember-planner.el} look like this:
2798 @example
2799 .#1 Headline
2800 Body
2801 @end example
2803 and are outlined at the @code{H3} level. If you want to take notes
2804 conveniently, check out @file{remember-planner.el}.
2806 Planner by default organizes the notes on a planner page so that
2807 the most recent note is first. Each note is numbered, with the oldest
2808 note labeled @samp{.#1}. If you would like to reverse this behavior,
2809 look at @kbd{C-h v planner-reverse-chronological-notes}.
2811 Notes are associated with day pages, but can also be associated with
2812 plan pages when they are created.  A linked note looks like this:
2814 @example
2815 .#1 Headline (LinkedNote#1)
2816 Text
2817 @end example
2819 You can jump to the linked note with
2820 @command{planner-jump-to-linked-note}.
2822 Deleting a note can be dangerous, as the notes are automatically
2823 numbered.  Removing a note could break links in other pages.
2825 @defun planner-create-note page
2826 Create a note to be remembered in @var{page} (today if @var{page} is
2827 nil).  If @code{planner-reverse-chronological-notes} is non-nil, create
2828 the note at the beginning of the notes section; otherwise, add it to
2829 the end.  Position point after the anchor.
2830 @end defun
2832 @defun planner-create-note-from-task
2833 Create a note based on the current task and update the current task to
2834 link to the note.
2835 @end defun
2837 @defun planner-renumber-notes
2838 Update note numbering.
2839 @end defun
2841 @defun planner-jump-to-linked-note note-info
2842 Display the note linked to by the current note or @var{note-info} if
2843 non-nil.
2844 @end defun
2846 @defun planner-search-notes regexp limit
2847 Return a buffer with all the notes returned by the query for
2848 @var{regexp}.  If called with a prefix argument, prompt for
2849 @var{limit} and search days on or after @var{limit}.
2850 @end defun
2852 The following sections include instructions for displaying,
2853 manipulating, and navigating your notes efficiently.
2855 @menu
2856 * Using Allout Mode::           Quickly navigating your notes
2857 * <notes>::                     Note headlines
2858 * <past-notes>::                Index of past notes
2859 * Note Indices::                
2860 @end menu
2862 @node Using Allout Mode, <notes>, More about Notes, More about Notes
2863 @subsection Using Allout Mode
2864 @cindex Allout mode
2865 @cindex notes, navigating
2866 @cindex notes, formatting
2867 @cindex notes, displaying
2869 The format of the notes in Planner works well with Allout mode, which
2870 provides helpful commands for navigating and formatting outlines. You
2871 can, for example, hide the bodies of all the notes on a page so you can
2872 see just their headlines. You can also jump easily from headline to
2873 headline, skipping over the bodies in between.
2875 The commands for using Allout mode vary depending on which Emacs version
2876 you are using. In either case, type @kbd{M-x load-library @key{RET}
2877 allout @key{RET}} to start. If you are using CVS Emacs, type @kbd{M-x
2878 allout-mode @key{RET}}. If you are using an earlier version of Emacs,
2879 type @kbd{M-x outline-mode @key{RET}}.
2881 The exact commands then available to you differ depending on your Emacs
2882 version, but you can view the commands and their keybindings by typing
2883 @kbd{C-h m}. In CVS Emacs, they will start with @command{allout-}, while
2884 in previous versions, they will start with @command{outline-}.
2886 @node <notes>, <past-notes>, Using Allout Mode, More about Notes
2887 @subsection <notes>
2889 @samp{<notes>} is replaced by a list of note headlines when the page
2890 is published. For example, the notes tag in the following example will
2891 be replaced by the two headlines when published. (@pxref{Publishing})
2893 @example
2894 <notes>
2896 * Notes
2898 .#1 This is a headline
2900 and this is body text
2902 .#2 This is another headline
2904 and this is more body text
2905 @end example
2907 @samp{<notes>} is useful if you want to provide a quick summary of
2908 blog entries at the top of your page. Just add it to your
2909 @code{planner-day-page-template}.
2911 @node <past-notes>, Note Indices, <notes>, More about Notes
2912 @subsection <past-notes>
2914 @samp{<past-notes>} is replaced by an index of note headlines.
2915 If @var{start} is specified, it lists notes starting from that date.
2916 If @var{directory} is specified, you can index notes in another
2917 planner directory.
2919 @example
2920 All the notes I've taken in 2004:
2922 <past-notes start="2004.01.01" end="2004.12.31">
2923 @end example
2925 @node Note Indices,  , <past-notes>, More about Notes
2926 @comment  node-name,  next,  previous,  up
2927 @subsection Note Indices
2928 @cindex @file{planner-notes-index.el}, using
2929 @cindex notes, indexing
2931 Make sure that @file{planner-notes-index.el} is in your load path and
2932 add this to your @file{.emacs} (or @file{_emacs}):
2934 @example
2935 (require 'planner-notes-index)
2936 @end example
2938 Then you can use tags of the form:
2940 @example
2941 <planner-notes-index page="2004.03.02">
2942 <planner-notes-index from="2004.03.01" to="2004.03.31">
2943 <planner-notes-index limit="10">
2944 <planner-notes-index page="PlanPage">
2945 <planner-notes-index-month-table month="2004.03" limit="5">
2946 <planner-notes-index-month-table month="2004.03">
2947 @end example
2949 You can also use the following interactive functions:
2951 @code{planner-notes-index}
2952 @code{planner-notes-index-days}
2953 @code{planner-notes-index-weeks}
2954 @code{planner-notes-index-months}
2955 @code{planner-notes-index-years}    (wow!)
2957 These work based on the current date (date of current buffer, or today).
2959 If a single page is specified, this page is scanned for headlines
2960 of the form:
2962 @example
2963  .#1 Headline
2964 @end example
2966 The results are presented as a bulleted list.
2968 If @var{from} and @var{to} are specified, all date pages between them
2969 (inclusive) are scanned. If @var{from} is omitted, it is assumed to be
2970 the earliest entry.  If @var{to} is omitted, it is assumed to be the
2971 latest entry.
2973 If @var{recent} is specified, the list includes only that many recent
2974 headlines.  and the results are presented as a bulleted list.
2976 To customize presentation, you can write a function that generates
2977 the appropriate @code{<planner-notes-index>} tags. You can also use
2978 @code{planner-extract-note-headlines} in your own functions.
2980 The following interactive functions are defined in
2981 @file{planner-notes-index.el}:
2983 @defun planner-notes-index &optional from to limit
2984 Display a clickable notes index. If called from a Lisp program,
2985 display only dates between @var{from} and @var{to}. With a prefix arg
2986 @var{limit}, display only that number of entries.
2987 @end defun
2989 @defun planner-notes-index-days days
2990 Display an index of notes posted over the past few @var{days}. The
2991 list ends with the day of the current buffer or @code{planner-today}.
2992 @end defun
2994 @defun planner-notes-index-weeks weeks
2995 Display an index of notes posted over the past few @var{weeks}. The
2996 list ends with the week of the current buffer or
2997 @code{planner-today}. Weeks start from Sunday.
2998 @end defun
3000 @defun planner-notes-index-months months
3001 Display an index of notes posted over the past few @var{months}. The
3002 list ends with the month of the current buffer or @code{planner-today}.
3003 @end defun
3005 @defun planner-notes-index-years years
3006 Display an index of notes posted over the past few @var{years}. The
3007 current year is included.
3008 @end defun
3010 @file{planner-notes-index.el} does not define any keybindings.
3013 @node Making Files Pretty, Annotations, More about Notes, More about Planner
3014 @section Making Files Pretty
3016 By default, planner does a little bit of fancy reformatting when you
3017 save a file. Tasks are sorted by priority (ABC) and status (_oP>XC) on
3018 day pages. On plan pages, tasks are sorted by priority (ABC), status
3019 (XC), and date. Undated tasks are sorted after dated tasks.
3021 @defun planner-sort-tasks
3022 Sort tasks according to planner-sort-tasks-key-function. By default,
3023 sort tasks according to priority and position on day pages, and
3024 according to status, priority, date, and position on plan pages.
3025 @end defun
3027 @defun planner-renumber-tasks
3028 Update task numbering.
3029 @end defun
3031 @defun planner-align-tasks
3032 Align tasks neatly. You can add this to @code{write-file-functions} to
3033 have the tasks automatically lined up whenever you save.  For best
3034 results, ensure @code{planner-align-tasks} is run after
3035 @code{planner-renumber-tasks}.
3036 @end defun
3038 @defun planner-fix-tasks
3039 Sort, renumber and align tasks.
3040 @end defun
3042 @defopt planner-sort-tasks-key-function
3043 Control task sorting. Some options include
3044 @code{planner-sort-tasks-default-key},
3045 @code{planner-sort-tasks-basic}, @code{planner-sort-tasks-by-date}, and
3046 @code{planner-sort-tasks-by-link}.
3047 @end defopt
3049 @defopt planner-sort-undated-tasks-equivalent
3050 This option controls the behavior of task sorting on plan pages.  By
3051 default, the value @samp{9999.99.99} causes dated tasks to be listed
3052 before undated tasks.  To sort undated tasks before dated tasks,
3053 set this to a blank string.
3054 @end defopt
3056 @defopt planner-sort-tasks-automatically
3057 Non-nil means sort tasks whenever a planner file is saved.  On day
3058 pages, tasks are sorted by status.  On plan pages, they are sorted by
3059 status and date.  Sorting can take a while.
3060 @end defopt
3062 @defopt planner-renumber-tasks-automatically
3063 Non-nil means renumber tasks from 1 to N whenever a planner file is
3064 saved. This allows you to refer to tasks in previous day pages using
3065 anchors like @samp{2003.08.12#A1}. If you use this function, make sure
3066 @code{planner-use-task-numbers} is non-nil so that new tasks are created
3067 with task numbers.
3068 @end defopt
3070 @defopt planner-align-tasks-automatically
3071 Non-nil means align tasks whenever a planner file is saved.  This
3072 causes the status to line up in a neat column if you have less than
3073 100 tasks.
3074 @end defopt
3076 @defopt planner-renumber-notes-automatically
3077 Non-nil means renumber the notes. If most of your notes are only on
3078 one page, you might like seeing the notes renumbered if you delete a
3079 note in the middle. However, if you use a lot of cross-referencing,
3080 note renumbering will break those links.
3081 @end defopt
3083 @node Annotations, Interactive Lisp, Making Files Pretty, More about Planner
3084 @comment  node-name,  next,  previous,  up
3085 @section Annotations
3087 The context included when you create a task and the context included
3088 when you create a note are gained the same way. It sounds like black
3089 magic, but it turns out not to be.
3091 All that happens is, Planner has a list of functions,
3092 @code{planner-annotation-functions}. When you create a task from a
3093 buffer, or remember a note from a buffer, Planner goes through
3094 this list from top to bottom. The first one that returns true is the
3095 one it uses.
3097 For example, if you're in Wanderlust, and you hit the key you've bound
3098 to @code{planner-create-task-from-buffer}, it looks at this list and
3099 does something like this.  Is it an ERC buffer? No. Is it a BBDB
3100 buffer? No. Are we in w3m? No. Are we in Wanderlust? Yes. So this
3101 function succeeds. It stops searching and runs the annotation function
3102 for Wanderlust, which in this case finds out who the message is from
3103 and what the message ID of the message is. It then takes those and
3104 constructs a link back to that message, with a link title something
3105 like @samp{Email from Joe Blogs}.
3107 So, you've read the email from Joe Blogs. He's asked you to do
3108 something and you've hit your key to add that task to your list of
3109 things to do. So what you end up with is a description of the task,
3110 and a link back to what made you create the task in the first place.
3112 The same happens with remembering notes, except that it ends up in the
3113 @samp{* Notes} section of your page instead.
3115 By default, @file{planner.el} can annotate tasks and notes based on
3116 the current filename.  To change the behavior of annotations,
3117 customize the following options:
3119 @defopt planner-annotation-functions
3120 A list of functions tried in order by
3121 @command{planner-create-task-from-buffer} and other functions that
3122 pick up context.  The first non-nil value returned is used as the
3123 annotation.  To cause an item to @strong{not} be annotated, return the
3124 empty string @samp{""}.
3125 @end defopt
3127 @defopt planner-annotation-strip-directory
3128 File links are usually generated with the full path to the file so
3129 that you can easily tell apart files with the same base name.  If
3130 @code{planner-annotation-strip-directory} is non-nil, though, only the
3131 base name of the file will be displayed.  For example, a link to
3132 @samp{/foo/bar/baz} will be displayed as @samp{baz} and hyperlinked to
3133 the file.
3134 @end defopt
3136 @defopt planner-annotation-use-relative-file
3137 If t, always use relative filenames.
3138 @code{planner-annotation-use-relative-file} can also be a function that
3139 takes the filename and returns non-nil if the link should be relative.
3140 Filenames are resolved relative to the first directory of your Planner
3141 project in @code{muse-project-alist}.  That is, the created link will be
3142 of the form @samp{../../somefile} instead of
3143 @samp{/absolute/path/to/file}.  This can be helpful if you publish your
3144 planner files to the Net and your directory structure ensures that
3145 relative links resolve the same from your Plan pages and their
3146 respective publishing directory.
3147 @end defopt
3149 @node Interactive Lisp, Publishing, Annotations, More about Planner
3150 @comment  node-name,  next,  previous,  up
3151 @section Interactive Lisp with planner-lisp.el
3152 @cindex Lisp functions, using with Planner
3153 @cindex interactive Lisp fuctions, using with Planner
3154 @cindex @file{planner-lisp.el}, using
3156 You can include interactive Lisp functions in your planner pages.
3158 First, you need @file{planner-lisp.el}. Put this in your @file{.emacs}
3159 (or @file{_emacs}):
3161 @example
3162 (require 'planner-lisp)
3163 @end example
3165 Then, add a link to the Lisp function to your page, like:
3167 @example
3169 [[lisp:/plan][Plan]]
3171 @end example
3173 This will be rendered as @samp{Plan}. Selecting the link will run the
3174 @code{plan} function interactively.
3176 You can also execute other Lisp expressions. For example:
3178 @example
3179 [[lisp:/(planner-goto (planner-expand-name "+7"))][Next week]]
3180 @end example
3182 @file{planner-lisp.el} does not provide any interactive functions or
3183 keybindings.
3185 @node Publishing, Experimental Functions, Interactive Lisp, More about Planner
3186 @section Publishing
3188 You can publish your planner files to HTML and put them on a normal
3189 web server--no special server support required. This gives you an easy
3190 way to keep other people up to date on your tasks, keep a web log, or
3191 simply organize information.
3193 Publish your planner wiki with @kbd{C-c C-p}
3194 (@code{muse-project-publish}). You can publish individual files with
3195 @kbd{C-c C-t} (@code{muse-publish-this-file}). To automatically publish
3196 files when you save them, add the following code to your
3197 @file{~/.emacs}:
3199 @example
3200 (eval-after-load "muse-mode"
3201   (add-hook 'after-save-hook
3202             #'(lambda ()
3203                 (when (planner-derived-mode-p 'muse-mode)
3204                   (muse-project-publish nil)))
3205             nil t))
3206 @end example
3208 Published files are stored in the path specified by
3209 @code{muse-project-alist} for your Planner project.  Just copy the
3210 contents of this directory to your webserver, and you're all set! Of
3211 course, publishing is completely optional.
3213 Here are some more features related to publishing:
3215 @menu
3216 * Publishing Calendars::        planner-calendar.el
3217 * Authz Access Restriction::    planner-authz.el
3218 * RSS Publication::             Sharing notes with planner-rss.el
3219 * iCal Task Publication::       Sharing tasks with planner-ical.el
3220 * RDF Publication::             planner-rdf.el
3221 @end menu
3223 @node Publishing Calendars, Authz Access Restriction, Publishing, Publishing
3224 @comment  node-name,  next,  previous,  up
3225 @subsection Publishing Calendars
3226 @cindex calendar, publishing
3227 @cindex @file{planner-calendar.el}, using
3229 To publish calendars in your day pages, it is necessary to do two steps.
3231 @itemize
3232 @item Add (require 'planner-calendar) to your configuration.
3233 @item Add a <calendar> tag to either your header, footer, or
3234 @var{planner-day-page-template}, depending on where you want it to
3235 appear.
3236 @end itemize
3238 It is also possible to create a symlink from the current day page to the
3239 page name specified by @var{planner-calendar-today-page-name}.  To
3240 accomplish this, add the following to your configuration.
3242 @example
3243 (eval-after-load "muse-publish"
3244   '(progn
3245      (add-hook 'muse-after-publish-hook
3246                'planner-calendar-create-today-link t t)))
3247 @end example
3249 @defopt planner-calendar-prev-month-button
3250 HTML text used for previous month buttons.
3251 @end defopt
3253 @defopt planner-calendar-next-month-button
3254 HTML text used for next month buttons.
3255 @end defopt
3257 @defopt planner-calendar-day-header-chars
3258 Number of characters to use for day column header names.
3259 @end defopt
3261 @defopt planner-calendar-today-page-name
3262 Default name for published today page link.
3263 @end defopt
3265 @defun planner-calendar-create-today-link
3266 Add this function to @code{muse-after-publish-hook} to
3267 create a ``today'' soft-link to the newest published planner day page,
3268 on operating systems that support POSIX @command{ln}.
3269 @end defun
3271 @node Authz Access Restriction, RSS Publication, Publishing Calendars, Publishing
3272 @comment  node-name,  next,  previous,  up
3273 @subsection Authz Access Restriction
3274 @cindex @file{planner-authz.el}, using
3275 @cindex Mason, restricting portions with
3276 @cindex access, restricting
3278 @file{planner-authz.el} was written by Andrew J. Korty in order to
3279 allow the easy restriction of portions of published pages.  It uses
3280 the HTML::Mason module available on CPAN
3281 (@url{http://www.cpan.org}).  Setting up HTML::Mason is
3282 outside the scope of this document.  Make sure that it works before
3283 trying out @file{planner-authz.el}.
3285 @file{planner-authz.el} modifies the behavior of
3286 @command{muse-project-publish} so that published pages follow access
3287 modifiers.
3289 This library lets you publish your planner pages while controlling
3290 access to certain portions of them to users you specify.  When you
3291 load this library, you gain access to two additional markup directives
3292 to use in your planner pages.  The @samp{<authz>} tag lets you
3293 restrict access to arbitrary content as follows:
3295 @example
3296 Here is a sentence everyone should see.  This sentence also
3297 contains no sensitive data whatsoever.  <authz users="ajk">This
3298 sentence, however, talks about my predilection for that French
3299 vanilla instant coffee that comes in the little tin, and I'm
3300 embarrassed for anyone else to know about that.</authz> And
3301 here's some more perfectly innocuous content.
3302 @end example
3304 You can use @samp{<authz>} tags to mark up entire paragraphs, tasks,
3305 notes, and anything else.  The tags are replaced with Mason code in
3306 the published pages.
3308 The @samp{#authz} directive restricts access to an entire page.  A Mason
3309 call is added to this page to generate a 403 error when someone not
3310 listed tries to access it.  Any notes or tasks on a
3311 @samp{#authz}-protected page are also wrapped in Mason code on linked
3312 pages. To add a @samp{#authz} directive to a Muse page, place
3313 @samp{#authz} followed by a space-delimited list of users on one
3314 line. For example:
3316 @example
3317 #authz ajk sacha
3318 @end example
3320 @defopt planner-authz-project-default
3321 Default access list for project pages (not day pages).  If a given
3322 project page doesn't contain a @samp{#authz} tag, it will receive the
3323 access list defined here.  If this variable is nil, all users will be
3324 allowed to view the page.  No corresponding variable is provided for
3325 day pages because it doesn't seem like you'd ever want to control
3326 access based on what day it was.  (But I will accept patches. :) Notes
3327 and tasks referencing pages without @samp{#authz} tags will also be
3328 restricted to the users listed here.
3329 @end defopt
3331 @defopt planner-authz-day-note-default
3332 Default access list for notes on day pages not associated with
3333 any project.  There is way to set a default for notes on project
3334 pages for the reason above; they would only be associated with
3335 date pages anyway.
3336 @end defopt
3338 @defopt planner-authz-day-task-default
3339 Same as @kbd{planner-authz-day-note-default}, but for tasks.
3340 @end defopt
3342 @defun planner-authz-publish-index
3343 Publish an index for the planner marked up with Mason code.
3344 Only those links to pages which the remote user is authorized to
3345 access will be shown.
3346 @end defun
3348 @node RSS Publication, iCal Task Publication, Authz Access Restriction, Publishing
3349 @comment  node-name,  next,  previous,  up
3350 @subsection RSS Publication
3351 @cindex @file{planner-rss.el}, using
3352 @cindex notes, RSS
3353 @cindex RSS
3355 @file{planner-rss.el} allows you to publish your notes in the RSS 2.0
3356 XML format for blog syndication. You will also want to customize the
3357 following variables:
3359 @defopt planner-rss-base-url
3360 Base absolute URL for published blog entries. Should include trailing
3361 @samp{/}.
3362 @end defopt
3364 @defopt planner-rss-category-feeds
3365 Rules for automatic categorization of posts and publishing to RSS
3366 files. A blog entry is matched against each condition. If it matches
3367 the regular expression or the function returns a non-nil value, the
3368 blog entry is copied into the specified file.
3369 @end defopt
3371 @defopt planner-rss-feed-limits
3372 A list of regular expressions that match feed filenames and the size
3373 and item limits for feeds that match. For example, you can use
3374 @samp{(("." nil 10))} to ensure that all feeds are limited to the 10
3375 most recent items.
3376 @end defopt
3378 To manually add the current note to all the matching RSS feeds, invoke
3379 @command{planner-rss-add-note}. You can specify a filename with the
3380 universal prefix, like this: @kbd{C-u M-x planner-rss-add-note}.
3382 If you use the @file{remember-planner.el} module to create notes, you
3383 can automatically publish new notes to RSS feeds by adding the
3384 following code to your @file{.emacs} (or @file{_emacs}).
3386 @example
3387 (add-to-list 'remember-planner-append-hook 'planner-rss-add-note t)
3388 @end example
3390 @file{planner-rss.el} defines the following interactive functions:
3392 @defun planner-rss-add-note @var{feed}
3393 Export the current note using @code{planner-add-item}. If @var{feed}
3394 is specified, add the entry to the specified file. Else, add the entry
3395 to all matching RSS feeds specified by
3396 @code{planner-rss-category-feeds}.
3397 @end defun
3399 @node iCal Task Publication, RDF Publication, RSS Publication, Publishing
3400 @comment  node-name,  next,  previous,  up
3401 @subsection iCal Publication
3403 iCal is an Internet Engineering Task Force (IETF) standard for
3404 calendaring and scheduling. @uref{http://www.ietf.org/rfc/rfc2445.txt}
3406 You can export your tasks to the iCal format using
3407 @file{planner-ical}. Add @code{(require 'planner-ical)} to your
3408 @file{~/.emacs}. Then you can use @kbd{M-x planner-ical-export-page}
3409 to display the iCal equivalent of tasks on a page, which you can then
3410 save to a file.
3412 To export today's tasks to a file in your publishing directory, add
3413 the following to your @file{~/.emacs}.
3415 @example
3416 (planner-ical-export-file
3417  (planner-today)
3418  (expand-file-name
3419    "tasks.ics"
3420    (muse-style-element :path (car (cddr (muse-project planner-project))))))
3421 @end example
3423 @defun planner-ical-export-page page &optional file
3424 Export PAGE's tasks in the iCal format.
3425 If FILE is non-nil, results are saved to that file.
3426 If FILE is nil, results are displayed in a `planner-ical-export-buffer'.
3427 @end defun
3429 @defun planner-ical-export-this-page
3430 Display the tasks on the current page in iCal format.
3431 @end defun
3433 @node RDF Publication,  , iCal Task Publication, Publishing
3434 @comment  node-name,  next,  previous,  up
3435 @subsection RDF Publication
3436 @cindex @file{planner-rdf.el}, using
3437 @cindex RDF, publishing to
3439 Put planner-rdf.el in a directory that is in your Emacs load-path and
3440 the following into your ~/.emacs file:
3442 @example
3443 (require 'planner-rdf)
3444 (eval-after-load "muse-publish"
3445   '(progn
3446      (add-hook 'muse-after-publish-hook
3447                'planner-rdf-publish-file)
3448      (add-hook 'muse-after-publish-hook
3449                'planner-rdf-publish-index)))
3450 @end example
3452 @menu
3453 * Publishing with planner-rdf::  
3454 * planner-rdf Tags::            
3455 * planner-rdf Usage Examples::  
3456 @end menu
3458 @node Publishing with planner-rdf, planner-rdf Tags, RDF Publication, RDF Publication
3459 @subsubsection Publishing with planner-rdf
3461 Planner-rdf is now included in the normal Planner publishing process.
3462 Pressing @key{C-p} will create a .owl and a .rdf file for every planner
3463 file. Additionally it creates an index, @file{index.rdf}.
3465 By default all generated files will be stored in the normal Planner
3466 publishing directory, where the HTML files end up. If you would ike to
3467 change that, set the variable @code{planner-rdf-directory} to the desired
3468 location.
3470 The generated files:
3472 @itemize
3473 @item
3474 @file{index.rdf} - a collection with pointers to the
3475 @file{<plan-page>.rdf} files.
3476 @item
3477 @file{<plan-page>.rdf} - contains Dublin Core metadata about the files
3478 related to the current Planner page. Currently it contains metadata
3479 about the source file, the Emacs plan page, the generated HTML page, and
3480 the generated OWL file.
3481 @item
3482 @file{<plan-page>.owl} - contains task and note data from the Planner
3483 file. Task information is stored completely. For notes, the note
3484 headline is stored.
3485 @end itemize
3487 @node planner-rdf Tags, planner-rdf Usage Examples, Publishing with planner-rdf, RDF Publication
3488 @subsubsection planner-rdf Tags
3490 Besides the factual information, e.g. the task status or description,
3491 planner-rdf extracts links (in the format @samp{[[...][...]]} or
3492 @samp{[[...]]}) and tags (@samp{@{@{...:...}@}@}) from tasks and notes
3493 (including the notes text). Links and tags provide context for the plan
3494 elements and so are stored and linked with the containing elements.
3496 Links point to locations that can be used to enrich the information in
3497 the Planner pages (e.g, by retrieving data from them and adding it),
3498 tags -- like the one for the task ids @samp{@{@{Tasks:198@}@}} -- can be
3499 used to express abstract qualities. Some examples:
3501 @itemize
3502 @item
3503 an @samp{@{@{audience:myteam@}@}} tag, can be used to restrict
3504 publishing of items to a certain user group;
3505 @item a @samp{@{@{lang:de@}@}} tag, signifying the language of the text;
3506 @item
3507 a @samp{@{@{location:Hamburg@}@}} tag, can be used to make geographic
3508 reference to an entity that is not stored in your address book, bbdb.
3509 @end itemize
3511 What tags to use is up to the user. Planner-rdf makes no assumptions
3512 about them, it just extracts and stores them. Only the applications
3513 using the data know what to do with them.
3515 @node planner-rdf Usage Examples,  , planner-rdf Tags, RDF Publication
3516 @subsubsection Usage Examples
3518 Report generation with OpenOffice
3520 The Perl file @file{this-week.pl}
3521 (@url{http://www.rainervolz.de/planner-rdf/this-week.pl}) creates a
3522 simple report for the current week. The script extracts task and note
3523 information from the generated OWL files and inserts it into a simple
3524 OpenOffice Writer document. Nothing fancy, just a proof of concept, to
3525 show how planner-rdf can be used to integrate Planner Mode with other
3526 applications.
3528 Besides Perl and OpenOffice you'll need the Redland RDF Application
3529 Framework (@url{http://www.redland.opensource.ac.uk/}). It is used to
3530 process the RDF data. Redland is small, but powerful, and available
3531 for many platforms and languages.
3533 As an example the application loads the RDF data each time it is run.
3534 In the real world you probably would use Redland to store the Planner
3535 data in a database, to save the loading step each time you access the
3536 data.
3538 Importing Planner data into Protege
3540 Protege is a popular ontology editor and knowledge management
3541 application. A simple way to import data into it, is to provide a OWL
3542 file that contains the data as well as the schema. To do this:
3544 @itemize
3545 @item
3546 Use @file{planner2protege.pl}
3547 (@url{http://www.rainervolz.de/planner-rdf/planner2protege.pl}) to
3548 combine all OWL files into a single one.
3549 @item
3550 Use CWM (@url{http://www.w3.org/2000/10/swap/doc/cwm.html}) to combine
3551 schema and data, with @code{python cmw --rdf planner-rdf.owl
3552 planner-data.owl --think --rdf >planner2.owl}
3553 @end itemize
3555 Not the most straightforward process, but it works. The resulting file,
3556 here planner2.owl, can then be loaded into Protege.
3558 @node Experimental Functions,  , Publishing, More about Planner
3559 @comment  node-name,  next,  previous,  up
3560 @section Experimental Functions
3561 @cindex @file{planner-experimental.el}, using
3562 @cindex experimental functions, Planner
3564 These functions are experimental. This means that they may not do
3565 exactly what you expect them to do, so keep backups, be careful, and
3566 don't blame us.
3568 To use these functions, make sure that @file{planner-experimental.el} is
3569 in your load path, and add this to your @file{.emacs} (or
3570 @file{_emacs}):
3572 @example
3573 (require 'planner-experimental)
3574 @end example
3576 @file{planner-experimental.el} defines the following interactive
3577 functions:
3579 @defun planner-search-notes-next-match
3580 Jump to the next matching entry.  Call after
3581 @code{planner-search-notes}.
3582 @end defun
3584 @defun planner-search-notes-previous-match
3585 Jump to the previous matching entry.  Call after
3586 @code{planner-search-notes}.
3587 @end defun
3589 @defun planner-remove-duplicates
3590 Remove duplicate tasks.
3591 @end defun
3593 @file{planner-experimental.el} does not define any keybindings.
3595 @node Managing Your Information, Advanced Configuration, More about Planner, Top
3596 @comment  node-name,  next,  previous,  up
3597 @chapter Managing Your Information
3599 Planner can be integrated with other Emacs and even some non-Emacs
3600 programs by loading additional modules. You can pick and choose from
3601 these modules, choosing those that work with programs you use and that
3602 produce information you want to have included in your Planner pages.
3604 @menu
3605 * E-mail::                      Linking notes and tasks to messages
3606 * Scheduling and Time::         Tracking appointments and where your time goes
3607 * Finances::                    Display your account balances and more
3608 * Contacts and Conversations::  BBDB and ERC
3609 * Tracking Research and Resources::  The Web, bibliographies, and bookmarks
3610 * Tracking Development::        
3611 @end menu
3613 @node E-mail, Scheduling and Time, Managing Your Information, Managing Your Information
3614 @comment  node-name,  next,  previous,  up
3615 @section E-mail
3617 Planner can work together with several different Emacs e-mail
3618 clients. If you load the appropriate module for the e-mail client you
3619 use, then your notes and tasks can be annotated with information
3620 pointing to the specific e-mail message you were reading when you
3621 created that note or task. When you are looking at the note or task, you
3622 will be able to jump straight to that message.
3624 @menu
3625 * Unix mail::                   Unix mailboxes: planner-unix-mail.el              
3626 * Gnus::                        Gnus mail and news reader: planner-gnus.el
3627 * VM::                          VM mail reader: planner-vm.el
3628 * Wanderlust::                  Wanderlust mail reader: planner-wl.el
3629 * MH-E::                        MH-E mail reader: planner-mhe.el
3630 * Rmail::                       Rmail: planner-rmail.el
3631 @end menu
3634 @node Unix mail, Gnus, E-mail, E-mail
3635 @comment  node-name,  next,  previous,  up
3636 @subsection Unix mail
3637 @cindex mbox, using Planner with
3638 @cindex Unix mail, using Planner with
3639 @cindex mail client, using Planner with
3641 This module supports links from any kind of Unix mailbox (mbox). To
3642 use this module, make sure that @file{planner-unix-mail.el} is in your
3643 load path and add this to your @file{.emacs} (or @file{_emacs}):
3645 @example
3646 (require 'planner-unix-mail)
3647 @end example
3649 Unix mail URLs are of the form:
3651 @example
3652 ;; mail://PATH/TO/INBOX/message-id
3653 @end example
3655 Annotations will be of the form:
3657 @smallexample
3658 [[mail://PATH/TO/INBOX/E1AyTpt-0000JR-LU%40sacha.ateneo.edu][E-mail from Sacha Chua]]
3659 @end smallexample
3661 @file{planner-unix-mail.el} does not define any interactive functions or
3662 create any new keybindings.
3664 @node Gnus, VM, Unix mail, E-mail
3665 @comment  node-name,  next,  previous,  up
3666 @subsection Gnus
3667 @cindex Gnus, using Planner with
3668 @cindex mail client, using Planner with, Gnus
3670 To use this module, make sure that it is in your load path and put
3671 this in your @file{.emacs} (or @file{_emacs}):
3673 @example
3674 (require 'planner-gnus)
3675 (planner-gnus-insinuate)
3676 @end example
3678 With this module loaded, when you create tasks from Gnus summary or
3679 message buffers, the tasks will be annotated with information from the
3680 message you were looking at when you created each task. A link will also
3681 be created on your planner page that you can select in order to return
3682 to the message.
3684 So, the created task will look something like this:
3686 @smallexample
3687 #A34 _ Send writing to publishme.com from
3688 [[gnus://alt.books.beatgeneration/<Ifo5c.24632$F9.9567@@nwrddc01.gnilink.net>][E-Mail
3689 from editor@@verizon.net]] @{@{Tasks:71@}@} ([[Writing]])
3690 @end smallexample
3692 This module also binds @kbd{C-c C-t} in the Gnus summary and article
3693 views to the command to create a new task.
3695 @file{planner-gnus.el} does not define any interactive functions.
3697 For more information about Gnus, see @inforef{Top, The Gnus Newsreader,
3698 gnus}.
3700 @node VM, Wanderlust, Gnus, E-mail
3701 @comment  node-name,  next,  previous,  up
3702 @subsection VM
3703 @cindex VM, using Planner with
3704 @cindex mail client, using Planner with, VM
3706 To use this module, make sure that @file{planner-vm.el} is in your load
3707 path and add this to your @file{.emacs} (or @file{_emacs}):
3709 @example
3710 (require 'planner-vm)
3711 @end example
3713 VM URLs are of the form:
3715 @example
3716 vm://path/to/inbox/message-id
3717 @end example
3719 Annotations will be of the form:
3721 @smallexample
3722 [[vm://home/test/INBOX/<E1AyTpt-0000JR-LU@@sacha.ateneo.edu>][E-mail from Sacha Chua]]
3723 @end smallexample
3725 @file{planner-vm.el} does not define any interactive functions or
3726 keybindings.
3729 @node Wanderlust, MH-E, VM, E-mail
3730 @comment  node-name,  next,  previous,  up
3731 @subsection Wanderlust
3732 @cindex Wanderlust, using Planner with
3733 @cindex mail client, using Planner with, Wanderlust
3735 To use this module, make sure that @file{planner-wl.el} is in your
3736 load path and add this to your @file{.emacs} (or @file{_emacs}):
3738 @example
3739 (require 'planner-wl)
3740 @end example
3742 Then, when you call @kbd{M-x planner-create-task-from-buffer} from
3743 Wanderlust summary or message buffers, the task will be created with
3744 the correct annotation.
3746 @file{planner-wl} does not define any interactive functions.
3748 To add keybindings to Wanderlust, call:
3750 @example
3751 (planner-wl-insinuate)
3752 @end example
3754 This binds @kbd{F} to @command{planner-create-task-from-buffer}.
3756 @node MH-E, Rmail, Wanderlust, E-mail
3757 @comment  node-name,  next,  previous,  up
3758 @subsection MH-E
3759 @cindex MH-E, using Planner with
3760 @cindex mail client, using Planner with, MH-E
3762 To use this module, make sure that @file{planner-mhe.el} is in your
3763 load path and add this to your @file{.emacs} (or @file{_emacs}):
3765 @example
3766 (require 'planner-mhe)
3767 @end example
3769 Then, when you call @kbd{M-x planner-create-task-from-buffer} from
3770 MH-E summary or message buffers, the task will be created with
3771 the correct annotation.
3773 @file{planner-mhe} does not define any interactive functions.
3775 @node Rmail,  , MH-E, E-mail
3776 @comment  node-name,  next,  previous,  up
3777 @subsection Rmail
3778 @cindex Rmail, using Planner with
3779 @cindex mail client, using Planner with, Rmail
3781 To use this module, make sure that @file{planner-rmail.el} is in your
3782 load path and add this to your @file{.emacs} (or @file{_emacs}):
3784 @example
3785 (require 'planner-rmail)
3786 @end example
3788 Rmail URLs are of the form:
3790 @example
3791 rmail://message-id
3792 @end example
3794 Annotations will be of the form:
3796 @smallexample
3797 [[rmail://<E1AyTpt-0000JR-LU@@sacha.ateneo.edu>][E-mail from Sacha Chua]]
3798 @end smallexample
3800 @file{planner-rmail.el} does not define any interactive functions or
3801 create any new keybindings.
3803 For more information about Rmail, see @inforef{Rmail, Reading Mail With
3804 Rmail, Emacs}.
3806 @node Scheduling and Time, Finances, E-mail, Managing Your Information
3807 @comment  node-name,  next,  previous,  up
3808 @section Scheduling and Time
3810 @menu
3811 * Diary::                       Using the Emacs diary
3812 * Appointments::                Appointments in plan pages: planner-appt.el
3813 * Timeclock::                   Time tracking: planner-timeclock.el
3814 * schedule.el::                 Project completion: planner-schedule.el
3815 @end menu
3818 @node Diary, Appointments, Scheduling and Time, Scheduling and Time
3819 @comment  node-name,  next,  previous,  up
3820 @subsection Diary
3821 @cindex diary, using Planner with
3822 @cindex @file{planner-diary.el}, using
3824 If you use Emacs's diary feature, Planner-Diary could be helpful for
3825 you. It puts all diary entries for the current day in the @samp{*
3826 Diary} section of your day plan page. This section is updated every
3827 time you display the file in Emacs. By default the diary section of
3828 past pages is not updated; it's pretty unlikely that you want to add
3829 new diary entries for the past. (@pxref{Diary, , , Emacs, GNU Emacs
3830 Manual})
3832 If you want to use @file{planner-diary.el}, make sure the file is in
3833 your load path and add this to your @file{.emacs} (or @file{_emacs}):
3835 @example
3836 (require 'planner-diary)
3837 @end example
3839 @file{planner-diary.el} needs @command{fancy-diary-display}.  To use
3840 @command{fancy-diary-display}, add this to your @file{.emacs} (or
3841 @file{_emacs}):
3843 @example
3844 (add-hook 'diary-display-hook 'fancy-diary-display)
3845 @end example
3847 You can use Planner-Diary in two different ways:
3849 @enumerate
3851 @item
3852 If you want the saved files to contain your entries and not just a line
3853 of Lisp, add the following lines to your @file{.emacs} (or @file{_emacs}):
3855 @example
3856 (setq planner-diary-use-diary t)
3857 (planner-diary-insinuate)
3858 @end example
3860 You should also customize or set @code{planner-day-page-template} to
3861 include a @samp{* Diary}:
3863 @example
3864 (setq planner-day-page-template
3865  "* Tasks\n\n\n* Schedule\n\n\n* Diary\n\n\n* Notes")
3866 @end example
3868 @item
3869 (GNU EMACS ONLY) You can put the following line of Lisp code in your
3870 day plan pages to display your diary entries:
3872 @example
3873 <lisp>(planner-diary-entries-here)</lisp>
3874 @end example
3876 You can do this automatically for all day plan pages:
3878 @smallexample
3879 (setq planner-day-page-template
3880   "* Tasks\n\n\n* Diary\n\n<lisp>(planner-diary-entries-here)</lisp>
3881 \n* Notes")
3882 @end smallexample
3884 When you open a day plan page outside Emacs, you will see the line of
3885 Lisp code and not your diary entries.
3887 @end enumerate
3889 @kbd{C-c C-e} updates the diary sections.  @kbd{C-u C-c C-e} forces an
3890 update---it inserts the diary section for the day, even if the day is in
3891 the past or if there is no @samp{Diary} section in the buffer.
3893 If you want to see your diary entries for more than just one day, set
3894 @code{planner-diary-number-of-days} accordingly.  This works for either
3895 of the two approaches.
3897 If you want to use the Cal-Desk package, simply follow the instructions
3898 in @file{cal-desk.el}.  If you get the Cal-Desk layout from the Calendar
3899 buffer, you get it in the day plan buffer, too.
3901 If you use Planner-Diary, you might consider using the Calendar support
3902 of Planner. (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}) To get
3903 Calendar integration, add this to your @file{.emacs} (or @file{_emacs}):
3905 @example
3906 (planner-insinuate-calendar)
3907 @end example
3909 If @code{planner-diary-create-section-flag} is non-nil, sections are
3910 always inserted if necessary.
3912 @defopt planner-diary-create-section-flag
3913 Non-nil means create the requested diary sections if they do not
3914 exist. By default, planner-diary tries to create the section. If you
3915 want more control over your pages, you can set this to nil. Trying to
3916 write a diary section to a page that does not have it yet will then
3917 result in an error.
3918 @end defopt
3920 By default, planner-diary lists only the appointments you have on that
3921 day. If you want the date headers included even when showing the diary
3922 entries for a single day, set planner-diary-include-all-output to
3923 non-nil.
3925 @defopt planner-diary-include-all-output-flag
3926 Non-nil means don't omit any data when copying diary entries into day
3927 pages.
3928 @end defopt
3930 @file{planner-diary.el} defines the following interactive functions:
3932 @defun planner-diary-add-entry date time text
3933 Prompt for a diary entry to add to @code{diary-file} on @var{date}.
3934 Uses @code{planner-annotation-functions} to make hyperlinks.
3935 @var{time} and @var{text} are used in the description."
3936 @end defun
3938 @defun planner-diary-insert-diary force
3939 Insert the fancy diary for the day into the day plan file. If
3940 @var{force} is non-nil, insert a diary section even if there is no
3941 @var{planner-diary-string} in the buffer.
3942 @end defun
3944 @defun planner-diary-insert-diary-maybe force
3945 Maybe insert the fancy diary for the day into the day plan file. If the
3946 current day is in the past and @var{force} is nil, don't do anything. If
3947 @var{force} is non-nil, insert a diary section even if there is no
3948 @code{planner-diary-string} in the buffer.
3949 @end defun
3951 @defun planner-diary-insert-appts force
3952 Insert the diary appointments for the day into the day plan file.  If
3953 @var{force} is non-nil, insert a diary appointments section even if
3954 there is no @code{planner-diary-appts-string} in the buffer.
3955 @end defun
3957 @defun planner-diary-insert-appts-maybe force
3958 Maybe insert the diary appointments for the day into the day plan file.
3959 If the current day is in the past and @var{force} is nil, don't do
3960 anything.  If @var{force} is non-nil, insert a diary appointments
3961 section even if there is no @code{planner-diary-appts-string} in the
3962 buffer.
3963 @end defun
3965 @defun planner-diary-insert-cal-desk force
3966 Insert the cal-desk diary for the day into the day plan file.  If
3967 @var{force} is non-nil, insert a cal-desk diary section even if there is
3968 no @code{planner-diary-cal-desk-string} in the buffer.
3969 @end defun
3971 @defun planner-diary-insert-cal-desk-maybe force
3972 Maybe insert the cal-desk diary for the day into the day plan file.  If
3973 the current day is in the past and @var{force} is nil, don't do
3974 anything.  If @var{force} is non-nil, insert a cal-desk appointments
3975 section even if there is no @code{planner-diary-cal-desk-string} in the
3976 buffer.
3977 @end defun
3979 @defun planner-diary-insert-public force
3980 Insert the public diary for the day into the day plan file.  If
3981 @var{force} is non-nil, insert a public diary section even if there is
3982 no @code{planner-diary-public-string} in the buffer.
3983 @end defun
3985 @defun planner-diary-insert-public-maybe force
3986 Maybe insert the public diary for the day into the day plan file.  If
3987 the current day is in the past and @var{force} is nil, don't do
3988 anything.  If @var{force} is non-nil, insert a public appointments
3989 section even if there is no @code{planner-diary-public-string} in the
3990 buffer.
3991 @end defun
3993 @defun planner-diary-insert-private force
3994 Insert the private diary for the day into the day plan file.  If
3995 @var{force} is non-nil, insert a private diary section even if there is
3996 no @code{planner-diary-private-string} in the buffer.
3997 @end defun
3999 @defun planner-diary-insert-private-maybe force
4000 Maybe insert the private diary for the day into the day plan file.  If
4001 the current day is in the past and @var{force} is nil, don't do
4002 anything.  If @var{force} is non-nil, insert a private appointments
4003 section even if there is no @code{planner-diary-private-string} in the
4004 buffer.
4005 @end defun
4007 @defun planner-diary-insert-all-diaries force
4008 Update all diary sections in a day plan file.  If @var{force} is
4009 non-nil, insert a diary section even if there is no section header.  It
4010 only inserts diaries if the corresponding @code{planner-diary-use-}*
4011 variable is @samp{t}.
4012 @end defun
4014 @defun planner-diary-insert-all-diaries-maybe force
4015 Update all diary sections in a day plan file.  If the current day is in
4016 the past and @var{force} is nil, don't do anything.  If @var{force} is
4017 non-nil, insert a diary section even if there is no section header.  It
4018 only inserts diaries if the corresponding @code{planner-diary-use-}*
4019 variable is @samp{t}.
4020 @end defun
4022 @defun planner-diary-show-day-plan-or-diary
4023 Show the day plan or diary entries for the date under point in calendar.
4024 Add this to @code{calendar-move-hook} if you want to use it.  In that
4025 case, you should also @command{remove-hook} @samp{planner-calendar-show}
4026 from @code{calendar-move-hook}.
4027 @end defun
4030 @file{planner-diary.el} adds the following keybinding to Planner, if
4031 @command{planner-diary-insinuate} is in your @file{.emacs} (or
4032 @file{_emacs}):
4034 @itemize
4036 @item
4037 @kbd{C-c C-e} updates the diary sections.
4039 @end itemize
4041 @menu
4042 * Planner-Diary Advanced Features::  
4043 @end menu
4045 @node Planner-Diary Advanced Features,  , Diary, Diary
4046 @comment  node-name,  next,  previous,  up
4047 @subsubsection Planner-Diary Advanced Features
4048 @cindex diary, using Planner with
4049 @cindex @file{planner-diary.el}, advanced features
4051 The features described here are part of the development version.  They
4052 are subject to change without notice.  They may be buggy.  The
4053 documentation may be inaccurate.  Use at your own risk.
4055 There is a lot of code redundancy in the development version.  This is
4056 intentional and makes it easier to change the code for one type of diary
4057 section without breaking others.
4059 Currently Planner-Diary supports six different views of your diary
4060 entries:
4062 @enumerate
4063 @item
4064 Ordinary fancy diary display (what you get by pressing @kbd{d} in the
4065 calendar buffer with @code{fancy-diary-display} switched on)
4067 @item
4068 Schedule/Appointments (all entries from 1 that have a time assigned to
4069 them
4071 @item
4072 Diary without appts (1 without 2)
4074 @item
4075 cal-desk display (appts on top, non appts entries at bottom)
4077 @item
4078 A private diary (same as 1, but uses a different diary-file)
4080 @item
4081 A public diary (same as 1, but uses a different diary-file)
4082 @end enumerate
4084 Put the following line of Lisp code in your day plan pages to display
4085 your diary entries:
4087 @example
4088 <lisp>(planner-diary-entries-here)</lisp>
4089 @end example
4091 The function @code{planner-diary-entries-here} takes two optional
4092 arguments---the diary file you want to use and the number of days you
4093 want to display.
4095 @node Appointments, Timeclock, Diary, Scheduling and Time
4096 @comment  node-name,  next,  previous,  up
4097 @subsection Appointments
4098 @cindex appointments
4099 @cindex @file{planner-appt.el}, using
4101 If you would like to use planner for your appointment alerts
4102 instead of using the diary system, you might like to try
4103 @file{planner-appt}.
4105 According to your preferences, you may choose from two different
4106 approaches. Appointments in task descriptions on today's plan
4107 page are like this:
4109 @example
4110 #A   _ @@12:45 Do something (TaskPool)
4111 @end example
4113 @noindent
4114 and appointments in today's schedule section are like this:
4116 @example
4117 * Schedule
4119   9:00 | 12:00 | Read Simmel's Philosophy of Money
4120 @@12:45 |       | Do Something Else
4121 @@13:00 | 14:00 | lunch
4122 @end example
4124 @noindent
4125 You can even use both at the same time if you like.
4127 @c Jim Ottaway <j.ottaway@lse.ac.uk>: Changed these kinds of heading
4128 @c back to @unnumberedsec, but left the originals commented out in
4129 @c case there was a good reason for the @strong formatting.
4131 @c @noindent
4132 @c @strong{Usage}
4133 @unnumberedsubsubsec Usage
4135 In the file where you configure Planner, add one of the following.
4137 @itemize
4138 @item
4139 For task-based appointments: @code{(planner-appt-use-tasks)}
4140 @item
4141 For schedule-based appointments: @code{(planner-appt-use-schedule)}
4142 @item
4143 For both task- and schedule-based appointments:
4144 @code{(planner-appt-use-tasks-and-schedule)}
4145 @end itemize
4147 @noindent
4148 And finally if you want everything to be updated automatically add:
4150 @example
4151 (planner-appt-insinuate)
4152 @end example
4154 If you don't want to do the insinuation then you can call:
4156 @example
4157 M-x planner-appt-update
4158 @end example
4160 @noindent
4161 after editing appointments on the page (note that this is not
4162 necessary if you use tasks for the appointments and you don't edit
4163 the task descriptions outside of @code{planner-edit-task-description}).
4165 Try both methods; if you find that you prefer one over the
4166 other, use one of the specific @code{planner-appt-use-} functions, as
4167 there are some performance gains when using one method exclusively.
4169 @menu
4170 * Task-based Appointments::     
4171 * Schedule-based Appointments::  
4172 * Viewing Appointments::        
4173 * Appointment Updating on Save::  
4174 * Appointment and Calendar Integration::  
4175 * Appointment Hooks::           
4176 @end menu
4179 @node Task-based Appointments, Schedule-based Appointments, Appointments, Appointments
4180 @comment  node-name,  next,  previous,  up
4181 @subsubsection Task-based Appointments
4182 @cindex appointments, task-based
4183 @cindex task-based appointments
4185 A task has an appointment if it looks like this:
4187 @example
4188 #A   _ @@12:45 Do something (TaskPool)
4189 @end example
4191 @noindent
4192 i.e., if it has @@ followed by a time at the beginning.  This means
4193 the task is a regular appointment, and will not be carried forward
4194 at the start of a new day.
4196 Alternatively, it may have a !, like this:
4198 @example
4199 #A   _ !12:45 Do something else (TaskPool)
4200 @end example
4202 @noindent
4203 This makes it a "nagging" appointment, which @emph{will} be carried
4204 forward.  It will, however, lose the appointment time in the
4205 process.
4207 This may seem like a strange feature, but here is Henrik's
4208 reasoning:
4210 @quotation
4211 Sometimes I have a task that I want to do at a certain time, so I
4212 make it an appointment.  If I don't get around to doing it anyway,
4213 I want it to be carried forward.  Basically, I sometimes use
4214 appointments on tasks to annoy me until I get them done. :)
4215 @end quotation
4217 You can edit, move and delete tasks with the usual functions, and
4218 appointments will be updated automatically.
4220 You can update all task appointments on your page with
4222 @example
4223 M-x planner-appt-update
4224 @end example
4226 @c @noindent
4227 @c @strong{Cyclic Entries}
4229 @unnumberedsubsubsec Cyclic Entries
4230 @cindex appointments, cyclic task entries
4232 If you have @file{planner-cyclic} (@pxref{Cyclic Tasks}) loaded, entries
4233 in your cyclical tasks file such as
4235 @example
4236 Friday #A _ @@12:45 staff meeting
4237 @end example
4239 @noindent
4240 will appear every Friday and there will be an appointment alert set
4243 @c @noindent
4244 @c @strong{Appointments Section}
4245 @unnumberedsubsubsec Appointments Section
4246 @cindex appointments, appointments section
4248 You can have all task-based appointments copied to a separate section,
4249 providing an overview of your appointments.
4251 To do this, add
4253 @example
4254 (setq planner-appt-task-use-appointments-section-flag t)
4255 @end example
4257 @noindent to your configuration, or use @kbd{M-x customize-variable}.
4259 The variable @code{planner-appt-task-appointments-section} is the name
4260 of the section where the appointments will be copied.  By default, it is
4261 set to @code{"Schedule"}, which means that task appointments will be
4262 intermingled with schedule entries.
4264 It is also a good idea to add the section you wish to use to
4265 @code{planner-day-page-template} in order to control where that section
4266 will appear on the page (otherwise it will appear at the top).
4268 The format of the appointments follows that of a schedule; if you
4269 don't like the way it looks, you can write something different and set
4270 @code{planner-appt-format-appt-section-line-function} appropriately.
4271 See the documentation for
4272 @code{planner-appt-format-appt-section-line-function} for details.  It
4273 should be fairly easy to see what needs to be done if you look at the
4274 source for the default function (which is
4275 @code{planner-appt-format-appt-section-line}).
4277 If the section specified in
4278 @code{planner-appt-task-appointments-section} is the same as the
4279 schedule section specified in @code{planner-appt-schedule-section} (by
4280 default @code{"Schedule"}), the default formatting function adds a
4281 @samp{#} to the description so that one can visually distinguish
4282 appointments from the task list from those that have been added to the
4283 schedule.
4285 @node Schedule-based Appointments, Viewing Appointments, Task-based Appointments, Appointments
4286 @comment node-name,  next,  previous,  up
4287 @subsubsection Schedule-Based Appointments
4288 @cindex appointments, schedule-based
4289 @cindex schedule-based appointments
4291 Some scheduled tasks require reminders, others don't.  In this
4292 schedule:
4294 @example
4295 * Schedule
4297 9:00   | 12:00 | Read Simmel's Philosophy of Money
4298 @@12:45          Do Something Else
4299 @@13:00 | 14:00 | lunch
4300 @@14:30 |       | Meet jrs to discuss his dissertation
4301 @@16:00           Test Society seminar
4302 18:00            go home
4303 @end example
4305 @noindent
4306 those that have an @@ prefix will be added to the appointment
4307 reminder list; the others will not.  The formats that are
4308 recognized are fairly flexible, as you can see from the example.
4310 If you change your schedule, you can update the appointment list
4311 with
4313 @example
4314 M-x planner-appt-update
4315 @end example
4317 @noindent You can also have the schedule sorted as part of the update,
4318 if you have this in your configuration:
4320 @example
4321 (setq planner-appt-sort-schedule-on-update-flag t)
4322 @end example
4324 @c @noindent 
4325 @c @strong{Cyclical Entries}
4326 @unnumberedsubsubsec Cyclical Entries
4327 @cindex appointments, cyclic schedule entries
4329 You can also have cyclical schedule entries(@pxref{Cyclic Tasks}) if you
4332 @example
4333 (planner-appt-schedule-cyclic-insinuate)
4334 @end example
4336 @noindent to your configuration.
4338 If you put an entry in your cyclical task file like this
4340 @example
4341 Friday @@12:45 | 13:45 | Staff Meeting
4342 @end example
4344 @noindent
4345 then it will appear in your schedule every Friday, and an
4346 appointment alert will be set up.
4348 @node Viewing Appointments, Appointment Updating on Save, Schedule-based Appointments, Appointments
4349 @comment  node-name,  next,  previous,  up
4350 @subsubsection Viewing Appointments
4351 @cindex appointments, viewing
4353 The command @command{planner-appt-show-alerts} will show all appointment
4354 alerts currently scheduled.
4356 There are two commands that show appointments in the future; the one
4357 displays them in a pop-up buffer, the other puts the information into
4358 the current day page.
4360 @deffn {Command} planner-appt-forthcoming-display &optional days
4361 Display a buffer of appointments for today and the next
4362 @var{days}. Optional prefix argument @var{days} is the number of days
4363 ahead to look. Its default value is defined by
4364 @code{planner-appt-forthcoming-days}.
4365 @end deffn
4367 @deffn {Command} planner-appt-forthcoming-update-section &optional days
4368 In today's plan page, add or update a list of forthcoming
4369 appointments. Optional prefix argument @var{days} is the number of
4370 days ahead to look. Its default value is defined by
4371 @code{planner-appt-forthcoming-days}.  The section heading to use is
4372 defined by @code{planner-appt-forthcoming-appt-section}.
4373 @end deffn
4375 @defopt planner-appt-forthcoming-days
4376 The number of days to look ahead for forthcoming appointments.  The
4377 default value is seven days.
4378 @end defopt
4380 @defopt planner-appt-forthcoming-appt-section
4381 The name of the section to use for inserting a list of forthcoming
4382 appts.  The default value is @code{"Forthcoming Appointments"}.
4383 @end defopt
4385 @defopt planner-appt-forthcoming-show-day-names-flag
4386 When non-nil (the default), day names will be shown in forthcoming
4387 appointments.
4388 @end defopt
4390 @defopt planner-appt-forthcoming-repeat-date-string
4391 String to insert for repeated dates.
4393 When there are multiple appointments for a date, the date is inserted
4394 in the first appointment and the others have this string in their date
4395 cell.
4397 If the string consists of anything other than whitespace, then a link
4398 to the day page for the appoinment is created.
4399 @end defopt
4401 @defopt planner-appt-forthcoming-look-at-cyclic-flag
4402 When non-nil, find forthcoming appointments in the cyclic diary file
4403 (@pxref{Cyclic Tasks}) as well as in plan pages. Default is @samp{t}.
4404 @end defopt
4406 @node Appointment Updating on Save, Appointment and Calendar Integration, Viewing Appointments, Appointments
4407 @comment  node-name,  next,  previous,  up
4408 @subsubsection Appointment Updating on Save
4409 @cindex appointments, updating on save
4411 @defopt planner-appt-update-appts-on-save-flag
4412 When non-nil, update appointment reminders whenever today's plan page is
4413 saved. Default value is @samp{nil}.
4414 @end defopt
4416 @node Appointment and Calendar Integration, Appointment Hooks, Appointment Updating on Save, Appointments
4417 @comment  node-name,  next,  previous,  up
4418 @subsubsection Appointment and Calendar Integration
4420 Not strictly part of appointment handling, but if one isn't using
4421 the diary, marking dates with plan pages seems to make sense.
4423 @defun planner-appt-calendar-insinuate
4424 Add a hook to diary display so that dates in the calendar that have day
4425 pages are highlighted
4426 @end defun
4428 @node Appointment Hooks,  , Appointment and Calendar Integration, Appointments
4429 @comment  node-name,  next,  previous,  up
4430 @subsubsection Appointment Hooks
4432 @defvr {Hook} planner-appt-update-hook
4433 Hook run after @code{planner-appt-update} has updated the appointment
4434 list.
4435 @end defvr
4437 @node Timeclock, schedule.el, Appointments, Scheduling and Time
4438 @comment  node-name,  next,  previous,  up
4439 @subsection Timeclock
4440 @cindex @file{planner-timeclock.el}, using
4441 @cindex @file{planner-timeclock-summary.el}, using
4442 @cindex @file{planner-timeclock-summary-proj.el}, using
4443 @cindex timeclock, using Planner with
4445 This module allows you to clock in and clock out of your projects
4446 (@pxref{Time Intervals, , , Emacs, GNU Emacs Manual}). You can also
4447 generate reports with the @code{<timeclock-report>} tag. You may want
4448 to read the @ref{Keeping Track of Time} page to see how you can use
4449 planner-timeclock to produce detailed reports.
4451 With @file{planner-timeclock.el} loaded,
4452 @command{planner-task-in-progress} clocks in a task.  To clock out,
4453 use @command{planner-task-done} or @command{timeclock-out}.
4455 @file{planner-timeclock.el} defines the following keybindings:
4457 @itemize
4458 @item @kbd{C-c C-i}: @code{planner-task-in-progress}.
4459 @item @kbd{C-c C-o}: @code{timeclock-out}.
4460 @item @kbd{C-c C-T C-i}: @code{planner-timeclock-in}. (XEmacs)
4461 @item @kbd{C-c C-T C-o}: @code{timeclock-out}. (XEmacs)
4462 @item @kbd{C-c C-S-t C-i}: @code{planner-timeclock-in}. (GNU Emacs)
4463 @item @kbd{C-c C-S-t C-o}: @code{timeclock-out}. (GNU Emacs)
4464 @end itemize
4466 If you use @code{timeclock} a lot, you may also be interested in
4467 Dryice Liu's @file{planner-timeclock-summary.el}, which produces
4468 timeclock reports for planner files.
4470 Here is a sample report:
4472 @example
4473 Project               |     Time| Ratio| Task
4474 PlannerMaintenance    |  0:03:58|  1.1%| Merge doc patch
4475                       |  0:17:09|  5.0%| Track down subdirectories
4476                       |  0:18:11|  5.3%| Merge planner-timeclock-summary-proj.el
4477                Total: |  0:39:18| 11.4%|
4478 JapanCaseStudy        |  2:37:56| 45.6%| Prototype search result page
4479                       |  0:31:50|  9.2%| Update design documents
4480                Total: |  3:09:46| 54.8%|
4481 ChristmasLetter       |  1:46:37| 30.8%| Write and send my Christmas letters
4482                Total: |  1:46:37| 30.8%|
4483 LinuxPeople           |  0:10:29|  3.0%| Send questions for Linux in Education
4484                Total: |  0:10:29|  3.0%|
4485 @end example
4487 If you add @code{(require 'planner-timeclock-summary)} to your
4488 @file{~/.emacs}, you can then use it in two ways.
4490 @itemize
4492 @item Display a temporary buffer
4494 Call @code{planner-timeclock-summary-show} and Emacs will ask you which
4495 day's summary do you want. Choose the date as anywhere else of
4496 Emacs planner, and a tempory buffer will be displayed with the
4497 timeclock summary of that day.
4499 To review tasks over a date range, use
4500 @code{planner-timeclock-summary-show-range}. You can use a regexp or a
4501 function to filter tasks by calling
4502 @code{planner-timeclock-summary-show-range-filter}.
4504 @item Rewrite sections of your planner
4506 Choose this approach if you want timeclock summary to be in their
4507 own section and you would like them to be readable in your plain
4508 text files even outside Emacs. Caveat: The timeclock summary
4509 section should already exist in your template and will be rewritten
4510 when updated. Tip: Add @code{planner-timeclock-summary-section}
4511 (default: @samp{"Timeclock"}) to your @code{planner-day-page-template}.
4513 To use, call @code{planner-timeclock-summary-update} in the planner
4514 day page to update the section. If you want rewriting to be
4515 automatically performed, call
4516 @code{planner-timeclock-summary-insinuate} in your @file{.emacs} file.
4517 @end itemize
4519 @file{planner-timeclock-summary-proj.el} produces task / time
4520 breakdowns on plan pages. Reports are of the form:
4522 @example
4523 TASK 0 | duration
4524 TASK 1 | duration
4525  TOTAL | duration.
4526 @end example
4528 To use, add @code{(require 'planner-timeclock-summary)} to your
4529 @file{~/.emacs}. Call @code{planner-timeclock-summary-proj-current}
4530 from a project page. The report is inserted at the current position in
4531 the buffer. The function @code{planner-timeclock-summary-proj-section}
4532 does the same but the report is inserted inside a section called
4533 @samp{* Report}.
4535 @node schedule.el,  , Timeclock, Scheduling and Time
4536 @comment  node-name,  next,  previous,  up
4537 @subsection @file{schedule.el}
4538 @cindex @file{planner-schedule.el}, using
4539 @cindex @file{schedule.el}, using Planner with
4541 @file{planner-schedule.el} allows you to project task completion time.
4542 Tasks should be of the form:
4544 @example
4545 #A0 _ 2h Do something
4546 #B0 _ 1h30m Do something
4547 #B0 _ 2d Do something
4548 #B0 _ 2w Do something
4549 #B0 _ 10s Do something
4551 s: seconds, m: minutes, h: hours, d: days, w: weeks
4552 @end example
4554 You can get @file{schedule.el} from
4555 @url{http:// www.newartisans.com/ johnw/ Emacs/ schedule.el}
4557 @file{planner-schedule.el} defines the following interactive
4558 functions:
4560 @defun planner-schedule-show-end-project
4561 Display the estimated project completion time.
4562 @end defun
4564 @file{planner-schedule.el} defines the following keybindings:
4566 @kbd{C-c RET} is bound to @command{planner-schedule-show-end-project}.
4567 @kbd{C-c C-m} is also bound to
4568 @command{planner-schedule-show-end-project}.
4570 In XEmacs, @command{planner-schedule-show-end-project} is bound to
4571 @kbd{C-c C-T c-e} and @kbd{C-c C-S-t C-e}.
4573 @file{schedule.el} provides a single Lisp function,
4574 @code{schedule-completion-time}. It takes an Emacs time object and a
4575 quantity of seconds. It returns an Emacs time object that represents
4576 when the given number of seconds will be completed, assuming that work
4577 can only be done during work hours.
4579 The available work hours are affected by several factors:
4581 @enumerate
4583 @item
4584 If @file{timeclock.el} is being used, the amount of time left in the
4585 current work day (@code{timeclock-workday-remaining})
4586 (@pxref{Time Intervals, , , Emacs, GNU Emacs Manual})
4588 @item
4589 The amount of time in each work day (@code{schedule-workday})
4591 @item
4592 The definition of a work week (@code{schedule-week})
4594 @item
4595 Any holidays defined in the Emacs calendar
4596 (@pxref{Holidays, , , Emacs, GNU Emacs Manual})
4598 @item
4599 Any appointments in the Emacs diary
4600 (@pxref{Appointments, , , Emacs, GNU Emacs Manual})
4602 @end enumerate
4604 Taking all of the ``block out'' periods into account,
4605 @code{schedule-completion-time} will compute when the given number of
4606 seconds will be done, based on your current definitions of time
4607 available.
4609 As an example, here's a function which, given a list of durations
4610 in seconds, will return a list of completion times starting from
4611 the current moment:
4613 @example
4615   (defun compute-completion-times (&rest durations)
4616     ``Compute completion times for a list of DURATIONS (in seconds).''
4617     (let ((now (current-time)))
4618       (mapcar
4619        (function
4620         (lambda (dura)
4621           (setq now (schedule-completion-time now dura))))
4622        durations)))
4624 @end example
4626 To call this function, do:
4628 @example
4630 (compute-completion-times 3600 7200 3600)
4632 @end example
4634 @file{schedule.el} does not define any interactive functions, or
4635 keybindings.
4637 @node Finances, Contacts and Conversations, Scheduling and Time, Managing Your Information
4638 @comment  node-name,  next,  previous,  up
4639 @section Finances
4640 @cindex finances
4642 Currently, Planner provides one module dedicated to tracking your
4643 finances. This module works with a program called Ledger.
4645 @menu
4646 * Ledger::                      Personal finances: planner-ledger.el
4647 @end menu
4649 @node Ledger,  , Finances, Finances
4650 @comment  node-name,  next,  previous,  up
4651 @subsection Ledger
4652 @cindex finances
4653 @cindex @file{planner-ledger.el}, using
4654 @cindex @file{ledger}, using Planner with
4656 @file{planner-ledger.el} provides integration between planner and John
4657 Wiegley's ledger accounting program, which can be found at
4658 @url{http://newartisans.com/johnw/ledger.tar.gz}.
4660 To use planner-ledger to insert a ledger balance overview and a list
4661 of pending transactions into planner day pages, make sure that your
4662 day page includes sections that match
4663 @code{planner-ledger-balance-regexp} and
4664 @code{planner-ledger-pending-regexp}. Example:
4666 @example
4667 * Tasks
4669 * Ledger
4671 ** Pending transactions
4673 * Notes
4675 @end example
4677 You can manually update ledger sections with the following command:
4679 @defun planner-ledger-insert-maybe
4680 Update any ledger sections on the current page.
4681 @end defun
4683 You can also automatically update ledger sections with the following
4684 hook:
4686 @example
4687 (add-hook 'planner-goto-hook 'planner-ledger-insert-maybe)
4688 @end example
4690 You can create ledger entries from specially-formatted tasks using
4691 @command{planner-ledger-add-entry-from-task}.  Tasks should be of the
4692 form @samp{payment due: payee, amount [comment]}.  Example:
4694 @example
4695 #A1 _ payment due: foobar, $1000.00 some comment here
4696 #A2 _ payment due: baz, 1000.00
4697 @end example
4699 @defun planner-ledger-add-entry-from-task
4700 Create a ledger entry based on the task at point.  Task should match
4701 @code{planner-ledger-payment-task-regexp}.
4702 @end defun
4704 @defopt planner-ledger-balance-accounts
4705 List of accounts to be included or excluded from the balance overview.
4706 @samp{+} includes all matching accounts, and @samp{-} excludes
4707 matching accounts.  See the documentation for
4708 @command{ledger-run-ledger} for more details.
4709 @end defopt
4711 @defopt planner-ledger-balance-regexp
4712 Regular expression matching section for ledger balance.  Do not store
4713 other data in this section, as it will be overwritten.
4714 @end defopt
4716 @defopt planner-ledger-pending-regexp
4717 Regular expression matching section for ledger balance.  Do not store
4718 other data in this section, as it will be overwritten.
4719 @end defopt
4721 @defopt planner-ledger-payment-task-regexp
4722 Regular expression matching special ledger tasks.
4723 @end defopt
4725 @node Contacts and Conversations, Tracking Research and Resources, Finances, Managing Your Information
4726 @comment  node-name,  next,  previous,  up
4727 @section Contacts and Conversations
4728 @cindex contacts
4729 @cindex conversations
4731 Planner has two modules available for keeping track of contact and
4732 conversation information. The first uses the Big Brother Database
4733 (BBDB), and the second uses Emacs Relay Chat (ERC). BBDB is a full
4734 contact database. ERC is a client for chatting online on Internet Relay
4735 Chat (IRC) networks. The ERC module for Planner will help you keep
4736 track of online conversations you have if you use ERC for those
4737 conversations, but does not by itself store contact information other
4738 than the time you had the conversation, the network and channel you were
4739 on when you had it, and maybe who you had it with. If you are looking
4740 for a way to manage your full address book, then @file{planner-bbdb.el}
4741 in combination with BBDB is what you are looking for.
4743 @menu
4744 * BBDB::                        Contacts: planner-bbdb.el
4745 * Emacs Relay Chat::            Internet Relay Chat: planner-erc.el
4746 @end menu
4748 @node BBDB, Emacs Relay Chat, Contacts and Conversations, Contacts and Conversations
4749 @comment  node-name,  next,  previous,  up
4750 @subsection BBDB
4751 @cindex @file{planner-bbdb.el}, using
4752 @cindex BBDB, using Planner with
4754 @file{planner-bbdb.el} allows you to refer to your contacts easily
4755 from within a planner page. @inforef{Top, the BBDB Manual, bbdb}.
4757 @samp{[[bbdb://Sacha.*Chua][Sacha]]}, for example, will be linked to
4758 the blog, web or net fields of the first matching BBDB record.
4760 @file{planner-bbdb.el} does not define any interactive functions, or
4761 keybindings.
4763 @node Emacs Relay Chat,  , BBDB, Contacts and Conversations
4764 @comment  node-name,  next,  previous,  up
4765 @subsection Emacs Relay Chat
4766 @cindex @file{planner-erc.el}, using
4767 @cindex ERC, using Planner with
4768 @cindex Emacs Relay Chat, using Planner with
4769 @cindex IRC, using Planner with
4770 @cindex Internet Relay Chat, using Planner with
4772 To use planner-erc, place @file{planner-erc.el} in your load path
4773 and add this to your @file{.emacs} (or @file{_emacs}):
4775 @example
4777 (require 'planner-erc)
4779 @end example
4781 ERC URLs are of the form, @samp{irc://server/nick/#channel},
4782 @samp{irc://server/nick} or @samp{irc://server/nick}.
4784 Annotations will be of the form:
4786 @example
4788 [[irc://server/nick/#channel][Chat with nick on server#channel]]
4789 [[irc://server/nick][Chat with nick on server]]
4790 [[irc://server][Chat on server]]
4792 @end example
4794 @file{planner-erc.el} does not define any interactive functions, or
4795 keybindings.
4797 @node Tracking Research and Resources, Tracking Development, Contacts and Conversations, Managing Your Information
4798 @comment  node-name,  next,  previous,  up
4799 @section Tracking Research and Resources
4801 Planner provides three modules for keeping track of information
4802 involving three specific tools: w3m, BibTeX, and @file{bookmark.el}.
4804 @menu
4805 * W3m::                         Web browser: planner-w3m.el
4806 * BibTeX::                      Bibliographies: planner-bibtex.el
4807 * Bookmark::                    Bookmarks: planner-bookmark.el
4808 @end menu
4810 @node W3m, BibTeX, Tracking Research and Resources, Tracking Research and Resources
4811 @comment node-name,  next,  previous,  up
4812 @subsection W3m
4813 @cindex @file{planner-w3m.el}, using
4814 @cindex w3m, using Planner with
4816 This module allows you to create tasks from a w3m buffer.
4818 @file{planner-w3m.el} does not define any interactive functions, or
4819 keybindings.
4821 @node BibTeX, Bookmark, W3m, Tracking Research and Resources
4822 @comment node-name,  next,  previous,  up
4823 @subsection BibTeX
4824 @cindex @file{planner-bibtex.el}, using
4826 BibTeX URLs are of the form @samp{bibtex:file/name:key}.
4828 @file{planner-bibtex.el} does not define any interactive functions.
4830 @node Bookmark,  , BibTeX, Tracking Research and Resources
4831 @comment  node-name,  next,  previous,  up
4832 @subsection Bookmark
4833 @cindex bookmarks
4834 @cindex @file{bookmark.el}, using Planner with
4835 @cindex @file{planner-bookmark.el}, using
4837 @file{planner-bookmark.el} uses the @file{remember} package to create a
4838 note whenever you create a bookmark (see @inforef{Bookmarks, Bookmarks,
4839 Emacs}). For more information about @file{remember}, please check out
4841 @itemize
4842 @item
4843 @uref{http://www.emacswiki.org/cgi-bin/wiki/RememberMode} -
4844 EmacsWiki.org page
4845 @item
4846 @uref{http://sacha.free.net.ph/notebook/doc/dev/remember/remember.html}
4847 - Online info documentation
4848 @end itemize
4850 Configure remember according to the instructions in
4851 @file{remember-planner.el} so that notes are saved to your planner
4852 pages.
4854 @defopt planner-bookmark-take-note-after-set-bookmark-flag
4855 Non-nil means show a @code{remember} buffer after setting a new
4856 bookmark.
4857 @end defopt
4859 When you create a bookmark, Emacs will open a buffer for your notes.
4860 @kbd{C-c C-c} saves the buffer to today's page. If you don't want to
4861 save a note, you can kill the buffer.
4863 Bookmark URLs are of the form @samp{bookmark://bookmark-name}.
4865 @file{planner-bookmark.el} does not define any interactive functions.
4867 @node Tracking Development,  , Tracking Research and Resources, Managing Your Information
4868 @comment  node-name,  next,  previous,  up
4869 @section Tracking Development
4870 @cindex version control, using Planner with
4872 Planner has three modules geared toward programmers. Two modules deal
4873 with version control and integrating information from those projects
4874 into the planner page. One module deals with the Gnats bug-tracking
4875 system.
4877 @menu
4878 * Log Edit::                    Changelogs: planner-log-edit.el
4879 * XTLA::                        TLA changesets: planner-xtla.el
4880 * Gnats::                       Gnats: The GNU bug reporting system
4881 @end menu
4883 @node Log Edit, XTLA, Tracking Development, Tracking Development
4884 @comment  node-name,  next,  previous,  up
4885 @subsection Log Edit
4886 @cindex cvs, using Planner with
4887 @cindex @file{planner-log-edit}, using
4888 @cindex version control, using Planner with
4890 This module allows you to automatically record CVS (and VC) commits
4891 in today's page.
4893 You can load the module with @code{(require 'planner-log-edit)}. When
4894 you load the module, @code{planner-log-edit-add-note} will be added to
4895 @code{log-edit-done-hook}.  A note containing the text of the commit
4896 and optionally a list of modified files will be added to today's page
4897 if you use the the Emacs version control interface. (@pxref{Version
4898 Control, , , Emacs, GNU Emacs Manual})
4900 @defopt planner-log-edit-include-files-flag
4901 Non-nil means include a list of committed files in the note.
4902 @end defopt
4904 @defopt planner-log-edit-notice-commit-function
4905 Non-nil means include a list of committed files in the note. If you
4906 want to enable this feature for some projects but not for others, set
4907 this to a function that returns t only for the commits you want to
4908 note.
4909 @end defopt
4911 @file{planner-log-edit.el} does not define any interactive functions.
4913 @node XTLA, Gnats, Log Edit, Tracking Development
4914 @comment  node-name,  next,  previous,  up
4915 @subsection XTLA
4916 @cindex XTLA
4917 @cindex @file{planner-xtla.el}, using
4919 This module allows you to refer to changesets in Tom Lord's Arch (tla)
4920 version control system. You can load the module with @code{(require
4921 'planner-xtla)}. When you load the module, you can create tasks from
4922 XTLA windows by positioning point on a revision.
4924 XTLA URLs are of the form
4925 @samp{xtla://miles@@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-19}
4927 @file{planner-xtla.el} does not define any interactive functions.
4929 @node Gnats,  , XTLA, Tracking Development
4930 @comment  node-name,  next,  previous,  up
4931 @subsection Gnats
4933 @cindex Gnats
4934 @cindex @file{planner-gnats.el}, using
4935 @cindex bug reports, tracking
4937 @file{planner-gnats.el} provides support for the GNU problem report
4938 management system Gnats. This module allows you to refer to problem
4939 reports using hyperlinks.
4941 Configure your Emacs for Gnats access, then add @samp{(require
4942 'planner-gnats)} to your @file{.emacs}. You can then create tasks from
4943 Gnats edit or view buffers.
4945 To add keybindings to Gnats, use @samp{(planner-gnats-insinuate)}.
4947 Gnats URLs are of the form @samp{gnats:pr-number}.
4949 @file{planner-gnats.el} does not define any interactive functions.
4951 @node Advanced Configuration, Reference Material, Managing Your Information, Top
4952 @comment  node-name,  next,  previous,  up
4953 @chapter Advanced Configuration
4954 @cindex configuration, advanced
4956 @menu
4957 * Customizing Your Day Pages::  Change your templates
4958 * Variables to Customize::      Change various aspects of Planner behavior
4959 * Ideas for Other Keybindings::  Add to and change the default keybindings
4960 @end menu
4962 @node Customizing Your Day Pages, Variables to Customize, Advanced Configuration, Advanced Configuration
4963 @comment  node-name,  next,  previous,  up
4964 @section Customizing Your Day Pages
4966 With the variable @code{planner-day-page-template}, you can define how
4967 you want any newly created day planner pages to look.
4969 You might want to include a section for your diary entries. For how to
4970 do this, see @ref{Diary}.
4972 You can add interactive Lisp buttons with the @file{planner-lisp.el}
4973 module. (@pxref{Interactive Lisp})
4975 Your @code{planner-day-page-template} can also include @samp{|<lisp>|}
4976 tags.
4978 For more complex day pages, you can set
4979 @code{planner-day-page-template} to a function that will be called
4980 from an empty day page buffer. The function should initialize the
4981 contents of the day page.
4983 @node Variables to Customize, Ideas for Other Keybindings, Customizing Your Day Pages, Advanced Configuration
4984 @comment  node-name,  next,  previous,  up
4985 @section Variables to Customize
4986 @cindex customize, variables to
4987 @cindex variables, customization of
4988 @cindex configuration, advanced, variables
4990 If you want to change @code{planner-directory} and some other
4991 variables, either use Customize (@kbd{M-x customize-group RET planner
4992 RET}) or use @code{setq}.  An example of the latter follows.
4994 @example
4995 (setq planner-directory "~/Plans")
4996 @end example
4998 Other user options are:
5000 @vindex planner-use-day-pages
5001 @defopt planner-use-day-pages
5002 If you really don't like day pages, you can set this variable to nil
5003 and you won't be prompted for dates for tasks (and notes, if using
5004 @file{remember-planner}).
5005 @end defopt
5007 @vindex planner-use-plan-pages
5008 @defopt planner-use-plan-pages
5009 If you really don't like plan pages, you can set this variable to nil
5010 and you won't be prompted for plan pages for tasks (and notes, if
5011 using @file{remember-planner}).
5012 @end defopt
5014 @vindex planner-mode-hook
5015 @defopt planner-mode-hook
5016 List of functions to run after @code{planner-mode} is initialized.
5017 @end defopt
5019 @vindex planner-tasks-file-behavior
5020 @defopt planner-tasks-file-behavior
5021 This variable controls what happens to files Planner opens by itself.
5022 If your tasks are associated with plan pages, the plan pages are
5023 updated whenever a task is rescheduled.  This could lead to a lot of
5024 open buffers as Planner applies updates to all linked files.
5025 By default, Planner is configured to do nothing.
5026 A value of @samp{save} means save but do not close buffers, and a
5027 value of @samp{nil} means do not save any of the buffers.
5028 @end defopt
5030 @vindex planner-add-task-at-end-flag
5031 @defopt planner-add-task-at-end-flag
5032 This variable controls where new tasks are created.  Non-nil means
5033 create tasks at the bottom of the first task block.  If you set this
5034 to non-nil, new tasks will be listed in order of creation (oldest).
5035 Tasks carried over from previous days will appear at the bottom of the
5036 list.
5038 Nil means create tasks at the top of the first task block.
5039 Carried-over tasks and newly created tasks are prominently placed on
5040 top of the list of tasks for the day.
5041 @end defopt
5043 @vindex planner-default-page
5044 @defopt planner-default-page
5045 Default page for created tasks.  This is used as the initial value for
5046 tasks.  After you create a task, it will be set to the previous page
5047 used.
5048 @end defopt
5050 @vindex planner-hide-task-status-when-highlighting
5051 @defopt planner-hide-task-status-when-highlighting
5052 Font-locking for tasks may be enough for you to determine status and
5053 priority.  Set this to non-nil if you want to hide the status marker
5054 and rely on font-locking instead.
5055 @end defopt
5057 @vindex planner-create-task-hook
5058 @defopt planner-create-task-hook
5059 Functions run after creating a task. @code{planner-id} hooks into
5060 this.
5061 @end defopt
5063 @vindex planner-expand-name-favor-future-p
5064 @defopt planner-expand-name-favor-future-p
5065 If non-nil, partial dates (ex: @kbd{2} or @kbd{5.2}) are completed to
5066 dates in the future instead of using the current year and month.
5067 @end defopt
5069 @vindex planner-task-dates-favor-future-p
5070 @defopt planner-task-dates-favor-future-p
5071 Like @code{planner-expand-name-favor-future-p}, but only for tasks.
5072 @end defopt
5074 @vindex planner-publish-dates-first-p
5075 @defopt planner-publish-dates-first-p
5076 Non-nil means list day pages first in the planner index.
5077 @end defopt
5079 @node Ideas for Other Keybindings,  , Variables to Customize, Advanced Configuration
5080 @comment  node-name,  next,  previous,  up
5081 @section Ideas for Other Keybindings
5082 @cindex keybindings, customization of
5083 @cindex configuration, advanced, keybindings
5084 @cindex customize, keybindings to
5086 By default and for backward compatibility, the following operations
5087 do not have keybindings, and are only accessible from the Planner
5088 menu:
5090 @itemize @bullet
5092 @item
5093 @code{planner-copy-or-move-region}
5095 @item
5096 @code{planner-delete-task}
5098 @item
5099 @code{planner-task-delegated}
5101 @item
5102 @code{planner-task-pending}
5104 @item
5105 @code{planner-task-open}
5107 @item
5108 @code{planner-renumber-tasks}
5110 @end itemize
5112 You may find it easier to install keybindings for those operations by
5113 inserting the following in your @file{.emacs} (or @file{_emacs}).
5114 Note: This changes some of the default keybindings for Planner.
5116 @example
5117 (planner-install-extra-task-keybindings)
5118 @end example
5120 If you install the extra task keybindings, your keybindings will
5121 include:
5123 @itemize @bullet
5125 @item
5126 @kbd{C-c C-t} will be unbound from the default and will serve as the
5127 prefix for the other task keybindings.
5129 @item
5130 @kbd{C-c C-t C-t}: @code{planner-create-task-from-buffer}.
5132 @item
5133 @kbd{C-c C-t C-k}: @code{planner-delete-task}.
5135 @item
5136 @kbd{C-c C-t C-u}: @code{planner-update-task}.
5138 @item
5139 @kbd{C-c C-t C-c}: @code{planner-copy-or-move-task}.
5141 @item
5142 @kbd{C-c C-t C-S-c}: @code{planner-copy-or-move-region}.
5144 @item
5145 @kbd{C-c C-t C-x}: @code{planner-task-done}.
5147 @item
5148 @kbd{C-c C-t C-S-x}: @code{planner-task-cancelled}.
5150 @item
5151 @kbd{C-c C-t C-d}: @code{planner-task-delegated}.
5153 @item
5154 @kbd{C-c C-t C-p}: @code{planner-task-pending}.
5156 @item
5157 @kbd{C-c C-t C-o}: @code{planner-task-in-progress}.
5159 @item
5160 @kbd{C-c C-t C-r}: @code{planner-raise-task}.
5162 @item
5163 @kbd{C-c C-t C-l}: @code{planner-lower-task}.
5165 @item
5166 @kbd{C-c C-t C-n}: @code{planner-renumber-tasks}.
5168 @end itemize
5170 Other keybindings can be configured by adding this to your
5171 @file{.emacs} (or @file{_emacs}):
5173 @example
5174 (planner-install-extra-context-keybindings)
5175 @end example
5177 This will set up the following keybindings:
5179 @itemize @bullet
5181 @item
5182 @kbd{shift up} @code{planner-move-up}
5184 @item
5185 @kbd{shift down} @code{planner-move-down}
5187 @item
5188 @kbd{shift right} @code{planner-jump-to-link}
5190 @end itemize
5192 @node Reference Material, Getting Help, Advanced Configuration, Top
5193 @comment  node-name,  next,  previous,  up
5194 @chapter Reference Material
5196 @menu
5197 * Keeping Track of Time::       
5198 * Other Interactive Functions::  
5199 * Planner Keybindings::         Default keybindings for Planner
5200 * Sample Configuration Files::  
5201 @end menu
5203 @node Keeping Track of Time, Other Interactive Functions, Reference Material, Reference Material
5204 @section Keeping Track of Time
5206 One of the coolest things you can do with Planner is keep track of how
5207 much time you spend not only on projects but even on particular tasks.
5208 @file{planner-timeclock.el} makes it as easy and natural as marking a
5209 task as in progress, postponed, or done. This can help you determine
5210 just how much time you spend working each day. If you add estimates to
5211 your task descriptions, you'll also be able to use this information to
5212 improve your time estimation skills.
5214 Here's how you can keep track of the time you
5217 Then the fun began. I wanted to see if I could match my estimates.
5218 Before I started working on a task, I used @kbd{C-c TAB} to mark it
5219 @code{in progress} and start the clock. If I decided to work on
5220 something else, I used @kbd{C-c TAB} to clock out of the previous task
5221 and clock into the new one.
5223 When I finished it, I used @kbd{C-c C-x} (@code{planner-task-done}) to
5224 mark it completed and automatically clock out. This is not yet done
5225 for cancelled tasks, so I clocked out of those manually with @kbd{C-c
5226 C-o} (@code{timeclock-out}). I also clocked out whenever I caught
5227 myself being distracted so that the totals wouldn't include the time I
5228 spent chatting on #emacs or checking out del.icio.us links. =) At the
5229 end of the day, I used
5230 @code{planner-timeclock-summary-show-range-filter} to show me the time
5231 elapsed for all of the tasks I'd worked on over the past two days.
5232 Here's the report for that project, edited to reflect how it looks on
5233 my screen and annotated with comments:
5235 @example
5236 Timeclock summary report for 2004.12.28 - 2004.12.29
5238 Project     |     Time| Ratio| Task
5239 JapanProject|  0:23:17|  3.6%| Translate javadoc comment for Messages.java
5240             |  0:33:48|  5.3%| Translate javadoc comment for LoginAction.java
5241             |  1:54:07| 17.8%| Study Struts in Japanese
5242             |  0:46:08|  7.2%| Add javadoc tags for input, output and forwards
5243             |  1:03:48|  9.9%| Help review code
5244             |  0:04:14|  0.7%| Import todo list
5245             |  0:00:37|  0.1%| 2min       Fix Menu Action's unnecessary code - delegated
5246             |  0:01:01|  0.2%| 2min       Remove unnecessary list in UserRemoveSetupAction - cancelled
5247             |  0:02:10|  0.3%| 2min       Remove hard-coded database path from MenuAction
5248             |  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. ...
5249             |  0:07:32|  1.2%| 5min       Add a method that returns the validity of a user in MUserPeer.
5250             |  0:08:28|  1.3%| 5min       Fix indentation
5251             |  0:03:52|  0.6%| 10min      Fix UserPeer so that it doesn't get null pointer exceptions
5252             |  0:04:34|  0.7%| 5min       Add current password field in user_modify page
5253             |  0:21:56|  3.4%| 15min      Make a super class for our service classes that will receive the database connection. (cancelled)
5254             |  0:06:05|  0.9%| 10min      Remove hard-coded constants from the Logic classes
5255             |  0:10:55|  1.7%| 10min      Move logic from UserBean.checkPassword to UserListLogic
5256             |  0:01:20|  0.2%| 20min      Guard against null pointer exceptions in peer classes
5257             |  0:04:57|  0.8%| 10min      Instead of displaying uneditable data with bean:write, just disable the html:text element
5258             |  0:25:03|  3.9%| 10min      Deploy 10:00 version
5259             |  0:04:46|  0.7%| 5min       Separate the configuration file of database and system into another uninternationalized property file.
5260             |  2:09:48| 20.2%| 1h         Decide on a naming convention for localized messages and update files
5261             |  0:00:07|  0.0%| 20min      Explain what is happening in UserModifyAction's nested ifs - pending
5262             |  1:50:23| 17.2%| 2h         Write Javadoc comments in English and Japanese to explain bean structure
5263             |  0:04:19|  0.7%| 2h         Write Javadoc comments in English and Japanese to explain peer operations (pending)
5264             |  0:05:40|  0.9%| 20min      Make a factory class for the database - pending
5265      Total: | 10:41:41|100.0%|      
5267 Day began: 13:03:58, Day ended: 20:51:46
5268 Time elapsed: 31:47:48, Time clocked: 10:41:41
5269 Time clocked ratio: 33.6%
5270 @end example
5272 The time record isn't perfect. I cancelled some tasks after thinking
5273 about them a little and did some tasks simultaneously. Sometimes I
5274 didn't notice that I was getting distracted, too. Still, having all of
5275 that time information neatly summarized made me realize a number of
5276 things.
5278 First, I goof off much less when I have a nice, broken-down task list
5279 in front of me. There's just something about knowing there's a five-
5280 or ten-minute hack you can get out of the way. I found myself looking
5281 forward to getting to the next task just to see if I could make my
5282 estimate. That said, seeing a five-minute task stretch and stretch due
5283 to unforeseen problems did make me a little nervous. I should probably
5284 just make generous estimates so that I don't end up with bugs because
5285 of haste.
5287 Second, I don't goof off as much as I thought I did, although there's
5288 still room for improvement. Yesterday's workday was 9:00 - 12:00, 1:00
5289 - 5:30--7.5 hours. Today was the last day of work, so cleaning and
5290 celebration interrupted my hacking at around 3:00--5 hours of work.
5291 According to my task list, 10:41/12:30 was productive work. Hmm. 1:49
5292 hours unclocked time when I was thinking or goofing off.
5293 planner-timeclock-summary-show for today reveals that I actually
5294 clocked 5:30 today, which means the goofing off happened yesterday.
5295 That makes sense; I remember a pretty long unclocked segment
5296 recuperating from Japanese overload. (This was before we came up with
5297 the task list.)
5299 Third, keeping track of time is way, way cool even if you don't bill
5300 anyone for your time.
5302 Like the idea? It's easy to try out. Just add
5304 @example
5305 (require 'planner-timeclock)
5306 (require 'planner-timeclock-summary)
5307 @end example
5309 to your ~/.emacs. If you want to try it out now, eval those statements
5310 in your Emacs session. After that, simply use @kbd{C-c TAB} to ``clock
5311 in'' a task before you start working on it and @kbd{C-c C-x}
5312 (@code{planner-task-done}) to mark it completed. @kbd{M-x
5313 planner-task-pending} also clocks out the current task if it was
5314 clocked in. To see a summary of how you spent your day, check out the
5315 different functions in @file{planner-timeclock-summary}.
5317 See @ref{Timeclock} for more details.
5319 Happy hacking!
5321 @node Other Interactive Functions, Planner Keybindings, Keeping Track of Time, Reference Material
5322 @comment  node-name,  next,  previous,  up
5323 @section Other Interactive Functions
5325 With @file{planner.el} loaded, you can use any of the functions in this
5326 section by typing @kbd{M-x} followed by the name of the function. Many
5327 of these functions are also bound to keys.
5329 For a list of Planner keybindings, see @ref{Planner Keybindings}.
5331 They are listed in no particular order.
5333 @file{planner.el} defines the following interactive functions:
5336 @defun planner-create-high-priority-task-from-buffer
5337 Create a high priority task based on this buffer.  Do not use this in
5338 LISP programs. Instead, set the value of
5339 @var{planner-default-task-priority} and call @code{planner-create-task}
5340 or @code{planner-create-task-from-buffer}.
5341 @end defun
5343 @defun defun planner-create-medium-priority-task-from-buffer
5344 Create a medium-priority task based on this buffer.  Do not use this in
5345 LISP programs. Instead, set the value of
5346 @var{planner-default-task-priority} and call @code{planner-create-task}
5347 or @code{planner-create-task-from-buffer}.
5348 @end defun
5350 @defun planner-create-low-priority-task-from-buffer
5351 Create a high-priority task based on this buffer.
5352 Do not use this in LISP programs. Instead, set the value of
5353 @var{planner-default-task-priority} and call @code{planner-create-task} or
5354 @code{planner-create-task-from-buffer}.
5355 @end defun
5357 @defun planner-install-extra-context-keybindings
5358 Install extra context-sensitive keybindings. These keybindings
5359 conflict with @file{windmove.el}, but might be useful.
5360 @end defun
5362 @defun planner-narrow-to-section section &optional create
5363 Widen to the whole page and narrow to the section labelled
5364 @var{section}.  If @var{create} is non-nil and the section is not found,
5365 the section is created.  Return non-nil if @var{section} was found or
5366 created.
5367 @end defun
5369 @defun planner-save-buffers
5370 Save all planner-mode buffers.
5371 @end defun
5373 @defun planner-seek-to-first section
5374 Positions the point at the specified @var{section}, or @samp{Tasks} if
5375 not specified.
5376 @end defun
5378 @defun planner-save-buffers
5379 Save all planner buffers.
5380 @end defun
5382 @defun planner-calendar-insinuate
5383 This hooks Planner into  Emacs Calendar (@pxref{Calendar/Diary, ,
5384 , Emacs, GNU Emacs Manual}).
5386 It adds special planner key bindings to @code{calendar-mode-map}.
5387 After this function is evaluated, you can use the following
5388 planner-related keybindings in @code{calendar-mode-map}:
5390 @table @kbd
5392 @item  n
5393 Jump to the planner page for the current day.
5395 @item  N
5396 Display the planner page for the current day.
5397 @end table
5399 @end defun
5401 @defun planner-kill-calendar-files
5402 Remove planner files shown from Calendar (@pxref{Calendar/Diary, , ,
5403 Emacs, GNU Emacs Manual}).
5405 @end defun
5407 @defun planner-calendar-goto
5408 Goto the plan page corresponding to the calendar date
5409 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
5410 @end defun
5412 @defun planner-calendar-show
5413 Show the plan page for the calendar date under point in another window
5414 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
5415 @end defun
5417 @defun planner-calendar-select
5418 Return to @code{planner-read-date} with the date currently selected
5419 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
5420 @end defun
5422 @defun planner-jump-to-link
5423 Jump to the item linked to by the current item.
5424 @end defun
5426 @defun planner-move-up
5427 Move a task up. You can use this to indicate that you will do a task
5428 before another one. On a note, go to the previous note. On a headline,
5429 go to the previous headline of the same depth.
5430 @end defun
5432 @defun planner-move-down 
5433 Move down. You can use this to indicate that you will do a task after
5434 another one. On a note, go to the next note. On a headline, go to the
5435 next headline of the same depth.
5436 @end defun
5438 @node Planner Keybindings, Sample Configuration Files, Other Interactive Functions, Reference Material
5439 @comment  node-name,  next,  previous,  up
5440 @section Planner Keybindings
5441 @cindex keybindings, list
5443 In order to refresh and renumber all of your tasks according to their
5444 actual order in the buffer, simply save the file or call
5445 @kbd{M-x planner-renumber-tasks}.
5447 Here is a summary of the keystrokes available:
5449 @table @kbd
5451 @item M-x plan
5452 Begin your planning session.  This goes to the last day for which
5453 there is any planning info (or today if none), allowing you to review,
5454 and create/move tasks from that day.
5456 @item C-c C-u
5457 Move a task up.
5459 @item C-c C-d
5460 Move a task down.
5462 @item C-c C-s
5463 Mark the task as in progress or delegated.
5465 @item C-c C-x
5466 Mark the task as finished.
5468 @item C-c C-t
5469 Create a task associated with the current Wiki page. If you are on the
5470 opening line of a Note entry, it is assumed that the note itself is the
5471 origin of the task.
5473 @item C-c C-c
5474 Move or copy the current task to another date. If the current task is
5475 an original (meaning you are in the buffer where's defined, hopefully
5476 a planning page) then it will be copied, and the original task will
5477 also now point to the copy.  If the current task is a copy, it will
5478 just be moved to the new day, and the original task's link will be
5479 updated.
5481 @item C-c C-n
5482 Jump to today's task page.  If you call
5483 @code{(planner-calendar-insinuate)}, typing @kbd{n} in the Emacs
5484 calendar (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}) will jump
5485 to today's task page.
5487 @item C-c C-x
5488 @code{planner-task-done}
5490 @item C-c C-z
5491 @code{planner-task-in-progress}
5493 @item C-c C-d
5494 @code{planner-lower-task}
5496 @item C-c C-u
5497 @code{planner-raise-task}
5499 @item C-c C-c
5500 @code{planner-copy-or-move-task}
5502 @item C-c C-t
5503 @code{planner-create-task-from-buffer}
5505 @item C-c C-j
5506 This is a prefix command.
5508 @item C-c C-n
5509 @code{planner-goto-today}
5511 @item C-c C-j C-r
5512 @code{planner-goto-most-recent}
5514 @item C-c C-j C-t
5515 @code{planner-goto-tomorrow}
5517 @item C-c C-j C-y
5518 @code{planner-goto-yesterday}
5520 @item C-c C-j C-j
5521 @code{planner-goto-today}
5523 @item C-c C-j C-n
5524 @code{planner-goto-next-daily-page}
5526 @item C-c C-j C-p
5527 @code{planner-goto-previous-daily-page}
5529 @item C-c C-j C-d
5530 @code{planner-goto}
5532 @end table
5534 @node Sample Configuration Files,  , Planner Keybindings, Reference Material
5535 @comment  node-name,  next,  previous,  up
5536 @section Sample Configuration Files
5537 @cindex configuration, sample
5539 This section includes some sample configuration files. This way, once
5540 you've got the hang of the basics, you can see some different, more
5541 advanced, setups.
5543 There is no One True Way to plan. Every person is different. We hope
5544 you'll find a good starting point among the example configurations
5545 below. If what you want to do does not perfectly fit under one of
5546 these examples, please post a description of the way you plan to the
5547 emacs-wiki-discuss mailing list. We look forward to helping you
5548 customizing planner to fit your needs.
5550 @menu
5551 * File Organization::           
5552 * Bare-Bones Planning::         
5553 * Bare-Bones Planning with Plan Pages::  
5554 * Tasks on Plan Pages with Some Day Pages::  
5555 * Hierarchical Tasks::          
5556 @end menu
5558 @node File Organization, Bare-Bones Planning, Sample Configuration Files, Sample Configuration Files
5559 @subsection File Organization
5561 @itemize
5562 @item @strong{Tasks, schedule and notes on day pages.}
5564 By default, tasks, schedule entries and notes are filed on day pages.
5565 This makes it easy for you to see all the entries relevant to a single
5566 day without becoming overwhelmed with information. Unfinished tasks
5567 are carried over to the next day when you use @kbd{M-x plan}, so it's
5568 always kept up to date. Completed tasks are left on the day page you
5569 finished them on, which helps when reviewing one's progress and writing
5570 accomplishment reports.
5572 @item @strong{Cross-referenced with plan pages.}
5574 You can associate your tasks with projects either when you create the
5575 task or later, with @kbd{M-x planner-replan-task}. This makes it easy
5576 for you to see all the information associated with a particular
5577 project. If you use RememberMode to create notes, you will also be
5578 able to associate notes with a plan page.
5580 @item @strong{Just plan pages.}
5582 If your tasks don't usually have dates, you can turn day pages off by
5583 customizing @code{planner-use-day-pages}. If so, then all of your
5584 tasks and notes will be stored on the WelcomePage and/or a plan page.
5586 @end itemize
5588 @node Bare-Bones Planning, Bare-Bones Planning with Plan Pages, File Organization, Sample Configuration Files
5589 @subsection Bare-Bones Planning
5591 You can keep all of your tasks, notes and schedules in a single file:
5592 WelcomePage.  This is good for people who are used to storing all of
5593 their information in a flat text file.  By storing your information in
5594 planner, you'll be able to take advantage of automatic hyperlinking to
5595 files and other resources.  You can also sort your tasks by priority
5596 and status.
5598 To set your system up for bare-bones planning, set the
5599 @code{planner-use-day-pages} variable to nil before loading planner.
5600 For example, you can put this in your @file{~/.emacs} (or @file{_emacs}):
5602 @example
5603 (setq planner-use-day-pages nil)
5604 (setq planner-default-page nil)
5605 (require 'planner)
5606 @end example
5608 When you create a task or note, planner will not prompt you for a
5609 date.  If you press @key{RET} when prompted for a plan page, it will
5610 accept the default of nil, so no other plan pages will be used.  All
5611 of your data will be kept in one file, which can then be easily backed
5614 You can use commands like @command{planner-create-task-from-buffer} to
5615 create tasks, or you can type tasks in manually.  You can edit or
5616 delete anything in the page without having to update other files.
5618 @node Bare-Bones Planning with Plan Pages, Tasks on Plan Pages with Some Day Pages, Bare-Bones Planning, Sample Configuration Files
5619 @subsection Bare-Bones Planning with Plan Pages
5621 When you create a task or note, Planner.el can copy this to a plan
5622 page. Plan pages allow you to see an overview of all the data for a
5623 project.
5625 For convenience, the @command{planner-create-task-from-buffer} command
5626 prompts you for a plan page when you create a task.
5630 @node Tasks on Plan Pages with Some Day Pages, Hierarchical Tasks, Bare-Bones Planning with Plan Pages, Sample Configuration Files
5631 @subsection Tasks on Plan Pages with Some Day Pages
5633 If most of your tasks are associated with plan pages but you want to
5634 schedule some tasks on day pages, you can leave day pages on (default)
5635 and then write a function that turns off day pages. For example, the
5636 following code snippet turns off day pages for task creation from
5637 buffers.
5639 @example
5640 (require 'planner)
5642 (defun my-planner-create-task-from-buffer ()
5643   "Call `planner-create-task-from-buffer', but without dates."
5644   (interactive)
5645   (let ((planner-use-day-pages nil))
5646     (call-interactively 'planner-create-task-from-buffer)))
5647 @end example
5649 @node Hierarchical Tasks,  , Tasks on Plan Pages with Some Day Pages, Sample Configuration Files
5650 @subsection Hierarchical Tasks
5651 @cindex hierarchical tasks
5652 @cindex tasks, hierarchy of
5654 You can use @file{allout.el} or other modes for outlining to support
5655 hierarchical tasks in plan pages. No special support is needed.
5657 Tasks created by @command{planner-create-task-from-buffer} and
5658 @code{planner-create-task} are created in the @samp{* Tasks} section.
5659 If @code{planner-add-task-at-end-flag} is non-nil, tasks are added to
5660 the end of the first task block, else they are added to the beginning.
5661 You can then copy and paste tasks into your preferred hierarchy.
5662 Blank lines delimit blocks of tasks upon which automatic sorting is
5663 performed.
5665 You can also type in tasks manually. You may find this approach faster
5666 when you are comfortable with planner.
5668 For example, a @file{LearnPlanner} plan page might contain the
5669 following lines:
5671 @example
5672 * Learn how to use planner.el
5674 ** Installation
5676 #C0 _ Decide where to put Planner
5677 #C0 _ Download the archives
5679 ** Configuration
5681 *** Load path
5683 #C0 _ Figure out how to add things to my load path
5684 #C0 _ Actually add it to my load path
5687 @end example
5689 If you create tasks for the finest level of detail available at the
5690 moment, you can schedule them onto day pages with @kbd{C-c C-c}
5691 (@command{planner-copy-or-move-task}). Then you can use
5692 @command{planner-jump-to-link} to switch between the day page and the
5693 plan page link.
5696 @node Getting Help, Acknowledgements, Reference Material, Top
5697 @comment  node-name,  next,  previous,  up
5698 @chapter Getting Help
5699 @cindex help, getting
5700 @cindex bugs, reporting
5702 After you have read this guide, if you still have questions about
5703 Planner, or if you have bugs to report, there are several places
5704 you can go.
5706 Planner has an official website at @url{http://www.plannerlove.com/}.
5707 It is a collaborative wiki.
5709 Bugs may be reported using the Planner Bug-Tracker at
5710 @url{https://gna.org/bugs/?group=planner-el}.
5712 You can join the mailing list at
5713 @email{emacs-wiki-discuss@@nongnu.org} using the subscription form at
5714 @url{http:// mail.nongnu.org/ mailman/ listinfo/
5715 emacs-wiki-discuss}. This mailing list is also available via Gmane
5716 (@url{http://gmane.org/}). The group is called
5717 @samp{gmane.emacs.wiki.general}.
5719 You can also contact the maintainer of Planner, Michael Olson, at
5720 @email{mwolson@@gnu.org}, but it is better to use the other options.
5722 You can explore the relevant sections of the EmacsWiki.org:
5724 @itemize @bullet
5726 @item
5727 @url{http://www.emacswiki.org/cgi-bin/wiki/PlannerMode}
5729 @item
5730 @url{http://www.emacswiki.org/cgi-bin/wiki/MuseMode}
5732 @item
5733 @url{http://www.emacswiki.org/cgi-bin/wiki/RememberMode}
5735 @end itemize
5737 You can visit the IRC Freenode channel @samp{#emacs}. Many of the
5738 contributors are frequently around and willing to answer your
5739 questions.
5741 There is an Orkut community called PlannerMode.
5743 For issues relating to this documentation, please contact John
5744 Sullivan at @email{johnsu01@@yahoo.com}.
5746 @node Acknowledgements, GNU General Public License, Getting Help, Top
5747 @comment  node-name,  next,  previous,  up
5748 @chapter Acknowledgements
5749 @itemize
5750 @item Maintainers
5752 @cindex maintainers
5754 @itemize
5755 @item 2005
5757 Michael Olson, Sacha Chua, and several others from the Planner community
5758 ported Planner to use Muse instead of emacs-wiki.  Michael Olson became
5759 the maintainer of Planner.
5761 @item 2004
5763 Damien Elmes handed EmacsWikiMode to Mark Triggs for a short period of
5764 time.  Mark Triggs deferred to Sacha Chua as official maintainer of
5765 Planner.  Sacha Chua volunteered to maintain RememberMode.
5766 Michael Olson became the maintainer of both emacs-wiki and Muse.
5768 @item 2003
5770 Sacha Chua volunteered to maintain Planner.  Damien Elmes
5771 volunteered to maintain EmacsWikiMode.
5773 @item 2001
5775 John Wiegley wrote EmacsWikiMode and Planner.
5776 @end itemize
5778 @item Contributors
5779 @cindex contributors
5781 For a complete list of people who have helped out with Planner, please
5782 check out the @file{AUTHORS} file that is included with Planner.
5784 @end itemize
5786 @node GNU General Public License, Concept Index, Acknowledgements, Top
5787 @comment  node-name,  next,  previous,  up
5788 @appendix GNU GENERAL PUBLIC LICENSE
5789 @center Version 2, June 1991
5790 @cindex GPL
5791 @cindex GNU General Public License
5793 @c This file is intended to be included in another file.
5795 @display
5796 Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
5797 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
5799 Everyone is permitted to copy and distribute verbatim copies
5800 of this license document, but changing it is not allowed.
5801 @end display
5803 @appendixsec Preamble
5805   The licenses for most software are designed to take away your
5806 freedom to share and change it.  By contrast, the GNU General Public
5807 License is intended to guarantee your freedom to share and change free
5808 software---to make sure the software is free for all its users.  This
5809 General Public License applies to most of the Free Software
5810 Foundation's software and to any other program whose authors commit to
5811 using it.  (Some other Free Software Foundation software is covered by
5812 the GNU Library General Public License instead.)  You can apply it to
5813 your programs, too.
5815   When we speak of free software, we are referring to freedom, not
5816 price.  Our General Public Licenses are designed to make sure that you
5817 have the freedom to distribute copies of free software (and charge for
5818 this service if you wish), that you receive source code or can get it
5819 if you want it, that you can change the software or use pieces of it
5820 in new free programs; and that you know you can do these things.
5822   To protect your rights, we need to make restrictions that forbid
5823 anyone to deny you these rights or to ask you to surrender the rights.
5824 These restrictions translate to certain responsibilities for you if you
5825 distribute copies of the software, or if you modify it.
5827   For example, if you distribute copies of such a program, whether
5828 gratis or for a fee, you must give the recipients all the rights that
5829 you have.  You must make sure that they, too, receive or can get the
5830 source code.  And you must show them these terms so they know their
5831 rights.
5833   We protect your rights with two steps: (1) copyright the software, and
5834 (2) offer you this license which gives you legal permission to copy,
5835 distribute and/or modify the software.
5837   Also, for each author's protection and ours, we want to make certain
5838 that everyone understands that there is no warranty for this free
5839 software.  If the software is modified by someone else and passed on, we
5840 want its recipients to know that what they have is not the original, so
5841 that any problems introduced by others will not reflect on the original
5842 authors' reputations.
5844   Finally, any free program is threatened constantly by software
5845 patents.  We wish to avoid the danger that redistributors of a free
5846 program will individually obtain patent licenses, in effect making the
5847 program proprietary.  To prevent this, we have made it clear that any
5848 patent must be licensed for everyone's free use or not licensed at all.
5850   The precise terms and conditions for copying, distribution and
5851 modification follow.
5853 @iftex
5854 @appendixsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
5855 @end iftex
5856 @ifinfo
5857 @center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
5858 @end ifinfo
5860 @enumerate 0
5861 @item
5862 This License applies to any program or other work which contains
5863 a notice placed by the copyright holder saying it may be distributed
5864 under the terms of this General Public License.  The ``Program'', below,
5865 refers to any such program or work, and a ``work based on the Program''
5866 means either the Program or any derivative work under copyright law:
5867 that is to say, a work containing the Program or a portion of it,
5868 either verbatim or with modifications and/or translated into another
5869 language.  (Hereinafter, translation is included without limitation in
5870 the term ``modification''.)  Each licensee is addressed as ``you''.
5872 Activities other than copying, distribution and modification are not
5873 covered by this License; they are outside its scope.  The act of
5874 running the Program is not restricted, and the output from the Program
5875 is covered only if its contents constitute a work based on the
5876 Program (independent of having been made by running the Program).
5877 Whether that is true depends on what the Program does.
5879 @item
5880 You may copy and distribute verbatim copies of the Program's
5881 source code as you receive it, in any medium, provided that you
5882 conspicuously and appropriately publish on each copy an appropriate
5883 copyright notice and disclaimer of warranty; keep intact all the
5884 notices that refer to this License and to the absence of any warranty;
5885 and give any other recipients of the Program a copy of this License
5886 along with the Program.
5888 You may charge a fee for the physical act of transferring a copy, and
5889 you may at your option offer warranty protection in exchange for a fee.
5891 @item
5892 You may modify your copy or copies of the Program or any portion
5893 of it, thus forming a work based on the Program, and copy and
5894 distribute such modifications or work under the terms of Section 1
5895 above, provided that you also meet all of these conditions:
5897 @enumerate a
5898 @item
5899 You must cause the modified files to carry prominent notices
5900 stating that you changed the files and the date of any change.
5902 @item
5903 You must cause any work that you distribute or publish, that in
5904 whole or in part contains or is derived from the Program or any
5905 part thereof, to be licensed as a whole at no charge to all third
5906 parties under the terms of this License.
5908 @item
5909 If the modified program normally reads commands interactively
5910 when run, you must cause it, when started running for such
5911 interactive use in the most ordinary way, to print or display an
5912 announcement including an appropriate copyright notice and a
5913 notice that there is no warranty (or else, saying that you provide
5914 a warranty) and that users may redistribute the program under
5915 these conditions, and telling the user how to view a copy of this
5916 License.  (Exception: if the Program itself is interactive but
5917 does not normally print such an announcement, your work based on
5918 the Program is not required to print an announcement.)
5919 @end enumerate
5921 These requirements apply to the modified work as a whole.  If
5922 identifiable sections of that work are not derived from the Program,
5923 and can be reasonably considered independent and separate works in
5924 themselves, then this License, and its terms, do not apply to those
5925 sections when you distribute them as separate works.  But when you
5926 distribute the same sections as part of a whole which is a work based
5927 on the Program, the distribution of the whole must be on the terms of
5928 this License, whose permissions for other licensees extend to the
5929 entire whole, and thus to each and every part regardless of who wrote it.
5931 Thus, it is not the intent of this section to claim rights or contest
5932 your rights to work written entirely by you; rather, the intent is to
5933 exercise the right to control the distribution of derivative or
5934 collective works based on the Program.
5936 In addition, mere aggregation of another work not based on the Program
5937 with the Program (or with a work based on the Program) on a volume of
5938 a storage or distribution medium does not bring the other work under
5939 the scope of this License.
5941 @item
5942 You may copy and distribute the Program (or a work based on it,
5943 under Section 2) in object code or executable form under the terms of
5944 Sections 1 and 2 above provided that you also do one of the following:
5946 @enumerate a
5947 @item
5948 Accompany it with the complete corresponding machine-readable
5949 source code, which must be distributed under the terms of Sections
5950 1 and 2 above on a medium customarily used for software interchange; or,
5952 @item
5953 Accompany it with a written offer, valid for at least three
5954 years, to give any third party, for a charge no more than your
5955 cost of physically performing source distribution, a complete
5956 machine-readable copy of the corresponding source code, to be
5957 distributed under the terms of Sections 1 and 2 above on a medium
5958 customarily used for software interchange; or,
5960 @item
5961 Accompany it with the information you received as to the offer
5962 to distribute corresponding source code.  (This alternative is
5963 allowed only for noncommercial distribution and only if you
5964 received the program in object code or executable form with such
5965 an offer, in accord with Subsection b above.)
5966 @end enumerate
5968 The source code for a work means the preferred form of the work for
5969 making modifications to it.  For an executable work, complete source
5970 code means all the source code for all modules it contains, plus any
5971 associated interface definition files, plus the scripts used to
5972 control compilation and installation of the executable.  However, as a
5973 special exception, the source code distributed need not include
5974 anything that is normally distributed (in either source or binary
5975 form) with the major components (compiler, kernel, and so on) of the
5976 operating system on which the executable runs, unless that component
5977 itself accompanies the executable.
5979 If distribution of executable or object code is made by offering
5980 access to copy from a designated place, then offering equivalent
5981 access to copy the source code from the same place counts as
5982 distribution of the source code, even though third parties are not
5983 compelled to copy the source along with the object code.
5985 @item
5986 You may not copy, modify, sublicense, or distribute the Program
5987 except as expressly provided under this License.  Any attempt
5988 otherwise to copy, modify, sublicense or distribute the Program is
5989 void, and will automatically terminate your rights under this License.
5990 However, parties who have received copies, or rights, from you under
5991 this License will not have their licenses terminated so long as such
5992 parties remain in full compliance.
5994 @item
5995 You are not required to accept this License, since you have not
5996 signed it.  However, nothing else grants you permission to modify or
5997 distribute the Program or its derivative works.  These actions are
5998 prohibited by law if you do not accept this License.  Therefore, by
5999 modifying or distributing the Program (or any work based on the
6000 Program), you indicate your acceptance of this License to do so, and
6001 all its terms and conditions for copying, distributing or modifying
6002 the Program or works based on it.
6004 @item
6005 Each time you redistribute the Program (or any work based on the
6006 Program), the recipient automatically receives a license from the
6007 original licensor to copy, distribute or modify the Program subject to
6008 these terms and conditions.  You may not impose any further
6009 restrictions on the recipients' exercise of the rights granted herein.
6010 You are not responsible for enforcing compliance by third parties to
6011 this License.
6013 @item
6014 If, as a consequence of a court judgment or allegation of patent
6015 infringement or for any other reason (not limited to patent issues),
6016 conditions are imposed on you (whether by court order, agreement or
6017 otherwise) that contradict the conditions of this License, they do not
6018 excuse you from the conditions of this License.  If you cannot
6019 distribute so as to satisfy simultaneously your obligations under this
6020 License and any other pertinent obligations, then as a consequence you
6021 may not distribute the Program at all.  For example, if a patent
6022 license would not permit royalty-free redistribution of the Program by
6023 all those who receive copies directly or indirectly through you, then
6024 the only way you could satisfy both it and this License would be to
6025 refrain entirely from distribution of the Program.
6027 If any portion of this section is held invalid or unenforceable under
6028 any particular circumstance, the balance of the section is intended to
6029 apply and the section as a whole is intended to apply in other
6030 circumstances.
6032 It is not the purpose of this section to induce you to infringe any
6033 patents or other property right claims or to contest validity of any
6034 such claims; this section has the sole purpose of protecting the
6035 integrity of the free software distribution system, which is
6036 implemented by public license practices.  Many people have made
6037 generous contributions to the wide range of software distributed
6038 through that system in reliance on consistent application of that
6039 system; it is up to the author/donor to decide if he or she is willing
6040 to distribute software through any other system and a licensee cannot
6041 impose that choice.
6043 This section is intended to make thoroughly clear what is believed to
6044 be a consequence of the rest of this License.
6046 @item
6047 If the distribution and/or use of the Program is restricted in
6048 certain countries either by patents or by copyrighted interfaces, the
6049 original copyright holder who places the Program under this License
6050 may add an explicit geographical distribution limitation excluding
6051 those countries, so that distribution is permitted only in or among
6052 countries not thus excluded.  In such case, this License incorporates
6053 the limitation as if written in the body of this License.
6055 @item
6056 The Free Software Foundation may publish revised and/or new versions
6057 of the General Public License from time to time.  Such new versions will
6058 be similar in spirit to the present version, but may differ in detail to
6059 address new problems or concerns.
6061 Each version is given a distinguishing version number.  If the Program
6062 specifies a version number of this License which applies to it and ``any
6063 later version'', you have the option of following the terms and conditions
6064 either of that version or of any later version published by the Free
6065 Software Foundation.  If the Program does not specify a version number of
6066 this License, you may choose any version ever published by the Free Software
6067 Foundation.
6069 @item
6070 If you wish to incorporate parts of the Program into other free
6071 programs whose distribution conditions are different, write to the author
6072 to ask for permission.  For software which is copyrighted by the Free
6073 Software Foundation, write to the Free Software Foundation; we sometimes
6074 make exceptions for this.  Our decision will be guided by the two goals
6075 of preserving the free status of all derivatives of our free software and
6076 of promoting the sharing and reuse of software generally.
6078 @iftex
6079 @heading NO WARRANTY
6080 @end iftex
6081 @ifinfo
6082 @center NO WARRANTY
6083 @end ifinfo
6085 @item
6086 BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
6087 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
6088 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
6089 PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
6090 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
6091 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
6092 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
6093 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
6094 REPAIR OR CORRECTION.
6096 @item
6097 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
6098 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
6099 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
6100 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
6101 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
6102 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
6103 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
6104 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
6105 POSSIBILITY OF SUCH DAMAGES.
6106 @end enumerate
6108 @iftex
6109 @heading END OF TERMS AND CONDITIONS
6110 @end iftex
6111 @ifinfo
6112 @center END OF TERMS AND CONDITIONS
6113 @end ifinfo
6115 @page
6116 @appendixsec Appendix: How to Apply These Terms to Your New Programs
6118   If you develop a new program, and you want it to be of the greatest
6119 possible use to the public, the best way to achieve this is to make it
6120 free software which everyone can redistribute and change under these terms.
6122   To do so, attach the following notices to the program.  It is safest
6123 to attach them to the start of each source file to most effectively
6124 convey the exclusion of warranty; and each file should have at least
6125 the ``copyright'' line and a pointer to where the full notice is found.
6127 @smallexample
6128 @var{one line to give the program's name and a brief idea of what it does.}
6129 Copyright (C) @var{yyyy}  @var{name of author}
6131 This program is free software; you can redistribute it and/or modify
6132 it under the terms of the GNU General Public License as published by
6133 the Free Software Foundation; either version 2 of the License, or
6134 (at your option) any later version.
6136 This program is distributed in the hope that it will be useful,
6137 but WITHOUT ANY WARRANTY; without even the implied warranty of
6138 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6139 GNU General Public License for more details.
6141 You should have received a copy of the GNU General Public License
6142 along with this program; if not, write to the Free Software
6143 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
6144 @end smallexample
6146 Also add information on how to contact you by electronic and paper mail.
6148 If the program is interactive, make it output a short notice like this
6149 when it starts in an interactive mode:
6151 @smallexample
6152 Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
6153 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
6154 This is free software, and you are welcome to redistribute it
6155 under certain conditions; type `show c' for details.
6156 @end smallexample
6158 The hypothetical commands @samp{show w} and @samp{show c} should show
6159 the appropriate parts of the General Public License.  Of course, the
6160 commands you use may be called something other than @samp{show w} and
6161 @samp{show c}; they could even be mouse-clicks or menu items---whatever
6162 suits your program.
6164 You should also get your employer (if you work as a programmer) or your
6165 school, if any, to sign a ``copyright disclaimer'' for the program, if
6166 necessary.  Here is a sample; alter the names:
6168 @example
6169 Yoyodyne, Inc., hereby disclaims all copyright interest in the program
6170 `Gnomovision' (which makes passes at compilers) written by James Hacker.
6172 @var{signature of Ty Coon}, 1 April 1989
6173 Ty Coon, President of Vice
6174 @end example
6176 This General Public License does not permit incorporating your program into
6177 proprietary programs.  If your program is a subroutine library, you may
6178 consider it more useful to permit linking proprietary applications with the
6179 library.  If this is what you want to do, use the GNU Library General
6180 Public License instead of this License.
6182 @node Concept Index,  , GNU General Public License, Top
6183 @comment  node-name,  next,  previous,  up
6184 @unnumbered Index
6186 @printindex cp
6188 @bye