add planner-multi support to planner-authz
[planner-el.git] / planner-el.texi
blob45ec690627e153a0e8087adb4cb23902701325e4
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 * Basic Configuration::         
101 * Navigation::                  
102 * More about Tasks::            
103 * More about Notes::            
104 * Making Files Pretty::         
105 * Annotations::                 
106 * Interactive Lisp::            
107 * Publishing::                  
108 * Experimental Functions::      
110 More about Tasks
112 * Creating New Tasks::          
113 * Organizing Your Tasks::       
114 * Task Reports and Overviews::  
116 Creating New Tasks
118 * Creating a Task::             
119 * Task Priorities::             
120 * Task IDs::                    
121 * Cyclic Tasks::                
122 * Task Detail::                 
123 * Deadlines::                   
125 Organizing Your Tasks
127 * Multiple Projects::           
128 * Viewing Tasks::               
129 * Modifying Tasks::             
130 * Carrying Over Unfinished Tasks::  
131 * Task Numbering::              
132 * Task Ranks::                  
133 * Grouping Tasks::              
135 Task Reports and Overviews
137 * Accomplishments::             
138 * Task Overviews::              
139 * <tasks> tag::                 
141 More about Notes
143 * Using Allout Mode::           Quickly navigating your notes
144 * <notes>::                     Note headlines
145 * <past-notes>::                Index of past notes
146 * Note Indices::                
148 Publishing
150 * Publishing Calendars::        planner-calendar.el
151 * Authz Access Restriction::    planner-authz.el
152 * RSS Publication::             Sharing notes with planner-rss.el
153 * iCal Task Publication::       Sharing tasks with planner-ical.el
154 * RDF Publication::             planner-rdf.el
156 RDF Publication
158 * Publishing with planner-rdf::  
159 * planner-rdf Tags::            
160 * planner-rdf Usage Examples::  
162 Managing Your Information
164 * E-mail::                      Linking notes and tasks to messages
165 * Scheduling and Time::         Tracking appointments and where your time goes
166 * Finances::                    Display your account balances and more
167 * Contacts and Conversations::  BBDB and ERC
168 * Tracking Research and Resources::  The Web, bibliographies, and bookmarks
169 * Tracking Development::        
171 E-mail
173 * Unix mail::                   Unix mailboxes: planner-unix-mail.el              
174 * Gnus::                        Gnus mail and news reader: planner-gnus.el
175 * VM::                          VM mail reader: planner-vm.el
176 * Wanderlust::                  Wanderlust mail reader: planner-wl.el
177 * MH-E::                        MH-E mail reader: planner-mhe.el
178 * Rmail::                       Rmail: planner-rmail.el
180 Scheduling and Time
182 * Diary::                       Using the Emacs diary
183 * Appointments::                Appointments in plan pages: planner-appt.el
184 * Timeclock::                   Time tracking: planner-timeclock.el
185 * schedule.el::                 Project completion: planner-schedule.el
187 Diary
189 * Planner-Diary Advanced Features::  
191 Usage
193 * Task-based Appointments::     
194 * Schedule-based Appointments::  
195 * Viewing Appointments::        
196 * Appointment Updating on Save::  
197 * Appointment and Calendar Integration::  
198 * Appointment Hooks::           
200 Finances
202 * Ledger::                      Personal finances: planner-ledger.el
204 Contacts and Conversations
206 * BBDB::                        Contacts: planner-bbdb.el
207 * Emacs Relay Chat::            Internet Relay Chat: planner-erc.el
209 Tracking Research and Resources
211 * W3m::                         Web browser: planner-w3m.el
212 * BibTeX::                      Bibliographies: planner-bibtex.el
213 * Bookmark::                    Bookmarks: planner-bookmark.el
215 Tracking Development
217 * Log Edit::                    Changelogs: planner-log-edit.el
218 * XTLA::                        TLA changesets: planner-xtla.el
219 * Gnats::                       Gnats: The GNU bug reporting system
221 Advanced Configuration
223 * Customizing Your Day Pages::  Change your templates
224 * Variables to Customize::      Change various aspects of Planner behavior
225 * Ideas for Other Keybindings::  Add to and change the default keybindings
227 Reference Material
229 * Keeping Track of Time::       
230 * Other Interactive Functions::  
231 * Planner Keybindings::         Default keybindings for Planner
232 * Sample Configuration Files::  
234 Sample Configuration Files
236 * File Organization::           
237 * Bare-Bones Planning::         
238 * Bare-Bones Planning with Plan Pages::  
239 * Tasks on Plan Pages with Some Day Pages::  
240 * Hierarchical Tasks::          
242 @end detailmenu
243 @end menu
245 @node Preface, Introduction, Top, Top
246 @comment  node-name,  next,  previous,  up
247 @chapter Preface
249 This document describes Planner, which was written by John Wiegley and
250 is now maintained by Michael Olson (@pxref{Acknowledgements}).
252 This document is a work in progress, and your contribution will be
253 greatly appreciated. Please e-mail comments and suggestions to the
254 mailing list (@pxref{Getting Help}). In the subject line of your
255 e-mail, include the word @samp{Planner}.
257 This documentation is available in eye-pleasing formats including PDF
258 and HTML at @url{http://www.mwolson.org/static/doc/}.
260 Documentation author: John Sullivan @email{john@@wjsullivan.net}
262 Maintainer: Michael Olson @email{mwolson@@gnu.org}
265 John Sullivan (johnsu01)@*
266 April 25, 2004
268 @node Introduction, Installation, Preface, Top
269 @comment  node-name,  next,  previous,  up
270 @chapter Introduction
272 Planner is an organizer and day planner for Emacs.  It helps you keep
273 track of your pending and completed tasks, daily schedule, dates to
274 remember, notes and inspirations. It is a powerful tool not only for
275 managing your time and productivity, but also for keeping within easy
276 keystroke reach all of the information you need to be productive. It can
277 even publish reports charting your work for your personal web page, your
278 conscience, or your soon-to-be-impressed boss.
280 In fact, because it uses as its building blocks simple plain-text files,
281 it is an incredibly modular and flexible tool capable of shaping and
282 handling your personal information in ways whose variety is limited only
283 by your imagination. Because of this, Planner has a very active and
284 generous community who regularly share their innovations with each
285 other. Many of these modules and extensions are included in the archive
286 that you will download. Once you get the basics down, you'll probably
287 want to explore some of them. But as you read this manual and work with
288 Planner, keep in mind that the basic core is actually very simple, and
289 it might be worth spending time with just that before delving into the
290 customizations.
292 Because they are plain text with very few requirements, the organizer
293 pages kept by Planner can be as basic or as detailed as you
294 like. Your pages can be simple to-do lists with no more additional
295 information than what you would scrawl on a napkin, or they can be a
296 highly technical affair involving hyperlinks, embedded Lisp code,
297 appointment schedules and RSS feeds. As with so much in Emacs, it's
298 all up to you.
300 To get started with Planner, you first need to download it, and possibly
301 also the packages it depends on (@pxref{Installation}).
303 @node Installation, Overview, Introduction, Top
304 @comment  node-name,  next,  previous,  up
305 @chapter Installation
306 @cindex installation
308 Planner depends on Muse. Information for downloading and installing
309 Muse can be found at
310 @url{http://www.mwolson.org/static/doc/muse.html}.
312 Make sure that you use the latest Muse release.  Development code might
313 prove unstable.
315 @menu
316 * Getting the Files::           
317 * Creating Your Planner::       
318 * Components::                  
319 * Advanced Installation::       
320 @end menu
322 @node Getting the Files, Creating Your Planner, Installation, Installation
323 @comment node-name,  next,  previous,  up
324 @section Getting the Files
326 Currently, there are three ways to obtain and install Planner. You can
327 install it from a source archive, Arch repository, or Debian package.
329 @menu
330 * Installing from a Source Archive::  
331 * Installing from Arch::        
332 * Installing from Debian::      
333 @end menu
335 @node Installing from a Source Archive, Installing from Arch, Getting the Files, Getting the Files
336 @comment node-name,  next,  previous,  up
337 @subsection Installing from a Source Archive
338 @cindex source code archive, installing from
340 You can install Planner from the source archive packaged and
341 distributed directly by the maintainer. This archive is provided in
342 both @file{.tar.gz} and @file{.zip} format.
344 @enumerate
345 @item
346 Download and unpack either
347 @url{http://www.mwolson.org/static/dist/planner-latest.tar.gz} or
348 @url{http://www.mwolson.org/static/dist/planner-latest.zip}.
350 @item Edit your @file{~/.emacs} (@file{_emacs} on Microsoft Windows).
352 @example
353 ;; Add the directories to your load path
354 (add-to-list 'load-path "/path/to/muse/lisp")
355 (add-to-list 'load-path "/path/to/planner")
356 (add-to-list 'load-path "/path/to/remember")
358 ;; Load planner
359 (require 'planner)
360 @end example
361 @end enumerate
363 @subsubsection Updating Your Version
365 Download a new version and extract it over the old directory. Don't
366 forget to delete any byte-compiled files (@file{*.elc}) in the
367 directories so that the new code will be used.
369 @node Installing from Arch, Installing from Debian, Installing from a Source Archive, Getting the Files
370 @comment node-name,  next,  previous,  up
371 @subsection Installing from Arch
372 @cindex Arch repositories
373 @cindex Arch, installing from
375 Arch allows you to retrieve previous versions and select specific
376 features and bugfixes. Debian users can install Arch with @kbd{apt-get
377 install tla}. Users of other distributions should see
378 @url{http://regexps.srparish.net/www/}.
380 To get started with Planner using Arch, you'll need to run some initial
381 commands to register your local copy of the archive and retrieve the
382 files.
384 @example
385 # Register the Muse archive
386 tla register-archive http://www.mwolson.org/archives/2006
388 # Get the Muse archive
389 tla get mwolson@@gnu.org--2006/muse--main--1.0 muse
391 # Download planner module into the planner/ subdirectory
392 tla get mwolson@@gnu.org--2006/planner--main--1.0 planner
393 @end example
395 Then add the following lines to your @code{~/.emacs}:
397 @example
398 ;; Add the directories to your load path
399 (add-to-list 'load-path "/path/to/muse/lisp")
400 (add-to-list 'load-path "/path/to/planner")
401 (add-to-list 'load-path "/path/to/remember")
403 ;; Load planner
404 (require 'planner)
405 @end example
407 You can also browse the Arch repository on the web at
408 @url{http://www.mwolson.org/cgi-bin/archzoom/archzoom.cgi/mwolson@@gnu.org--2006/planner}.
410 @subsubsection Updating Your Version
411 @cindex Arch, updating from
413 To stay up-to-date using Arch, here are some commands that might be
414 useful.
416 To list upstream changes not in local copy:
418 @example
419 # Change to the source directory you are interested in. Example:
420 cd muse/
422 # Display the summary of changes
423 tla missing --summary
424 @end example
426 To update to the latest version:
428 @example
429 cd muse; tla replay
430 cd ../planner; tla replay
431 cd ../remember; tla replay
432 @end example
434 Don't forget to delete any byte-compiled files (@file{*.elc}) in the
435 directories so that the new code will be used.
437 @node Installing from Debian, , Installing from Arch, Getting the Files
438 @comment node-name,  next,  previous,  up
439 @subsection Installing from Debian
440 @cindex Debian package
442 Debian packages for Planner, Muse, and Remember are available in Debian
443 proper as the @code{planner-el}, @code{muse-el}, and @code{remember-el}
444 packages, respectively.
446 If you wish to try experimental packages, add the following lines to
447 your @file{/etc/apt/sources.list}
449 @example
450 deb http://www.mwolson.org/debian/ ./
451 @end example
453 Then, do the following steps as root:
455 @example
456 apt-get update
457 apt-get install muse-el
458 apt-get install planner-el
459 @end example
461 @subsubsection Updating Your Version
462 @cindex Debian package, updating
464 If you installed Planner from Debian, do @kbd{apt-get update; apt-get
465 upgrade} to upgrade all packages that can be upgraded, or @kbd{apt-get
466 update; apt-get install planner-el} to upgrade just planner-el.
468 @node Creating Your Planner, Components, Getting the Files, Installation
469 @section Creating Your Planner
471 Now that you have installed the files for Planner and Muse, you need
472 to set some options to create your first planner.
474 Muse thinks in terms of projects. Each project consists of a group of
475 documents and certain information associated with these
476 documents. Planner is organized as a project within Muse. So, you need
477 to tell Muse a bit about it.
479 Add something like the following code to your @file{.emacs} file.
481 First, give your new Planner project a name. In this case, we use the
482 name, ``WikiPlanner''.
484 @example
485 (setq planner-project "WikiPlanner")
486 @end example
488 Next, add an entry for your project to Muse's master list of
489 projects. Don't forget to use your own name here in place of
490 ``WikiPlanner'' if you have chosen something different.
492 @example
493 (setq muse-project-alist
494       '(("WikiPlanner"
495          ("~/Plans"           ;; where your Planner pages are located
496           :default "TaskPool" ;; use value of `planner-default-page'
497           :major-mode planner-mode
498           :visit-link planner-visit-link)
500          ;; This next part is for specifying where Planner pages
501          ;; should be published and what Muse publishing style to
502          ;; use.  In this example, we will use the XHTML publishing
503          ;; style.
505          (:base "planner-xhtml"
506                 ;; value of `planner-publishing-directory'
507                 :path "~/public_html/Plans"))))
508 @end example
510 This code should work fine as-is for you as long as the directories
511 you see exist, and as long as you have no other Muse projects besides
512 your planner.
514 The first directory (@file{~/Plans}) is the directory where the
515 source files for your planner will reside. This is the directory where
516 you will actually visit files and edit them.  These files must have a
517 ``.muse'' extension.
519 The second directory (@file{~/public_html/Plans}) is the directory where
520 your planner files will be published by Muse as XHTML.
522 After you have added this code, make sure to either evaluate it or
523 restart Emacs.
525 @node Components, Advanced Installation, Creating Your Planner, Installation
526 @comment node-name,  next,  previous,  up
527 @section Components
529 Now that you have the archive, let's look at what's in it.
531 There should be three directories, named @file{planner}, @file{muse} and
532 @file{remember}.
534 In the @file{planner/} directory, you'll see many files with names like
535 @file{planner-gnus.el}. These are extra modules and extensions for
536 Planner, which you can use to tailor Planner to fit your desired
537 planning and information management habits.
539 In the @file{muse/lisp} directory, you'll see many files with names like
540 @file{muse-blosxom.el}. As in @file{planner/}, these are optional
541 modules and extensions.
543 A minimal working installation includes just @file{planner/planner.el}.
545 You need @file{planner.el} because it provides the core functions for
546 handling tasks, notes, and page navigation. You need @file{Emacs Muse}
547 because it provides the functions used to display your pages (both in an
548 emacs buffer and as HTML), and for connecting them to each other. More
549 specifically, it enables you to have hyperlinks and formatting in your
550 emacs buffers even though the actual files you are working with are
551 saved in plain text. These abilities are used in Planner to format your
552 planner pages the way you like, to create links from your tasks and
553 notes to the materials and projects they refer to, and to optionally
554 ``publish'' your pages in different formats, including HTML.
556 In the @file{remember/} directory are files related to
557 RememberMode. RememberMode does not depend on Planner or Muse, but works
558 best with Planner installed. It is not required in order to use Planner,
559 but it is used by many Planner users to record notes and information to
560 their planner pages.
562 If you are curious, you can open each file in these directories and read
563 the comments at the top, to get an idea of what each extension is used
564 for. They are also all detailed later in this manual.
566 @node Advanced Installation,  , Components, Installation
567 @comment  node-name,  next,  previous,  up
568 @section Advanced Installation
570 Once you decide you want to keep Planner around for a while, there
571 are two additional steps you can take to make using it easier and more
572 efficient. These steps are optional.
574 @itemize
576 @cindex @file{remember.el}
577 @cindex @file{remember-planner.el}
578 @item You can install @file{remember.el} and @file{remember-planner.el}
579 so that you can create Planner notes from anywhere. See the
580 documentation at
581 @uref{http://sacha.free.net.ph/notebook/doc/dev/remember/} for more
582 information.
584 @cindex installing the info file
585 @cindex @file{planner-el.texi}, installing
586 @cindex @file{planner-el.info}, installing
587 @item You can make this document, the Planner info file, appear in
588 the index of info files you see when you type @command{M-x info} or
589 @kbd{C-h i} in Emacs. The instructions for doing this vary depending
590 on whether you have permission to edit certain files on your
591 system. Follow the instructions in @ref{Installing an Info File, ,
592 ,texinfo, Texinfo}, using something like:
594 @example
595 * Planner: (path/to/planner/Planner). Organizer/day planner
596 for Emacs.
597 @end example
599 for the new entry in the info @file{dir} file.
601 @cindex byte compiling
602 @item You can byte-compile @file{planner.el}, @file{Muse},
603 @file{remember.el}, or any of the optional modules you frequently use,
604 in order to improve the speed of their execution. Basically, all you
605 need to do is change to the directory of each project and run
606 @command{make} from the command line. To read more detail about byte
607 compilation, see @ref{Byte Compilation, , ,elisp, Emacs Lisp Reference
608 Manual}.
610 @end itemize
612 @node Overview, Getting Started, Installation, Top
613 @comment node-name,  next,  previous,  up
614 @chapter Overview
616 Planner is a plain-text hyperlinked personal information manager
617 for Emacs that helps you keep track of tasks, notes, and other
618 information. People use Planner to support different ways of planning
619 one's day, from Franklin-Covey and David Allen's Getting Things Done
620 to home-brew hacks. Planner is even used to manage information not
621 normally handled by a personal information manager, like bugtracking,
622 time tracking, and team data. If you start by using Planner as a basic
623 TODO and notes manager, you might find other ways it can help you
624 improve your process.
626 You can use Planner to keep track of your tasks, schedule, notes,
627 and other information you want to store in hyperlinkable text files.
628 You can get the most benefit out of a personal information manager if
629 you use it everyday. Most people add @code{(plan)} to the end of their
630 @file{~/.emacs} so that Planner shows today's schedule and
631 unfinished tasks whenever Emacs starts. If you leave your Emacs
632 running for more than 24 hours, try to get into the habit of running
633 @code{plan} at least once a day.
635 Because your time is important, Planner tries to minimize
636 distractions, making it easier for you to jot down tasks and notes
637 without being distracted from your work. People often make tasks based
638 on the current buffer, so Planner tries to create hyperlinks to
639 whatever you're looking at so that you can jump back to it easily. The
640 @ref{Getting Started} tutorial will show you how to set that up for
641 both tasks and notes.
643 The customizability of Planner means you can make your personal
644 information manager truly personal. Planner strives to be as flexible
645 as possible, and we would love to adapt Planner to fit your needs.
646 Browse through our mailing list at
647 @url{http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss} to
648 find out how other people are using Planner, and post your feature
649 requests and bug reports there!
651 Planner is just a tool. It does not dictate a particular way of
652 planning, although it supports some ways better than it supports
653 others. If you want to take some time thinking about planning, read
654 the following reflections for inspiration and ideas. On the other
655 hand, if you want to hit the ground running, see @ref{Getting
656 Started}. If you already have a specific way of planning in mind,
657 check out @ref{Sample Configuration Files}.
659 @menu
660 * Planning based on the Franklin-Covey Approach::  
661 * Why Use Planner::             
662 @end menu
664 @node Planning based on the Franklin-Covey Approach, Why Use Planner, Overview, Overview
665 @comment  node-name,  next,  previous,  up
666 @section Planning Based on the Franklin-Covey Approach
667 @cindex philosophy of planning
669 This is a slightly edited and updated version of an essay by John
670 Wiegley. Read it if you want to get some insights into one way of
671 planning. You can skip this if you want to go straight to planning
672 your day.
674 What is planning?  It can be a nebulous thing to define.  In its
675 essence, however, it is very simple: it's how we achieve our dreams.
677 Our days are filled with time, and hence with actions, whether they
678 be of a mental or physical sort.  But there are two kinds of
679 action: reactive and creative.  Reactive action is a response to
680 the environment, a reaction to stimulus.  Had we enough instincts
681 to ensure survival, we could live according to this kind of action
682 alone.  It is a mode of behavior we share with every living
683 species.
685 The opposite to reactivity is creativity, when we decide upon a
686 course of action that is a wholly a product of personal choice.  We
687 then make decisions as to the steps needed to make this wish a
688 reality.  This is planning.  Planning is essentially a creative
689 endeavor at every step.
691 First, create the idea, what you want to achieve.  Very short-term
692 ideas do not need much more than thinking about how to do it.  But
693 long-term ideas require planning, since the mind cannot contain all
694 of the details.
696 Second, decide how the idea maps into the circumstances you find
697 yourself in.  Some environments will assist your plan, others
698 hinder it.  But step by step, identify every barrier to the
699 realization of your idea, and devise a countermeasure to overcome
700 it.  Once you've mapped things out from beginning to end,
701 accounting for unknowables as best you can, you now have your plan.
703 Third is to break the stages of the plan into parts that are not
704 overwhelming in their complexity.  It is at during this phase that
705 a plan is turned into task items, each to be accomplished within
706 the span of one day's time.  If a task requires several days, break
707 it up further.  The smaller it is, the less your mind will recoil
708 from attempting it.
710 Fourth is to monitor your progress, identifying problems and
711 correcting for them as you go.  Some plans start out unachievable,
712 and remain that way indefinitely, due to a simple lack of
713 observation.  If nothing is working for you, change it.  Otherwise,
714 your plan is merely a well-crafted wish.
716 Fifth is just to do the work, and be patient.  All good plans take a
717 great deal of time, and *cannot* happen immediately.  The groundwork
718 must be laid for each step, or else it will rest on an unsecure
719 foundation.  If you follow your plan doggedly, applying some time to
720 it each day or week, it @emph{will} happen.  Remember the story of the
721 tortoise and the hare.  I've even written a short essay on the
722 necessity of gradual accomplishment, which can be found at
723 @url{http://emacswiki.org/johnw/essays/node2.html}.
725 How can this software help?  Computers are ideal for manipulating
726 information, since they allow you to change things without erasing
727 or rewriting.  And since all plans change quite a bit during their
728 implementation, a planning program can be very helpful.
730 Start by adding the following to your @file{.emacs} (or @file{_emacs}):
732 @example
733 (load "planner")
734 @end example
736 Now, conceive your idea.  I can't believe there's nothing you want
737 from life.  More peace, time to enjoy the world, an end to war?
738 Everyone wants something.  Search deeply, and you will find
739 countless unhoped wishes lurking therein.  Choose one for now, and
740 think on it for a while.
742 Then open a file (using @kbd{C-x C-f}) within the directory named by
743 @code{planner-directory}.  Emacs will automatically recognize this file
744 as a planner file.  Name the file after your plan, such as
745 @file{BetterHealth}.
747 Choose an idea you really want to accomplish.  Struggle to
748 differentiate between the things you want because others want them,
749 and the things you want for yourself.  It takes quite an effort, and
750 may require a long time before you notice the difference.  Many people
751 want to be more healthy to be more attractive, which is an externally
752 driven goal.  Unless @emph{you} really want to accomplish what you
753 envision, the odds are you will fail.  Only our own wishes and dreams
754 possess enough personal energy to see themselves to fruition.  What
755 happens to many of us is simply that we never become conscious of
756 these dreams: what we love, what we desire most.  When I talk to
757 friends, so much of what I hear is things they want because they feel
758 they should want them.  There's just not enough energy there to pursue
759 a good plan, because nearly all of it is negative energy.
761 Do you know what you really want?  Don't worry, many people don't.
762 It's not a question anyone really wants us to pursue, because often
763 we don't want what others do; it doesn't contribute to the social
764 welfare, and all that nonsense.  Somehow we always forget that
765 what's good for the social welfare now, was someone else's crazy
766 dream a hundred years ago.  The human aversion to fundamental
767 change is always one's greatest enemy, so don't waste any time
768 getting bitter about it.
770 For the sake of argument I assume you really do want to be
771 healthier, because you've fallen in love with the ideal of purity,
772 or you understand the connection between your physical self and the
773 world around you, and how this can open up your spirit to desiring
774 more.  I assume.  :)
776 So you're in a Wiki file called @file{BetterHealth}.  Start typing.
777 Type anything related to your idea: what you think about it, your
778 ideas on it, @emph{and especially what the end will look like}.  If
779 you can't visualize the end, you can't plan, since planning is about
780 drawing a line between now and then.
782 When you've typed enough to gain a vision of your goal, start
783 drafting what the possible intermediate steps might be.  Then stop,
784 get up, walk around, enjoy life, and come back to it.  Taking a
785 long time at the beginning is not a bad idea at all, as long as
786 it's not forever.
788 As you chew on your idea, it will begin to become more and more
789 concrete.  You'll have ideas about the smallest pieces, and ideas
790 about the biggest pieces.  Keep going until it starts to take shape
791 before you, and you can see yourself in your mind's eye moving from
792 the present into the future.  Write down this progression, and the
793 sorts of things you might encounter along the way.
795 As you continue, you'll naturally discover discrete phases, or
796 ``milestones'' as managers love to call them.  These are very
797 important, because they let you know you're making progress.  I
798 recommend having a big party with friends every time you achieve a
799 milestone.  A typical plan might have between three and ten.
801 Between the milestones are the bigger pieces of your plan.  Name
802 these pieces using MixedCase words, and you'll notice that Emacs
803 colors and underlines them for you.  Like, FindGoodGym.  Hit return
804 on this highlighted word, and you'll find yourself in another,
805 blank file.  In this file, start drafting your sub-plan, just as
806 you did with the larger plan.  You should find it easier now, since
807 the scope is smaller.
809 As you break down further, you'll notice simple little things that
810 need to get done.  These are your tasks.  Every plan is a
811 succession of tasks.  The difference from reactivity is that each
812 task is part of the larger plan. This is what it means to be
813 systematic: that everything you do helps further your plan.  If you
814 have tasks in your day that contribute to no plan, they are
815 reactive.  Of course, life is full of these, but don't let them
816 take up more than 20% of your day.  If you allow yourself to be
817 dominated by reactive tasks, you'll regret it at the end of your
818 life.  I don't know this personally, but I do know that striving
819 for one's dreams -- and seeing them come to fruition -- is the
820 greatest joy a man can possess.  It is the essence of freedom, of
821 living, of creation.  Reactivity is the opposite of this, and
822 serves only to drain our energy and slacken our spirits.
824 Now that you've thought of a simple task, type @kbd{C-c C-t}. This
825 will ask for a brief description of the task, and when you plan to do
826 it. If you hit @key{RETURN} at the question @samp{When}, it assumes
827 you mean today. It will also pop up a three-month calendar at this
828 question, so you can see where your free days are. Make sure you set
829 the variable @code{mark-diary-entries-in-calendar} to @samp{t} in your
830 @file{.emacs} (or @file{_emacs}) file. This way, you can see which
831 days your appointments fall on. (Read about the Emacs Calendar and
832 Diary in @ref{Calendar/Diary, , , Emacs, GNU Emacs Manual}.)
834 @example
835 (setq mark-diary-entries-in-calendar t)
836 @end example
838 Once your task is in there, go back to your plan and keep
839 generating more tasks.  Generate them all!  Fully describe---as
840 tasks---everything necessary to bring your sub-plan to completion.
841 Don't create tasks for the other sub-plans.  You may have good idea
842 of what they'll look like, but don't bother rendering them into
843 tasks just yet.  Things will change too much between now and then,
844 for that to be a good use of your time.
846 Is your sub-plan now rendered into all of the tasks necessary to
847 reach your first milestone?  Great!  That is the purpose of
848 planner.el.  The rest is really up to you.  If you find that you
849 keep putting things off, and never do them, that's the surest sign
850 you're planning for someone else's dream, and not your own.
852 Here are some of the things planner.el can do, to help you manage
853 and track your tasks:
855 At the beginning of every day, type @kbd{M-x plan}.  This will jump
856 you to the top of the most recent task list before today.  If you
857 skipped a bunch of days, you'll have to open up those files on your
858 own.
860 Probably some of the tasks that day won't be finished -- that's OK.
861 Learning to properly estimate time is a magical, mystical art that few
862 have mastered.  Put your cursor on those undone tasks, and type
863 @kbd{C-c C-c}.  This will move them into today's task page.  You can
864 jump to today's task page at any time by typing @kbd{C-c C-n} (from a
865 Wiki or planning page).  I heartily recommend binding @kbd{C-c n}, to
866 jump you to this page from anywhere:
868 @example
869 (define-key mode-specific-map [?n] 'planner-goto-today)
870 @end example
872 As you look at your task sheet each day, the first thing to do is to
873 ``clock in'' to one of them.  This isn't necessary, and is only
874 helpful if you're around your computer a lot.  But by typing @kbd{C-c
875 C-i} (assuming you have my @file{timeclock.el} on your load-path), it
876 will log the time you spend working on your sub-plan (@pxref{Time
877 Intervals, , , Emacs, GNU Emacs Manual}).  This is helpful for viewing
878 your progress.  Type @kbd{C-c C-o} to clock out.
880 @kbd{C-M-p} and @kbd{C-M-n} will move a task up and down in priority.
881 Priority is represented by a letter A through C.  'A' tasks mean they
882 must be done that day, or else your plan is compromised and you will
883 have to replan.  'B' means they should be done that day, to further the
884 plan, otherwise things will be delayed.  'C' means you can put off the
885 task if you need to, although ultimately it will have to be done.
887 For reactive tasks, the letters mean something different: 'A' means
888 you must do it today, or somebody will roast your chestnuts over an
889 open fire.  'B' means you should do it today, or else someone will
890 be practicing patience at the day's end.  'C' means no one will
891 notice if you don't do it.
893 Again, reactive tasks are ENEMIES OF PLANNING.  Really, until you
894 see them that way, circumstances will push you around and steal
895 your life away.  We have only so many years to use, and everyone is
896 greedy to take them.  It's insidious, almost invisible.  A healthy
897 dislike of reactivity will do wonders for organizing your affairs
898 according to their true priority.
900 The last word that needs to be said concerns ``roles''.  Every person
901 stands in several positions in his life: husband, employee, manager,
902 etc.  These roles will tend to generate tasks not associated with any
903 immediate plan, but necessary to maintain the health and functioning
904 of the role.  My suggestion is to keep this the smallest possible
905 number, and fulfill those that remain well.  How you decide to
906 apportion your time between pursuing grand designs, and fostering deep
907 relationships, is a personal matter.  If you choose well, each will
908 feed the other.
910 I mention this to point that reactivity is something not
911 exclusively associated with tasks that have no master plan, because
912 being a father, for example, is something that rarely proceeds
913 according to orderly plans.  But the role of father itself is its
914 own plan, whose goal is ``to be the best one can'', and whose
915 component tasks are spending time on whatever comes up.  It is, in
916 a sense, an implicit plan.  But reactive tasks follow no plan at
917 all; they are parasites of time that suck the spirit away, whereas
918 properly chose roles actually help fulfill one's own inner needs.
919 At least, this is what I believe.
921 @defun plan force-days
922 Start your planning for the day, beginning with the last day's tasks.
924 If @code{planner-carry-tasks-forward} is non-nil, find the most recent
925 daily page with unfinished tasks and reschedule those tasks to
926 the current day.  If @var{force} is non-nil, examine all past daily
927 pages for unfinished tasks.
929 If @code{planner-carry-tasks-forward} is nil, visit the most recent
930 daily page.  If a daily page for today exists, visit that instead.
932 If @var{force-days} is a positive integer, scan that number of days.
933 If @var{force-days} is @samp{t}, scan all days.
935 @end defun
937 @node Why Use Planner,  , Planning based on the Franklin-Covey Approach, Overview
938 @comment  node-name,  next,  previous,  up
939 @section Why Use Planner?
940 @cindex Planner, why use
942 You can skip this essay if you just want to get started, or read it
943 for some insights into why the previous maintainer is crazy about it.
945 Why I Use Planner, by Sacha Chua
947 I thought about why I liked Planner. Planner as a TODO manager
948 isn't particularly special. Although I can assign tasks to categories
949 and see a breakdown of what projects are taking up my time, Evolution
950 and Microsoft Outlook provide more powerful task support. In other
951 task managers, you can e-mail tasks, assign multiple categories and
952 fill in all sorts of metadata. You can even synchronize your tasks
953 with devices like a phone or PDA. So why use Planner?
955 I realized that integration into my way of life and automatic context
956 clues are what really make planner tasks worth it for me. I don't have
957 to switch to another application to create a task. I can just hit a
958 keyboard shortcut. Planner uses a minibuffer to get the task
959 description. My windows are not rearranged in any way, and I can look
960 at the data that's relevant to a task. Not only that, tasks
961 automatically pick up context clues, like whom I'm talking to on IRC
962 or the file I'm editing at the moment. This cuts down on the explicit
963 context I need to include and makes it easier for me to bring up the
964 task again.
966 As a scheduler, Planner is also not particularly distinguished.
967 Sure, it can display my @file{~/diary}, but for that matter so can
968 @kbd{M-x diary}. Evolution and Outlook can give me a more graphical
969 view of my time, sync with my PDA, and coordinate my schedule with
970 other people. Those applications support detailed schedule entries
971 with powerful cyclic options. On the other hand, Planner gives me
972 a personal, plain text view and (at least the way I use it) requires
973 me to edit a separate file to add new appointments. (I've defined a
974 few shortcut keys to deal with this.) However, it does have one
975 advantage---my schedule is always loaded. I used to use Outlook on
976 Windows, but having my schedule in a separate application meant that I
977 actually looked at it very rarely, as I had turned off reminders
978 because they got annoying.
980 Planner's notes, however, are what really convinced me. I can hit
981 a keyboard shortcut from anywhere and type my notes into a buffer
982 which automatically keeps context information. After typing the note,
983 I can then categorize it. I think that the critical thing here is that
984 interruptions---fleeting thoughts---don't break my flow. I can just
985 pop up a remember buffer, stow that thought away somewhere, and go
986 back to it whenever I want. In contrast, creating a note in Outlook
987 means switching out of my application, making a couple of keystrokes,
988 typing the note in, and then switching back. The context switches make
989 it hard to keep track of where I am and what I'm supposed to remember.
990 Not only that, I need to enter context by hand. Even though I can
991 color my notes and reorganize them in Outlook, I find the context
992 switch too expensive. I used to keep notes in other knowledge
993 management tools as well. Some applications allowed me to
994 drag-and-drop links into the current note, and that was cool. But that
995 required a manual action, and those applications didn't feel
996 integrated into my way of working. (Note: You'll need remember.el for
997 this.)
999 I guess that's why I like Planner. Unlike other organizers which
1000 don't know anything about the applications I use, Planner tries
1001 its best to integrate into the way I work, and it's easy to extend.
1002 Fortunately I do almost all my work in Emacs, so I can think of my
1003 organizer as integrated into my e-mail client, Internet Relay Chat
1004 client, web browser, file editor and even games. It automatically
1005 picks up context clues from these applications and allows me to easily
1006 jump back to relevant files. It doesn't distract me. It allows me to
1007 key in data and then it gets out of my way.
1009 (That said, it's perfectly okay to use Planner even if you don't live
1010 in Emacs.)
1012 The processing that happens in the background is a bonus, and
1013 publishing my task list and notes online has greatly helped me. It
1014 gives other people a way to see what I'm working on and what I've
1015 planned for the future. Occasionally people write in with additional
1016 resources and helpful tips. (Again, this is purely optional. Many
1017 people don't publish their planner pages. Other people use really
1018 fine-grained access control.)
1020 I think the greatest feature of Planner, though, is its user
1021 community. Because Planner can be easily modified, we can experiment
1022 with a lot of new ideas quickly, and we can tailor Planner to fit our
1023 needs. I love checking my @samp{emacs-wiki-discuss} mail and finding
1024 out how people have tweaked Planner or would like to tweak Planner,
1025 and I've learned a lot by exchanging reflections on organizing one's
1026 life.
1028 I really wasn't an organization freak before I started using Planner.
1029 I often forgot to do my homework or answer important mail. I still
1030 procrastinate now, but at least it's all being kept track of
1031 somewhere! I also really like how Planner lets me to gradually improve
1032 how I'm doing things, and I feel I've come a long way.
1034 Please try it out! We'd love to hear how Planner can become
1035 @emph{your} personal information manager.
1037 @node Getting Started, More about Planner, Overview, Top
1038 @comment  node-name,  next,  previous,  up
1039 @chapter Getting Started
1041 At the end of this tutorial, you will be able to use Planner and
1042 related modules to keep track of your tasks, schedules and notes, all
1043 within the convenience of Emacs.
1045 There are two kinds of pages in a Planner wiki. Day pages show tasks,
1046 schedule, and notes for the day, while plan pages organize related tasks
1047 and notes into a single page.
1049 If you have not yet added planner to your @file{~/.emacs}, add the
1050 following lines:
1052 @example
1053 (add-to-list 'load-path "/path/to/muse/lisp")
1054 (add-to-list 'load-path "/path/to/planner")
1055 (add-to-list 'load-path "/path/to/remember")
1056 (require 'planner)
1057 @end example
1059 This will bring up the most recent day page with unfinished tasks or
1060 create a new day page if necessary. By default, planner pages are
1061 stored in @samp{~/Plans} (@code{planner-directory}).
1063 @menu
1064 * Tasks::                       
1065 * Schedule::                    
1066 * Notes::                       
1067 * Hyperlinks::                  
1068 * Example Page::                
1069 * Review::                      
1070 @end menu
1072 @node Tasks, Schedule, Getting Started, Getting Started
1073 @section Tasks
1075 Let us start by creating a task labelled
1077 @example
1078 Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss
1079 @end example
1081 From anywhere (even this info buffer!), call @kbd{M-x
1082 planner-create-task-from-buffer} to create a new task. Fill in the
1083 description and choose a date by:
1085 @itemize
1086 @item typing 1 - 31 to put the task on that day of the month,
1087 @item accepting the default (today) by pressing RET,
1088 @item selecting the date with mouse-1,
1089 @item
1090 typing +n (where in is an integer) to schedule the task in n days time,
1092 @item typing nil to make an undated task.
1093 @end itemize
1095 For now, accept the default (@samp{today}) by pressing @key{RET}.
1097 You will then be prompted for a plan page. Plan pages gather related
1098 tasks and notes, giving you an overview of what you've done so far.
1099 You can accept the default TaskPool, create your own plan page, or
1100 specify nil to make a task that is not associated with a plan page.
1101 For now, accept the default (@samp{TaskPool}) by pressing RET.
1103 You have created your first task. View today's page with
1104 @kbd{M-x planner-goto-today}. You will see a line of the form
1106 @example
1107 #B  _ Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss (TaskPool)
1108 @end example
1110 If you created the task from this page, then there will be an additional
1111 annotation:
1113 @example
1114 #B  _ Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss : Tasks (TaskPool)
1115 @end example
1117 The URL, @samp{TaskPool} and @samp{Getting Started} are
1118 hyperlinks. You can use TAB and S-TAB to navigate between them and RET
1119 to follow the link.
1121 Create more tasks using @kbd{M-x planner-create-task-from-buffer}.
1122 This is bound to @kbd{C-c C-t} in @code{planner-mode} pages
1123 for your convenience. For example, create the following tasks:
1125 @itemize
1126 @item
1127 @samp{Describe my current way of working and how I would like to work},
1128 for three days from now (@samp{+3}),
1129 @item
1130 @samp{Learn how to schedule a task}, an undated task (@kbd{nil}) on the
1131 TaskPool page,
1132 @item
1133 @samp{Browse through the Planner info manual} for today (@kbd{.} or
1134 accept the defaults), and
1135 @item
1136 @samp{Add (plan) to the end of my [[~/.emacs]]} for today, but without a
1137 plan page (specify @kbd{nil} at the plan page prompt)
1138 @end itemize
1140 Tip: I bind planner-create-task-from-buffer to "F9 t" so that I can
1141 easily call it from anywhere. You can do that with this elisp fragment:
1142 @code{(global-set-key (kbd "<f9> t") 'planner-create-task-from-buffer)}
1144 Next, visit the TaskPool by:
1146 @itemize
1147 @item
1148 @key{TAB}-bing or using the cursor and typing @key{RET} to follow the
1149 link,
1150 @item @kbd{C-x C-f TaskPool RET} to use @code{find-file}, or
1151 @item @kbd{C-c C-f TaskPool RET} to use @code{muse-project-find-file}
1152 @end itemize
1154 You can see an overview of the tasks as scheduled on different days.
1155 Unlike many personal information managers that store all of your data
1156 in one file and then perform magic in order to present different
1157 views, Planner uses plain text files. The data is duplicated and kept
1158 updated by functions. This makes it simpler and easier to modify,
1159 because what you see is (almost) what you get. On the other hand,
1160 you'll need to get used to either editing both files, or using the
1161 built-in functions for editing and updating files. If you prefer not
1162 to work with linked tasks, you can configure Planner to use only plan
1163 pages or use only day pages.
1165 The TaskPool page should list the tasks you created earlier. Go to the
1166 one named Learn how to schedule a task . Type @kbd{C-c C-c}
1167 (@code{planner-copy-or-move-task}) to schedule the task. Type RET to
1168 accept the default (today). Go to the day page by following the link
1169 or calling @kbd{M-x planner-goto} (@kbd{C-c C-j C-d} or the menu bar);
1170 you will see the newly-created task there. You can also use @kbd{C-c
1171 C-c} (@kbd{planner-copy-or-move-task}) to reschedule a task to an
1172 earlier or later date.
1174 Well, that task is done. To mark the task as completed, type @kbd{C-c
1175 C-x} (@code{planner-task-done}). You can also edit the status manually
1176 (change _ to X) as long as you remember to call @kbd{M-x
1177 planner-update-task} to update the link page as well. Updating relies on
1178 the task description being the same, so do not edit this manually.
1180 Quick summary of commands:
1182 @itemize
1183 @item
1184 Go to today's page: @kbd{M-x plan} to carry unfinished tasks forward, or
1185 @kbd{M-x planner-goto-today} to just go to today's page.
1186 @item
1187 Create a task: @kbd{C-c C-t} (@code{planner-create-task-from-buffer}),
1188 or type a task manually (call M-x planner-update-task if the task is
1189 linked)
1190 @item
1191 Mark a task as done: @kbd{C-c C-x} (@code{planner-task-done}), or edit
1192 the task and call @kbd{M-x planner-update-task}
1193 @item Edit a task description: @kbd{M-x planner-edit-task-description}
1194 @item Reschedule a task: @kbd{C-c C-c} (@code{planner-copy-or-move-task})
1195 @item
1196 Reschedule many tasks: Mark a region and use @kbd{M-x
1197 planner-copy-or-move-region}
1198 @item
1199 Change the plan of a task: @kbd{M-x planner-replan-task}, or @kbd{C-c
1200 C-c} (@code{planner-copy-or-move-task}) with a plan page
1201 @item Delete a task: @kbd{M-x planner-delete-task}
1202 @item
1203 Reorder tasks: @key{M-p} (@code{planner-raise-task}) and @key{M-n}
1204 (@code{planner-lower-task}), or normal editing commands like kill and
1205 yank
1206 @item Change task priorities (@samp{#A} > @samp{#B} > @samp{#C}):
1207       @key{C-M-p} (@code{planner-raise-task-priority}) and
1208       @key{C-M-n} (@code{planner-lower-task-priority}),
1209       or edit the task and call @kbd{M-x planner-update-task}.
1210 @end itemize
1212 You can save your tasks with @kbd{C-x C-s} the same way you save any
1213 other file, or Emacs will prompt you to save it when you exit.
1215 @node Schedule, Notes, Tasks, Getting Started
1216 @comment  node-name,  next,  previous,  up
1217 @section Schedule
1219 This is free-form. You can put anything you want into this, or remove
1220 it from @code{planner-day-page-template} entirely. Some people use it
1221 to keep track of their plans for the day with tables like this:
1223 @example
1224 hh:mm | hh:mm | activity
1225 hh:mm | hh:mm | activity
1226 hh:mm | hh:mm | activity
1227 @end example
1229 Remember, Planner files are just plain text. You can add new sections
1230 or remove old ones, or use the suggested sections for entirely
1231 different activities.
1233 @node Notes, Hyperlinks, Schedule, Getting Started
1234 @comment  node-name,  next,  previous,  up
1235 @section Notes
1237 You can put anything you want in this section, or remove it from your
1238 @code{planner-day-page-template} entirely.
1240 You may be interested in @file{remember-planner.el}, part of the
1241 Remember package. @code{remember-planner.el} makes it easy to create
1242 notes from anywhere in Emacs, and it uses the same hyperlink-sensing
1243 code that Planner uses. Notes added by remember-planner.el look like
1244 this:
1246 @example
1247 .#1 Headline 00:00
1248 Body
1249 @end example
1251 and are outlined at the H2 level in published HTML.
1253 If you include the following in your @file{~/.emacs}:
1255 @example
1256 (require 'remember-planner)
1257 (setq remember-handler-functions '(remember-planner-append))
1258 (setq remember-annotation-functions planner-annotation-functions)
1259 @end example
1261 you can easily create context-aware notes. @kbd{M-x remember} will
1262 create a dedicated buffer for you to fill in your note. If Planner
1263 recognizes the buffer as one with context then it will include a
1264 hyperlink at the bottom. The first line is used as a title, so make it
1265 short and meaningful. The rest of the text will be used as the body of
1266 the note. Try it now by creating a note, perhaps about things you'd
1267 like to remember from this tutorial.
1269 Typing @kbd{C-c C-c} after composing will prompt for a plan page to
1270 put this on, with auto-completion. By default, notes will go on
1271 today's page only. If you specify a plan page, the note will go on
1272 today's page and on the plan page. Let's try specifying
1273 @samp{TaskPool} for the note.
1275 If you look at today's page, you'll find a timestamped note that links
1276 to @samp{TaskPool}. Likewise, @samp{TaskPool} contains a note that
1277 links to today's page. Because the text is copied, changes in one will
1278 not be automatically reflected in the other. To update the linked page
1279 after editing a note, use @kbd{M-x planner-update-note}. To change the
1280 plan page of a note, use @kbd{planner-replan-note}.
1282 @node Hyperlinks, Example Page, Notes, Getting Started
1283 @section Hyperlinks
1284 @cindex hyperlinks
1286 Planner automatically creates context-sensitive hyperlinks for your
1287 tasks and notes when you use @code{planner-create-task-from-buffer}
1288 and @code{remember}.
1290 Blue links indicate URLs and Planner pages that already exist. Red links
1291 indicate Planner pages that have not yet been created.
1293 Middle-click or type @key{RET} on any link to view the link in the
1294 current window. Shift-middle-click or type @key{S-RET} to view the
1295 link in another window. @key{TAB} goes to the next link, while
1296 @key{S-TAB} goes to the previous one.
1298 You can pick up hyperlinks using the @code{planner-annotation-as-kill}
1299 function.
1301 @defun planner-annotation-as-kill
1302 Create a context-sensitive hyperlink for the current buffer and copy
1303 it to the kill ring. When called with a prefix argument, prompt for
1304 the link display name.
1305 @end defun
1307 You can then paste it into any Planner buffer by using @kbd{M-x yank}
1308 or the keyboard shortcut.
1310 Hyperlinks are a powerful feature of Planner. You can use them to
1311 hyperlink to mail, news, Web pages, and even IRC connections. See the
1312 section on @ref{Managing Your Information} to find out how to enable
1313 support for various parts of Emacs. Want to add a new hyperlink
1314 scheme? Check out the source code for examples or ask on the mailing
1315 list for help.
1317 @node Example Page, Review, Hyperlinks, Getting Started
1318 @comment  node-name,  next,  previous,  up
1319 @section Example Page
1320 @cindex example page
1321 @cindex planning page, example
1323 An example planner file is given below. You'll notice that Planner
1324 does not have a well-defined user interface. Rather, it's free-form
1325 and open, allowing you to adapt it to your preferences.
1327 @example
1328 ----------------------------------------------------------------------
1329 * Tasks
1331 #B  _ Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss (TaskPool)
1332 #B  _ Browse through the Planner info manual (TaskPool)
1333 #B  _ Add (plan) to the end of my ~/.emacs
1334 #B  X Learn how to schedule a task (TaskPool)
1336 * Schedule
1338 18:00 | 19:00 | Learn how to use Planner
1340 * Notes
1342 Notes are free-form. You can put anything you want into this.
1344 .#1 This is note number one
1346 Notes on note number one!
1348 .#2 This weird ".#2" syntax is used for allout.el enumerated lists
1350 It makes using allout-mode very handy.
1352 @end example
1354 @node Review,  , Example Page, Getting Started
1355 @comment  node-name,  next,  previous,  up
1356 @section Review
1358 @itemize
1360 @item @emph{Ideas for using planner more effectively:}
1362 @itemize
1363 @item
1364 Add @code{(plan)} to the end of your @file{~/.emacs} so that you are
1365 reminded about your tasks every day.
1367 @item
1368 Bind useful functions to shortcut keys and get used to creating tasks
1369 and notes from anywhere.
1371 @item
1372 Think about how you plan your day and look for ways to improve it. Ask
1373 the mailing list for tips.
1375 @item
1376 Browse the rest of this manual, the source code, and other resources on
1377 the Net for tidbits you can use.
1379 @item Have fun!
1380 @end itemize
1382 @item @emph{Useful functions outside planner buffers:}
1384 @itemize
1385 @item @code{planner-create-task-from-buffer}
1386 @item @code{remember}
1387 @item @code{planner-goto-today}
1388 @item @code{planner-goto}
1389 @item @code{plan}
1390 @end itemize
1392 @item @emph{Useful functions inside planner buffers:}
1394 @itemize
1395 @item @kbd{C-c C-t} (@code{planner-create-task-from-buffer})
1396 @item @kbd{C-c C-x} (@code{planner-task-done})
1397 @item @kbd{M-x planner-edit-task-description}
1399 @item
1400 @kbd{C-c C-c} (@code{planner-copy-or-move-task}), @kbd{M-x
1401 planner-copy-or-move-region}
1403 @item @kbd{M-x planner-replan-task}
1404 @item @kbd{M-x planner-delete-task}
1406 @item
1407 @key{M-p} (@code{planner-raise-task}) and @key{M-n}
1408 (@code{planner-lower-task})
1410 @item @key{C-M-p} (@code{planner-raise-task-priority}) and
1411       @key{C-M-n} (@code{planner-lower-task-priority}),
1412 @item @code{planner-replan-note}
1413 @item @code{planner-update-note}
1414 @end itemize
1416 @end itemize
1418 That's all you need to know in order to use Planner as a basic TODO
1419 and notes manager, but there's a whole lot more. Read through this
1420 manual and our mailing list archives for lots of wonderful ideas about
1421 planning in Emacs!
1423 @node More about Planner, Managing Your Information, Getting Started, Top
1424 @comment  node-name,  next,  previous,  up
1425 @chapter More about Planner
1427 @menu
1428 * Basic Configuration::         
1429 * Navigation::                  
1430 * More about Tasks::            
1431 * More about Notes::            
1432 * Making Files Pretty::         
1433 * Annotations::                 
1434 * Interactive Lisp::            
1435 * Publishing::                  
1436 * Experimental Functions::      
1437 @end menu
1439 @node Basic Configuration, Navigation, More about Planner, More about Planner
1440 @section Basic Configuration
1441 @comment node-name, next, previous, up
1443 You may want to customize the following variables before you begin
1444 using Planner.
1446 @defopt planner-directory
1447 Plain-text planner files will be stored in this directory.  Default:
1448 @file{~/Plans}.
1449 @end defopt
1451 @defopt planner-publishing-directory
1452 Planner HTML files will be published to this directory.  If you want
1453 to view your tasks, schedule and notes using a web browser, upload the
1454 contents of this directory to your website.  Default:
1455 @file{~/WebWiki}.
1456 @end defopt
1458 If you change these variables after Planner is loaded, please be sure
1459 to run @code{M-: (planner-update-wiki-project)}. It might be a good idea
1460 to add @code{(planner-update-wiki-project)} to the end of your
1461 @file{~/.emacs}.
1463 @node Navigation, More about Tasks, Basic Configuration, More about Planner
1464 @comment  node-name,  next,  previous,  up
1465 @section Starting with Day Pages
1467 @command{planner-goto-today} opens today's page.  Day pages are named
1468 @samp{YYYY.MM.DD} and contain your notes for the day.
1470 You should see a file that looks like this:
1472 @example
1473 * Tasks
1476 * Schedule
1478 * Notes
1479 @end example
1481 You can type anything you want into this file.  You can add or delete
1482 sections.  When you save, Emacs stores your information in
1483 @code{planner-directory}.
1485 Use the following commands to navigate through day pages:
1487 @defun plan
1488 Start planning the day.  If @code{planner-carry-tasks-forward} is
1489 non-nil, copy the most recent unfinished tasks to today's page, else
1490 open the most recent page.
1491 @end defun
1493 @defun planner-goto (@kbd{C-c C-j C-d})
1494 Prompt for a date using a calendar pop-up and display the
1495 corresponding day page.  You can specify dates partially.  The current
1496 year and month are used if omitted from the input.  For example, if
1497 today is 2004.05.05, then
1499 @itemize
1500 @item @kbd{+1} is one day from now, or @samp{2004.05.06}
1501 @item @kbd{-1} is one day before now, or @samp{2004.05.04}
1502 @item @kbd{12} is equivalent to @samp{2004.05.12}
1503 @item @kbd{8.12} is equivalent to @samp{2004.08.12}
1504 @item @kbd{2005.08.12} is a full date specification
1505 @end itemize
1507 In the calendar buffer, you can also left-click or press @key{RET} on
1508 a date to select it.
1509 @end defun
1511 @defun planner-goto-today (@kbd{C-c C-j C-j})
1512 Display today's page. Create the page if it does not yet exist.
1513 @end defun
1515 @defun planner-goto-tomorrow (@kbd{C-c C-j C-t})
1516 Goto the planner page days @var{after} the currently displayed date.
1517 If @var{days} is nil, go to the day immediately after the currently
1518 displayed date.  If the current buffer is not a daily planner page,
1519 calculate date based on today.
1520 @end defun
1522 @defun planner-goto-yesterday (@kbd{C-c C-j C-y})
1523 Goto the planner page @var{days} before the currently displayed date.
1524 If @var{days} is nil, go to the day immediately before the currently
1525 displayed date.  If the current buffer is not a daily planner page,
1526 calculate date based on today.
1527 @end defun
1529 @defun planner-goto-most-recent
1530 Go to the most recent day with planning info.
1531 @end defun
1533 @defun planner-goto-previous-daily-page
1534 Goto the last plan page before the current date.
1535 The current date is taken from the day page in the current
1536 buffer, or today if the current buffer is not a planner page.
1537 Do not create pages if they do not yet exist.
1538 @end defun
1540 @defun planner-goto-next-daily-page
1541 Goto the first plan page after the current date.
1542 The current date is taken from the day page in the current
1543 buffer, or today if the current buffer is not a planner page.
1544 Do not create pages if they do not yet exist.
1545 @end defun
1547 @defun planner-goto-plan-page page
1548 Opens @var{page} in the the @code{planner-project} Wiki.  Use
1549 @code{planner-goto} if you want fancy calendar completion.
1550 @end defun
1552 @defun planner-show date
1553 Show the plan page for @var{date} in another window, but don't select
1554 it.  If no page for @var{date} exists, return nil.
1555 @end defun
1558 @node More about Tasks, More about Notes, Navigation, More about Planner
1559 @comment  node-name,  next,  previous,  up
1560 @section More about Tasks
1561 @cindex tasks, more about
1563 This section is divided into three parts. In the first part, you can
1564 read about all the options, strategies and commands to help you
1565 efficiently add new tasks to your planner. In the second part, we'll go
1566 over all of the aspects of Planner that relate to organizing, editing,
1567 rescheduling and viewing the tasks you've already created. Finally,
1568 we'll cover some ways to step back and look at various reports and
1569 overviews that can be generated from your planner pages.
1571 You may also be interested in tracking time spent on tasks with
1572 @ref{Timeclock} and estimating project completion time with
1573 @ref{Schedule} (also see @pxref{schedule.el}).
1575 @menu
1576 * Creating New Tasks::          
1577 * Organizing Your Tasks::       
1578 * Task Reports and Overviews::  
1579 @end menu
1581 @node Creating New Tasks, Organizing Your Tasks, More about Tasks, More about Tasks
1582 @comment  node-name,  next,  previous,  up
1583 @subsection Creating New Tasks
1584 @cindex tasks, creating
1586 Planner makes it very easy to quickly add something to your list of
1587 tasks. Once you get used to the basics of
1588 @command{planner-create-task-from-buffer}, you might want to take a
1589 closer look at some things in Planner that can help you create new tasks
1590 in a way that fits with your system.
1592 @menu
1593 * Creating a Task::             
1594 * Task Priorities::             
1595 * Task IDs::                    
1596 * Cyclic Tasks::                
1597 * Task Detail::                 
1598 * Deadlines::                   
1599 @end menu
1601 @node Creating a Task, Task Priorities, Creating New Tasks, Creating New Tasks
1602 @comment  node-name,  next,  previous,  up
1603 @subsubsection Creating a Task
1604 @cindex tasks, creating
1606 You can create a task from any buffer in Emacs by invoking
1607 @command{M-x planner-create-task-from-buffer}.
1609 This command does more than just add an item to your list of tasks. It
1610 also connects that item to some useful context information.
1612 If you create a task while viewing any buffer other than a Planner
1613 day page, Planner will associate the task with a hyperlink to that
1614 buffer. Try it now by creating a task from this Info buffer.
1616 @enumerate
1617 @item @kbd{M-x planner-create-task-from-buffer}
1618 @item
1619 When prompted for the task name, enter @kbd{Learn how to change a task's
1620 status} and press @key{RET}.
1622 @item
1623 When prompted for the date, press @key{RET} to schedule the task for
1624 today.
1626 @item
1627 When prompted for the project page, press @key{RET} to accept the
1628 default page of @samp{TaskPool}. This is a page for tasks not connected
1629 to a larger plan.
1631 @end enumerate
1633 Planner prompts you for two pieces of information when you ask it
1634 to create a task. First, it asks you when you would like to have the
1635 task show up in your planner. If you would like it to be scheduled for
1636 today, you can just hit @key{RET}. If you would like it to be
1637 scheduled for some day during the current month, you can just enter
1638 the date, without the month, like @samp{16}. If you would like it to
1639 be scheduled for some day in a future month of the current year, you
1640 can enter just the month and date, like @samp{06.16}. If you would
1641 like to schedule something for next year, then enter the full date,
1642 like @samp{06.16.2005}. If you do not want this task to appear on a
1643 day page at all, you can enter @samp{nil}.
1645 The second piece of information Planner asks for is the name of
1646 the project to associate the task with. In the above example, you
1647 associated the task with the project ``TaskPool'', which means that
1648 you did not want to associate the task with a particular project or
1649 goal in your life. Another way to do this is to answer the project
1650 prompt by entering @samp{nil}. But instead, you might enter
1651 @samp{LearnPlanner} as the project. This creates a new page called
1652 ``LearnPlanner'' in your planner directory and places an entry for the
1653 task on that page.
1655 The task then exists in two places: once on your day page, to show how
1656 it fits into your daily work; and once on a project page, to show how
1657 it fits into your larger projects and goals. In the future you might
1658 add related tasks like, ``Memorize Planner keybindings''. These
1659 tasks might be scattered over weeks or months worth of day pages, but
1660 as long as you enter the same project name for each, you will have a
1661 way to look at them all together on a single project page.
1663 Planner also creates hyperlinks to enable you to easily move back
1664 and forth between the day page system and the project page
1665 system. Each task on a day page will have a hyperlink to its project
1666 page. Each task on a project page will have a hyperlink to its day
1667 page.
1669 After using Planner for a while, you may find yourself with quite
1670 a few project pages. Keep in mind that completion is enabled at the
1671 project prompt when you create a task, so hitting @kbd{SPC} or
1672 @kbd{TAB} at the prompt will show you a list of your current project
1673 pages.
1675 Once the task is created, you are returned to the buffer you were
1676 working in again, Planner gets out of your way, and you can go on
1677 about your business. Later on, when you decide to actually work on
1678 that ``Memorize Planner keybindings'' task, you will be able to
1679 follow the hyperlink from that task on your day or project page
1680 directly to the relevant node in the Planner info file!
1682 By default, @command{M-x planner-create-task-from-buffer} creates
1683 medium-priority tasks, marked with the letter @samp{B}.  But you can
1684 specify a particular priority or change the default (@pxref{Task
1685 Priorities}).
1687 You don't have to use @command{planner-create-task-from-buffer} to
1688 create tasks. You can also create new tasks manually by typing them
1689 directly on your day or project page in the format Planner expects. You
1690 can even still create hyperlinks by using Muse formatting as you
1691 manually type the new task. Keep in mind also that tasks do not have to
1692 be linked to any other page.
1694 For convenience, @command{planner-create-task-from-buffer} is bound to
1695 @kbd{C-c C-t} in Planner buffers.  You can bind
1696 @command{planner-create-task-buffer} to a shortcut key.  See the
1697 manual for your Emacs distribution to find out more about keybinding.
1699 @defun planner-create-task-from-buffer title date plan-page
1700 Create a new task named @var{title} on @var{date} based on the current
1701 buffer.
1703 With a prefix, associate the task with the current planner page.  If
1704 you create a task on a date page, you will be prompted for a plan
1705 page.  If you create a task on a plan page, you will be prompted for a
1706 day page.  If nil is specified, the task is created only on the
1707 current page.
1709 See @code{planner-create-task} for more information.
1711 The new task is created at the top or bottom of the first block of
1712 tasks on the scheduled day page (if any), depending on the value of
1713 @code{planner-add-task-at-end-flag}.
1714 @end defun
1716 @defun planner-create-task title date annotation plan-page
1717 Create a new task named @var{title} based on the current Wiki page.
1718 If @var{date} is non-nil, makes a daily entry on @var{date}, else
1719 makes an entry in today's planner page. It's assumed that the current
1720 Wiki page is the page you're using to plan an activity. Any time
1721 accrued to this task will be applied to that page's name in the
1722 timelog file, assuming you use timeclock (@pxref{Time Intervals, , ,
1723 Emacs, GNU Emacs Manual}). If @var{annotation} is non-nil, it will be
1724 used for the page annotation. If @var{plan-page} is non-nil, the task
1725 is associated with the given page.
1727 With a prefix, associate the task with the current planner page.  If
1728 you create a task on a date page, you will be prompted for a plan
1729 page.  If you create a task on a plan page, you will be prompted for a
1730 day page.  If nil is specified, the task is created only on the
1731 current page.
1733 You probably want to call @code{planner-create-task-from-buffer}
1734 instead.
1736 The new task is created at the top or bottom of the first block of
1737 tasks on the scheduled day page (if any), depending on the value of
1738 @code{planner-add-task-at-end-flag}.
1739 @end defun
1741 @node Task Priorities, Task IDs, Creating a Task, Creating New Tasks
1742 @comment  node-name,  next,  previous,  up
1743 @subsubsection Task Priorities
1745 You can set the priority of a task when you create it, rather than
1746 waiting to adjust it after the fact. In order to do this, call the
1747 function corresponding to the priority you want. You probably want to
1748 bind these functions to some keys if you intend to use them much.
1750 @itemize
1751 @item @code{planner-create-high-priority-task-from-buffer}
1752 creates a task with priority @samp{A}.
1754 @item @code{planner-create-medium-priority-task-from-buffer}
1755 creates a task with priority @samp{B}.
1757 @item @code{planner-create-low-priority-task-from-buffer}
1758 creates a task with priority @samp{C}.
1759 @end itemize
1761 Or, you can change the default priority of
1762 @command{planner-create-task-from-buffer} by customizing
1763 @var{planner-default-task-priority}.
1765 You can actually use just one general priority, but using more than
1766 one color-codes your tasks and gives you a better overview of your
1767 day.
1770 @node Task IDs, Cyclic Tasks, Task Priorities, Creating New Tasks
1771 @comment  node-name,  next,  previous,  up
1772 @subsubsection Task IDs
1773 @cindex @file{planner-id.el}, using
1774 @cindex tasks, IDs
1776 After loading @file{planner.el}, make sure that @file{planner-id.el} is
1777 in your load path and add this to your @file{.emacs} (or @file{_emacs}):
1779 @example
1780 (require 'planner-id)
1781 @end example
1783 This module modifies the behavior of @file{planner.el}, adding global
1784 task IDs so that tasks can be edited and updated. Planner IDs are of
1785 the form @samp{@{@{Identifier:Number@}@}}.
1787 @defopt planner-id-add-task-id-flag
1788 Non-nil means automatically add global task IDs to newly-created
1789 tasks. If nil, use @command{planner-id-add-task-id} to add IDs to
1790 existing tasks, or @command{planner-id-add-task-id-to-all} to add to
1791 all tasks on the current page. (Development version 2004.05.05:
1792 planner--dev--1.0--patch-81)
1793 @end defopt
1795 @defopt planner-id-update-automatically
1796 Non-nil means automatically update linked tasks whenever a page is
1797 saved. If nil, use @command{planner-update-task} to update the linked
1798 task. By default, linked tasks are automatically updated.
1799 @end defopt
1801 @defopt planner-id-tracking-file
1802 File that contains ID tracking data. This file is automatically
1803 overwritten.
1804 @end defopt
1806 The following interactive functions are defined in @file{planner-id.el}:
1808 @defun planner-id-jump-to-linked-task &optional info
1809 Display the linked task page. If @var{info} is specified, follow that
1810 task instead.
1811 @end defun
1813 @defun planner-id-add-task
1814 Add a task ID for the current task if it does not have one
1815 yet. Update the linked task page, if any.
1816 @end defun
1818 @defun planner-id-update-tasks-on-page &optional force
1819 Update all tasks on this page. Completed or cancelled tasks are not
1820 updated. This can be added to @code{write-file-functions}. If
1821 @var{force} is non-nil, completed and cancelled tasks are also
1822 updated.
1823 @end defun
1825 @defun planner-id-add-task-id-to-all
1826 Add a task ID for all the tasks on the page. Update the linked page,
1827 if any.
1828 @end defun
1830 @defun planner-id-search-id id
1831 Search for all occurrences of @var{id}.
1832 @end defun
1834 @defun planner-id-follow-id-at-point
1835 Display a list of all pages containing the ID at point.
1836 @end defun
1838 @defun planner-id-follow-id-at-mouse event
1839 Display a list of all pages containing the ID at mouse. @var{event} is
1840 the mouse event.
1841 @end defun
1843 @node Cyclic Tasks, Task Detail, Task IDs, Creating New Tasks
1844 @comment  node-name,  next,  previous,  up
1845 @subsubsection Cyclic Tasks
1846 @cindex @file{planner-cyclic.el}, using
1847 @cindex tasks, cyclic
1848 @cindex cyclic tasks
1849 @cindex recurring tasks
1851 If there are tasks that you have to do regularly, you can have Planner
1852 schedule those tasks automatically.
1854 Make sure that @file{planner-cyclic.el} is in your load path and add
1855 this to your @file{.emacs} (or @file{_emacs}):
1857 @example
1858 (require 'planner-cyclic)
1859 @end example
1861 Create a diary file named @file{~/.diary.cyclic-tasks}
1862 (or the value of @code{planner-cyclic-diary-file}). Here is an example:
1864 @example
1865 Tuesday #B0 _ Study Japanese
1866 Friday #B0 _ Study Japanese (JapaneseStudies)
1867 @end example
1869 The first will be a plain task, the second will be linked.  The first
1870 line will automatically create its task every Tuesday, while the
1871 second will create it every Friday.
1873 You can schedule tasks in a variety of ways. This module uses the same
1874 syntax for specifying when tasks will be scheduled as the Emacs diary
1875 uses for appointments and events. See @ref{Date Formats, the GNU Emacs
1876 Manual, Date Formats,emacs, the GNU Emacs Manual}, and @ref{Sexp Diary
1877 Entries, the GNU Emacs Lisp Reference Manual, Sexp Diary
1878 Entries,elisp, the GNU Emacs Lisp Reference Manual}, for a full
1879 description of the possibilities.
1881 By default, planner-cyclic creates multiple tasks if you let tasks build
1882 up (that is, the next Tuesday rolls around and you @emph{still} haven't
1883 marked the task as done.) To turn off this behavior:
1885 @example
1886 (setq planner-cyclic-diary-nag nil)
1887 @end example
1889 @file{planner-cyclic-diary} includes the following interactive
1890 functions:
1892 @defun planner-cyclic-create-tasks-maybe
1893 Maybe create cyclic tasks. This will only create tasks for future
1894 dates or today.
1895 @end defun
1897 @node Task Detail, Deadlines, Cyclic Tasks, Creating New Tasks
1898 @comment  node-name,  next,  previous,  up
1899 @subsubsection Task Detail
1900 @cindex tasks
1902 You may find your planner pages getting very full, so that you want to
1903 have one broad task entry be linked to a more specific list of
1904 sub-tasks. Or, maybe you want to have a number of notes linked to a
1905 particular task.
1906 @cindex tasks, sub-
1907 @cindex tasks, meta-
1908 @cindex meta-tasks
1909 @cindex sub-tasks
1911 This can be done with targets.  You can have a task that is really a
1912 meta-task:
1914 @example
1915 #A1  _ Do things in RevelleLog#13 @{@{Tasks:101@}@} (RevelleLog)
1916 @end example
1918 @samp{RevelleLog#13} could then be a list of sub-tasks in the form of
1919 a note, or any kind of note.
1921 Or, instead of pointing to a particular note on @samp{RevelleLog}, you
1922 could have the whole page be tasks that you enter in manually, without
1923 linking them to another page. You can just type them in like this:
1925 @example
1926 #A1  _ First specific thing to do
1927 @end example
1929 This way, the tasks will only appear on this specific project page,
1930 and not on any daily page, so you only see them when you want to look
1931 up all of the specific tasks associated with @samp{#A1  _ Do things in
1932 RevelleLog @{@{Tasks:101@}@} (RevelleLog)}.
1934 As you can see, the ability to manually enter tasks is one of
1935 Planner's nicest features. It allows you to create tasks that are
1936 not assigned to a specific date (by manually entering them on a
1937 project page with no date) or to a specific project (by manually
1938 entering them on a day page with no project). Yet as long as you enter
1939 them using the syntax it understands, Planner will continue to
1940 recognize them as tasks.
1942 Another way to have a task not be connected to a particular date is to
1943 do @kbd{C-c C-c} (@code{planner-copy-or-move-task}) and specify
1944 @samp{nil} when asked for the date.
1946 If you would like to see a list of all of your unfinished tasks, do
1947 @kbd{M-x planner-list-unfinished-tasks}. This function only checks
1948 day plan pages, not project pages.
1950 @node Deadlines,  , Task Detail, Creating New Tasks
1951 @comment  node-name,  next,  previous,  up
1952 @subsubsection Deadlines
1953 @cindex tasks, deadlines for
1954 @cindex deadlines, task
1955 @cindex @file{planner-deadline.el}, using
1957 You can use @file{planner-deadline.el} to automatically recalculate
1958 days to a deadline by adding @code{(require 'planner-deadline)} to
1959 your @file{~/.emacs}. With the default setup, make your tasks of the
1960 form
1962 @example
1963 #A0 _ Some task @{@{Deadline: 2004.09.12@}@}
1964 @end example
1966 (Note: There must be at least one space after the colon.)
1968 After you run @code{planner-deadline-update} to update task descriptions,
1969 the task will be of the form
1971 @example
1972 #A0 _ Some task @{@{Deadline: 2004.09.12 - 2 days@}@}
1973 @end example
1975 @defopt planner-deadline-regexp
1976 Regular expression for deadline data.
1977 The special deadline string should be regexp group 1. The
1978 date (YYYY.MM.DD) should be regexp group 2.
1979 @end defopt
1981 @defun planner-deadline-update
1982 Replace the text for all tasks with deadlines. Deadlines are of the
1983 form @samp{@{@{Deadline: YYYY.MM.DD@}@}} by default.
1984 @end defun
1986 @defun planner-deadline-change &optional date
1987 Change the deadline of current task to @var{date}. If @var{date} is nil,
1988 remove deadline.
1989 @end defun
1991 @node Organizing Your Tasks, Task Reports and Overviews, Creating New Tasks, More about Tasks
1992 @comment  node-name,  next,  previous,  up
1993 @subsection Organizing Your Tasks
1994 @cindex tasks, organizing
1995 @cindex tasks, old
1997 Okay, now that you've gotten the hang of creating tasks, you're probably
1998 facing a really long list of things to do. How can you organize them so
1999 that they don't overwhelm you? Planner gives you a number of strategies
2000 for dealing with large numbers of tasks.
2002 @enumerate
2003 @item Arrange your tasks in the rough order you're going to do them.
2004 @item Use #A, #B and #C task priorities to differentiate between
2005       high-priority, normal and low-priority tasks.
2006 @item Schedule your tasks onto different days.
2007 @item Group your tasks into plan pages.
2008 @item Don't schedule all your tasks.
2009 @end enumerate
2011 @enumerate
2013 @item @emph{Task order}
2015 To remind yourself to do tasks in a certain order, simply edit the
2016 lines so that they're in the order you want. You can use normal
2017 editing commands like kill, yank and transpose-line to reorder the
2018 tasks, or use @key{M-p} (@code{planner-raise-task}) and @key{M-n}
2019 (@code{planner-lower-task}) to rearrange the tasks.
2021 @item @emph{Task priorities}
2023 By default, tasks are created with medium priority (@samp{#B}). You
2024 can make a task high-priority (@samp{#A}) or low-priority (@samp{#C})
2025 by manually editing the task and calling M-x planner-update-task to
2026 update the linked page. Alternatively, you can use @key{C-M-p}
2027 (@code{planner-raise-task-priority}) and @key{C-M-n}
2028 (@code{planner-lower-task-priority}) to modify the task and update the
2029 linked page.
2031 You can edit the priority of a task using @kbd{M-x
2032 planner-edit-task-priority}, or manually edit it and call @kbd{M-x
2033 planner-update-task} to update tasks on the linked page.
2035 @item @emph{Schedule your tasks on different days}
2037 You don't have to do everything today. Is this a task you would rather
2038 do tomorrow? Schedule it for then instead. You can specify @samp{+n}
2039 or @samp{-n} whenever you are asked for a date, where @var{n} is the
2040 number of days before or after the current file's date or today.
2041 Don't over-procrastinate things, though!
2043 @item @emph{Plan pages}
2045 Plan pages let you group related tasks and notes together for easy
2046 reference. For example, you could have a plan page for each major
2047 project or goal in your life, like @samp{GoodHealth} or
2048 @samp{FurtherStudies}.
2050 Although plan pages start by grouping everything under a @samp{*
2051 Tasks} header, you can organize your plan pages in different ways. For
2052 example, you can separate groups of tasks with blank lines, and
2053 Planner will sort tasks within each group.
2055 @item @emph{Tasks without dates}
2057 Plan pages also allow you to have undated tasks or tasks with no
2058 particular deadlines. This keeps your daily task list small and
2059 manageable while making it easier for you to find things to do if you
2060 have free time. Make sure you check your plan pages regularly so that
2061 you don't completely forget about them.
2063 For automated scheduling of the next task on a plan page after you
2064 complete a task, see the section in
2065 @uref{http://sacha.free.net.ph/notebook/emacs/planner-config.el} named
2066 ``Schedule next undated task from same project''.
2068 @end enumerate
2071 @menu
2072 * Multiple Projects::           
2073 * Viewing Tasks::               
2074 * Modifying Tasks::             
2075 * Carrying Over Unfinished Tasks::  
2076 * Task Numbering::              
2077 * Task Ranks::                  
2078 * Grouping Tasks::              
2079 @end menu
2081 @node Multiple Projects, Viewing Tasks, Organizing Your Tasks, Organizing Your Tasks
2082 @comment  node-name,  next,  previous,  up
2083 @subsubsection Associating Tasks with Multiple Projects
2084 @cindex multiple projects
2085 @cindex planner-multi.el, using
2087 You can use @file{planner-multi.el} to associate a task with more than
2088 one project. That way, you can easily keep GTD-style context lists as
2089 well as project-related lists.
2091 To use multiple projects, add the following to your @samp{~/.emacs}:
2093 @example
2094 (require 'planner-multi)
2095 @end example
2097 Under GNU Emacs, you can specify multiple projects by separating them
2098 with a single space. For example, you can specify @kbd{planner doc}
2099 when creating a task to associate the task with those two projects.
2101 Under XEmacs, you can specify multiple projects by typing @kbd{RET}
2102 after each entry and terminating the list with another @kbd{RET}. For
2103 example, to specify @kbd{planner} and @kbd{doc}, you would type
2104 @kbd{planner RET doc RET RET} at the prompt.
2106 If you want to see an overview of all of your tasks as well as
2107 project- or context-specific lists, you can set
2108 @code{planner-multi-copy-tasks-to-page} to your overview page(s). For
2109 example, set it to @samp{TaskPool} to be able to see an overview of
2110 all of your unfinished tasks. You can also set this to multiple pages
2111 such as @samp{[[TasksByProject][p]] [[TasksByContext][c]]} and use
2112 @file{planner-trunk.el} to sort and organize tasks for easy reference.
2113 (@pxref{Grouping Tasks})
2115 @defopt planner-multi-copy-tasks-to-page
2116 Automatically copy newly-created tasks to the specified page.
2117 @end defopt
2119 By default, tasks are removed from
2120 @code{planner-multi-copy-tasks-to-page} when you call
2121 @code{planner-task-done} or @code{planner-task-cancelled}. If you
2122 prefer to keep a copy of the task, remove
2123 @code{planner-multi-remove-task-from-pool} from
2124 @code{planner-mark-task-hook}.
2126 If you want to use a different separator instead of spaces, customize
2127 the @code{planner-multi-separator} variable.
2129 @defopt planner-multi-separator
2130 String that separates multiple page references.
2132 For best results, this should be something recognized by
2133 @code{muse-link-at-point} so that links are highlighted
2134 separately.
2135 @end defopt
2137 @node Viewing Tasks, Modifying Tasks, Multiple Projects, Organizing Your Tasks
2138 @comment  node-name,  next,  previous,  up
2139 @subsubsection Viewing tasks
2140 @cindex tasks, viewing
2142 Review the tasks scheduled for today by typing @kbd{M-x
2143 planner-goto-today}.  If you created the task from the previous
2144 section in this tutorial, you should see a line that looks like
2146 @example
2147 #A _ Learn how to change a task's status from Tasks (TaskPool)
2148 @end example
2150 If you have @code{planner-use-task-numbers} set to non-nil, you will see
2151 something like the following instead.
2153 @example
2154 #A0 _ Learn how to change a task's status from Tasks (TaskPool)
2155 @end example
2157 From left to right, these are what the symbols mean:
2159 @itemize
2160 @item @samp{A} - Priority.  A (high)
2161 @item
2162 @samp{0} - Priority number.  It is calculated whenever you save the file
2163 or call @command{planner-renumber-tasks}, provided that
2164 @code{planner-use-task-numbers} is non-nil.  Tasks are numbered in
2165 ascending order according to priorities.
2166 @item @samp{_} - Status.  _ (unfinished)
2167 @end itemize
2169 If you click on @samp{Tasks} or press @key{RET} while your cursor is
2170 in the link, Emacs will display the previous info page.
2172 If you select @samp{TaskPool}, Emacs will display the @samp{TaskPool}
2173 plan page.  Plan pages organize your tasks and notes about a project
2174 in one file.
2176 You can use @command{planner-seek-next-unfinished-task} to move to the
2177 next unfinished task on the current page.
2179 @defun planner-list-tasks-with-status status &optional pages
2180 Display all tasks that match the STATUS regular expression on all day
2181 pages.  The PAGES argument limits the pages to be checked in this
2182 manner:
2184 @itemize
2185 @item @code{t}: check all pages
2186 @item regexp: search all pages whose filenames match the regexp
2187 @item list of page names: limit to those pages
2188 @item alist of page/filenames: limit to those pages
2189 @end itemize
2191 Called interactively, this function will search day pages by
2192 default. You can specify the start and end dates or leave them as
2193 nil to search all days. Calling this function with an interactive
2194 prefix will prompt for a regular expression to limit pages.
2195 Specify @samp{.} or leave this blank to include all pages.
2197 This function could take a long time.
2198 @end defun
2200 @defun planner-list-unfinished-tasks &optional pages
2201 Display all unfinished tasks. @var{pages} follows
2202 planner-list-tasks-with-status.
2203 @end defun
2205 @defun planner-jump-to-linked-task task-info
2206 Display the task page linked to by the current task or
2207 @var{task-info}.
2208 @end defun
2210 @node Modifying Tasks, Carrying Over Unfinished Tasks, Viewing Tasks, Organizing Your Tasks
2211 @comment  node-name,  next,  previous,  up
2212 @subsubsection Modifying Tasks
2213 @cindex tasks, modifying
2214 @cindex tasks, editing
2216 To select a task, move your cursor to the line containing the task.
2218 Change a task's priority (@samp{A}, @samp{B} or @samp{C}) by editing
2219 the line. @samp{#A} tasks are important. @samp{#B} are medium
2220 priority. @samp{#C} are low priority. Whenever you save the file or
2221 call @kbd{M-x planner-fix-tasks}, tasks are sorted and numbered
2222 according to priority and status.
2224 Change a task's status by calling one of the following functions:
2226 @itemize
2227 @item planner-task-in-progress @samp{o} (@kbd{C-c C-z})
2228 @item planner-task-done @samp{X} (@kbd{C-c C-x})
2229 @item planner-task-cancelled @samp{C} (@kbd{C-c C-S-x})
2230 @item planner-task-delegated @samp{D}
2231 @item planner-task-pending @samp{P}
2232 @item planner-task-open @samp{_}
2233 @end itemize
2235 After changing the status using a function, look at the
2236 @samp{TaskPool} plan page.  The task is also updated on the linked
2237 page.  If you changed the task status manually by replacing the status
2238 with another character, you will need to call
2239 @command{planner-update-task} to update the linked page.
2241 To reschedule a task, call @command{planner-copy-or-move-task} (@kbd{C-c
2242 C-c}) and choose a new date.  You can mark a region and type @kbd{M-x
2243 planner-copy-or-move-region} to reschedule all the contained tasks to a
2244 different date.  Enter @samp{nil} for the date if you don't want the
2245 task or group of tasks to appear on any date page at all anymore. This
2246 is a good way to ``de-schedule'' a task for the time being, but still
2247 keep it linked to a plan page for possible future scheduling.
2249 To change the plan page associated with a task, call
2250 @command{planner-replan-task}.  Enter @samp{nil} for the plan page if
2251 you don't want the task to appear on any plan page anymore. If you
2252 precede the command with a prefix argument, the text of the original
2253 plan page will appear in the prompt for easy editing.
2255 Since the same task may exist on two or more pages, such as a date page
2256 and a plan page, it is dangerous to edit the description of the task by
2257 hand. You should not do it unless you want to make the exact same
2258 changes on all its linked pages.
2260 Instead of doing this by hand, you should use
2261 @command{planner-edit-task-description}. This will prompt you for the
2262 changes to the task description and then update all the other pages to
2263 which the task is linked.  Or, you can just use
2264 @command{planner-delete-task} to remove the task from both pages, and
2265 then create it again with the new desired description.
2267 To remind yourself to do tasks in a certain order, simply edit the
2268 lines so that they're in the order you want.
2269 @command{planner-raise-task} and @command{planner-lower-task} update
2270 the priorities on linked pages automatically. You can organize tasks
2271 into groups by putting a blank line between groups of tasks.
2272 Planner will maintain the groupings and only sort the tasks within
2273 that group.
2275 @defun planner-replan-task page-name
2276 Change or assign the plan page for the current task.  @var{page-name}
2277 is the new plan page for the task. Use
2278 @code{planner-copy-or-move-task} if you want to change the date. With a
2279 prefix, provide the current link text for editing.
2280 @end defun
2282 @defun planner-raise-task-priority
2283 Change a low-priority task to a medium-priority task and a
2284 medium-priority task to a high-priority task (C to B to A).
2285 @end defun
2287 @defun planner-lower-task-priority
2288 Change a high-priority task to a medium-priority task and a
2289 medium-priority task to a low-priority task (A to B to C).
2290 @end defun
2292 @defun planner-raise-task arg
2293 Move a task up @var{arg} steps.  By default, @var{arg} is 1.
2294 @end defun
2296 @defun planner-lower-task  arg
2297 Move a task down @var{arg} steps.  By default, @var{arg} is 1.
2298 @end defun
2300 @defun planner-edit-task-description description
2301 Change the description of the current task, updating the linked page
2302 if any.
2303 @end defun
2305 @defun planner-delete-task
2306 Delete this task from the current page and the linked page.
2307 @end defun
2309 @defun planner-update-task
2310 Update the current task's priority and status on the linked page.
2311 Tasks are considered the same if they have the same description.
2312 This function allows you to force a task to be recreated if it
2313 disappeared from the associated page.
2314   
2315 Note that the text of the task must not change. If you want to be able
2316 to update the task description, see @code{planner-edit-task-description}
2317 or @file{planner-id.el}.
2318 @end defun
2320 See @command{planner-install-extra-task-keybindings} for additional
2321 task-related shortcuts.
2323 @node Carrying Over Unfinished Tasks, Task Numbering, Modifying Tasks, Organizing Your Tasks
2324 @comment  node-name,  next,  previous,  up
2325 @subsubsection Carrying Over Unfinished Tasks
2326 @cindex tasks, carrying over
2328 Sometimes you won't be able to cross off all the tasks on your list.
2329 Planner makes it easy for you to keep track of things you still have
2330 to do by automatically rescheduling unfinished tasks from the past few
2331 days. By default, the @command{plan} command searches for unfinished
2332 tasks from the last three days and reschedules them onto today. If you
2333 open Planner every day, this should cover weekends easily.
2335 It's a good idea to start Planner whenever you start Emacs. That way,
2336 Planner can help remind you about today's tasks, appointments, and other
2337 things. To automatically start Planner whenever you start up Emacs, add
2338 the following code to the end of your @file{~/.emacs}:
2340 @example
2341 (plan)
2342 @end example
2344 Now, every time you start Emacs (which should be more or less once a
2345 day), you'll see today's page. If you don't finish all the tasks today,
2346 you'll see them again tomorrow.
2348 It's a good idea to start Planner every time you start Emacs so that
2349 you get reminded about your task list. If you prefer to start Planner
2350 manually, remember to call @kbd{M-x plan} every so often to make sure
2351 that you don't forget any unfinished tasks. Safe in the knowledge that
2352 Planner tasks won't slip through the cracks (unlike little slips of
2353 paper that will invariably get mislaid), you can then get on with the
2354 rest of your life.
2356 If your increased productivity with Planner leads to a well-deserved
2357 two-week vacation, then you'll need to tell Planner to search more days
2358 for unfinished tasks. By using @kbd{M-x plan}, you can automatically
2359 bring forward tasks over a given number of days or even scan all the
2360 days since time immemorial. @kbd{C-u 15 M-x plan} reschedules all
2361 unfinished tasks from the last 15 days. @kbd{C-u -1 M-x plan} checks all
2362 of your past day pages for unfinished tasks.
2364 Like everything else in Planner, you can adapt @kbd{M-x plan} to your
2365 particular way of life. For example, if you find yourself starting up
2366 Emacs and Planner every day--including weekends--because it's just so
2367 much fun, you can set the @code{planner-carry-tasks-forward} to 1.
2368 This can make your Emacs startup marginally faster. On the other hand,
2369 if you normally start Emacs once a week, you can set it to 7 or 8. If
2370 you're worried about tasks dropping off your radar, you can set it to
2371 0. You can set the value of @var{planner-carry-tasks-forward} either
2372 with @key{M-x customize-variable RET planner-carry-tasks-forward RET},
2373 or by putting @code{(setq planner-carry-tasks-forward 3)} (replacing
2374 @code{3} with the value appropriate for what you want) in your
2375 @file{~/.emacs} file.
2377 On the other hand, you might prefer to reschedule tasks yourself. If
2378 you set @code{planner-carry-tasks-forward} to @code{nil}, then
2379 @command{M-x plan} and @code{(plan)} will bring you to the most recent
2380 page with unfinished tasks if there is no page for today. You can then
2381 use @command{planner-copy-or-move-task} and
2382 @command{planner-copy-or-move-region} to reschedule tasks. This is
2383 probably more hassle than it's worth, though, so let Planner take care
2384 of this for you.
2386 @defopt planner-carry-tasks-forward
2387 If non-nil, carry unfinished tasks forward automatically.
2388 If a positive integer, scan that number of days in the past.
2389 If 0, scan all days for unfinished tasks.
2390 If t, scan one day in the past (old behavior).
2391 If nil, do not carry unfinished tasks forward.
2392 @end defopt
2394 @defun plan &optional force-days
2395 Start your planning for the day, carrying unfinished tasks forward.
2397 If @var{force-days} is a positive integer, search that many days in the
2398 past for unfinished tasks.
2399 If @var{force-days} is @code{0} or @code{t}, scan all days.
2400 If @var{force-days} is @code{nil}, use the value of
2401 @code{planner-carry-tasks-forward} instead, except t means scan only
2402 yesterday
2404 @end defun
2406 @defun planner-copy-or-move-task date force
2407 Reschedule the task for @var{date}. If @var{force} is non-nil, the
2408 task is moved regardless of status. It also works for creating tasks
2409 from a Note. Use @code{planner-replan-task} if you want to change the
2410 plan page in order to get better completion.
2411 @end defun
2413 @defun planner-copy-or-move-region beg end date muffle-errors
2414 Move all tasks from @var{beg} to @var{end} to @var{date}.
2415 @code{planner-copy-or-move-region} will copy or move all tasks from
2416 the line containing @var{beg} to the line just before @var{end}. If
2417 @var{muffle-errors} is non-nil, no errors will be reported.
2418 @end defun
2420 @node Task Numbering, Task Ranks, Carrying Over Unfinished Tasks, Organizing Your Tasks
2421 @comment  node-name,  next,  previous,  up
2422 @subsubsection Task Numbering
2424 By default, tasks are numbered according to their position on the
2425 page.  Task numbers allow you to refer to tasks using Muse links.
2426 For example, the @samp{#A1} task in @file{2004.08.16} can be referred to
2427 as @samp{2004.08.16#A1}.
2429 Note that task numbers change every time you re-sort and re-number tasks
2430 with @code{planner-fix-tasks}.  As a result, they are only reliable for
2431 references to past tasks.
2433 If you find yourself not using this functionality, you can turn off task
2434 numbers by using the following option.
2436 @defopt planner-use-task-numbers
2437 Non-nil means use task numbers when creating tasks.  This allows you
2438 to refer to past tasks if your tasks are numbered appropriately.
2439 If you set this to nil, you can save space in your plan files.
2440 @end defopt
2442 @node Task Ranks, Grouping Tasks, Task Numbering, Organizing Your Tasks
2443 @comment  node-name,  next,  previous,  up
2444 @subsubsection Task Ranks
2445 @cindex ranking tasks
2446 @cindex tasks, ranking
2447 @cindex @file{planner-rank.el}, using
2449 @file{planner-rank.el} models Franklin Covey's Urgency and Importance
2450 principle. When you think about a task, there are two aspects in
2451 consideration: Urgency and Importance. You may want to do the most
2452 urgent things first, like answering an email, or you may want to do
2453 the most important things first, like reading this manual. Or much
2454 better, balance Urgency and Importance and decide what to do.
2456 @file{planner-rank.el} can help you balance.
2458 Urgency and Importance are both measured by scores from 0-9. The
2459 higher the score, the more you want to do it first. 9 stands for ``I
2460 should have done this'' and 0 stands for ``I can forget this''.
2462 If you are using the planner @ref{Deadlines} feature, the Urgency
2463 score is automatically calculated from how many days are left to meet
2464 the deadline. By default, it will score 9 if the task is overdue and 0
2465 if the deadline is years away. Please refer to the docstring of
2466 @code{planner-rank-deadline-urgency-map-list} for detail.
2468 The task rank is calculated from Urgency and Importance scores. As
2469 different people balance urgency and importance differently, a number
2470 of @code{planner-rank-calculate-rank-*} functions are provided. The
2471 algorithms vary from a simple average to something like a weighted
2472 root mean square deviation.
2474 The aggressive versions of these functions
2475 (@code{planner-rank-calculate-rank-*-aggressive}) will make sure if
2476 one of Urgency and Importance is high, the resulting rank will be high
2477 as well. @code{planner-rank-calculate-rank-weighted-*} functions weigh
2478 the Urgency and Important scores depending on
2479 @code{planner-rank-importance-vs-urgency-factor}.
2481 Call @code{planner-rank-test-algorithm} on each of the functions and
2482 check the result tables to see which one you like most, and set it to
2483 @code{planner-rank-rank-calculate-function}. Alternatively, accept the
2484 defaults and tweak them when you get a better feel for ranking.
2486 Once the Rank is calculated, the @ref{Task Priorities} will be
2487 automatically reset. If the Rank is greater than or equal to
2488 @code{planner-rank-priority-A-valve}, the task priority will be
2489 @samp{A}, if the Rank is between @code{planner-rank-priority-A-valve}
2490 and @code{planner-rank-priority-B-valve}, the priority will be @samp{B},
2491 else it will be @samp{C}.
2493 After setting the task importance and deadline, you can leave it as
2494 is. As the deadline approaches, the task priority will automatically
2495 be raised and the task re-colored to catch your eyes.
2497 If you are using @code{planner-sort-tasks} (see @pxref{Making Files
2498 Pretty}), you can set @code{planner-sort-tasks-key-function} to one of
2499 @code{planner-sort-tasks-by-rank},
2500 @code{planner-sort-tasks-by-importance}, and
2501 @code{planner-sort-tasks-by-urgency}.
2503 @defopt planner-rank-change-hook
2504 Functions to run after @code{planner-rank-change}.
2505 @end defopt
2507 @defopt planner-rank-priority-A-valve
2508 Tasks with rank greater than or equal to this value will be set to
2509 priority @samp{A}.
2510 @end defopt
2512 @defopt planner-rank-priority-B-valve
2513 Tasks with rank greater than or equal to this value and less than
2514 @code{planner-rank-priority-A-valve} will be set to priority
2515 @samp{B}. Tasks with rank less than this value will be set to priority
2516 @samp{C}.
2517 @end defopt
2519 @defopt planner-rank-deadline-urgency-map-list
2520 Defines how to calculate the Urgency score according to how many days
2521 are left to meet the deadline.
2522 @end defopt
2524 @defopt planner-rank-default-importance
2525 Default importance value for newly added rank.
2526 @end defopt
2528 @defopt planner-rank-default-urgency
2529 Default urgency value for newly added rank.
2530 @end defopt
2532 @defopt planner-rank-importance-vs-urgency-factor
2533 How much do you think importance is more ``important'' than urgency.
2534 This will be used in @code{planner-rank-calculate-rank-weighted-*}
2535 functions.
2536 @end defopt
2538 @defopt planner-rank-rank-calculate-function
2539 Define the function called to calculate rank.
2540 @end defopt
2542 @defun planner-rank-change &optional importance urgency
2543 Set the Importance and Urgency of the current task.
2544 @end defun
2546 @defun planner-rank-update-current-task
2547 Recalculate rank for the current task.
2548 @end defun
2550 @defun planner-rank-update-all
2551 Recalculate rank for all tasks in the current page
2552 @end defun
2554 @defun planner-rank-update-all
2555 Recalculate rank for all tasks in the current page
2556 @end defun
2558 @node Grouping Tasks,  , Task Ranks, Organizing Your Tasks
2559 @comment  node-name,  next,  previous,  up
2560 @subsubsection Grouping Tasks with planner-trunk.el
2561 @cindex grouping tasks
2562 @cindex tasks, grouping
2563 @cindex @file{planner-trunk.el}, using
2565 @file{planner-trunk.el} helps you automatically group tasks according
2566 to a set of rules. It sorts and splits your tasks, adding a blank line
2567 between groups of tasks. For example, if today's page looks like this:
2569 @example
2570 * Tasks
2572 #B   _ Buy milk (GroceryShopping)
2573 #B   _ Learn how to use planner-trunk (PlannerMode)
2574 #B   _ Buy a notebook (Bookstore)
2575 #B   _ Buy cereal (GroceryShopping)
2576 #B   _ Set up my own planner-trunk rules (PlannerMode)
2577 #B   _ Customize my stylesheet (MuseMode)
2578 #B   _ Go for a health checkup (BetterHealth)
2579 @end example
2581 @noindent
2582 then you might want to group the tasks into: planner and muse,
2583 shopping list, and other items. If you set up the appropriate rules by
2584 customizing @code{planner-trunk-rule-list}, @file{planner-trunk.el}
2585 can automatically rewrite that section line this:
2587 @example
2588 * Tasks
2590 #B   _ Learn how to use planner-trunk (PlannerMode)
2591 #B   _ Set up my own planner-trunk rules (PlannerMode)
2592 #B   _ Customize my stylesheet (MuseMode)
2594 #B   _ Buy milk (GroceryShopping)
2595 #B   _ Buy a notebook (BookstoreShopping)
2596 #B   _ Buy cereal (GroceryShopping)
2598 #B   _ Go for a health checkup
2599 @end example
2601 @noindent
2602 In this case, you would set @code{planner-trunk-rule-list}
2603 to @code{(("." nil ("PlannerMode\\|MuseMode" "Shopping")))}.
2605 You can load @file{planner-trunk} with @kbd{M-x load-library RET
2606 planner-trunk RET} or add @code{(require 'planner-trunk)}. If you're
2607 not yet comfortable with Emacs Lisp, you can use @kbd{M-x
2608 customize-variable RET planner-trunk-rule-list RET} to edit this rule
2609 using an easy-to-use interface.
2611 WARNING: Do not keep non-task information in the Tasks section.
2612 planner-trunk will delete @strong{all} non-task lines from the Tasks
2613 section of your plan page in the process of grouping the tasks.
2615 After you set up @code{planner-trunk-rule-list}, use @command{M-x
2616 planner-trunk-tasks} to try out your rules until you're satistfied.
2618 If you want to do this automatically, you can use @code{(add-hook
2619 'planner-mode-hook 'planner-trunk-tasks)} to trigger it automatically
2620 whenever you open a Planner page.
2622 @node Task Reports and Overviews,  , Organizing Your Tasks, More about Tasks
2623 @subsection Task Reports and Overviews
2624 @cindex task reports
2625 @cindex task overviews
2626 @cindex reports, task
2627 @cindex overviews, task
2628 @cindex reports, accomplishment
2629 @cindex tasks, overview of
2631 Planner provides a number of different ways to generate different
2632 presentations of your tasks.
2634 @menu
2635 * Accomplishments::             
2636 * Task Overviews::              
2637 * <tasks> tag::                 
2638 @end menu
2640 @node Accomplishments, Task Overviews, Task Reports and Overviews, Task Reports and Overviews
2641 @comment  node-name,  next,  previous,  up
2642 @subsubsection Generating Daily Accomplishment Reports
2643 @cindex reports, accomplishment
2644 @cindex @file{planner-accomplishments.el}, using
2645 @cindex tasks, overview of
2646 @cindex task reports
2647 @cindex reports, task
2648 @cindex overviews, task
2649 @cindex task overviews
2651 You can use @file{planner-accomplishments.el} to get a summary of your
2652 task activity for a particular day. The report is grouped by status
2653 and plan (on day pages) or date (on plan pages). An example report
2654 follows:
2656 @example
2657 Link        | Unfinished | In progress | Delegated | Completed | Total
2658 nil         | 1          | 0           | 0         | 6         | 7
2659 TaskPool    | 1          | 1           | 0         | 3         | 5
2660 Planner     | 0          | 0           | 1         | 1         | 2
2661 SchoolWork  | 0          | 0           | 0         | 1         | 1
2662 Total       | 2          | 1           | 1         | 11        | 15
2663 @end example
2665 This lets you see how you balance your time between your projects.
2667 @itemize
2669 There are currently two ways to use @file{planner-accomplishments.el}.
2671 @item Displaying a temporary buffer
2673 You can call @code{planner-accomplishments-show} to display a buffer
2674 containing the current page's accomplishment report.
2676 @item Rewriting sections of your planner
2678 Choose this approach if you want accomplishment reports to be in
2679 their own section and you would like them to be readable in your
2680 plain text files even outside Emacs. Caveat: The accomplishment
2681 section should already exist in your template and will be rewritten
2682 when updated.
2684 To use, set @code{planner-accomplishments-section} to the name of the
2685 section to rewrite (default: @samp{Accomplishments}). If you want
2686 rewriting to be automatically performed, call
2687 @code{planner-accomplishments-insinuate}. The accomplishments will be
2688 rewritten whenever you save a planner page. If you want rewriting to
2689 be manual, call @code{planner-accomplishments-update}.
2691 @end itemize
2693 @defopt planner-accomplishments-section
2694 Header for the accomplishments section in a plan page.
2695 Used by @code{planner-accomplishments-update}.
2696 @end defopt
2698 @defopt planner-accomplishments-status-display
2699 Alist of status-label maps also defining the order of display.
2700 Used by @code{planner-accomplishments-format-table}.
2701 @end defopt
2703 @defun planner-accomplishments-insinuate ()
2704 Automatically call @code{planner-accomplishments-update} when saving
2705 tasks in @code{planner-mode} buffers.
2706 @end defun
2708 @defun planner-accomplishments-update ()
2709 Rewrite @code{planner-accomplishments-section} with a summary of tasks
2710 on this page.
2711 @end defun
2713 @defun planner-accomplishments-show ()
2714 Display a buffer with the current page's accomplishment report.
2715 @end defun
2717 @node Task Overviews, <tasks> tag, Accomplishments, Task Reports and Overviews
2718 @comment  node-name,  next,  previous,  up
2719 @subsubsection Seeing an Overview of Tasks
2720 @cindex tasks, overview of
2721 @cindex task reports
2722 @cindex reports, task
2723 @cindex overviews, task
2724 @cindex task overviews
2725 @cindex @file{planner-tasks-overview.el}, using
2727 You can see a list of tasks with @file{planner-tasks-overview.el}.
2728 Seeing how you've scheduled tasks over the next few days can help you
2729 decide when to schedule another task. Table entries will be of the form
2731 @var{date} | @var{link} | @var{priority} @var{status} | @var{task-description}
2733 To display the tasks between a set of day pages, use
2735 @defun planner-tasks-overview start end
2736 Display an overview of your tasks from @var{start} to @var{end}. If
2737 @var{start} is nil, start from the very first day page. If @var{end}
2738 is nil, include the very last day page. You can use
2739 @code{planner-expand-name} shortcuts here, like @kbd{+1} or @kbd{-1}.
2740 Pressing @key{RET} at the prompt will use today.
2742 Once in a @code{planner-tasks-overview} buffer, you can use
2743 the keyboard shortcut @key{o} to change the overview period.
2744 @end defun
2746 You can sort the task display with the following functions:
2748 @defun planner-tasks-overview-sort-by-date
2749 Sort the tasks by date. Keyboard shortcut: @key{1}
2750 @end defun
2752 @defun planner-tasks-overview-sort-by-plan
2753 Sort the tasks by associated plan page. Keyboard shortcut: @key{2}
2754 @end defun
2756 @defun planner-tasks-overview-sort-by-priority
2757 Sort the tasks by priority. Keyboard shortcut: @key{3}
2758 @end defun
2760 @defun planner-tasks-overview-sort-by-status
2761 Sort the tasks by status. Keyboard shortcut: @key{4}
2762 @end defun
2764 You can jump to linked tasks with
2766 @defun planner-tasks-overview-jump other-window
2767 Display the current task. If a prefix argument is supplied, show the
2768 task in another window. Keyboard shortcut: @key{j}
2769 @end defun
2771 @defun planner-tasks-overview-jump-other-window
2772 Display the current task in another window. Keyboard shortcut: @kbd{C-u j}
2773 @end defun
2775 You can view a summary of the tasks in your plan pages with
2777 @defun planner-tasks-overview-show-summary &optional file-list
2778 Count unscheduled, scheduled, and completed tasks for FILE-LIST. If
2779 called with an interactive prefix, prompt for the plan page(s) to
2780 display. Load @file{planner-multi.el} to be able to specify multiple
2781 pages.
2782 @end defun
2784 @key{TAB}, @kbd{SHIFT-TAB} and @key{RET} navigate links in the usual
2785 fashion.
2787 @node <tasks> tag,  , Task Overviews, Task Reports and Overviews
2788 @subsubsection <tasks> tag
2789 @cindex <tasks> tag
2790 @cindex task reports
2791 @cindex reports, task
2792 @cindex overviews, task
2793 @cindex task overviews
2794 @cindex tasks, overview of
2796 @samp{<tasks>} is replaced by a report of tasks over all day pages in
2797 published pages (@pxref{Publishing}).
2799 @example
2800 All incomplete tasks
2802 <tasks status="^X">
2804 All completed tasks
2806 <tasks status="X">
2808 All tasks
2810 <tasks>
2811 @end example
2813 Warning: this function can be slow, as it checks all the day pages!
2815 @node More about Notes, Making Files Pretty, More about Tasks, More about Planner
2816 @section More about Notes
2817 @cindex notes, more about
2818 You can put anything in this section. Notes added by
2819 @file{remember-planner.el} look like this:
2821 @example
2822 .#1 Headline
2823 Body
2824 @end example
2826 and are outlined at the @code{H3} level. If you want to take notes
2827 conveniently, check out @file{remember-planner.el}.
2829 Planner by default organizes the notes on a planner page so that
2830 the most recent note is first. Each note is numbered, with the oldest
2831 note labeled @samp{.#1}. If you would like to reverse this behavior,
2832 look at @kbd{C-h v planner-reverse-chronological-notes}.
2834 Notes are associated with day pages, but can also be associated with
2835 plan pages when they are created.  A linked note looks like this:
2837 @example
2838 .#1 Headline (LinkedNote#1)
2839 Text
2840 @end example
2842 You can jump to the linked note with
2843 @command{planner-jump-to-linked-note}.
2845 Deleting a note can be dangerous, as the notes are automatically
2846 numbered.  Removing a note could break links in other pages.
2848 @defun planner-create-note page
2849 Create a note to be remembered in @var{page} (today if @var{page} is
2850 nil).  If @code{planner-reverse-chronological-notes} is non-nil, create
2851 the note at the beginning of the notes section; otherwise, add it to
2852 the end.  Position point after the anchor.
2853 @end defun
2855 @defun planner-create-note-from-task
2856 Create a note based on the current task and update the current task to
2857 link to the note.
2858 @end defun
2860 @defun planner-renumber-notes
2861 Update note numbering.
2862 @end defun
2864 @defun planner-jump-to-linked-note note-info
2865 Display the note linked to by the current note or @var{note-info} if
2866 non-nil.
2867 @end defun
2869 @defun planner-search-notes regexp limit
2870 Return a buffer with all the notes returned by the query for
2871 @var{regexp}.  If called with a prefix argument, prompt for
2872 @var{limit} and search days on or after @var{limit}.
2873 @end defun
2875 The following sections include instructions for displaying,
2876 manipulating, and navigating your notes efficiently.
2878 @menu
2879 * Using Allout Mode::           Quickly navigating your notes
2880 * <notes>::                     Note headlines
2881 * <past-notes>::                Index of past notes
2882 * Note Indices::                
2883 @end menu
2885 @node Using Allout Mode, <notes>, More about Notes, More about Notes
2886 @subsection Using Allout Mode
2887 @cindex Allout mode
2888 @cindex notes, navigating
2889 @cindex notes, formatting
2890 @cindex notes, displaying
2892 The format of the notes in Planner works well with Allout mode, which
2893 provides helpful commands for navigating and formatting outlines. You
2894 can, for example, hide the bodies of all the notes on a page so you can
2895 see just their headlines. You can also jump easily from headline to
2896 headline, skipping over the bodies in between.
2898 The commands for using Allout mode vary depending on which Emacs version
2899 you are using. In either case, type @kbd{M-x load-library @key{RET}
2900 allout @key{RET}} to start. If you are using CVS Emacs, type @kbd{M-x
2901 allout-mode @key{RET}}. If you are using an earlier version of Emacs,
2902 type @kbd{M-x outline-mode @key{RET}}.
2904 The exact commands then available to you differ depending on your Emacs
2905 version, but you can view the commands and their keybindings by typing
2906 @kbd{C-h m}. In CVS Emacs, they will start with @command{allout-}, while
2907 in previous versions, they will start with @command{outline-}.
2909 @node <notes>, <past-notes>, Using Allout Mode, More about Notes
2910 @subsection <notes>
2912 @samp{<notes>} is replaced by a list of note headlines when the page
2913 is published. For example, the notes tag in the following example will
2914 be replaced by the two headlines when published. (@pxref{Publishing})
2916 @example
2917 <notes>
2919 * Notes
2921 .#1 This is a headline
2923 and this is body text
2925 .#2 This is another headline
2927 and this is more body text
2928 @end example
2930 @samp{<notes>} is useful if you want to provide a quick summary of
2931 blog entries at the top of your page. Just add it to your
2932 @code{planner-day-page-template}.
2934 @node <past-notes>, Note Indices, <notes>, More about Notes
2935 @subsection <past-notes>
2937 @samp{<past-notes>} is replaced by an index of note headlines.
2938 If @var{start} is specified, it lists notes starting from that date.
2939 If @var{directory} is specified, you can index notes in another
2940 planner directory.
2942 @example
2943 All the notes I've taken in 2004:
2945 <past-notes start="2004.01.01" end="2004.12.31">
2946 @end example
2948 @node Note Indices,  , <past-notes>, More about Notes
2949 @comment  node-name,  next,  previous,  up
2950 @subsection Note Indices
2951 @cindex @file{planner-notes-index.el}, using
2952 @cindex notes, indexing
2954 Make sure that @file{planner-notes-index.el} is in your load path and
2955 add this to your @file{.emacs} (or @file{_emacs}):
2957 @example
2958 (require 'planner-notes-index)
2959 @end example
2961 Then you can use tags of the form:
2963 @example
2964 <planner-notes-index page="2004.03.02">
2965 <planner-notes-index from="2004.03.01" to="2004.03.31">
2966 <planner-notes-index limit="10">
2967 <planner-notes-index page="PlanPage">
2968 <planner-notes-index-month-table month="2004.03" limit="5">
2969 <planner-notes-index-month-table month="2004.03">
2970 @end example
2972 You can also use the following interactive functions:
2974 @code{planner-notes-index}
2975 @code{planner-notes-index-days}
2976 @code{planner-notes-index-weeks}
2977 @code{planner-notes-index-months}
2978 @code{planner-notes-index-years}    (wow!)
2980 These work based on the current date (date of current buffer, or today).
2982 If a single page is specified, this page is scanned for headlines
2983 of the form:
2985 @example
2986  .#1 Headline
2987 @end example
2989 The results are presented as a bulleted list.
2991 If @var{from} and @var{to} are specified, all date pages between them
2992 (inclusive) are scanned. If @var{from} is omitted, it is assumed to be
2993 the earliest entry.  If @var{to} is omitted, it is assumed to be the
2994 latest entry.
2996 If @var{recent} is specified, the list includes only that many recent
2997 headlines.  and the results are presented as a bulleted list.
2999 To customize presentation, you can write a function that generates
3000 the appropriate @code{<planner-notes-index>} tags. You can also use
3001 @code{planner-extract-note-headlines} in your own functions.
3003 The following interactive functions are defined in
3004 @file{planner-notes-index.el}:
3006 @defun planner-notes-index &optional from to limit
3007 Display a clickable notes index. If called from a Lisp program,
3008 display only dates between @var{from} and @var{to}. With a prefix arg
3009 @var{limit}, display only that number of entries.
3010 @end defun
3012 @defun planner-notes-index-days days
3013 Display an index of notes posted over the past few @var{days}. The
3014 list ends with the day of the current buffer or @code{planner-today}.
3015 @end defun
3017 @defun planner-notes-index-weeks weeks
3018 Display an index of notes posted over the past few @var{weeks}. The
3019 list ends with the week of the current buffer or
3020 @code{planner-today}. Weeks start from Sunday.
3021 @end defun
3023 @defun planner-notes-index-months months
3024 Display an index of notes posted over the past few @var{months}. The
3025 list ends with the month of the current buffer or @code{planner-today}.
3026 @end defun
3028 @defun planner-notes-index-years years
3029 Display an index of notes posted over the past few @var{years}. The
3030 current year is included.
3031 @end defun
3033 @file{planner-notes-index.el} does not define any keybindings.
3036 @node Making Files Pretty, Annotations, More about Notes, More about Planner
3037 @section Making Files Pretty
3039 By default, planner does a little bit of fancy reformatting when you
3040 save a file. Tasks are sorted by priority (ABC) and status (_oP>XC) on
3041 day pages. On plan pages, tasks are sorted by priority (ABC), status
3042 (XC), and date. Undated tasks are sorted after dated tasks.
3044 @defun planner-sort-tasks
3045 Sort tasks according to planner-sort-tasks-key-function. By default,
3046 sort tasks according to priority and position on day pages, and
3047 according to status, priority, date, and position on plan pages.
3048 @end defun
3050 @defun planner-renumber-tasks
3051 Update task numbering.
3052 @end defun
3054 @defun planner-align-tasks
3055 Align tasks neatly. You can add this to @code{write-file-functions} to
3056 have the tasks automatically lined up whenever you save.  For best
3057 results, ensure @code{planner-align-tasks} is run after
3058 @code{planner-renumber-tasks}.
3059 @end defun
3061 @defun planner-fix-tasks
3062 Sort, renumber and align tasks.
3063 @end defun
3065 @defopt planner-sort-tasks-key-function
3066 Control task sorting. Some options include
3067 @code{planner-sort-tasks-default-key},
3068 @code{planner-sort-tasks-basic}, @code{planner-sort-tasks-by-date}, and
3069 @code{planner-sort-tasks-by-link}.
3070 @end defopt
3072 @defopt planner-sort-undated-tasks-equivalent
3073 This option controls the behavior of task sorting on plan pages.  By
3074 default, the value @samp{9999.99.99} causes dated tasks to be listed
3075 before undated tasks.  To sort undated tasks before dated tasks,
3076 set this to a blank string.
3077 @end defopt
3079 @defopt planner-sort-tasks-automatically
3080 Non-nil means sort tasks whenever a planner file is saved.  On day
3081 pages, tasks are sorted by status.  On plan pages, they are sorted by
3082 status and date.  Sorting can take a while.
3083 @end defopt
3085 @defopt planner-renumber-tasks-automatically
3086 Non-nil means renumber tasks from 1 to N whenever a planner file is
3087 saved. This allows you to refer to tasks in previous day pages using
3088 anchors like @samp{2003.08.12#A1}. If you use this function, make sure
3089 @code{planner-use-task-numbers} is non-nil so that new tasks are created
3090 with task numbers.
3091 @end defopt
3093 @defopt planner-align-tasks-automatically
3094 Non-nil means align tasks whenever a planner file is saved.  This
3095 causes the status to line up in a neat column if you have less than
3096 100 tasks.
3097 @end defopt
3099 @defopt planner-renumber-notes-automatically
3100 Non-nil means renumber the notes. If most of your notes are only on
3101 one page, you might like seeing the notes renumbered if you delete a
3102 note in the middle. However, if you use a lot of cross-referencing,
3103 note renumbering will break those links.
3104 @end defopt
3106 @node Annotations, Interactive Lisp, Making Files Pretty, More about Planner
3107 @comment  node-name,  next,  previous,  up
3108 @section Annotations
3110 The context included when you create a task and the context included
3111 when you create a note are gained the same way. It sounds like black
3112 magic, but it turns out not to be.
3114 All that happens is, Planner has a list of functions,
3115 @code{planner-annotation-functions}. When you create a task from a
3116 buffer, or remember a note from a buffer, Planner goes through
3117 this list from top to bottom. The first one that returns true is the
3118 one it uses.
3120 For example, if you're in Wanderlust, and you hit the key you've bound
3121 to @code{planner-create-task-from-buffer}, it looks at this list and
3122 does something like this.  Is it an ERC buffer? No. Is it a BBDB
3123 buffer? No. Are we in w3m? No. Are we in Wanderlust? Yes. So this
3124 function succeeds. It stops searching and runs the annotation function
3125 for Wanderlust, which in this case finds out who the message is from
3126 and what the message ID of the message is. It then takes those and
3127 constructs a link back to that message, with a link title something
3128 like @samp{Email from Joe Blogs}.
3130 So, you've read the email from Joe Blogs. He's asked you to do
3131 something and you've hit your key to add that task to your list of
3132 things to do. So what you end up with is a description of the task,
3133 and a link back to what made you create the task in the first place.
3135 The same happens with remembering notes, except that it ends up in the
3136 @samp{* Notes} section of your page instead.
3138 By default, @file{planner.el} can annotate tasks and notes based on
3139 the current filename.  To change the behavior of annotations,
3140 customize the following options:
3142 @defopt planner-annotation-functions
3143 A list of functions tried in order by
3144 @command{planner-create-task-from-buffer} and other functions that
3145 pick up context.  The first non-nil value returned is used as the
3146 annotation.  To cause an item to @strong{not} be annotated, return the
3147 empty string @samp{""}.
3148 @end defopt
3150 @defopt planner-annotation-strip-directory
3151 File links are usually generated with the full path to the file so
3152 that you can easily tell apart files with the same base name.  If
3153 @code{planner-annotation-strip-directory} is non-nil, though, only the
3154 base name of the file will be displayed.  For example, a link to
3155 @samp{/foo/bar/baz} will be displayed as @samp{baz} and hyperlinked to
3156 the file.
3157 @end defopt
3159 @defopt planner-annotation-use-relative-file
3160 If t, always use relative filenames.
3161 @code{planner-annotation-use-relative-file} can also be a function
3162 that takes the filename and returns non-nil if the link should be
3163 relative.  Filenames are resolved relative to
3164 @code{planner-directory}.  That is, the created link will be of the
3165 form @samp{../../somefile} instead of @samp{/absolute/path/to/file}.
3166 This can be helpful if you publish your planner files to the Net and
3167 your directory structure ensures that relative links resolve the same
3168 from @code{planner-directory} and @code{planner-publishing-directory}.
3169 @end defopt
3171 @node Interactive Lisp, Publishing, Annotations, More about Planner
3172 @comment  node-name,  next,  previous,  up
3173 @section Interactive Lisp with planner-lisp.el
3174 @cindex Lisp functions, using with Planner
3175 @cindex interactive Lisp fuctions, using with Planner
3176 @cindex @file{planner-lisp.el}, using
3178 You can include interactive Lisp functions in your planner pages.
3180 First, you need @file{planner-lisp.el}. Put this in your @file{.emacs}
3181 (or @file{_emacs}):
3183 @example
3184 (require 'planner-lisp)
3185 @end example
3187 Then, add a link to the Lisp function to your page, like:
3189 @example
3191 [[lisp:/plan][Plan]]
3193 @end example
3195 This will be rendered as @samp{Plan}. Selecting the link will run the
3196 @code{plan} function interactively.
3198 You can also execute other Lisp expressions. For example:
3200 @example
3201 [[lisp:/(planner-goto (planner-expand-name "+7"))][Next week]]
3202 @end example
3204 @file{planner-lisp.el} does not provide any interactive functions or
3205 keybindings.
3207 @node Publishing, Experimental Functions, Interactive Lisp, More about Planner
3208 @section Publishing
3210 You can publish your planner files to HTML and put them on a normal
3211 web server--no special server support required. This gives you an easy
3212 way to keep other people up to date on your tasks, keep a web log, or
3213 simply organize information.
3215 Publish your planner wiki with @kbd{C-c C-p}
3216 (@code{muse-project-publish}). You can publish individual files with
3217 @kbd{C-c C-t} (@code{muse-publish-this-file}). To automatically publish
3218 files when you save them, add the following code to your
3219 @file{~/.emacs}:
3221 @example
3222 (eval-after-load "muse-mode"
3223   (add-hook 'after-save-hook
3224             #'(lambda ()
3225                 (when (planner-derived-mode-p 'muse-mode)
3226                   (muse-project-publish nil)))
3227             nil t))
3228 @end example
3230 Published files are stored in @code{planner-publishing-directory}.
3231 Just copy the contents of this directory to your webserver, and you're
3232 all set! Of course, publishing is completely optional.
3234 Here are some more features related to publishing:
3236 @menu
3237 * Publishing Calendars::        planner-calendar.el
3238 * Authz Access Restriction::    planner-authz.el
3239 * RSS Publication::             Sharing notes with planner-rss.el
3240 * iCal Task Publication::       Sharing tasks with planner-ical.el
3241 * RDF Publication::             planner-rdf.el
3242 @end menu
3244 @node Publishing Calendars, Authz Access Restriction, Publishing, Publishing
3245 @comment  node-name,  next,  previous,  up
3246 @subsection Publishing Calendars
3247 @cindex calendar, publishing
3248 @cindex @file{planner-calendar.el}, using
3250 Here is an example Emacs Lisp snippet that automatically publishes
3251 calendars in your day pages.
3253 @example
3254 (require 'planner-calendar)
3255 (eval-after-load "muse-publish"
3256   '(progn
3257      (add-hook 'muse-before-publish-hook
3258                'planner-calendar-insert-calendar-maybe nil t)
3259      (add-hook 'muse-after-publish-hook
3260                'planner-calendar-create-today-link t t)
3261      (add-hook 'muse-after-publish-hook
3262                'planner-calendar-move-calendar-to-top-of-page-maybe
3263                t t)))
3264 @end example
3266 @defopt planner-calendar-prev-month-button
3267 HTML text used for previous month buttons.
3268 @end defopt
3270 @defopt planner-calendar-next-month-button
3271 HTML text used for next month buttons.
3272 @end defopt
3274 @defopt planner-calendar-day-header-chars
3275 Number of characters to use for day column header names.
3276 @end defopt
3278 @defopt planner-calendar-today-page-name
3279 Default name for published today page link.
3280 @end defopt
3282 @defun planner-calendar-insert-calendar-maybe
3283 Add this function to @code{muse-before-publish-hook} in
3284 @code{planner-mode} buffers in order to automatically add a day page
3285 during the calendar. This cannot be done from the page header because
3286 the inserted text still needs to be processed.
3287 @end defun
3289 @defun planner-calendar-create-today-link
3290 Add this function to @code{muse-after-publish-hook} to
3291 create a ``today'' soft-link to the newest published planner day page,
3292 on operating systems that support POSIX @command{ln}.
3293 @end defun
3295 @defun planner-calendar-move-calendar-to-top-of-page-maybe
3296 Add this function to @code{muse-after-publish-hook} if you want
3297 the calendar inserted by @code{planner-calendar-insert-calendar-maybe}
3298 to be moved to the beginning of the page. This work-around is
3299 necessary because some functions used by @file{planner-calendar.el}
3300 only work during markup.
3301 @end defun
3303 @node Authz Access Restriction, RSS Publication, Publishing Calendars, Publishing
3304 @comment  node-name,  next,  previous,  up
3305 @subsection Authz Access Restriction
3306 @cindex @file{planner-authz.el}, using
3307 @cindex Mason, restricting portions with
3308 @cindex access, restricting
3310 @file{planner-authz.el} was written by Andrew J. Korty in order to
3311 allow the easy restriction of portions of published pages.  It uses
3312 the HTML::Mason module available on CPAN
3313 (@url{http://www.cpan.org}).  Setting up HTML::Mason is
3314 outside the scope of this document.  Make sure that it works before
3315 trying out @file{planner-authz.el}.
3317 @file{planner-authz.el} modifies the behavior of
3318 @command{muse-project-publish} so that published pages follow access
3319 modifiers.
3321 This library lets you publish your planner pages while controlling
3322 access to certain portions of them to users you specify.  When you
3323 load this library, you gain access to two additional markup directives
3324 to use in your planner pages.  The @samp{<authz>} tag lets you
3325 restrict access to arbitrary content as follows:
3327 @example
3328 Here is a sentence everyone should see.  This sentence also
3329 contains no sensitive data whatsoever.  <authz users="ajk">This
3330 sentence, however, talks about my predilection for that French
3331 vanilla instant coffee that comes in the little tin, and I'm
3332 embarrassed for anyone else to know about that.</authz> And
3333 here's some more perfectly innocuous content.
3334 @end example
3336 You can use @samp{<authz>} tags to mark up entire paragraphs, tasks,
3337 notes, and anything else.  The tags are replaced with Mason code in
3338 the published pages.
3340 The @samp{#authz} directive restricts access to an entire page.  A Mason
3341 call is added to this page to generate a 403 error when someone not
3342 listed tries to access it.  Any notes or tasks on a
3343 @samp{#authz}-protected page are also wrapped in Mason code on linked
3344 pages. To add a @samp{#authz} directive to a Muse page, place
3345 @samp{#authz} followed by a space-delimited list of users on one
3346 line. For example:
3348 @example
3349 #authz ajk sacha
3350 @end example
3352 @defopt planner-authz-project-default
3353 Default access list for project pages (not day pages).  If a given
3354 project page doesn't contain a @samp{#authz} tag, it will receive the
3355 access list defined here.  If this variable is nil, all users will be
3356 allowed to view the page.  No corresponding variable is provided for
3357 day pages because it doesn't seem like you'd ever want to control
3358 access based on what day it was.  (But I will accept patches. :) Notes
3359 and tasks referencing pages without @samp{#authz} tags will also be
3360 restricted to the users listed here.
3361 @end defopt
3363 @defopt planner-authz-day-note-default
3364 Default access list for notes on day pages not associated with
3365 any project.  There is way to set a default for notes on project
3366 pages for the reason above; they would only be associated with
3367 date pages anyway.
3368 @end defopt
3370 @defopt planner-authz-day-task-default
3371 Same as @kbd{planner-authz-day-note-default}, but for tasks.
3372 @end defopt
3374 @defun planner-authz-publish-index
3375 Publish an index for the planner marked up with Mason code.
3376 Only those links to pages which the remote user is authorized to
3377 access will be shown.
3378 @end defun
3380 @node RSS Publication, iCal Task Publication, Authz Access Restriction, Publishing
3381 @comment  node-name,  next,  previous,  up
3382 @subsection RSS Publication
3383 @cindex @file{planner-rss.el}, using
3384 @cindex notes, RSS
3385 @cindex RSS
3387 @file{planner-rss.el} allows you to publish your notes in the RSS 2.0
3388 XML format for blog syndication. You will also want to customize the
3389 following variables:
3391 @defopt planner-rss-base-url
3392 Base absolute URL for published blog entries. Should include trailing
3393 @samp{/}.
3394 @end defopt
3396 @defopt planner-rss-category-feeds
3397 Rules for automatic categorization of posts and publishing to RSS
3398 files. A blog entry is matched against each condition. If it matches
3399 the regular expression or the function returns a non-nil value, the
3400 blog entry is copied into the specified file.
3401 @end defopt
3403 @defopt planner-rss-feed-limits
3404 A list of regular expressions that match feed filenames and the size
3405 and item limits for feeds that match. For example, you can use
3406 @samp{(("." nil 10))} to ensure that all feeds are limited to the 10
3407 most recent items.
3408 @end defopt
3410 To manually add the current note to all the matching RSS feeds, invoke
3411 @command{planner-rss-add-note}. You can specify a filename with the
3412 universal prefix, like this: @kbd{C-u M-x planner-rss-add-note}.
3414 If you use the @file{remember-planner.el} module to create notes, you
3415 can automatically publish new notes to RSS feeds by adding the
3416 following code to your @file{.emacs} (or @file{_emacs}).
3418 @example
3419 (add-to-list 'remember-planner-append-hook 'planner-rss-add-note t)
3420 @end example
3422 @file{planner-rss.el} defines the following interactive functions:
3424 @defun planner-rss-add-note @var{feed}
3425 Export the current note using @code{planner-add-item}. If @var{feed}
3426 is specified, add the entry to the specified file. Else, add the entry
3427 to all matching RSS feeds specified by
3428 @code{planner-rss-category-feeds}.
3429 @end defun
3431 @node iCal Task Publication, RDF Publication, RSS Publication, Publishing
3432 @comment  node-name,  next,  previous,  up
3433 @subsection iCal Publication
3435 iCal is an Internet Engineering Task Force (IETF) standard for
3436 calendaring and scheduling. @uref{http://www.ietf.org/rfc/rfc2445.txt}
3438 You can export your tasks to the iCal format using
3439 @file{planner-ical}. Add @code{(require 'planner-ical)} to your
3440 @file{~/.emacs}. Then you can use @kbd{M-x planner-ical-export-page}
3441 to display the iCal equivalent of tasks on a page, which you can then
3442 save to a file.
3444 To export today's tasks to a file in your publishing directory, add
3445 the following to your @file{~/.emacs}.
3447 @example
3448 (planner-ical-export-file
3449  (planner-today)
3450  (expand-file-name "tasks.ics"
3451                    planner-publishing-directory))
3452 @end example
3454 @defun planner-ical-export-page page &optional file
3455 Export PAGE's tasks in the iCal format.
3456 If FILE is non-nil, results are saved to that file.
3457 If FILE is nil, results are displayed in a `planner-ical-export-buffer'.
3458 @end defun
3460 @defun planner-ical-export-this-page
3461 Display the tasks on the current page in iCal format.
3462 @end defun
3464 @node RDF Publication,  , iCal Task Publication, Publishing
3465 @comment  node-name,  next,  previous,  up
3466 @subsection RDF Publication
3467 @cindex @file{planner-rdf.el}, using
3468 @cindex RDF, publishing to
3470 Put planner-rdf.el in a directory that is in your Emacs load-path and
3471 the following into your ~/.emacs file:
3473 @example
3474 (require 'planner-rdf)
3475 (eval-after-load "muse-publish"
3476   '(progn
3477      (add-hook 'muse-after-publish-hook
3478                'planner-rdf-publish-file)
3479      (add-hook 'muse-after-publish-hook
3480                'planner-rdf-publish-index)))
3481 @end example
3483 @menu
3484 * Publishing with planner-rdf::  
3485 * planner-rdf Tags::            
3486 * planner-rdf Usage Examples::  
3487 @end menu
3489 @node Publishing with planner-rdf, planner-rdf Tags, RDF Publication, RDF Publication
3490 @subsubsection Publishing with planner-rdf
3492 Planner-rdf is now included in the normal Planner publishing process.
3493 Pressing @key{C-p} will create a .owl and a .rdf file for every planner
3494 file. Additionally it creates an index, @file{index.rdf}.
3496 By default all generated files will be stored in the normal Planner
3497 publishing directory, where the HTML files end up. If you would ike to
3498 change that, set the variable @code{planner-rdf-directory} to the desired
3499 location.
3501 The generated files:
3503 @itemize
3504 @item
3505 @file{index.rdf} - a collection with pointers to the
3506 @file{<plan-page>.rdf} files.
3507 @item
3508 @file{<plan-page>.rdf} - contains Dublin Core metadata about the files
3509 related to the current Planner page. Currently it contains metadata
3510 about the source file, the Emacs plan page, the generated HTML page, and
3511 the generated OWL file.
3512 @item
3513 @file{<plan-page>.owl} - contains task and note data from the Planner
3514 file. Task information is stored completely. For notes, the note
3515 headline is stored.
3516 @end itemize
3518 @node planner-rdf Tags, planner-rdf Usage Examples, Publishing with planner-rdf, RDF Publication
3519 @subsubsection planner-rdf Tags
3521 Besides the factual information, e.g. the task status or description,
3522 planner-rdf extracts links (in the format @samp{[[...][...]]} or
3523 @samp{[[...]]}) and tags (@samp{@{@{...:...}@}@}) from tasks and notes
3524 (including the notes text). Links and tags provide context for the plan
3525 elements and so are stored and linked with the containing elements.
3527 Links point to locations that can be used to enrich the information in
3528 the Planner pages (e.g, by retrieving data from them and adding it),
3529 tags -- like the one for the task ids @samp{@{@{Tasks:198@}@}} -- can be
3530 used to express abstract qualities. Some examples:
3532 @itemize
3533 @item
3534 an @samp{@{@{audience:myteam@}@}} tag, can be used to restrict
3535 publishing of items to a certain user group;
3536 @item a @samp{@{@{lang:de@}@}} tag, signifying the language of the text;
3537 @item
3538 a @samp{@{@{location:Hamburg@}@}} tag, can be used to make geographic
3539 reference to an entity that is not stored in your address book, bbdb.
3540 @end itemize
3542 What tags to use is up to the user. Planner-rdf makes no assumptions
3543 about them, it just extracts and stores them. Only the applications
3544 using the data know what to do with them.
3546 @node planner-rdf Usage Examples,  , planner-rdf Tags, RDF Publication
3547 @subsubsection Usage Examples
3549 Report generation with OpenOffice
3551 The Perl file @file{this-week.pl}
3552 (@url{http://www.rainervolz.de/planner-rdf/this-week.pl}) creates a
3553 simple report for the current week. The script extracts task and note
3554 information from the generated OWL files and inserts it into a simple
3555 OpenOffice Writer document. Nothing fancy, just a proof of concept, to
3556 show how planner-rdf can be used to integrate Planner Mode with other
3557 applications.
3559 Besides Perl and OpenOffice you'll need the Redland RDF Application
3560 Framework (@url{http://www.redland.opensource.ac.uk/}). It is used to
3561 process the RDF data. Redland is small, but powerful, and available
3562 for many platforms and languages.
3564 As an example the application loads the RDF data each time it is run.
3565 In the real world you probably would use Redland to store the Planner
3566 data in a database, to save the loading step each time you access the
3567 data.
3569 Importing Planner data into Protege
3571 Protege is a popular ontology editor and knowledge management
3572 application. A simple way to import data into it, is to provide a OWL
3573 file that contains the data as well as the schema. To do this:
3575 @itemize
3576 @item
3577 Use @file{planner2protege.pl}
3578 (@url{http://www.rainervolz.de/planner-rdf/planner2protege.pl}) to
3579 combine all OWL files into a single one.
3580 @item
3581 Use CWM (@url{http://www.w3.org/2000/10/swap/doc/cwm.html}) to combine
3582 schema and data, with @code{python cmw --rdf planner-rdf.owl
3583 planner-data.owl --think --rdf >planner2.owl}
3584 @end itemize
3586 Not the most straightforward process, but it works. The resulting file,
3587 here planner2.owl, can then be loaded into Protege.
3589 @node Experimental Functions,  , Publishing, More about Planner
3590 @comment  node-name,  next,  previous,  up
3591 @section Experimental Functions
3592 @cindex @file{planner-experimental.el}, using
3593 @cindex experimental functions, Planner
3595 These functions are experimental. This means that they may not do
3596 exactly what you expect them to do, so keep backups, be careful, and
3597 don't blame us.
3599 To use these functions, make sure that @file{planner-experimental.el} is
3600 in your load path, and add this to your @file{.emacs} (or
3601 @file{_emacs}):
3603 @example
3604 (require 'planner-experimental)
3605 @end example
3607 @file{planner-experimental.el} defines the following interactive
3608 functions:
3610 @defun planner-search-notes-next-match
3611 Jump to the next matching entry.  Call after
3612 @code{planner-search-notes}.
3613 @end defun
3615 @defun planner-search-notes-previous-match
3616 Jump to the previous matching entry.  Call after
3617 @code{planner-search-notes}.
3618 @end defun
3620 @defun planner-remove-duplicates
3621 Remove duplicate tasks.
3622 @end defun
3624 @file{planner-experimental.el} does not define any keybindings.
3626 @node Managing Your Information, Advanced Configuration, More about Planner, Top
3627 @comment  node-name,  next,  previous,  up
3628 @chapter Managing Your Information
3630 Planner can be integrated with other Emacs and even some non-Emacs
3631 programs by loading additional modules. You can pick and choose from
3632 these modules, choosing those that work with programs you use and that
3633 produce information you want to have included in your Planner pages.
3635 @menu
3636 * E-mail::                      Linking notes and tasks to messages
3637 * Scheduling and Time::         Tracking appointments and where your time goes
3638 * Finances::                    Display your account balances and more
3639 * Contacts and Conversations::  BBDB and ERC
3640 * Tracking Research and Resources::  The Web, bibliographies, and bookmarks
3641 * Tracking Development::        
3642 @end menu
3644 @node E-mail, Scheduling and Time, Managing Your Information, Managing Your Information
3645 @comment  node-name,  next,  previous,  up
3646 @section E-mail
3648 Planner can work together with several different Emacs e-mail
3649 clients. If you load the appropriate module for the e-mail client you
3650 use, then your notes and tasks can be annotated with information
3651 pointing to the specific e-mail message you were reading when you
3652 created that note or task. When you are looking at the note or task, you
3653 will be able to jump straight to that message.
3655 @menu
3656 * Unix mail::                   Unix mailboxes: planner-unix-mail.el              
3657 * Gnus::                        Gnus mail and news reader: planner-gnus.el
3658 * VM::                          VM mail reader: planner-vm.el
3659 * Wanderlust::                  Wanderlust mail reader: planner-wl.el
3660 * MH-E::                        MH-E mail reader: planner-mhe.el
3661 * Rmail::                       Rmail: planner-rmail.el
3662 @end menu
3665 @node Unix mail, Gnus, E-mail, E-mail
3666 @comment  node-name,  next,  previous,  up
3667 @subsection Unix mail
3668 @cindex mbox, using Planner with
3669 @cindex Unix mail, using Planner with
3670 @cindex mail client, using Planner with
3672 This module supports links from any kind of Unix mailbox (mbox). To
3673 use this module, make sure that @file{planner-unix-mail.el} is in your
3674 load path and add this to your @file{.emacs} (or @file{_emacs}):
3676 @example
3677 (require 'planner-unix-mail)
3678 @end example
3680 Unix mail URLs are of the form:
3682 @example
3683 ;; mail://PATH/TO/INBOX/message-id
3684 @end example
3686 Annotations will be of the form:
3688 @smallexample
3689 [[mail://PATH/TO/INBOX/E1AyTpt-0000JR-LU%40sacha.ateneo.edu][E-mail from Sacha Chua]]
3690 @end smallexample
3692 @file{planner-unix-mail.el} does not define any interactive functions or
3693 create any new keybindings.
3695 @node Gnus, VM, Unix mail, E-mail
3696 @comment  node-name,  next,  previous,  up
3697 @subsection Gnus
3698 @cindex Gnus, using Planner with
3699 @cindex mail client, using Planner with, Gnus
3701 To use this module, make sure that it is in your load path and put
3702 this in your @file{.emacs} (or @file{_emacs}):
3704 @example
3705 (require 'planner-gnus)
3706 (planner-gnus-insinuate)
3707 @end example
3709 With this module loaded, when you create tasks from Gnus summary or
3710 message buffers, the tasks will be annotated with information from the
3711 message you were looking at when you created each task. A link will also
3712 be created on your planner page that you can select in order to return
3713 to the message.
3715 So, the created task will look something like this:
3717 @smallexample
3718 #A34 _ Send writing to publishme.com from
3719 [[gnus://alt.books.beatgeneration/<Ifo5c.24632$F9.9567@@nwrddc01.gnilink.net>][E-Mail
3720 from editor@@verizon.net]] @{@{Tasks:71@}@} ([[Writing]])
3721 @end smallexample
3723 This module also binds @kbd{C-c C-t} in the Gnus summary and article
3724 views to the command to create a new task.
3726 @file{planner-gnus.el} does not define any interactive functions.
3728 For more information about Gnus, see @inforef{Top, The Gnus Newsreader,
3729 gnus}.
3731 @node VM, Wanderlust, Gnus, E-mail
3732 @comment  node-name,  next,  previous,  up
3733 @subsection VM
3734 @cindex VM, using Planner with
3735 @cindex mail client, using Planner with, VM
3737 To use this module, make sure that @file{planner-vm.el} is in your load
3738 path and add this to your @file{.emacs} (or @file{_emacs}):
3740 @example
3741 (require 'planner-vm)
3742 @end example
3744 VM URLs are of the form:
3746 @example
3747 vm://path/to/inbox/message-id
3748 @end example
3750 Annotations will be of the form:
3752 @smallexample
3753 [[vm://home/test/INBOX/<E1AyTpt-0000JR-LU@@sacha.ateneo.edu>][E-mail from Sacha Chua]]
3754 @end smallexample
3756 @file{planner-vm.el} does not define any interactive functions or
3757 keybindings.
3760 @node Wanderlust, MH-E, VM, E-mail
3761 @comment  node-name,  next,  previous,  up
3762 @subsection Wanderlust
3763 @cindex Wanderlust, using Planner with
3764 @cindex mail client, using Planner with, Wanderlust
3766 To use this module, make sure that @file{planner-wl.el} is in your
3767 load path and add this to your @file{.emacs} (or @file{_emacs}):
3769 @example
3770 (require 'planner-wl)
3771 @end example
3773 Then, when you call @kbd{M-x planner-create-task-from-buffer} from
3774 Wanderlust summary or message buffers, the task will be created with
3775 the correct annotation.
3777 @file{planner-wl} does not define any interactive functions.
3779 To add keybindings to Wanderlust, call:
3781 @example
3782 (planner-wl-insinuate)
3783 @end example
3785 This binds @kbd{F} to @command{planner-create-task-from-buffer}.
3787 @node MH-E, Rmail, Wanderlust, E-mail
3788 @comment  node-name,  next,  previous,  up
3789 @subsection MH-E
3790 @cindex MH-E, using Planner with
3791 @cindex mail client, using Planner with, MH-E
3793 To use this module, make sure that @file{planner-mhe.el} is in your
3794 load path and add this to your @file{.emacs} (or @file{_emacs}):
3796 @example
3797 (require 'planner-mhe)
3798 @end example
3800 Then, when you call @kbd{M-x planner-create-task-from-buffer} from
3801 MH-E summary or message buffers, the task will be created with
3802 the correct annotation.
3804 @file{planner-mhe} does not define any interactive functions.
3806 @node Rmail,  , MH-E, E-mail
3807 @comment  node-name,  next,  previous,  up
3808 @subsection Rmail
3809 @cindex Rmail, using Planner with
3810 @cindex mail client, using Planner with, Rmail
3812 To use this module, make sure that @file{planner-rmail.el} is in your
3813 load path and add this to your @file{.emacs} (or @file{_emacs}):
3815 @example
3816 (require 'planner-rmail)
3817 @end example
3819 Rmail URLs are of the form:
3821 @example
3822 rmail://message-id
3823 @end example
3825 Annotations will be of the form:
3827 @smallexample
3828 [[rmail://<E1AyTpt-0000JR-LU@@sacha.ateneo.edu>][E-mail from Sacha Chua]]
3829 @end smallexample
3831 @file{planner-rmail.el} does not define any interactive functions or
3832 create any new keybindings.
3834 For more information about Rmail, see @inforef{Rmail, Reading Mail With
3835 Rmail, Emacs}.
3837 @node Scheduling and Time, Finances, E-mail, Managing Your Information
3838 @comment  node-name,  next,  previous,  up
3839 @section Scheduling and Time
3841 @menu
3842 * Diary::                       Using the Emacs diary
3843 * Appointments::                Appointments in plan pages: planner-appt.el
3844 * Timeclock::                   Time tracking: planner-timeclock.el
3845 * schedule.el::                 Project completion: planner-schedule.el
3846 @end menu
3849 @node Diary, Appointments, Scheduling and Time, Scheduling and Time
3850 @comment  node-name,  next,  previous,  up
3851 @subsection Diary
3852 @cindex diary, using Planner with
3853 @cindex @file{planner-diary.el}, using
3855 If you use Emacs's diary feature, Planner-Diary could be helpful for
3856 you. It puts all diary entries for the current day in the @samp{*
3857 Diary} section of your day plan page. This section is updated every
3858 time you display the file in Emacs. By default the diary section of
3859 past pages is not updated; it's pretty unlikely that you want to add
3860 new diary entries for the past. (@pxref{Diary, , , Emacs, GNU Emacs
3861 Manual})
3863 If you want to use @file{planner-diary.el}, make sure the file is in
3864 your load path and add this to your @file{.emacs} (or @file{_emacs}):
3866 @example
3867 (require 'planner-diary)
3868 @end example
3870 @file{planner-diary.el} needs @command{fancy-diary-display}.  To use
3871 @command{fancy-diary-display}, add this to your @file{.emacs} (or
3872 @file{_emacs}):
3874 @example
3875 (add-hook 'diary-display-hook 'fancy-diary-display)
3876 @end example
3878 You can use Planner-Diary in two different ways:
3880 @enumerate
3882 @item
3883 If you want the saved files to contain your entries and not just a line
3884 of Lisp, add the following lines to your @file{.emacs} (or @file{_emacs}):
3886 @example
3887 (setq planner-diary-use-diary t)
3888 (planner-diary-insinuate)
3889 @end example
3891 You should also customize or set @code{planner-day-page-template} to
3892 include a @samp{* Diary}:
3894 @example
3895 (setq planner-day-page-template
3896  "* Tasks\n\n\n* Schedule\n\n\n* Diary\n\n\n* Notes")
3897 @end example
3899 @item
3900 (GNU EMACS ONLY) You can put the following line of Lisp code in your
3901 day plan pages to display your diary entries:
3903 @example
3904 <lisp>(planner-diary-entries-here)</lisp>
3905 @end example
3907 You can do this automatically for all day plan pages:
3909 @smallexample
3910 (setq planner-day-page-template
3911   "* Tasks\n\n\n* Diary\n\n<lisp>(planner-diary-entries-here)</lisp>
3912 \n* Notes")
3913 @end smallexample
3915 When you open a day plan page outside Emacs, you will see the line of
3916 Lisp code and not your diary entries.
3918 @end enumerate
3920 @kbd{C-c C-e} updates the diary sections.  @kbd{C-u C-c C-e} forces an
3921 update---it inserts the diary section for the day, even if the day is in
3922 the past or if there is no @samp{Diary} section in the buffer.
3924 If you want to see your diary entries for more than just one day, set
3925 @code{planner-diary-number-of-days} accordingly.  This works for either
3926 of the two approaches.
3928 If you want to use the Cal-Desk package, simply follow the instructions
3929 in @file{cal-desk.el}.  If you get the Cal-Desk layout from the Calendar
3930 buffer, you get it in the day plan buffer, too.
3932 If you use Planner-Diary, you might consider using the Calendar support
3933 of Planner. (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}) To get
3934 Calendar integration, add this to your @file{.emacs} (or @file{_emacs}):
3936 @example
3937 (planner-insinuate-calendar)
3938 @end example
3940 If @code{planner-diary-create-section-flag} is non-nil, sections are
3941 always inserted if necessary.
3943 @defopt planner-diary-create-section-flag
3944 Non-nil means create the requested diary sections if they do not
3945 exist. By default, planner-diary tries to create the section. If you
3946 want more control over your pages, you can set this to nil. Trying to
3947 write a diary section to a page that does not have it yet will then
3948 result in an error.
3949 @end defopt
3951 By default, planner-diary lists only the appointments you have on that
3952 day. If you want the date headers included even when showing the diary
3953 entries for a single day, set planner-diary-include-all-output to
3954 non-nil.
3956 @defopt planner-diary-include-all-output-flag
3957 Non-nil means don't omit any data when copying diary entries into day
3958 pages.
3959 @end defopt
3961 @file{planner-diary.el} defines the following interactive functions:
3963 @defun planner-diary-add-entry date time text
3964 Prompt for a diary entry to add to @code{diary-file} on @var{date}.
3965 Uses @code{planner-annotation-functions} to make hyperlinks.
3966 @var{time} and @var{text} are used in the description."
3967 @end defun
3969 @defun planner-diary-insert-diary force
3970 Insert the fancy diary for the day into the day plan file. If
3971 @var{force} is non-nil, insert a diary section even if there is no
3972 @var{planner-diary-string} in the buffer.
3973 @end defun
3975 @defun planner-diary-insert-diary-maybe force
3976 Maybe insert the fancy diary for the day into the day plan file. If the
3977 current day is in the past and @var{force} is nil, don't do anything. If
3978 @var{force} is non-nil, insert a diary section even if there is no
3979 @code{planner-diary-string} in the buffer.
3980 @end defun
3982 @defun planner-diary-insert-appts force
3983 Insert the diary appointments for the day into the day plan file.  If
3984 @var{force} is non-nil, insert a diary appointments section even if
3985 there is no @code{planner-diary-appts-string} in the buffer.
3986 @end defun
3988 @defun planner-diary-insert-appts-maybe force
3989 Maybe insert the diary appointments for the day into the day plan file.
3990 If the current day is in the past and @var{force} is nil, don't do
3991 anything.  If @var{force} is non-nil, insert a diary appointments
3992 section even if there is no @code{planner-diary-appts-string} in the
3993 buffer.
3994 @end defun
3996 @defun planner-diary-insert-cal-desk force
3997 Insert the cal-desk diary for the day into the day plan file.  If
3998 @var{force} is non-nil, insert a cal-desk diary section even if there is
3999 no @code{planner-diary-cal-desk-string} in the buffer.
4000 @end defun
4002 @defun planner-diary-insert-cal-desk-maybe force
4003 Maybe insert the cal-desk diary for the day into the day plan file.  If
4004 the current day is in the past and @var{force} is nil, don't do
4005 anything.  If @var{force} is non-nil, insert a cal-desk appointments
4006 section even if there is no @code{planner-diary-cal-desk-string} in the
4007 buffer.
4008 @end defun
4010 @defun planner-diary-insert-public force
4011 Insert the public diary for the day into the day plan file.  If
4012 @var{force} is non-nil, insert a public diary section even if there is
4013 no @code{planner-diary-public-string} in the buffer.
4014 @end defun
4016 @defun planner-diary-insert-public-maybe force
4017 Maybe insert the public diary for the day into the day plan file.  If
4018 the current day is in the past and @var{force} is nil, don't do
4019 anything.  If @var{force} is non-nil, insert a public appointments
4020 section even if there is no @code{planner-diary-public-string} in the
4021 buffer.
4022 @end defun
4024 @defun planner-diary-insert-private force
4025 Insert the private diary for the day into the day plan file.  If
4026 @var{force} is non-nil, insert a private diary section even if there is
4027 no @code{planner-diary-private-string} in the buffer.
4028 @end defun
4030 @defun planner-diary-insert-private-maybe force
4031 Maybe insert the private diary for the day into the day plan file.  If
4032 the current day is in the past and @var{force} is nil, don't do
4033 anything.  If @var{force} is non-nil, insert a private appointments
4034 section even if there is no @code{planner-diary-private-string} in the
4035 buffer.
4036 @end defun
4038 @defun planner-diary-insert-all-diaries force
4039 Update all diary sections in a day plan file.  If @var{force} is
4040 non-nil, insert a diary section even if there is no section header.  It
4041 only inserts diaries if the corresponding @code{planner-diary-use-}*
4042 variable is @samp{t}.
4043 @end defun
4045 @defun planner-diary-insert-all-diaries-maybe force
4046 Update all diary sections in a day plan file.  If the current day is in
4047 the past and @var{force} is nil, don't do anything.  If @var{force} is
4048 non-nil, insert a diary section even if there is no section header.  It
4049 only inserts diaries if the corresponding @code{planner-diary-use-}*
4050 variable is @samp{t}.
4051 @end defun
4053 @defun planner-diary-show-day-plan-or-diary
4054 Show the day plan or diary entries for the date under point in calendar.
4055 Add this to @code{calendar-move-hook} if you want to use it.  In that
4056 case, you should also @command{remove-hook} @samp{planner-calendar-show}
4057 from @code{calendar-move-hook}.
4058 @end defun
4061 @file{planner-diary.el} adds the following keybinding to Planner, if
4062 @command{planner-diary-insinuate} is in your @file{.emacs} (or
4063 @file{_emacs}):
4065 @itemize
4067 @item
4068 @kbd{C-c C-e} updates the diary sections.
4070 @end itemize
4072 @menu
4073 * Planner-Diary Advanced Features::  
4074 @end menu
4076 @node Planner-Diary Advanced Features,  , Diary, Diary
4077 @comment  node-name,  next,  previous,  up
4078 @subsubsection Planner-Diary Advanced Features
4079 @cindex diary, using Planner with
4080 @cindex @file{planner-diary.el}, advanced features
4082 The features described here are part of the development version.  They
4083 are subject to change without notice.  They may be buggy.  The
4084 documentation may be inaccurate.  Use at your own risk.
4086 There is a lot of code redundancy in the development version.  This is
4087 intentional and makes it easier to change the code for one type of diary
4088 section without breaking others.
4090 Currently Planner-Diary supports six different views of your diary
4091 entries:
4093 @enumerate
4094 @item
4095 Ordinary fancy diary display (what you get by pressing @kbd{d} in the
4096 calendar buffer with @code{fancy-diary-display} switched on)
4098 @item
4099 Schedule/Appointments (all entries from 1 that have a time assigned to
4100 them
4102 @item
4103 Diary without appts (1 without 2)
4105 @item
4106 cal-desk display (appts on top, non appts entries at bottom)
4108 @item
4109 A private diary (same as 1, but uses a different diary-file)
4111 @item
4112 A public diary (same as 1, but uses a different diary-file)
4113 @end enumerate
4115 Put the following line of Lisp code in your day plan pages to display
4116 your diary entries:
4118 @example
4119 <lisp>(planner-diary-entries-here)</lisp>
4120 @end example
4122 The function @code{planner-diary-entries-here} takes two optional
4123 arguments---the diary file you want to use and the number of days you
4124 want to display.
4126 @node Appointments, Timeclock, Diary, Scheduling and Time
4127 @comment  node-name,  next,  previous,  up
4128 @subsection Appointments
4129 @cindex appointments
4130 @cindex @file{planner-appt.el}, using
4132 If you would like to use planner for your appointment alerts
4133 instead of using the diary system, you might like to try
4134 @file{planner-appt}.
4136 According to your preferences, you may choose from two different
4137 approaches. Appointments in task descriptions on today's plan
4138 page are like this:
4140 @example
4141 #A   _ @@12:45 Do something (TaskPool)
4142 @end example
4144 @noindent
4145 and appointments in today's schedule section are like this:
4147 @example
4148 * Schedule
4150   9:00 | 12:00 | Read Simmel's Philosophy of Money
4151 @@12:45 |       | Do Something Else
4152 @@13:00 | 14:00 | lunch
4153 @end example
4155 @noindent
4156 You can even use both at the same time if you like.
4158 @c Jim Ottaway <j.ottaway@lse.ac.uk>: Changed these kinds of heading
4159 @c back to @unnumberedsec, but left the originals commented out in
4160 @c case there was a good reason for the @strong formatting.
4162 @c @noindent
4163 @c @strong{Usage}
4164 @unnumberedsubsubsec Usage
4166 In the file where you configure Planner, add one of the following.
4168 @itemize
4169 @item
4170 For task-based appointments: @code{(planner-appt-use-tasks)}
4171 @item
4172 For schedule-based appointments: @code{(planner-appt-use-schedule)}
4173 @item
4174 For both task- and schedule-based appointments:
4175 @code{(planner-appt-use-tasks-and-schedule)}
4176 @end itemize
4178 @noindent
4179 And finally if you want everything to be updated automatically add:
4181 @example
4182 (planner-appt-insinuate)
4183 @end example
4185 If you don't want to do the insinuation then you can call:
4187 @example
4188 M-x planner-appt-update
4189 @end example
4191 @noindent
4192 after editing appointments on the page (note that this is not
4193 necessary if you use tasks for the appointments and you don't edit
4194 the task descriptions outside of @code{planner-edit-task-description}).
4196 Try both methods; if you find that you prefer one over the
4197 other, use one of the specific @code{planner-appt-use-} functions, as
4198 there are some performance gains when using one method exclusively.
4200 @menu
4201 * Task-based Appointments::     
4202 * Schedule-based Appointments::  
4203 * Viewing Appointments::        
4204 * Appointment Updating on Save::  
4205 * Appointment and Calendar Integration::  
4206 * Appointment Hooks::           
4207 @end menu
4210 @node Task-based Appointments, Schedule-based Appointments, Appointments, Appointments
4211 @comment  node-name,  next,  previous,  up
4212 @subsubsection Task-based Appointments
4213 @cindex appointments, task-based
4214 @cindex task-based appointments
4216 A task has an appointment if it looks like this:
4218 @example
4219 #A   _ @@12:45 Do something (TaskPool)
4220 @end example
4222 @noindent
4223 i.e., if it has @@ followed by a time at the beginning.  This means
4224 the task is a regular appointment, and will not be carried forward
4225 at the start of a new day.
4227 Alternatively, it may have a !, like this:
4229 @example
4230 #A   _ !12:45 Do something else (TaskPool)
4231 @end example
4233 @noindent
4234 This makes it a "nagging" appointment, which @emph{will} be carried
4235 forward.  It will, however, lose the appointment time in the
4236 process.
4238 This may seem like a strange feature, but here is Henrik's
4239 reasoning:
4241 @quotation
4242 Sometimes I have a task that I want to do at a certain time, so I
4243 make it an appointment.  If I don't get around to doing it anyway,
4244 I want it to be carried forward.  Basically, I sometimes use
4245 appointments on tasks to annoy me until I get them done. :)
4246 @end quotation
4248 You can edit, move and delete tasks with the usual functions, and
4249 appointments will be updated automatically.
4251 You can update all task appointments on your page with
4253 @example
4254 M-x planner-appt-update
4255 @end example
4257 @c @noindent
4258 @c @strong{Cyclic Entries}
4260 @unnumberedsubsubsec Cyclic Entries
4261 @cindex appointments, cyclic task entries
4263 If you have @file{planner-cyclic} (@pxref{Cyclic Tasks}) loaded, entries
4264 in your cyclical tasks file such as
4266 @example
4267 Friday #A _ @@12:45 staff meeting
4268 @end example
4270 @noindent
4271 will appear every Friday and there will be an appointment alert set
4274 @c @noindent
4275 @c @strong{Appointments Section}
4276 @unnumberedsubsubsec Appointments Section
4277 @cindex appointments, appointments section
4279 You can have all task-based appointments copied to a separate section,
4280 providing an overview of your appointments.
4282 To do this, add
4284 @example
4285 (setq planner-appt-task-use-appointments-section-flag t)
4286 @end example
4288 @noindent to your configuration, or use @kbd{M-x customize-variable}.
4290 The variable @code{planner-appt-task-appointments-section} is the name
4291 of the section where the appointments will be copied.  By default, it is
4292 set to @code{"Schedule"}, which means that task appointments will be
4293 intermingled with schedule entries.
4295 It is also a good idea to add the section you wish to use to
4296 @code{planner-day-page-template} in order to control where that section
4297 will appear on the page (otherwise it will appear at the top).
4299 The format of the appointments follows that of a schedule; if you
4300 don't like the way it looks, you can write something different and set
4301 @code{planner-appt-format-appt-section-line-function} appropriately.
4302 See the documentation for
4303 @code{planner-appt-format-appt-section-line-function} for details.  It
4304 should be fairly easy to see what needs to be done if you look at the
4305 source for the default function (which is
4306 @code{planner-appt-format-appt-section-line}).
4308 If the section specified in
4309 @code{planner-appt-task-appointments-section} is the same as the
4310 schedule section specified in @code{planner-appt-schedule-section} (by
4311 default @code{"Schedule"}), the default formatting function adds a
4312 @samp{#} to the description so that one can visually distinguish
4313 appointments from the task list from those that have been added to the
4314 schedule.
4316 @node Schedule-based Appointments, Viewing Appointments, Task-based Appointments, Appointments
4317 @comment node-name,  next,  previous,  up
4318 @subsubsection Schedule-Based Appointments
4319 @cindex appointments, schedule-based
4320 @cindex schedule-based appointments
4322 Some scheduled tasks require reminders, others don't.  In this
4323 schedule:
4325 @example
4326 * Schedule
4328 9:00   | 12:00 | Read Simmel's Philosophy of Money
4329 @@12:45          Do Something Else
4330 @@13:00 | 14:00 | lunch
4331 @@14:30 |       | Meet jrs to discuss his dissertation
4332 @@16:00           Test Society seminar
4333 18:00            go home
4334 @end example
4336 @noindent
4337 those that have an @@ prefix will be added to the appointment
4338 reminder list; the others will not.  The formats that are
4339 recognized are fairly flexible, as you can see from the example.
4341 If you change your schedule, you can update the appointment list
4342 with
4344 @example
4345 M-x planner-appt-update
4346 @end example
4348 @noindent You can also have the schedule sorted as part of the update,
4349 if you have this in your configuration:
4351 @example
4352 (setq planner-appt-sort-schedule-on-update-flag t)
4353 @end example
4355 @c @noindent 
4356 @c @strong{Cyclical Entries}
4357 @unnumberedsubsubsec Cyclical Entries
4358 @cindex appointments, cyclic schedule entries
4360 You can also have cyclical schedule entries(@pxref{Cyclic Tasks}) if you
4363 @example
4364 (planner-appt-schedule-cyclic-insinuate)
4365 @end example
4367 @noindent to your configuration.
4369 If you put an entry in your cyclical task file like this
4371 @example
4372 Friday @@12:45 | 13:45 | Staff Meeting
4373 @end example
4375 @noindent
4376 then it will appear in your schedule every Friday, and an
4377 appointment alert will be set up.
4379 @node Viewing Appointments, Appointment Updating on Save, Schedule-based Appointments, Appointments
4380 @comment  node-name,  next,  previous,  up
4381 @subsubsection Viewing Appointments
4382 @cindex appointments, viewing
4384 The command @command{planner-appt-show-alerts} will show all appointment
4385 alerts currently scheduled.
4387 There are two commands that show appointments in the future; the one
4388 displays them in a pop-up buffer, the other puts the information into
4389 the current day page.
4391 @deffn {Command} planner-appt-forthcoming-display &optional days
4392 Display a buffer of appointments for today and the next
4393 @var{days}. Optional prefix argument @var{days} is the number of days
4394 ahead to look. Its default value is defined by
4395 @code{planner-appt-forthcoming-days}.
4396 @end deffn
4398 @deffn {Command} planner-appt-forthcoming-update-section &optional days
4399 In today's plan page, add or update a list of forthcoming
4400 appointments. Optional prefix argument @var{days} is the number of
4401 days ahead to look. Its default value is defined by
4402 @code{planner-appt-forthcoming-days}.  The section heading to use is
4403 defined by @code{planner-appt-forthcoming-appt-section}.
4404 @end deffn
4406 @defopt planner-appt-forthcoming-days
4407 The number of days to look ahead for forthcoming appointments.  The
4408 default value is seven days.
4409 @end defopt
4411 @defopt planner-appt-forthcoming-appt-section
4412 The name of the section to use for inserting a list of forthcoming
4413 appts.  The default value is @code{"Forthcoming Appointments"}.
4414 @end defopt
4416 @defopt planner-appt-forthcoming-look-at-cyclic-flag
4417 When non-nil, find forthcoming appointments in the cyclic diary file
4418 (@pxref{Cyclic Tasks}) as well as in plan pages. Default is @samp{t}.
4419 @end defopt
4421 @node Appointment Updating on Save, Appointment and Calendar Integration, Viewing Appointments, Appointments
4422 @comment  node-name,  next,  previous,  up
4423 @subsubsection Appointment Updating on Save
4424 @cindex appointments, updating on save
4426 @defopt planner-appt-update-appts-on-save-flag
4427 When non-nil, update appointment reminders whenever today's plan page is
4428 saved. Default value is @samp{nil}.
4429 @end defopt
4431 @node Appointment and Calendar Integration, Appointment Hooks, Appointment Updating on Save, Appointments
4432 @comment  node-name,  next,  previous,  up
4433 @subsubsection Appointment and Calendar Integration
4435 Not strictly part of appointment handling, but if one isn't using
4436 the diary, marking dates with plan pages seems to make sense.
4438 @defun planner-appt-calendar-insinuate
4439 Add a hook to diary display so that dates in the calendar that have day
4440 pages are highlighted
4441 @end defun
4443 @node Appointment Hooks,  , Appointment and Calendar Integration, Appointments
4444 @comment  node-name,  next,  previous,  up
4445 @subsubsection Appointment Hooks
4447 @defvr {Hook} planner-appt-update-hook
4448 Hook run after @code{planner-appt-update} has updated the appointment
4449 list.
4450 @end defvr
4452 @node Timeclock, schedule.el, Appointments, Scheduling and Time
4453 @comment  node-name,  next,  previous,  up
4454 @subsection Timeclock
4455 @cindex @file{planner-timeclock.el}, using
4456 @cindex @file{planner-timeclock-summary.el}, using
4457 @cindex @file{planner-timeclock-summary-proj.el}, using
4458 @cindex timeclock, using Planner with
4460 This module allows you to clock in and clock out of your projects
4461 (@pxref{Time Intervals, , , Emacs, GNU Emacs Manual}). You can also
4462 generate reports with the @code{<timeclock-report>} tag. You may want
4463 to read the @ref{Keeping Track of Time} page to see how you can use
4464 planner-timeclock to produce detailed reports.
4466 With @file{planner-timeclock.el} loaded,
4467 @command{planner-task-in-progress} clocks in a task.  To clock out,
4468 use @command{planner-task-done} or @command{timeclock-out}.
4470 @file{planner-timeclock.el} defines the following keybindings:
4472 @itemize
4473 @item @kbd{C-c C-i}: @code{planner-task-in-progress}.
4474 @item @kbd{C-c C-o}: @code{timeclock-out}.
4475 @item @kbd{C-c C-T C-i}: @code{planner-timeclock-in}. (XEmacs)
4476 @item @kbd{C-c C-T C-o}: @code{timeclock-out}. (XEmacs)
4477 @item @kbd{C-c C-S-t C-i}: @code{planner-timeclock-in}. (GNU Emacs)
4478 @item @kbd{C-c C-S-t C-o}: @code{timeclock-out}. (GNU Emacs)
4479 @end itemize
4481 If you use @code{timeclock} a lot, you may also be interested in
4482 Dryice Liu's @file{planner-timeclock-summary.el}, which produces
4483 timeclock reports for planner files.
4485 Here is a sample report:
4487 @example
4488 Project               |     Time| Ratio| Task
4489 PlannerMaintenance    |  0:03:58|  1.1%| Merge doc patch
4490                       |  0:17:09|  5.0%| Track down subdirectories
4491                       |  0:18:11|  5.3%| Merge planner-timeclock-summary-proj.el
4492                Total: |  0:39:18| 11.4%|
4493 JapanCaseStudy        |  2:37:56| 45.6%| Prototype search result page
4494                       |  0:31:50|  9.2%| Update design documents
4495                Total: |  3:09:46| 54.8%|
4496 ChristmasLetter       |  1:46:37| 30.8%| Write and send my Christmas letters
4497                Total: |  1:46:37| 30.8%|
4498 LinuxPeople           |  0:10:29|  3.0%| Send questions for Linux in Education
4499                Total: |  0:10:29|  3.0%|
4500 @end example
4502 If you add @code{(require 'planner-timeclock-summary)} to your
4503 @file{~/.emacs}, you can then use it in two ways.
4505 @itemize
4507 @item Display a temporary buffer
4509 Call @code{planner-timeclock-summary-show} and Emacs will ask you which
4510 day's summary do you want. Choose the date as anywhere else of
4511 Emacs planner, and a tempory buffer will be displayed with the
4512 timeclock summary of that day.
4514 To review tasks over a date range, use
4515 @code{planner-timeclock-summary-show-range}. You can use a regexp or a
4516 function to filter tasks by calling
4517 @code{planner-timeclock-summary-show-range-filter}.
4519 @item Rewrite sections of your planner
4521 Choose this approach if you want timeclock summary to be in their
4522 own section and you would like them to be readable in your plain
4523 text files even outside Emacs. Caveat: The timeclock summary
4524 section should already exist in your template and will be rewritten
4525 when updated. Tip: Add @code{planner-timeclock-summary-section}
4526 (default: @samp{"Timeclock"}) to your @code{planner-day-page-template}.
4528 To use, call @code{planner-timeclock-summary-update} in the planner
4529 day page to update the section. If you want rewriting to be
4530 automatically performed, call
4531 @code{planner-timeclock-summary-insinuate} in your @file{.emacs} file.
4532 @end itemize
4534 @file{planner-timeclock-summary-proj.el} produces task / time
4535 breakdowns on plan pages. Reports are of the form:
4537 @example
4538 TASK 0 | duration
4539 TASK 1 | duration
4540  TOTAL | duration.
4541 @end example
4543 To use, add @code{(require 'planner-timeclock-summary)} to your
4544 @file{~/.emacs}. Call @code{planner-timeclock-summary-proj-current}
4545 from a project page. The report is inserted at the current position in
4546 the buffer. The function @code{planner-timeclock-summary-proj-section}
4547 does the same but the report is inserted inside a section called
4548 @samp{* Report}.
4550 @node schedule.el,  , Timeclock, Scheduling and Time
4551 @comment  node-name,  next,  previous,  up
4552 @subsection @file{schedule.el}
4553 @cindex @file{planner-schedule.el}, using
4554 @cindex @file{schedule.el}, using Planner with
4556 @file{planner-schedule.el} allows you to project task completion time.
4557 Tasks should be of the form:
4559 @example
4560 #A0 _ 2h Do something
4561 #B0 _ 1h30m Do something
4562 #B0 _ 2d Do something
4563 #B0 _ 2w Do something
4564 #B0 _ 10s Do something
4566 s: seconds, m: minutes, h: hours, d: days, w: weeks
4567 @end example
4569 You can get @file{schedule.el} from
4570 @url{http:// www.newartisans.com/ johnw/ Emacs/ schedule.el}
4572 @file{planner-schedule.el} defines the following interactive
4573 functions:
4575 @defun planner-schedule-show-end-project
4576 Display the estimated project completion time.
4577 @end defun
4579 @file{planner-schedule.el} defines the following keybindings:
4581 @kbd{C-c RET} is bound to @command{planner-schedule-show-end-project}.
4582 @kbd{C-c C-m} is also bound to
4583 @command{planner-schedule-show-end-project}.
4585 In XEmacs, @command{planner-schedule-show-end-project} is bound to
4586 @kbd{C-c C-T c-e} and @kbd{C-c C-S-t C-e}.
4588 @file{schedule.el} provides a single Lisp function,
4589 @code{schedule-completion-time}. It takes an Emacs time object and a
4590 quantity of seconds. It returns an Emacs time object that represents
4591 when the given number of seconds will be completed, assuming that work
4592 can only be done during work hours.
4594 The available work hours are affected by several factors:
4596 @enumerate
4598 @item
4599 If @file{timeclock.el} is being used, the amount of time left in the
4600 current work day (@code{timeclock-workday-remaining})
4601 (@pxref{Time Intervals, , , Emacs, GNU Emacs Manual})
4603 @item
4604 The amount of time in each work day (@code{schedule-workday})
4606 @item
4607 The definition of a work week (@code{schedule-week})
4609 @item
4610 Any holidays defined in the Emacs calendar
4611 (@pxref{Holidays, , , Emacs, GNU Emacs Manual})
4613 @item
4614 Any appointments in the Emacs diary
4615 (@pxref{Appointments, , , Emacs, GNU Emacs Manual})
4617 @end enumerate
4619 Taking all of the ``block out'' periods into account,
4620 @code{schedule-completion-time} will compute when the given number of
4621 seconds will be done, based on your current definitions of time
4622 available.
4624 As an example, here's a function which, given a list of durations
4625 in seconds, will return a list of completion times starting from
4626 the current moment:
4628 @example
4630   (defun compute-completion-times (&rest durations)
4631     ``Compute completion times for a list of DURATIONS (in seconds).''
4632     (let ((now (current-time)))
4633       (mapcar
4634        (function
4635         (lambda (dura)
4636           (setq now (schedule-completion-time now dura))))
4637        durations)))
4639 @end example
4641 To call this function, do:
4643 @example
4645 (compute-completion-times 3600 7200 3600)
4647 @end example
4649 @file{schedule.el} does not define any interactive functions, or
4650 keybindings.
4652 @node Finances, Contacts and Conversations, Scheduling and Time, Managing Your Information
4653 @comment  node-name,  next,  previous,  up
4654 @section Finances
4655 @cindex finances
4657 Currently, Planner provides one module dedicated to tracking your
4658 finances. This module works with a program called Ledger.
4660 @menu
4661 * Ledger::                      Personal finances: planner-ledger.el
4662 @end menu
4664 @node Ledger,  , Finances, Finances
4665 @comment  node-name,  next,  previous,  up
4666 @subsection Ledger
4667 @cindex finances
4668 @cindex @file{planner-ledger.el}, using
4669 @cindex @file{ledger}, using Planner with
4671 @file{planner-ledger.el} provides integration between planner and John
4672 Wiegley's ledger accounting program, which can be found at
4673 @url{http://newartisans.com/johnw/ledger.tar.gz}.
4675 To use planner-ledger to insert a ledger balance overview and a list
4676 of pending transactions into planner day pages, make sure that your
4677 day page includes sections that match
4678 @code{planner-ledger-balance-regexp} and
4679 @code{planner-ledger-pending-regexp}. Example:
4681 @example
4682 * Tasks
4684 * Ledger
4686 ** Pending transactions
4688 * Notes
4690 @end example
4692 You can manually update ledger sections with the following command:
4694 @defun planner-ledger-insert-maybe
4695 Update any ledger sections on the current page.
4696 @end defun
4698 You can also automatically update ledger sections with the following
4699 hook:
4701 @example
4702 (add-hook 'planner-goto-hook 'planner-ledger-insert-maybe)
4703 @end example
4705 You can create ledger entries from specially-formatted tasks using
4706 @command{planner-ledger-add-entry-from-task}.  Tasks should be of the
4707 form @samp{payment due: payee, amount [comment]}.  Example:
4709 @example
4710 #A1 _ payment due: foobar, $1000.00 some comment here
4711 #A2 _ payment due: baz, 1000.00
4712 @end example
4714 @defun planner-ledger-add-entry-from-task
4715 Create a ledger entry based on the task at point.  Task should match
4716 @code{planner-ledger-payment-task-regexp}.
4717 @end defun
4719 @defopt planner-ledger-balance-accounts
4720 List of accounts to be included or excluded from the balance overview.
4721 @samp{+} includes all matching accounts, and @samp{-} excludes
4722 matching accounts.  See the documentation for
4723 @command{ledger-run-ledger} for more details.
4724 @end defopt
4726 @defopt planner-ledger-balance-regexp
4727 Regular expression matching section for ledger balance.  Do not store
4728 other data in this section, as it will be overwritten.
4729 @end defopt
4731 @defopt planner-ledger-pending-regexp
4732 Regular expression matching section for ledger balance.  Do not store
4733 other data in this section, as it will be overwritten.
4734 @end defopt
4736 @defopt planner-ledger-payment-task-regexp
4737 Regular expression matching special ledger tasks.
4738 @end defopt
4740 @node Contacts and Conversations, Tracking Research and Resources, Finances, Managing Your Information
4741 @comment  node-name,  next,  previous,  up
4742 @section Contacts and Conversations
4743 @cindex contacts
4744 @cindex conversations
4746 Planner has two modules available for keeping track of contact and
4747 conversation information. The first uses the Big Brother Database
4748 (BBDB), and the second uses Emacs Relay Chat (ERC). BBDB is a full
4749 contact database. ERC is a client for chatting online on Internet Relay
4750 Chat (IRC) networks. The ERC module for Planner will help you keep
4751 track of online conversations you have if you use ERC for those
4752 conversations, but does not by itself store contact information other
4753 than the time you had the conversation, the network and channel you were
4754 on when you had it, and maybe who you had it with. If you are looking
4755 for a way to manage your full address book, then @file{planner-bbdb.el}
4756 in combination with BBDB is what you are looking for.
4758 @menu
4759 * BBDB::                        Contacts: planner-bbdb.el
4760 * Emacs Relay Chat::            Internet Relay Chat: planner-erc.el
4761 @end menu
4763 @node BBDB, Emacs Relay Chat, Contacts and Conversations, Contacts and Conversations
4764 @comment  node-name,  next,  previous,  up
4765 @subsection BBDB
4766 @cindex @file{planner-bbdb.el}, using
4767 @cindex BBDB, using Planner with
4769 @file{planner-bbdb.el} allows you to refer to your contacts easily
4770 from within a planner page. @inforef{Top, the BBDB Manual, bbdb}.
4772 @samp{[[bbdb://Sacha.*Chua][Sacha]]}, for example, will be linked to
4773 the blog, web or net fields of the first matching BBDB record.
4775 @file{planner-bbdb.el} does not define any interactive functions, or
4776 keybindings.
4778 @node Emacs Relay Chat,  , BBDB, Contacts and Conversations
4779 @comment  node-name,  next,  previous,  up
4780 @subsection Emacs Relay Chat
4781 @cindex @file{planner-erc.el}, using
4782 @cindex ERC, using Planner with
4783 @cindex Emacs Relay Chat, using Planner with
4784 @cindex IRC, using Planner with
4785 @cindex Internet Relay Chat, using Planner with
4787 To use planner-erc, place @file{planner-erc.el} in your load path
4788 and add this to your @file{.emacs} (or @file{_emacs}):
4790 @example
4792 (require 'planner-erc)
4794 @end example
4796 ERC URLs are of the form, @samp{irc://server/nick/#channel},
4797 @samp{irc://server/nick} or @samp{irc://server/nick}.
4799 Annotations will be of the form:
4801 @example
4803 [[irc://server/nick/#channel][Chat with nick on server#channel]]
4804 [[irc://server/nick][Chat with nick on server]]
4805 [[irc://server][Chat on server]]
4807 @end example
4809 @file{planner-erc.el} does not define any interactive functions, or
4810 keybindings.
4812 @node Tracking Research and Resources, Tracking Development, Contacts and Conversations, Managing Your Information
4813 @comment  node-name,  next,  previous,  up
4814 @section Tracking Research and Resources
4816 Planner provides three modules for keeping track of information
4817 involving three specific tools: w3m, BibTeX, and @file{bookmark.el}.
4819 @menu
4820 * W3m::                         Web browser: planner-w3m.el
4821 * BibTeX::                      Bibliographies: planner-bibtex.el
4822 * Bookmark::                    Bookmarks: planner-bookmark.el
4823 @end menu
4825 @node W3m, BibTeX, Tracking Research and Resources, Tracking Research and Resources
4826 @comment node-name,  next,  previous,  up
4827 @subsection W3m
4828 @cindex @file{planner-w3m.el}, using
4829 @cindex w3m, using Planner with
4831 This module allows you to create tasks from a w3m buffer.
4833 @file{planner-w3m.el} does not define any interactive functions, or
4834 keybindings.
4836 @node BibTeX, Bookmark, W3m, Tracking Research and Resources
4837 @comment node-name,  next,  previous,  up
4838 @subsection BibTeX
4839 @cindex @file{planner-bibtex.el}, using
4841 BibTeX URLs are of the form @samp{bibtex:file/name:key}.
4843 @file{planner-bibtex.el} does not define any interactive functions.
4845 @node Bookmark,  , BibTeX, Tracking Research and Resources
4846 @comment  node-name,  next,  previous,  up
4847 @subsection Bookmark
4848 @cindex bookmarks
4849 @cindex @file{bookmark.el}, using Planner with
4850 @cindex @file{planner-bookmark.el}, using
4852 @file{planner-bookmark.el} uses the @file{remember} package to create a
4853 note whenever you create a bookmark (see @inforef{Bookmarks, Bookmarks,
4854 Emacs}). For more information about @file{remember}, please check out
4856 @itemize
4857 @item
4858 @uref{http://www.emacswiki.org/cgi-bin/wiki/RememberMode} -
4859 EmacsWiki.org page
4860 @item
4861 @uref{http://sacha.free.net.ph/notebook/doc/dev/remember/remember.html}
4862 - Online info documentation
4863 @end itemize
4865 Configure remember according to the instructions in
4866 @file{remember-planner.el} so that notes are saved to your planner
4867 pages.
4869 @defopt planner-bookmark-take-note-after-set-bookmark-flag
4870 Non-nil means show a @code{remember} buffer after setting a new
4871 bookmark.
4872 @end defopt
4874 When you create a bookmark, Emacs will open a buffer for your notes.
4875 @kbd{C-c C-c} saves the buffer to today's page. If you don't want to
4876 save a note, you can kill the buffer.
4878 Bookmark URLs are of the form @samp{bookmark://bookmark-name}.
4880 @file{planner-bookmark.el} does not define any interactive functions.
4882 @node Tracking Development,  , Tracking Research and Resources, Managing Your Information
4883 @comment  node-name,  next,  previous,  up
4884 @section Tracking Development
4885 @cindex version control, using Planner with
4887 Planner has three modules geared toward programmers. Two modules deal
4888 with version control and integrating information from those projects
4889 into the planner page. One module deals with the Gnats bug-tracking
4890 system.
4892 @menu
4893 * Log Edit::                    Changelogs: planner-log-edit.el
4894 * XTLA::                        TLA changesets: planner-xtla.el
4895 * Gnats::                       Gnats: The GNU bug reporting system
4896 @end menu
4898 @node Log Edit, XTLA, Tracking Development, Tracking Development
4899 @comment  node-name,  next,  previous,  up
4900 @subsection Log Edit
4901 @cindex cvs, using Planner with
4902 @cindex @file{planner-log-edit}, using
4903 @cindex version control, using Planner with
4905 This module allows you to automatically record CVS (and VC) commits
4906 in today's page.
4908 You can load the module with @code{(require 'planner-log-edit)}. When
4909 you load the module, @code{planner-log-edit-add-note} will be added to
4910 @code{log-edit-done-hook}.  A note containing the text of the commit
4911 and optionally a list of modified files will be added to today's page
4912 if you use the the Emacs version control interface. (@pxref{Version
4913 Control, , , Emacs, GNU Emacs Manual})
4915 @defopt planner-log-edit-include-files-flag
4916 Non-nil means include a list of committed files in the note.
4917 @end defopt
4919 @defopt planner-log-edit-notice-commit-function
4920 Non-nil means include a list of committed files in the note. If you
4921 want to enable this feature for some projects but not for others, set
4922 this to a function that returns t only for the commits you want to
4923 note.
4924 @end defopt
4926 @file{planner-log-edit.el} does not define any interactive functions.
4928 @node XTLA, Gnats, Log Edit, Tracking Development
4929 @comment  node-name,  next,  previous,  up
4930 @subsection XTLA
4931 @cindex XTLA
4932 @cindex @file{planner-xtla.el}, using
4934 This module allows you to refer to changesets in Tom Lord's Arch (tla)
4935 version control system. You can load the module with @code{(require
4936 'planner-xtla)}. When you load the module, you can create tasks from
4937 XTLA windows by positioning point on a revision.
4939 XTLA URLs are of the form
4940 @samp{xtla://miles@@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-19}
4942 @file{planner-xtla.el} does not define any interactive functions.
4944 @node Gnats,  , XTLA, Tracking Development
4945 @comment  node-name,  next,  previous,  up
4946 @subsection Gnats
4948 @cindex Gnats
4949 @cindex @file{planner-gnats.el}, using
4950 @cindex bug reports, tracking
4952 @file{planner-gnats.el} provides support for the GNU problem report
4953 management system Gnats. This module allows you to refer to problem
4954 reports using hyperlinks.
4956 Configure your Emacs for Gnats access, then add @samp{(require
4957 'planner-gnats)} to your @file{.emacs}. You can then create tasks from
4958 Gnats edit or view buffers.
4960 To add keybindings to Gnats, use @samp{(planner-gnats-insinuate)}.
4962 Gnats URLs are of the form @samp{gnats:pr-number}.
4964 @file{planner-gnats.el} does not define any interactive functions.
4966 @node Advanced Configuration, Reference Material, Managing Your Information, Top
4967 @comment  node-name,  next,  previous,  up
4968 @chapter Advanced Configuration
4969 @cindex configuration, advanced
4971 @menu
4972 * Customizing Your Day Pages::  Change your templates
4973 * Variables to Customize::      Change various aspects of Planner behavior
4974 * Ideas for Other Keybindings::  Add to and change the default keybindings
4975 @end menu
4977 @node Customizing Your Day Pages, Variables to Customize, Advanced Configuration, Advanced Configuration
4978 @comment  node-name,  next,  previous,  up
4979 @section Customizing Your Day Pages
4981 With the variable @code{planner-day-page-template}, you can define how
4982 you want any newly created day planner pages to look.
4984 You might want to include a section for your diary entries. For how to
4985 do this, see @ref{Diary}.
4987 You can add interactive Lisp buttons with the @file{planner-lisp.el}
4988 module. (@pxref{Interactive Lisp})
4990 Your @code{planner-day-page-template} can also include @samp{|<lisp>|}
4991 tags.
4993 For more complex day pages, you can set
4994 @code{planner-day-page-template} to a function that will be called
4995 from an empty day page buffer. The function should initialize the
4996 contents of the day page.
4998 @node Variables to Customize, Ideas for Other Keybindings, Customizing Your Day Pages, Advanced Configuration
4999 @comment  node-name,  next,  previous,  up
5000 @section Variables to Customize
5001 @cindex customize, variables to
5002 @cindex variables, customization of
5003 @cindex configuration, advanced, variables
5005 If you want to change @code{planner-directory} and some other
5006 variables, either use Customize (@kbd{M-x customize-group RET planner
5007 RET}) or use @code{setq}.  An example of the latter follows.
5009 @example
5010 (setq planner-directory "~/Plans")
5011 @end example
5013 Other user options are:
5015 @vindex planner-use-day-pages
5016 @defopt planner-use-day-pages
5017 If you really don't like day pages, you can set this variable to nil
5018 and you won't be prompted for dates for tasks (and notes, if using
5019 @file{remember-planner}).
5020 @end defopt
5022 @vindex planner-use-plan-pages
5023 @defopt planner-use-plan-pages
5024 If you really don't like plan pages, you can set this variable to nil
5025 and you won't be prompted for plan pages for tasks (and notes, if
5026 using @file{remember-planner}).
5027 @end defopt
5029 @vindex planner-mode-hook
5030 @defopt planner-mode-hook
5031 List of functions to run after @code{planner-mode} is initialized.
5032 @end defopt
5034 @vindex planner-tasks-file-behavior
5035 @defopt planner-tasks-file-behavior
5036 This variable controls what happens to files Planner opens by itself.
5037 If your tasks are associated with plan pages, the plan pages are
5038 updated whenever a task is rescheduled.  This could lead to a lot of
5039 open buffers as Planner applies updates to all linked files.
5040 By default, Planner is configured to do nothing.
5041 A value of @samp{save} means save but do not close buffers, and a
5042 value of @samp{nil} means do not save any of the buffers.
5043 @end defopt
5045 @vindex planner-add-task-at-end-flag
5046 @defopt planner-add-task-at-end-flag
5047 This variable controls where new tasks are created.  Non-nil means
5048 create tasks at the bottom of the first task block.  If you set this
5049 to non-nil, new tasks will be listed in order of creation (oldest).
5050 Tasks carried over from previous days will appear at the bottom of the
5051 list.
5053 Nil means create tasks at the top of the first task block.
5054 Carried-over tasks and newly created tasks are prominently placed on
5055 top of the list of tasks for the day.
5056 @end defopt
5058 @vindex planner-default-page
5059 @defopt planner-default-page
5060 Default page for created tasks.  This is used as the initial value for
5061 tasks.  After you create a task, it will be set to the previous page
5062 used.
5063 @end defopt
5065 @vindex planner-hide-task-status-when-highlighting
5066 @defopt planner-hide-task-status-when-highlighting
5067 Font-locking for tasks may be enough for you to determine status and
5068 priority.  Set this to non-nil if you want to hide the status marker
5069 and rely on font-locking instead.
5070 @end defopt
5072 @vindex planner-create-task-hook
5073 @defopt planner-create-task-hook
5074 Functions run after creating a task. @code{planner-id} hooks into
5075 this.
5076 @end defopt
5078 @vindex planner-expand-name-favor-future-p
5079 @defopt planner-expand-name-favor-future-p
5080 If non-nil, partial dates (ex: @kbd{2} or @kbd{5.2}) are completed to
5081 dates in the future instead of using the current year and month.
5082 @end defopt
5084 @vindex planner-task-dates-favor-future-p
5085 @defopt planner-task-dates-favor-future-p
5086 Like @code{planner-expand-name-favor-future-p}, but only for tasks.
5087 @end defopt
5089 @vindex planner-publish-dates-first-p
5090 @defopt planner-publish-dates-first-p
5091 Non-nil means list day pages first in the planner index.
5092 @end defopt
5094 @node Ideas for Other Keybindings,  , Variables to Customize, Advanced Configuration
5095 @comment  node-name,  next,  previous,  up
5096 @section Ideas for Other Keybindings
5097 @cindex keybindings, customization of
5098 @cindex configuration, advanced, keybindings
5099 @cindex customize, keybindings to
5101 By default and for backward compatibility, the following operations
5102 do not have keybindings, and are only accessible from the Planner
5103 menu:
5105 @itemize @bullet
5107 @item
5108 @code{planner-copy-or-move-region}
5110 @item
5111 @code{planner-delete-task}
5113 @item
5114 @code{planner-task-delegated}
5116 @item
5117 @code{planner-task-pending}
5119 @item
5120 @code{planner-task-open}
5122 @item
5123 @code{planner-renumber-tasks}
5125 @end itemize
5127 You may find it easier to install keybindings for those operations by
5128 inserting the following in your @file{.emacs} (or @file{_emacs}).
5129 Note: This changes some of the default keybindings for Planner.
5131 @example
5132 (planner-install-extra-task-keybindings)
5133 @end example
5135 If you install the extra task keybindings, your keybindings will
5136 include:
5138 @itemize @bullet
5140 @item
5141 @kbd{C-c C-t} will be unbound from the default and will serve as the
5142 prefix for the other task keybindings.
5144 @item
5145 @kbd{C-c C-t C-t}: @code{planner-create-task-from-buffer}.
5147 @item
5148 @kbd{C-c C-t C-k}: @code{planner-delete-task}.
5150 @item
5151 @kbd{C-c C-t C-u}: @code{planner-update-task}.
5153 @item
5154 @kbd{C-c C-t C-c}: @code{planner-copy-or-move-task}.
5156 @item
5157 @kbd{C-c C-t C-S-c}: @code{planner-copy-or-move-region}.
5159 @item
5160 @kbd{C-c C-t C-x}: @code{planner-task-done}.
5162 @item
5163 @kbd{C-c C-t C-S-x}: @code{planner-task-cancelled}.
5165 @item
5166 @kbd{C-c C-t C-d}: @code{planner-task-delegated}.
5168 @item
5169 @kbd{C-c C-t C-p}: @code{planner-task-pending}.
5171 @item
5172 @kbd{C-c C-t C-o}: @code{planner-task-in-progress}.
5174 @item
5175 @kbd{C-c C-t C-r}: @code{planner-raise-task}.
5177 @item
5178 @kbd{C-c C-t C-l}: @code{planner-lower-task}.
5180 @item
5181 @kbd{C-c C-t C-n}: @code{planner-renumber-tasks}.
5183 @end itemize
5185 Other keybindings can be configured by adding this to your
5186 @file{.emacs} (or @file{_emacs}):
5188 @example
5189 (planner-install-extra-context-keybindings)
5190 @end example
5192 This will set up the following keybindings:
5194 @itemize @bullet
5196 @item
5197 @kbd{shift up} @code{planner-move-up}
5199 @item
5200 @kbd{shift down} @code{planner-move-down}
5202 @item
5203 @kbd{shift right} @code{planner-jump-to-link}
5205 @end itemize
5207 @node Reference Material, Getting Help, Advanced Configuration, Top
5208 @comment  node-name,  next,  previous,  up
5209 @chapter Reference Material
5211 @menu
5212 * Keeping Track of Time::       
5213 * Other Interactive Functions::  
5214 * Planner Keybindings::         Default keybindings for Planner
5215 * Sample Configuration Files::  
5216 @end menu
5218 @node Keeping Track of Time, Other Interactive Functions, Reference Material, Reference Material
5219 @section Keeping Track of Time
5221 One of the coolest things you can do with Planner is keep track of how
5222 much time you spend not only on projects but even on particular tasks.
5223 @file{planner-timeclock.el} makes it as easy and natural as marking a
5224 task as in progress, postponed, or done. This can help you determine
5225 just how much time you spend working each day. If you add estimates to
5226 your task descriptions, you'll also be able to use this information to
5227 improve your time estimation skills.
5229 Here's how you can keep track of the time you
5232 Then the fun began. I wanted to see if I could match my estimates.
5233 Before I started working on a task, I used @kbd{C-c TAB} to mark it
5234 @code{in progress} and start the clock. If I decided to work on
5235 something else, I used @kbd{C-c TAB} to clock out of the previous task
5236 and clock into the new one.
5238 When I finished it, I used @kbd{C-c C-x} (@code{planner-task-done}) to
5239 mark it completed and automatically clock out. This is not yet done
5240 for cancelled tasks, so I clocked out of those manually with @kbd{C-c
5241 C-o} (@code{timeclock-out}). I also clocked out whenever I caught
5242 myself being distracted so that the totals wouldn't include the time I
5243 spent chatting on #emacs or checking out del.icio.us links. =) At the
5244 end of the day, I used
5245 @code{planner-timeclock-summary-show-range-filter} to show me the time
5246 elapsed for all of the tasks I'd worked on over the past two days.
5247 Here's the report for that project, edited to reflect how it looks on
5248 my screen and annotated with comments:
5250 @example
5251 Timeclock summary report for 2004.12.28 - 2004.12.29
5253 Project     |     Time| Ratio| Task
5254 JapanProject|  0:23:17|  3.6%| Translate javadoc comment for Messages.java
5255             |  0:33:48|  5.3%| Translate javadoc comment for LoginAction.java
5256             |  1:54:07| 17.8%| Study Struts in Japanese
5257             |  0:46:08|  7.2%| Add javadoc tags for input, output and forwards
5258             |  1:03:48|  9.9%| Help review code
5259             |  0:04:14|  0.7%| Import todo list
5260             |  0:00:37|  0.1%| 2min       Fix Menu Action's unnecessary code - delegated
5261             |  0:01:01|  0.2%| 2min       Remove unnecessary list in UserRemoveSetupAction - cancelled
5262             |  0:02:10|  0.3%| 2min       Remove hard-coded database path from MenuAction
5263             |  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. ...
5264             |  0:07:32|  1.2%| 5min       Add a method that returns the validity of a user in MUserPeer.
5265             |  0:08:28|  1.3%| 5min       Fix indentation
5266             |  0:03:52|  0.6%| 10min      Fix UserPeer so that it doesn't get null pointer exceptions
5267             |  0:04:34|  0.7%| 5min       Add current password field in user_modify page
5268             |  0:21:56|  3.4%| 15min      Make a super class for our service classes that will receive the database connection. (cancelled)
5269             |  0:06:05|  0.9%| 10min      Remove hard-coded constants from the Logic classes
5270             |  0:10:55|  1.7%| 10min      Move logic from UserBean.checkPassword to UserListLogic
5271             |  0:01:20|  0.2%| 20min      Guard against null pointer exceptions in peer classes
5272             |  0:04:57|  0.8%| 10min      Instead of displaying uneditable data with bean:write, just disable the html:text element
5273             |  0:25:03|  3.9%| 10min      Deploy 10:00 version
5274             |  0:04:46|  0.7%| 5min       Separate the configuration file of database and system into another uninternationalized property file.
5275             |  2:09:48| 20.2%| 1h         Decide on a naming convention for localized messages and update files
5276             |  0:00:07|  0.0%| 20min      Explain what is happening in UserModifyAction's nested ifs - pending
5277             |  1:50:23| 17.2%| 2h         Write Javadoc comments in English and Japanese to explain bean structure
5278             |  0:04:19|  0.7%| 2h         Write Javadoc comments in English and Japanese to explain peer operations (pending)
5279             |  0:05:40|  0.9%| 20min      Make a factory class for the database - pending
5280      Total: | 10:41:41|100.0%|      
5282 Day began: 13:03:58, Day ended: 20:51:46
5283 Time elapsed: 31:47:48, Time clocked: 10:41:41
5284 Time clocked ratio: 33.6%
5285 @end example
5287 The time record isn't perfect. I cancelled some tasks after thinking
5288 about them a little and did some tasks simultaneously. Sometimes I
5289 didn't notice that I was getting distracted, too. Still, having all of
5290 that time information neatly summarized made me realize a number of
5291 things.
5293 First, I goof off much less when I have a nice, broken-down task list
5294 in front of me. There's just something about knowing there's a five-
5295 or ten-minute hack you can get out of the way. I found myself looking
5296 forward to getting to the next task just to see if I could make my
5297 estimate. That said, seeing a five-minute task stretch and stretch due
5298 to unforeseen problems did make me a little nervous. I should probably
5299 just make generous estimates so that I don't end up with bugs because
5300 of haste.
5302 Second, I don't goof off as much as I thought I did, although there's
5303 still room for improvement. Yesterday's workday was 9:00 - 12:00, 1:00
5304 - 5:30--7.5 hours. Today was the last day of work, so cleaning and
5305 celebration interrupted my hacking at around 3:00--5 hours of work.
5306 According to my task list, 10:41/12:30 was productive work. Hmm. 1:49
5307 hours unclocked time when I was thinking or goofing off.
5308 planner-timeclock-summary-show for today reveals that I actually
5309 clocked 5:30 today, which means the goofing off happened yesterday.
5310 That makes sense; I remember a pretty long unclocked segment
5311 recuperating from Japanese overload. (This was before we came up with
5312 the task list.)
5314 Third, keeping track of time is way, way cool even if you don't bill
5315 anyone for your time.
5317 Like the idea? It's easy to try out. Just add
5319 @example
5320 (require 'planner-timeclock)
5321 (require 'planner-timeclock-summary)
5322 @end example
5324 to your ~/.emacs. If you want to try it out now, eval those statements
5325 in your Emacs session. After that, simply use @kbd{C-c TAB} to ``clock
5326 in'' a task before you start working on it and @kbd{C-c C-x}
5327 (@code{planner-task-done}) to mark it completed. @kbd{M-x
5328 planner-task-pending} also clocks out the current task if it was
5329 clocked in. To see a summary of how you spent your day, check out the
5330 different functions in @file{planner-timeclock-summary}.
5332 See @ref{Timeclock} for more details.
5334 Happy hacking!
5336 @node Other Interactive Functions, Planner Keybindings, Keeping Track of Time, Reference Material
5337 @comment  node-name,  next,  previous,  up
5338 @section Other Interactive Functions
5340 With @file{planner.el} loaded, you can use any of the functions in this
5341 section by typing @kbd{M-x} followed by the name of the function. Many
5342 of these functions are also bound to keys.
5344 For a list of Planner keybindings, see @ref{Planner Keybindings}.
5346 They are listed in no particular order.
5348 @file{planner.el} defines the following interactive functions:
5351 @defun planner-create-high-priority-task-from-buffer
5352 Create a high priority task based on this buffer.  Do not use this in
5353 LISP programs. Instead, set the value of
5354 @var{planner-default-task-priority} and call @code{planner-create-task}
5355 or @code{planner-create-task-from-buffer}.
5356 @end defun
5358 @defun defun planner-create-medium-priority-task-from-buffer
5359 Create a medium-priority task based on this buffer.  Do not use this in
5360 LISP programs. Instead, set the value of
5361 @var{planner-default-task-priority} and call @code{planner-create-task}
5362 or @code{planner-create-task-from-buffer}.
5363 @end defun
5365 @defun planner-create-low-priority-task-from-buffer
5366 Create a high-priority task based on this buffer.
5367 Do not use this in LISP programs. Instead, set the value of
5368 @var{planner-default-task-priority} and call @code{planner-create-task} or
5369 @code{planner-create-task-from-buffer}.
5370 @end defun
5372 @defun planner-install-extra-context-keybindings
5373 Install extra context-sensitive keybindings. These keybindings
5374 conflict with @file{windmove.el}, but might be useful.
5375 @end defun
5377 @defun planner-narrow-to-section section &optional create
5378 Widen to the whole page and narrow to the section labelled
5379 @var{section}.  If @var{create} is non-nil and the section is not found,
5380 the section is created.  Return non-nil if @var{section} was found or
5381 created.
5382 @end defun
5384 @defun planner-save-buffers
5385 Save all planner-mode buffers.
5386 @end defun
5388 @defun planner-seek-to-first section
5389 Positions the point at the specified @var{section}, or @samp{Tasks} if
5390 not specified.
5391 @end defun
5393 @defun planner-save-buffers
5394 Save all planner buffers.
5395 @end defun
5397 @defun planner-calendar-insinuate
5398 This hooks Planner into  Emacs Calendar (@pxref{Calendar/Diary, ,
5399 , Emacs, GNU Emacs Manual}).
5401 It adds special planner key bindings to @code{calendar-mode-map}.
5402 After this function is evaluated, you can use the following
5403 planner-related keybindings in @code{calendar-mode-map}:
5405 @table @kbd
5407 @item  n
5408 Jump to the planner page for the current day.
5410 @item  N
5411 Display the planner page for the current day.
5412 @end table
5414 @end defun
5416 @defun planner-kill-calendar-files
5417 Remove planner files shown from Calendar (@pxref{Calendar/Diary, , ,
5418 Emacs, GNU Emacs Manual}).
5420 @end defun
5422 @defun planner-calendar-goto
5423 Goto the plan page corresponding to the calendar date
5424 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
5425 @end defun
5427 @defun planner-calendar-show
5428 Show the plan page for the calendar date under point in another window
5429 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
5430 @end defun
5432 @defun planner-calendar-select
5433 Return to @code{planner-read-date} with the date currently selected
5434 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
5435 @end defun
5437 @defun planner-jump-to-link
5438 Jump to the item linked to by the current item.
5439 @end defun
5441 @defun planner-move-up
5442 Move a task up. You can use this to indicate that you will do a task
5443 before another one. On a note, go to the previous note. On a headline,
5444 go to the previous headline of the same depth.
5445 @end defun
5447 @defun planner-move-down 
5448 Move down. You can use this to indicate that you will do a task after
5449 another one. On a note, go to the next note. On a headline, go to the
5450 next headline of the same depth.
5451 @end defun
5453 @node Planner Keybindings, Sample Configuration Files, Other Interactive Functions, Reference Material
5454 @comment  node-name,  next,  previous,  up
5455 @section Planner Keybindings
5456 @cindex keybindings, list
5458 In order to refresh and renumber all of your tasks according to their
5459 actual order in the buffer, simply save the file or call
5460 @kbd{M-x planner-renumber-tasks}.
5462 Here is a summary of the keystrokes available:
5464 @table @kbd
5466 @item M-x plan
5467 Begin your planning session.  This goes to the last day for which
5468 there is any planning info (or today if none), allowing you to review,
5469 and create/move tasks from that day.
5471 @item C-c C-u
5472 Move a task up.
5474 @item C-c C-d
5475 Move a task down.
5477 @item C-c C-s
5478 Mark the task as in progress or delegated.
5480 @item C-c C-x
5481 Mark the task as finished.
5483 @item C-c C-t
5484 Create a task associated with the current Wiki page. If you are on the
5485 opening line of a Note entry, it is assumed that the note itself is the
5486 origin of the task.
5488 @item C-c C-c
5489 Move or copy the current task to another date. If the current task is
5490 an original (meaning you are in the buffer where's defined, hopefully
5491 a planning page) then it will be copied, and the original task will
5492 also now point to the copy.  If the current task is a copy, it will
5493 just be moved to the new day, and the original task's link will be
5494 updated.
5496 @item C-c C-n
5497 Jump to today's task page.  If you call
5498 @code{(planner-calendar-insinuate)}, typing @kbd{n} in the Emacs
5499 calendar (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}) will jump
5500 to today's task page.
5502 @item C-c C-x
5503 @code{planner-task-done}
5505 @item C-c C-z
5506 @code{planner-task-in-progress}
5508 @item C-c C-d
5509 @code{planner-lower-task}
5511 @item C-c C-u
5512 @code{planner-raise-task}
5514 @item C-c C-c
5515 @code{planner-copy-or-move-task}
5517 @item C-c C-t
5518 @code{planner-create-task-from-buffer}
5520 @item C-c C-j
5521 This is a prefix command.
5523 @item C-c C-n
5524 @code{planner-goto-today}
5526 @item C-c C-j C-r
5527 @code{planner-goto-most-recent}
5529 @item C-c C-j C-t
5530 @code{planner-goto-tomorrow}
5532 @item C-c C-j C-y
5533 @code{planner-goto-yesterday}
5535 @item C-c C-j C-j
5536 @code{planner-goto-today}
5538 @item C-c C-j C-n
5539 @code{planner-goto-next-daily-page}
5541 @item C-c C-j C-p
5542 @code{planner-goto-previous-daily-page}
5544 @item C-c C-j C-d
5545 @code{planner-goto}
5547 @end table
5549 @node Sample Configuration Files,  , Planner Keybindings, Reference Material
5550 @comment  node-name,  next,  previous,  up
5551 @section Sample Configuration Files
5552 @cindex configuration, sample
5554 This section includes some sample configuration files. This way, once
5555 you've got the hang of the basics, you can see some different, more
5556 advanced, setups.
5558 There is no One True Way to plan. Every person is different. We hope
5559 you'll find a good starting point among the example configurations
5560 below. If what you want to do does not perfectly fit under one of
5561 these examples, please post a description of the way you plan to the
5562 emacs-wiki-discuss mailing list. We look forward to helping you
5563 customizing planner to fit your needs.
5565 @menu
5566 * File Organization::           
5567 * Bare-Bones Planning::         
5568 * Bare-Bones Planning with Plan Pages::  
5569 * Tasks on Plan Pages with Some Day Pages::  
5570 * Hierarchical Tasks::          
5571 @end menu
5573 @node File Organization, Bare-Bones Planning, Sample Configuration Files, Sample Configuration Files
5574 @subsection File Organization
5576 @itemize
5577 @item @strong{Tasks, schedule and notes on day pages.}
5579 By default, tasks, schedule entries and notes are filed on day pages.
5580 This makes it easy for you to see all the entries relevant to a single
5581 day without becoming overwhelmed with information. Unfinished tasks
5582 are carried over to the next day when you use @kbd{M-x plan}, so it's
5583 always kept up to date. Completed tasks are left on the day page you
5584 finished them on, which helps when reviewing one's progress and writing
5585 accomplishment reports.
5587 @item @strong{Cross-referenced with plan pages.}
5589 You can associate your tasks with projects either when you create the
5590 task or later, with @kbd{M-x planner-replan-task}. This makes it easy
5591 for you to see all the information associated with a particular
5592 project. If you use RememberMode to create notes, you will also be
5593 able to associate notes with a plan page.
5595 @item @strong{Just plan pages.}
5597 If your tasks don't usually have dates, you can turn day pages off by
5598 customizing @code{planner-use-day-pages}. If so, then all of your
5599 tasks and notes will be stored on the WelcomePage and/or a plan page.
5601 @end itemize
5603 @node Bare-Bones Planning, Bare-Bones Planning with Plan Pages, File Organization, Sample Configuration Files
5604 @subsection Bare-Bones Planning
5606 You can keep all of your tasks, notes and schedules in a single file:
5607 WelcomePage.  This is good for people who are used to storing all of
5608 their information in a flat text file.  By storing your information in
5609 planner, you'll be able to take advantage of automatic hyperlinking to
5610 files and other resources.  You can also sort your tasks by priority
5611 and status.
5613 To set your system up for bare-bones planning, set the
5614 @code{planner-use-day-pages} variable to nil before loading planner.
5615 For example, you can put this in your @file{~/.emacs} (or @file{_emacs}):
5617 @example
5618 (setq planner-use-day-pages nil)
5619 (setq planner-default-page nil)
5620 (require 'planner)
5621 @end example
5623 When you create a task or note, planner will not prompt you for a
5624 date.  If you press @key{RET} when prompted for a plan page, it will
5625 accept the default of nil, so no other plan pages will be used.  All
5626 of your data will be kept in one file, which can then be easily backed
5629 You can use commands like @command{planner-create-task-from-buffer} to
5630 create tasks, or you can type tasks in manually.  You can edit or
5631 delete anything in the page without having to update other files.
5633 @node Bare-Bones Planning with Plan Pages, Tasks on Plan Pages with Some Day Pages, Bare-Bones Planning, Sample Configuration Files
5634 @subsection Bare-Bones Planning with Plan Pages
5636 When you create a task or note, Planner.el can copy this to a plan
5637 page. Plan pages allow you to see an overview of all the data for a
5638 project.
5640 For convenience, the @command{planner-create-task-from-buffer} command
5641 prompts you for a plan page when you create a task.
5645 @node Tasks on Plan Pages with Some Day Pages, Hierarchical Tasks, Bare-Bones Planning with Plan Pages, Sample Configuration Files
5646 @subsection Tasks on Plan Pages with Some Day Pages
5648 If most of your tasks are associated with plan pages but you want to
5649 schedule some tasks on day pages, you can leave day pages on (default)
5650 and then write a function that turns off day pages. For example, the
5651 following code snippet turns off day pages for task creation from
5652 buffers.
5654 @example
5655 (require 'planner)
5657 (defun my-planner-create-task-from-buffer ()
5658   "Call `planner-create-task-from-buffer', but without dates."
5659   (interactive)
5660   (let ((planner-use-day-pages nil))
5661     (call-interactively 'planner-create-task-from-buffer)))
5662 @end example
5664 @node Hierarchical Tasks,  , Tasks on Plan Pages with Some Day Pages, Sample Configuration Files
5665 @subsection Hierarchical Tasks
5666 @cindex hierarchical tasks
5667 @cindex tasks, hierarchy of
5669 You can use @file{allout.el} or other modes for outlining to support
5670 hierarchical tasks in plan pages. No special support is needed.
5672 Tasks created by @command{planner-create-task-from-buffer} and
5673 @code{planner-create-task} are created in the @samp{* Tasks} section.
5674 If @code{planner-add-task-at-end-flag} is non-nil, tasks are added to
5675 the end of the first task block, else they are added to the beginning.
5676 You can then copy and paste tasks into your preferred hierarchy.
5677 Blank lines delimit blocks of tasks upon which automatic sorting is
5678 performed.
5680 You can also type in tasks manually. You may find this approach faster
5681 when you are comfortable with planner.
5683 For example, a @file{LearnPlanner} plan page might contain the
5684 following lines:
5686 @example
5687 * Learn how to use planner.el
5689 ** Installation
5691 #C0 _ Decide where to put Planner
5692 #C0 _ Download the archives
5694 ** Configuration
5696 *** Load path
5698 #C0 _ Figure out how to add things to my load path
5699 #C0 _ Actually add it to my load path
5702 @end example
5704 If you create tasks for the finest level of detail available at the
5705 moment, you can schedule them onto day pages with @kbd{C-c C-c}
5706 (@command{planner-copy-or-move-task}). Then you can use
5707 @command{planner-jump-to-link} to switch between the day page and the
5708 plan page link.
5711 @node Getting Help, Acknowledgements, Reference Material, Top
5712 @comment  node-name,  next,  previous,  up
5713 @chapter Getting Help
5714 @cindex help, getting
5715 @cindex bugs, reporting
5717 After you have read this guide, if you still have questions about
5718 Planner, or if you have bugs to report, there are several places
5719 you can go.
5721 Planner has an official website at @url{http://www.plannerlove.com/}.
5722 It is a collaborative wiki.
5724 Bugs may be reported using the Planner Bug-Tracker at
5725 @url{https://gna.org/bugs/?group=planner-el}.
5727 You can join the mailing list at
5728 @email{emacs-wiki-discuss@@nongnu.org} using the subscription form at
5729 @url{http:// mail.nongnu.org/ mailman/ listinfo/
5730 emacs-wiki-discuss}. This mailing list is also available via Gmane
5731 (@url{http://gmane.org/}). The group is called
5732 @samp{gmane.emacs.wiki.general}.
5734 You can also contact the maintainer of Planner, Michael Olson, at
5735 @email{mwolson@@gnu.org}, but it is better to use the other options.
5737 You can explore the relevant sections of the EmacsWiki.org:
5739 @itemize @bullet
5741 @item
5742 @url{http://www.emacswiki.org/cgi-bin/wiki/PlannerMode}
5744 @item
5745 @url{http://www.emacswiki.org/cgi-bin/wiki/MuseMode}
5747 @item
5748 @url{http://www.emacswiki.org/cgi-bin/wiki/RememberMode}
5750 @end itemize
5752 You can visit the IRC Freenode channel @samp{#emacs}. Many of the
5753 contributors are frequently around and willing to answer your
5754 questions.
5756 There is an Orkut community called PlannerMode.
5758 For issues relating to this documentation, please contact John
5759 Sullivan at @email{johnsu01@@yahoo.com}.
5761 @node Acknowledgements, GNU General Public License, Getting Help, Top
5762 @comment  node-name,  next,  previous,  up
5763 @chapter Acknowledgements
5764 @itemize
5765 @item Maintainers
5767 @cindex maintainers
5769 @itemize
5770 @item 2005
5772 Michael Olson, Sacha Chua, and several others from the Planner community
5773 ported Planner to use Muse instead of emacs-wiki.  Michael Olson became
5774 the maintainer of Planner.
5776 @item 2004
5778 Damien Elmes handed EmacsWikiMode to Mark Triggs for a short period of
5779 time.  Mark Triggs deferred to Sacha Chua as official maintainer of
5780 Planner.  Sacha Chua volunteered to maintain RememberMode.
5781 Michael Olson became the maintainer of both emacs-wiki and Muse.
5783 @item 2003
5785 Sacha Chua volunteered to maintain Planner.  Damien Elmes
5786 volunteered to maintain EmacsWikiMode.
5788 @item 2001
5790 John Wiegley wrote EmacsWikiMode and Planner.
5791 @end itemize
5793 @item Contributors
5794 @cindex contributors
5796 For a complete list of people who have helped out with Planner, please
5797 check out the @file{AUTHORS} file that is included with Planner.
5799 @end itemize
5801 @node GNU General Public License, Concept Index, Acknowledgements, Top
5802 @comment  node-name,  next,  previous,  up
5803 @appendix GNU GENERAL PUBLIC LICENSE
5804 @center Version 2, June 1991
5805 @cindex GPL
5806 @cindex GNU General Public License
5808 @c This file is intended to be included in another file.
5810 @display
5811 Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
5812 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
5814 Everyone is permitted to copy and distribute verbatim copies
5815 of this license document, but changing it is not allowed.
5816 @end display
5818 @appendixsec Preamble
5820   The licenses for most software are designed to take away your
5821 freedom to share and change it.  By contrast, the GNU General Public
5822 License is intended to guarantee your freedom to share and change free
5823 software---to make sure the software is free for all its users.  This
5824 General Public License applies to most of the Free Software
5825 Foundation's software and to any other program whose authors commit to
5826 using it.  (Some other Free Software Foundation software is covered by
5827 the GNU Library General Public License instead.)  You can apply it to
5828 your programs, too.
5830   When we speak of free software, we are referring to freedom, not
5831 price.  Our General Public Licenses are designed to make sure that you
5832 have the freedom to distribute copies of free software (and charge for
5833 this service if you wish), that you receive source code or can get it
5834 if you want it, that you can change the software or use pieces of it
5835 in new free programs; and that you know you can do these things.
5837   To protect your rights, we need to make restrictions that forbid
5838 anyone to deny you these rights or to ask you to surrender the rights.
5839 These restrictions translate to certain responsibilities for you if you
5840 distribute copies of the software, or if you modify it.
5842   For example, if you distribute copies of such a program, whether
5843 gratis or for a fee, you must give the recipients all the rights that
5844 you have.  You must make sure that they, too, receive or can get the
5845 source code.  And you must show them these terms so they know their
5846 rights.
5848   We protect your rights with two steps: (1) copyright the software, and
5849 (2) offer you this license which gives you legal permission to copy,
5850 distribute and/or modify the software.
5852   Also, for each author's protection and ours, we want to make certain
5853 that everyone understands that there is no warranty for this free
5854 software.  If the software is modified by someone else and passed on, we
5855 want its recipients to know that what they have is not the original, so
5856 that any problems introduced by others will not reflect on the original
5857 authors' reputations.
5859   Finally, any free program is threatened constantly by software
5860 patents.  We wish to avoid the danger that redistributors of a free
5861 program will individually obtain patent licenses, in effect making the
5862 program proprietary.  To prevent this, we have made it clear that any
5863 patent must be licensed for everyone's free use or not licensed at all.
5865   The precise terms and conditions for copying, distribution and
5866 modification follow.
5868 @iftex
5869 @appendixsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
5870 @end iftex
5871 @ifinfo
5872 @center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
5873 @end ifinfo
5875 @enumerate 0
5876 @item
5877 This License applies to any program or other work which contains
5878 a notice placed by the copyright holder saying it may be distributed
5879 under the terms of this General Public License.  The ``Program'', below,
5880 refers to any such program or work, and a ``work based on the Program''
5881 means either the Program or any derivative work under copyright law:
5882 that is to say, a work containing the Program or a portion of it,
5883 either verbatim or with modifications and/or translated into another
5884 language.  (Hereinafter, translation is included without limitation in
5885 the term ``modification''.)  Each licensee is addressed as ``you''.
5887 Activities other than copying, distribution and modification are not
5888 covered by this License; they are outside its scope.  The act of
5889 running the Program is not restricted, and the output from the Program
5890 is covered only if its contents constitute a work based on the
5891 Program (independent of having been made by running the Program).
5892 Whether that is true depends on what the Program does.
5894 @item
5895 You may copy and distribute verbatim copies of the Program's
5896 source code as you receive it, in any medium, provided that you
5897 conspicuously and appropriately publish on each copy an appropriate
5898 copyright notice and disclaimer of warranty; keep intact all the
5899 notices that refer to this License and to the absence of any warranty;
5900 and give any other recipients of the Program a copy of this License
5901 along with the Program.
5903 You may charge a fee for the physical act of transferring a copy, and
5904 you may at your option offer warranty protection in exchange for a fee.
5906 @item
5907 You may modify your copy or copies of the Program or any portion
5908 of it, thus forming a work based on the Program, and copy and
5909 distribute such modifications or work under the terms of Section 1
5910 above, provided that you also meet all of these conditions:
5912 @enumerate a
5913 @item
5914 You must cause the modified files to carry prominent notices
5915 stating that you changed the files and the date of any change.
5917 @item
5918 You must cause any work that you distribute or publish, that in
5919 whole or in part contains or is derived from the Program or any
5920 part thereof, to be licensed as a whole at no charge to all third
5921 parties under the terms of this License.
5923 @item
5924 If the modified program normally reads commands interactively
5925 when run, you must cause it, when started running for such
5926 interactive use in the most ordinary way, to print or display an
5927 announcement including an appropriate copyright notice and a
5928 notice that there is no warranty (or else, saying that you provide
5929 a warranty) and that users may redistribute the program under
5930 these conditions, and telling the user how to view a copy of this
5931 License.  (Exception: if the Program itself is interactive but
5932 does not normally print such an announcement, your work based on
5933 the Program is not required to print an announcement.)
5934 @end enumerate
5936 These requirements apply to the modified work as a whole.  If
5937 identifiable sections of that work are not derived from the Program,
5938 and can be reasonably considered independent and separate works in
5939 themselves, then this License, and its terms, do not apply to those
5940 sections when you distribute them as separate works.  But when you
5941 distribute the same sections as part of a whole which is a work based
5942 on the Program, the distribution of the whole must be on the terms of
5943 this License, whose permissions for other licensees extend to the
5944 entire whole, and thus to each and every part regardless of who wrote it.
5946 Thus, it is not the intent of this section to claim rights or contest
5947 your rights to work written entirely by you; rather, the intent is to
5948 exercise the right to control the distribution of derivative or
5949 collective works based on the Program.
5951 In addition, mere aggregation of another work not based on the Program
5952 with the Program (or with a work based on the Program) on a volume of
5953 a storage or distribution medium does not bring the other work under
5954 the scope of this License.
5956 @item
5957 You may copy and distribute the Program (or a work based on it,
5958 under Section 2) in object code or executable form under the terms of
5959 Sections 1 and 2 above provided that you also do one of the following:
5961 @enumerate a
5962 @item
5963 Accompany it with the complete corresponding machine-readable
5964 source code, which must be distributed under the terms of Sections
5965 1 and 2 above on a medium customarily used for software interchange; or,
5967 @item
5968 Accompany it with a written offer, valid for at least three
5969 years, to give any third party, for a charge no more than your
5970 cost of physically performing source distribution, a complete
5971 machine-readable copy of the corresponding source code, to be
5972 distributed under the terms of Sections 1 and 2 above on a medium
5973 customarily used for software interchange; or,
5975 @item
5976 Accompany it with the information you received as to the offer
5977 to distribute corresponding source code.  (This alternative is
5978 allowed only for noncommercial distribution and only if you
5979 received the program in object code or executable form with such
5980 an offer, in accord with Subsection b above.)
5981 @end enumerate
5983 The source code for a work means the preferred form of the work for
5984 making modifications to it.  For an executable work, complete source
5985 code means all the source code for all modules it contains, plus any
5986 associated interface definition files, plus the scripts used to
5987 control compilation and installation of the executable.  However, as a
5988 special exception, the source code distributed need not include
5989 anything that is normally distributed (in either source or binary
5990 form) with the major components (compiler, kernel, and so on) of the
5991 operating system on which the executable runs, unless that component
5992 itself accompanies the executable.
5994 If distribution of executable or object code is made by offering
5995 access to copy from a designated place, then offering equivalent
5996 access to copy the source code from the same place counts as
5997 distribution of the source code, even though third parties are not
5998 compelled to copy the source along with the object code.
6000 @item
6001 You may not copy, modify, sublicense, or distribute the Program
6002 except as expressly provided under this License.  Any attempt
6003 otherwise to copy, modify, sublicense or distribute the Program is
6004 void, and will automatically terminate your rights under this License.
6005 However, parties who have received copies, or rights, from you under
6006 this License will not have their licenses terminated so long as such
6007 parties remain in full compliance.
6009 @item
6010 You are not required to accept this License, since you have not
6011 signed it.  However, nothing else grants you permission to modify or
6012 distribute the Program or its derivative works.  These actions are
6013 prohibited by law if you do not accept this License.  Therefore, by
6014 modifying or distributing the Program (or any work based on the
6015 Program), you indicate your acceptance of this License to do so, and
6016 all its terms and conditions for copying, distributing or modifying
6017 the Program or works based on it.
6019 @item
6020 Each time you redistribute the Program (or any work based on the
6021 Program), the recipient automatically receives a license from the
6022 original licensor to copy, distribute or modify the Program subject to
6023 these terms and conditions.  You may not impose any further
6024 restrictions on the recipients' exercise of the rights granted herein.
6025 You are not responsible for enforcing compliance by third parties to
6026 this License.
6028 @item
6029 If, as a consequence of a court judgment or allegation of patent
6030 infringement or for any other reason (not limited to patent issues),
6031 conditions are imposed on you (whether by court order, agreement or
6032 otherwise) that contradict the conditions of this License, they do not
6033 excuse you from the conditions of this License.  If you cannot
6034 distribute so as to satisfy simultaneously your obligations under this
6035 License and any other pertinent obligations, then as a consequence you
6036 may not distribute the Program at all.  For example, if a patent
6037 license would not permit royalty-free redistribution of the Program by
6038 all those who receive copies directly or indirectly through you, then
6039 the only way you could satisfy both it and this License would be to
6040 refrain entirely from distribution of the Program.
6042 If any portion of this section is held invalid or unenforceable under
6043 any particular circumstance, the balance of the section is intended to
6044 apply and the section as a whole is intended to apply in other
6045 circumstances.
6047 It is not the purpose of this section to induce you to infringe any
6048 patents or other property right claims or to contest validity of any
6049 such claims; this section has the sole purpose of protecting the
6050 integrity of the free software distribution system, which is
6051 implemented by public license practices.  Many people have made
6052 generous contributions to the wide range of software distributed
6053 through that system in reliance on consistent application of that
6054 system; it is up to the author/donor to decide if he or she is willing
6055 to distribute software through any other system and a licensee cannot
6056 impose that choice.
6058 This section is intended to make thoroughly clear what is believed to
6059 be a consequence of the rest of this License.
6061 @item
6062 If the distribution and/or use of the Program is restricted in
6063 certain countries either by patents or by copyrighted interfaces, the
6064 original copyright holder who places the Program under this License
6065 may add an explicit geographical distribution limitation excluding
6066 those countries, so that distribution is permitted only in or among
6067 countries not thus excluded.  In such case, this License incorporates
6068 the limitation as if written in the body of this License.
6070 @item
6071 The Free Software Foundation may publish revised and/or new versions
6072 of the General Public License from time to time.  Such new versions will
6073 be similar in spirit to the present version, but may differ in detail to
6074 address new problems or concerns.
6076 Each version is given a distinguishing version number.  If the Program
6077 specifies a version number of this License which applies to it and ``any
6078 later version'', you have the option of following the terms and conditions
6079 either of that version or of any later version published by the Free
6080 Software Foundation.  If the Program does not specify a version number of
6081 this License, you may choose any version ever published by the Free Software
6082 Foundation.
6084 @item
6085 If you wish to incorporate parts of the Program into other free
6086 programs whose distribution conditions are different, write to the author
6087 to ask for permission.  For software which is copyrighted by the Free
6088 Software Foundation, write to the Free Software Foundation; we sometimes
6089 make exceptions for this.  Our decision will be guided by the two goals
6090 of preserving the free status of all derivatives of our free software and
6091 of promoting the sharing and reuse of software generally.
6093 @iftex
6094 @heading NO WARRANTY
6095 @end iftex
6096 @ifinfo
6097 @center NO WARRANTY
6098 @end ifinfo
6100 @item
6101 BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
6102 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
6103 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
6104 PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
6105 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
6106 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
6107 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
6108 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
6109 REPAIR OR CORRECTION.
6111 @item
6112 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
6113 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
6114 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
6115 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
6116 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
6117 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
6118 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
6119 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
6120 POSSIBILITY OF SUCH DAMAGES.
6121 @end enumerate
6123 @iftex
6124 @heading END OF TERMS AND CONDITIONS
6125 @end iftex
6126 @ifinfo
6127 @center END OF TERMS AND CONDITIONS
6128 @end ifinfo
6130 @page
6131 @appendixsec Appendix: How to Apply These Terms to Your New Programs
6133   If you develop a new program, and you want it to be of the greatest
6134 possible use to the public, the best way to achieve this is to make it
6135 free software which everyone can redistribute and change under these terms.
6137   To do so, attach the following notices to the program.  It is safest
6138 to attach them to the start of each source file to most effectively
6139 convey the exclusion of warranty; and each file should have at least
6140 the ``copyright'' line and a pointer to where the full notice is found.
6142 @smallexample
6143 @var{one line to give the program's name and a brief idea of what it does.}
6144 Copyright (C) @var{yyyy}  @var{name of author}
6146 This program is free software; you can redistribute it and/or modify
6147 it under the terms of the GNU General Public License as published by
6148 the Free Software Foundation; either version 2 of the License, or
6149 (at your option) any later version.
6151 This program is distributed in the hope that it will be useful,
6152 but WITHOUT ANY WARRANTY; without even the implied warranty of
6153 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6154 GNU General Public License for more details.
6156 You should have received a copy of the GNU General Public License
6157 along with this program; if not, write to the Free Software
6158 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
6159 @end smallexample
6161 Also add information on how to contact you by electronic and paper mail.
6163 If the program is interactive, make it output a short notice like this
6164 when it starts in an interactive mode:
6166 @smallexample
6167 Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
6168 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
6169 This is free software, and you are welcome to redistribute it
6170 under certain conditions; type `show c' for details.
6171 @end smallexample
6173 The hypothetical commands @samp{show w} and @samp{show c} should show
6174 the appropriate parts of the General Public License.  Of course, the
6175 commands you use may be called something other than @samp{show w} and
6176 @samp{show c}; they could even be mouse-clicks or menu items---whatever
6177 suits your program.
6179 You should also get your employer (if you work as a programmer) or your
6180 school, if any, to sign a ``copyright disclaimer'' for the program, if
6181 necessary.  Here is a sample; alter the names:
6183 @example
6184 Yoyodyne, Inc., hereby disclaims all copyright interest in the program
6185 `Gnomovision' (which makes passes at compilers) written by James Hacker.
6187 @var{signature of Ty Coon}, 1 April 1989
6188 Ty Coon, President of Vice
6189 @end example
6191 This General Public License does not permit incorporating your program into
6192 proprietary programs.  If your program is a subroutine library, you may
6193 consider it more useful to permit linking proprietary applications with the
6194 library.  If this is what you want to do, use the GNU Library General
6195 Public License instead of this License.
6197 @node Concept Index,  , GNU General Public License, Top
6198 @comment  node-name,  next,  previous,  up
6199 @unnumbered Index
6201 @printindex cp
6203 @bye
6205 @c Local Variables:
6206 @c ispell-local-pdict: "ispell-dict"
6207 @c End: