Merged from mwolson@gnu.org--2006 (patch 58)
[planner-el.git] / planner-el.texi
blobfcdef76d8d739ce6469c5a8b9330c011445d5199
1 \input texinfo @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename planner-el.info
4 @settitle planner-el
5 @c %**end of header
7 @dircategory Emacs
8 @direntry
9 * planner-el: (planner-el). planner.el: Day planner/organizer for Emacs.
10 @end direntry
12 @syncodeindex fn cp
14 @copying
15 This manual is for Planner version 3.40.
17 Copyright @copyright{} 2001, 2004, 2005, 2006 Free Software Foundation, Inc.@*
18 Parts copyright @copyright{} 2005 Jim Ottaway@*
19 Parts copyright @copyright{} 2005 Dryice Dong Liu
21 @quotation
22 Permission is granted to copy, distribute and/or modify this document
23 under the terms of the GNU General Public License, Version 2.0
24 or any later version published by the Free Software Foundation.
25 A copy of the license is included in the section entitled ``GNU
26 General Public License.''
27 @end quotation
28 @end copying
30 @titlepage
31 @title Guide to Planner
32 @subtitle a day planner and organizer
33 @subtitle for GNU Emacs and XEmacs
35 @c The following two commands
36 @c start the copyright page.
37 @page
38 @vskip 0pt plus 1filll
39 @insertcopying
40 @end titlepage
42 @c So the toc is printed at the start
43 @contents
45 @ifnottex
46 @node Top, Preface, (dir), (dir)
47 @comment  node-name,  next,  previous,  up
48 @top Planner
50 @insertcopying
51 @end ifnottex
53 @menu
54 * Preface::                     
55 * Introduction::                
56 * Installation::                
57 * Overview::                    A discussion of different approaches to planning
58 * Getting Started::             
59 * More about Planner::          In-depth look at some core features
60 * Managing Your Information::   Integration with external programs
61 * Advanced Configuration::      
62 * Reference Material::          
63 * Getting Help::                
64 * Acknowledgements::            
65 * GNU General Public License::  
66 * Concept Index::               
68 @detailmenu
69  --- The Detailed Node Listing ---
71 Installation
73 * Getting the Files::           
74 * Creating Your Planner::       
75 * Components::                  
76 * Advanced Installation::       
78 Getting the Files
80 * Installing from a Source Archive::  
81 * Installing from Arch::        
82 * Installing from Debian::      
84 Overview
86 * Planning based on the Franklin-Covey Approach::  
87 * Why Use Planner::             
89 Getting Started
91 * Tasks::                       
92 * Schedule::                    
93 * Notes::                       
94 * Hyperlinks::                  
95 * Example Page::                
96 * Review::                      
98 More about Planner
100 * Navigation::                  
101 * More about Tasks::            
102 * More about Notes::            
103 * Making Files Pretty::         
104 * Annotations::                 
105 * Interactive Lisp::            
106 * Publishing::                  
107 * Experimental Functions::      
109 More about Tasks
111 * Creating New Tasks::          
112 * Organizing Your Tasks::       
113 * Task Reports and Overviews::  
115 Creating New Tasks
117 * Creating a Task::             
118 * Task Priorities::             
119 * Task IDs::                    
120 * Cyclic Tasks::                
121 * Task Detail::                 
122 * Deadlines::                   
124 Organizing Your Tasks
126 * Multiple Projects::           
127 * Viewing Tasks::               
128 * Modifying Tasks::             
129 * Carrying Over Unfinished Tasks::  
130 * Task Numbering::              
131 * Task Ranks::                  
132 * Grouping Tasks::              
134 Task Reports and Overviews
136 * Accomplishments::             
137 * Task Overviews::              
138 * <tasks> tag::                 
140 More about Notes
142 * Using Allout Mode::           Quickly navigating your notes
143 * <notes>::                     Note headlines
144 * <past-notes>::                Index of past notes
145 * Note Indices::                
147 Publishing
149 * Publishing Calendars::        planner-calendar.el
150 * Authz Access Restriction::    planner-authz.el
151 * RSS Publication::             Sharing notes with planner-rss.el
152 * iCal Task Publication::       Sharing tasks with planner-ical.el
153 * RDF Publication::             planner-rdf.el
155 RDF Publication
157 * Publishing with planner-rdf::  
158 * planner-rdf Tags::            
159 * planner-rdf Usage Examples::  
161 Managing Your Information
163 * E-mail::                      Linking notes and tasks to messages
164 * Scheduling and Time::         Tracking appointments and where your time goes
165 * Finances::                    Display your account balances and more
166 * Contacts and Conversations::  BBDB and ERC
167 * Tracking Research and Resources::  The Web, bibliographies, and bookmarks
168 * Tracking Development::        
170 E-mail
172 * Unix mail::                   Unix mailboxes: planner-unix-mail.el              
173 * Gnus::                        Gnus mail and news reader: planner-gnus.el
174 * VM::                          VM mail reader: planner-vm.el
175 * Wanderlust::                  Wanderlust mail reader: planner-wl.el
176 * MH-E::                        MH-E mail reader: planner-mhe.el
177 * Rmail::                       Rmail: planner-rmail.el
179 Scheduling and Time
181 * Diary::                       Using the Emacs diary
182 * Appointments::                Appointments in plan pages: planner-appt.el
183 * Timeclock::                   Time tracking: planner-timeclock.el
184 * schedule.el::                 Project completion: planner-schedule.el
186 Diary
188 * Planner-Diary Advanced Features::  
190 Usage
192 * Task-based Appointments::     
193 * Schedule-based Appointments::  
194 * Viewing Appointments::        
195 * Appointment Updating on Save::  
196 * Appointment and Calendar Integration::  
197 * Appointment Hooks::           
199 Finances
201 * Ledger::                      Personal finances: planner-ledger.el
203 Contacts and Conversations
205 * BBDB::                        Contacts: planner-bbdb.el
206 * Emacs Relay Chat::            Internet Relay Chat: planner-erc.el
208 Tracking Research and Resources
210 * W3m::                         Web browser: planner-w3m.el
211 * BibTeX::                      Bibliographies: planner-bibtex.el
212 * Bookmark::                    Bookmarks: planner-bookmark.el
214 Tracking Development
216 * Log Edit::                    Changelogs: planner-log-edit.el
217 * XTLA::                        TLA changesets: planner-xtla.el
218 * Gnats::                       Gnats: The GNU bug reporting system
220 Advanced Configuration
222 * Customizing Your Day Pages::  Change your templates
223 * Variables to Customize::      Change various aspects of Planner behavior
224 * Ideas for Other Keybindings::  Add to and change the default keybindings
226 Reference Material
228 * Keeping Track of Time::       
229 * Other Interactive Functions::  
230 * Planner Keybindings::         Default keybindings for Planner
231 * Sample Configuration Files::  
233 Sample Configuration Files
235 * File Organization::           
236 * Bare-Bones Planning::         
237 * Bare-Bones Planning with Plan Pages::  
238 * Tasks on Plan Pages with Some Day Pages::  
239 * Hierarchical Tasks::          
241 @end detailmenu
242 @end menu
244 @node Preface, Introduction, Top, Top
245 @comment  node-name,  next,  previous,  up
246 @chapter Preface
248 This document describes Planner, which was written by John Wiegley and
249 is now maintained by Michael Olson (@pxref{Acknowledgements}).
251 This document is a work in progress, and your contribution will be
252 greatly appreciated. Please e-mail comments and suggestions to the
253 mailing list (@pxref{Getting Help}). In the subject line of your
254 e-mail, include the word @samp{Planner}.
256 This documentation is available in eye-pleasing formats including PDF
257 and HTML at @url{http://www.mwolson.org/static/doc/}.
259 Documentation author: John Sullivan @email{john@@wjsullivan.net}
261 Maintainer: Michael Olson @email{mwolson@@gnu.org}
264 John Sullivan (johnsu01)@*
265 April 25, 2004
267 @node Introduction, Installation, Preface, Top
268 @comment  node-name,  next,  previous,  up
269 @chapter Introduction
271 Planner is an organizer and day planner for Emacs.  It helps you keep
272 track of your pending and completed tasks, daily schedule, dates to
273 remember, notes and inspirations. It is a powerful tool not only for
274 managing your time and productivity, but also for keeping within easy
275 keystroke reach all of the information you need to be productive. It can
276 even publish reports charting your work for your personal web page, your
277 conscience, or your soon-to-be-impressed boss.
279 In fact, because it uses as its building blocks simple plain-text files,
280 it is an incredibly modular and flexible tool capable of shaping and
281 handling your personal information in ways whose variety is limited only
282 by your imagination. Because of this, Planner has a very active and
283 generous community who regularly share their innovations with each
284 other. Many of these modules and extensions are included in the archive
285 that you will download. Once you get the basics down, you'll probably
286 want to explore some of them. But as you read this manual and work with
287 Planner, keep in mind that the basic core is actually very simple, and
288 it might be worth spending time with just that before delving into the
289 customizations.
291 Because they are plain text with very few requirements, the organizer
292 pages kept by Planner can be as basic or as detailed as you
293 like. Your pages can be simple to-do lists with no more additional
294 information than what you would scrawl on a napkin, or they can be a
295 highly technical affair involving hyperlinks, embedded Lisp code,
296 appointment schedules and RSS feeds. As with so much in Emacs, it's
297 all up to you.
299 To get started with Planner, you first need to download it, and possibly
300 also the packages it depends on (@pxref{Installation}).
302 @node Installation, Overview, Introduction, Top
303 @comment  node-name,  next,  previous,  up
304 @chapter Installation
305 @cindex installation
307 Planner depends on Muse. Information for downloading and installing
308 Muse can be found at
309 @url{http://www.mwolson.org/static/doc/muse.html}.
311 Make sure that you use the latest Muse release.  Development code might
312 prove unstable.
314 @menu
315 * Getting the Files::           
316 * Creating Your Planner::       
317 * Components::                  
318 * Advanced Installation::       
319 @end menu
321 @node Getting the Files, Creating Your Planner, Installation, Installation
322 @comment node-name,  next,  previous,  up
323 @section Getting the Files
325 Currently, there are three ways to obtain and install Planner. You can
326 install it from a source archive, Arch repository, or Debian package.
328 @menu
329 * Installing from a Source Archive::  
330 * Installing from Arch::        
331 * Installing from Debian::      
332 @end menu
334 @node Installing from a Source Archive, Installing from Arch, Getting the Files, Getting the Files
335 @comment node-name,  next,  previous,  up
336 @subsection Installing from a Source Archive
337 @cindex source code archive, installing from
339 You can install Planner from the source archive packaged and
340 distributed directly by the maintainer. This archive is provided in
341 both @file{.tar.gz} and @file{.zip} format.
343 @enumerate
344 @item
345 Download and unpack either
346 @url{http://www.mwolson.org/static/dist/planner-latest.tar.gz} or
347 @url{http://www.mwolson.org/static/dist/planner-latest.zip}.
349 @item Edit your @file{~/.emacs} (@file{_emacs} on Microsoft Windows).
351 @example
352 ;; Add the directories to your load path
353 (add-to-list 'load-path "/path/to/muse/lisp")
354 (add-to-list 'load-path "/path/to/planner")
355 (add-to-list 'load-path "/path/to/remember")
357 ;; Load planner
358 (require 'planner)
359 @end example
360 @end enumerate
362 @subsubsection Updating Your Version
364 Download a new version and extract it over the old directory. Don't
365 forget to delete any byte-compiled files (@file{*.elc}) in the
366 directories so that the new code will be used.
368 @node Installing from Arch, Installing from Debian, Installing from a Source Archive, Getting the Files
369 @comment node-name,  next,  previous,  up
370 @subsection Installing from Arch
371 @cindex Arch repositories
372 @cindex Arch, installing from
374 Arch allows you to retrieve previous versions and select specific
375 features and bugfixes. Debian users can install Arch with @kbd{apt-get
376 install tla}. Users of other distributions should see
377 @url{http://regexps.srparish.net/www/}.
379 To get started with Planner using Arch, you'll need to run some initial
380 commands to register your local copy of the archive and retrieve the
381 files.
383 @example
384 # Register the Muse archive
385 tla register-archive http://www.mwolson.org/archives/2006
387 # Register the Planner archive
388 tla register-archive http://arch.gna.org/planner-el/archive-2006
390 # Get the Muse archive
391 tla get mwolson@@gnu.org--2006/muse--main--1.0 muse
393 # Download planner module into the planner/ subdirectory
394 tla get mwolson@@gnu.org--2006-planner-el/planner-el--devel--1.0 planner
395 @end example
397 Then add the following lines to your @code{~/.emacs}:
399 @example
400 ;; Add the directories to your load path
401 (add-to-list 'load-path "/path/to/muse/lisp")
402 (add-to-list 'load-path "/path/to/planner")
403 (add-to-list 'load-path "/path/to/remember")
405 ;; Load planner
406 (require 'planner)
407 @end example
409 You can also browse the Arch repository on the web at
410 @url{http://www.mwolson.org/cgi-bin/archzoom/archzoom.cgi/mwolson@@gnu.org--2006/planner}.
412 @subsubsection Updating Your Version
413 @cindex Arch, updating from
415 To stay up-to-date using Arch, here are some commands that might be
416 useful.
418 To list upstream changes not in local copy:
420 @example
421 # Change to the source directory you are interested in. Example:
422 cd muse/
424 # Display the summary of changes
425 tla missing --summary
426 @end example
428 To update to the latest version:
430 @example
431 cd muse; tla replay
432 cd ../planner; tla replay
433 cd ../remember; tla replay
434 @end example
436 Don't forget to delete any byte-compiled files (@file{*.elc}) in the
437 directories so that the new code will be used.
439 @node Installing from Debian, , Installing from Arch, Getting the Files
440 @comment node-name,  next,  previous,  up
441 @subsection Installing from Debian
442 @cindex Debian package
444 Debian packages for Planner, Muse, and Remember are available in Debian
445 proper as the @code{planner-el}, @code{muse-el}, and @code{remember-el}
446 packages, respectively.
448 If you wish to try experimental packages, add the following lines to
449 your @file{/etc/apt/sources.list}
451 @example
452 deb http://www.mwolson.org/debian/ ./
453 @end example
455 Then, do the following steps as root:
457 @example
458 apt-get update
459 apt-get install muse-el
460 apt-get install planner-el
461 @end example
463 @subsubsection Updating Your Version
464 @cindex Debian package, updating
466 If you installed Planner from Debian, do @kbd{apt-get update; apt-get
467 upgrade} to upgrade all packages that can be upgraded, or @kbd{apt-get
468 update; apt-get install planner-el} to upgrade just planner-el.
470 @node Creating Your Planner, Components, Getting the Files, Installation
471 @section Creating Your Planner
473 Now that you have installed the files for Planner and Muse, you need
474 to set some options to create your first planner.
476 Muse thinks in terms of projects. Each project consists of a group of
477 documents and certain information associated with these
478 documents. Planner is organized as a project within Muse. So, you need
479 to tell Muse a bit about it.
481 Add something like the following code to your @file{.emacs} file.
483 First, give your new Planner project a name. In this case, we use the
484 name, ``WikiPlanner''.
486 @example
487 (setq planner-project "WikiPlanner")
488 @end example
490 Next, add an entry for your project to Muse's master list of
491 projects. Don't forget to use your own name here in place of
492 ``WikiPlanner'' if you have chosen something different.
494 @example
495 (setq muse-project-alist
496       '(("WikiPlanner"
497          ("~/Plans"           ;; where your Planner pages are located
498           :default "TaskPool" ;; use value of `planner-default-page'
499           :major-mode planner-mode
500           :visit-link planner-visit-link)
502          ;; This next part is for specifying where Planner pages
503          ;; should be published and what Muse publishing style to
504          ;; use.  In this example, we will use the XHTML publishing
505          ;; style.
507          (:base "planner-xhtml"
508                 ;; where files are published to
509                 ;; (the value of `planner-publishing-directory', if
510                 ;;  you have a configuration for an older version
511                 ;;  of Planner)
512                 :path "~/public_html/Plans"))))
513 @end example
515 This code should work fine as-is for you as long as the directories
516 you see exist, and as long as you have no other Muse projects besides
517 your planner.
519 The first directory (@file{~/Plans}) is the directory where the
520 source files for your planner will reside. This is the directory where
521 you will actually visit files and edit them.  These files must have a
522 ``.muse'' extension.
524 The second directory (@file{~/public_html/Plans}) is the directory where
525 your planner files will be published by Muse as XHTML.
527 After you have added this code, make sure to either evaluate it or
528 restart Emacs.
530 @node Components, Advanced Installation, Creating Your Planner, Installation
531 @comment node-name,  next,  previous,  up
532 @section Components
534 Now that you have the archive, let's look at what's in it.
536 There should be three directories, named @file{planner}, @file{muse} and
537 @file{remember}.
539 In the @file{planner/} directory, you'll see many files with names like
540 @file{planner-gnus.el}. These are extra modules and extensions for
541 Planner, which you can use to tailor Planner to fit your desired
542 planning and information management habits.
544 In the @file{muse/lisp} directory, you'll see many files with names like
545 @file{muse-blosxom.el}. As in @file{planner/}, these are optional
546 modules and extensions.
548 A minimal working installation includes just @file{planner/planner.el}.
550 You need @file{planner.el} because it provides the core functions for
551 handling tasks, notes, and page navigation. You need @file{Emacs Muse}
552 because it provides the functions used to display your pages (both in an
553 emacs buffer and as HTML), and for connecting them to each other. More
554 specifically, it enables you to have hyperlinks and formatting in your
555 emacs buffers even though the actual files you are working with are
556 saved in plain text. These abilities are used in Planner to format your
557 planner pages the way you like, to create links from your tasks and
558 notes to the materials and projects they refer to, and to optionally
559 ``publish'' your pages in different formats, including HTML.
561 In the @file{remember/} directory are files related to
562 RememberMode. RememberMode does not depend on Planner or Muse, but works
563 best with Planner installed. It is not required in order to use Planner,
564 but it is used by many Planner users to record notes and information to
565 their planner pages.
567 If you are curious, you can open each file in these directories and read
568 the comments at the top, to get an idea of what each extension is used
569 for. They are also all detailed later in this manual.
571 @node Advanced Installation,  , Components, Installation
572 @comment  node-name,  next,  previous,  up
573 @section Advanced Installation
575 Once you decide you want to keep Planner around for a while, there
576 are two additional steps you can take to make using it easier and more
577 efficient. These steps are optional.
579 @itemize
581 @cindex @file{remember.el}
582 @cindex @file{remember-planner.el}
583 @item You can install @file{remember.el} and @file{remember-planner.el}
584 so that you can create Planner notes from anywhere. See the
585 documentation at
586 @uref{http://sacha.free.net.ph/notebook/doc/dev/remember/} for more
587 information.
589 @cindex installing the info file
590 @cindex @file{planner-el.texi}, installing
591 @cindex @file{planner-el.info}, installing
592 @item You can make this document, the Planner info file, appear in
593 the index of info files you see when you type @command{M-x info} or
594 @kbd{C-h i} in Emacs. The instructions for doing this vary depending
595 on whether you have permission to edit certain files on your
596 system. Follow the instructions in @ref{Installing an Info File, ,
597 ,texinfo, Texinfo}, using something like:
599 @example
600 * Planner: (path/to/planner/Planner). Organizer/day planner
601 for Emacs.
602 @end example
604 for the new entry in the info @file{dir} file.
606 @cindex byte compiling
607 @item You can byte-compile @file{planner.el}, @file{Muse},
608 @file{remember.el}, or any of the optional modules you frequently use,
609 in order to improve the speed of their execution. Basically, all you
610 need to do is change to the directory of each project and run
611 @command{make} from the command line. To read more detail about byte
612 compilation, see @ref{Byte Compilation, , ,elisp, Emacs Lisp Reference
613 Manual}.
615 @end itemize
617 @node Overview, Getting Started, Installation, Top
618 @comment node-name,  next,  previous,  up
619 @chapter Overview
621 Planner is a plain-text hyperlinked personal information manager
622 for Emacs that helps you keep track of tasks, notes, and other
623 information. People use Planner to support different ways of planning
624 one's day, from Franklin-Covey and David Allen's Getting Things Done
625 to home-brew hacks. Planner is even used to manage information not
626 normally handled by a personal information manager, like bugtracking,
627 time tracking, and team data. If you start by using Planner as a basic
628 TODO and notes manager, you might find other ways it can help you
629 improve your process.
631 You can use Planner to keep track of your tasks, schedule, notes,
632 and other information you want to store in hyperlinkable text files.
633 You can get the most benefit out of a personal information manager if
634 you use it everyday. Most people add @code{(plan)} to the end of their
635 @file{~/.emacs} so that Planner shows today's schedule and
636 unfinished tasks whenever Emacs starts. If you leave your Emacs
637 running for more than 24 hours, try to get into the habit of running
638 @code{plan} at least once a day.
640 Because your time is important, Planner tries to minimize
641 distractions, making it easier for you to jot down tasks and notes
642 without being distracted from your work. People often make tasks based
643 on the current buffer, so Planner tries to create hyperlinks to
644 whatever you're looking at so that you can jump back to it easily. The
645 @ref{Getting Started} tutorial will show you how to set that up for
646 both tasks and notes.
648 The customizability of Planner means you can make your personal
649 information manager truly personal. Planner strives to be as flexible
650 as possible, and we would love to adapt Planner to fit your needs.
651 Browse through our mailing list (@pxref{Getting Help}) to
652 find out how other people are using Planner, and post your feature
653 requests and bug reports there!
655 Planner is just a tool. It does not dictate a particular way of
656 planning, although it supports some ways better than it supports
657 others. If you want to take some time thinking about planning, read
658 the following reflections for inspiration and ideas. On the other
659 hand, if you want to hit the ground running, see @ref{Getting
660 Started}. If you already have a specific way of planning in mind,
661 check out @ref{Sample Configuration Files}.
663 @menu
664 * Planning based on the Franklin-Covey Approach::  
665 * Why Use Planner::             
666 @end menu
668 @node Planning based on the Franklin-Covey Approach, Why Use Planner, Overview, Overview
669 @comment  node-name,  next,  previous,  up
670 @section Planning Based on the Franklin-Covey Approach
671 @cindex philosophy of planning
673 This is a slightly edited and updated version of an essay by John
674 Wiegley. Read it if you want to get some insights into one way of
675 planning. You can skip this if you want to go straight to planning
676 your day.
678 What is planning?  It can be a nebulous thing to define.  In its
679 essence, however, it is very simple: it's how we achieve our dreams.
681 Our days are filled with time, and hence with actions, whether they
682 be of a mental or physical sort.  But there are two kinds of
683 action: reactive and creative.  Reactive action is a response to
684 the environment, a reaction to stimulus.  Had we enough instincts
685 to ensure survival, we could live according to this kind of action
686 alone.  It is a mode of behavior we share with every living
687 species.
689 The opposite to reactivity is creativity, when we decide upon a
690 course of action that is a wholly a product of personal choice.  We
691 then make decisions as to the steps needed to make this wish a
692 reality.  This is planning.  Planning is essentially a creative
693 endeavor at every step.
695 First, create the idea, what you want to achieve.  Very short-term
696 ideas do not need much more than thinking about how to do it.  But
697 long-term ideas require planning, since the mind cannot contain all
698 of the details.
700 Second, decide how the idea maps into the circumstances you find
701 yourself in.  Some environments will assist your plan, others
702 hinder it.  But step by step, identify every barrier to the
703 realization of your idea, and devise a countermeasure to overcome
704 it.  Once you've mapped things out from beginning to end,
705 accounting for unknowables as best you can, you now have your plan.
707 Third is to break the stages of the plan into parts that are not
708 overwhelming in their complexity.  It is at during this phase that
709 a plan is turned into task items, each to be accomplished within
710 the span of one day's time.  If a task requires several days, break
711 it up further.  The smaller it is, the less your mind will recoil
712 from attempting it.
714 Fourth is to monitor your progress, identifying problems and
715 correcting for them as you go.  Some plans start out unachievable,
716 and remain that way indefinitely, due to a simple lack of
717 observation.  If nothing is working for you, change it.  Otherwise,
718 your plan is merely a well-crafted wish.
720 Fifth is just to do the work, and be patient.  All good plans take a
721 great deal of time, and *cannot* happen immediately.  The groundwork
722 must be laid for each step, or else it will rest on an unsecure
723 foundation.  If you follow your plan doggedly, applying some time to
724 it each day or week, it @emph{will} happen.  Remember the story of the
725 tortoise and the hare.  I've even written a short essay on the
726 necessity of gradual accomplishment, which can be found at
727 @url{http://emacswiki.org/johnw/essays/node2.html}.
729 How can this software help?  Computers are ideal for manipulating
730 information, since they allow you to change things without erasing
731 or rewriting.  And since all plans change quite a bit during their
732 implementation, a planning program can be very helpful.
734 Start by adding the following to your @file{.emacs} (or @file{_emacs}):
736 @example
737 (load "planner")
738 @end example
740 Now, conceive your idea.  I can't believe there's nothing you want
741 from life.  More peace, time to enjoy the world, an end to war?
742 Everyone wants something.  Search deeply, and you will find
743 countless unhoped wishes lurking therein.  Choose one for now, and
744 think on it for a while.
746 Then open a file (using @kbd{C-x C-f}) within the directory named by
747 @code{planner-directory}.  Emacs will automatically recognize this file
748 as a planner file.  Name the file after your plan, such as
749 @file{BetterHealth}.
751 Choose an idea you really want to accomplish.  Struggle to
752 differentiate between the things you want because others want them,
753 and the things you want for yourself.  It takes quite an effort, and
754 may require a long time before you notice the difference.  Many people
755 want to be more healthy to be more attractive, which is an externally
756 driven goal.  Unless @emph{you} really want to accomplish what you
757 envision, the odds are you will fail.  Only our own wishes and dreams
758 possess enough personal energy to see themselves to fruition.  What
759 happens to many of us is simply that we never become conscious of
760 these dreams: what we love, what we desire most.  When I talk to
761 friends, so much of what I hear is things they want because they feel
762 they should want them.  There's just not enough energy there to pursue
763 a good plan, because nearly all of it is negative energy.
765 Do you know what you really want?  Don't worry, many people don't.
766 It's not a question anyone really wants us to pursue, because often
767 we don't want what others do; it doesn't contribute to the social
768 welfare, and all that nonsense.  Somehow we always forget that
769 what's good for the social welfare now, was someone else's crazy
770 dream a hundred years ago.  The human aversion to fundamental
771 change is always one's greatest enemy, so don't waste any time
772 getting bitter about it.
774 For the sake of argument I assume you really do want to be
775 healthier, because you've fallen in love with the ideal of purity,
776 or you understand the connection between your physical self and the
777 world around you, and how this can open up your spirit to desiring
778 more.  I assume.  :)
780 So you're in a Wiki file called @file{BetterHealth}.  Start typing.
781 Type anything related to your idea: what you think about it, your
782 ideas on it, @emph{and especially what the end will look like}.  If
783 you can't visualize the end, you can't plan, since planning is about
784 drawing a line between now and then.
786 When you've typed enough to gain a vision of your goal, start
787 drafting what the possible intermediate steps might be.  Then stop,
788 get up, walk around, enjoy life, and come back to it.  Taking a
789 long time at the beginning is not a bad idea at all, as long as
790 it's not forever.
792 As you chew on your idea, it will begin to become more and more
793 concrete.  You'll have ideas about the smallest pieces, and ideas
794 about the biggest pieces.  Keep going until it starts to take shape
795 before you, and you can see yourself in your mind's eye moving from
796 the present into the future.  Write down this progression, and the
797 sorts of things you might encounter along the way.
799 As you continue, you'll naturally discover discrete phases, or
800 ``milestones'' as managers love to call them.  These are very
801 important, because they let you know you're making progress.  I
802 recommend having a big party with friends every time you achieve a
803 milestone.  A typical plan might have between three and ten.
805 Between the milestones are the bigger pieces of your plan.  Name
806 these pieces using MixedCase words, and you'll notice that Emacs
807 colors and underlines them for you.  Like, FindGoodGym.  Hit return
808 on this highlighted word, and you'll find yourself in another,
809 blank file.  In this file, start drafting your sub-plan, just as
810 you did with the larger plan.  You should find it easier now, since
811 the scope is smaller.
813 As you break down further, you'll notice simple little things that
814 need to get done.  These are your tasks.  Every plan is a
815 succession of tasks.  The difference from reactivity is that each
816 task is part of the larger plan. This is what it means to be
817 systematic: that everything you do helps further your plan.  If you
818 have tasks in your day that contribute to no plan, they are
819 reactive.  Of course, life is full of these, but don't let them
820 take up more than 20% of your day.  If you allow yourself to be
821 dominated by reactive tasks, you'll regret it at the end of your
822 life.  I don't know this personally, but I do know that striving
823 for one's dreams -- and seeing them come to fruition -- is the
824 greatest joy a man can possess.  It is the essence of freedom, of
825 living, of creation.  Reactivity is the opposite of this, and
826 serves only to drain our energy and slacken our spirits.
828 Now that you've thought of a simple task, type @kbd{C-c C-t}. This
829 will ask for a brief description of the task, and when you plan to do
830 it. If you hit @key{RETURN} at the question @samp{When}, it assumes
831 you mean today. It will also pop up a three-month calendar at this
832 question, so you can see where your free days are. Make sure you set
833 the variable @code{mark-diary-entries-in-calendar} to @samp{t} in your
834 @file{.emacs} (or @file{_emacs}) file. This way, you can see which
835 days your appointments fall on. (Read about the Emacs Calendar and
836 Diary in @ref{Calendar/Diary, , , Emacs, GNU Emacs Manual}.)
838 @example
839 (setq mark-diary-entries-in-calendar t)
840 @end example
842 Once your task is in there, go back to your plan and keep
843 generating more tasks.  Generate them all!  Fully describe---as
844 tasks---everything necessary to bring your sub-plan to completion.
845 Don't create tasks for the other sub-plans.  You may have good idea
846 of what they'll look like, but don't bother rendering them into
847 tasks just yet.  Things will change too much between now and then,
848 for that to be a good use of your time.
850 Is your sub-plan now rendered into all of the tasks necessary to
851 reach your first milestone?  Great!  That is the purpose of
852 planner.el.  The rest is really up to you.  If you find that you
853 keep putting things off, and never do them, that's the surest sign
854 you're planning for someone else's dream, and not your own.
856 Here are some of the things planner.el can do, to help you manage
857 and track your tasks:
859 At the beginning of every day, type @kbd{M-x plan}.  This will jump
860 you to the top of the most recent task list before today.  If you
861 skipped a bunch of days, you'll have to open up those files on your
862 own.
864 Probably some of the tasks that day won't be finished -- that's OK.
865 Learning to properly estimate time is a magical, mystical art that few
866 have mastered.  Put your cursor on those undone tasks, and type
867 @kbd{C-c C-c}.  This will move them into today's task page.  You can
868 jump to today's task page at any time by typing @kbd{C-c C-n} (from a
869 Wiki or planning page).  I heartily recommend binding @kbd{C-c n}, to
870 jump you to this page from anywhere:
872 @example
873 (define-key mode-specific-map [?n] 'planner-goto-today)
874 @end example
876 As you look at your task sheet each day, the first thing to do is to
877 ``clock in'' to one of them.  This isn't necessary, and is only
878 helpful if you're around your computer a lot.  But by typing @kbd{C-c
879 C-i} (assuming you have my @file{timeclock.el} on your load-path), it
880 will log the time you spend working on your sub-plan (@pxref{Time
881 Intervals, , , Emacs, GNU Emacs Manual}).  This is helpful for viewing
882 your progress.  Type @kbd{C-c C-o} to clock out.
884 @kbd{C-M-p} and @kbd{C-M-n} will move a task up and down in priority.
885 Priority is represented by a letter A through C.  'A' tasks mean they
886 must be done that day, or else your plan is compromised and you will
887 have to replan.  'B' means they should be done that day, to further the
888 plan, otherwise things will be delayed.  'C' means you can put off the
889 task if you need to, although ultimately it will have to be done.
891 For reactive tasks, the letters mean something different: 'A' means
892 you must do it today, or somebody will roast your chestnuts over an
893 open fire.  'B' means you should do it today, or else someone will
894 be practicing patience at the day's end.  'C' means no one will
895 notice if you don't do it.
897 Again, reactive tasks are ENEMIES OF PLANNING.  Really, until you
898 see them that way, circumstances will push you around and steal
899 your life away.  We have only so many years to use, and everyone is
900 greedy to take them.  It's insidious, almost invisible.  A healthy
901 dislike of reactivity will do wonders for organizing your affairs
902 according to their true priority.
904 The last word that needs to be said concerns ``roles''.  Every person
905 stands in several positions in his life: husband, employee, manager,
906 etc.  These roles will tend to generate tasks not associated with any
907 immediate plan, but necessary to maintain the health and functioning
908 of the role.  My suggestion is to keep this the smallest possible
909 number, and fulfill those that remain well.  How you decide to
910 apportion your time between pursuing grand designs, and fostering deep
911 relationships, is a personal matter.  If you choose well, each will
912 feed the other.
914 I mention this to point that reactivity is something not
915 exclusively associated with tasks that have no master plan, because
916 being a father, for example, is something that rarely proceeds
917 according to orderly plans.  But the role of father itself is its
918 own plan, whose goal is ``to be the best one can'', and whose
919 component tasks are spending time on whatever comes up.  It is, in
920 a sense, an implicit plan.  But reactive tasks follow no plan at
921 all; they are parasites of time that suck the spirit away, whereas
922 properly chose roles actually help fulfill one's own inner needs.
923 At least, this is what I believe.
925 @defun plan force-days
926 Start your planning for the day, beginning with the last day's tasks.
928 If @code{planner-carry-tasks-forward} is non-nil, find the most recent
929 daily page with unfinished tasks and reschedule those tasks to
930 the current day.  If @var{force} is non-nil, examine all past daily
931 pages for unfinished tasks.
933 If @code{planner-carry-tasks-forward} is nil, visit the most recent
934 daily page.  If a daily page for today exists, visit that instead.
936 If @var{force-days} is a positive integer, scan that number of days.
937 If @var{force-days} is @samp{t}, scan all days.
939 @end defun
941 @node Why Use Planner,  , Planning based on the Franklin-Covey Approach, Overview
942 @comment  node-name,  next,  previous,  up
943 @section Why Use Planner?
944 @cindex Planner, why use
946 You can skip this essay if you just want to get started, or read it
947 for some insights into why the previous maintainer is crazy about it.
949 Why I Use Planner, by Sacha Chua
951 I thought about why I liked Planner. Planner as a TODO manager
952 isn't particularly special. Although I can assign tasks to categories
953 and see a breakdown of what projects are taking up my time, Evolution
954 and Microsoft Outlook provide more powerful task support. In other
955 task managers, you can e-mail tasks, assign multiple categories and
956 fill in all sorts of metadata. You can even synchronize your tasks
957 with devices like a phone or PDA. So why use Planner?
959 I realized that integration into my way of life and automatic context
960 clues are what really make planner tasks worth it for me. I don't have
961 to switch to another application to create a task. I can just hit a
962 keyboard shortcut. Planner uses a minibuffer to get the task
963 description. My windows are not rearranged in any way, and I can look
964 at the data that's relevant to a task. Not only that, tasks
965 automatically pick up context clues, like whom I'm talking to on IRC
966 or the file I'm editing at the moment. This cuts down on the explicit
967 context I need to include and makes it easier for me to bring up the
968 task again.
970 As a scheduler, Planner is also not particularly distinguished.
971 Sure, it can display my @file{~/diary}, but for that matter so can
972 @kbd{M-x diary}. Evolution and Outlook can give me a more graphical
973 view of my time, sync with my PDA, and coordinate my schedule with
974 other people. Those applications support detailed schedule entries
975 with powerful cyclic options. On the other hand, Planner gives me
976 a personal, plain text view and (at least the way I use it) requires
977 me to edit a separate file to add new appointments. (I've defined a
978 few shortcut keys to deal with this.) However, it does have one
979 advantage---my schedule is always loaded. I used to use Outlook on
980 Windows, but having my schedule in a separate application meant that I
981 actually looked at it very rarely, as I had turned off reminders
982 because they got annoying.
984 Planner's notes, however, are what really convinced me. I can hit
985 a keyboard shortcut from anywhere and type my notes into a buffer
986 which automatically keeps context information. After typing the note,
987 I can then categorize it. I think that the critical thing here is that
988 interruptions---fleeting thoughts---don't break my flow. I can just
989 pop up a remember buffer, stow that thought away somewhere, and go
990 back to it whenever I want. In contrast, creating a note in Outlook
991 means switching out of my application, making a couple of keystrokes,
992 typing the note in, and then switching back. The context switches make
993 it hard to keep track of where I am and what I'm supposed to remember.
994 Not only that, I need to enter context by hand. Even though I can
995 color my notes and reorganize them in Outlook, I find the context
996 switch too expensive. I used to keep notes in other knowledge
997 management tools as well. Some applications allowed me to
998 drag-and-drop links into the current note, and that was cool. But that
999 required a manual action, and those applications didn't feel
1000 integrated into my way of working. (Note: You'll need remember.el for
1001 this.)
1003 I guess that's why I like Planner. Unlike other organizers which
1004 don't know anything about the applications I use, Planner tries
1005 its best to integrate into the way I work, and it's easy to extend.
1006 Fortunately I do almost all my work in Emacs, so I can think of my
1007 organizer as integrated into my e-mail client, Internet Relay Chat
1008 client, web browser, file editor and even games. It automatically
1009 picks up context clues from these applications and allows me to easily
1010 jump back to relevant files. It doesn't distract me. It allows me to
1011 key in data and then it gets out of my way.
1013 (That said, it's perfectly okay to use Planner even if you don't live
1014 in Emacs.)
1016 The processing that happens in the background is a bonus, and
1017 publishing my task list and notes online has greatly helped me. It
1018 gives other people a way to see what I'm working on and what I've
1019 planned for the future. Occasionally people write in with additional
1020 resources and helpful tips. (Again, this is purely optional. Many
1021 people don't publish their planner pages. Other people use really
1022 fine-grained access control.)
1024 I think the greatest feature of Planner, though, is its user
1025 community. Because Planner can be easily modified, we can experiment
1026 with a lot of new ideas quickly, and we can tailor Planner to fit our
1027 needs. I love checking my @samp{emacs-wiki-discuss} mail and finding
1028 out how people have tweaked Planner or would like to tweak Planner,
1029 and I've learned a lot by exchanging reflections on organizing one's
1030 life.
1032 I really wasn't an organization freak before I started using Planner.
1033 I often forgot to do my homework or answer important mail. I still
1034 procrastinate now, but at least it's all being kept track of
1035 somewhere! I also really like how Planner lets me to gradually improve
1036 how I'm doing things, and I feel I've come a long way.
1038 Please try it out! We'd love to hear how Planner can become
1039 @emph{your} personal information manager.
1041 @node Getting Started, More about Planner, Overview, Top
1042 @comment  node-name,  next,  previous,  up
1043 @chapter Getting Started
1045 At the end of this tutorial, you will be able to use Planner and
1046 related modules to keep track of your tasks, schedules and notes, all
1047 within the convenience of Emacs.
1049 There are two kinds of pages in a Planner wiki. Day pages show tasks,
1050 schedule, and notes for the day, while plan pages organize related tasks
1051 and notes into a single page.
1053 If you have not yet added planner to your @file{~/.emacs}, add the
1054 following lines:
1056 @example
1057 (add-to-list 'load-path "/path/to/muse/lisp")
1058 (add-to-list 'load-path "/path/to/planner")
1059 (add-to-list 'load-path "/path/to/remember")
1060 (require 'planner)
1061 @end example
1063 This will bring up the most recent day page with unfinished tasks or
1064 create a new day page if necessary. By default, planner pages are
1065 stored in @samp{~/Plans} (@code{planner-directory}).
1067 @menu
1068 * Tasks::                       
1069 * Schedule::                    
1070 * Notes::                       
1071 * Hyperlinks::                  
1072 * Example Page::                
1073 * Review::                      
1074 @end menu
1076 @node Tasks, Schedule, Getting Started, Getting Started
1077 @section Tasks
1079 Let us start by creating a task labelled
1081 @example
1082 Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss
1083 @end example
1085 From anywhere (even this info buffer!), call @kbd{M-x
1086 planner-create-task-from-buffer} to create a new task. Fill in the
1087 description and choose a date by:
1089 @itemize
1090 @item typing 1 - 31 to put the task on that day of the month,
1091 @item accepting the default (today) by pressing RET,
1092 @item selecting the date with mouse-1,
1093 @item
1094 typing +n (where in is an integer) to schedule the task in n days time,
1096 @item typing nil to make an undated task.
1097 @end itemize
1099 For now, accept the default (@samp{today}) by pressing @key{RET}.
1101 You will then be prompted for a plan page. Plan pages gather related
1102 tasks and notes, giving you an overview of what you've done so far.
1103 You can accept the default TaskPool, create your own plan page, or
1104 specify nil to make a task that is not associated with a plan page.
1105 For now, accept the default (@samp{TaskPool}) by pressing RET.
1107 You have created your first task. View today's page with
1108 @kbd{M-x planner-goto-today}. You will see a line of the form
1110 @example
1111 #B  _ Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss (TaskPool)
1112 @end example
1114 If you created the task from this page, then there will be an additional
1115 annotation:
1117 @example
1118 #B  _ Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss : Tasks (TaskPool)
1119 @end example
1121 The URL, @samp{TaskPool} and @samp{Getting Started} are
1122 hyperlinks. You can use TAB and S-TAB to navigate between them and RET
1123 to follow the link.
1125 Create more tasks using @kbd{M-x planner-create-task-from-buffer}.
1126 This is bound to @kbd{C-c C-t} in @code{planner-mode} pages
1127 for your convenience. For example, create the following tasks:
1129 @itemize
1130 @item
1131 @samp{Describe my current way of working and how I would like to work},
1132 for three days from now (@samp{+3}),
1133 @item
1134 @samp{Learn how to schedule a task}, an undated task (@kbd{nil}) on the
1135 TaskPool page,
1136 @item
1137 @samp{Browse through the Planner info manual} for today (@kbd{.} or
1138 accept the defaults), and
1139 @item
1140 @samp{Add (plan) to the end of my [[~/.emacs]]} for today, but without a
1141 plan page (specify @kbd{nil} at the plan page prompt)
1142 @end itemize
1144 Tip: I bind planner-create-task-from-buffer to "F9 t" so that I can
1145 easily call it from anywhere. You can do that with this elisp fragment:
1146 @code{(global-set-key (kbd "<f9> t") 'planner-create-task-from-buffer)}
1148 Next, visit the TaskPool by:
1150 @itemize
1151 @item
1152 @key{TAB}-bing or using the cursor and typing @key{RET} to follow the
1153 link,
1154 @item @kbd{C-x C-f TaskPool RET} to use @code{find-file}, or
1155 @item @kbd{C-c C-f TaskPool RET} to use @code{muse-project-find-file}
1156 @end itemize
1158 You can see an overview of the tasks as scheduled on different days.
1159 Unlike many personal information managers that store all of your data
1160 in one file and then perform magic in order to present different
1161 views, Planner uses plain text files. The data is duplicated and kept
1162 updated by functions. This makes it simpler and easier to modify,
1163 because what you see is (almost) what you get. On the other hand,
1164 you'll need to get used to either editing both files, or using the
1165 built-in functions for editing and updating files. If you prefer not
1166 to work with linked tasks, you can configure Planner to use only plan
1167 pages or use only day pages.
1169 The TaskPool page should list the tasks you created earlier. Go to the
1170 one named Learn how to schedule a task . Type @kbd{C-c C-c}
1171 (@code{planner-copy-or-move-task}) to schedule the task. Type RET to
1172 accept the default (today). Go to the day page by following the link
1173 or calling @kbd{M-x planner-goto} (@kbd{C-c C-j C-d} or the menu bar);
1174 you will see the newly-created task there. You can also use @kbd{C-c
1175 C-c} (@kbd{planner-copy-or-move-task}) to reschedule a task to an
1176 earlier or later date.
1178 Well, that task is done. To mark the task as completed, type @kbd{C-c
1179 C-x} (@code{planner-task-done}). You can also edit the status manually
1180 (change _ to X) as long as you remember to call @kbd{M-x
1181 planner-update-task} to update the link page as well. Updating relies on
1182 the task description being the same, so do not edit this manually.
1184 Quick summary of commands:
1186 @itemize
1187 @item
1188 Go to today's page: @kbd{M-x plan} to carry unfinished tasks forward, or
1189 @kbd{M-x planner-goto-today} to just go to today's page.
1190 @item
1191 Create a task: @kbd{C-c C-t} (@code{planner-create-task-from-buffer}),
1192 or type a task manually (call M-x planner-update-task if the task is
1193 linked)
1194 @item
1195 Mark a task as done: @kbd{C-c C-x} (@code{planner-task-done}), or edit
1196 the task and call @kbd{M-x planner-update-task}
1197 @item Edit a task description: @kbd{M-x planner-edit-task-description}
1198 @item Reschedule a task: @kbd{C-c C-c} (@code{planner-copy-or-move-task})
1199 @item
1200 Reschedule many tasks: Mark a region and use @kbd{M-x
1201 planner-copy-or-move-region}
1202 @item
1203 Change the plan of a task: @kbd{M-x planner-replan-task}, or @kbd{C-c
1204 C-c} (@code{planner-copy-or-move-task}) with a plan page
1205 @item Delete a task: @kbd{M-x planner-delete-task}
1206 @item
1207 Reorder tasks: @key{M-p} (@code{planner-raise-task}) and @key{M-n}
1208 (@code{planner-lower-task}), or normal editing commands like kill and
1209 yank
1210 @item Change task priorities (@samp{#A} > @samp{#B} > @samp{#C}):
1211       @key{C-M-p} (@code{planner-raise-task-priority}) and
1212       @key{C-M-n} (@code{planner-lower-task-priority}),
1213       or edit the task and call @kbd{M-x planner-update-task}.
1214 @end itemize
1216 You can save your tasks with @kbd{C-x C-s} the same way you save any
1217 other file, or Emacs will prompt you to save it when you exit.
1219 @node Schedule, Notes, Tasks, Getting Started
1220 @comment  node-name,  next,  previous,  up
1221 @section Schedule
1223 This is free-form. You can put anything you want into this, or remove
1224 it from @code{planner-day-page-template} entirely. Some people use it
1225 to keep track of their plans for the day with tables like this:
1227 @example
1228 hh:mm | hh:mm | activity
1229 hh:mm | hh:mm | activity
1230 hh:mm | hh:mm | activity
1231 @end example
1233 Remember, Planner files are just plain text. You can add new sections
1234 or remove old ones, or use the suggested sections for entirely
1235 different activities.
1237 @node Notes, Hyperlinks, Schedule, Getting Started
1238 @comment  node-name,  next,  previous,  up
1239 @section Notes
1241 You can put anything you want in this section, or remove it from your
1242 @code{planner-day-page-template} entirely.
1244 You may be interested in @file{remember-planner.el}, part of the
1245 Remember package. @code{remember-planner.el} makes it easy to create
1246 notes from anywhere in Emacs, and it uses the same hyperlink-sensing
1247 code that Planner uses. Notes added by remember-planner.el look like
1248 this:
1250 @example
1251 .#1 Headline 00:00
1252 Body
1253 @end example
1255 and are outlined at the H2 level in published HTML.
1257 If you include the following in your @file{~/.emacs}:
1259 @example
1260 (require 'remember-planner)
1261 (setq remember-handler-functions '(remember-planner-append))
1262 (setq remember-annotation-functions planner-annotation-functions)
1263 @end example
1265 you can easily create context-aware notes. @kbd{M-x remember} will
1266 create a dedicated buffer for you to fill in your note. If Planner
1267 recognizes the buffer as one with context then it will include a
1268 hyperlink at the bottom. The first line is used as a title, so make it
1269 short and meaningful. The rest of the text will be used as the body of
1270 the note. Try it now by creating a note, perhaps about things you'd
1271 like to remember from this tutorial.
1273 Typing @kbd{C-c C-c} after composing will prompt for a plan page to
1274 put this on, with auto-completion. By default, notes will go on
1275 today's page only. If you specify a plan page, the note will go on
1276 today's page and on the plan page. Let's try specifying
1277 @samp{TaskPool} for the note.
1279 If you look at today's page, you'll find a timestamped note that links
1280 to @samp{TaskPool}. Likewise, @samp{TaskPool} contains a note that
1281 links to today's page. Because the text is copied, changes in one will
1282 not be automatically reflected in the other. To update the linked page
1283 after editing a note, use @kbd{M-x planner-update-note}. To change the
1284 plan page of a note, use @kbd{planner-replan-note}.
1286 @node Hyperlinks, Example Page, Notes, Getting Started
1287 @section Hyperlinks
1288 @cindex hyperlinks
1290 Planner automatically creates context-sensitive hyperlinks for your
1291 tasks and notes when you use @code{planner-create-task-from-buffer}
1292 and @code{remember}.
1294 Blue links indicate URLs and Planner pages that already exist. Red links
1295 indicate Planner pages that have not yet been created.
1297 Middle-click or type @key{RET} on any link to view the link in the
1298 current window. Shift-middle-click or type @key{S-RET} to view the
1299 link in another window. @key{TAB} goes to the next link, while
1300 @key{S-TAB} goes to the previous one.
1302 You can pick up hyperlinks using the @code{planner-annotation-as-kill}
1303 function.
1305 @defun planner-annotation-as-kill
1306 Create a context-sensitive hyperlink for the current buffer and copy
1307 it to the kill ring. When called with a prefix argument, prompt for
1308 the link display name.
1309 @end defun
1311 You can then paste it into any Planner buffer by using @kbd{M-x yank}
1312 or the keyboard shortcut.
1314 Hyperlinks are a powerful feature of Planner. You can use them to
1315 hyperlink to mail, news, Web pages, and even IRC connections. See the
1316 section on @ref{Managing Your Information} to find out how to enable
1317 support for various parts of Emacs. Want to add a new hyperlink
1318 scheme? Check out the source code for examples or ask on the mailing
1319 list for help.
1321 @node Example Page, Review, Hyperlinks, Getting Started
1322 @comment  node-name,  next,  previous,  up
1323 @section Example Page
1324 @cindex example page
1325 @cindex planning page, example
1327 An example planner file is given below. You'll notice that Planner
1328 does not have a well-defined user interface. Rather, it's free-form
1329 and open, allowing you to adapt it to your preferences.
1331 @example
1332 ----------------------------------------------------------------------
1333 * Tasks
1335 #B  _ Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss (TaskPool)
1336 #B  _ Browse through the Planner info manual (TaskPool)
1337 #B  _ Add (plan) to the end of my ~/.emacs
1338 #B  X Learn how to schedule a task (TaskPool)
1340 * Schedule
1342 18:00 | 19:00 | Learn how to use Planner
1344 * Notes
1346 Notes are free-form. You can put anything you want into this.
1348 .#1 This is note number one
1350 Notes on note number one!
1352 .#2 This weird ".#2" syntax is used for allout.el enumerated lists
1354 It makes using allout-mode very handy.
1356 @end example
1358 @node Review,  , Example Page, Getting Started
1359 @comment  node-name,  next,  previous,  up
1360 @section Review
1362 @itemize
1364 @item @emph{Ideas for using planner more effectively:}
1366 @itemize
1367 @item
1368 Add @code{(plan)} to the end of your @file{~/.emacs} so that you are
1369 reminded about your tasks every day.
1371 @item
1372 Bind useful functions to shortcut keys and get used to creating tasks
1373 and notes from anywhere.
1375 @item
1376 Think about how you plan your day and look for ways to improve it. Ask
1377 the mailing list (@pxref{Getting Help}) for tips.
1379 @item
1380 Browse the rest of this manual, the source code, and other resources on
1381 the Net for tidbits you can use.
1383 @item Have fun!
1384 @end itemize
1386 @item @emph{Useful functions outside planner buffers:}
1388 @itemize
1389 @item @code{planner-create-task-from-buffer}
1390 @item @code{remember}
1391 @item @code{planner-goto-today}
1392 @item @code{planner-goto}
1393 @item @code{plan}
1394 @end itemize
1396 @item @emph{Useful functions inside planner buffers:}
1398 @itemize
1399 @item @kbd{C-c C-t} (@code{planner-create-task-from-buffer})
1400 @item @kbd{C-c C-x} (@code{planner-task-done})
1401 @item @kbd{M-x planner-edit-task-description}
1403 @item
1404 @kbd{C-c C-c} (@code{planner-copy-or-move-task}), @kbd{M-x
1405 planner-copy-or-move-region}
1407 @item @kbd{M-x planner-replan-task}
1408 @item @kbd{M-x planner-delete-task}
1410 @item
1411 @key{M-p} (@code{planner-raise-task}) and @key{M-n}
1412 (@code{planner-lower-task})
1414 @item @key{C-M-p} (@code{planner-raise-task-priority}) and
1415       @key{C-M-n} (@code{planner-lower-task-priority}),
1416 @item @code{planner-replan-note}
1417 @item @code{planner-update-note}
1418 @end itemize
1420 @end itemize
1422 That's all you need to know in order to use Planner as a basic TODO and
1423 notes manager, but there's a whole lot more. Read through this manual
1424 and our mailing list archives (@pxref{Getting Help}) for lots of
1425 wonderful ideas about planning in Emacs!
1427 @node More about Planner, Managing Your Information, Getting Started, Top
1428 @comment  node-name,  next,  previous,  up
1429 @chapter More about Planner
1431 @menu
1432 * Navigation::                  
1433 * More about Tasks::            
1434 * More about Notes::            
1435 * Making Files Pretty::         
1436 * Annotations::                 
1437 * Interactive Lisp::            
1438 * Publishing::                  
1439 * Experimental Functions::      
1440 @end menu
1442 @node Navigation, More about Tasks, More about Planner, More about Planner
1443 @comment  node-name,  next,  previous,  up
1444 @section Starting with Day Pages
1446 @command{planner-goto-today} opens today's page.  Day pages are named
1447 @samp{YYYY.MM.DD} and contain your notes for the day.
1449 You should see a file that looks like this:
1451 @example
1452 * Tasks
1455 * Schedule
1457 * Notes
1458 @end example
1460 You can type anything you want into this file.  You can add or delete
1461 sections.  When you save, Emacs stores your information in
1462 @code{planner-directory}.
1464 Use the following commands to navigate through day pages:
1466 @defun plan
1467 Start planning the day.  If @code{planner-carry-tasks-forward} is
1468 non-nil, copy the most recent unfinished tasks to today's page, else
1469 open the most recent page.
1470 @end defun
1472 @defun planner-goto (@kbd{C-c C-j C-d})
1473 Prompt for a date using a calendar pop-up and display the
1474 corresponding day page.  You can specify dates partially.  The current
1475 year and month are used if omitted from the input.  For example, if
1476 today is 2004.05.05, then
1478 @itemize
1479 @item @kbd{+1} is one day from now, or @samp{2004.05.06}
1480 @item @kbd{-1} is one day before now, or @samp{2004.05.04}
1481 @item @kbd{12} is equivalent to @samp{2004.05.12}
1482 @item @kbd{8.12} is equivalent to @samp{2004.08.12}
1483 @item @kbd{2005.08.12} is a full date specification
1484 @end itemize
1486 In the calendar buffer, you can also left-click or press @key{RET} on
1487 a date to select it.
1488 @end defun
1490 @defun planner-goto-today (@kbd{C-c C-j C-j})
1491 Display today's page. Create the page if it does not yet exist.
1492 @end defun
1494 @defun planner-goto-tomorrow (@kbd{C-c C-j C-t})
1495 Goto the planner page days @var{after} the currently displayed date.
1496 If @var{days} is nil, go to the day immediately after the currently
1497 displayed date.  If the current buffer is not a daily planner page,
1498 calculate date based on today.
1499 @end defun
1501 @defun planner-goto-yesterday (@kbd{C-c C-j C-y})
1502 Goto the planner page @var{days} before the currently displayed date.
1503 If @var{days} is nil, go to the day immediately before the currently
1504 displayed date.  If the current buffer is not a daily planner page,
1505 calculate date based on today.
1506 @end defun
1508 @defun planner-goto-most-recent
1509 Go to the most recent day with planning info.
1510 @end defun
1512 @defun planner-goto-previous-daily-page
1513 Goto the last plan page before the current date.
1514 The current date is taken from the day page in the current
1515 buffer, or today if the current buffer is not a planner page.
1516 Do not create pages if they do not yet exist.
1517 @end defun
1519 @defun planner-goto-next-daily-page
1520 Goto the first plan page after the current date.
1521 The current date is taken from the day page in the current
1522 buffer, or today if the current buffer is not a planner page.
1523 Do not create pages if they do not yet exist.
1524 @end defun
1526 @defun planner-goto-plan-page page
1527 Opens @var{page} in the the @code{planner-project} Wiki.  Use
1528 @code{planner-goto} if you want fancy calendar completion.
1529 @end defun
1531 @defun planner-show date
1532 Show the plan page for @var{date} in another window, but don't select
1533 it.  If no page for @var{date} exists, return nil.
1534 @end defun
1537 @node More about Tasks, More about Notes, Navigation, More about Planner
1538 @comment  node-name,  next,  previous,  up
1539 @section More about Tasks
1540 @cindex tasks, more about
1542 This section is divided into three parts. In the first part, you can
1543 read about all the options, strategies and commands to help you
1544 efficiently add new tasks to your planner. In the second part, we'll go
1545 over all of the aspects of Planner that relate to organizing, editing,
1546 rescheduling and viewing the tasks you've already created. Finally,
1547 we'll cover some ways to step back and look at various reports and
1548 overviews that can be generated from your planner pages.
1550 You may also be interested in tracking time spent on tasks with
1551 @ref{Timeclock} and estimating project completion time with
1552 @ref{Schedule} (also see @pxref{schedule.el}).
1554 @menu
1555 * Creating New Tasks::          
1556 * Organizing Your Tasks::       
1557 * Task Reports and Overviews::  
1558 @end menu
1560 @node Creating New Tasks, Organizing Your Tasks, More about Tasks, More about Tasks
1561 @comment  node-name,  next,  previous,  up
1562 @subsection Creating New Tasks
1563 @cindex tasks, creating
1565 Planner makes it very easy to quickly add something to your list of
1566 tasks. Once you get used to the basics of
1567 @command{planner-create-task-from-buffer}, you might want to take a
1568 closer look at some things in Planner that can help you create new tasks
1569 in a way that fits with your system.
1571 @menu
1572 * Creating a Task::             
1573 * Task Priorities::             
1574 * Task IDs::                    
1575 * Cyclic Tasks::                
1576 * Task Detail::                 
1577 * Deadlines::                   
1578 @end menu
1580 @node Creating a Task, Task Priorities, Creating New Tasks, Creating New Tasks
1581 @comment  node-name,  next,  previous,  up
1582 @subsubsection Creating a Task
1583 @cindex tasks, creating
1585 You can create a task from any buffer in Emacs by invoking
1586 @command{M-x planner-create-task-from-buffer}.
1588 This command does more than just add an item to your list of tasks. It
1589 also connects that item to some useful context information.
1591 If you create a task while viewing any buffer other than a Planner
1592 day page, Planner will associate the task with a hyperlink to that
1593 buffer. Try it now by creating a task from this Info buffer.
1595 @enumerate
1596 @item @kbd{M-x planner-create-task-from-buffer}
1597 @item
1598 When prompted for the task name, enter @kbd{Learn how to change a task's
1599 status} and press @key{RET}.
1601 @item
1602 When prompted for the date, press @key{RET} to schedule the task for
1603 today.
1605 @item
1606 When prompted for the project page, press @key{RET} to accept the
1607 default page of @samp{TaskPool}. This is a page for tasks not connected
1608 to a larger plan.
1610 @end enumerate
1612 Planner prompts you for two pieces of information when you ask it
1613 to create a task. First, it asks you when you would like to have the
1614 task show up in your planner. If you would like it to be scheduled for
1615 today, you can just hit @key{RET}. If you would like it to be
1616 scheduled for some day during the current month, you can just enter
1617 the date, without the month, like @samp{16}. If you would like it to
1618 be scheduled for some day in a future month of the current year, you
1619 can enter just the month and date, like @samp{06.16}. If you would
1620 like to schedule something for next year, then enter the full date,
1621 like @samp{06.16.2005}. If you do not want this task to appear on a
1622 day page at all, you can enter @samp{nil}.
1624 The second piece of information Planner asks for is the name of
1625 the project to associate the task with. In the above example, you
1626 associated the task with the project ``TaskPool'', which means that
1627 you did not want to associate the task with a particular project or
1628 goal in your life. Another way to do this is to answer the project
1629 prompt by entering @samp{nil}. But instead, you might enter
1630 @samp{LearnPlanner} as the project. This creates a new page called
1631 ``LearnPlanner'' in your planner directory and places an entry for the
1632 task on that page.
1634 The task then exists in two places: once on your day page, to show how
1635 it fits into your daily work; and once on a project page, to show how
1636 it fits into your larger projects and goals. In the future you might
1637 add related tasks like, ``Memorize Planner keybindings''. These
1638 tasks might be scattered over weeks or months worth of day pages, but
1639 as long as you enter the same project name for each, you will have a
1640 way to look at them all together on a single project page.
1642 Planner also creates hyperlinks to enable you to easily move back
1643 and forth between the day page system and the project page
1644 system. Each task on a day page will have a hyperlink to its project
1645 page. Each task on a project page will have a hyperlink to its day
1646 page.
1648 After using Planner for a while, you may find yourself with quite
1649 a few project pages. Keep in mind that completion is enabled at the
1650 project prompt when you create a task, so hitting @kbd{SPC} or
1651 @kbd{TAB} at the prompt will show you a list of your current project
1652 pages.
1654 Once the task is created, you are returned to the buffer you were
1655 working in again, Planner gets out of your way, and you can go on
1656 about your business. Later on, when you decide to actually work on
1657 that ``Memorize Planner keybindings'' task, you will be able to
1658 follow the hyperlink from that task on your day or project page
1659 directly to the relevant node in the Planner info file!
1661 By default, @command{M-x planner-create-task-from-buffer} creates
1662 medium-priority tasks, marked with the letter @samp{B}.  But you can
1663 specify a particular priority or change the default (@pxref{Task
1664 Priorities}).
1666 You don't have to use @command{planner-create-task-from-buffer} to
1667 create tasks. You can also create new tasks manually by typing them
1668 directly on your day or project page in the format Planner expects. You
1669 can even still create hyperlinks by using Muse formatting as you
1670 manually type the new task. Keep in mind also that tasks do not have to
1671 be linked to any other page.
1673 For convenience, @command{planner-create-task-from-buffer} is bound to
1674 @kbd{C-c C-t} in Planner buffers.  You can bind
1675 @command{planner-create-task-buffer} to a shortcut key.  See the
1676 manual for your Emacs distribution to find out more about keybinding.
1678 @defun planner-create-task-from-buffer title date plan-page
1679 Create a new task named @var{title} on @var{date} based on the current
1680 buffer.
1682 With a prefix, associate the task with the current planner page.  If
1683 you create a task on a date page, you will be prompted for a plan
1684 page.  If you create a task on a plan page, you will be prompted for a
1685 day page.  If nil is specified, the task is created only on the
1686 current page.
1688 See @code{planner-create-task} for more information.
1690 The new task is created at the top or bottom of the first block of
1691 tasks on the scheduled day page (if any), depending on the value of
1692 @code{planner-add-task-at-end-flag}.
1693 @end defun
1695 @defun planner-create-task title date annotation plan-page
1696 Create a new task named @var{title} based on the current Wiki page.
1697 If @var{date} is non-nil, makes a daily entry on @var{date}, else
1698 makes an entry in today's planner page. It's assumed that the current
1699 Wiki page is the page you're using to plan an activity. Any time
1700 accrued to this task will be applied to that page's name in the
1701 timelog file, assuming you use timeclock (@pxref{Time Intervals, , ,
1702 Emacs, GNU Emacs Manual}). If @var{annotation} is non-nil, it will be
1703 used for the page annotation. If @var{plan-page} is non-nil, the task
1704 is associated with the given page.
1706 With a prefix, associate the task with the current planner page.  If
1707 you create a task on a date page, you will be prompted for a plan
1708 page.  If you create a task on a plan page, you will be prompted for a
1709 day page.  If nil is specified, the task is created only on the
1710 current page.
1712 You probably want to call @code{planner-create-task-from-buffer}
1713 instead.
1715 The new task is created at the top or bottom of the first block of
1716 tasks on the scheduled day page (if any), depending on the value of
1717 @code{planner-add-task-at-end-flag}.
1718 @end defun
1720 @node Task Priorities, Task IDs, Creating a Task, Creating New Tasks
1721 @comment  node-name,  next,  previous,  up
1722 @subsubsection Task Priorities
1724 You can set the priority of a task when you create it, rather than
1725 waiting to adjust it after the fact. In order to do this, call the
1726 function corresponding to the priority you want. You probably want to
1727 bind these functions to some keys if you intend to use them much.
1729 @itemize
1730 @item @code{planner-create-high-priority-task-from-buffer}
1731 creates a task with priority @samp{A}.
1733 @item @code{planner-create-medium-priority-task-from-buffer}
1734 creates a task with priority @samp{B}.
1736 @item @code{planner-create-low-priority-task-from-buffer}
1737 creates a task with priority @samp{C}.
1738 @end itemize
1740 Or, you can change the default priority of
1741 @command{planner-create-task-from-buffer} by customizing
1742 @var{planner-default-task-priority}.
1744 You can actually use just one general priority, but using more than
1745 one color-codes your tasks and gives you a better overview of your
1746 day.
1749 @node Task IDs, Cyclic Tasks, Task Priorities, Creating New Tasks
1750 @comment  node-name,  next,  previous,  up
1751 @subsubsection Task IDs
1752 @cindex @file{planner-id.el}, using
1753 @cindex tasks, IDs
1755 After loading @file{planner.el}, make sure that @file{planner-id.el} is
1756 in your load path and add this to your @file{.emacs} (or @file{_emacs}):
1758 @example
1759 (require 'planner-id)
1760 @end example
1762 This module modifies the behavior of @file{planner.el}, adding global
1763 task IDs so that tasks can be edited and updated. Planner IDs are of
1764 the form @samp{@{@{Identifier:Number@}@}}.
1766 @subheading Options
1768 @defopt planner-id-add-task-id-flag
1769 Non-nil means automatically add global task IDs to newly-created
1770 tasks. If nil, use @command{planner-id-add-task-id} to add IDs to
1771 existing tasks, or @command{planner-id-add-task-id-to-all} to add to
1772 all tasks on the current page.
1773 @end defopt
1775 @defopt planner-id-update-automatically
1776 Non-nil means automatically update linked tasks whenever a page is
1777 saved. If nil, use @command{planner-update-task} to update the linked
1778 task. By default, linked tasks are automatically updated.
1779 @end defopt
1781 @defopt planner-id-tracking-file
1782 File that contains ID tracking data. This file is automatically
1783 overwritten.
1784 @end defopt
1786 @subheading Functions
1788 The following interactive functions are defined in @file{planner-id.el}:
1790 @defun planner-id-jump-to-linked-task &optional info
1791 Display the linked task page. If @var{info} is specified, follow that
1792 task instead.
1793 @end defun
1795 @defun planner-id-add-task
1796 Add a task ID for the current task if it does not have one
1797 yet. Update the linked task page, if any.
1798 @end defun
1800 @defun planner-id-update-tasks-on-page &optional force
1801 Update all tasks on this page. Completed or cancelled tasks are not
1802 updated. This can be added to @code{write-file-functions}. If
1803 @var{force} is non-nil, completed and cancelled tasks are also
1804 updated.
1805 @end defun
1807 @defun planner-id-add-task-id-to-all
1808 Add a task ID for all the tasks on the page. Update the linked page,
1809 if any.
1810 @end defun
1812 @defun planner-id-search-id id
1813 Search for all occurrences of @var{id}.
1814 @end defun
1816 @defun planner-id-follow-id-at-point
1817 Display a list of all pages containing the ID at point.
1818 @end defun
1820 @defun planner-id-follow-id-at-mouse event
1821 Display a list of all pages containing the ID at mouse. @var{event} is
1822 the mouse event.
1823 @end defun
1825 @node Cyclic Tasks, Task Detail, Task IDs, Creating New Tasks
1826 @comment  node-name,  next,  previous,  up
1827 @subsubsection Cyclic Tasks
1828 @cindex @file{planner-cyclic.el}, using
1829 @cindex tasks, cyclic
1830 @cindex cyclic tasks
1831 @cindex recurring tasks
1833 If there are tasks that you have to do regularly, you can have Planner
1834 schedule those tasks automatically.
1836 Make sure that @file{planner-cyclic.el} is in your load path and add
1837 this to your @file{.emacs} (or @file{_emacs}):
1839 @example
1840 (require 'planner-cyclic)
1841 @end example
1843 Create a diary file named @file{~/.diary.cyclic-tasks}
1844 (or the value of @code{planner-cyclic-diary-file}). Here is an example:
1846 @example
1847 Tuesday #B0 _ Study Japanese
1848 Friday #B0 _ Study Japanese (JapaneseStudies)
1849 @end example
1851 The first will be a plain task, the second will be linked.  The first
1852 line will automatically create its task every Tuesday, while the
1853 second will create it every Friday.
1855 You can schedule tasks in a variety of ways. This module uses the same
1856 syntax for specifying when tasks will be scheduled as the Emacs diary
1857 uses for appointments and events. See @ref{Date Formats, the GNU Emacs
1858 Manual, Date Formats,emacs, the GNU Emacs Manual}, and @ref{Sexp Diary
1859 Entries, the GNU Emacs Lisp Reference Manual, Sexp Diary
1860 Entries,elisp, the GNU Emacs Lisp Reference Manual}, for a full
1861 description of the possibilities.
1863 By default, planner-cyclic creates multiple tasks if you let tasks build
1864 up (that is, the next Tuesday rolls around and you @emph{still} haven't
1865 marked the task as done.) To turn off this behavior:
1867 @example
1868 (setq planner-cyclic-diary-nag nil)
1869 @end example
1871 @subheading Functions
1873 @file{planner-cyclic-diary} includes the following interactive
1874 functions:
1876 @defun planner-cyclic-create-tasks-maybe
1877 Maybe create cyclic tasks. This will only create tasks for future
1878 dates or today.
1879 @end defun
1881 @node Task Detail, Deadlines, Cyclic Tasks, Creating New Tasks
1882 @comment  node-name,  next,  previous,  up
1883 @subsubsection Task Detail
1884 @cindex tasks
1886 You may find your planner pages getting very full, so that you want to
1887 have one broad task entry be linked to a more specific list of
1888 sub-tasks. Or, maybe you want to have a number of notes linked to a
1889 particular task.
1890 @cindex tasks, sub-
1891 @cindex tasks, meta-
1892 @cindex meta-tasks
1893 @cindex sub-tasks
1895 This can be done with targets.  You can have a task that is really a
1896 meta-task:
1898 @example
1899 #A1  _ Do things in RevelleLog#13 @{@{Tasks:101@}@} (RevelleLog)
1900 @end example
1902 @samp{RevelleLog#13} could then be a list of sub-tasks in the form of
1903 a note, or any kind of note.
1905 Or, instead of pointing to a particular note on @samp{RevelleLog}, you
1906 could have the whole page be tasks that you enter in manually, without
1907 linking them to another page. You can just type them in like this:
1909 @example
1910 #A1  _ First specific thing to do
1911 @end example
1913 This way, the tasks will only appear on this specific project page,
1914 and not on any daily page, so you only see them when you want to look
1915 up all of the specific tasks associated with @samp{#A1  _ Do things in
1916 RevelleLog @{@{Tasks:101@}@} (RevelleLog)}.
1918 As you can see, the ability to manually enter tasks is one of
1919 Planner's nicest features. It allows you to create tasks that are
1920 not assigned to a specific date (by manually entering them on a
1921 project page with no date) or to a specific project (by manually
1922 entering them on a day page with no project). Yet as long as you enter
1923 them using the syntax it understands, Planner will continue to
1924 recognize them as tasks.
1926 Another way to have a task not be connected to a particular date is to
1927 do @kbd{C-c C-c} (@code{planner-copy-or-move-task}) and specify
1928 @samp{nil} when asked for the date.
1930 If you would like to see a list of all of your unfinished tasks, do
1931 @kbd{M-x planner-list-unfinished-tasks}. This function only checks
1932 day plan pages, not project pages.
1934 @node Deadlines,  , Task Detail, Creating New Tasks
1935 @comment  node-name,  next,  previous,  up
1936 @subsubsection Deadlines
1937 @cindex tasks, deadlines for
1938 @cindex deadlines, task
1939 @cindex @file{planner-deadline.el}, using
1941 You can use @file{planner-deadline.el} to automatically recalculate
1942 days to a deadline by adding @code{(require 'planner-deadline)} to
1943 your @file{~/.emacs}. With the default setup, make your tasks of the
1944 form
1946 @example
1947 #A0 _ Some task @{@{Deadline: 2004.09.12@}@}
1948 @end example
1950 (Note: There must be at least one space after the colon.)
1952 After you run @code{planner-deadline-update} to update task descriptions,
1953 the task will be of the form
1955 @example
1956 #A0 _ Some task @{@{Deadline: 2004.09.12 - 2 days@}@}
1957 @end example
1959 @subheading Options
1961 @defopt planner-deadline-regexp
1962 Regular expression for deadline data.
1963 The special deadline string should be regexp group 1. The
1964 date (YYYY.MM.DD) should be regexp group 2.
1965 @end defopt
1967 @subheading Functions
1969 @defun planner-deadline-update
1970 Replace the text for all tasks with deadlines. Deadlines are of the
1971 form @samp{@{@{Deadline: YYYY.MM.DD@}@}} by default.
1972 @end defun
1974 @defun planner-deadline-change &optional date
1975 Change the deadline of current task to @var{date}. If @var{date} is nil,
1976 remove deadline.
1977 @end defun
1979 @node Organizing Your Tasks, Task Reports and Overviews, Creating New Tasks, More about Tasks
1980 @comment  node-name,  next,  previous,  up
1981 @subsection Organizing Your Tasks
1982 @cindex tasks, organizing
1983 @cindex tasks, old
1985 Okay, now that you've gotten the hang of creating tasks, you're probably
1986 facing a really long list of things to do. How can you organize them so
1987 that they don't overwhelm you? Planner gives you a number of strategies
1988 for dealing with large numbers of tasks.
1990 @enumerate
1991 @item Arrange your tasks in the rough order you're going to do them.
1992 @item Use #A, #B and #C task priorities to differentiate between
1993       high-priority, normal and low-priority tasks.
1994 @item Schedule your tasks onto different days.
1995 @item Group your tasks into plan pages.
1996 @item Don't schedule all your tasks.
1997 @end enumerate
1999 @enumerate
2001 @item @emph{Task order}
2003 To remind yourself to do tasks in a certain order, simply edit the
2004 lines so that they're in the order you want. You can use normal
2005 editing commands like kill, yank and transpose-line to reorder the
2006 tasks, or use @key{M-p} (@code{planner-raise-task}) and @key{M-n}
2007 (@code{planner-lower-task}) to rearrange the tasks.
2009 @item @emph{Task priorities}
2011 By default, tasks are created with medium priority (@samp{#B}). You
2012 can make a task high-priority (@samp{#A}) or low-priority (@samp{#C})
2013 by manually editing the task and calling M-x planner-update-task to
2014 update the linked page. Alternatively, you can use @key{C-M-p}
2015 (@code{planner-raise-task-priority}) and @key{C-M-n}
2016 (@code{planner-lower-task-priority}) to modify the task and update the
2017 linked page.
2019 You can edit the priority of a task using @kbd{M-x
2020 planner-edit-task-priority}, or manually edit it and call @kbd{M-x
2021 planner-update-task} to update tasks on the linked page.
2023 @item @emph{Schedule your tasks on different days}
2025 You don't have to do everything today. Is this a task you would rather
2026 do tomorrow? Schedule it for then instead. You can specify @samp{+n}
2027 or @samp{-n} whenever you are asked for a date, where @var{n} is the
2028 number of days before or after the current file's date or today.
2029 Don't over-procrastinate things, though!
2031 @item @emph{Plan pages}
2033 Plan pages let you group related tasks and notes together for easy
2034 reference. For example, you could have a plan page for each major
2035 project or goal in your life, like @samp{GoodHealth} or
2036 @samp{FurtherStudies}.
2038 Although plan pages start by grouping everything under a @samp{*
2039 Tasks} header, you can organize your plan pages in different ways. For
2040 example, you can separate groups of tasks with blank lines, and
2041 Planner will sort tasks within each group.
2043 @item @emph{Tasks without dates}
2045 Plan pages also allow you to have undated tasks or tasks with no
2046 particular deadlines. This keeps your daily task list small and
2047 manageable while making it easier for you to find things to do if you
2048 have free time. Make sure you check your plan pages regularly so that
2049 you don't completely forget about them.
2051 For automated scheduling of the next task on a plan page after you
2052 complete a task, see the section in
2053 @uref{http://sacha.free.net.ph/notebook/emacs/planner-config.el} named
2054 ``Schedule next undated task from same project''.
2056 @end enumerate
2059 @menu
2060 * Multiple Projects::           
2061 * Viewing Tasks::               
2062 * Modifying Tasks::             
2063 * Carrying Over Unfinished Tasks::  
2064 * Task Numbering::              
2065 * Task Ranks::                  
2066 * Grouping Tasks::              
2067 @end menu
2069 @node Multiple Projects, Viewing Tasks, Organizing Your Tasks, Organizing Your Tasks
2070 @comment  node-name,  next,  previous,  up
2071 @subsubsection Associating Tasks with Multiple Projects
2072 @cindex multiple projects
2073 @cindex planner-multi.el, using
2075 You can use @file{planner-multi.el} to associate a task with more than
2076 one project. That way, you can easily keep GTD-style context lists as
2077 well as project-related lists.
2079 To use multiple projects, add the following to your @samp{~/.emacs}:
2081 @example
2082 (require 'planner-multi)
2083 @end example
2085 Under GNU Emacs, you can specify multiple projects by separating them
2086 with a single space. For example, you can specify @kbd{planner doc}
2087 when creating a task to associate the task with those two projects.
2089 Under XEmacs, you can specify multiple projects by typing @kbd{RET}
2090 after each entry and terminating the list with another @kbd{RET}. For
2091 example, to specify @kbd{planner} and @kbd{doc}, you would type
2092 @kbd{planner RET doc RET RET} at the prompt.
2094 If you want to see an overview of all of your tasks as well as
2095 project- or context-specific lists, you can set
2096 @code{planner-multi-copy-tasks-to-page} to your overview page(s). For
2097 example, set it to @samp{TaskPool} to be able to see an overview of
2098 all of your unfinished tasks. You can also set this to multiple pages
2099 such as @samp{[[TasksByProject][p]] [[TasksByContext][c]]} and use
2100 @file{planner-trunk.el} to sort and organize tasks for easy reference.
2101 (@pxref{Grouping Tasks})
2103 @subheading Options
2105 @defopt planner-multi-copy-tasks-to-page
2106 Automatically copy newly-created tasks to the specified page.
2107 @end defopt
2109 By default, tasks are removed from
2110 @code{planner-multi-copy-tasks-to-page} when you call
2111 @code{planner-task-done} or @code{planner-task-cancelled}. If you
2112 prefer to keep a copy of the task, remove
2113 @code{planner-multi-remove-task-from-pool} from
2114 @code{planner-mark-task-hook}.
2116 If you want to use a different separator instead of spaces, customize
2117 the @code{planner-multi-separator} variable.
2119 @defopt planner-multi-separator
2120 String that separates multiple page references.
2122 For best results, this should be something recognized by
2123 @code{muse-link-at-point} so that links are highlighted
2124 separately.
2125 @end defopt
2127 @node Viewing Tasks, Modifying Tasks, Multiple Projects, Organizing Your Tasks
2128 @comment  node-name,  next,  previous,  up
2129 @subsubsection Viewing tasks
2130 @cindex tasks, viewing
2132 Review the tasks scheduled for today by typing @kbd{M-x
2133 planner-goto-today}.  If you created the task from the previous
2134 section in this tutorial, you should see a line that looks like
2136 @example
2137 #A _ Learn how to change a task's status from Tasks (TaskPool)
2138 @end example
2140 If you have @code{planner-use-task-numbers} set to non-nil, you will see
2141 something like the following instead.
2143 @example
2144 #A0 _ Learn how to change a task's status from Tasks (TaskPool)
2145 @end example
2147 From left to right, these are what the symbols mean:
2149 @itemize
2150 @item @samp{A} - Priority.  A (high)
2151 @item
2152 @samp{0} - Priority number.  It is calculated whenever you save the file
2153 or call @command{planner-renumber-tasks}, provided that
2154 @code{planner-use-task-numbers} is non-nil.  Tasks are numbered in
2155 ascending order according to priorities.
2156 @item @samp{_} - Status.  _ (unfinished)
2157 @end itemize
2159 If you click on @samp{Tasks} or press @key{RET} while your cursor is
2160 in the link, Emacs will display the previous info page.
2162 If you select @samp{TaskPool}, Emacs will display the @samp{TaskPool}
2163 plan page.  Plan pages organize your tasks and notes about a project
2164 in one file.
2166 @subheading Functions
2168 You can use @command{planner-seek-next-unfinished-task} to move to the
2169 next unfinished task on the current page.
2171 @defun planner-list-tasks-with-status status &optional pages
2172 Display all tasks that match the STATUS regular expression on all day
2173 pages.  The PAGES argument limits the pages to be checked in this
2174 manner:
2176 @itemize
2177 @item @code{t}: check all pages
2178 @item regexp: search all pages whose filenames match the regexp
2179 @item list of page names: limit to those pages
2180 @item alist of page/filenames: limit to those pages
2181 @end itemize
2183 Called interactively, this function will search day pages by
2184 default. You can specify the start and end dates or leave them as
2185 nil to search all days. Calling this function with an interactive
2186 prefix will prompt for a regular expression to limit pages.
2187 Specify @samp{.} or leave this blank to include all pages.
2189 This function could take a long time.
2190 @end defun
2192 @defun planner-list-unfinished-tasks &optional pages
2193 Display all unfinished tasks. @var{pages} follows
2194 planner-list-tasks-with-status.
2195 @end defun
2197 @defun planner-jump-to-linked-task task-info
2198 Display the task page linked to by the current task or
2199 @var{task-info}.
2200 @end defun
2202 @node Modifying Tasks, Carrying Over Unfinished Tasks, Viewing Tasks, Organizing Your Tasks
2203 @comment  node-name,  next,  previous,  up
2204 @subsubsection Modifying Tasks
2205 @cindex tasks, modifying
2206 @cindex tasks, editing
2208 To select a task, move your cursor to the line containing the task.
2210 Change a task's priority (@samp{A}, @samp{B} or @samp{C}) by editing
2211 the line. @samp{#A} tasks are important. @samp{#B} are medium
2212 priority. @samp{#C} are low priority. Whenever you save the file or
2213 call @kbd{M-x planner-fix-tasks}, tasks are sorted and numbered
2214 according to priority and status.
2216 Change a task's status by calling one of the following functions:
2218 @itemize
2219 @item planner-task-in-progress @samp{o} (@kbd{C-c C-z})
2220 @item planner-task-done @samp{X} (@kbd{C-c C-x})
2221 @item planner-task-cancelled @samp{C} (@kbd{C-c C-S-x})
2222 @item planner-task-delegated @samp{D}
2223 @item planner-task-pending @samp{P}
2224 @item planner-task-open @samp{_}
2225 @end itemize
2227 After changing the status using a function, look at the
2228 @samp{TaskPool} plan page.  The task is also updated on the linked
2229 page.  If you changed the task status manually by replacing the status
2230 with another character, you will need to call
2231 @command{planner-update-task} to update the linked page.
2233 To reschedule a task, call @command{planner-copy-or-move-task} (@kbd{C-c
2234 C-c}) and choose a new date.  You can mark a region and type @kbd{M-x
2235 planner-copy-or-move-region} to reschedule all the contained tasks to a
2236 different date.  Enter @samp{nil} for the date if you don't want the
2237 task or group of tasks to appear on any date page at all anymore. This
2238 is a good way to ``de-schedule'' a task for the time being, but still
2239 keep it linked to a plan page for possible future scheduling.
2241 To change the plan page associated with a task, call
2242 @command{planner-replan-task}.  Enter @samp{nil} for the plan page if
2243 you don't want the task to appear on any plan page anymore. If you
2244 precede the command with a prefix argument, the text of the original
2245 plan page will appear in the prompt for easy editing.
2247 Since the same task may exist on two or more pages, such as a date page
2248 and a plan page, it is dangerous to edit the description of the task by
2249 hand. You should not do it unless you want to make the exact same
2250 changes on all its linked pages.
2252 Instead of doing this by hand, you should use
2253 @command{planner-edit-task-description}. This will prompt you for the
2254 changes to the task description and then update all the other pages to
2255 which the task is linked.  Or, you can just use
2256 @command{planner-delete-task} to remove the task from both pages, and
2257 then create it again with the new desired description.
2259 To remind yourself to do tasks in a certain order, simply edit the
2260 lines so that they're in the order you want.
2261 @command{planner-raise-task} and @command{planner-lower-task} update
2262 the priorities on linked pages automatically. You can organize tasks
2263 into groups by putting a blank line between groups of tasks.
2264 Planner will maintain the groupings and only sort the tasks within
2265 that group.
2267 @subheading Functions
2269 @defun planner-replan-task page-name
2270 Change or assign the plan page for the current task.  @var{page-name}
2271 is the new plan page for the task. Use
2272 @code{planner-copy-or-move-task} if you want to change the date. With a
2273 prefix, provide the current link text for editing.
2274 @end defun
2276 @defun planner-raise-task-priority
2277 Change a low-priority task to a medium-priority task and a
2278 medium-priority task to a high-priority task (C to B to A).
2279 @end defun
2281 @defun planner-lower-task-priority
2282 Change a high-priority task to a medium-priority task and a
2283 medium-priority task to a low-priority task (A to B to C).
2284 @end defun
2286 @defun planner-raise-task arg
2287 Move a task up @var{arg} steps.  By default, @var{arg} is 1.
2288 @end defun
2290 @defun planner-lower-task  arg
2291 Move a task down @var{arg} steps.  By default, @var{arg} is 1.
2292 @end defun
2294 @defun planner-edit-task-description description
2295 Change the description of the current task, updating the linked page
2296 if any.
2297 @end defun
2299 @defun planner-delete-task
2300 Delete this task from the current page and the linked page.
2301 @end defun
2303 @defun planner-update-task
2304 Update the current task's priority and status on the linked page.
2305 Tasks are considered the same if they have the same description.
2306 This function allows you to force a task to be recreated if it
2307 disappeared from the associated page.
2308   
2309 Note that the text of the task must not change. If you want to be able
2310 to update the task description, see @code{planner-edit-task-description}
2311 or @file{planner-id.el}.
2312 @end defun
2314 See @command{planner-install-extra-task-keybindings} for additional
2315 task-related shortcuts.
2317 @node Carrying Over Unfinished Tasks, Task Numbering, Modifying Tasks, Organizing Your Tasks
2318 @comment  node-name,  next,  previous,  up
2319 @subsubsection Carrying Over Unfinished Tasks
2320 @cindex tasks, carrying over
2322 Sometimes you won't be able to cross off all the tasks on your list.
2323 Planner makes it easy for you to keep track of things you still have
2324 to do by automatically rescheduling unfinished tasks from the past few
2325 days. By default, the @command{plan} command searches for unfinished
2326 tasks from the last three days and reschedules them onto today. If you
2327 open Planner every day, this should cover weekends easily.
2329 It's a good idea to start Planner whenever you start Emacs. That way,
2330 Planner can help remind you about today's tasks, appointments, and other
2331 things. To automatically start Planner whenever you start up Emacs, add
2332 the following code to the end of your @file{~/.emacs}:
2334 @example
2335 (plan)
2336 @end example
2338 Now, every time you start Emacs (which should be more or less once a
2339 day), you'll see today's page. If you don't finish all the tasks today,
2340 you'll see them again tomorrow.
2342 It's a good idea to start Planner every time you start Emacs so that
2343 you get reminded about your task list. If you prefer to start Planner
2344 manually, remember to call @kbd{M-x plan} every so often to make sure
2345 that you don't forget any unfinished tasks. Safe in the knowledge that
2346 Planner tasks won't slip through the cracks (unlike little slips of
2347 paper that will invariably get mislaid), you can then get on with the
2348 rest of your life.
2350 If your increased productivity with Planner leads to a well-deserved
2351 two-week vacation, then you'll need to tell Planner to search more days
2352 for unfinished tasks. By using @kbd{M-x plan}, you can automatically
2353 bring forward tasks over a given number of days or even scan all the
2354 days since time immemorial. @kbd{C-u 15 M-x plan} reschedules all
2355 unfinished tasks from the last 15 days. @kbd{C-u -1 M-x plan} checks all
2356 of your past day pages for unfinished tasks.
2358 Like everything else in Planner, you can adapt @kbd{M-x plan} to your
2359 particular way of life. For example, if you find yourself starting up
2360 Emacs and Planner every day--including weekends--because it's just so
2361 much fun, you can set the @code{planner-carry-tasks-forward} to 1.
2362 This can make your Emacs startup marginally faster. On the other hand,
2363 if you normally start Emacs once a week, you can set it to 7 or 8. If
2364 you're worried about tasks dropping off your radar, you can set it to
2365 0. You can set the value of @var{planner-carry-tasks-forward} either
2366 with @key{M-x customize-variable RET planner-carry-tasks-forward RET},
2367 or by putting @code{(setq planner-carry-tasks-forward 3)} (replacing
2368 @code{3} with the value appropriate for what you want) in your
2369 @file{~/.emacs} file.
2371 On the other hand, you might prefer to reschedule tasks yourself. If
2372 you set @code{planner-carry-tasks-forward} to @code{nil}, then
2373 @command{M-x plan} and @code{(plan)} will bring you to the most recent
2374 page with unfinished tasks if there is no page for today. You can then
2375 use @command{planner-copy-or-move-task} and
2376 @command{planner-copy-or-move-region} to reschedule tasks. This is
2377 probably more hassle than it's worth, though, so let Planner take care
2378 of this for you.
2380 @subheading Options
2382 @defopt planner-carry-tasks-forward
2383 If non-nil, carry unfinished tasks forward automatically.
2384 If a positive integer, scan that number of days in the past.
2385 If 0, scan all days for unfinished tasks.
2386 If t, scan one day in the past (old behavior).
2387 If nil, do not carry unfinished tasks forward.
2388 @end defopt
2390 @subheading Functions
2392 @defun plan &optional force-days
2393 Start your planning for the day, carrying unfinished tasks forward.
2395 If @var{force-days} is a positive integer, search that many days in the
2396 past for unfinished tasks.
2397 If @var{force-days} is @code{0} or @code{t}, scan all days.
2398 If @var{force-days} is @code{nil}, use the value of
2399 @code{planner-carry-tasks-forward} instead, except t means scan only
2400 yesterday
2402 @end defun
2404 @defun planner-copy-or-move-task date force
2405 Reschedule the task for @var{date}. If @var{force} is non-nil, the
2406 task is moved regardless of status. It also works for creating tasks
2407 from a Note. Use @code{planner-replan-task} if you want to change the
2408 plan page in order to get better completion.
2409 @end defun
2411 @defun planner-copy-or-move-region beg end date muffle-errors
2412 Move all tasks from @var{beg} to @var{end} to @var{date}.
2413 @code{planner-copy-or-move-region} will copy or move all tasks from
2414 the line containing @var{beg} to the line just before @var{end}. If
2415 @var{muffle-errors} is non-nil, no errors will be reported.
2416 @end defun
2418 @node Task Numbering, Task Ranks, Carrying Over Unfinished Tasks, Organizing Your Tasks
2419 @comment  node-name,  next,  previous,  up
2420 @subsubsection Task Numbering
2422 By default, tasks are numbered according to their position on the
2423 page.  Task numbers allow you to refer to tasks using Muse links.
2424 For example, the @samp{#A1} task in @file{2004.08.16} can be referred to
2425 as @samp{2004.08.16#A1}.
2427 Note that task numbers change every time you re-sort and re-number tasks
2428 with @code{planner-fix-tasks}.  As a result, they are only reliable for
2429 references to past tasks.
2431 If you find yourself not using this functionality, you can turn off task
2432 numbers by using the following option.
2434 @subheading Options
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 @subheading Options
2505 @defopt planner-rank-change-hook
2506 Functions to run after @code{planner-rank-change}.
2507 @end defopt
2509 @defopt planner-rank-priority-A-valve
2510 Tasks with rank greater than or equal to this value will be set to
2511 priority @samp{A}.
2512 @end defopt
2514 @defopt planner-rank-priority-B-valve
2515 Tasks with rank greater than or equal to this value and less than
2516 @code{planner-rank-priority-A-valve} will be set to priority
2517 @samp{B}. Tasks with rank less than this value will be set to priority
2518 @samp{C}.
2519 @end defopt
2521 @defopt planner-rank-deadline-urgency-map-list
2522 Defines how to calculate the Urgency score according to how many days
2523 are left to meet the deadline.
2524 @end defopt
2526 @defopt planner-rank-default-importance
2527 Default importance value for newly added rank.
2528 @end defopt
2530 @defopt planner-rank-default-urgency
2531 Default urgency value for newly added rank.
2532 @end defopt
2534 @defopt planner-rank-importance-vs-urgency-factor
2535 How much do you think importance is more ``important'' than urgency.
2536 This will be used in @code{planner-rank-calculate-rank-weighted-*}
2537 functions.
2538 @end defopt
2540 @defopt planner-rank-rank-calculate-function
2541 Define the function called to calculate rank.
2542 @end defopt
2544 @subheading Functions
2546 @defun planner-rank-change &optional importance urgency
2547 Set the Importance and Urgency of the current task.
2548 @end defun
2550 @defun planner-rank-update-current-task
2551 Recalculate rank for the current task.
2552 @end defun
2554 @defun planner-rank-update-all
2555 Recalculate rank for all tasks in the current page
2556 @end defun
2558 @defun planner-rank-update-all
2559 Recalculate rank for all tasks in the current page
2560 @end defun
2562 @node Grouping Tasks,  , Task Ranks, Organizing Your Tasks
2563 @comment  node-name,  next,  previous,  up
2564 @subsubsection Grouping Tasks with planner-trunk.el
2565 @cindex grouping tasks
2566 @cindex tasks, grouping
2567 @cindex @file{planner-trunk.el}, using
2569 @file{planner-trunk.el} helps you automatically group tasks according
2570 to a set of rules. It sorts and splits your tasks, adding a blank line
2571 between groups of tasks. For example, if today's page looks like this:
2573 @example
2574 * Tasks
2576 #B   _ Buy milk (GroceryShopping)
2577 #B   _ Learn how to use planner-trunk (PlannerMode)
2578 #B   _ Buy a notebook (Bookstore)
2579 #B   _ Buy cereal (GroceryShopping)
2580 #B   _ Set up my own planner-trunk rules (PlannerMode)
2581 #B   _ Customize my stylesheet (MuseMode)
2582 #B   _ Go for a health checkup (BetterHealth)
2583 @end example
2585 @noindent
2586 then you might want to group the tasks into: planner and muse,
2587 shopping list, and other items. If you set up the appropriate rules by
2588 customizing @code{planner-trunk-rule-list}, @file{planner-trunk.el}
2589 can automatically rewrite that section line this:
2591 @example
2592 * Tasks
2594 #B   _ Learn how to use planner-trunk (PlannerMode)
2595 #B   _ Set up my own planner-trunk rules (PlannerMode)
2596 #B   _ Customize my stylesheet (MuseMode)
2598 #B   _ Buy milk (GroceryShopping)
2599 #B   _ Buy a notebook (BookstoreShopping)
2600 #B   _ Buy cereal (GroceryShopping)
2602 #B   _ Go for a health checkup
2603 @end example
2605 @noindent
2606 In this case, you would set @code{planner-trunk-rule-list}
2607 to @code{(("." nil ("PlannerMode\\|MuseMode" "Shopping")))}.
2609 You can load @file{planner-trunk} with @kbd{M-x load-library RET
2610 planner-trunk RET} or add @code{(require 'planner-trunk)}. If you're
2611 not yet comfortable with Emacs Lisp, you can use @kbd{M-x
2612 customize-variable RET planner-trunk-rule-list RET} to edit this rule
2613 using an easy-to-use interface.
2615 WARNING: Do not keep non-task information in the Tasks section.
2616 planner-trunk will delete @strong{all} non-task lines from the Tasks
2617 section of your plan page in the process of grouping the tasks.
2619 After you set up @code{planner-trunk-rule-list}, use @command{M-x
2620 planner-trunk-tasks} to try out your rules until you're satistfied.
2622 If you want to do this automatically, you can use @code{(add-hook
2623 'planner-mode-hook 'planner-trunk-tasks)} to trigger it automatically
2624 whenever you open a Planner page.
2626 @node Task Reports and Overviews,  , Organizing Your Tasks, More about Tasks
2627 @subsection Task Reports and Overviews
2628 @cindex task reports
2629 @cindex task overviews
2630 @cindex reports, task
2631 @cindex overviews, task
2632 @cindex reports, accomplishment
2633 @cindex tasks, overview of
2635 Planner provides a number of different ways to generate different
2636 presentations of your tasks.
2638 @menu
2639 * Accomplishments::             
2640 * Task Overviews::              
2641 * <tasks> tag::                 
2642 @end menu
2644 @node Accomplishments, Task Overviews, Task Reports and Overviews, Task Reports and Overviews
2645 @comment  node-name,  next,  previous,  up
2646 @subsubsection Generating Daily Accomplishment Reports
2647 @cindex reports, accomplishment
2648 @cindex @file{planner-accomplishments.el}, using
2649 @cindex tasks, overview of
2650 @cindex task reports
2651 @cindex reports, task
2652 @cindex overviews, task
2653 @cindex task overviews
2655 You can use @file{planner-accomplishments.el} to get a summary of your
2656 task activity for a particular day. The report is grouped by status
2657 and plan (on day pages) or date (on plan pages). An example report
2658 follows:
2660 @example
2661 Link        | Unfinished | In progress | Delegated | Completed | Total
2662 nil         | 1          | 0           | 0         | 6         | 7
2663 TaskPool    | 1          | 1           | 0         | 3         | 5
2664 Planner     | 0          | 0           | 1         | 1         | 2
2665 SchoolWork  | 0          | 0           | 0         | 1         | 1
2666 Total       | 2          | 1           | 1         | 11        | 15
2667 @end example
2669 This lets you see how you balance your time between your projects.
2671 @itemize
2673 There are currently two ways to use @file{planner-accomplishments.el}.
2675 @item Displaying a temporary buffer
2677 You can call @code{planner-accomplishments-show} to display a buffer
2678 containing the current page's accomplishment report.
2680 @item Rewriting sections of your planner
2682 Choose this approach if you want accomplishment reports to be in
2683 their own section and you would like them to be readable in your
2684 plain text files even outside Emacs. Caveat: The accomplishment
2685 section should already exist in your template and will be rewritten
2686 when updated.
2688 To use, set @code{planner-accomplishments-section} to the name of the
2689 section to rewrite (default: @samp{Accomplishments}). If you want
2690 rewriting to be automatically performed, call
2691 @code{planner-accomplishments-insinuate}. The accomplishments will be
2692 rewritten whenever you save a planner page. If you want rewriting to
2693 be manual, call @code{planner-accomplishments-update}.
2695 @end itemize
2697 @subheading Options
2699 @defopt planner-accomplishments-section
2700 Header for the accomplishments section in a plan page.
2701 Used by @code{planner-accomplishments-update}.
2702 @end defopt
2704 @defopt planner-accomplishments-status-display
2705 Alist of status-label maps also defining the order of display.
2706 Used by @code{planner-accomplishments-format-table}.
2707 @end defopt
2709 @subheading Functions
2711 @defun planner-accomplishments-insinuate ()
2712 Automatically call @code{planner-accomplishments-update} when saving
2713 tasks in @code{planner-mode} buffers.
2714 @end defun
2716 @defun planner-accomplishments-update ()
2717 Rewrite @code{planner-accomplishments-section} with a summary of tasks
2718 on this page.
2719 @end defun
2721 @defun planner-accomplishments-show ()
2722 Display a buffer with the current page's accomplishment report.
2723 @end defun
2725 @node Task Overviews, <tasks> tag, Accomplishments, Task Reports and Overviews
2726 @comment  node-name,  next,  previous,  up
2727 @subsubsection Seeing an Overview of Tasks
2728 @cindex tasks, overview of
2729 @cindex task reports
2730 @cindex reports, task
2731 @cindex overviews, task
2732 @cindex task overviews
2733 @cindex @file{planner-tasks-overview.el}, using
2735 You can see a list of tasks with @file{planner-tasks-overview.el}.
2736 Seeing how you've scheduled tasks over the next few days can help you
2737 decide when to schedule another task. Table entries will be of the form
2739 @var{date} | @var{link} | @var{priority} @var{status} | @var{task-description}
2741 @subheading Functions
2743 To display the tasks between a set of day pages, use
2745 @defun planner-tasks-overview start end
2746 Display an overview of your tasks from @var{start} to @var{end}. If
2747 @var{start} is nil, start from the very first day page. If @var{end}
2748 is nil, include the very last day page. You can use
2749 @code{planner-expand-name} shortcuts here, like @kbd{+1} or @kbd{-1}.
2750 Pressing @key{RET} at the prompt will use today.
2752 Once in a @code{planner-tasks-overview} buffer, you can use
2753 the keyboard shortcut @key{o} to change the overview period.
2754 @end defun
2756 You can sort the task display with the following functions:
2758 @defun planner-tasks-overview-sort-by-date
2759 Sort the tasks by date. Keyboard shortcut: @key{1}
2760 @end defun
2762 @defun planner-tasks-overview-sort-by-plan
2763 Sort the tasks by associated plan page. Keyboard shortcut: @key{2}
2764 @end defun
2766 @defun planner-tasks-overview-sort-by-priority
2767 Sort the tasks by priority. Keyboard shortcut: @key{3}
2768 @end defun
2770 @defun planner-tasks-overview-sort-by-status
2771 Sort the tasks by status. Keyboard shortcut: @key{4}
2772 @end defun
2774 You can jump to linked tasks with
2776 @defun planner-tasks-overview-jump other-window
2777 Display the current task. If a prefix argument is supplied, show the
2778 task in another window. Keyboard shortcut: @key{j}
2779 @end defun
2781 @defun planner-tasks-overview-jump-other-window
2782 Display the current task in another window. Keyboard shortcut: @kbd{C-u j}
2783 @end defun
2785 You can view a summary of the tasks in your plan pages with
2787 @defun planner-tasks-overview-show-summary &optional file-list
2788 Count unscheduled, scheduled, and completed tasks for FILE-LIST. If
2789 called with an interactive prefix, prompt for the plan page(s) to
2790 display. Load @file{planner-multi.el} to be able to specify multiple
2791 pages.
2792 @end defun
2794 @subheading Keys
2796 @key{TAB}, @kbd{SHIFT-TAB} and @key{RET} navigate links in the usual
2797 fashion.
2799 @node <tasks> tag,  , Task Overviews, Task Reports and Overviews
2800 @subsubsection <tasks> tag
2801 @cindex <tasks> tag
2802 @cindex task reports
2803 @cindex reports, task
2804 @cindex overviews, task
2805 @cindex task overviews
2806 @cindex tasks, overview of
2808 @samp{<tasks>} is replaced by a report of tasks over all day pages in
2809 published pages (@pxref{Publishing}).
2811 @example
2812 All incomplete tasks
2814 <tasks status="^X">
2816 All completed tasks
2818 <tasks status="X">
2820 All tasks
2822 <tasks>
2823 @end example
2825 Warning: this function can be slow, as it checks all the day pages!
2827 @node More about Notes, Making Files Pretty, More about Tasks, More about Planner
2828 @section More about Notes
2829 @cindex notes, more about
2830 You can put anything in this section. Notes added by
2831 @file{remember-planner.el} look like this:
2833 @example
2834 .#1 Headline
2835 Body
2836 @end example
2838 and are outlined at the @code{H3} level. If you want to take notes
2839 conveniently, check out @file{remember-planner.el}.
2841 Planner by default organizes the notes on a planner page so that
2842 the most recent note is first. Each note is numbered, with the oldest
2843 note labeled @samp{.#1}. If you would like to reverse this behavior,
2844 look at @kbd{C-h v planner-reverse-chronological-notes}.
2846 Notes are associated with day pages, but can also be associated with
2847 plan pages when they are created.  A linked note looks like this:
2849 @example
2850 .#1 Headline (LinkedNote#1)
2851 Text
2852 @end example
2854 You can jump to the linked note with
2855 @command{planner-jump-to-linked-note}.
2857 Deleting a note can be dangerous, as the notes are automatically
2858 numbered.  Removing a note could break links in other pages.
2860 @subheading Functions
2862 @defun planner-create-note page
2863 Create a note to be remembered in @var{page} (today if @var{page} is
2864 nil).  If @code{planner-reverse-chronological-notes} is non-nil, create
2865 the note at the beginning of the notes section; otherwise, add it to
2866 the end.  Position point after the anchor.
2867 @end defun
2869 @defun planner-create-note-from-task
2870 Create a note based on the current task and update the current task to
2871 link to the note.
2872 @end defun
2874 @defun planner-renumber-notes
2875 Update note numbering.
2876 @end defun
2878 @defun planner-jump-to-linked-note note-info
2879 Display the note linked to by the current note or @var{note-info} if
2880 non-nil.
2881 @end defun
2883 @defun planner-search-notes regexp limit
2884 Return a buffer with all the notes returned by the query for
2885 @var{regexp}.  If called with a prefix argument, prompt for
2886 @var{limit} and search days on or after @var{limit}.
2887 @end defun
2889 The following sections include instructions for displaying,
2890 manipulating, and navigating your notes efficiently.
2892 @menu
2893 * Using Allout Mode::           Quickly navigating your notes
2894 * <notes>::                     Note headlines
2895 * <past-notes>::                Index of past notes
2896 * Note Indices::                
2897 @end menu
2899 @node Using Allout Mode, <notes>, More about Notes, More about Notes
2900 @subsection Using Allout Mode
2901 @cindex Allout mode
2902 @cindex notes, navigating
2903 @cindex notes, formatting
2904 @cindex notes, displaying
2906 The format of the notes in Planner works well with Allout mode, which
2907 provides helpful commands for navigating and formatting outlines. You
2908 can, for example, hide the bodies of all the notes on a page so you can
2909 see just their headlines. You can also jump easily from headline to
2910 headline, skipping over the bodies in between.
2912 The commands for using Allout mode vary depending on which Emacs version
2913 you are using. In either case, type @kbd{M-x load-library @key{RET}
2914 allout @key{RET}} to start. If you are using CVS Emacs, type @kbd{M-x
2915 allout-mode @key{RET}}. If you are using an earlier version of Emacs,
2916 type @kbd{M-x outline-mode @key{RET}}.
2918 The exact commands then available to you differ depending on your Emacs
2919 version, but you can view the commands and their keybindings by typing
2920 @kbd{C-h m}. In CVS Emacs, they will start with @command{allout-}, while
2921 in previous versions, they will start with @command{outline-}.
2923 @node <notes>, <past-notes>, Using Allout Mode, More about Notes
2924 @subsection <notes>
2926 @samp{<notes>} is replaced by a list of note headlines when the page
2927 is published. For example, the notes tag in the following example will
2928 be replaced by the two headlines when published. (@pxref{Publishing})
2930 @example
2931 <notes>
2933 * Notes
2935 .#1 This is a headline
2937 and this is body text
2939 .#2 This is another headline
2941 and this is more body text
2942 @end example
2944 @samp{<notes>} is useful if you want to provide a quick summary of
2945 blog entries at the top of your page. Just add it to your
2946 @code{planner-day-page-template}.
2948 @node <past-notes>, Note Indices, <notes>, More about Notes
2949 @subsection <past-notes>
2951 @samp{<past-notes>} is replaced by an index of note headlines.
2952 If @var{start} is specified, it lists notes starting from that date.
2953 If @var{directory} is specified, you can index notes in another
2954 planner directory.
2956 @example
2957 All the notes I've taken in 2004:
2959 <past-notes start="2004.01.01" end="2004.12.31">
2960 @end example
2962 @node Note Indices,  , <past-notes>, More about Notes
2963 @comment  node-name,  next,  previous,  up
2964 @subsection Note Indices
2965 @cindex @file{planner-notes-index.el}, using
2966 @cindex notes, indexing
2968 Make sure that @file{planner-notes-index.el} is in your load path and
2969 add this to your @file{.emacs} (or @file{_emacs}):
2971 @example
2972 (require 'planner-notes-index)
2973 @end example
2975 Then you can use tags of the form:
2977 @example
2978 <planner-notes-index page="2004.03.02">
2979 <planner-notes-index from="2004.03.01" to="2004.03.31">
2980 <planner-notes-index limit="10">
2981 <planner-notes-index page="PlanPage">
2982 <planner-notes-index-month-table month="2004.03" limit="5">
2983 <planner-notes-index-month-table month="2004.03">
2984 @end example
2986 You can also use the following interactive functions:
2988 @code{planner-notes-index}
2989 @code{planner-notes-index-days}
2990 @code{planner-notes-index-weeks}
2991 @code{planner-notes-index-months}
2992 @code{planner-notes-index-years}    (wow!)
2994 These work based on the current date (date of current buffer, or today).
2996 If a single page is specified, this page is scanned for headlines
2997 of the form:
2999 @example
3000  .#1 Headline
3001 @end example
3003 The results are presented as a bulleted list.
3005 If @var{from} and @var{to} are specified, all date pages between them
3006 (inclusive) are scanned. If @var{from} is omitted, it is assumed to be
3007 the earliest entry.  If @var{to} is omitted, it is assumed to be the
3008 latest entry.
3010 If @var{recent} is specified, the list includes only that many recent
3011 headlines.  and the results are presented as a bulleted list.
3013 To customize presentation, you can write a function that generates
3014 the appropriate @code{<planner-notes-index>} tags. You can also use
3015 @code{planner-extract-note-headlines} in your own functions.
3017 @subheading Functions
3019 The following interactive functions are defined in
3020 @file{planner-notes-index.el}:
3022 @defun planner-notes-index &optional from to limit
3023 Display a clickable notes index. If called from a Lisp program,
3024 display only dates between @var{from} and @var{to}. With a prefix arg
3025 @var{limit}, display only that number of entries.
3026 @end defun
3028 @defun planner-notes-index-days days
3029 Display an index of notes posted over the past few @var{days}. The
3030 list ends with the day of the current buffer or @code{planner-today}.
3031 @end defun
3033 @defun planner-notes-index-weeks weeks
3034 Display an index of notes posted over the past few @var{weeks}. The
3035 list ends with the week of the current buffer or
3036 @code{planner-today}. Weeks start from Sunday.
3037 @end defun
3039 @defun planner-notes-index-months months
3040 Display an index of notes posted over the past few @var{months}. The
3041 list ends with the month of the current buffer or @code{planner-today}.
3042 @end defun
3044 @defun planner-notes-index-years years
3045 Display an index of notes posted over the past few @var{years}. The
3046 current year is included.
3047 @end defun
3049 @file{planner-notes-index.el} does not define any keybindings.
3052 @node Making Files Pretty, Annotations, More about Notes, More about Planner
3053 @section Making Files Pretty
3055 By default, planner does a little bit of fancy reformatting when you
3056 save a file. Tasks are sorted by priority (ABC) and status (_oP>XC) on
3057 day pages. On plan pages, tasks are sorted by priority (ABC), status
3058 (XC), and date. Undated tasks are sorted after dated tasks.
3060 @subheading Options
3062 @defopt planner-sort-tasks-key-function
3063 Control task sorting. Some options include
3064 @code{planner-sort-tasks-default-key},
3065 @code{planner-sort-tasks-basic}, @code{planner-sort-tasks-by-date}, and
3066 @code{planner-sort-tasks-by-link}.
3067 @end defopt
3069 @defopt planner-sort-undated-tasks-equivalent
3070 This option controls the behavior of task sorting on plan pages.  By
3071 default, the value @samp{9999.99.99} causes dated tasks to be listed
3072 before undated tasks.  To sort undated tasks before dated tasks,
3073 set this to a blank string.
3074 @end defopt
3076 @defopt planner-sort-tasks-automatically
3077 Non-nil means sort tasks whenever a planner file is saved.  On day
3078 pages, tasks are sorted by status.  On plan pages, they are sorted by
3079 status and date.  Sorting can take a while.
3080 @end defopt
3082 @defopt planner-renumber-tasks-automatically
3083 Non-nil means renumber tasks from 1 to N whenever a planner file is
3084 saved. This allows you to refer to tasks in previous day pages using
3085 anchors like @samp{2003.08.12#A1}. If you use this function, make sure
3086 @code{planner-use-task-numbers} is non-nil so that new tasks are created
3087 with task numbers.
3088 @end defopt
3090 @defopt planner-align-tasks-automatically
3091 Non-nil means align tasks whenever a planner file is saved.  This
3092 causes the status to line up in a neat column if you have less than
3093 100 tasks.
3094 @end defopt
3096 @defopt planner-renumber-notes-automatically
3097 Non-nil means renumber the notes. If most of your notes are only on
3098 one page, you might like seeing the notes renumbered if you delete a
3099 note in the middle. However, if you use a lot of cross-referencing,
3100 note renumbering will break those links.
3101 @end defopt
3103 @subheading Functions
3105 @defun planner-sort-tasks
3106 Sort tasks according to planner-sort-tasks-key-function. By default,
3107 sort tasks according to priority and position on day pages, and
3108 according to status, priority, date, and position on plan pages.
3109 @end defun
3111 @defun planner-renumber-tasks
3112 Update task numbering.
3113 @end defun
3115 @defun planner-align-tasks
3116 Align tasks neatly. You can add this to @code{write-file-functions} to
3117 have the tasks automatically lined up whenever you save.  For best
3118 results, ensure @code{planner-align-tasks} is run after
3119 @code{planner-renumber-tasks}.
3120 @end defun
3122 @defun planner-fix-tasks
3123 Sort, renumber and align tasks.
3124 @end defun
3126 @node Annotations, Interactive Lisp, Making Files Pretty, More about Planner
3127 @comment  node-name,  next,  previous,  up
3128 @section Annotations
3130 The context included when you create a task and the context included
3131 when you create a note are gained the same way. It sounds like black
3132 magic, but it turns out not to be.
3134 All that happens is, Planner has a list of functions,
3135 @code{planner-annotation-functions}. When you create a task from a
3136 buffer, or remember a note from a buffer, Planner goes through
3137 this list from top to bottom. The first one that returns true is the
3138 one it uses.
3140 For example, if you're in Wanderlust, and you hit the key you've bound
3141 to @code{planner-create-task-from-buffer}, it looks at this list and
3142 does something like this.  Is it an ERC buffer? No. Is it a BBDB
3143 buffer? No. Are we in w3m? No. Are we in Wanderlust? Yes. So this
3144 function succeeds. It stops searching and runs the annotation function
3145 for Wanderlust, which in this case finds out who the message is from
3146 and what the message ID of the message is. It then takes those and
3147 constructs a link back to that message, with a link title something
3148 like @samp{Email from Joe Blogs}.
3150 So, you've read the email from Joe Blogs. He's asked you to do
3151 something and you've hit your key to add that task to your list of
3152 things to do. So what you end up with is a description of the task,
3153 and a link back to what made you create the task in the first place.
3155 The same happens with remembering notes, except that it ends up in the
3156 @samp{* Notes} section of your page instead.
3158 By default, @file{planner.el} can annotate tasks and notes based on
3159 the current filename.
3161 @subheading Options
3163 To change the behavior of annotations, customize the following options:
3165 @defopt planner-annotation-functions
3166 A list of functions tried in order by
3167 @command{planner-create-task-from-buffer} and other functions that
3168 pick up context.  The first non-nil value returned is used as the
3169 annotation.  To cause an item to @strong{not} be annotated, return the
3170 empty string @samp{""}.
3171 @end defopt
3173 @defopt planner-annotation-strip-directory
3174 File links are usually generated with the full path to the file so
3175 that you can easily tell apart files with the same base name.  If
3176 @code{planner-annotation-strip-directory} is non-nil, though, only the
3177 base name of the file will be displayed.  For example, a link to
3178 @samp{/foo/bar/baz} will be displayed as @samp{baz} and hyperlinked to
3179 the file.
3180 @end defopt
3182 @defopt planner-annotation-use-relative-file
3183 If t, always use relative filenames.
3184 @code{planner-annotation-use-relative-file} can also be a function that
3185 takes the filename and returns non-nil if the link should be relative.
3186 Filenames are resolved relative to the first directory of your Planner
3187 project in @code{muse-project-alist}.  That is, the created link will be
3188 of the form @samp{../../somefile} instead of
3189 @samp{/absolute/path/to/file}.  This can be helpful if you publish your
3190 planner files to the Net and your directory structure ensures that
3191 relative links resolve the same from your Plan pages and their
3192 respective publishing directory.
3193 @end defopt
3195 @node Interactive Lisp, Publishing, Annotations, More about Planner
3196 @comment  node-name,  next,  previous,  up
3197 @section Interactive Lisp with planner-lisp.el
3198 @cindex Lisp functions, using with Planner
3199 @cindex interactive Lisp fuctions, using with Planner
3200 @cindex @file{planner-lisp.el}, using
3202 You can include interactive Lisp functions in your planner pages.
3204 First, you need @file{planner-lisp.el}. Put this in your @file{.emacs}
3205 (or @file{_emacs}):
3207 @example
3208 (require 'planner-lisp)
3209 @end example
3211 Then, add a link to the Lisp function to your page, like:
3213 @example
3215 [[lisp:/plan][Plan]]
3217 @end example
3219 This will be rendered as @samp{Plan}. Selecting the link will run the
3220 @code{plan} function interactively.
3222 You can also execute other Lisp expressions. For example:
3224 @example
3225 [[lisp:/(planner-goto (planner-expand-name "+7"))][Next week]]
3226 @end example
3228 @file{planner-lisp.el} does not provide any interactive functions or
3229 keybindings.
3231 @node Publishing, Experimental Functions, Interactive Lisp, More about Planner
3232 @section Publishing
3234 You can publish your planner files to HTML and put them on a normal
3235 web server--no special server support required. This gives you an easy
3236 way to keep other people up to date on your tasks, keep a web log, or
3237 simply organize information.
3239 Publish your planner wiki with @kbd{C-c C-p}
3240 (@code{muse-project-publish}). You can publish individual files with
3241 @kbd{C-c C-t} (@code{muse-publish-this-file}). To automatically publish
3242 files when you save them, add the following code to your
3243 @file{~/.emacs}:
3245 @example
3246 (eval-after-load "muse-mode"
3247   (add-hook 'after-save-hook
3248             #'(lambda ()
3249                 (when (planner-derived-mode-p 'muse-mode)
3250                   (muse-project-publish nil)))
3251             nil t))
3252 @end example
3254 Published files are stored in the path specified by
3255 @code{muse-project-alist} for your Planner project.  Just copy the
3256 contents of this directory to your webserver, and you're all set! Of
3257 course, publishing is completely optional.
3259 Here are some more features related to publishing:
3261 @menu
3262 * Publishing Calendars::        planner-calendar.el
3263 * Authz Access Restriction::    planner-authz.el
3264 * RSS Publication::             Sharing notes with planner-rss.el
3265 * iCal Task Publication::       Sharing tasks with planner-ical.el
3266 * RDF Publication::             planner-rdf.el
3267 @end menu
3269 @node Publishing Calendars, Authz Access Restriction, Publishing, Publishing
3270 @comment  node-name,  next,  previous,  up
3271 @subsection Publishing Calendars
3272 @cindex calendar, publishing
3273 @cindex @file{planner-calendar.el}, using
3275 To publish calendars in your day pages, it is necessary to do two steps.
3277 @itemize
3278 @item Add @code{(require 'planner-calendar)} to your configuration.
3279 @item Add a @samp{<calendar>} tag to either your header, footer, or
3280 @var{planner-day-page-template}, depending on where you want it to
3281 appear.
3282 @end itemize
3284 To display a calendar based on a different day (given here as DAYPAGE),
3285 use @code{<calendar page="DAYPAGE">}.
3287 To get arrows to previous and next months to show up, use
3288 @code{<calendar arrows="t">}.  The text in
3289 @var{planner-calendar-prev-month-button} and
3290 @var{planner-calendar-next-month-button} will be used for the arrows to
3291 the previous and next months, respectively.
3293 By default, Muse will not display the arrows properly, due to
3294 limitations in the special-escaping algorithm.  To work around this,
3295 remove the @samp{&} rule from @var{muse-xml-markup-specials}, or from
3296 @var{muse-html-markup-specials} if you are using the 3.02.6 version of
3297 Muse.
3299 It is also possible to create a symlink from the current day page to the
3300 page name specified by @var{planner-calendar-today-page-name}.  To
3301 accomplish this, add the following to your configuration.
3303 @example
3304 (eval-after-load "muse-publish"
3305   '(add-hook 'muse-after-publish-hook
3306              'planner-calendar-create-today-link))
3307 @end example
3309 @subheading Options
3311 @defopt planner-calendar-prev-month-button
3312 HTML text used for previous month buttons.
3313 @end defopt
3315 @defopt planner-calendar-next-month-button
3316 HTML text used for next month buttons.
3317 @end defopt
3319 @defopt planner-calendar-day-header-chars
3320 Number of characters to use for day column header names.
3321 @end defopt
3323 @defopt planner-calendar-today-page-name
3324 Default name for published today page link.
3325 @end defopt
3327 @subheading Functions
3329 @defun planner-calendar-create-today-link
3330 Add this function to @code{muse-after-publish-hook} to
3331 create a ``today'' soft-link to the newest published planner day page,
3332 on operating systems that support POSIX @command{ln}.
3333 @end defun
3335 @node Authz Access Restriction, RSS Publication, Publishing Calendars, Publishing
3336 @comment  node-name,  next,  previous,  up
3337 @subsection Authz Access Restriction
3338 @cindex @file{planner-authz.el}, using
3339 @cindex Mason, restricting portions with
3340 @cindex access, restricting
3342 @file{planner-authz.el} was written by Andrew J. Korty in order to
3343 allow the easy restriction of portions of published pages.  It uses
3344 the HTML::Mason module available on CPAN
3345 (@url{http://www.cpan.org}).  Setting up HTML::Mason is
3346 outside the scope of this document.  Make sure that it works before
3347 trying out @file{planner-authz.el}.
3349 @file{planner-authz.el} modifies the behavior of
3350 @command{muse-project-publish} so that published pages follow access
3351 modifiers.
3353 This library lets you publish your planner pages while controlling
3354 access to certain portions of them to users you specify.  When you
3355 load this library, you gain access to two additional markup directives
3356 to use in your planner pages.  The @samp{<authz>} tag lets you
3357 restrict access to arbitrary content as follows:
3359 @example
3360 Here is a sentence everyone should see.  This sentence also
3361 contains no sensitive data whatsoever.  <authz users="ajk">This
3362 sentence, however, talks about my predilection for that French
3363 vanilla instant coffee that comes in the little tin, and I'm
3364 embarrassed for anyone else to know about that.</authz> And
3365 here's some more perfectly innocuous content.
3366 @end example
3368 You can use @samp{<authz>} tags to mark up entire paragraphs, tasks,
3369 notes, and anything else.  The tags are replaced with Mason code in
3370 the published pages.
3372 The @samp{#authz} directive restricts access to an entire page.  A Mason
3373 call is added to this page to generate a 403 error when someone not
3374 listed tries to access it.  Any notes or tasks on a
3375 @samp{#authz}-protected page are also wrapped in Mason code on linked
3376 pages. To add a @samp{#authz} directive to a Muse page, place
3377 @samp{#authz} followed by a space-delimited list of users on one
3378 line. For example:
3380 @example
3381 #authz ajk sacha
3382 @end example
3384 @subheading Options
3386 @defopt planner-authz-project-default
3387 Default access list for project pages (not day pages).  If a given
3388 project page doesn't contain a @samp{#authz} tag, it will receive the
3389 access list defined here.  If this variable is nil, all users will be
3390 allowed to view the page.  No corresponding variable is provided for
3391 day pages because it doesn't seem like you'd ever want to control
3392 access based on what day it was.  (But I will accept patches. :) Notes
3393 and tasks referencing pages without @samp{#authz} tags will also be
3394 restricted to the users listed here.
3395 @end defopt
3397 @defopt planner-authz-day-note-default
3398 Default access list for notes on day pages not associated with
3399 any project.  There is way to set a default for notes on project
3400 pages for the reason above; they would only be associated with
3401 date pages anyway.
3402 @end defopt
3404 @defopt planner-authz-day-task-default
3405 Same as @kbd{planner-authz-day-note-default}, but for tasks.
3406 @end defopt
3408 @subheading Functions
3410 @defun planner-authz-publish-index
3411 Publish an index for the planner marked up with Mason code.
3412 Only those links to pages which the remote user is authorized to
3413 access will be shown.
3414 @end defun
3416 @node RSS Publication, iCal Task Publication, Authz Access Restriction, Publishing
3417 @comment  node-name,  next,  previous,  up
3418 @subsection RSS Publication
3419 @cindex @file{planner-rss.el}, using
3420 @cindex notes, RSS
3421 @cindex RSS
3423 @file{planner-rss.el} allows you to publish your notes in the RSS 2.0
3424 XML format for blog syndication. You will also want to customize the
3425 following variables:
3427 To manually add the current note to all the matching RSS feeds, invoke
3428 @command{planner-rss-add-note}. You can specify a filename with the
3429 universal prefix, like this: @kbd{C-u M-x planner-rss-add-note}.
3431 If you use the @file{remember-planner.el} module to create notes, you
3432 can automatically publish new notes to RSS feeds by adding the
3433 following code to your @file{.emacs} (or @file{_emacs}).
3435 @example
3436 (add-to-list 'remember-planner-append-hook 'planner-rss-add-note t)
3437 @end example
3439 @subheading Options
3441 @defopt planner-rss-base-url
3442 Base absolute URL for published blog entries. Should include trailing
3443 @samp{/}.
3444 @end defopt
3446 @defopt planner-rss-category-feeds
3447 Rules for automatic categorization of posts and publishing to RSS
3448 files. A blog entry is matched against each condition. If it matches
3449 the regular expression or the function returns a non-nil value, the
3450 blog entry is copied into the specified file.
3451 @end defopt
3453 @defopt planner-rss-feed-limits
3454 A list of regular expressions that match feed filenames and the size
3455 and item limits for feeds that match. For example, you can use
3456 @samp{(("." nil 10))} to ensure that all feeds are limited to the 10
3457 most recent items.
3458 @end defopt
3460 @subheading Functions
3462 @file{planner-rss.el} defines the following interactive functions:
3464 @defun planner-rss-add-note @var{feed}
3465 Export the current note using @code{planner-add-item}. If @var{feed}
3466 is specified, add the entry to the specified file. Else, add the entry
3467 to all matching RSS feeds specified by
3468 @code{planner-rss-category-feeds}.
3469 @end defun
3471 @node iCal Task Publication, RDF Publication, RSS Publication, Publishing
3472 @comment  node-name,  next,  previous,  up
3473 @subsection iCal Publication
3475 iCal is an Internet Engineering Task Force (IETF) standard for
3476 calendaring and scheduling. @uref{http://www.ietf.org/rfc/rfc2445.txt}
3478 You can export your tasks to the iCal format using
3479 @file{planner-ical}. Add @code{(require 'planner-ical)} to your
3480 @file{~/.emacs}. Then you can use @kbd{M-x planner-ical-export-page}
3481 to display the iCal equivalent of tasks on a page, which you can then
3482 save to a file.
3484 To export today's tasks to a file in your publishing directory, add
3485 the following to your @file{~/.emacs}.
3487 @example
3488 (planner-ical-export-file
3489  (planner-today)
3490  (expand-file-name
3491    "tasks.ics"
3492    (muse-style-element :path (car (cddr (muse-project planner-project))))))
3493 @end example
3495 @subheading Functions
3497 @defun planner-ical-export-page page &optional file
3498 Export PAGE's tasks in the iCal format.
3499 If FILE is non-nil, results are saved to that file.
3500 If FILE is nil, results are displayed in a `planner-ical-export-buffer'.
3501 @end defun
3503 @defun planner-ical-export-this-page
3504 Display the tasks on the current page in iCal format.
3505 @end defun
3507 @node RDF Publication,  , iCal Task Publication, Publishing
3508 @comment  node-name,  next,  previous,  up
3509 @subsection RDF Publication
3510 @cindex @file{planner-rdf.el}, using
3511 @cindex RDF, publishing to
3513 Put planner-rdf.el in a directory that is in your Emacs load-path and
3514 the following into your ~/.emacs file:
3516 @example
3517 (require 'planner-rdf)
3518 (eval-after-load "muse-publish"
3519   '(progn
3520      (add-hook 'muse-after-publish-hook
3521                'planner-rdf-publish-file)
3522      (add-hook 'muse-after-publish-hook
3523                'planner-rdf-publish-index)))
3524 @end example
3526 @menu
3527 * Publishing with planner-rdf::  
3528 * planner-rdf Tags::            
3529 * planner-rdf Usage Examples::  
3530 @end menu
3532 @node Publishing with planner-rdf, planner-rdf Tags, RDF Publication, RDF Publication
3533 @subsubsection Publishing with planner-rdf
3535 Planner-rdf is now included in the normal Planner publishing process.
3536 Pressing @key{C-p} will create a .owl and a .rdf file for every planner
3537 file. Additionally it creates an index, @file{index.rdf}.
3539 By default all generated files will be stored in the normal Planner
3540 publishing directory, where the HTML files end up. If you would ike to
3541 change that, set the variable @code{planner-rdf-directory} to the desired
3542 location.
3544 The generated files:
3546 @itemize
3547 @item
3548 @file{index.rdf} - a collection with pointers to the
3549 @file{<plan-page>.rdf} files.
3550 @item
3551 @file{<plan-page>.rdf} - contains Dublin Core metadata about the files
3552 related to the current Planner page. Currently it contains metadata
3553 about the source file, the Emacs plan page, the generated HTML page, and
3554 the generated OWL file.
3555 @item
3556 @file{<plan-page>.owl} - contains task and note data from the Planner
3557 file. Task information is stored completely. For notes, the note
3558 headline is stored.
3559 @end itemize
3561 @node planner-rdf Tags, planner-rdf Usage Examples, Publishing with planner-rdf, RDF Publication
3562 @subsubsection planner-rdf Tags
3564 Besides the factual information, e.g. the task status or description,
3565 planner-rdf extracts links (in the format @samp{[[...][...]]} or
3566 @samp{[[...]]}) and tags (@samp{@{@{...:...}@}@}) from tasks and notes
3567 (including the notes text). Links and tags provide context for the plan
3568 elements and so are stored and linked with the containing elements.
3570 Links point to locations that can be used to enrich the information in
3571 the Planner pages (e.g, by retrieving data from them and adding it),
3572 tags -- like the one for the task ids @samp{@{@{Tasks:198@}@}} -- can be
3573 used to express abstract qualities. Some examples:
3575 @itemize
3576 @item
3577 an @samp{@{@{audience:myteam@}@}} tag, can be used to restrict
3578 publishing of items to a certain user group;
3579 @item a @samp{@{@{lang:de@}@}} tag, signifying the language of the text;
3580 @item
3581 a @samp{@{@{location:Hamburg@}@}} tag, can be used to make geographic
3582 reference to an entity that is not stored in your address book, bbdb.
3583 @end itemize
3585 What tags to use is up to the user. Planner-rdf makes no assumptions
3586 about them, it just extracts and stores them. Only the applications
3587 using the data know what to do with them.
3589 @node planner-rdf Usage Examples,  , planner-rdf Tags, RDF Publication
3590 @subsubsection Usage Examples
3592 Report generation with OpenOffice
3594 The Perl file @file{this-week.pl}
3595 (@url{http://www.rainervolz.de/planner-rdf/this-week.pl}) creates a
3596 simple report for the current week. The script extracts task and note
3597 information from the generated OWL files and inserts it into a simple
3598 OpenOffice Writer document. Nothing fancy, just a proof of concept, to
3599 show how planner-rdf can be used to integrate Planner Mode with other
3600 applications.
3602 Besides Perl and OpenOffice you'll need the Redland RDF Application
3603 Framework (@url{http://www.redland.opensource.ac.uk/}). It is used to
3604 process the RDF data. Redland is small, but powerful, and available
3605 for many platforms and languages.
3607 As an example the application loads the RDF data each time it is run.
3608 In the real world you probably would use Redland to store the Planner
3609 data in a database, to save the loading step each time you access the
3610 data.
3612 Importing Planner data into Protege
3614 Protege is a popular ontology editor and knowledge management
3615 application. A simple way to import data into it, is to provide a OWL
3616 file that contains the data as well as the schema. To do this:
3618 @itemize
3619 @item
3620 Use @file{planner2protege.pl}
3621 (@url{http://www.rainervolz.de/planner-rdf/planner2protege.pl}) to
3622 combine all OWL files into a single one.
3623 @item
3624 Use CWM (@url{http://www.w3.org/2000/10/swap/doc/cwm.html}) to combine
3625 schema and data, with @code{python cmw --rdf planner-rdf.owl
3626 planner-data.owl --think --rdf >planner2.owl}
3627 @end itemize
3629 Not the most straightforward process, but it works. The resulting file,
3630 here planner2.owl, can then be loaded into Protege.
3632 @node Experimental Functions,  , Publishing, More about Planner
3633 @comment  node-name,  next,  previous,  up
3634 @section Experimental Functions
3635 @cindex @file{planner-experimental.el}, using
3636 @cindex experimental functions, Planner
3638 These functions are experimental. This means that they may not do
3639 exactly what you expect them to do, so keep backups, be careful, and
3640 don't blame us.
3642 To use these functions, make sure that @file{planner-experimental.el} is
3643 in your load path, and add this to your @file{.emacs} (or
3644 @file{_emacs}):
3646 @example
3647 (require 'planner-experimental)
3648 @end example
3650 @subheading Functions
3652 @file{planner-experimental.el} defines the following interactive
3653 functions:
3655 @defun planner-search-notes-next-match
3656 Jump to the next matching entry.  Call after
3657 @code{planner-search-notes}.
3658 @end defun
3660 @defun planner-search-notes-previous-match
3661 Jump to the previous matching entry.  Call after
3662 @code{planner-search-notes}.
3663 @end defun
3665 @defun planner-remove-duplicates
3666 Remove duplicate tasks.
3667 @end defun
3669 @file{planner-experimental.el} does not define any keybindings.
3671 @node Managing Your Information, Advanced Configuration, More about Planner, Top
3672 @comment  node-name,  next,  previous,  up
3673 @chapter Managing Your Information
3675 Planner can be integrated with other Emacs and even some non-Emacs
3676 programs by loading additional modules. You can pick and choose from
3677 these modules, choosing those that work with programs you use and that
3678 produce information you want to have included in your Planner pages.
3680 @menu
3681 * E-mail::                      Linking notes and tasks to messages
3682 * Scheduling and Time::         Tracking appointments and where your time goes
3683 * Finances::                    Display your account balances and more
3684 * Contacts and Conversations::  BBDB and ERC
3685 * Tracking Research and Resources::  The Web, bibliographies, and bookmarks
3686 * Tracking Development::        
3687 @end menu
3689 @node E-mail, Scheduling and Time, Managing Your Information, Managing Your Information
3690 @comment  node-name,  next,  previous,  up
3691 @section E-mail
3693 Planner can work together with several different Emacs e-mail
3694 clients. If you load the appropriate module for the e-mail client you
3695 use, then your notes and tasks can be annotated with information
3696 pointing to the specific e-mail message you were reading when you
3697 created that note or task. When you are looking at the note or task, you
3698 will be able to jump straight to that message.
3700 @menu
3701 * Unix mail::                   Unix mailboxes: planner-unix-mail.el              
3702 * Gnus::                        Gnus mail and news reader: planner-gnus.el
3703 * VM::                          VM mail reader: planner-vm.el
3704 * Wanderlust::                  Wanderlust mail reader: planner-wl.el
3705 * MH-E::                        MH-E mail reader: planner-mhe.el
3706 * Rmail::                       Rmail: planner-rmail.el
3707 @end menu
3710 @node Unix mail, Gnus, E-mail, E-mail
3711 @comment  node-name,  next,  previous,  up
3712 @subsection Unix mail
3713 @cindex mbox, using Planner with
3714 @cindex Unix mail, using Planner with
3715 @cindex mail client, using Planner with
3717 This module supports links from any kind of Unix mailbox (mbox). To
3718 use this module, make sure that @file{planner-unix-mail.el} is in your
3719 load path and add this to your @file{.emacs} (or @file{_emacs}):
3721 @example
3722 (require 'planner-unix-mail)
3723 @end example
3725 Unix mail URLs are of the form:
3727 @example
3728 ;; mail://PATH/TO/INBOX/message-id
3729 @end example
3731 Annotations will be of the form:
3733 @smallexample
3734 [[mail://PATH/TO/INBOX/E1AyTpt-0000JR-LU%40sacha.ateneo.edu][E-mail from Sacha Chua]]
3735 @end smallexample
3737 @file{planner-unix-mail.el} does not define any interactive functions or
3738 create any new keybindings.
3740 @node Gnus, VM, Unix mail, E-mail
3741 @comment  node-name,  next,  previous,  up
3742 @subsection Gnus
3743 @cindex Gnus, using Planner with
3744 @cindex mail client, using Planner with, Gnus
3746 To use this module, make sure that it is in your load path and put
3747 this in your @file{.emacs} (or @file{_emacs}):
3749 @example
3750 (require 'planner-gnus)
3751 (planner-gnus-insinuate)
3752 @end example
3754 With this module loaded, when you create tasks from Gnus summary or
3755 message buffers, the tasks will be annotated with information from the
3756 message you were looking at when you created each task. A link will also
3757 be created on your planner page that you can select in order to return
3758 to the message.
3760 So, the created task will look something like this:
3762 @smallexample
3763 #A34 _ Send writing to publishme.com from
3764 [[gnus://alt.books.beatgeneration/<Ifo5c.24632$F9.9567@@nwrddc01.gnilink.net>][E-Mail
3765 from editor@@verizon.net]] @{@{Tasks:71@}@} ([[Writing]])
3766 @end smallexample
3768 This module also binds @kbd{C-c C-t} in the Gnus summary and article
3769 views to the command to create a new task.
3771 @file{planner-gnus.el} does not define any interactive functions.
3773 For more information about Gnus, see @inforef{Top, The Gnus Newsreader,
3774 gnus}.
3776 @node VM, Wanderlust, Gnus, E-mail
3777 @comment  node-name,  next,  previous,  up
3778 @subsection VM
3779 @cindex VM, using Planner with
3780 @cindex mail client, using Planner with, VM
3782 To use this module, make sure that @file{planner-vm.el} is in your load
3783 path and add this to your @file{.emacs} (or @file{_emacs}):
3785 @example
3786 (require 'planner-vm)
3787 @end example
3789 VM URLs are of the form:
3791 @example
3792 vm://path/to/inbox/message-id
3793 @end example
3795 Annotations will be of the form:
3797 @smallexample
3798 [[vm://home/test/INBOX/<E1AyTpt-0000JR-LU@@sacha.ateneo.edu>][E-mail from Sacha Chua]]
3799 @end smallexample
3801 @file{planner-vm.el} does not define any interactive functions or
3802 keybindings.
3805 @node Wanderlust, MH-E, VM, E-mail
3806 @comment  node-name,  next,  previous,  up
3807 @subsection Wanderlust
3808 @cindex Wanderlust, using Planner with
3809 @cindex mail client, using Planner with, Wanderlust
3811 To use this module, make sure that @file{planner-wl.el} is in your
3812 load path and add this to your @file{.emacs} (or @file{_emacs}):
3814 @example
3815 (require 'planner-wl)
3816 @end example
3818 Then, when you call @kbd{M-x planner-create-task-from-buffer} from
3819 Wanderlust summary or message buffers, the task will be created with
3820 the correct annotation.
3822 @file{planner-wl} does not define any interactive functions.
3824 @subheading Keys
3826 To add keybindings to Wanderlust, call:
3828 @example
3829 (planner-wl-insinuate)
3830 @end example
3832 This binds @kbd{F} to @command{planner-create-task-from-buffer}.
3834 @node MH-E, Rmail, Wanderlust, E-mail
3835 @comment  node-name,  next,  previous,  up
3836 @subsection MH-E
3837 @cindex MH-E, using Planner with
3838 @cindex mail client, using Planner with, MH-E
3840 To use this module, make sure that @file{planner-mhe.el} is in your
3841 load path and add this to your @file{.emacs} (or @file{_emacs}):
3843 @example
3844 (require 'planner-mhe)
3845 @end example
3847 Then, when you call @kbd{M-x planner-create-task-from-buffer} from
3848 MH-E summary or message buffers, the task will be created with
3849 the correct annotation.
3851 @file{planner-mhe} does not define any interactive functions.
3853 @node Rmail,  , MH-E, E-mail
3854 @comment  node-name,  next,  previous,  up
3855 @subsection Rmail
3856 @cindex Rmail, using Planner with
3857 @cindex mail client, using Planner with, Rmail
3859 To use this module, make sure that @file{planner-rmail.el} is in your
3860 load path and add this to your @file{.emacs} (or @file{_emacs}):
3862 @example
3863 (require 'planner-rmail)
3864 @end example
3866 Rmail URLs are of the form:
3868 @example
3869 rmail://message-id
3870 @end example
3872 Annotations will be of the form:
3874 @smallexample
3875 [[rmail://<E1AyTpt-0000JR-LU@@sacha.ateneo.edu>][E-mail from Sacha Chua]]
3876 @end smallexample
3878 @file{planner-rmail.el} does not define any interactive functions or
3879 create any new keybindings.
3881 For more information about Rmail, see @inforef{Rmail, Reading Mail With
3882 Rmail, Emacs}.
3884 @node Scheduling and Time, Finances, E-mail, Managing Your Information
3885 @comment  node-name,  next,  previous,  up
3886 @section Scheduling and Time
3888 @menu
3889 * Diary::                       Using the Emacs diary
3890 * Appointments::                Appointments in plan pages: planner-appt.el
3891 * Timeclock::                   Time tracking: planner-timeclock.el
3892 * schedule.el::                 Project completion: planner-schedule.el
3893 @end menu
3896 @node Diary, Appointments, Scheduling and Time, Scheduling and Time
3897 @comment  node-name,  next,  previous,  up
3898 @subsection Diary
3899 @cindex diary, using Planner with
3900 @cindex @file{planner-diary.el}, using
3902 If you use Emacs's diary feature, Planner-Diary could be helpful for
3903 you. It puts all diary entries for the current day in the @samp{*
3904 Diary} section of your day plan page. This section is updated every
3905 time you display the file in Emacs. By default the diary section of
3906 past pages is not updated; it's pretty unlikely that you want to add
3907 new diary entries for the past. (@pxref{Diary, , , Emacs, GNU Emacs
3908 Manual})
3910 If you want to use @file{planner-diary.el}, make sure the file is in
3911 your load path and add this to your @file{.emacs} (or @file{_emacs}):
3913 @example
3914 (require 'planner-diary)
3915 @end example
3917 @file{planner-diary.el} needs @command{fancy-diary-display}.  To use
3918 @command{fancy-diary-display}, add this to your @file{.emacs} (or
3919 @file{_emacs}):
3921 @example
3922 (add-hook 'diary-display-hook 'fancy-diary-display)
3923 @end example
3925 You can use Planner-Diary in two different ways:
3927 @enumerate
3929 @item
3930 If you want the saved files to contain your entries and not just a line
3931 of Lisp, add the following lines to your @file{.emacs} (or @file{_emacs}):
3933 @example
3934 (setq planner-diary-use-diary t)
3935 (planner-diary-insinuate)
3936 @end example
3938 You should also customize or set @code{planner-day-page-template} to
3939 include a @samp{* Diary}:
3941 @example
3942 (setq planner-day-page-template
3943  "* Tasks\n\n\n* Schedule\n\n\n* Diary\n\n\n* Notes")
3944 @end example
3946 @item
3947 (GNU EMACS ONLY) You can put the following line of Lisp code in your
3948 day plan pages to display your diary entries:
3950 @example
3951 <lisp>(planner-diary-entries-here)</lisp>
3952 @end example
3954 You can do this automatically for all day plan pages:
3956 @smallexample
3957 (setq planner-day-page-template
3958   "* Tasks\n\n\n* Diary\n\n<lisp>(planner-diary-entries-here)</lisp>
3959 \n* Notes")
3960 @end smallexample
3962 When you open a day plan page outside Emacs, you will see the line of
3963 Lisp code and not your diary entries.
3965 @end enumerate
3967 If you want to see your diary entries for more than just one day, set
3968 @code{planner-diary-number-of-days} accordingly.  This works for either
3969 of the two approaches.
3971 @kbd{C-c C-e} updates the diary sections.  @kbd{C-u C-c C-e} forces an
3972 update---it inserts the diary section for the day, even if the day is in
3973 the past or if there is no @samp{Diary} section in the buffer.
3975 If you want to use the Cal-Desk package, simply follow the instructions
3976 in @file{cal-desk.el}.  If you get the Cal-Desk layout from the Calendar
3977 buffer, you get it in the day plan buffer, too.
3979 If you use Planner-Diary, you might consider using the Calendar support
3980 of Planner. (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}) To get
3981 Calendar integration, add this to your @file{.emacs} (or @file{_emacs}):
3983 @example
3984 (planner-insinuate-calendar)
3985 @end example
3987 If @code{planner-diary-create-section-flag} is non-nil, sections are
3988 always inserted if necessary.
3990 @subheading Options
3992 @defopt planner-diary-create-section-flag
3993 Non-nil means create the requested diary sections if they do not
3994 exist. By default, planner-diary tries to create the section. If you
3995 want more control over your pages, you can set this to nil. Trying to
3996 write a diary section to a page that does not have it yet will then
3997 result in an error.
3998 @end defopt
4000 By default, planner-diary lists only the appointments you have on that
4001 day. If you want the date headers included even when showing the diary
4002 entries for a single day, set planner-diary-include-all-output to
4003 non-nil.
4005 @defopt planner-diary-include-all-output-flag
4006 Non-nil means don't omit any data when copying diary entries into day
4007 pages.
4008 @end defopt
4010 @subheading Functions
4012 @file{planner-diary.el} defines the following interactive functions:
4014 @defun planner-diary-add-entry date time text
4015 Prompt for a diary entry to add to @code{diary-file} on @var{date}.
4016 Uses @code{planner-annotation-functions} to make hyperlinks.
4017 @var{time} and @var{text} are used in the description."
4018 @end defun
4020 @defun planner-diary-insert-diary force
4021 Insert the fancy diary for the day into the day plan file. If
4022 @var{force} is non-nil, insert a diary section even if there is no
4023 @var{planner-diary-string} in the buffer.
4024 @end defun
4026 @defun planner-diary-insert-diary-maybe force
4027 Maybe insert the fancy diary for the day into the day plan file. If the
4028 current day is in the past and @var{force} is nil, don't do anything. If
4029 @var{force} is non-nil, insert a diary section even if there is no
4030 @code{planner-diary-string} in the buffer.
4031 @end defun
4033 @defun planner-diary-insert-appts force
4034 Insert the diary appointments for the day into the day plan file.  If
4035 @var{force} is non-nil, insert a diary appointments section even if
4036 there is no @code{planner-diary-appts-string} in the buffer.
4037 @end defun
4039 @defun planner-diary-insert-appts-maybe force
4040 Maybe insert the diary appointments for the day into the day plan file.
4041 If the current day is in the past and @var{force} is nil, don't do
4042 anything.  If @var{force} is non-nil, insert a diary appointments
4043 section even if there is no @code{planner-diary-appts-string} in the
4044 buffer.
4045 @end defun
4047 @defun planner-diary-insert-cal-desk force
4048 Insert the cal-desk diary for the day into the day plan file.  If
4049 @var{force} is non-nil, insert a cal-desk diary section even if there is
4050 no @code{planner-diary-cal-desk-string} in the buffer.
4051 @end defun
4053 @defun planner-diary-insert-cal-desk-maybe force
4054 Maybe insert the cal-desk diary for the day into the day plan file.  If
4055 the current day is in the past and @var{force} is nil, don't do
4056 anything.  If @var{force} is non-nil, insert a cal-desk appointments
4057 section even if there is no @code{planner-diary-cal-desk-string} in the
4058 buffer.
4059 @end defun
4061 @defun planner-diary-insert-public force
4062 Insert the public diary for the day into the day plan file.  If
4063 @var{force} is non-nil, insert a public diary section even if there is
4064 no @code{planner-diary-public-string} in the buffer.
4065 @end defun
4067 @defun planner-diary-insert-public-maybe force
4068 Maybe insert the public diary for the day into the day plan file.  If
4069 the current day is in the past and @var{force} is nil, don't do
4070 anything.  If @var{force} is non-nil, insert a public appointments
4071 section even if there is no @code{planner-diary-public-string} in the
4072 buffer.
4073 @end defun
4075 @defun planner-diary-insert-private force
4076 Insert the private diary for the day into the day plan file.  If
4077 @var{force} is non-nil, insert a private diary section even if there is
4078 no @code{planner-diary-private-string} in the buffer.
4079 @end defun
4081 @defun planner-diary-insert-private-maybe force
4082 Maybe insert the private diary for the day into the day plan file.  If
4083 the current day is in the past and @var{force} is nil, don't do
4084 anything.  If @var{force} is non-nil, insert a private appointments
4085 section even if there is no @code{planner-diary-private-string} in the
4086 buffer.
4087 @end defun
4089 @defun planner-diary-insert-all-diaries force
4090 Update all diary sections in a day plan file.  If @var{force} is
4091 non-nil, insert a diary section even if there is no section header.  It
4092 only inserts diaries if the corresponding @code{planner-diary-use-}*
4093 variable is @samp{t}.
4094 @end defun
4096 @defun planner-diary-insert-all-diaries-maybe force
4097 Update all diary sections in a day plan file.  If the current day is in
4098 the past and @var{force} is nil, don't do anything.  If @var{force} is
4099 non-nil, insert a diary section even if there is no section header.  It
4100 only inserts diaries if the corresponding @code{planner-diary-use-}*
4101 variable is @samp{t}.
4102 @end defun
4104 @defun planner-diary-show-day-plan-or-diary
4105 Show the day plan or diary entries for the date under point in calendar.
4106 Add this to @code{calendar-move-hook} if you want to use it.  In that
4107 case, you should also @command{remove-hook} @samp{planner-calendar-show}
4108 from @code{calendar-move-hook}.
4109 @end defun
4111 @subheading Keys
4113 @file{planner-diary.el} adds the following keybinding to Planner, if
4114 @command{planner-diary-insinuate} is in your @file{.emacs} (or
4115 @file{_emacs}):
4117 @itemize
4119 @item
4120 @kbd{C-c C-e} updates the diary sections.
4122 @end itemize
4124 @menu
4125 * Planner-Diary Advanced Features::  
4126 @end menu
4128 @node Planner-Diary Advanced Features,  , Diary, Diary
4129 @comment  node-name,  next,  previous,  up
4130 @subsubsection Planner-Diary Advanced Features
4131 @cindex diary, using Planner with
4132 @cindex @file{planner-diary.el}, advanced features
4134 The features described here are part of the development version.  They
4135 are subject to change without notice.  They may be buggy.  The
4136 documentation may be inaccurate.  Use at your own risk.
4138 There is a lot of code redundancy in the development version.  This is
4139 intentional and makes it easier to change the code for one type of diary
4140 section without breaking others.
4142 @subheading Diary views
4144 @cindex @file{planner-diary.el}, views
4145 Currently Planner-Diary supports six different views of your diary
4146 entries:
4148 @enumerate
4149 @item
4150 Ordinary fancy diary display (what you get by pressing @kbd{d} in the
4151 calendar buffer with @code{fancy-diary-display} switched on)
4153 @item
4154 Schedule/Appointments (all entries from 1 that have a time assigned to
4155 them
4157 @item
4158 Diary without appts (1 without 2)
4160 @item
4161 cal-desk display (appts on top, non appts entries at bottom)
4163 @item
4164 A private diary (same as 1, but uses a different diary-file)
4166 @item
4167 A public diary (same as 1, but uses a different diary-file)
4168 @end enumerate
4170 Put the following line of Lisp code in your day plan pages to display
4171 your diary entries:
4173 @example
4174 <lisp>(planner-diary-entries-here)</lisp>
4175 @end example
4177 The function @code{planner-diary-entries-here} takes two optional
4178 arguments---the diary file you want to use and the number of days you
4179 want to display.
4181 @subheading Exporting Planner-specific Diary files
4183 @cindex @file{planner-diary.el}, exporting entries
4184 If you would like to export diary entries from your Planner pages to
4185 separate Diary files, add @code{(require 'planner-export-diary)} to your
4186 config.  The following steps describe the usage of the functions and
4187 options contained in this file.
4189 @enumerate
4191 @item
4192 Customize @code{planner-export-diary-file}.  The default value is
4193 ``~/diary.planner''.
4195 @item
4196 Add the following line to your main Diary file (default: ``~/diary'').
4198 @example
4199 #include ~/diary.planner
4200 @end example
4202 @item
4203 Then, call @command{M-x planner-export-diary-future} whenever you want
4204 future diary entries published. You can automatically publish entries by
4205 adding either of the following to your .emacs.
4207 @itemize
4209 @item (planner-export-diary-future)
4210 Publish future entries on startup.
4212 @item (add-hook 'planner-mode-hook 'planner-export-diary-setup)
4213 Publish future entries whenever you save a Planner file.
4215 @end itemize
4217 @end enumerate
4219 @node Appointments, Timeclock, Diary, Scheduling and Time
4220 @comment  node-name,  next,  previous,  up
4221 @subsection Appointments
4222 @cindex appointments
4223 @cindex @file{planner-appt.el}, using
4225 If you would like to use planner for your appointment alerts
4226 instead of using the diary system, you might like to try
4227 @file{planner-appt}.
4229 According to your preferences, you may choose from two different
4230 approaches. Appointments in task descriptions on today's plan
4231 page are like this:
4233 @example
4234 #A   _ @@12:45 Do something (TaskPool)
4235 @end example
4237 @noindent
4238 and appointments in today's schedule section are like this:
4240 @example
4241 * Schedule
4243   9:00 | 12:00 | Read Simmel's Philosophy of Money
4244 @@12:45 |       | Do Something Else
4245 @@13:00 | 14:00 | lunch
4246 @end example
4248 @noindent
4249 You can even use both at the same time if you like.
4251 @c Jim Ottaway <j.ottaway@lse.ac.uk>: Changed these kinds of heading
4252 @c back to @unnumberedsec, but left the originals commented out in
4253 @c case there was a good reason for the @strong formatting.
4255 @c @noindent
4256 @c @strong{Usage}
4257 @unnumberedsubsubsec Usage
4259 In the file where you configure Planner, add one of the following.
4261 @itemize
4262 @item
4263 For task-based appointments: @code{(planner-appt-use-tasks)}
4264 @item
4265 For schedule-based appointments: @code{(planner-appt-use-schedule)}
4266 @item
4267 For both task- and schedule-based appointments:
4268 @code{(planner-appt-use-tasks-and-schedule)}
4269 @end itemize
4271 @noindent
4272 And finally if you want everything to be updated automatically add:
4274 @example
4275 (planner-appt-insinuate)
4276 @end example
4278 If you don't want to do the insinuation then you can call:
4280 @example
4281 M-x planner-appt-update
4282 @end example
4284 @noindent
4285 after editing appointments on the page (note that this is not
4286 necessary if you use tasks for the appointments and you don't edit
4287 the task descriptions outside of @code{planner-edit-task-description}).
4289 Try both methods; if you find that you prefer one over the
4290 other, use one of the specific @code{planner-appt-use-} functions, as
4291 there are some performance gains when using one method exclusively.
4293 @menu
4294 * Task-based Appointments::     
4295 * Schedule-based Appointments::  
4296 * Viewing Appointments::        
4297 * Appointment Updating on Save::  
4298 * Appointment and Calendar Integration::  
4299 * Appointment Hooks::           
4300 @end menu
4303 @node Task-based Appointments, Schedule-based Appointments, Appointments, Appointments
4304 @comment  node-name,  next,  previous,  up
4305 @subsubsection Task-based Appointments
4306 @cindex appointments, task-based
4307 @cindex task-based appointments
4309 A task has an appointment if it looks like this:
4311 @example
4312 #A   _ @@12:45 Do something (TaskPool)
4313 @end example
4315 @noindent
4316 i.e., if it has @@ followed by a time at the beginning.  This means
4317 the task is a regular appointment, and will not be carried forward
4318 at the start of a new day.
4320 Alternatively, it may have a !, like this:
4322 @example
4323 #A   _ !12:45 Do something else (TaskPool)
4324 @end example
4326 @noindent
4327 This makes it a "nagging" appointment, which @emph{will} be carried
4328 forward.  It will, however, lose the appointment time in the
4329 process.
4331 This may seem like a strange feature, but here is Henrik's
4332 reasoning:
4334 @quotation
4335 Sometimes I have a task that I want to do at a certain time, so I
4336 make it an appointment.  If I don't get around to doing it anyway,
4337 I want it to be carried forward.  Basically, I sometimes use
4338 appointments on tasks to annoy me until I get them done. :)
4339 @end quotation
4341 You can edit, move and delete tasks with the usual functions, and
4342 appointments will be updated automatically.
4344 You can update all task appointments on your page with
4346 @example
4347 M-x planner-appt-update
4348 @end example
4350 @c @noindent
4351 @c @strong{Cyclic Entries}
4353 @unnumberedsubsubsec Cyclic Entries
4354 @cindex appointments, cyclic task entries
4356 If you have @file{planner-cyclic} (@pxref{Cyclic Tasks}) loaded, entries
4357 in your cyclical tasks file such as
4359 @example
4360 Friday #A _ @@12:45 staff meeting
4361 @end example
4363 @noindent
4364 will appear every Friday and there will be an appointment alert set
4367 @c @noindent
4368 @c @strong{Appointments Section}
4369 @unnumberedsubsubsec Appointments Section
4370 @cindex appointments, appointments section
4372 You can have all task-based appointments copied to a separate section,
4373 providing an overview of your appointments.
4375 To do this, add
4377 @example
4378 (setq planner-appt-task-use-appointments-section-flag t)
4379 @end example
4381 @noindent to your configuration, or use @kbd{M-x customize-variable}.
4383 The variable @code{planner-appt-task-appointments-section} is the name
4384 of the section where the appointments will be copied.  By default, it is
4385 set to @code{"Schedule"}, which means that task appointments will be
4386 intermingled with schedule entries.
4388 It is also a good idea to add the section you wish to use to
4389 @code{planner-day-page-template} in order to control where that section
4390 will appear on the page (otherwise it will appear at the top).
4392 The format of the appointments follows that of a schedule; if you
4393 don't like the way it looks, you can write something different and set
4394 @code{planner-appt-format-appt-section-line-function} appropriately.
4395 See the documentation for
4396 @code{planner-appt-format-appt-section-line-function} for details.  It
4397 should be fairly easy to see what needs to be done if you look at the
4398 source for the default function (which is
4399 @code{planner-appt-format-appt-section-line}).
4401 If the section specified in
4402 @code{planner-appt-task-appointments-section} is the same as the
4403 schedule section specified in @code{planner-appt-schedule-section} (by
4404 default @code{"Schedule"}), the default formatting function adds a
4405 @samp{#} to the description so that one can visually distinguish
4406 appointments from the task list from those that have been added to the
4407 schedule.
4409 @node Schedule-based Appointments, Viewing Appointments, Task-based Appointments, Appointments
4410 @comment node-name,  next,  previous,  up
4411 @subsubsection Schedule-Based Appointments
4412 @cindex appointments, schedule-based
4413 @cindex schedule-based appointments
4415 Some scheduled tasks require reminders, others don't.  In this
4416 schedule:
4418 @example
4419 * Schedule
4421 9:00   | 12:00 | Read Simmel's Philosophy of Money
4422 @@12:45          Do Something Else
4423 @@13:00 | 14:00 | lunch
4424 @@14:30 |       | Meet jrs to discuss his dissertation
4425 @@16:00           Test Society seminar
4426 18:00            go home
4427 @end example
4429 @noindent
4430 those that have an @@ prefix will be added to the appointment
4431 reminder list; the others will not.  The formats that are
4432 recognized are fairly flexible, as you can see from the example.
4434 If you change your schedule, you can update the appointment list
4435 with
4437 @example
4438 M-x planner-appt-update
4439 @end example
4441 @noindent You can also have the schedule sorted as part of the update,
4442 if you have this in your configuration:
4444 @example
4445 (setq planner-appt-sort-schedule-on-update-flag t)
4446 @end example
4448 @c @noindent 
4449 @c @strong{Cyclical Entries}
4450 @unnumberedsubsubsec Cyclical Entries
4451 @cindex appointments, cyclic schedule entries
4453 You can also have cyclical schedule entries(@pxref{Cyclic Tasks}) if you
4456 @example
4457 (planner-appt-schedule-cyclic-insinuate)
4458 @end example
4460 @noindent to your configuration.
4462 If you put an entry in your cyclical task file like this
4464 @example
4465 Friday @@12:45 | 13:45 | Staff Meeting
4466 @end example
4468 @noindent
4469 then it will appear in your schedule every Friday, and an
4470 appointment alert will be set up.
4472 @node Viewing Appointments, Appointment Updating on Save, Schedule-based Appointments, Appointments
4473 @comment  node-name,  next,  previous,  up
4474 @subsubsection Viewing Appointments
4475 @cindex appointments, viewing
4477 The command @command{planner-appt-show-alerts} will show all appointment
4478 alerts currently scheduled.
4480 @subheading Functions
4482 There are two commands that show appointments in the future; the one
4483 displays them in a pop-up buffer, the other puts the information into
4484 the current day page.
4486 @deffn {Command} planner-appt-forthcoming-display &optional days
4487 Display a buffer of appointments for today and the next
4488 @var{days}. Optional prefix argument @var{days} is the number of days
4489 ahead to look. Its default value is defined by
4490 @code{planner-appt-forthcoming-days}.
4491 @end deffn
4493 @deffn {Command} planner-appt-forthcoming-update-section &optional days
4494 In today's plan page, add or update a list of forthcoming
4495 appointments. Optional prefix argument @var{days} is the number of
4496 days ahead to look. Its default value is defined by
4497 @code{planner-appt-forthcoming-days}.  The section heading to use is
4498 defined by @code{planner-appt-forthcoming-appt-section}.
4499 @end deffn
4501 @subheading Options
4503 @defopt planner-appt-forthcoming-days
4504 The number of days to look ahead for forthcoming appointments.  The
4505 default value is seven days.
4506 @end defopt
4508 @defopt planner-appt-forthcoming-appt-section
4509 The name of the section to use for inserting a list of forthcoming
4510 appts.  The default value is @code{"Forthcoming Appointments"}.
4511 @end defopt
4513 @defopt planner-appt-forthcoming-show-day-names-flag
4514 When non-nil (the default), day names will be shown in forthcoming
4515 appointments.
4516 @end defopt
4518 @defopt planner-appt-forthcoming-repeat-date-string
4519 String to insert for repeated dates.
4521 When there are multiple appointments for a date, the date is inserted
4522 in the first appointment and the others have this string in their date
4523 cell.
4525 If the string consists of anything other than whitespace, then a link
4526 to the day page for the appoinment is created.
4527 @end defopt
4529 @defopt planner-appt-forthcoming-look-at-cyclic-flag
4530 When non-nil, find forthcoming appointments in the cyclic diary file
4531 (@pxref{Cyclic Tasks}) as well as in plan pages. Default is @samp{t}.
4532 @end defopt
4534 @node Appointment Updating on Save, Appointment and Calendar Integration, Viewing Appointments, Appointments
4535 @comment  node-name,  next,  previous,  up
4536 @subsubsection Appointment Updating on Save
4537 @cindex appointments, updating on save
4539 @subheading Options
4541 @defopt planner-appt-update-appts-on-save-flag
4542 When non-nil, update appointment reminders whenever today's plan page is
4543 saved. Default value is @samp{nil}.
4544 @end defopt
4546 @node Appointment and Calendar Integration, Appointment Hooks, Appointment Updating on Save, Appointments
4547 @comment  node-name,  next,  previous,  up
4548 @subsubsection Appointment and Calendar Integration
4550 Not strictly part of appointment handling, but if one isn't using
4551 the diary, marking dates with plan pages seems to make sense.
4553 @subheading Functions
4555 @defun planner-appt-calendar-insinuate
4556 Add a hook to diary display so that dates in the calendar that have day
4557 pages are highlighted
4558 @end defun
4560 @node Appointment Hooks,  , Appointment and Calendar Integration, Appointments
4561 @comment  node-name,  next,  previous,  up
4562 @subsubsection Appointment Hooks
4564 @subheading Options
4566 @defvr {Hook} planner-appt-update-hook
4567 Hook run after @code{planner-appt-update} has updated the appointment
4568 list.
4569 @end defvr
4571 @node Timeclock, schedule.el, Appointments, Scheduling and Time
4572 @comment  node-name,  next,  previous,  up
4573 @subsection Timeclock
4574 @cindex @file{planner-timeclock.el}, using
4575 @cindex @file{planner-timeclock-summary.el}, using
4576 @cindex @file{planner-timeclock-summary-proj.el}, using
4577 @cindex timeclock, using Planner with
4579 This module allows you to clock in and clock out of your projects
4580 (@pxref{Time Intervals, , , Emacs, GNU Emacs Manual}). You can also
4581 generate reports with the @code{<timeclock-report>} tag. You may want
4582 to read the @ref{Keeping Track of Time} page to see how you can use
4583 planner-timeclock to produce detailed reports.
4585 @file{timeclock.el} is part of GNU Emacs.  If you are using XEmacs,
4586 please use the version of @file{timeclock.el} the comes with Planner in
4587 the @file{contrib} directory.
4589 With @file{planner-timeclock.el} loaded,
4590 @command{planner-task-in-progress} clocks in a task.  To clock out,
4591 use @command{planner-task-done} or @command{timeclock-out}.
4593 @file{planner-timeclock.el} defines the following keybindings:
4595 @itemize
4596 @item @kbd{C-c C-i}: @code{planner-task-in-progress}.
4597 @item @kbd{C-c C-o}: @code{timeclock-out}.
4598 @item @kbd{C-c C-T C-i}: @code{planner-timeclock-in}. (XEmacs)
4599 @item @kbd{C-c C-T C-o}: @code{timeclock-out}. (XEmacs)
4600 @item @kbd{C-c C-S-t C-i}: @code{planner-timeclock-in}. (GNU Emacs)
4601 @item @kbd{C-c C-S-t C-o}: @code{timeclock-out}. (GNU Emacs)
4602 @end itemize
4604 If you use @code{timeclock} a lot, you may also be interested in
4605 Dryice Liu's @file{planner-timeclock-summary.el}, which produces
4606 timeclock reports for planner files.
4608 Here is a sample report:
4610 @example
4611 Project               |     Time| Ratio| Task
4612 PlannerMaintenance    |  0:03:58|  1.1%| Merge doc patch
4613                       |  0:17:09|  5.0%| Track down subdirectories
4614                       |  0:18:11|  5.3%| Merge planner-timeclock-summary-proj.el
4615                Total: |  0:39:18| 11.4%|
4616 JapanCaseStudy        |  2:37:56| 45.6%| Prototype search result page
4617                       |  0:31:50|  9.2%| Update design documents
4618                Total: |  3:09:46| 54.8%|
4619 ChristmasLetter       |  1:46:37| 30.8%| Write and send my Christmas letters
4620                Total: |  1:46:37| 30.8%|
4621 LinuxPeople           |  0:10:29|  3.0%| Send questions for Linux in Education
4622                Total: |  0:10:29|  3.0%|
4623 @end example
4625 If you add @code{(require 'planner-timeclock-summary)} to your
4626 @file{~/.emacs}, you can then use it in two ways.
4628 @itemize
4630 @item Display a temporary buffer
4632 Call @code{planner-timeclock-summary-show} and Emacs will ask you which
4633 day's summary do you want. Choose the date as anywhere else of
4634 Emacs planner, and a tempory buffer will be displayed with the
4635 timeclock summary of that day.
4637 To review tasks over a date range, use
4638 @code{planner-timeclock-summary-show-range}. You can use a regexp or a
4639 function to filter tasks by calling
4640 @code{planner-timeclock-summary-show-range-filter}.
4642 @item Rewrite sections of your planner
4644 Choose this approach if you want timeclock summary to be in their
4645 own section and you would like them to be readable in your plain
4646 text files even outside Emacs. Caveat: The timeclock summary
4647 section should already exist in your template and will be rewritten
4648 when updated. Tip: Add @code{planner-timeclock-summary-section}
4649 (default: @samp{"Timeclock"}) to your @code{planner-day-page-template}.
4651 To use, call @code{planner-timeclock-summary-update} in the planner
4652 day page to update the section. If you want rewriting to be
4653 automatically performed, call
4654 @code{planner-timeclock-summary-insinuate} in your @file{.emacs} file.
4655 @end itemize
4657 @file{planner-timeclock-summary-proj.el} produces task / time
4658 breakdowns on plan pages. Reports are of the form:
4660 @example
4661 TASK 0 | duration
4662 TASK 1 | duration
4663  TOTAL | duration.
4664 @end example
4666 To use, add @code{(require 'planner-timeclock-summary)} to your
4667 @file{~/.emacs}. Call @code{planner-timeclock-summary-proj-current}
4668 from a project page. The report is inserted at the current position in
4669 the buffer. The function @code{planner-timeclock-summary-proj-section}
4670 does the same but the report is inserted inside a section called
4671 @samp{* Report}.
4673 @node schedule.el,  , Timeclock, Scheduling and Time
4674 @comment  node-name,  next,  previous,  up
4675 @subsection @file{schedule.el}
4676 @cindex @file{planner-schedule.el}, using
4677 @cindex @file{schedule.el}, using Planner with
4679 @file{planner-schedule.el} allows you to project task completion time.
4680 Tasks should be of the form:
4682 @example
4683 #A0 _ 2h Do something
4684 #B0 _ 1h30m Do something
4685 #B0 _ 2d Do something
4686 #B0 _ 2w Do something
4687 #B0 _ 10s Do something
4689 s: seconds, m: minutes, h: hours, d: days, w: weeks
4690 @end example
4692 @file{schedule.el} is included with Planner in the @file{contrib}
4693 directory, but you can alternatively get it from
4694 @url{http://www.newartisans.com/johnw/Emacs/schedule.el} if desired.
4696 @file{schedule.el} provides a single Lisp function,
4697 @code{schedule-completion-time}. It takes an Emacs time object and a
4698 quantity of seconds. It returns an Emacs time object that represents
4699 when the given number of seconds will be completed, assuming that work
4700 can only be done during work hours.
4702 The available work hours are affected by several factors:
4704 @enumerate
4706 @item
4707 If @file{timeclock.el} is being used, the amount of time left in the
4708 current work day (@code{timeclock-workday-remaining})
4709 (@pxref{Time Intervals, , , Emacs, GNU Emacs Manual})
4711 @item
4712 The amount of time in each work day (@code{schedule-workday})
4714 @item
4715 The definition of a work week (@code{schedule-week})
4717 @item
4718 Any holidays defined in the Emacs calendar
4719 (@pxref{Holidays, , , Emacs, GNU Emacs Manual})
4721 @item
4722 Any appointments in the Emacs diary
4723 (@pxref{Appointments, , , Emacs, GNU Emacs Manual})
4725 @end enumerate
4727 Taking all of the ``block out'' periods into account,
4728 @code{schedule-completion-time} will compute when the given number of
4729 seconds will be done, based on your current definitions of time
4730 available.
4732 As an example, here's a function which, given a list of durations
4733 in seconds, will return a list of completion times starting from
4734 the current moment:
4736 @example
4738   (defun compute-completion-times (&rest durations)
4739     ``Compute completion times for a list of DURATIONS (in seconds).''
4740     (let ((now (current-time)))
4741       (mapcar
4742        (function
4743         (lambda (dura)
4744           (setq now (schedule-completion-time now dura))))
4745        durations)))
4747 @end example
4749 To call this function, do:
4751 @example
4753 (compute-completion-times 3600 7200 3600)
4755 @end example
4757 @subheading Keys
4759 @file{planner-schedule.el} defines the following keybindings:
4761 @kbd{C-c RET} is bound to @command{planner-schedule-show-end-project}.
4762 @kbd{C-c C-m} is also bound to
4763 @command{planner-schedule-show-end-project}.
4765 In XEmacs, @command{planner-schedule-show-end-project} is bound to
4766 @kbd{C-c C-T c-e} and @kbd{C-c C-S-t C-e}.
4768 @subheading Functions
4770 @file{planner-schedule.el} defines the following interactive
4771 functions:
4773 @defun planner-schedule-show-end-project
4774 Display the estimated project completion time.
4775 @end defun
4777 @file{schedule.el} does not define any interactive functions, or
4778 keybindings.
4780 @node Finances, Contacts and Conversations, Scheduling and Time, Managing Your Information
4781 @comment  node-name,  next,  previous,  up
4782 @section Finances
4783 @cindex finances
4785 Currently, Planner provides one module dedicated to tracking your
4786 finances. This module works with a program called Ledger.
4788 @menu
4789 * Ledger::                      Personal finances: planner-ledger.el
4790 @end menu
4792 @node Ledger,  , Finances, Finances
4793 @comment  node-name,  next,  previous,  up
4794 @subsection Ledger
4795 @cindex finances
4796 @cindex @file{planner-ledger.el}, using
4797 @cindex @file{ledger}, using Planner with
4799 @file{planner-ledger.el} provides integration between planner and John
4800 Wiegley's ledger accounting program, which can be found at
4801 @url{http://newartisans.com/johnw/ledger.tar.gz}.
4803 To use planner-ledger to insert a ledger balance overview and a list
4804 of pending transactions into planner day pages, make sure that your
4805 day page includes sections that match
4806 @code{planner-ledger-balance-regexp} and
4807 @code{planner-ledger-pending-regexp}. Example:
4809 @example
4810 * Tasks
4812 * Ledger
4814 ** Pending transactions
4816 * Notes
4818 @end example
4820 You can manually update ledger sections with the
4821 @command{planner-ledger-insert-maybe} command.
4823 You can also automatically update ledger sections with the following
4824 hook:
4826 @example
4827 (add-hook 'planner-goto-hook 'planner-ledger-insert-maybe)
4828 @end example
4830 You can create ledger entries from specially-formatted tasks using
4831 @command{planner-ledger-add-entry-from-task}.  Tasks should be of the
4832 form @samp{payment due: payee, amount [comment]}.  Example:
4834 @example
4835 #A1 _ payment due: foobar, $1000.00 some comment here
4836 #A2 _ payment due: baz, 1000.00
4837 @end example
4839 @subheading Options
4841 @defopt planner-ledger-balance-accounts
4842 List of accounts to be included or excluded from the balance overview.
4843 @samp{+} includes all matching accounts, and @samp{-} excludes
4844 matching accounts.  See the documentation for
4845 @command{ledger-run-ledger} for more details.
4846 @end defopt
4848 @defopt planner-ledger-balance-regexp
4849 Regular expression matching section for ledger balance.  Do not store
4850 other data in this section, as it will be overwritten.
4851 @end defopt
4853 @defopt planner-ledger-pending-regexp
4854 Regular expression matching section for ledger balance.  Do not store
4855 other data in this section, as it will be overwritten.
4856 @end defopt
4858 @defopt planner-ledger-payment-task-regexp
4859 Regular expression matching special ledger tasks.
4860 @end defopt
4862 @subheading Functions
4864 @defun planner-ledger-insert-maybe
4865 Update any ledger sections on the current page.
4866 @end defun
4868 @defun planner-ledger-add-entry-from-task
4869 Create a ledger entry based on the task at point.  Task should match
4870 @code{planner-ledger-payment-task-regexp}.
4871 @end defun
4873 @node Contacts and Conversations, Tracking Research and Resources, Finances, Managing Your Information
4874 @comment  node-name,  next,  previous,  up
4875 @section Contacts and Conversations
4876 @cindex contacts
4877 @cindex conversations
4879 Planner has two modules available for keeping track of contact and
4880 conversation information. The first uses the Big Brother Database
4881 (BBDB), and the second uses Emacs Relay Chat (ERC). BBDB is a full
4882 contact database. ERC is a client for chatting online on Internet Relay
4883 Chat (IRC) networks. The ERC module for Planner will help you keep
4884 track of online conversations you have if you use ERC for those
4885 conversations, but does not by itself store contact information other
4886 than the time you had the conversation, the network and channel you were
4887 on when you had it, and maybe who you had it with. If you are looking
4888 for a way to manage your full address book, then @file{planner-bbdb.el}
4889 in combination with BBDB is what you are looking for.
4891 @menu
4892 * BBDB::                        Contacts: planner-bbdb.el
4893 * Emacs Relay Chat::            Internet Relay Chat: planner-erc.el
4894 @end menu
4896 @node BBDB, Emacs Relay Chat, Contacts and Conversations, Contacts and Conversations
4897 @comment  node-name,  next,  previous,  up
4898 @subsection BBDB
4899 @cindex @file{planner-bbdb.el}, using
4900 @cindex BBDB, using Planner with
4902 @file{planner-bbdb.el} allows you to refer to your contacts easily
4903 from within a planner page. @inforef{Top, the BBDB Manual, bbdb}.
4905 @samp{[[bbdb://Sacha.*Chua][Sacha]]}, for example, will be linked to
4906 the blog, web or net fields of the first matching BBDB record.
4908 @file{planner-bbdb.el} does not define any interactive functions, or
4909 keybindings.
4911 @node Emacs Relay Chat,  , BBDB, Contacts and Conversations
4912 @comment  node-name,  next,  previous,  up
4913 @subsection Emacs Relay Chat
4914 @cindex @file{planner-erc.el}, using
4915 @cindex ERC, using Planner with
4916 @cindex Emacs Relay Chat, using Planner with
4917 @cindex IRC, using Planner with
4918 @cindex Internet Relay Chat, using Planner with
4920 To use planner-erc, place @file{planner-erc.el} in your load path
4921 and add this to your @file{.emacs} (or @file{_emacs}):
4923 @example
4925 (require 'planner-erc)
4927 @end example
4929 IRC URLs may be of the following forms.
4931 @example
4932 irc://server/nick,isnick
4933 irc://server/#channel
4934 irc://server
4935 @end example
4937 Annotations will be in the following forms.
4939 @example
4940 [[irc://server/nick,isnick][Chat with nick on server#channel]]
4941 [[irc://server/nick,isnick][Chat with nick on server]]
4942 [[irc://server/#channel][Chat on server#channel]]
4943 [[irc://server][Chat on server]]
4944 @end example
4946 @file{planner-erc.el} does not define any interactive functions, or
4947 keybindings.
4949 @node Tracking Research and Resources, Tracking Development, Contacts and Conversations, Managing Your Information
4950 @comment  node-name,  next,  previous,  up
4951 @section Tracking Research and Resources
4953 Planner provides three modules for keeping track of information
4954 involving three specific tools: w3m, BibTeX, and @file{bookmark.el}.
4956 @menu
4957 * W3m::                         Web browser: planner-w3m.el
4958 * BibTeX::                      Bibliographies: planner-bibtex.el
4959 * Bookmark::                    Bookmarks: planner-bookmark.el
4960 @end menu
4962 @node W3m, BibTeX, Tracking Research and Resources, Tracking Research and Resources
4963 @comment node-name,  next,  previous,  up
4964 @subsection W3m
4965 @cindex @file{planner-w3m.el}, using
4966 @cindex w3m, using Planner with
4968 This module allows you to create tasks from a w3m buffer.
4970 @file{planner-w3m.el} does not define any interactive functions, or
4971 keybindings.
4973 @node BibTeX, Bookmark, W3m, Tracking Research and Resources
4974 @comment node-name,  next,  previous,  up
4975 @subsection BibTeX
4976 @cindex @file{planner-bibtex.el}, using
4978 BibTeX URLs are of the form @samp{bibtex:file/name:key}.
4980 @file{planner-bibtex.el} does not define any interactive functions.
4982 @node Bookmark,  , BibTeX, Tracking Research and Resources
4983 @comment  node-name,  next,  previous,  up
4984 @subsection Bookmark
4985 @cindex bookmarks
4986 @cindex @file{bookmark.el}, using Planner with
4987 @cindex @file{planner-bookmark.el}, using
4989 @file{planner-bookmark.el} uses the @file{remember} package to create a
4990 note whenever you create a bookmark (see @inforef{Bookmarks, Bookmarks,
4991 Emacs}). For more information about @file{remember}, please check out
4993 @itemize
4994 @item
4995 @uref{http://www.emacswiki.org/cgi-bin/wiki/RememberMode} -
4996 EmacsWiki.org page
4997 @item
4998 @uref{http://sacha.free.net.ph/notebook/doc/dev/remember/remember.html}
4999 - Online info documentation
5000 @end itemize
5002 Configure remember according to the instructions in
5003 @file{remember-planner.el} so that notes are saved to your planner
5004 pages.
5006 @defopt planner-bookmark-take-note-after-set-bookmark-flag
5007 Non-nil means show a @code{remember} buffer after setting a new
5008 bookmark.
5009 @end defopt
5011 When you create a bookmark, Emacs will open a buffer for your notes.
5012 @kbd{C-c C-c} saves the buffer to today's page. If you don't want to
5013 save a note, you can kill the buffer.
5015 Bookmark URLs are of the form @samp{bookmark://bookmark-name}.
5017 @file{planner-bookmark.el} does not define any interactive functions.
5019 @node Tracking Development,  , Tracking Research and Resources, Managing Your Information
5020 @comment  node-name,  next,  previous,  up
5021 @section Tracking Development
5022 @cindex version control, using Planner with
5024 Planner has three modules geared toward programmers. Two modules deal
5025 with version control and integrating information from those projects
5026 into the planner page. One module deals with the Gnats bug-tracking
5027 system.
5029 @menu
5030 * Log Edit::                    Changelogs: planner-log-edit.el
5031 * XTLA::                        TLA changesets: planner-xtla.el
5032 * Gnats::                       Gnats: The GNU bug reporting system
5033 @end menu
5035 @node Log Edit, XTLA, Tracking Development, Tracking Development
5036 @comment  node-name,  next,  previous,  up
5037 @subsection Log Edit
5038 @cindex cvs, using Planner with
5039 @cindex @file{planner-log-edit}, using
5040 @cindex version control, using Planner with
5042 This module allows you to automatically record CVS (and VC) commits
5043 in today's page.
5045 You can load the module with @code{(require 'planner-log-edit)}. When
5046 you load the module, @code{planner-log-edit-add-note} will be added to
5047 @code{log-edit-done-hook}.  A note containing the text of the commit
5048 and optionally a list of modified files will be added to today's page
5049 if you use the the Emacs version control interface. (@pxref{Version
5050 Control, , , Emacs, GNU Emacs Manual})
5052 @subheading Options
5054 @defopt planner-log-edit-include-files-flag
5055 Non-nil means include a list of committed files in the note.
5056 @end defopt
5058 @defopt planner-log-edit-notice-commit-function
5059 Non-nil means include a list of committed files in the note. If you
5060 want to enable this feature for some projects but not for others, set
5061 this to a function that returns t only for the commits you want to
5062 note.
5063 @end defopt
5065 @file{planner-log-edit.el} does not define any interactive functions.
5067 @node XTLA, Gnats, Log Edit, Tracking Development
5068 @comment  node-name,  next,  previous,  up
5069 @subsection XTLA
5070 @cindex XTLA
5071 @cindex @file{planner-xtla.el}, using
5073 This module allows you to refer to changesets in Tom Lord's Arch (tla)
5074 version control system. You can load the module with @code{(require
5075 'planner-xtla)}. When you load the module, you can create tasks from
5076 XTLA windows by positioning point on a revision.
5078 XTLA URLs are of the form
5079 @samp{xtla://miles@@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-19}
5081 @file{planner-xtla.el} does not define any interactive functions.
5083 @node Gnats,  , XTLA, Tracking Development
5084 @comment  node-name,  next,  previous,  up
5085 @subsection Gnats
5087 @cindex Gnats
5088 @cindex @file{planner-gnats.el}, using
5089 @cindex bug reports, tracking
5091 @file{planner-gnats.el} provides support for the GNU problem report
5092 management system Gnats. This module allows you to refer to problem
5093 reports using hyperlinks.
5095 Configure your Emacs for Gnats access, then add @samp{(require
5096 'planner-gnats)} to your @file{.emacs}. You can then create tasks from
5097 Gnats edit or view buffers.
5099 To add keybindings to Gnats, use @samp{(planner-gnats-insinuate)}.
5101 Gnats URLs are of the form @samp{gnats:pr-number}.
5103 @file{planner-gnats.el} does not define any interactive functions.
5105 @node Advanced Configuration, Reference Material, Managing Your Information, Top
5106 @comment  node-name,  next,  previous,  up
5107 @chapter Advanced Configuration
5108 @cindex configuration, advanced
5110 @menu
5111 * Customizing Your Day Pages::  Change your templates
5112 * Variables to Customize::      Change various aspects of Planner behavior
5113 * Ideas for Other Keybindings::  Add to and change the default keybindings
5114 @end menu
5116 @node Customizing Your Day Pages, Variables to Customize, Advanced Configuration, Advanced Configuration
5117 @comment  node-name,  next,  previous,  up
5118 @section Customizing Your Day Pages
5120 With the variable @code{planner-day-page-template}, you can define how
5121 you want any newly created day planner pages to look.
5123 You might want to include a section for your diary entries. For how to
5124 do this, see @ref{Diary}.
5126 You can add interactive Lisp buttons with the @file{planner-lisp.el}
5127 module. (@pxref{Interactive Lisp})
5129 Your @code{planner-day-page-template} can also include @samp{|<lisp>|}
5130 tags.
5132 For more complex day pages, you can set
5133 @code{planner-day-page-template} to a function that will be called
5134 from an empty day page buffer. The function should initialize the
5135 contents of the day page.
5137 @node Variables to Customize, Ideas for Other Keybindings, Customizing Your Day Pages, Advanced Configuration
5138 @comment  node-name,  next,  previous,  up
5139 @section Variables to Customize
5140 @cindex customize, variables to
5141 @cindex variables, customization of
5142 @cindex configuration, advanced, variables
5144 If you want to change @code{planner-directory} and some other
5145 variables, either use Customize (@kbd{M-x customize-group RET planner
5146 RET}) or use @code{setq}.  An example of the latter follows.
5148 @example
5149 (setq planner-directory "~/Plans")
5150 @end example
5152 Other user options are:
5154 @vindex planner-use-day-pages
5155 @defopt planner-use-day-pages
5156 If you really don't like day pages, you can set this variable to nil
5157 and you won't be prompted for dates for tasks (and notes, if using
5158 @file{remember-planner}).
5159 @end defopt
5161 @vindex planner-use-plan-pages
5162 @defopt planner-use-plan-pages
5163 If you really don't like plan pages, you can set this variable to nil
5164 and you won't be prompted for plan pages for tasks (and notes, if
5165 using @file{remember-planner}).
5166 @end defopt
5168 @vindex planner-mode-hook
5169 @defopt planner-mode-hook
5170 List of functions to run after @code{planner-mode} is initialized.
5171 @end defopt
5173 @vindex planner-tasks-file-behavior
5174 @defopt planner-tasks-file-behavior
5175 This variable controls what happens to files Planner opens by itself.
5176 If your tasks are associated with plan pages, the plan pages are
5177 updated whenever a task is rescheduled.  This could lead to a lot of
5178 open buffers as Planner applies updates to all linked files.
5179 By default, Planner is configured to do nothing.
5180 A value of @samp{save} means save but do not close buffers, and a
5181 value of @samp{nil} means do not save any of the buffers.
5182 @end defopt
5184 @vindex planner-add-task-at-end-flag
5185 @defopt planner-add-task-at-end-flag
5186 This variable controls where new tasks are created.  Non-nil means
5187 create tasks at the bottom of the first task block.  If you set this
5188 to non-nil, new tasks will be listed in order of creation (oldest).
5189 Tasks carried over from previous days will appear at the bottom of the
5190 list.
5192 Nil means create tasks at the top of the first task block.
5193 Carried-over tasks and newly created tasks are prominently placed on
5194 top of the list of tasks for the day.
5195 @end defopt
5197 @vindex planner-default-page
5198 @defopt planner-default-page
5199 Default page for created tasks.  This is used as the initial value for
5200 tasks.  After you create a task, it will be set to the previous page
5201 used.
5202 @end defopt
5204 @vindex planner-hide-task-status-when-highlighting
5205 @defopt planner-hide-task-status-when-highlighting
5206 Font-locking for tasks may be enough for you to determine status and
5207 priority.  Set this to non-nil if you want to hide the status marker
5208 and rely on font-locking instead.
5209 @end defopt
5211 @vindex planner-create-task-hook
5212 @defopt planner-create-task-hook
5213 Functions run after creating a task. @code{planner-id} hooks into
5214 this.
5215 @end defopt
5217 @vindex planner-expand-name-favor-future-p
5218 @defopt planner-expand-name-favor-future-p
5219 If non-nil, partial dates (ex: @kbd{2} or @kbd{5.2}) are completed to
5220 dates in the future instead of using the current year and month.
5221 @end defopt
5223 @vindex planner-task-dates-favor-future-p
5224 @defopt planner-task-dates-favor-future-p
5225 Like @code{planner-expand-name-favor-future-p}, but only for tasks.
5226 @end defopt
5228 @vindex planner-publish-dates-first-p
5229 @defopt planner-publish-dates-first-p
5230 Non-nil means list day pages first in the planner index.
5231 @end defopt
5233 @node Ideas for Other Keybindings,  , Variables to Customize, Advanced Configuration
5234 @comment  node-name,  next,  previous,  up
5235 @section Ideas for Other Keybindings
5236 @cindex keybindings, customization of
5237 @cindex configuration, advanced, keybindings
5238 @cindex customize, keybindings to
5240 By default and for backward compatibility, the following operations
5241 do not have keybindings, and are only accessible from the Planner
5242 menu:
5244 @itemize @bullet
5246 @item
5247 @code{planner-copy-or-move-region}
5249 @item
5250 @code{planner-delete-task}
5252 @item
5253 @code{planner-task-delegated}
5255 @item
5256 @code{planner-task-pending}
5258 @item
5259 @code{planner-task-open}
5261 @item
5262 @code{planner-renumber-tasks}
5264 @end itemize
5266 You may find it easier to install keybindings for those operations by
5267 inserting the following in your @file{.emacs} (or @file{_emacs}).
5268 Note: This changes some of the default keybindings for Planner.
5270 @example
5271 (planner-install-extra-task-keybindings)
5272 @end example
5274 If you install the extra task keybindings, your keybindings will
5275 include:
5277 @itemize @bullet
5279 @item
5280 @kbd{C-c C-t} will be unbound from the default and will serve as the
5281 prefix for the other task keybindings.
5283 @item
5284 @kbd{C-c C-t C-t}: @code{planner-create-task-from-buffer}.
5286 @item
5287 @kbd{C-c C-t C-k}: @code{planner-delete-task}.
5289 @item
5290 @kbd{C-c C-t C-u}: @code{planner-update-task}.
5292 @item
5293 @kbd{C-c C-t C-c}: @code{planner-copy-or-move-task}.
5295 @item
5296 @kbd{C-c C-t C-S-c}: @code{planner-copy-or-move-region}.
5298 @item
5299 @kbd{C-c C-t C-x}: @code{planner-task-done}.
5301 @item
5302 @kbd{C-c C-t C-S-x}: @code{planner-task-cancelled}.
5304 @item
5305 @kbd{C-c C-t C-d}: @code{planner-task-delegated}.
5307 @item
5308 @kbd{C-c C-t C-p}: @code{planner-task-pending}.
5310 @item
5311 @kbd{C-c C-t C-o}: @code{planner-task-in-progress}.
5313 @item
5314 @kbd{C-c C-t C-r}: @code{planner-raise-task}.
5316 @item
5317 @kbd{C-c C-t C-l}: @code{planner-lower-task}.
5319 @item
5320 @kbd{C-c C-t C-n}: @code{planner-renumber-tasks}.
5322 @end itemize
5324 Other keybindings can be configured by adding this to your
5325 @file{.emacs} (or @file{_emacs}):
5327 @example
5328 (planner-install-extra-context-keybindings)
5329 @end example
5331 This will set up the following keybindings:
5333 @itemize @bullet
5335 @item
5336 @kbd{shift up} @code{planner-move-up}
5338 @item
5339 @kbd{shift down} @code{planner-move-down}
5341 @item
5342 @kbd{shift right} @code{planner-jump-to-link}
5344 @end itemize
5346 @node Reference Material, Getting Help, Advanced Configuration, Top
5347 @comment  node-name,  next,  previous,  up
5348 @chapter Reference Material
5350 @menu
5351 * Keeping Track of Time::       
5352 * Other Interactive Functions::  
5353 * Planner Keybindings::         Default keybindings for Planner
5354 * Sample Configuration Files::  
5355 @end menu
5357 @node Keeping Track of Time, Other Interactive Functions, Reference Material, Reference Material
5358 @section Keeping Track of Time
5360 One of the coolest things you can do with Planner is keep track of how
5361 much time you spend not only on projects but even on particular tasks.
5362 @file{planner-timeclock.el} makes it as easy and natural as marking a
5363 task as in progress, postponed, or done. This can help you determine
5364 just how much time you spend working each day. If you add estimates to
5365 your task descriptions, you'll also be able to use this information to
5366 improve your time estimation skills.
5368 Here's how you can keep track of the time you
5371 Then the fun began. I wanted to see if I could match my estimates.
5372 Before I started working on a task, I used @kbd{C-c TAB} to mark it
5373 @code{in progress} and start the clock. If I decided to work on
5374 something else, I used @kbd{C-c TAB} to clock out of the previous task
5375 and clock into the new one.
5377 When I finished it, I used @kbd{C-c C-x} (@code{planner-task-done}) to
5378 mark it completed and automatically clock out. This is not yet done
5379 for cancelled tasks, so I clocked out of those manually with @kbd{C-c
5380 C-o} (@code{timeclock-out}). I also clocked out whenever I caught
5381 myself being distracted so that the totals wouldn't include the time I
5382 spent chatting on #emacs or checking out del.icio.us links. =) At the
5383 end of the day, I used
5384 @code{planner-timeclock-summary-show-range-filter} to show me the time
5385 elapsed for all of the tasks I'd worked on over the past two days.
5386 Here's the report for that project, edited to reflect how it looks on
5387 my screen and annotated with comments:
5389 @example
5390 Timeclock summary report for 2004.12.28 - 2004.12.29
5392 Project     |     Time| Ratio| Task
5393 JapanProject|  0:23:17|  3.6%| Translate javadoc comment for Messages.java
5394             |  0:33:48|  5.3%| Translate javadoc comment for LoginAction.java
5395             |  1:54:07| 17.8%| Study Struts in Japanese
5396             |  0:46:08|  7.2%| Add javadoc tags for input, output and forwards
5397             |  1:03:48|  9.9%| Help review code
5398             |  0:04:14|  0.7%| Import todo list
5399             |  0:00:37|  0.1%| 2min       Fix Menu Action's unnecessary code - delegated
5400             |  0:01:01|  0.2%| 2min       Remove unnecessary list in UserRemoveSetupAction - cancelled
5401             |  0:02:10|  0.3%| 2min       Remove hard-coded database path from MenuAction
5402             |  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. ...
5403             |  0:07:32|  1.2%| 5min       Add a method that returns the validity of a user in MUserPeer.
5404             |  0:08:28|  1.3%| 5min       Fix indentation
5405             |  0:03:52|  0.6%| 10min      Fix UserPeer so that it doesn't get null pointer exceptions
5406             |  0:04:34|  0.7%| 5min       Add current password field in user_modify page
5407             |  0:21:56|  3.4%| 15min      Make a super class for our service classes that will receive the database connection. (cancelled)
5408             |  0:06:05|  0.9%| 10min      Remove hard-coded constants from the Logic classes
5409             |  0:10:55|  1.7%| 10min      Move logic from UserBean.checkPassword to UserListLogic
5410             |  0:01:20|  0.2%| 20min      Guard against null pointer exceptions in peer classes
5411             |  0:04:57|  0.8%| 10min      Instead of displaying uneditable data with bean:write, just disable the html:text element
5412             |  0:25:03|  3.9%| 10min      Deploy 10:00 version
5413             |  0:04:46|  0.7%| 5min       Separate the configuration file of database and system into another uninternationalized property file.
5414             |  2:09:48| 20.2%| 1h         Decide on a naming convention for localized messages and update files
5415             |  0:00:07|  0.0%| 20min      Explain what is happening in UserModifyAction's nested ifs - pending
5416             |  1:50:23| 17.2%| 2h         Write Javadoc comments in English and Japanese to explain bean structure
5417             |  0:04:19|  0.7%| 2h         Write Javadoc comments in English and Japanese to explain peer operations (pending)
5418             |  0:05:40|  0.9%| 20min      Make a factory class for the database - pending
5419      Total: | 10:41:41|100.0%|      
5421 Day began: 13:03:58, Day ended: 20:51:46
5422 Time elapsed: 31:47:48, Time clocked: 10:41:41
5423 Time clocked ratio: 33.6%
5424 @end example
5426 The time record isn't perfect. I cancelled some tasks after thinking
5427 about them a little and did some tasks simultaneously. Sometimes I
5428 didn't notice that I was getting distracted, too. Still, having all of
5429 that time information neatly summarized made me realize a number of
5430 things.
5432 First, I goof off much less when I have a nice, broken-down task list
5433 in front of me. There's just something about knowing there's a five-
5434 or ten-minute hack you can get out of the way. I found myself looking
5435 forward to getting to the next task just to see if I could make my
5436 estimate. That said, seeing a five-minute task stretch and stretch due
5437 to unforeseen problems did make me a little nervous. I should probably
5438 just make generous estimates so that I don't end up with bugs because
5439 of haste.
5441 Second, I don't goof off as much as I thought I did, although there's
5442 still room for improvement. Yesterday's workday was 9:00 - 12:00, 1:00
5443 - 5:30--7.5 hours. Today was the last day of work, so cleaning and
5444 celebration interrupted my hacking at around 3:00--5 hours of work.
5445 According to my task list, 10:41/12:30 was productive work. Hmm. 1:49
5446 hours unclocked time when I was thinking or goofing off.
5447 planner-timeclock-summary-show for today reveals that I actually
5448 clocked 5:30 today, which means the goofing off happened yesterday.
5449 That makes sense; I remember a pretty long unclocked segment
5450 recuperating from Japanese overload. (This was before we came up with
5451 the task list.)
5453 Third, keeping track of time is way, way cool even if you don't bill
5454 anyone for your time.
5456 Like the idea? It's easy to try out. Just add
5458 @example
5459 (require 'planner-timeclock)
5460 (require 'planner-timeclock-summary)
5461 @end example
5463 to your ~/.emacs. If you want to try it out now, eval those statements
5464 in your Emacs session. After that, simply use @kbd{C-c TAB} to ``clock
5465 in'' a task before you start working on it and @kbd{C-c C-x}
5466 (@code{planner-task-done}) to mark it completed. @kbd{M-x
5467 planner-task-pending} also clocks out the current task if it was
5468 clocked in. To see a summary of how you spent your day, check out the
5469 different functions in @file{planner-timeclock-summary}.
5471 See @ref{Timeclock} for more details.
5473 Happy hacking!
5475 @node Other Interactive Functions, Planner Keybindings, Keeping Track of Time, Reference Material
5476 @comment  node-name,  next,  previous,  up
5477 @section Other Interactive Functions
5479 With @file{planner.el} loaded, you can use any of the functions in this
5480 section by typing @kbd{M-x} followed by the name of the function. Many
5481 of these functions are also bound to keys.
5483 For a list of Planner keybindings, see @ref{Planner Keybindings}.
5485 They are listed in no particular order.
5487 @file{planner.el} defines the following interactive functions:
5490 @defun planner-create-high-priority-task-from-buffer
5491 Create a high priority task based on this buffer.  Do not use this in
5492 LISP programs. Instead, set the value of
5493 @var{planner-default-task-priority} and call @code{planner-create-task}
5494 or @code{planner-create-task-from-buffer}.
5495 @end defun
5497 @defun defun planner-create-medium-priority-task-from-buffer
5498 Create a medium-priority task based on this buffer.  Do not use this in
5499 LISP programs. Instead, set the value of
5500 @var{planner-default-task-priority} and call @code{planner-create-task}
5501 or @code{planner-create-task-from-buffer}.
5502 @end defun
5504 @defun planner-create-low-priority-task-from-buffer
5505 Create a high-priority task based on this buffer.
5506 Do not use this in LISP programs. Instead, set the value of
5507 @var{planner-default-task-priority} and call @code{planner-create-task} or
5508 @code{planner-create-task-from-buffer}.
5509 @end defun
5511 @defun planner-install-extra-context-keybindings
5512 Install extra context-sensitive keybindings. These keybindings
5513 conflict with @file{windmove.el}, but might be useful.
5514 @end defun
5516 @defun planner-narrow-to-section section &optional create
5517 Widen to the whole page and narrow to the section labelled
5518 @var{section}.  If @var{create} is non-nil and the section is not found,
5519 the section is created.  Return non-nil if @var{section} was found or
5520 created.
5521 @end defun
5523 @defun planner-save-buffers
5524 Save all planner-mode buffers.
5525 @end defun
5527 @defun planner-seek-to-first section
5528 Positions the point at the specified @var{section}, or @samp{Tasks} if
5529 not specified.
5530 @end defun
5532 @defun planner-save-buffers
5533 Save all planner buffers.
5534 @end defun
5536 @defun planner-calendar-insinuate
5537 This hooks Planner into  Emacs Calendar (@pxref{Calendar/Diary, ,
5538 , Emacs, GNU Emacs Manual}).
5540 It adds special planner key bindings to @code{calendar-mode-map}.
5541 After this function is evaluated, you can use the following
5542 planner-related keybindings in @code{calendar-mode-map}:
5544 @table @kbd
5546 @item  n
5547 Jump to the planner page for the current day.
5549 @item  N
5550 Display the planner page for the current day.
5551 @end table
5553 @end defun
5555 @defun planner-kill-calendar-files
5556 Remove planner files shown from Calendar (@pxref{Calendar/Diary, , ,
5557 Emacs, GNU Emacs Manual}).
5559 @end defun
5561 @defun planner-calendar-goto
5562 Goto the plan page corresponding to the calendar date
5563 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
5564 @end defun
5566 @defun planner-calendar-show
5567 Show the plan page for the calendar date under point in another window
5568 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
5569 @end defun
5571 @defun planner-calendar-select
5572 Return to @code{planner-read-date} with the date currently selected
5573 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
5574 @end defun
5576 @defun planner-jump-to-link
5577 Jump to the item linked to by the current item.
5578 @end defun
5580 @defun planner-move-up
5581 Move a task up. You can use this to indicate that you will do a task
5582 before another one. On a note, go to the previous note. On a headline,
5583 go to the previous headline of the same depth.
5584 @end defun
5586 @defun planner-move-down 
5587 Move down. You can use this to indicate that you will do a task after
5588 another one. On a note, go to the next note. On a headline, go to the
5589 next headline of the same depth.
5590 @end defun
5592 @node Planner Keybindings, Sample Configuration Files, Other Interactive Functions, Reference Material
5593 @comment  node-name,  next,  previous,  up
5594 @section Planner Keybindings
5595 @cindex keybindings, list
5597 In order to refresh and renumber all of your tasks according to their
5598 actual order in the buffer, simply save the file or call
5599 @kbd{M-x planner-renumber-tasks}.
5601 Here is a summary of the keystrokes available:
5603 @table @kbd
5605 @item M-x plan
5606 Begin your planning session.  This goes to the last day for which
5607 there is any planning info (or today if none), allowing you to review,
5608 and create/move tasks from that day.
5610 @item C-c C-u
5611 Move a task up.
5613 @item C-c C-d
5614 Move a task down.
5616 @item C-c C-s
5617 Mark the task as in progress or delegated.
5619 @item C-c C-x
5620 Mark the task as finished.
5622 @item C-c C-t
5623 Create a task associated with the current Wiki page. If you are on the
5624 opening line of a Note entry, it is assumed that the note itself is the
5625 origin of the task.
5627 @item C-c C-c
5628 Move or copy the current task to another date. If the current task is
5629 an original (meaning you are in the buffer where's defined, hopefully
5630 a planning page) then it will be copied, and the original task will
5631 also now point to the copy.  If the current task is a copy, it will
5632 just be moved to the new day, and the original task's link will be
5633 updated.
5635 @item C-c C-n
5636 Jump to today's task page.  If you call
5637 @code{(planner-calendar-insinuate)}, typing @kbd{n} in the Emacs
5638 calendar (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}) will jump
5639 to today's task page.
5641 @item C-c C-x
5642 @code{planner-task-done}
5644 @item C-c C-z
5645 @code{planner-task-in-progress}
5647 @item C-c C-d
5648 @code{planner-lower-task}
5650 @item C-c C-u
5651 @code{planner-raise-task}
5653 @item C-c C-c
5654 @code{planner-copy-or-move-task}
5656 @item C-c C-t
5657 @code{planner-create-task-from-buffer}
5659 @item C-c C-j
5660 This is a prefix command.
5662 @item C-c C-n
5663 @code{planner-goto-today}
5665 @item C-c C-j C-r
5666 @code{planner-goto-most-recent}
5668 @item C-c C-j C-t
5669 @code{planner-goto-tomorrow}
5671 @item C-c C-j C-y
5672 @code{planner-goto-yesterday}
5674 @item C-c C-j C-j
5675 @code{planner-goto-today}
5677 @item C-c C-j C-n
5678 @code{planner-goto-next-daily-page}
5680 @item C-c C-j C-p
5681 @code{planner-goto-previous-daily-page}
5683 @item C-c C-j C-d
5684 @code{planner-goto}
5686 @end table
5688 @node Sample Configuration Files,  , Planner Keybindings, Reference Material
5689 @comment  node-name,  next,  previous,  up
5690 @section Sample Configuration Files
5691 @cindex configuration, sample
5693 This section includes some sample configuration files. This way, once
5694 you've got the hang of the basics, you can see some different, more
5695 advanced, setups.
5697 There is no One True Way to plan. Every person is different. We hope
5698 you'll find a good starting point among the example configurations
5699 below. If what you want to do does not perfectly fit under one of these
5700 examples, please post a description of the way you plan to our mailing
5701 list (@pxref{Getting Help}).  We look forward to helping you customizing
5702 planner to fit your needs.
5704 @menu
5705 * File Organization::           
5706 * Bare-Bones Planning::         
5707 * Bare-Bones Planning with Plan Pages::  
5708 * Tasks on Plan Pages with Some Day Pages::  
5709 * Hierarchical Tasks::          
5710 @end menu
5712 @node File Organization, Bare-Bones Planning, Sample Configuration Files, Sample Configuration Files
5713 @subsection File Organization
5715 @itemize
5716 @item @strong{Tasks, schedule and notes on day pages.}
5718 By default, tasks, schedule entries and notes are filed on day pages.
5719 This makes it easy for you to see all the entries relevant to a single
5720 day without becoming overwhelmed with information. Unfinished tasks
5721 are carried over to the next day when you use @kbd{M-x plan}, so it's
5722 always kept up to date. Completed tasks are left on the day page you
5723 finished them on, which helps when reviewing one's progress and writing
5724 accomplishment reports.
5726 @item @strong{Cross-referenced with plan pages.}
5728 You can associate your tasks with projects either when you create the
5729 task or later, with @kbd{M-x planner-replan-task}. This makes it easy
5730 for you to see all the information associated with a particular
5731 project. If you use RememberMode to create notes, you will also be
5732 able to associate notes with a plan page.
5734 @item @strong{Just plan pages.}
5736 If your tasks don't usually have dates, you can turn day pages off by
5737 customizing @code{planner-use-day-pages}. If so, then all of your
5738 tasks and notes will be stored on the WelcomePage and/or a plan page.
5740 @end itemize
5742 @node Bare-Bones Planning, Bare-Bones Planning with Plan Pages, File Organization, Sample Configuration Files
5743 @subsection Bare-Bones Planning
5745 You can keep all of your tasks, notes and schedules in a single file:
5746 WelcomePage.  This is good for people who are used to storing all of
5747 their information in a flat text file.  By storing your information in
5748 planner, you'll be able to take advantage of automatic hyperlinking to
5749 files and other resources.  You can also sort your tasks by priority
5750 and status.
5752 To set your system up for bare-bones planning, set the
5753 @code{planner-use-day-pages} variable to nil before loading planner.
5754 For example, you can put this in your @file{~/.emacs} (or @file{_emacs}):
5756 @example
5757 (setq planner-use-day-pages nil)
5758 (setq planner-default-page nil)
5759 (require 'planner)
5760 @end example
5762 When you create a task or note, planner will not prompt you for a
5763 date.  If you press @key{RET} when prompted for a plan page, it will
5764 accept the default of nil, so no other plan pages will be used.  All
5765 of your data will be kept in one file, which can then be easily backed
5768 You can use commands like @command{planner-create-task-from-buffer} to
5769 create tasks, or you can type tasks in manually.  You can edit or
5770 delete anything in the page without having to update other files.
5772 @node Bare-Bones Planning with Plan Pages, Tasks on Plan Pages with Some Day Pages, Bare-Bones Planning, Sample Configuration Files
5773 @subsection Bare-Bones Planning with Plan Pages
5775 When you create a task or note, Planner.el can copy this to a plan
5776 page. Plan pages allow you to see an overview of all the data for a
5777 project.
5779 For convenience, the @command{planner-create-task-from-buffer} command
5780 prompts you for a plan page when you create a task.
5784 @node Tasks on Plan Pages with Some Day Pages, Hierarchical Tasks, Bare-Bones Planning with Plan Pages, Sample Configuration Files
5785 @subsection Tasks on Plan Pages with Some Day Pages
5787 If most of your tasks are associated with plan pages but you want to
5788 schedule some tasks on day pages, you can leave day pages on (default)
5789 and then write a function that turns off day pages. For example, the
5790 following code snippet turns off day pages for task creation from
5791 buffers.
5793 @example
5794 (require 'planner)
5796 (defun my-planner-create-task-from-buffer ()
5797   "Call `planner-create-task-from-buffer', but without dates."
5798   (interactive)
5799   (let ((planner-use-day-pages nil))
5800     (call-interactively 'planner-create-task-from-buffer)))
5801 @end example
5803 @node Hierarchical Tasks,  , Tasks on Plan Pages with Some Day Pages, Sample Configuration Files
5804 @subsection Hierarchical Tasks
5805 @cindex hierarchical tasks
5806 @cindex tasks, hierarchy of
5808 You can use @file{allout.el} or other modes for outlining to support
5809 hierarchical tasks in plan pages. No special support is needed.
5811 Tasks created by @command{planner-create-task-from-buffer} and
5812 @code{planner-create-task} are created in the @samp{* Tasks} section.
5813 If @code{planner-add-task-at-end-flag} is non-nil, tasks are added to
5814 the end of the first task block, else they are added to the beginning.
5815 You can then copy and paste tasks into your preferred hierarchy.
5816 Blank lines delimit blocks of tasks upon which automatic sorting is
5817 performed.
5819 You can also type in tasks manually. You may find this approach faster
5820 when you are comfortable with planner.
5822 For example, a @file{LearnPlanner} plan page might contain the
5823 following lines:
5825 @example
5826 * Learn how to use planner.el
5828 ** Installation
5830 #C0 _ Decide where to put Planner
5831 #C0 _ Download the archives
5833 ** Configuration
5835 *** Load path
5837 #C0 _ Figure out how to add things to my load path
5838 #C0 _ Actually add it to my load path
5841 @end example
5843 If you create tasks for the finest level of detail available at the
5844 moment, you can schedule them onto day pages with @kbd{C-c C-c}
5845 (@command{planner-copy-or-move-task}). Then you can use
5846 @command{planner-jump-to-link} to switch between the day page and the
5847 plan page link.
5850 @node Getting Help, Acknowledgements, Reference Material, Top
5851 @comment  node-name,  next,  previous,  up
5852 @chapter Getting Help
5853 @cindex help, getting
5854 @cindex bugs, reporting
5856 After you have read this guide, if you still have questions about
5857 Planner, or if you have bugs to report, there are several places
5858 you can go.
5860 Planner has an official website at @url{http://www.plannerlove.com/}.
5861 It is a collaborative wiki.
5863 Bugs may be reported using the Planner Bug-Tracker at
5864 @url{http://gna.org/bugs/?group=planner-el}.
5866 Planner has three mailing lists.
5868 @table @samp
5870 @item planner-el-announce
5871 Low-traffic list for planner-related announcements.
5873 You can join this mailing list (@email{planner-el-announce@@gna.org})
5874 using the subscription form at
5875 @url{http://mail.gna.org/listinfo/planner-el-announce/}.  This
5876 mailing list is also available via Gmane (@url{http://gmane.org/}). The
5877 group is called @samp{gmane.emacs.planner.announce}.
5879 @item planner-el-discuss
5880 Discussion, bugfixes, suggestions, tips, and the like for Planner.
5881 This mailing list also includes the content of planner-el-announce.
5883 You can join this mailing list (@email{planner-el-discuss@@gna.org})
5884 using the subscription form at
5885 @url{http://mail.gna.org/listinfo/planner-el-discuss/}.  This mailing
5886 list is also available via Gmane with the identifier
5887 @samp{gmane.emacs.planner.general}.
5889 @item planner-el-cvs
5890 Log messages for changes committed to Planner.
5892 You can join this mailing list (@email{planner-el-cvs@@gna.org}) using
5893 the subscription form at
5894 @url{http://mail.gna.org/listinfo/planner-el-cvs/}.  This mailing list
5895 is also available via Gmane with the identifier
5896 @samp{gmane.emacs.planner.cvs}.
5898 @end table
5900 You can also contact the maintainer of Planner, Michael Olson, at
5901 @email{mwolson@@gnu.org}, but it is better to use the other options.
5903 You can explore the relevant sections of the EmacsWiki.org:
5905 @itemize @bullet
5907 @item
5908 @url{http://www.emacswiki.org/cgi-bin/wiki/PlannerMode}
5910 @item
5911 @url{http://www.emacswiki.org/cgi-bin/wiki/MuseMode}
5913 @item
5914 @url{http://www.emacswiki.org/cgi-bin/wiki/RememberMode}
5916 @end itemize
5918 You can visit the IRC Freenode channel @samp{#emacs}. Many of the
5919 contributors are frequently around and willing to answer your
5920 questions.
5922 There is an Orkut community called PlannerMode.
5924 For issues relating to this documentation, please contact John
5925 Sullivan at @email{johnsu01@@yahoo.com}.
5927 @node Acknowledgements, GNU General Public License, Getting Help, Top
5928 @comment  node-name,  next,  previous,  up
5929 @chapter Acknowledgements
5930 @itemize
5931 @item Maintainers
5933 @cindex maintainers
5935 @itemize
5936 @item 2005
5938 Michael Olson, Sacha Chua, and several others from the Planner community
5939 ported Planner to use Muse instead of emacs-wiki.  Michael Olson became
5940 the maintainer of Planner.
5942 @item 2004
5944 Damien Elmes handed EmacsWikiMode to Mark Triggs for a short period of
5945 time.  Mark Triggs deferred to Sacha Chua as official maintainer of
5946 Planner.  Sacha Chua volunteered to maintain RememberMode.
5947 Michael Olson became the maintainer of both emacs-wiki and Muse.
5949 @item 2003
5951 Sacha Chua volunteered to maintain Planner.  Damien Elmes
5952 volunteered to maintain EmacsWikiMode.
5954 @item 2001
5956 John Wiegley wrote EmacsWikiMode and Planner.
5957 @end itemize
5959 @item Contributors
5960 @cindex contributors
5962 For a complete list of people who have helped out with Planner, please
5963 check out the @file{AUTHORS} file that is included with Planner.
5965 @end itemize
5967 @node GNU General Public License, Concept Index, Acknowledgements, Top
5968 @comment  node-name,  next,  previous,  up
5969 @appendix GNU GENERAL PUBLIC LICENSE
5970 @center Version 2, June 1991
5971 @cindex GPL
5972 @cindex GNU General Public License
5974 @c This file is intended to be included in another file.
5976 @display
5977 Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
5978 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
5980 Everyone is permitted to copy and distribute verbatim copies
5981 of this license document, but changing it is not allowed.
5982 @end display
5984 @appendixsec Preamble
5986   The licenses for most software are designed to take away your
5987 freedom to share and change it.  By contrast, the GNU General Public
5988 License is intended to guarantee your freedom to share and change free
5989 software---to make sure the software is free for all its users.  This
5990 General Public License applies to most of the Free Software
5991 Foundation's software and to any other program whose authors commit to
5992 using it.  (Some other Free Software Foundation software is covered by
5993 the GNU Library General Public License instead.)  You can apply it to
5994 your programs, too.
5996   When we speak of free software, we are referring to freedom, not
5997 price.  Our General Public Licenses are designed to make sure that you
5998 have the freedom to distribute copies of free software (and charge for
5999 this service if you wish), that you receive source code or can get it
6000 if you want it, that you can change the software or use pieces of it
6001 in new free programs; and that you know you can do these things.
6003   To protect your rights, we need to make restrictions that forbid
6004 anyone to deny you these rights or to ask you to surrender the rights.
6005 These restrictions translate to certain responsibilities for you if you
6006 distribute copies of the software, or if you modify it.
6008   For example, if you distribute copies of such a program, whether
6009 gratis or for a fee, you must give the recipients all the rights that
6010 you have.  You must make sure that they, too, receive or can get the
6011 source code.  And you must show them these terms so they know their
6012 rights.
6014   We protect your rights with two steps: (1) copyright the software, and
6015 (2) offer you this license which gives you legal permission to copy,
6016 distribute and/or modify the software.
6018   Also, for each author's protection and ours, we want to make certain
6019 that everyone understands that there is no warranty for this free
6020 software.  If the software is modified by someone else and passed on, we
6021 want its recipients to know that what they have is not the original, so
6022 that any problems introduced by others will not reflect on the original
6023 authors' reputations.
6025   Finally, any free program is threatened constantly by software
6026 patents.  We wish to avoid the danger that redistributors of a free
6027 program will individually obtain patent licenses, in effect making the
6028 program proprietary.  To prevent this, we have made it clear that any
6029 patent must be licensed for everyone's free use or not licensed at all.
6031   The precise terms and conditions for copying, distribution and
6032 modification follow.
6034 @iftex
6035 @appendixsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
6036 @end iftex
6037 @ifinfo
6038 @center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
6039 @end ifinfo
6041 @enumerate 0
6042 @item
6043 This License applies to any program or other work which contains
6044 a notice placed by the copyright holder saying it may be distributed
6045 under the terms of this General Public License.  The ``Program'', below,
6046 refers to any such program or work, and a ``work based on the Program''
6047 means either the Program or any derivative work under copyright law:
6048 that is to say, a work containing the Program or a portion of it,
6049 either verbatim or with modifications and/or translated into another
6050 language.  (Hereinafter, translation is included without limitation in
6051 the term ``modification''.)  Each licensee is addressed as ``you''.
6053 Activities other than copying, distribution and modification are not
6054 covered by this License; they are outside its scope.  The act of
6055 running the Program is not restricted, and the output from the Program
6056 is covered only if its contents constitute a work based on the
6057 Program (independent of having been made by running the Program).
6058 Whether that is true depends on what the Program does.
6060 @item
6061 You may copy and distribute verbatim copies of the Program's
6062 source code as you receive it, in any medium, provided that you
6063 conspicuously and appropriately publish on each copy an appropriate
6064 copyright notice and disclaimer of warranty; keep intact all the
6065 notices that refer to this License and to the absence of any warranty;
6066 and give any other recipients of the Program a copy of this License
6067 along with the Program.
6069 You may charge a fee for the physical act of transferring a copy, and
6070 you may at your option offer warranty protection in exchange for a fee.
6072 @item
6073 You may modify your copy or copies of the Program or any portion
6074 of it, thus forming a work based on the Program, and copy and
6075 distribute such modifications or work under the terms of Section 1
6076 above, provided that you also meet all of these conditions:
6078 @enumerate a
6079 @item
6080 You must cause the modified files to carry prominent notices
6081 stating that you changed the files and the date of any change.
6083 @item
6084 You must cause any work that you distribute or publish, that in
6085 whole or in part contains or is derived from the Program or any
6086 part thereof, to be licensed as a whole at no charge to all third
6087 parties under the terms of this License.
6089 @item
6090 If the modified program normally reads commands interactively
6091 when run, you must cause it, when started running for such
6092 interactive use in the most ordinary way, to print or display an
6093 announcement including an appropriate copyright notice and a
6094 notice that there is no warranty (or else, saying that you provide
6095 a warranty) and that users may redistribute the program under
6096 these conditions, and telling the user how to view a copy of this
6097 License.  (Exception: if the Program itself is interactive but
6098 does not normally print such an announcement, your work based on
6099 the Program is not required to print an announcement.)
6100 @end enumerate
6102 These requirements apply to the modified work as a whole.  If
6103 identifiable sections of that work are not derived from the Program,
6104 and can be reasonably considered independent and separate works in
6105 themselves, then this License, and its terms, do not apply to those
6106 sections when you distribute them as separate works.  But when you
6107 distribute the same sections as part of a whole which is a work based
6108 on the Program, the distribution of the whole must be on the terms of
6109 this License, whose permissions for other licensees extend to the
6110 entire whole, and thus to each and every part regardless of who wrote it.
6112 Thus, it is not the intent of this section to claim rights or contest
6113 your rights to work written entirely by you; rather, the intent is to
6114 exercise the right to control the distribution of derivative or
6115 collective works based on the Program.
6117 In addition, mere aggregation of another work not based on the Program
6118 with the Program (or with a work based on the Program) on a volume of
6119 a storage or distribution medium does not bring the other work under
6120 the scope of this License.
6122 @item
6123 You may copy and distribute the Program (or a work based on it,
6124 under Section 2) in object code or executable form under the terms of
6125 Sections 1 and 2 above provided that you also do one of the following:
6127 @enumerate a
6128 @item
6129 Accompany it with the complete corresponding machine-readable
6130 source code, which must be distributed under the terms of Sections
6131 1 and 2 above on a medium customarily used for software interchange; or,
6133 @item
6134 Accompany it with a written offer, valid for at least three
6135 years, to give any third party, for a charge no more than your
6136 cost of physically performing source distribution, a complete
6137 machine-readable copy of the corresponding source code, to be
6138 distributed under the terms of Sections 1 and 2 above on a medium
6139 customarily used for software interchange; or,
6141 @item
6142 Accompany it with the information you received as to the offer
6143 to distribute corresponding source code.  (This alternative is
6144 allowed only for noncommercial distribution and only if you
6145 received the program in object code or executable form with such
6146 an offer, in accord with Subsection b above.)
6147 @end enumerate
6149 The source code for a work means the preferred form of the work for
6150 making modifications to it.  For an executable work, complete source
6151 code means all the source code for all modules it contains, plus any
6152 associated interface definition files, plus the scripts used to
6153 control compilation and installation of the executable.  However, as a
6154 special exception, the source code distributed need not include
6155 anything that is normally distributed (in either source or binary
6156 form) with the major components (compiler, kernel, and so on) of the
6157 operating system on which the executable runs, unless that component
6158 itself accompanies the executable.
6160 If distribution of executable or object code is made by offering
6161 access to copy from a designated place, then offering equivalent
6162 access to copy the source code from the same place counts as
6163 distribution of the source code, even though third parties are not
6164 compelled to copy the source along with the object code.
6166 @item
6167 You may not copy, modify, sublicense, or distribute the Program
6168 except as expressly provided under this License.  Any attempt
6169 otherwise to copy, modify, sublicense or distribute the Program is
6170 void, and will automatically terminate your rights under this License.
6171 However, parties who have received copies, or rights, from you under
6172 this License will not have their licenses terminated so long as such
6173 parties remain in full compliance.
6175 @item
6176 You are not required to accept this License, since you have not
6177 signed it.  However, nothing else grants you permission to modify or
6178 distribute the Program or its derivative works.  These actions are
6179 prohibited by law if you do not accept this License.  Therefore, by
6180 modifying or distributing the Program (or any work based on the
6181 Program), you indicate your acceptance of this License to do so, and
6182 all its terms and conditions for copying, distributing or modifying
6183 the Program or works based on it.
6185 @item
6186 Each time you redistribute the Program (or any work based on the
6187 Program), the recipient automatically receives a license from the
6188 original licensor to copy, distribute or modify the Program subject to
6189 these terms and conditions.  You may not impose any further
6190 restrictions on the recipients' exercise of the rights granted herein.
6191 You are not responsible for enforcing compliance by third parties to
6192 this License.
6194 @item
6195 If, as a consequence of a court judgment or allegation of patent
6196 infringement or for any other reason (not limited to patent issues),
6197 conditions are imposed on you (whether by court order, agreement or
6198 otherwise) that contradict the conditions of this License, they do not
6199 excuse you from the conditions of this License.  If you cannot
6200 distribute so as to satisfy simultaneously your obligations under this
6201 License and any other pertinent obligations, then as a consequence you
6202 may not distribute the Program at all.  For example, if a patent
6203 license would not permit royalty-free redistribution of the Program by
6204 all those who receive copies directly or indirectly through you, then
6205 the only way you could satisfy both it and this License would be to
6206 refrain entirely from distribution of the Program.
6208 If any portion of this section is held invalid or unenforceable under
6209 any particular circumstance, the balance of the section is intended to
6210 apply and the section as a whole is intended to apply in other
6211 circumstances.
6213 It is not the purpose of this section to induce you to infringe any
6214 patents or other property right claims or to contest validity of any
6215 such claims; this section has the sole purpose of protecting the
6216 integrity of the free software distribution system, which is
6217 implemented by public license practices.  Many people have made
6218 generous contributions to the wide range of software distributed
6219 through that system in reliance on consistent application of that
6220 system; it is up to the author/donor to decide if he or she is willing
6221 to distribute software through any other system and a licensee cannot
6222 impose that choice.
6224 This section is intended to make thoroughly clear what is believed to
6225 be a consequence of the rest of this License.
6227 @item
6228 If the distribution and/or use of the Program is restricted in
6229 certain countries either by patents or by copyrighted interfaces, the
6230 original copyright holder who places the Program under this License
6231 may add an explicit geographical distribution limitation excluding
6232 those countries, so that distribution is permitted only in or among
6233 countries not thus excluded.  In such case, this License incorporates
6234 the limitation as if written in the body of this License.
6236 @item
6237 The Free Software Foundation may publish revised and/or new versions
6238 of the General Public License from time to time.  Such new versions will
6239 be similar in spirit to the present version, but may differ in detail to
6240 address new problems or concerns.
6242 Each version is given a distinguishing version number.  If the Program
6243 specifies a version number of this License which applies to it and ``any
6244 later version'', you have the option of following the terms and conditions
6245 either of that version or of any later version published by the Free
6246 Software Foundation.  If the Program does not specify a version number of
6247 this License, you may choose any version ever published by the Free Software
6248 Foundation.
6250 @item
6251 If you wish to incorporate parts of the Program into other free
6252 programs whose distribution conditions are different, write to the author
6253 to ask for permission.  For software which is copyrighted by the Free
6254 Software Foundation, write to the Free Software Foundation; we sometimes
6255 make exceptions for this.  Our decision will be guided by the two goals
6256 of preserving the free status of all derivatives of our free software and
6257 of promoting the sharing and reuse of software generally.
6259 @iftex
6260 @heading NO WARRANTY
6261 @end iftex
6262 @ifinfo
6263 @center NO WARRANTY
6264 @end ifinfo
6266 @item
6267 BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
6268 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
6269 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
6270 PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
6271 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
6272 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
6273 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
6274 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
6275 REPAIR OR CORRECTION.
6277 @item
6278 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
6279 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
6280 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
6281 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
6282 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
6283 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
6284 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
6285 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
6286 POSSIBILITY OF SUCH DAMAGES.
6287 @end enumerate
6289 @iftex
6290 @heading END OF TERMS AND CONDITIONS
6291 @end iftex
6292 @ifinfo
6293 @center END OF TERMS AND CONDITIONS
6294 @end ifinfo
6296 @page
6297 @appendixsec Appendix: How to Apply These Terms to Your New Programs
6299   If you develop a new program, and you want it to be of the greatest
6300 possible use to the public, the best way to achieve this is to make it
6301 free software which everyone can redistribute and change under these terms.
6303   To do so, attach the following notices to the program.  It is safest
6304 to attach them to the start of each source file to most effectively
6305 convey the exclusion of warranty; and each file should have at least
6306 the ``copyright'' line and a pointer to where the full notice is found.
6308 @smallexample
6309 @var{one line to give the program's name and a brief idea of what it does.}
6310 Copyright (C) @var{yyyy}  @var{name of author}
6312 This program is free software; you can redistribute it and/or modify
6313 it under the terms of the GNU General Public License as published by
6314 the Free Software Foundation; either version 2 of the License, or
6315 (at your option) any later version.
6317 This program is distributed in the hope that it will be useful,
6318 but WITHOUT ANY WARRANTY; without even the implied warranty of
6319 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6320 GNU General Public License for more details.
6322 You should have received a copy of the GNU General Public License
6323 along with this program; if not, write to the Free Software
6324 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
6325 @end smallexample
6327 Also add information on how to contact you by electronic and paper mail.
6329 If the program is interactive, make it output a short notice like this
6330 when it starts in an interactive mode:
6332 @smallexample
6333 Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
6334 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
6335 This is free software, and you are welcome to redistribute it
6336 under certain conditions; type `show c' for details.
6337 @end smallexample
6339 The hypothetical commands @samp{show w} and @samp{show c} should show
6340 the appropriate parts of the General Public License.  Of course, the
6341 commands you use may be called something other than @samp{show w} and
6342 @samp{show c}; they could even be mouse-clicks or menu items---whatever
6343 suits your program.
6345 You should also get your employer (if you work as a programmer) or your
6346 school, if any, to sign a ``copyright disclaimer'' for the program, if
6347 necessary.  Here is a sample; alter the names:
6349 @example
6350 Yoyodyne, Inc., hereby disclaims all copyright interest in the program
6351 `Gnomovision' (which makes passes at compilers) written by James Hacker.
6353 @var{signature of Ty Coon}, 1 April 1989
6354 Ty Coon, President of Vice
6355 @end example
6357 This General Public License does not permit incorporating your program into
6358 proprietary programs.  If your program is a subroutine library, you may
6359 consider it more useful to permit linking proprietary applications with the
6360 library.  If this is what you want to do, use the GNU Library General
6361 Public License instead of this License.
6363 @node Concept Index,  , GNU General Public License, Top
6364 @comment  node-name,  next,  previous,  up
6365 @unnumbered Index
6367 @printindex cp
6369 @bye