Fix issue with planner-multi breaking completion for other Emacs functions. Closes...
[planner-el.git] / planner-el.texi
blob79cd13a5cdc5cc5c1561a1edf6395ca118ae32aa
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.42.
17 Copyright @copyright{} 2001, 2004, 2005, 2006, 2007, 2008, 2009 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 3.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 git::         
82 * Installing from Debian::      
84 Overview
86 * Planning based on the Franklin-Covey Approach::  
87 * Why Use Planner::             
89 Getting Started
91 * Tasks::                       
92 * Schedule::                    
93 * Notes::                       
94 * Hyperlinks::                  
95 * Example Page::                
96 * Review::                      
98 More about Planner
100 * Navigation::                  
101 * More about Tasks::            
102 * More about Notes::            
103 * Making Files Pretty::         
104 * Annotations::                 
105 * Interactive Lisp::            planner-lisp.el
106 * Publishing::                  planner-publish.el
107 * Experimental Functions::      planner-experimental.el
109 More about Tasks
111 * Creating New Tasks::          
112 * Organizing Your Tasks::       
113 * Task Reports and Overviews::  
115 Creating New Tasks
117 * Creating a Task::             
118 * Task Priorities::             
119 * Task IDs::                    planner-id.el
120 * Cyclic Tasks::                planner-cyclic.el
121 * Task Detail::                 
122 * Deadlines::                   planner-deadline.el
124 Organizing Your Tasks
126 * Multiple Projects::           
127 * Viewing Tasks::               
128 * Modifying Tasks::             
129 * Carrying Over Unfinished Tasks::  
130 * Task Numbering::              
131 * Task Ranks::                  planner-rank.el
132 * Grouping Tasks::              planner-trunk.el
134 Task Reports and Overviews
136 * Accomplishments::             planner-accomplishments.el
137 * Status Reports::              planner-report.el
138 * Task Overviews::              planner-tasks-overview.el
139 * <tasks> tag::                 
140 * planner-registry::            Keep track of annotations
141 * planner-zoom::                View and navigate tasks by time period
143 More about Notes
145 * Using Allout Mode::           Quickly navigating your notes
146 * <notes>::                     Note headlines
147 * <past-notes>::                Index of past notes
148 * Note Indices::                planner-notes-index.el
150 Publishing
152 * Publishing Planner pages::    planner-publish.el
153 * Publishing Calendars::        planner-calendar.el
154 * Authz Access Restriction::    planner-authz.el
155 * RSS Publication::             Sharing notes with planner-rss.el
156 * iCal Task Publication::       Sharing tasks with planner-ical.el
157 * RDF Publication::             planner-rdf.el
159 RDF Publication
161 * Publishing with planner-rdf::  
162 * planner-rdf Tags::            
163 * planner-rdf Usage Examples::  
165 Managing Your Information
167 * E-mail::                      Linking notes and tasks to messages
168 * Scheduling and Time::         Tracking appointments and where your time goes
169 * Finances::                    Display your account balances and more
170 * Contacts and Conversations::  BBDB and ERC
171 * Tracking Research and Resources::  The Web, bibliographies, and bookmarks
172 * Tracking Development::        
174 E-mail
176 * Unix mail::                   Unix mailboxes: planner-unix-mail.el
177 * Gnus::                        Gnus mail and news reader: planner-gnus.el
178 * VM::                          VM mail reader: planner-vm.el
179 * Wanderlust::                  Wanderlust mail reader: planner-wl.el
180 * MH-E::                        MH-E mail reader: planner-mhe.el
181 * Rmail::                       Rmail: planner-rmail.el
183 Scheduling and Time
185 * Diary::                       Using the Emacs diary: planner-diary.el
186 * Appointments::                Appointments in plan pages: planner-appt.el
187 * Timeclock::                   Time tracking: planner-timeclock.el
188 * schedule.el::                 Project completion: planner-schedule.el
190 Diary
192 * Planner-Diary Advanced Features::  
194 Usage
196 * Task-based Appointments::     
197 * Schedule-based Appointments::  
198 * Viewing Appointments::        
199 * Appointment Updating on Save::  
200 * Appointment and Calendar Integration::  
201 * Appointment Hooks::           
203 Finances
205 * Ledger::                      Personal finances: planner-ledger.el
207 Contacts and Conversations
209 * BBDB::                        Contacts: planner-bbdb.el
210 * Emacs Relay Chat::            Internet Relay Chat: planner-erc.el
212 Tracking Research and Resources
214 * W3m::                         Web browser: planner-w3m.el
215 * BibTeX::                      Bibliographies: planner-bibtex.el
216 * Bookmark::                    Bookmarks: planner-bookmark.el
218 Tracking Development
220 * Log Edit::                    Changelogs: planner-log-edit.el
221 * PSVN::                        svn changesets: planner-psvn.el
222 * XTLA::                        TLA changesets: planner-xtla.el
223 * Gnats::                       Gnats: The GNU bug reporting system
225 Advanced Configuration
227 * Customizing Your Day Pages::  Change your templates
228 * Variables to Customize::      Change various aspects of Planner behavior
229 * Ideas for Other Keybindings::  Add to and change the default keybindings
231 Reference Material
233 * Keeping Track of Time::       
234 * Other Interactive Functions::  
235 * Planner Keybindings::         Default keybindings for Planner
236 * Sample Configuration Files::  
238 Sample Configuration Files
240 * File Organization::           
241 * Bare-Bones Planning::         
242 * Bare-Bones Planning with Plan Pages::  
243 * Tasks on Plan Pages with Some Day Pages::  
244 * Hierarchical Tasks::          
246 @end detailmenu
247 @end menu
249 @node Preface, Introduction, Top, Top
250 @comment  node-name,  next,  previous,  up
251 @chapter Preface
253 This document describes Planner, which was written by John Wiegley and
254 is now maintained by John Sullivan (@pxref{Acknowledgements}).
256 This document is a work in progress, and your contribution will be
257 greatly appreciated. Please e-mail comments and suggestions to the
258 mailing list (@pxref{Getting Help}). In the subject line of your
259 e-mail, include the word @samp{Planner}.
261 This documentation is available in eye-pleasing formats including PDF
262 and HTML at @url{http://wjsullivan.net/static/doc/planner/}.
264 Documentation author and maintainer: John Sullivan
265 @email{john@@wjsullivan.net}
268 John Sullivan (johnsu01)@*
269 April 25, 2004
271 @node Introduction, Installation, Preface, Top
272 @comment  node-name,  next,  previous,  up
273 @chapter Introduction
275 Planner is an organizer and day planner for Emacs.  It helps you keep
276 track of your pending and completed tasks, daily schedule, dates to
277 remember, notes and inspirations. It is a powerful tool not only for
278 managing your time and productivity, but also for keeping within easy
279 keystroke reach all of the information you need to be productive. It can
280 even publish reports charting your work for your personal web page, your
281 conscience, or your soon-to-be-impressed boss.
283 In fact, because it uses as its building blocks simple plain-text files,
284 it is an incredibly modular and flexible tool capable of shaping and
285 handling your personal information in ways whose variety is limited only
286 by your imagination. Because of this, Planner has a very active and
287 generous community who regularly share their innovations with each
288 other. Many of these modules and extensions are included in the archive
289 that you will download. Once you get the basics down, you'll probably
290 want to explore some of them. But as you read this manual and work with
291 Planner, keep in mind that the basic core is actually very simple, and
292 it might be worth spending time with just that before delving into the
293 customizations.
295 Because they are plain text with very few requirements, the organizer
296 pages kept by Planner can be as basic or as detailed as you
297 like. Your pages can be simple to-do lists with no more additional
298 information than what you would scrawl on a napkin, or they can be a
299 highly technical affair involving hyperlinks, embedded Lisp code,
300 appointment schedules and RSS feeds. As with so much in Emacs, it's
301 all up to you.
303 To get started with Planner, you first need to download it, and possibly
304 also the packages it depends on (@pxref{Installation}).
306 @node Installation, Overview, Introduction, Top
307 @comment  node-name,  next,  previous,  up
308 @chapter Installation
309 @cindex installation
311 Planner depends on Muse. Information for downloading and installing
312 Muse can be found at
313 @url{http://mwolson.org/static/doc/muse.html}.
315 Planner and Muse are intended to work with version 21 or later of Emacs
316 and XEmacs.
318 Make sure that you use the latest Muse release.  Development code might
319 prove unstable.
321 @menu
322 * Getting the Files::           
323 * Creating Your Planner::       
324 * Components::                  
325 * Advanced Installation::       
326 @end menu
328 @node Getting the Files, Creating Your Planner, Installation, Installation
329 @comment node-name,  next,  previous,  up
330 @section Getting the Files
332 Currently, there are three ways to obtain and install Planner. You can
333 install it from a source archive, git, or Debian package.
335 @menu
336 * Installing from a Source Archive::  
337 * Installing from git::         
338 * Installing from Debian::      
339 @end menu
341 @node Installing from a Source Archive, Installing from git, Getting the Files, Getting the Files
342 @comment node-name,  next,  previous,  up
343 @subsection Installing from a Source Archive
344 @cindex source code archive, installing from
346 You can install Planner from the source archive packaged and
347 distributed directly by the maintainer. This archive is provided in
348 both @file{.tar.gz} and @file{.zip} format.  If you don't know where to
349 extract these archives, create a @file{~/elisp} directory, and extract
350 them there.
352 @enumerate
353 @item
354 Download and unpack either
355 @url{http://mwolson.org/static/dist/planner-latest.tar.gz} or
356 @url{http://mwolson.org/static/dist/planner-latest.zip}.
358 @item
359 Likewise for
360 @url{http://mwolson.org/static/dist/muse-latest.tar.gz} or
361 @url{http://mwolson.org/static/dist/muse-latest.zip}.
363 @item
364 Likewise for
365 @url{http://mwolson.org/static/dist/remember-latest.tar.gz} or
366 @url{http://mwolson.org/static/dist/remember-latest.zip}.
368 @item Edit your @file{~/.emacs} (@file{_emacs} on Microsoft Windows).
370 Replace @file{/path/to} with wherever you extracted the files.
372 @example
373 ;; Add the directories to your load path
374 (add-to-list 'load-path "/path/to/muse/lisp")
375 (add-to-list 'load-path "/path/to/planner")
376 (add-to-list 'load-path "/path/to/remember")
378 ;; Load planner
379 (require 'planner)
380 @end example
381 @end enumerate
383 @subheading Updating Your Version
385 Download a new version and extract it over the old directory. Don't
386 forget to delete any byte-compiled files (@file{*.elc}) in the
387 directories (which can be accomplished by running ``make clean'') so
388 that the new code will be used.
390 @node Installing from git, Installing from Debian, Installing from a Source Archive, Getting the Files
391 @comment node-name,  next,  previous,  up
392 @subsection Installing from git
394 @cindex git version control system, using
395 The git version control system allows you to keep up-to-date with the
396 latest changes to the development version of Planner.  It also allows
397 you to contribute changes (via commits, if you are have developer access
398 to the repository, or via patches, otherwise).  If you would like to
399 contribute to Muse development, it is highly recommended that you use
400 git.
402 Debian users can install git with @kbd{apt-get install git-core}.
404 If you are new to git, you might find this tutorial helpful:
405 @uref{http://www.kernel.org/pub/software/scm/git/docs/tutorial.html}.
407 Downloading Planner with git and staying up-to-date involves the
408 following steps.
410 @example
411 # Retrieve Muse
412 git clone git://repo.or.cz/muse-el.git muse
414 # Retrieve Planner
415 git clone git://repo.or.cz/planner-el.git planner
417 # Retrieve Remember
418 git clone git://repo.or.cz/remember-el.git remember
420 # If that didn't work (due to a restrictive firewall), then try the
421 # following instead:
423 # git clone http://repo.or.cz/r/muse-el.git muse
424 # git clone http://repo.or.cz/r/planner-el.git planner
425 # git clone http://repo.or.cz/r/remember-el.git remember
426 @end example
428 Then add the following lines to your @code{~/.emacs}:
430 @example
431 ;; Add the directories to your load path
432 (add-to-list 'load-path "/path/to/muse/lisp")
433 (add-to-list 'load-path "/path/to/planner")
434 (add-to-list 'load-path "/path/to/remember")
436 ;; Load planner
437 (require 'planner)
438 @end example
440 You can also browse Planner's git repository on the web at
441 @url{http://repo.or.cz/w/planner-el.git}.
443 @subheading Updating Your Version
444 @cindex git, updating with
446 To stay up-to-date using git, here are some commands that might be
447 useful.
449 To list upstream changes not in local copy:
451 Do this whenever you want to see whether new changes have been committed
452 to Planer.  If you wish, you may skip this step and proceed directly to
453 the ``update'' step.
455 @example
456 # Change to the source directory you are interested in. Example:
457 cd muse/
459 # Fetch new changes from the repository, but don't apply them yet
460 git fetch origin
462 # Display log messages for the new changes
463 git log HEAD..origin
464 @end example
466 ``origin'' is git's name for the location where you originally got Muse
467 from.  You can change this location at any time by editing the
468 @file{.git/config} file in the directory where the Planner source was
469 placed.
471 To update to the latest version:
473 @example
474 cd muse; git pull
475 cd ../planner; git pull
476 cd ../remember; git pull
477 @end example
479 Don't forget to either rerun the @command{make} command or delete the
480 byte-compiled files (@file{*.elc}) in the directories, so that the new
481 code will be used.
483 @node Installing from Debian, , Installing from git, Getting the Files
484 @comment node-name,  next,  previous,  up
485 @subsection Installing from Debian
486 @cindex Debian package
488 Debian packages for Planner, Muse, and Remember are available in Debian
489 proper as the @code{planner-el}, @code{muse-el}, and @code{remember-el}
490 packages, respectively.
492 If you wish to try experimental packages, add the following lines to
493 your @file{/etc/apt/sources.list}
495 @example
496 deb http://mwolson.org/debian/ ./
497 @end example
499 Then, do the following steps as root:
501 @example
502 apt-get update
503 apt-get install muse-el
504 apt-get install planner-el
505 apt-get install remember-el
506 @end example
508 If you get some warning about the key not being trusted, you can either
509 ignore it or do the following.
511 @example
512 gpg --keyserver pgpkeys.mit.edu --recv-key f3a8d319
513 gpg -a --export f3a8d319 | sudo apt-key add -
514 @end example
516 @subheading Updating Your Version
517 @cindex Debian package, updating
519 If you installed Planner from Debian, do @kbd{apt-get update; apt-get
520 upgrade} to upgrade all packages that can be upgraded, or @kbd{apt-get
521 update; apt-get install planner-el} to upgrade just planner-el.
523 @node Creating Your Planner, Components, Getting the Files, Installation
524 @section Creating Your Planner
526 Now that you have installed the files for Planner and Muse, you need
527 to set some options to create your first planner.
529 Muse thinks in terms of projects. Each project consists of a group of
530 documents and certain information associated with these
531 documents. Planner is organized as a project within Muse. So, you need
532 to tell Muse a bit about it.
534 Add something like the following code to your @file{.emacs} file.
536 First, give your new Planner project a name. In this case, we use the
537 name, ``WikiPlanner''.
539 @example
540 (setq planner-project "WikiPlanner")
541 @end example
543 Next, add an entry for your project to Muse's master list of
544 projects. Don't forget to use your own name here in place of
545 ``WikiPlanner'' if you have chosen something different.
547 @example
548 (setq muse-project-alist
549       '(("WikiPlanner"
550          ("~/Plans"           ;; where your Planner pages are located
551           :default "TaskPool" ;; use value of `planner-default-page'
552           :major-mode planner-mode
553           :visit-link planner-visit-link)
555          ;; This next part is for specifying where Planner pages
556          ;; should be published and what Muse publishing style to
557          ;; use.  In this example, we will use the XHTML publishing
558          ;; style.
560          (:base "planner-xhtml"
561                 ;; where files are published to
562                 ;; (the value of `planner-publishing-directory', if
563                 ;;  you have a configuration for an older version
564                 ;;  of Planner)
565                 :path "~/public_html/Plans"))))
566 @end example
568 This code should work fine as-is for you as long as the directories
569 you see exist, and as long as you have no other Muse projects besides
570 your planner.
572 The first directory (@file{~/Plans}) is the directory where the
573 source files for your planner will reside. This is the directory where
574 you will actually visit files and edit them.  These files must have a
575 ``.muse'' extension.
577 The second directory (@file{~/public_html/Plans}) is the directory
578 where your planner files will be published by Muse as XHTML
579 (@pxref{Publishing}).
581 After you have added this code, make sure to either evaluate it or
582 restart Emacs.
584 @node Components, Advanced Installation, Creating Your Planner, Installation
585 @comment node-name,  next,  previous,  up
586 @section Components
588 Now that you have the archive, let's look at what's in it.
590 There should be three directories, named @file{planner}, @file{muse} and
591 @file{remember}.
593 In the @file{planner/} directory, you'll see many files with names like
594 @file{planner-gnus.el}. These are extra modules and extensions for
595 Planner, which you can use to tailor Planner to fit your desired
596 planning and information management habits.
598 In the @file{muse/lisp} directory, you'll see many files with names like
599 @file{muse-blosxom.el}. As in @file{planner/}, these are optional
600 modules and extensions.
602 A minimal working installation includes just @file{planner/planner.el}.
604 You need @file{planner.el} because it provides the core functions for
605 handling tasks, notes, and page navigation. You need @file{Emacs Muse}
606 because it provides the functions used to display your pages (both in an
607 emacs buffer and as HTML), and for connecting them to each other. More
608 specifically, it enables you to have hyperlinks and formatting in your
609 emacs buffers even though the actual files you are working with are
610 saved in plain text. These abilities are used in Planner to format your
611 planner pages the way you like, to create links from your tasks and
612 notes to the materials and projects they refer to, and to optionally
613 ``publish'' your pages in different formats, including HTML.
615 In the @file{remember/} directory are files related to
616 RememberMode. RememberMode does not depend on Planner or Muse, but works
617 best with Planner installed. It is not required in order to use Planner,
618 but it is used by many Planner users to record notes and information to
619 their planner pages.
621 If you are curious, you can open each file in these directories and read
622 the comments at the top, to get an idea of what each extension is used
623 for. They are also all detailed later in this manual.
625 @node Advanced Installation,  , Components, Installation
626 @comment  node-name,  next,  previous,  up
627 @section Advanced Installation
629 Once you decide you want to keep Planner around for a while, there
630 are two additional steps you can take to make using it easier and more
631 efficient. These steps are optional.
633 @itemize
634 @cindex installing the info file
635 @cindex @file{planner-el.texi}, installing
636 @cindex @file{planner-el.info}, installing
637 @item You can make this document, the Planner info file, appear in
638 the index of info files you see when you type @command{M-x info} or
639 @kbd{C-h i} in Emacs. The instructions for doing this vary depending
640 on whether you have permission to edit certain files on your
641 system. Follow the instructions in @ref{Installing an Info File, ,
642 ,texinfo, Texinfo}, using something like:
644 @example
645 * Planner: (path/to/planner/Planner). Organizer/day planner
646 for Emacs.
647 @end example
649 for the new entry in the info @file{dir} file.
651 @cindex byte compiling
652 @item You can byte-compile @file{planner.el}, @file{Muse},
653 @file{remember.el}, or any of the optional modules you frequently use,
654 in order to improve the speed of their execution.  Basically, all you
655 need to do is (1) change the directory for each project listed in
656 @file{scripts/planner-build.el}, (2) copy @file{Makefile.defs.default}
657 to @file{Makefile.defs} and edit it as needed, and (3) run
658 @command{make} from the command line. To read more detail about byte
659 compilation, see @ref{Byte Compilation, , ,elisp, Emacs Lisp Reference
660 Manual}.
662 @end itemize
664 @node Overview, Getting Started, Installation, Top
665 @comment node-name,  next,  previous,  up
666 @chapter Overview
668 Planner is a plain-text hyperlinked personal information manager
669 for Emacs that helps you keep track of tasks, notes, and other
670 information. People use Planner to support different ways of planning
671 one's day, from Franklin-Covey and David Allen's Getting Things Done
672 to home-brew hacks. Planner is even used to manage information not
673 normally handled by a personal information manager, like bugtracking,
674 time tracking, and team data. If you start by using Planner as a basic
675 TODO and notes manager, you might find other ways it can help you
676 improve your process.
678 You can use Planner to keep track of your tasks, schedule, notes,
679 and other information you want to store in hyperlinkable text files.
680 You can get the most benefit out of a personal information manager if
681 you use it everyday. Most people add @code{(plan)} to the end of their
682 @file{~/.emacs} so that Planner shows today's schedule and
683 unfinished tasks whenever Emacs starts. If you leave your Emacs
684 running for more than 24 hours, try to get into the habit of running
685 @code{plan} at least once a day.
687 Because your time is important, Planner tries to minimize
688 distractions, making it easier for you to jot down tasks and notes
689 without being distracted from your work. People often make tasks based
690 on the current buffer, so Planner tries to create hyperlinks to
691 whatever you're looking at so that you can jump back to it easily. The
692 @ref{Getting Started} tutorial will show you how to set that up for
693 both tasks and notes.
695 The customizability of Planner means you can make your personal
696 information manager truly personal. Planner strives to be as flexible
697 as possible, and we would love to adapt Planner to fit your needs.
698 Browse through our mailing list (@pxref{Getting Help}) to
699 find out how other people are using Planner, and post your feature
700 requests and bug reports there!
702 Planner is just a tool. It does not dictate a particular way of
703 planning, although it supports some ways better than it supports
704 others. If you want to take some time thinking about planning, read
705 the following reflections for inspiration and ideas. On the other
706 hand, if you want to hit the ground running, see @ref{Getting
707 Started}. If you already have a specific way of planning in mind,
708 check out @ref{Sample Configuration Files}.
710 @menu
711 * Planning based on the Franklin-Covey Approach::  
712 * Why Use Planner::             
713 @end menu
715 @node Planning based on the Franklin-Covey Approach, Why Use Planner, Overview, Overview
716 @comment  node-name,  next,  previous,  up
717 @section Planning Based on the Franklin-Covey Approach
718 @cindex philosophy of planning
720 (This is an edited and updated version of an essay originally by John
721 Wiegley. Read it if you want to get some insights into one way of
722 planning. You can skip this if you want to go straight to planning your
723 day.)
725 What is planning?  It can be a nebulous thing to define.  In its
726 essence, however, it is very simple: it's how we achieve our dreams.
728 Our days are filled with time, and hence with actions, whether they
729 be of a mental or physical sort.  But there are two kinds of
730 action: reactive and creative.  Reactive action is a response to
731 the environment, a reaction to stimulus.  Had we enough instincts
732 to ensure survival, we could live according to this kind of action
733 alone.  It is a mode of behavior we share with every living
734 species.
736 The opposite to reactivity is creativity, when we decide upon a
737 course of action that is a wholly a product of personal choice.  We
738 then make decisions as to the steps needed to make this wish a
739 reality.  This is planning.  Planning is essentially a creative
740 endeavor at every step.
742 First, create the idea, what you want to achieve.  Very short-term
743 ideas do not need much more than thinking about how to do it.  But
744 long-term ideas require planning, since the mind cannot contain all
745 of the details.
747 Second, decide how the idea maps into the circumstances you find
748 yourself in.  Some environments will assist your plan, others
749 hinder it.  But step by step, identify every barrier to the
750 realization of your idea, and devise a countermeasure to overcome
751 it.  Once you've mapped things out from beginning to end,
752 accounting for unknowables as best you can, you now have your plan.
754 Third is to break the stages of the plan into parts that are not
755 overwhelming in their complexity.  It is at during this phase that
756 a plan is turned into task items, each to be accomplished within
757 the span of one day's time.  If a task requires several days, break
758 it up further.  The smaller it is, the less your mind will recoil
759 from attempting it.
761 Fourth is to monitor your progress, identifying problems and
762 correcting for them as you go.  Some plans start out unachievable,
763 and remain that way indefinitely, due to a simple lack of
764 observation.  If nothing is working for you, change it.  Otherwise,
765 your plan is merely a well-crafted wish.
767 Fifth is just to do the work, and be patient.  All good plans take a
768 great deal of time, and *cannot* happen immediately.  The groundwork
769 must be laid for each step, or else it will rest on an insecure
770 foundation.  If you follow your plan doggedly, applying some time to
771 it each day or week, it @emph{will} happen.  Remember the story of the
772 tortoise and the hare.  I've even written a short essay on the
773 necessity of gradual accomplishment, which can be found at
774 @url{http://emacswiki.org/johnw/essays/node2.html}.
776 How can this software help?  Computers are ideal for manipulating
777 information, since they allow you to change things without erasing
778 or rewriting.  And since all plans change quite a bit during their
779 implementation, a planning program can be very helpful.
781 Start by installing Planner and Muse (@pxref{Installation}).
783 Now, conceive your idea.  I can't believe there's nothing you want
784 from life.  More peace, time to enjoy the world, an end to war?
785 Everyone wants something.  Search deeply, and you will find
786 countless unhoped wishes lurking therein.  Choose one for now, and
787 think on it for a while.
789 Then open a file (using @kbd{C-x C-f}) within the directory you named in
790 your @code{muse-project-alist}. Make sure the file has a @file{.muse}
791 extension so that Emacs will automatically recognize it as a planner
792 file. Name the file after your plan, such as @file{BetterHealth.muse}.
794 Choose an idea you really want to accomplish.  Struggle to
795 differentiate between the things you want because others want them,
796 and the things you want for yourself.  It takes quite an effort, and
797 may require a long time before you notice the difference.  Many people
798 want to be more healthy to be more attractive, which is an externally
799 driven goal.  Unless @emph{you} really want to accomplish what you
800 envision, the odds are you will fail.  Only our own wishes and dreams
801 possess enough personal energy to see themselves to fruition.  What
802 happens to many of us is simply that we never become conscious of
803 these dreams: what we love, what we desire most.  When I talk to
804 friends, so much of what I hear is things they want because they feel
805 they should want them.  There's just not enough energy there to pursue
806 a good plan, because nearly all of it is negative energy.
808 Do you know what you really want?  Don't worry, many people don't.
809 It's not a question anyone really wants us to pursue, because often
810 we don't want what others do; it doesn't contribute to the social
811 welfare, and all that nonsense.  Somehow we always forget that
812 what's good for the social welfare now, was someone else's crazy
813 dream a hundred years ago.  The human aversion to fundamental
814 change is always one's greatest enemy, so don't waste any time
815 getting bitter about it.
817 For the sake of argument I assume you really do want to be
818 healthier, because you've fallen in love with the ideal of purity,
819 or you understand the connection between your physical self and the
820 world around you, and how this can open up your spirit to desiring
821 more.  I assume.  :)
823 So you're in a Wiki file called @file{BetterHealth}.  Start typing.
824 Type anything related to your idea: what you think about it, your
825 ideas on it, @emph{and especially what the end will look like}.  If
826 you can't visualize the end, you can't plan, since planning is about
827 drawing a line between now and then.
829 When you've typed enough to gain a vision of your goal, start
830 drafting what the possible intermediate steps might be.  Then stop,
831 get up, walk around, enjoy life, and come back to it.  Taking a
832 long time at the beginning is not a bad idea at all, as long as
833 it's not forever.
835 As you chew on your idea, it will begin to become more and more
836 concrete.  You'll have ideas about the smallest pieces, and ideas
837 about the biggest pieces.  Keep going until it starts to take shape
838 before you, and you can see yourself in your mind's eye moving from
839 the present into the future.  Write down this progression, and the
840 sorts of things you might encounter along the way.
842 As you continue, you'll naturally discover discrete phases, or
843 ``milestones'' as managers love to call them.  These are very
844 important, because they let you know you're making progress.  I
845 recommend having a big party with friends every time you achieve a
846 milestone.  A typical plan might have between three and ten.
848 Between the milestones are the bigger pieces of your plan. You might
849 find it convenient to name these pieces using MixedCase words. Try
850 adding these lines to your @file{.emacs} or @file{_emacs} file.
852 @example
853 (require 'muse-wiki)
854 (setq muse-wiki-allow-nonexistent-wikiword t)
855 @end example
857 You'll notice that Emacs colors and underlines them for you. Like,
858 FindGoodGym. Hit return on this highlighted word, and you'll find
859 yourself in another, blank file. In this file, start drafting your
860 sub-plan, just as you did with the larger plan. You should find it
861 easier now, since the scope is smaller.
863 As you break down further, you'll notice simple little things that
864 need to get done.  These are your tasks.  Every plan is a
865 succession of tasks.  The difference from reactivity is that each
866 task is part of the larger plan. This is what it means to be
867 systematic: that everything you do helps further your plan.  If you
868 have tasks in your day that contribute to no plan, they are
869 reactive.  Of course, life is full of these, but don't let them
870 take up more than 20% of your day.  If you allow yourself to be
871 dominated by reactive tasks, you'll regret it at the end of your
872 life.  I don't know this personally, but I do know that striving
873 for one's dreams -- and seeing them come to fruition -- is the
874 greatest joy a man can possess.  It is the essence of freedom, of
875 living, of creation.  Reactivity is the opposite of this, and
876 serves only to drain our energy and slacken our spirits.
878 Now that you've thought of a simple task, type @kbd{C-c C-t}. This
879 will ask for a brief description of the task, and when you plan to do
880 it. If you hit @key{RETURN} at the question @samp{When}, it assumes
881 you mean today. It will also pop up a three-month calendar at this
882 question, so you can see where your free days are. Make sure you set
883 the variable @code{mark-diary-entries-in-calendar} to @samp{t} in your
884 @file{.emacs} (or @file{_emacs}) file. This way, you can see which
885 days your appointments fall on. (Read about the Emacs Calendar and
886 Diary in @ref{Calendar/Diary, , , Emacs, GNU Emacs Manual}.)
888 @example
889 (setq mark-diary-entries-in-calendar t)
890 @end example
892 Once your task is in there, go back to your plan and keep
893 generating more tasks.  Generate them all!  Fully describe---as
894 tasks---everything necessary to bring your sub-plan to completion.
895 Don't create tasks for the other sub-plans.  You may have good idea
896 of what they'll look like, but don't bother rendering them into
897 tasks just yet.  Things will change too much between now and then,
898 for that to be a good use of your time.
900 Is your sub-plan now rendered into all of the tasks necessary to
901 reach your first milestone?  Great!  That is the purpose of
902 planner.el.  The rest is really up to you.  If you find that you
903 keep putting things off, and never do them, that's the surest sign
904 you're planning for someone else's dream, and not your own.
906 Here are some of the things planner.el can do, to help you manage
907 and track your tasks:
909 At the beginning of every day, type @kbd{M-x plan}.  This will jump
910 you to the top of the most recent task list before today.  If you
911 skipped a bunch of days, you'll have to open up those files on your
912 own.
914 Probably some of the tasks that day won't be finished -- that's OK.
915 Learning to properly estimate time is a magical, mystical art that few
916 have mastered.  Put your cursor on those undone tasks, and type
917 @kbd{C-c C-c}.  This will move them into today's task page.  You can
918 jump to today's task page at any time by typing @kbd{C-c C-n} (from a
919 Wiki or planning page).  I heartily recommend binding @kbd{C-c n}, to
920 jump you to this page from anywhere:
922 @example
923 (define-key mode-specific-map [?n] 'planner-goto-today)
924 @end example
926 As you look at your task sheet each day, the first thing to do is to
927 ``clock in'' to one of them. This isn't necessary, and is only helpful
928 if you're around your computer a lot. But by typing @kbd{C-c C-i}
929 (assuming you have @file{timeclock.el} on your load-path), it will log
930 the time you spend working on your sub-plan (@pxref{Time Intervals, , ,
931 Emacs, GNU Emacs Manual}). This is helpful for viewing your progress.
932 Type @kbd{C-c C-o} to clock out.
934 @kbd{C-M-p} and @kbd{C-M-n} will move a task up and down in priority.
935 Priority is represented by a letter A through C.  'A' tasks mean they
936 must be done that day, or else your plan is compromised and you will
937 have to replan.  'B' means they should be done that day, to further the
938 plan, otherwise things will be delayed.  'C' means you can put off the
939 task if you need to, although ultimately it will have to be done.
941 For reactive tasks, the letters mean something different: 'A' means
942 you must do it today, or somebody will roast your chestnuts over an
943 open fire.  'B' means you should do it today, or else someone will
944 be practicing patience at the day's end.  'C' means no one will
945 notice if you don't do it.
947 Again, reactive tasks are ENEMIES OF PLANNING.  Really, until you
948 see them that way, circumstances will push you around and steal
949 your life away.  We have only so many years to use, and everyone is
950 greedy to take them.  It's insidious, almost invisible.  A healthy
951 dislike of reactivity will do wonders for organizing your affairs
952 according to their true priority.
954 The last word that needs to be said concerns ``roles''.  Every person
955 stands in several positions in his life: husband, employee, manager,
956 etc.  These roles will tend to generate tasks not associated with any
957 immediate plan, but necessary to maintain the health and functioning
958 of the role.  My suggestion is to keep this the smallest possible
959 number, and fulfill those that remain well.  How you decide to
960 apportion your time between pursuing grand designs, and fostering deep
961 relationships, is a personal matter.  If you choose well, each will
962 feed the other.
964 I mention this to point that reactivity is something not
965 exclusively associated with tasks that have no master plan, because
966 being a father, for example, is something that rarely proceeds
967 according to orderly plans.  But the role of father itself is its
968 own plan, whose goal is ``to be the best one can'', and whose
969 component tasks are spending time on whatever comes up.  It is, in
970 a sense, an implicit plan.  But reactive tasks follow no plan at
971 all; they are parasites of time that suck the spirit away, whereas
972 properly chose roles actually help fulfill one's own inner needs.
973 At least, this is what I believe.
975 @defun plan force-days
976 Start your planning for the day, beginning with the last day's tasks.
978 If @code{planner-carry-tasks-forward} is non-nil, find the most recent
979 daily page with unfinished tasks and reschedule those tasks to
980 the current day.  If @var{force} is non-nil, examine all past daily
981 pages for unfinished tasks.
983 If @code{planner-carry-tasks-forward} is nil, visit the most recent
984 daily page.  If a daily page for today exists, visit that instead.
986 If @var{force-days} is a positive integer, scan that number of days.
987 If @var{force-days} is @samp{t}, scan all days.
989 @end defun
991 @node Why Use Planner,  , Planning based on the Franklin-Covey Approach, Overview
992 @comment  node-name,  next,  previous,  up
993 @section Why Use Planner?
994 @cindex Planner, why use
996 You can skip this essay if you just want to get started, or read it
997 for some insights into why the previous maintainer is crazy about it.
999 Why I Use Planner, by Sacha Chua
1001 I thought about why I liked Planner. Planner as a TODO manager
1002 isn't particularly special. Although I can assign tasks to categories
1003 and see a breakdown of what projects are taking up my time, Evolution
1004 and Microsoft Outlook provide more powerful task support. In other
1005 task managers, you can e-mail tasks, assign multiple categories and
1006 fill in all sorts of metadata. You can even synchronize your tasks
1007 with devices like a phone or PDA. So why use Planner?
1009 I realized that integration into my way of life and automatic context
1010 clues are what really make planner tasks worth it for me. I don't have
1011 to switch to another application to create a task. I can just hit a
1012 keyboard shortcut. Planner uses a minibuffer to get the task
1013 description. My windows are not rearranged in any way, and I can look
1014 at the data that's relevant to a task. Not only that, tasks
1015 automatically pick up context clues, like whom I'm talking to on IRC
1016 or the file I'm editing at the moment. This cuts down on the explicit
1017 context I need to include and makes it easier for me to bring up the
1018 task again.
1020 As a scheduler, Planner is also not particularly distinguished.
1021 Sure, it can display my @file{~/diary}, but for that matter so can
1022 @kbd{M-x diary}. Evolution and Outlook can give me a more graphical
1023 view of my time, sync with my PDA, and coordinate my schedule with
1024 other people. Those applications support detailed schedule entries
1025 with powerful cyclic options. On the other hand, Planner gives me
1026 a personal, plain text view and (at least the way I use it) requires
1027 me to edit a separate file to add new appointments. (I've defined a
1028 few shortcut keys to deal with this.) However, it does have one
1029 advantage---my schedule is always loaded. I used to use Outlook on
1030 Windows, but having my schedule in a separate application meant that I
1031 actually looked at it very rarely, as I had turned off reminders
1032 because they got annoying.
1034 Planner's notes, however, are what really convinced me. I can hit
1035 a keyboard shortcut from anywhere and type my notes into a buffer
1036 which automatically keeps context information. After typing the note,
1037 I can then categorize it. I think that the critical thing here is that
1038 interruptions---fleeting thoughts---don't break my flow. I can just
1039 pop up a remember buffer, stow that thought away somewhere, and go
1040 back to it whenever I want. In contrast, creating a note in Outlook
1041 means switching out of my application, making a couple of keystrokes,
1042 typing the note in, and then switching back. The context switches make
1043 it hard to keep track of where I am and what I'm supposed to remember.
1044 Not only that, I need to enter context by hand. Even though I can
1045 color my notes and reorganize them in Outlook, I find the context
1046 switch too expensive. I used to keep notes in other knowledge
1047 management tools as well. Some applications allowed me to
1048 drag-and-drop links into the current note, and that was cool. But that
1049 required a manual action, and those applications didn't feel
1050 integrated into my way of working. (Note: You'll need remember.el for
1051 this.)
1053 I guess that's why I like Planner. Unlike other organizers which
1054 don't know anything about the applications I use, Planner tries
1055 its best to integrate into the way I work, and it's easy to extend.
1056 Fortunately I do almost all my work in Emacs, so I can think of my
1057 organizer as integrated into my e-mail client, Internet Relay Chat
1058 client, web browser, file editor and even games. It automatically
1059 picks up context clues from these applications and allows me to easily
1060 jump back to relevant files. It doesn't distract me. It allows me to
1061 key in data and then it gets out of my way.
1063 (That said, it's perfectly okay to use Planner even if you don't live
1064 in Emacs.)
1066 The processing that happens in the background is a bonus, and
1067 publishing my task list and notes online has greatly helped me. It
1068 gives other people a way to see what I'm working on and what I've
1069 planned for the future. Occasionally people write in with additional
1070 resources and helpful tips. (Again, this is purely optional. Many
1071 people don't publish their planner pages. Other people use really
1072 fine-grained access control.)
1074 I think the greatest feature of Planner, though, is its user
1075 community. Because Planner can be easily modified, we can experiment
1076 with a lot of new ideas quickly, and we can tailor Planner to fit our
1077 needs. I love checking my @samp{planner-el-discuss} mail and finding
1078 out how people have tweaked Planner or would like to tweak Planner,
1079 and I've learned a lot by exchanging reflections on organizing one's
1080 life.
1082 I really wasn't an organization freak before I started using Planner.
1083 I often forgot to do my homework or answer important mail. I still
1084 procrastinate now, but at least it's all being kept track of
1085 somewhere! I also really like how Planner lets me to gradually improve
1086 how I'm doing things, and I feel I've come a long way.
1088 Please try it out! We'd love to hear how Planner can become
1089 @emph{your} personal information manager.
1091 @node Getting Started, More about Planner, Overview, Top
1092 @comment  node-name,  next,  previous,  up
1093 @chapter Getting Started
1095 At the end of this tutorial, you will be able to use Planner and
1096 related modules to keep track of your tasks, schedules and notes, all
1097 within the convenience of Emacs.
1099 There are two kinds of pages in a Planner wiki. Day pages show tasks,
1100 schedule, and notes for the day, while plan pages organize related tasks
1101 and notes into a single page.
1103 If you have not yet added planner to your @file{~/.emacs}, add the
1104 following lines:
1106 @example
1107 (add-to-list 'load-path "/path/to/muse/lisp")
1108 (add-to-list 'load-path "/path/to/planner")
1109 (add-to-list 'load-path "/path/to/remember")
1110 (require 'planner)
1111 @end example
1113 This will bring up the most recent day page with unfinished tasks or
1114 create a new day page if necessary. By default, planner pages are
1115 stored in @samp{~/Plans} (@code{planner-directory}).
1117 @menu
1118 * Tasks::                       
1119 * Schedule::                    
1120 * Notes::                       
1121 * Hyperlinks::                  
1122 * Example Page::                
1123 * Review::                      
1124 @end menu
1126 @node Tasks, Schedule, Getting Started, Getting Started
1127 @section Tasks
1129 Let us start by creating a task labelled
1131 @example
1132 Join http://mail.gna.org/listinfo/planner-el-discuss/
1133 @end example
1135 From anywhere (even this info buffer!), call @kbd{M-x
1136 planner-create-task-from-buffer} to create a new task. Fill in the
1137 description and choose a date by:
1139 @itemize
1140 @item typing 1 - 31 to put the task on that day of the month,
1141 @item accepting the default (today) by pressing RET,
1142 @item selecting the date with mouse-1,
1143 @item
1144 typing +n (where in is an integer) to schedule the task in n days time,
1146 @item typing nil to make an undated task.
1147 @end itemize
1149 For now, accept the default (@samp{today}) by pressing @key{RET}.
1151 You will then be prompted for a plan page. Plan pages gather related
1152 tasks and notes, giving you an overview of what you've done so far.
1153 You can accept the default TaskPool, create your own plan page, or
1154 specify nil to make a task that is not associated with a plan page.
1155 For now, accept the default (@samp{TaskPool}) by pressing RET.
1157 You have created your first task. View today's page with
1158 @kbd{M-x planner-goto-today}. You will see a line of the form
1160 @example
1161 #B  _ Join http://mail.gna.org/listinfo/planner-el-discuss/ (TaskPool)
1162 @end example
1164 If you created the task from this page, then there will be an additional
1165 annotation:
1167 @example
1168 #B  _ Join http://mail.gna.org/listinfo/planner-el-discuss/ : Tasks (TaskPool)
1169 @end example
1171 The URL, @samp{TaskPool} and @samp{Getting Started} are
1172 hyperlinks. You can use TAB and S-TAB to navigate between them and RET
1173 to follow the link.
1175 Create more tasks using @kbd{M-x planner-create-task-from-buffer}.
1176 This is bound to @kbd{C-c C-t} in @code{planner-mode} pages
1177 for your convenience. For example, create the following tasks:
1179 @itemize
1180 @item
1181 @samp{Describe my current way of working and how I would like to work},
1182 for three days from now (@samp{+3}),
1183 @item
1184 @samp{Learn how to schedule a task}, an undated task (@kbd{nil}) on the
1185 TaskPool page,
1186 @item
1187 @samp{Browse through the Planner info manual} for today (@kbd{.} or
1188 accept the defaults), and
1189 @item
1190 @samp{Add (plan) to the end of my [[~/.emacs]]} for today, but without a
1191 plan page (specify @kbd{nil} at the plan page prompt)
1192 @end itemize
1194 Tip: I bind planner-create-task-from-buffer to "F9 t" so that I can
1195 easily call it from anywhere. You can do that with this elisp fragment:
1196 @code{(global-set-key (kbd "<f9> t") 'planner-create-task-from-buffer)}
1198 Next, visit the TaskPool by:
1200 @itemize
1201 @item
1202 @key{TAB}-bing or using the cursor and typing @key{RET} to follow the
1203 link,
1204 @item @kbd{C-x C-f TaskPool RET} to use @code{find-file}, or
1205 @item @kbd{C-c C-f TaskPool RET} to use @code{muse-project-find-file}
1206 @end itemize
1208 You can see an overview of the tasks as scheduled on different days.
1209 Unlike many personal information managers that store all of your data
1210 in one file and then perform magic in order to present different
1211 views, Planner uses plain text files. The data is duplicated and kept
1212 updated by functions. This makes it simpler and easier to modify,
1213 because what you see is (almost) what you get. On the other hand,
1214 you'll need to get used to either editing both files, or using the
1215 built-in functions for editing and updating files. If you prefer not
1216 to work with linked tasks, you can configure Planner to use only plan
1217 pages or use only day pages.
1219 The TaskPool page should list the tasks you created earlier. Go to the
1220 one named Learn how to schedule a task . Type @kbd{C-c C-c}
1221 (@code{planner-copy-or-move-task}) to schedule the task. Type RET to
1222 accept the default (today). Go to the day page by following the link
1223 or calling @kbd{M-x planner-goto} (@kbd{C-c C-j C-d} or the menu bar);
1224 you will see the newly-created task there. You can also use @kbd{C-c
1225 C-c} (@kbd{planner-copy-or-move-task}) to reschedule a task to an
1226 earlier or later date.
1228 Well, that task is done. To mark the task as completed, type @kbd{C-c
1229 C-x} (@code{planner-task-done}). You can also edit the status manually
1230 (change _ to X) as long as you remember to call @kbd{M-x
1231 planner-update-task} to update the link page as well. Updating relies on
1232 the task description being the same, so do not edit this manually.
1234 Quick summary of commands:
1236 @itemize
1237 @item
1238 Go to today's page: @kbd{M-x plan} to carry unfinished tasks forward, or
1239 @kbd{M-x planner-goto-today} to just go to today's page.
1240 @item
1241 Create a task: @kbd{C-c C-t} (@code{planner-create-task-from-buffer}),
1242 or type a task manually (call M-x planner-update-task if the task is
1243 linked)
1244 @item
1245 Mark a task as done: @kbd{C-c C-x} (@code{planner-task-done}), or edit
1246 the task and call @kbd{M-x planner-update-task}
1247 @item Edit a task description: @kbd{M-x planner-edit-task-description}
1248 @item Reschedule a task: @kbd{C-c C-c} (@code{planner-copy-or-move-task})
1249 @item
1250 Reschedule many tasks: Mark a region and use @kbd{M-x
1251 planner-copy-or-move-region}
1252 @item
1253 Change the plan of a task: @kbd{M-x planner-replan-task}, or do
1254 @kbd{C-c C-c} (@code{planner-copy-or-move-task}) and type in a
1255 plan page rather than a date
1256 @item Delete a task: @kbd{M-x planner-delete-task}
1257 @item
1258 Reorder tasks: @key{M-p} (@code{planner-raise-task}) and @key{M-n}
1259 (@code{planner-lower-task}), or normal editing commands like kill and
1260 yank
1261 @item Change task priorities (@samp{#A} > @samp{#B} > @samp{#C}):
1262       @key{C-M-p} (@code{planner-raise-task-priority}) and
1263       @key{C-M-n} (@code{planner-lower-task-priority}),
1264       or edit the task and call @kbd{M-x planner-update-task}.
1265 @end itemize
1267 You can save your tasks with @kbd{C-x C-s} the same way you save any
1268 other file, or Emacs will prompt you to save it when you exit.
1270 @node Schedule, Notes, Tasks, Getting Started
1271 @comment  node-name,  next,  previous,  up
1272 @section Schedule
1274 This is free-form. You can put anything you want into this, or remove
1275 it from @code{planner-day-page-template} entirely. Some people use it
1276 to keep track of their plans for the day with tables like this:
1278 @example
1279 hh:mm | hh:mm | activity
1280 hh:mm | hh:mm | activity
1281 hh:mm | hh:mm | activity
1282 @end example
1284 Remember, Planner files are just plain text. You can add new sections
1285 or remove old ones, or use the suggested sections for entirely
1286 different activities.
1288 @node Notes, Hyperlinks, Schedule, Getting Started
1289 @comment  node-name,  next,  previous,  up
1290 @section Notes
1291 @cindex @file{remember.el}
1292 @cindex @file{remember-planner.el}
1293 @cindex notes
1295 By default, your Planner pages will have a Notes section. You can put
1296 anything you want in this section, or remove it from your
1297 @code{planner-day-page-template} entirely.
1299 You may be interested in @file{remember-planner.el}, part of the
1300 Remember package (see @inforef{Top, remember-el, remember-el}). You
1301 can download Remember at @uref{http://gna.org/projects/remember-el/}).
1303 @code{remember-planner.el} makes it easy to create notes from anywhere
1304 in Emacs, and it uses the same context-sensing code that Planner uses.
1305 Notes added by @code{remember-planner.el} look like this:
1307 @example
1308 .#1 Headline 00:00
1309 Body
1311 [[context hyperlink]]
1312 @end example
1314 and are outlined at the H2 level in published HTML.
1316 You can easily create context-aware notes if you include the following
1317 in your @file{~/.emacs}:
1319 @example
1320 (require 'remember-planner)
1321 (setq remember-handler-functions '(remember-planner-append))
1322 (setq remember-annotation-functions planner-annotation-functions)
1323 @end example
1325 Then @kbd{M-x remember} will open a dedicated buffer for you to write
1326 your note. If Planner recognizes your current buffer as one with
1327 context then it will include a hyperlink at the bottom of the note.
1328 The first line of the note is used as a title, so make it short and
1329 meaningful. The rest of the text will be used as the body. Try it now
1330 by creating a note, perhaps about things you'd like to remember from
1331 this tutorial.
1333 Typing @kbd{C-c C-c} after composing will prompt for a plan page to
1334 put the note on, with auto-completion. If you don't enter a page, the
1335 note will just be saved on today's page. If you do specify a plan
1336 page, the note will go on both today's page and on the specified page.
1337 Let's try specifying @samp{TaskPool} for the note.
1339 If you look at today's page, you'll find a timestamped note that links
1340 to @samp{TaskPool}. Likewise, @samp{TaskPool} contains a note that
1341 links to today's page. To change the plan page of a note, use
1342 @kbd{planner-replan-note}.
1344 If you decide to edit the note on one of these pages after it has been
1345 saved, be aware that your changes will not be automatically reflected
1346 on the linked page. To update the linked page after editing a note,
1347 use @kbd{M-x planner-update-note}.
1349 @node Hyperlinks, Example Page, Notes, Getting Started
1350 @section Hyperlinks
1351 @cindex hyperlinks
1353 Planner automatically creates context-sensitive hyperlinks for your
1354 tasks and notes when you use @code{planner-create-task-from-buffer}
1355 and @code{remember}.
1357 Blue links indicate URLs and Planner pages that already exist. Red links
1358 indicate Planner pages that have not yet been created.
1360 Middle-click or type @key{RET} on any link to view the link in the
1361 current window. Shift-middle-click or type @key{S-RET} to view the
1362 link in another window. @key{TAB} goes to the next link, while
1363 @key{S-TAB} goes to the previous one.
1365 You can pick up hyperlinks using the @code{planner-annotation-as-kill}
1366 function.
1368 @defun planner-annotation-as-kill
1369 Create a context-sensitive hyperlink for the current buffer and copy
1370 it to the kill ring. When called with a prefix argument, prompt for
1371 the link display name.
1372 @end defun
1374 You can then paste it into any Planner buffer by using @kbd{M-x yank}
1375 or the keyboard shortcut.
1377 Alternatively, you can create hyperlinks by typing them directly, using
1378 the syntax defined by Muse. Anything inside double square brackets will
1379 be treated as a link. For example, if you type @samp{[[GroceryList]]} in
1380 a Planner buffer, you will end up with a link to a page called
1381 @samp{GroceryList}. @inforef{Implicit Links, Bare URLs WikiNames and
1382 InterWiki links, muse}, for more information about Muse syntax.
1384 Hyperlinks are a powerful feature of Planner. You can use them to
1385 hyperlink to mail, news, Web pages, and even IRC connections. See the
1386 section on @ref{Managing Your Information} to find out how to enable
1387 support for various parts of Emacs. Want to add a new hyperlink
1388 scheme? Check out the source code for examples or ask on the mailing
1389 list for help.
1391 @node Example Page, Review, Hyperlinks, Getting Started
1392 @comment  node-name,  next,  previous,  up
1393 @section Example Page
1394 @cindex example page
1395 @cindex planning page, example
1397 An example planner file is given below. You'll notice that Planner
1398 does not have a well-defined user interface. Rather, it's free-form
1399 and open, allowing you to adapt it to your preferences.
1401 @example
1402 ----------------------------------------------------------------------
1403 * Tasks
1405 #B  _ Join http://mail.gna.org/listinfo/planner-el-discuss/ (TaskPool)
1406 #B  _ Browse through the Planner info manual (TaskPool)
1407 #B  _ Add (plan) to the end of my ~/.emacs
1408 #B  X Learn how to schedule a task (TaskPool)
1410 * Schedule
1412 18:00 | 19:00 | Learn how to use Planner
1414 * Notes
1416 Notes are free-form. You can put anything you want into this.
1418 .#1 This is note number one
1420 Notes on note number one!
1422 .#2 This weird ".#2" syntax is used for allout.el enumerated lists
1424 It makes using allout-mode very handy.
1426 @end example
1428 @node Review,  , Example Page, Getting Started
1429 @comment  node-name,  next,  previous,  up
1430 @section Review
1432 @itemize
1434 @item @emph{Ideas for using planner more effectively:}
1436 @itemize
1437 @item
1438 Add @code{(plan)} to the end of your @file{~/.emacs} so that you are
1439 reminded about your tasks every day.
1441 @item
1442 Bind useful functions to shortcut keys and get used to creating tasks
1443 and notes from anywhere.
1445 @item
1446 Think about how you plan your day and look for ways to improve it. Ask
1447 the mailing list (@pxref{Getting Help}) for tips.
1449 @item
1450 Browse the rest of this manual, the source code, and other resources on
1451 the Net for tidbits you can use.
1453 @item Have fun!
1454 @end itemize
1456 @item @emph{Useful functions outside planner buffers:}
1458 @itemize
1459 @item @code{planner-create-task-from-buffer}
1460 @item @code{remember}
1461 @item @code{planner-goto-today}
1462 @item @code{planner-goto}
1463 @item @code{plan}
1464 @end itemize
1466 @item @emph{Useful functions inside planner buffers:}
1468 @itemize
1469 @item @kbd{C-c C-t} (@code{planner-create-task-from-buffer})
1470 @item @kbd{C-c C-x} (@code{planner-task-done})
1471 @item @kbd{M-x planner-edit-task-description}
1473 @item
1474 @kbd{C-c C-c} (@code{planner-copy-or-move-task}), @kbd{M-x
1475 planner-copy-or-move-region}
1477 @item @kbd{M-x planner-replan-task}
1478 @item @kbd{M-x planner-delete-task}
1480 @item
1481 @key{M-p} (@code{planner-raise-task}) and @key{M-n}
1482 (@code{planner-lower-task})
1484 @item @key{C-M-p} (@code{planner-raise-task-priority}) and
1485       @key{C-M-n} (@code{planner-lower-task-priority}),
1486 @item @code{planner-replan-note}
1487 @item @code{planner-update-note}
1488 @end itemize
1490 @end itemize
1492 That's all you need to know in order to use Planner as a basic TODO and
1493 notes manager, but there's a whole lot more. Read through this manual
1494 and our mailing list archives (@pxref{Getting Help}) for lots of
1495 wonderful ideas about planning in Emacs!
1497 @node More about Planner, Managing Your Information, Getting Started, Top
1498 @comment  node-name,  next,  previous,  up
1499 @chapter More about Planner
1501 @menu
1502 * Navigation::                  
1503 * More about Tasks::            
1504 * More about Notes::            
1505 * Making Files Pretty::         
1506 * Annotations::                 
1507 * Interactive Lisp::            planner-lisp.el
1508 * Publishing::                  planner-publish.el
1509 * Experimental Functions::      planner-experimental.el
1510 @end menu
1512 @node Navigation, More about Tasks, More about Planner, More about Planner
1513 @comment  node-name,  next,  previous,  up
1514 @section Starting with Day Pages
1516 @command{planner-goto-today} opens today's page. Day pages are named
1517 @samp{YYYY.MM.DD} and contain your notes for the day. They can also be
1518 named @samp{YYYY-MM-DD} if you prefer -- just customize the value of
1519 @var{planner-date-separator}.
1521 You should see a file that looks like this:
1523 @example
1524 * Tasks
1527 * Schedule
1529 * Notes
1530 @end example
1532 You can type anything you want into this file.  You can add or delete
1533 sections.  When you save, Emacs stores your information in
1534 @code{planner-directory}.
1536 Use the following commands to navigate through day pages:
1538 @defun plan
1539 Start planning the day.  If @code{planner-carry-tasks-forward} is
1540 non-nil, copy the most recent unfinished tasks to today's page, else
1541 open the most recent page.
1542 @end defun
1544 @defun planner-goto (@kbd{C-c C-j C-d})
1545 Prompt for a date using a calendar pop-up and display the
1546 corresponding day page.  You can specify dates partially.  The current
1547 year and month are used if omitted from the input.  For example, if
1548 today is 2004.05.05, then
1550 @itemize
1551 @item @kbd{+1} is one day from now, or @samp{2004.05.06}
1552 @item @kbd{-1} is one day before now, or @samp{2004.05.04}
1553 @item @kbd{12} is equivalent to @samp{2004.05.12}
1554 @item @kbd{8.12} is equivalent to @samp{2004.08.12}
1555 @item @kbd{2005.08.12} is a full date specification
1556 @end itemize
1558 In the calendar buffer, you can also left-click or press @key{RET} on
1559 a date to select it.
1560 @end defun
1562 @defun planner-goto-today (@kbd{C-c C-j C-j})
1563 Display today's page. Create the page if it does not yet exist.
1564 @end defun
1566 @defun planner-goto-tomorrow (@kbd{C-c C-j C-t})
1567 Goto the planner page days @var{after} the currently displayed date.
1568 If @var{days} is nil, go to the day immediately after the currently
1569 displayed date.  If the current buffer is not a daily planner page,
1570 calculate date based on today.
1571 @end defun
1573 @defun planner-goto-yesterday (@kbd{C-c C-j C-y})
1574 Goto the planner page @var{days} before the currently displayed date.
1575 If @var{days} is nil, go to the day immediately before the currently
1576 displayed date.  If the current buffer is not a daily planner page,
1577 calculate date based on today.
1578 @end defun
1580 @defun planner-goto-most-recent
1581 Go to the most recent day with planning info.
1582 @end defun
1584 @defun planner-goto-previous-daily-page
1585 Goto the last plan page before the current date.
1586 The current date is taken from the day page in the current
1587 buffer, or today if the current buffer is not a planner page.
1588 Do not create pages if they do not yet exist.
1589 @end defun
1591 @defun planner-goto-next-daily-page
1592 Goto the first plan page after the current date.
1593 The current date is taken from the day page in the current
1594 buffer, or today if the current buffer is not a planner page.
1595 Do not create pages if they do not yet exist.
1596 @end defun
1598 @defun planner-goto-plan-page page
1599 Opens @var{page} in the the @code{planner-project} Wiki.  Use
1600 @code{planner-goto} if you want fancy calendar completion.
1601 @end defun
1603 @defun planner-show date
1604 Show the plan page for @var{date} in another window, but don't select
1605 it.  If no page for @var{date} exists, return nil.
1606 @end defun
1609 @node More about Tasks, More about Notes, Navigation, More about Planner
1610 @comment  node-name,  next,  previous,  up
1611 @section More about Tasks
1612 @cindex tasks, more about
1614 This section is divided into three parts. In the first part, you can
1615 read about all the options, strategies and commands to help you
1616 efficiently add new tasks to your planner. In the second part, we'll go
1617 over all of the aspects of Planner that relate to organizing, editing,
1618 rescheduling and viewing the tasks you've already created. Finally,
1619 we'll cover some ways to step back and look at various reports and
1620 overviews that can be generated from your planner pages.
1622 You may also be interested in tracking time spent on tasks with
1623 @ref{Timeclock} and estimating project completion time with
1624 @ref{Schedule} (also see @pxref{schedule.el}).
1626 @menu
1627 * Creating New Tasks::          
1628 * Organizing Your Tasks::       
1629 * Task Reports and Overviews::  
1630 @end menu
1632 @node Creating New Tasks, Organizing Your Tasks, More about Tasks, More about Tasks
1633 @comment  node-name,  next,  previous,  up
1634 @subsection Creating New Tasks
1635 @cindex tasks, creating
1637 Planner makes it very easy to quickly add something to your list of
1638 tasks. Once you get used to the basics of
1639 @command{planner-create-task-from-buffer}, you might want to take a
1640 closer look at some things in Planner that can help you create new tasks
1641 in a way that fits with your system.
1643 @menu
1644 * Creating a Task::             
1645 * Task Priorities::             
1646 * Task IDs::                    planner-id.el
1647 * Cyclic Tasks::                planner-cyclic.el
1648 * Task Detail::                 
1649 * Deadlines::                   planner-deadline.el
1650 @end menu
1652 @node Creating a Task, Task Priorities, Creating New Tasks, Creating New Tasks
1653 @comment  node-name,  next,  previous,  up
1654 @subsubsection Creating a Task
1655 @cindex tasks, creating
1657 You can create a task from any buffer in Emacs by invoking
1658 @command{M-x planner-create-task-from-buffer}.
1660 This command does more than just add an item to your list of tasks. It
1661 also connects that item to some useful context information.
1663 If you create a task while viewing any buffer other than a Planner
1664 day page, Planner will associate the task with a hyperlink to that
1665 buffer. Try it now by creating a task from this Info buffer.
1667 @enumerate
1668 @item @kbd{M-x planner-create-task-from-buffer}
1669 @item
1670 When prompted for the task name, enter @kbd{Learn how to change a task's
1671 status} and press @key{RET}.
1673 @item
1674 When prompted for the date, press @key{RET} to schedule the task for
1675 today.
1677 @item
1678 When prompted for the project page, press @key{RET} to accept the
1679 default page of @samp{TaskPool}. This is a page for tasks not connected
1680 to a larger plan.
1682 @end enumerate
1684 Planner prompts you for two pieces of information when you ask it
1685 to create a task. First, it asks you when you would like to have the
1686 task show up in your planner. If you would like it to be scheduled for
1687 today, you can just hit @key{RET}. If you would like it to be
1688 scheduled for some day during the current month, you can just enter
1689 the date, without the month, like @samp{16}. If you would like it to
1690 be scheduled for some day in a future month of the current year, you
1691 can enter just the month and date, like @samp{06.16}. If you would
1692 like to schedule something for next year, then enter the full date,
1693 like @samp{06.16.2005}. If you do not want this task to appear on a
1694 day page at all, you can enter @samp{nil}.
1696 The second piece of information Planner asks for is the name of
1697 the project to associate the task with. In the above example, you
1698 associated the task with the project ``TaskPool'', which means that
1699 you did not want to associate the task with a particular project or
1700 goal in your life. Another way to do this is to answer the project
1701 prompt by entering @samp{nil}. But instead, you might enter
1702 @samp{LearnPlanner} as the project. This creates a new page called
1703 ``LearnPlanner'' in your planner directory and places an entry for the
1704 task on that page.
1706 The task then exists in two places: once on your day page, to show how
1707 it fits into your daily work; and once on a project page, to show how
1708 it fits into your larger projects and goals. In the future you might
1709 add related tasks like, ``Memorize Planner keybindings''. These
1710 tasks might be scattered over weeks or months worth of day pages, but
1711 as long as you enter the same project name for each, you will have a
1712 way to look at them all together on a single project page.
1714 Planner also creates hyperlinks to enable you to easily move back
1715 and forth between the day page system and the project page
1716 system. Each task on a day page will have a hyperlink to its project
1717 page. Each task on a project page will have a hyperlink to its day
1718 page.
1720 After using Planner for a while, you may find yourself with quite
1721 a few project pages. Keep in mind that completion is enabled at the
1722 project prompt when you create a task, so hitting @kbd{SPC} or
1723 @kbd{TAB} at the prompt will show you a list of your current project
1724 pages.
1726 Once the task is created, you are returned to the buffer you were
1727 working in again, Planner gets out of your way, and you can go on
1728 about your business. Later on, when you decide to actually work on
1729 that ``Memorize Planner keybindings'' task, you will be able to
1730 follow the hyperlink from that task on your day or project page
1731 directly to the relevant node in the Planner info file!
1733 By default, @command{M-x planner-create-task-from-buffer} creates
1734 medium-priority tasks, marked with the letter @samp{B}.  But you can
1735 specify a particular priority or change the default (@pxref{Task
1736 Priorities}).
1738 You don't have to use @command{planner-create-task-from-buffer} to
1739 create tasks. You can also create new tasks manually by typing them
1740 directly on your day or project page in the format Planner expects. You
1741 can even still create hyperlinks by using Muse formatting as you
1742 manually type the new task (@pxref{Hyperlinks}). Keep in mind also that
1743 tasks do not have to be linked to any other page.
1745 For convenience, @command{planner-create-task-from-buffer} is bound to
1746 @kbd{C-c C-t} in Planner buffers.  You can bind
1747 @command{planner-create-task-buffer} to a shortcut key.  See the
1748 manual for your Emacs distribution to find out more about keybinding.
1750 @defun planner-create-task-from-buffer title date plan-page
1751 Create a new task named @var{title} on @var{date} based on the current
1752 buffer.
1754 With a prefix, associate the task with the current planner page.  If
1755 you create a task on a date page, you will be prompted for a plan
1756 page.  If you create a task on a plan page, you will be prompted for a
1757 day page.  If nil is specified, the task is created only on the
1758 current page.
1760 See @code{planner-create-task} for more information.
1762 The new task is created at the top or bottom of the first block of
1763 tasks on the scheduled day page (if any), depending on the value of
1764 @code{planner-add-task-at-end-flag}.
1765 @end defun
1767 @defun planner-create-task title date annotation plan-page
1768 Create a new task named @var{title} based on the current Wiki page.
1769 If @var{date} is non-nil, makes a daily entry on @var{date}, else
1770 makes an entry in today's planner page. It's assumed that the current
1771 Wiki page is the page you're using to plan an activity. Any time
1772 accrued to this task will be applied to that page's name in the
1773 timelog file, assuming you use timeclock (@pxref{Time Intervals, , ,
1774 Emacs, GNU Emacs Manual}). If @var{annotation} is non-nil, it will be
1775 used for the page annotation. If @var{plan-page} is non-nil, the task
1776 is associated with the given page.
1778 With a prefix, associate the task with the current planner page.  If
1779 you create a task on a date page, you will be prompted for a plan
1780 page.  If you create a task on a plan page, you will be prompted for a
1781 day page.  If nil is specified, the task is created only on the
1782 current page.
1784 You probably want to call @code{planner-create-task-from-buffer}
1785 instead.
1787 The new task is created at the top or bottom of the first block of
1788 tasks on the scheduled day page (if any), depending on the value of
1789 @code{planner-add-task-at-end-flag}.
1790 @end defun
1792 @node Task Priorities, Task IDs, Creating a Task, Creating New Tasks
1793 @comment  node-name,  next,  previous,  up
1794 @subsubsection Task Priorities
1796 You can set the priority of a task when you create it, rather than
1797 waiting to adjust it after the fact. In order to do this, call the
1798 function corresponding to the priority you want. You probably want to
1799 bind these functions to some keys if you intend to use them much.
1801 @itemize
1802 @item @code{planner-create-high-priority-task-from-buffer}
1803 creates a task with priority @samp{A}.
1805 @item @code{planner-create-medium-priority-task-from-buffer}
1806 creates a task with priority @samp{B}.
1808 @item @code{planner-create-low-priority-task-from-buffer}
1809 creates a task with priority @samp{C}.
1810 @end itemize
1812 Or, you can change the default priority of
1813 @command{planner-create-task-from-buffer} by customizing
1814 @var{planner-default-task-priority}.
1816 You can actually use just one general priority, but using more than
1817 one color-codes your tasks and gives you a better overview of your
1818 day.
1821 @node Task IDs, Cyclic Tasks, Task Priorities, Creating New Tasks
1822 @comment  node-name,  next,  previous,  up
1823 @subsubsection Task IDs
1824 @cindex @file{planner-id.el}, using
1825 @cindex tasks, IDs
1827 After loading @file{planner.el}, make sure that @file{planner-id.el} is
1828 in your load path and add this to your @file{.emacs} (or @file{_emacs}):
1830 @example
1831 (require 'planner-id)
1832 @end example
1834 This module modifies the behavior of @file{planner.el}, adding global
1835 task IDs so that tasks can be edited and updated. Planner IDs are of
1836 the form @samp{@{@{Identifier:Number@}@}}.
1838 @subheading Options
1840 @defopt planner-id-add-task-id-flag
1841 Non-nil means automatically add global task IDs to newly-created
1842 tasks. If nil, use @command{planner-id-add-task-id} to add IDs to
1843 existing tasks, or @command{planner-id-add-task-id-to-all} to add to
1844 all tasks on the current page.
1845 @end defopt
1847 @defopt planner-id-update-automatically
1848 Non-nil means automatically update linked tasks whenever a page is
1849 saved. If nil, use @command{planner-update-task} to update the linked
1850 task. By default, linked tasks are automatically updated.
1851 @end defopt
1853 @defopt planner-id-tracking-file
1854 File that contains ID tracking data. This file is automatically
1855 overwritten.
1856 @end defopt
1858 @subheading Functions
1860 The following interactive functions are defined in @file{planner-id.el}:
1862 @defun planner-id-jump-to-linked-task &optional info
1863 Display the linked task page. If @var{info} is specified, follow that
1864 task instead.
1865 @end defun
1867 @defun planner-id-add-task
1868 Add a task ID for the current task if it does not have one
1869 yet. Update the linked task page, if any.
1870 @end defun
1872 @defun planner-id-update-tasks-on-page &optional force
1873 Update all tasks on this page. Completed or cancelled tasks are not
1874 updated. This can be added to @code{write-file-functions}. If
1875 @var{force} is non-nil, completed and cancelled tasks are also
1876 updated.
1877 @end defun
1879 @defun planner-id-add-task-id-to-all
1880 Add a task ID for all the tasks on the page. Update the linked page,
1881 if any.
1882 @end defun
1884 @defun planner-id-search-id id
1885 Search for all occurrences of @var{id}.
1886 @end defun
1888 @defun planner-id-follow-id-at-point
1889 Display a list of all pages containing the ID at point.
1890 @end defun
1892 @defun planner-id-follow-id-at-mouse event
1893 Display a list of all pages containing the ID at mouse. @var{event} is
1894 the mouse event.
1895 @end defun
1897 @node Cyclic Tasks, Task Detail, Task IDs, Creating New Tasks
1898 @comment  node-name,  next,  previous,  up
1899 @subsubsection Cyclic Tasks
1900 @cindex @file{planner-cyclic.el}, using
1901 @cindex tasks, cyclic
1902 @cindex cyclic tasks
1903 @cindex recurring tasks
1905 If there are tasks that you have to do regularly, you can have Planner
1906 schedule those tasks automatically.
1908 Make sure that @file{planner-cyclic.el} is in your load path and add
1909 this to your @file{.emacs} (or @file{_emacs}):
1911 @example
1912 (require 'planner-cyclic)
1913 @end example
1915 Create a diary file named @file{~/.diary.cyclic-tasks}
1916 (or the value of @code{planner-cyclic-diary-file}). Here is an example:
1918 @example
1919 Tuesday #B0 _ Study Japanese
1920 Friday #B0 _ Study Japanese (JapaneseStudies)
1921 @end example
1923 The first will be a plain task, the second will be linked.  The first
1924 line will automatically create its task every Tuesday, while the
1925 second will create it every Friday.
1927 You can schedule tasks in a variety of ways. This module uses the same
1928 syntax for specifying when tasks will be scheduled as the Emacs diary
1929 uses for appointments and events. See @ref{Date Formats, the GNU Emacs
1930 Manual, Date Formats,emacs, the GNU Emacs Manual}, and @ref{Sexp Diary
1931 Entries, the GNU Emacs Lisp Reference Manual, Sexp Diary
1932 Entries,elisp, the GNU Emacs Lisp Reference Manual}, for a full
1933 description of the possibilities.
1935 By default, planner-cyclic creates multiple tasks if you let tasks build
1936 up (that is, the next Tuesday rolls around and you @emph{still} haven't
1937 marked the task as done.) To turn off this behavior:
1939 @example
1940 (setq planner-cyclic-diary-nag nil)
1941 @end example
1943 @subheading Functions
1945 @file{planner-cyclic-diary} includes the following interactive
1946 functions:
1948 @defun planner-cyclic-create-tasks-maybe
1949 Maybe create cyclic tasks. This will only create tasks for future
1950 dates or today.
1951 @end defun
1953 @node Task Detail, Deadlines, Cyclic Tasks, Creating New Tasks
1954 @comment  node-name,  next,  previous,  up
1955 @subsubsection Task Detail
1956 @cindex tasks
1958 You may find your planner pages getting very full, so that you want to
1959 have one broad task entry be linked to a more specific list of
1960 sub-tasks. Or, maybe you want to have a number of notes linked to a
1961 particular task.
1962 @cindex tasks, sub-
1963 @cindex tasks, meta-
1964 @cindex meta-tasks
1965 @cindex sub-tasks
1967 This can be done with targets.  You can have a task that is really a
1968 meta-task:
1970 @example
1971 #A1  _ Do things in RevelleLog#13 @{@{Tasks:101@}@} (RevelleLog)
1972 @end example
1974 @samp{RevelleLog#13} could then be a list of sub-tasks in the form of
1975 a note, or any kind of note.
1977 Or, instead of pointing to a particular note on @samp{RevelleLog}, you
1978 could have the whole page be tasks that you enter in manually, without
1979 linking them to another page. You can just type them in like this:
1981 @example
1982 #A1  _ First specific thing to do
1983 @end example
1985 This way, the tasks will only appear on this specific project page,
1986 and not on any daily page, so you only see them when you want to look
1987 up all of the specific tasks associated with @samp{#A1  _ Do things in
1988 RevelleLog @{@{Tasks:101@}@} (RevelleLog)}.
1990 As you can see, the ability to manually enter tasks is one of
1991 Planner's nicest features. It allows you to create tasks that are
1992 not assigned to a specific date (by manually entering them on a
1993 project page with no date) or to a specific project (by manually
1994 entering them on a day page with no project). Yet as long as you enter
1995 them using the syntax it understands, Planner will continue to
1996 recognize them as tasks.
1998 Another way to have a task not be connected to a particular date is to
1999 do @kbd{C-c C-c} (@code{planner-copy-or-move-task}) and specify
2000 @samp{nil} when asked for the date.
2002 If you would like to see a list of all of your unfinished scheduled
2003 tasks, do @kbd{M-x planner-list-unfinished-tasks}.  It is only intended
2004 to give you an overview.  Any editing you want to do, like marking tasks
2005 complete or editing their description, still needs to be done on one of
2006 the tasks' ``real'' planner pages.
2008 @node Deadlines,  , Task Detail, Creating New Tasks
2009 @comment  node-name,  next,  previous,  up
2010 @subsubsection Deadlines
2011 @cindex tasks, deadlines for
2012 @cindex deadlines, task
2013 @cindex @file{planner-deadline.el}, using
2015 You can use @file{planner-deadline.el} to automatically recalculate
2016 days to a deadline by adding @code{(require 'planner-deadline)} to
2017 your @file{~/.emacs}. With the default setup, make your tasks of the
2018 form
2020 @example
2021 #A0 _ Some task @{@{Deadline: 2004.09.12@}@}
2022 @end example
2024 (Note: There must be at least one space after the colon.)
2026 After you run @code{planner-deadline-update} to update task descriptions,
2027 the task will be of the form
2029 @example
2030 #A0 _ Some task @{@{Deadline: 2004.09.12 - 2 days@}@}
2031 @end example
2033 @subheading Options
2035 @defopt planner-deadline-regexp
2036 Regular expression for deadline data.
2037 The special deadline string should be regexp group 1. The
2038 date (YYYY.MM.DD) should be regexp group 2.
2039 @end defopt
2041 @subheading Functions
2043 @defun planner-deadline-update
2044 Replace the text for all tasks with deadlines. Deadlines are of the
2045 form @samp{@{@{Deadline: YYYY.MM.DD@}@}} by default.
2046 @end defun
2048 @defun planner-deadline-change &optional date
2049 Change the deadline of current task to @var{date}. If @var{date} is nil,
2050 remove deadline.
2051 @end defun
2053 @node Organizing Your Tasks, Task Reports and Overviews, Creating New Tasks, More about Tasks
2054 @comment  node-name,  next,  previous,  up
2055 @subsection Organizing Your Tasks
2056 @cindex tasks, organizing
2057 @cindex tasks, old
2059 Okay, now that you've gotten the hang of creating tasks, you're probably
2060 facing a really long list of things to do. How can you organize them so
2061 that they don't overwhelm you? Planner gives you a number of strategies
2062 for dealing with large numbers of tasks.
2064 @enumerate
2065 @item Arrange your tasks in the rough order you're going to do them.
2066 @item Use #A, #B and #C task priorities to differentiate between
2067       high-priority, normal and low-priority tasks.
2068 @item Schedule your tasks onto different days.
2069 @item Group your tasks into plan pages.
2070 @item Don't schedule all your tasks.
2071 @end enumerate
2073 @enumerate
2075 @item @emph{Task order}
2077 To remind yourself to do tasks in a certain order, simply edit the
2078 lines so that they're in the order you want. You can use normal
2079 editing commands like kill, yank and transpose-line to reorder the
2080 tasks, or use @key{M-p} (@code{planner-raise-task}) and @key{M-n}
2081 (@code{planner-lower-task}) to rearrange the tasks.
2083 @item @emph{Task priorities}
2085 By default, tasks are created with medium priority (@samp{#B}). You
2086 can make a task high-priority (@samp{#A}) or low-priority (@samp{#C})
2087 by manually editing the task and calling M-x planner-update-task to
2088 update the linked page. Alternatively, you can use @key{C-M-p}
2089 (@code{planner-raise-task-priority}) and @key{C-M-n}
2090 (@code{planner-lower-task-priority}) to modify the task and update the
2091 linked page.
2093 You can edit the priority of a task using @kbd{M-x
2094 planner-edit-task-priority}, or manually edit it and call @kbd{M-x
2095 planner-update-task} to update tasks on the linked page.
2097 @item @emph{Schedule your tasks on different days}
2099 You don't have to do everything today. Is this a task you would rather
2100 do tomorrow? Schedule it for then instead. You can specify @samp{+n}
2101 or @samp{-n} whenever you are asked for a date, where @var{n} is the
2102 number of days before or after the current file's date or today.
2103 Don't over-procrastinate things, though!
2105 @item @emph{Plan pages}
2107 Plan pages let you group related tasks and notes together for easy
2108 reference. For example, you could have a plan page for each major
2109 project or goal in your life, like @samp{GoodHealth} or
2110 @samp{FurtherStudies}.
2112 Although plan pages start by grouping everything under a @samp{*
2113 Tasks} header, you can organize your plan pages in different ways. For
2114 example, you can separate groups of tasks with blank lines, and
2115 Planner will sort tasks within each group.
2117 @item @emph{Tasks without dates}
2119 Plan pages also allow you to have undated tasks or tasks with no
2120 particular deadlines. This keeps your daily task list small and
2121 manageable while making it easier for you to find things to do if you
2122 have free time. Make sure you check your plan pages regularly so that
2123 you don't completely forget about them.
2125 For automated scheduling of the next task on a plan page after you
2126 complete a task, see the section in
2127 @uref{http://sacha.free.net.ph/notebook/emacs/planner-config.el} named
2128 ``Schedule next undated task from same project''.
2130 @end enumerate
2133 @menu
2134 * Multiple Projects::           
2135 * Viewing Tasks::               
2136 * Modifying Tasks::             
2137 * Carrying Over Unfinished Tasks::  
2138 * Task Numbering::              
2139 * Task Ranks::                  planner-rank.el
2140 * Grouping Tasks::              planner-trunk.el
2141 @end menu
2143 @node Multiple Projects, Viewing Tasks, Organizing Your Tasks, Organizing Your Tasks
2144 @comment  node-name,  next,  previous,  up
2145 @subsubsection Associating Tasks with Multiple Projects
2146 @cindex multiple projects
2147 @cindex @file{planner-multi.el}, using
2149 You can use @file{planner-multi.el} to associate a task with more than
2150 one project. That way, you can easily keep GTD-style context lists as
2151 well as project-related lists.
2153 To use multiple projects, add the following to your @samp{~/.emacs}:
2155 @example
2156 (require 'planner-multi)
2157 @end example
2159 Under GNU Emacs, you can specify multiple projects by separating them
2160 with a single space. For example, you can specify @kbd{planner doc}
2161 when creating a task to associate the task with those two projects.
2163 Under XEmacs, you can specify multiple projects by typing @kbd{RET}
2164 after each entry and terminating the list with another @kbd{RET}. For
2165 example, to specify @kbd{planner} and @kbd{doc}, you would type
2166 @kbd{planner RET doc RET RET} at the prompt.
2168 If you want to see an overview of all of your tasks as well as
2169 project- or context-specific lists, you can set
2170 @code{planner-multi-copy-tasks-to-page} to your overview page(s). For
2171 example, set it to @samp{TaskPool} to be able to see an overview of
2172 all of your unfinished tasks. You can also set this to multiple pages
2173 such as @samp{[[TasksByProject][p]] [[TasksByContext][c]]} and use
2174 @file{planner-trunk.el} to sort and organize tasks for easy reference.
2175 (@pxref{Grouping Tasks})
2177 @subheading Options
2179 @defopt planner-multi-copy-tasks-to-page
2180 Automatically copy newly-created tasks to the specified page.
2181 @end defopt
2183 By default, tasks are removed from
2184 @code{planner-multi-copy-tasks-to-page} when you call
2185 @code{planner-task-done} or @code{planner-task-cancelled}. If you
2186 prefer to keep a copy of the task, remove
2187 @code{planner-multi-remove-task-from-pool} from
2188 @code{planner-mark-task-hook}.
2190 If you want to use a different separator instead of spaces, customize
2191 the @code{planner-multi-separator} variable.
2193 @defopt planner-multi-separator
2194 String that separates multiple page references.
2196 For best results, this should be something recognized by
2197 @code{muse-link-at-point} so that links are highlighted
2198 separately.
2199 @end defopt
2201 @node Viewing Tasks, Modifying Tasks, Multiple Projects, Organizing Your Tasks
2202 @comment  node-name,  next,  previous,  up
2203 @subsubsection Viewing tasks
2204 @cindex tasks, viewing
2206 Review the tasks scheduled for today by typing @kbd{M-x
2207 planner-goto-today}.  If you created the task from the previous
2208 section in this tutorial, you should see a line that looks like
2210 @example
2211 #A _ Learn how to change a task's status from Tasks (TaskPool)
2212 @end example
2214 If you have @code{planner-use-task-numbers} set to non-nil, you will see
2215 something like the following instead.
2217 @example
2218 #A0 _ Learn how to change a task's status from Tasks (TaskPool)
2219 @end example
2221 From left to right, these are what the symbols mean:
2223 @itemize
2224 @item @samp{A} - Priority.  A (high)
2225 @item
2226 @samp{0} - Priority number.  It is calculated whenever you save the file
2227 or call @command{planner-renumber-tasks}, provided that
2228 @code{planner-use-task-numbers} is non-nil.  Tasks are numbered in
2229 ascending order according to priorities.
2230 @item @samp{_} - Status.  _ (unfinished)
2231 @end itemize
2233 If you click on @samp{Tasks} or press @key{RET} while your cursor is
2234 in the link, Emacs will display the previous info page.
2236 If you select @samp{TaskPool}, Emacs will display the @samp{TaskPool}
2237 plan page.  Plan pages organize your tasks and notes about a project
2238 in one file.
2240 @subheading Functions
2242 You can use @command{planner-seek-next-unfinished-task} to move to the
2243 next unfinished task on the current page.
2245 @defun planner-list-tasks-with-status status &optional pages
2246 Display all tasks that match the STATUS regular expression on all day
2247 pages.  The PAGES argument limits the pages to be checked in this
2248 manner:
2250 @itemize
2251 @item @code{t}: check all pages
2252 @item regexp: search all pages whose filenames match the regexp
2253 @item list of page names: limit to those pages
2254 @item alist of page/filenames: limit to those pages
2255 @end itemize
2257 Called interactively, this function will search day pages by
2258 default. You can specify the start and end dates or leave them as
2259 nil to search all days. Calling this function with an interactive
2260 prefix will prompt for a regular expression to limit pages.
2261 Specify @samp{.} or leave this blank to include all pages.
2263 This function could take a long time.
2264 @end defun
2266 @defun planner-list-unfinished-tasks &optional pages
2267 Display all unfinished tasks. @var{pages} follows
2268 planner-list-tasks-with-status.
2269 @end defun
2271 @defun planner-jump-to-linked-task task-info
2272 Display the task page linked to by the current task or
2273 @var{task-info}.
2274 @end defun
2276 @node Modifying Tasks, Carrying Over Unfinished Tasks, Viewing Tasks, Organizing Your Tasks
2277 @comment  node-name,  next,  previous,  up
2278 @subsubsection Modifying Tasks
2279 @cindex tasks, modifying
2280 @cindex tasks, editing
2282 To select a task, move your cursor to the line containing the task.
2284 Change a task's priority (@samp{A}, @samp{B} or @samp{C}) by editing
2285 the line. @samp{#A} tasks are important. @samp{#B} are medium
2286 priority. @samp{#C} are low priority. Whenever you save the file or
2287 call @kbd{M-x planner-fix-tasks}, tasks are sorted and numbered
2288 according to priority and status.
2290 Change a task's status by calling one of the following functions:
2292 @itemize
2293 @item planner-task-in-progress @samp{o} (@kbd{C-c C-z})
2294 @item planner-task-done @samp{X} (@kbd{C-c C-x})
2295 @item planner-task-cancelled @samp{C} (@kbd{C-c C-S-x})
2296 @item planner-task-delegated @samp{D}
2297 @item planner-task-pending @samp{P}
2298 @item planner-task-open @samp{_}
2299 @end itemize
2301 After changing the status using a function, look at the
2302 @samp{TaskPool} plan page.  The task is also updated on the linked
2303 page.  If you changed the task status manually by replacing the status
2304 with another character, you will need to call
2305 @command{planner-update-task} to update the linked page.
2307 To reschedule a task, call @command{planner-copy-or-move-task} (@kbd{C-c
2308 C-c}) and choose a new date.  You can mark a region and type @kbd{M-x
2309 planner-copy-or-move-region} to reschedule all the contained tasks to a
2310 different date.  Enter @samp{nil} for the date if you don't want the
2311 task or group of tasks to appear on any date page at all anymore. This
2312 is a good way to ``de-schedule'' a task for the time being, but still
2313 keep it linked to a plan page for possible future scheduling.
2315 To change the plan page associated with a task, call
2316 @command{planner-replan-task}.  Enter @samp{nil} for the plan page if
2317 you don't want the task to appear on any plan page anymore. If you
2318 precede the command with a prefix argument, the text of the original
2319 plan page will appear in the prompt for easy editing.
2321 Since the same task may exist on two or more pages, such as a date page
2322 and a plan page, it is dangerous to edit the description of the task by
2323 hand. You should not do it unless you want to make the exact same
2324 changes on all its linked pages.
2326 Instead of doing this by hand, you should use
2327 @command{planner-edit-task-description}. This will prompt you for the
2328 changes to the task description and then update all the other pages to
2329 which the task is linked.  Or, you can just use
2330 @command{planner-delete-task} to remove the task from both pages, and
2331 then create it again with the new desired description.
2333 To remind yourself to do tasks in a certain order, simply edit the
2334 lines so that they're in the order you want.
2335 @command{planner-raise-task} and @command{planner-lower-task} update
2336 the priorities on linked pages automatically. You can organize tasks
2337 into groups by putting a blank line between groups of tasks.
2338 Planner will maintain the groupings and only sort the tasks within
2339 that group.
2341 @subheading Functions
2343 @defun planner-replan-task page-name
2344 Change or assign the plan page for the current task.  @var{page-name}
2345 is the new plan page for the task. Use
2346 @code{planner-copy-or-move-task} if you want to change the date. With a
2347 prefix, provide the current link text for editing.
2348 @end defun
2350 @defun planner-raise-task-priority
2351 Change a low-priority task to a medium-priority task and a
2352 medium-priority task to a high-priority task (C to B to A).
2353 @end defun
2355 @defun planner-lower-task-priority
2356 Change a high-priority task to a medium-priority task and a
2357 medium-priority task to a low-priority task (A to B to C).
2358 @end defun
2360 @defun planner-raise-task arg
2361 Move a task up @var{arg} steps.  By default, @var{arg} is 1.
2362 @end defun
2364 @defun planner-lower-task  arg
2365 Move a task down @var{arg} steps.  By default, @var{arg} is 1.
2366 @end defun
2368 @defun planner-edit-task-description description
2369 Change the description of the current task, updating the linked page
2370 if any.
2371 @end defun
2373 @defun planner-delete-task
2374 Delete this task from the current page and the linked page.
2375 @end defun
2377 @defun planner-update-task
2378 Update the current task's priority and status on the linked page.
2379 Tasks are considered the same if they have the same description.
2380 This function allows you to force a task to be recreated if it
2381 disappeared from the associated page.
2382   
2383 Note that the text of the task must not change. If you want to be able
2384 to update the task description, see @code{planner-edit-task-description}
2385 or @file{planner-id.el}.
2386 @end defun
2388 See @command{planner-install-extra-task-keybindings} for additional
2389 task-related shortcuts.
2391 @node Carrying Over Unfinished Tasks, Task Numbering, Modifying Tasks, Organizing Your Tasks
2392 @comment  node-name,  next,  previous,  up
2393 @subsubsection Carrying Over Unfinished Tasks
2394 @cindex tasks, carrying over
2396 Sometimes you won't be able to cross off all the tasks on your list.
2397 Planner makes it easy for you to keep track of things you still have
2398 to do by automatically rescheduling unfinished tasks from the past few
2399 days. By default, the @command{plan} command searches for unfinished
2400 tasks from the last three days and reschedules them onto today. If you
2401 open Planner every day, this should cover weekends easily.
2403 It's a good idea to start Planner whenever you start Emacs. That way,
2404 Planner can help remind you about today's tasks, appointments, and other
2405 things. To automatically start Planner whenever you start up Emacs, add
2406 the following code to the end of your @file{~/.emacs}:
2408 @example
2409 (plan)
2410 @end example
2412 Now, every time you start Emacs (which should be more or less once a
2413 day), you'll see today's page. If you don't finish all the tasks today,
2414 you'll see them again tomorrow.
2416 It's a good idea to start Planner every time you start Emacs so that
2417 you get reminded about your task list. If you prefer to start Planner
2418 manually, remember to call @kbd{M-x plan} every so often to make sure
2419 that you don't forget any unfinished tasks. Safe in the knowledge that
2420 Planner tasks won't slip through the cracks (unlike little slips of
2421 paper that will invariably get mislaid), you can then get on with the
2422 rest of your life.
2424 If your increased productivity with Planner leads to a well-deserved
2425 two-week vacation, then you'll need to tell Planner to search more days
2426 for unfinished tasks. By using @kbd{M-x plan}, you can automatically
2427 bring forward tasks over a given number of days or even scan all the
2428 days since time immemorial. @kbd{C-u 15 M-x plan} reschedules all
2429 unfinished tasks from the last 15 days. @kbd{C-u -1 M-x plan} checks all
2430 of your past day pages for unfinished tasks.
2432 Like everything else in Planner, you can adapt @kbd{M-x plan} to your
2433 particular way of life. For example, if you find yourself starting up
2434 Emacs and Planner every day--including weekends--because it's just so
2435 much fun, you can set the @code{planner-carry-tasks-forward} to 1.
2436 This can make your Emacs startup marginally faster. On the other hand,
2437 if you normally start Emacs once a week, you can set it to 7 or 8. If
2438 you're worried about tasks dropping off your radar, you can set it to
2439 0. You can set the value of @var{planner-carry-tasks-forward} either
2440 with @key{M-x customize-variable RET planner-carry-tasks-forward RET},
2441 or by putting @code{(setq planner-carry-tasks-forward 3)} (replacing
2442 @code{3} with the value appropriate for what you want) in your
2443 @file{~/.emacs} file.
2445 On the other hand, you might prefer to reschedule tasks yourself. If
2446 you set @code{planner-carry-tasks-forward} to @code{nil}, then
2447 @command{M-x plan} and @code{(plan)} will bring you to the most recent
2448 page with unfinished tasks if there is no page for today. You can then
2449 use @command{planner-copy-or-move-task} and
2450 @command{planner-copy-or-move-region} to reschedule tasks. This is
2451 probably more hassle than it's worth, though, so let Planner take care
2452 of this for you.
2454 @subheading Options
2456 @defopt planner-carry-tasks-forward
2457 If non-nil, carry unfinished tasks forward automatically.
2458 If a positive integer, scan that number of days in the past.
2459 If 0, scan all days for unfinished tasks.
2460 If t, scan one day in the past (old behavior).
2461 If nil, do not carry unfinished tasks forward.
2462 @end defopt
2464 @subheading Functions
2466 @defun plan &optional force-days
2467 Start your planning for the day, carrying unfinished tasks forward.
2469 If @var{force-days} is a positive integer, search that many days in the
2470 past for unfinished tasks.
2471 If @var{force-days} is @code{0} or @code{t}, scan all days.
2472 If @var{force-days} is @code{nil}, use the value of
2473 @code{planner-carry-tasks-forward} instead, except t means scan only
2474 yesterday
2476 @end defun
2478 @defun planner-copy-or-move-task date force
2479 Reschedule the task for @var{date}. If @var{force} is non-nil, the
2480 task is moved regardless of status. It also works for creating tasks
2481 from a Note. Use @code{planner-replan-task} if you want to change the
2482 plan page in order to get better completion.
2483 @end defun
2485 @defun planner-copy-or-move-region beg end date muffle-errors
2486 Move all tasks from @var{beg} to @var{end} to @var{date}.
2487 @code{planner-copy-or-move-region} will copy or move all tasks from
2488 the line containing @var{beg} to the line just before @var{end}. If
2489 @var{muffle-errors} is non-nil, no errors will be reported.
2490 @end defun
2492 @node Task Numbering, Task Ranks, Carrying Over Unfinished Tasks, Organizing Your Tasks
2493 @comment  node-name,  next,  previous,  up
2494 @subsubsection Task Numbering
2496 By default, tasks are numbered according to their position on the
2497 page.  Task numbers allow you to refer to tasks using Muse links.
2498 For example, the @samp{#A1} task in @file{2004.08.16} can be referred to
2499 as @samp{2004.08.16#A1}.
2501 Note that task numbers change every time you re-sort and re-number tasks
2502 with @code{planner-fix-tasks}.  As a result, they are only reliable for
2503 references to past tasks.
2505 If you find yourself not using this functionality, you can turn off task
2506 numbers by using the following option.
2508 @subheading Options
2510 @defopt planner-use-task-numbers
2511 Non-nil means use task numbers when creating tasks.  This allows you
2512 to refer to past tasks if your tasks are numbered appropriately.
2513 If you set this to nil, you can save space in your plan files.
2514 @end defopt
2516 @node Task Ranks, Grouping Tasks, Task Numbering, Organizing Your Tasks
2517 @comment  node-name,  next,  previous,  up
2518 @subsubsection Task Ranks
2519 @cindex ranking tasks
2520 @cindex tasks, ranking
2521 @cindex @file{planner-rank.el}, using
2523 @file{planner-rank.el} models Franklin Covey's Urgency and Importance
2524 principle. When you think about a task, there are two aspects in
2525 consideration: Urgency and Importance. You may want to do the most
2526 urgent things first, like answering an email, or you may want to do
2527 the most important things first, like reading this manual. Or much
2528 better, balance Urgency and Importance and decide what to do.
2530 @file{planner-rank.el} can help you balance.
2532 Urgency and Importance are both measured by scores from 0-9. The
2533 higher the score, the more you want to do it first. 9 stands for ``I
2534 should have done this'' and 0 stands for ``I can forget this''.
2536 If you are using the planner @ref{Deadlines} feature, the Urgency
2537 score is automatically calculated from how many days are left to meet
2538 the deadline. By default, it will score 9 if the task is overdue and 0
2539 if the deadline is years away. Please refer to the docstring of
2540 @code{planner-rank-deadline-urgency-map-list} for detail.
2542 The task rank is calculated from Urgency and Importance scores. As
2543 different people balance urgency and importance differently, a number
2544 of @code{planner-rank-calculate-rank-*} functions are provided. The
2545 algorithms vary from a simple average to something like a weighted
2546 root mean square deviation.
2548 The aggressive versions of these functions
2549 (@code{planner-rank-calculate-rank-*-aggressive}) will make sure if
2550 one of Urgency and Importance is high, the resulting rank will be high
2551 as well. @code{planner-rank-calculate-rank-weighted-*} functions weigh
2552 the Urgency and Important scores depending on
2553 @code{planner-rank-importance-vs-urgency-factor}.
2555 Call @code{planner-rank-test-algorithm} on each of the functions and
2556 check the result tables to see which one you like most, and set it to
2557 @code{planner-rank-rank-calculate-function}. Alternatively, accept the
2558 defaults and tweak them when you get a better feel for ranking.
2560 Once the Rank is calculated, the @ref{Task Priorities} will be
2561 automatically reset. If the Rank is greater than or equal to
2562 @code{planner-rank-priority-A-valve}, the task priority will be
2563 @samp{A}, if the Rank is between @code{planner-rank-priority-A-valve}
2564 and @code{planner-rank-priority-B-valve}, the priority will be @samp{B},
2565 else it will be @samp{C}.
2567 After setting the task importance and deadline, you can leave it as
2568 is. As the deadline approaches, the task priority will automatically
2569 be raised and the task re-colored to catch your eyes.
2571 If you are using @code{planner-sort-tasks} (see @pxref{Making Files
2572 Pretty}), you can set @code{planner-sort-tasks-key-function} to one of
2573 @code{planner-sort-tasks-by-rank},
2574 @code{planner-sort-tasks-by-importance}, and
2575 @code{planner-sort-tasks-by-urgency}.
2577 @subheading Options
2579 @defopt planner-rank-change-hook
2580 Functions to run after @code{planner-rank-change}.
2581 @end defopt
2583 @defopt planner-rank-priority-A-valve
2584 Tasks with rank greater than or equal to this value will be set to
2585 priority @samp{A}.
2586 @end defopt
2588 @defopt planner-rank-priority-B-valve
2589 Tasks with rank greater than or equal to this value and less than
2590 @code{planner-rank-priority-A-valve} will be set to priority
2591 @samp{B}. Tasks with rank less than this value will be set to priority
2592 @samp{C}.
2593 @end defopt
2595 @defopt planner-rank-deadline-urgency-map-list
2596 Defines how to calculate the Urgency score according to how many days
2597 are left to meet the deadline.
2598 @end defopt
2600 @defopt planner-rank-default-importance
2601 Default importance value for newly added rank.
2602 @end defopt
2604 @defopt planner-rank-default-urgency
2605 Default urgency value for newly added rank.
2606 @end defopt
2608 @defopt planner-rank-importance-vs-urgency-factor
2609 How much do you think importance is more ``important'' than urgency.
2610 This will be used in @code{planner-rank-calculate-rank-weighted-*}
2611 functions.
2612 @end defopt
2614 @defopt planner-rank-rank-calculate-function
2615 Define the function called to calculate rank.
2616 @end defopt
2618 @subheading Functions
2620 @defun planner-rank-change &optional importance urgency
2621 Set the Importance and Urgency of the current task.
2622 @end defun
2624 @defun planner-rank-update-current-task
2625 Recalculate rank for the current task.
2626 @end defun
2628 @defun planner-rank-update-all
2629 Recalculate rank for all tasks in the current page
2630 @end defun
2632 @defun planner-rank-update-all
2633 Recalculate rank for all tasks in the current page
2634 @end defun
2636 @node Grouping Tasks,  , Task Ranks, Organizing Your Tasks
2637 @comment  node-name,  next,  previous,  up
2638 @subsubsection Grouping Tasks with planner-trunk.el
2639 @cindex grouping tasks
2640 @cindex tasks, grouping
2641 @cindex @file{planner-trunk.el}, using
2643 @file{planner-trunk.el} helps you automatically group tasks according
2644 to a set of rules. It sorts and splits your tasks, adding a blank line
2645 between groups of tasks. For example, if today's page looks like this:
2647 @example
2648 * Tasks
2650 #B   _ Buy milk (GroceryShopping)
2651 #B   _ Learn how to use planner-trunk (PlannerMode)
2652 #B   _ Buy a notebook (Bookstore)
2653 #B   _ Buy cereal (GroceryShopping)
2654 #B   _ Set up my own planner-trunk rules (PlannerMode)
2655 #B   _ Customize my stylesheet (MuseMode)
2656 #B   _ Go for a health checkup (BetterHealth)
2657 @end example
2659 @noindent
2660 then you might want to group the tasks into: planner and muse,
2661 shopping list, and other items. If you set up the appropriate rules by
2662 customizing @code{planner-trunk-rule-list}, @file{planner-trunk.el}
2663 can automatically rewrite that section line this:
2665 @example
2666 * Tasks
2668 #B   _ Learn how to use planner-trunk (PlannerMode)
2669 #B   _ Set up my own planner-trunk rules (PlannerMode)
2670 #B   _ Customize my stylesheet (MuseMode)
2672 #B   _ Buy milk (GroceryShopping)
2673 #B   _ Buy a notebook (BookstoreShopping)
2674 #B   _ Buy cereal (GroceryShopping)
2676 #B   _ Go for a health checkup
2677 @end example
2679 @noindent
2680 In this case, you would set @code{planner-trunk-rule-list}
2681 to @code{(("." nil ("PlannerMode\\|MuseMode" "Shopping")))}.
2683 You can load @file{planner-trunk} with @kbd{M-x load-library RET
2684 planner-trunk RET} or add @code{(require 'planner-trunk)}. If you're
2685 not yet comfortable with Emacs Lisp, you can use @kbd{M-x
2686 customize-variable RET planner-trunk-rule-list RET} to edit this rule
2687 using an easy-to-use interface.
2689 WARNING: Do not keep non-task information in the Tasks section.
2690 planner-trunk will delete @strong{all} non-task lines from the Tasks
2691 section of your plan page in the process of grouping the tasks.
2693 After you set up @code{planner-trunk-rule-list}, use @command{M-x
2694 planner-trunk-tasks} to try out your rules until you're satistfied.
2696 If you want to do this automatically, you can use @code{(add-hook
2697 'planner-mode-hook 'planner-trunk-tasks)} to trigger it automatically
2698 whenever you open a Planner page.
2700 @node Task Reports and Overviews,  , Organizing Your Tasks, More about Tasks
2701 @subsection Task Reports and Overviews
2702 @cindex task reports
2703 @cindex task overviews
2704 @cindex reports, task
2705 @cindex overviews, task
2706 @cindex reports, accomplishment
2707 @cindex tasks, overview of
2709 Planner provides a number of different ways to generate different
2710 presentations of your tasks.
2712 @menu
2713 * Accomplishments::             planner-accomplishments.el
2714 * Status Reports::              planner-report.el
2715 * Task Overviews::              planner-tasks-overview.el
2716 * <tasks> tag::             
2717 * planner-registry::            Keep track of annotations
2718 * planner-zoom::                View and navigate tasks by time period
2719 @end menu
2721 @node Accomplishments, Status Reports, Task Reports and Overviews, Task Reports and Overviews
2722 @comment  node-name,  next,  previous,  up
2723 @subsubsection Generating Daily Accomplishment Reports
2724 @cindex reports, accomplishment
2725 @cindex @file{planner-accomplishments.el}, using
2726 @cindex tasks, overview of
2727 @cindex task reports
2728 @cindex reports, task
2729 @cindex overviews, task
2730 @cindex task overviews
2732 You can use @file{planner-accomplishments.el} to get a summary of your
2733 task activity for a particular day. The report is grouped by status
2734 and plan (on day pages) or date (on plan pages). An example report
2735 follows:
2737 @example
2738 Link        | Unfinished | In progress | Delegated | Completed | Total
2739 nil         | 1          | 0           | 0         | 6         | 7
2740 TaskPool    | 1          | 1           | 0         | 3         | 5
2741 Planner     | 0          | 0           | 1         | 1         | 2
2742 SchoolWork  | 0          | 0           | 0         | 1         | 1
2743 Total       | 2          | 1           | 1         | 11        | 15
2744 @end example
2746 This lets you see how you balance your time between your projects.
2748 @itemize
2750 There are currently two ways to use @file{planner-accomplishments.el}.
2752 @item Displaying a temporary buffer
2754 You can call @code{planner-accomplishments-show} to display a buffer
2755 containing the current page's accomplishment report.
2757 @item Rewriting sections of your planner
2759 Choose this approach if you want accomplishment reports to be in
2760 their own section and you would like them to be readable in your
2761 plain text files even outside Emacs. Caveat: The accomplishment
2762 section should already exist in your template and will be rewritten
2763 when updated.
2765 To use, set @code{planner-accomplishments-section} to the name of the
2766 section to rewrite (default: @samp{Accomplishments}). If you want
2767 rewriting to be automatically performed, call
2768 @code{planner-accomplishments-insinuate}. The accomplishments will be
2769 rewritten whenever you save a planner page. If you want rewriting to
2770 be manual, call @code{planner-accomplishments-update}.
2772 @end itemize
2774 @subheading Options
2776 @defopt planner-accomplishments-section
2777 Header for the accomplishments section in a plan page.
2778 Used by @code{planner-accomplishments-update}.
2779 @end defopt
2781 @defopt planner-accomplishments-status-display
2782 Alist of status-label maps also defining the order of display.
2783 Used by @code{planner-accomplishments-format-table}.
2784 @end defopt
2786 @subheading Functions
2788 @defun planner-accomplishments-insinuate ()
2789 Automatically call @code{planner-accomplishments-update} when saving
2790 tasks in @code{planner-mode} buffers.
2791 @end defun
2793 @defun planner-accomplishments-update ()
2794 Rewrite @code{planner-accomplishments-section} with a summary of tasks
2795 on this page.
2796 @end defun
2798 @defun planner-accomplishments-show ()
2799 Display a buffer with the current page's accomplishment report.
2800 @end defun
2802 @node Status Reports, Task Overviews, Accomplishments, Task Reports and Overviews
2803 @comment  node-name,  next,  previous,  up
2804 @subsubsection Status Reports
2805 @cindex status reports
2806 @cindex reports, status
2807 @cindex @file{planner-report.el}, using
2809 @file{planner-report.el} creates a status report for a given timespan.
2810 The report itself is just another Planner page in your planner
2811 directory.  Once generated, it contains tasks and notes culled from
2812 active project pages.  Tasks are only shown if they are incomplete or
2813 were completed within the timespan.  Notes are shown if they were
2814 created during the timespan.  Tasks and notes are grouped together under
2815 a heading for their corresponding project.
2817 The idea is you have one of these status reports generated periodically
2818 (say, every couple of weeks).  Perhaps you use cron to run them
2819 automatically and then mail you a reminder that they've been done.  Then
2820 you can edit the page, adding verbiage where it is needed and removing
2821 irrelevant items.  This editing process is as easy as editing any other
2822 Planner page.  Finally, you can publish the page along with the rest of
2823 your planner using @kbd{M-x muse-project-publish}.
2825 If you use planner-authz.el, you can tell planner-report.el only to
2826 consult project pages that a given list of users
2827 (@var{planner-report-authz}) can access when generating the report.  For
2828 example, if you're preparing a status report for your boss, add yourself
2829 and him to @var{planner-report-authz}.  The resulting status report will
2830 only contain information the two of you are supposed to have access to,
2831 and the report itself will be similarly restricted.
2833 @subheading Getting started
2835 Add the following to your .emacs file:
2837 @example
2838 (require 'planner-report)
2839 @end example
2841 Then you can use the following command to generate a status report:
2843 @example
2844 M-x planner-report-generate
2845 @end example
2847 You will be prompted for a beginning and ending date, and then the
2848 status report will be generated.  You can then edit it to your liking
2849 and publish it just like you would the rest of your planner.
2851 @subheading Options
2853 @defopt planner-report-authz
2854 List of users a status report should be restricted to.
2855 When status reports are generated, only planner pages accessible
2856 by these users will be consulted, and the resulting status report
2857 will be similarly restricted.
2858 @end defopt
2860 @defopt planner-report-pretty-print-plan-pages
2861 If non-nil, pretty print plan pages.
2862 If nil, leave page names as-is.
2863 This requires that @file{muse-wiki.el} be loaded to work properly.
2864 @end defopt
2866 @defopt planner-report-remove-task-numbers
2867 Remove task numbers when generating status reports.
2868 @end defopt
2870 @defopt planner-report-replace-note-numbers
2871 If non-nil, a string with which to replace note numbers when
2872 generating status reports.
2873 @end defopt
2875 @defopt planner-report-unfinished-offset
2876 If non-nil, the offset in days from the current date of
2877 unfinished tasks to include in the status report.  If nil,
2878 include all unfinished tasks.
2879 @end defopt
2881 @subheading Functions
2883 @defun planner-report-generate begin end
2884 Generate a status report spanning a period from @var{begin} to @var{end}.
2885 @var{begin} and @var{end} are in the format YYYY.MM.DD.
2886 @end defun
2888 @node Task Overviews, <tasks> tag, Status Reports, Task Reports and Overviews
2889 @comment  node-name,  next,  previous,  up
2890 @subsubsection Seeing an Overview of Tasks
2891 @cindex tasks, overview of
2892 @cindex task reports
2893 @cindex reports, task
2894 @cindex overviews, task
2895 @cindex task overviews
2896 @cindex @file{planner-tasks-overview.el}, using
2898 You can see a list of tasks with @file{planner-tasks-overview.el}.
2899 Seeing how you've scheduled tasks over the next few days can help you
2900 decide when to schedule another task. Table entries will be of the form
2902 @var{date} | @var{link} | @var{priority} @var{status} | @var{task-description}
2904 @subheading Functions
2906 To display the tasks between a set of day pages, use
2908 @defun planner-tasks-overview start end
2909 Display an overview of your tasks from @var{start} to @var{end}. If
2910 @var{start} is nil, start from the very first day page. If @var{end}
2911 is nil, include the very last day page. You can use
2912 @code{planner-expand-name} shortcuts here, like @kbd{+1} or @kbd{-1}.
2913 Pressing @key{RET} at the prompt will use today.
2915 Once in a @code{planner-tasks-overview} buffer, you can use
2916 the keyboard shortcut @key{o} to change the overview period.
2917 @end defun
2919 You can sort the task display with the following functions:
2921 @defun planner-tasks-overview-sort-by-date
2922 Sort the tasks by date. Keyboard shortcut: @key{1}
2923 @end defun
2925 @defun planner-tasks-overview-sort-by-plan
2926 Sort the tasks by associated plan page. Keyboard shortcut: @key{2}
2927 @end defun
2929 @defun planner-tasks-overview-sort-by-priority
2930 Sort the tasks by priority. Keyboard shortcut: @key{3}
2931 @end defun
2933 @defun planner-tasks-overview-sort-by-status
2934 Sort the tasks by status. Keyboard shortcut: @key{4}
2935 @end defun
2937 You can jump to linked tasks with
2939 @defun planner-tasks-overview-jump other-window
2940 Display the current task. If a prefix argument is supplied, show the
2941 task in another window. Keyboard shortcut: @key{j}
2942 @end defun
2944 @defun planner-tasks-overview-jump-other-window
2945 Display the current task in another window. Keyboard shortcut: @kbd{C-u j}
2946 @end defun
2948 You can view a summary of the tasks in your plan pages with
2950 @defun planner-tasks-overview-show-summary &optional file-list
2951 Count unscheduled, scheduled, and completed tasks for FILE-LIST. If
2952 called with an interactive prefix, prompt for the plan page(s) to
2953 display. Load @file{planner-multi.el} to be able to specify multiple
2954 pages.
2955 @end defun
2957 @subheading Keys
2959 @key{TAB}, @kbd{SHIFT-TAB} and @key{RET} navigate links in the usual
2960 fashion.
2962 @node <tasks> tag, planner-registry, Task Overviews, Task Reports and Overviews
2963 @subsubsection <tasks> tag
2964 @cindex <tasks> tag
2965 @cindex task reports
2966 @cindex reports, task
2967 @cindex overviews, task
2968 @cindex task overviews
2969 @cindex tasks, overview of
2971 @samp{<tasks>} is replaced by a report of tasks over all day pages in
2972 published pages (@pxref{Publishing}).
2974 @example
2975 All incomplete tasks
2977 <tasks status="^X">
2979 All completed tasks
2981 <tasks status="X">
2983 All tasks
2985 <tasks>
2986 @end example
2988 Warning: this function can be slow, as it checks all the day pages!
2990 @node planner-registry, planner-zoom ,<tasks> tag, Task Reports and Overviews
2991 @comment  node-name,  next,  previous,  up
2992 @section planner-registry
2993 @cindex @file{planner-registry.el}, using
2995 The @file{planner-registry} module provides a way to keep track of all
2996 the URLs in your projects, and to list them depending on the current
2997 buffer.  The URLs are defined in @code{muse-url-protocols} module from
2998 Muse.
3000 If a URL has been created by @code{planner-create-task-from-buffer},
3001 going to that buffer and calling @code{planner-registry-show} will show
3002 you where Planner put the URL.
3004 @subheading Getting started
3006 To begin using @file{planner-registry}, add the following to your
3007 Planner configuration file.
3009 @example
3010 (require 'planner-registry)
3011 (planner-registry-initialize)
3012 @end example
3014 You must put it after the place where Planner has been loaded in your
3015 configuration file.
3017 If you want the registry to be updated each time you save a Planner
3018 file, add the following to your Planner configuration.
3020 @example
3021 (planner-registry-insinuate)
3022 @end example
3024 If you don't want to update the registry each time a file is written,
3025 you can do it manually with @code{planner-registry-update}: it will
3026 update the registry for saved Planner/Muse buffers only.
3028 @file{planner-registry} does not define any keybindings by default.  Its
3029 most useful interactive function is @code{planner-registry-show}.
3031 @subheading Example usage
3033 Say for example that you created a task from an e-mail.  Go to that
3034 e-mail and call @code{planner-registry-show}: it will open a new buffer
3035 displaying the files (in a muse links format) where a link to this
3036 e-mail has been added.
3038 @subheading Options
3040 @file{planner-registry} defines the following options.
3042 @defopt planner-registry-file
3043 The file where @file{planner-registry} stores its URL registry.
3044 @end defopt
3046 @defopt planner-registry-min-keyword-size
3047 The minimum size for keywords.
3048 @end defopt
3050 @defopt planner-registry-max-keyword-size
3051 The maximum size for keywords.
3052 @end defopt
3054 @defopt planner-registry-max-number-of-keywords
3055 The maximum number of keywords.
3056 @end defopt
3058 @defopt planner-registry-ignore-keywords
3059 A list of keywords to ignore.
3060 @end defopt
3062 @defopt planner-registry-show-level
3063 Level used by the @code{planner-registry-show} function.
3064 0 means that this function shows only exact matches.
3065 1 means that this function also shows descriptive matches.
3066 2 (or more) means that this function also shows fuzzy matches.
3067 @end defopt
3069 @node planner-zoom, , planner-registry, Task Reports and Overviews
3070 @comment  node-name,  next,  previous,  up
3071 @section planner-zoom
3072 @cindex @file{planner-zoom.el}, using
3073 @cindex view, weekly
3074 @cindex view, quarterly
3075 @cindex view, monthly
3076 @cindex view, yearly
3078 When assessing where you stand in relation to the tasks you have set
3079 out for yourself, you might want a way to survey those tasks in groups
3080 divided by time periods, like by the week or by the month. You could
3081 create all of these overview pages by hand, but if you like to have
3082 this kind of overview frequently, you might find manually creating
3083 such pages to be tedious and time consuming.
3085 @file{planner-zoom} is an optional module designed to make it easy to
3086 view your task information grouped by year, quarter, month, week or
3087 day.
3089 To install this module, just load it in your @file{.emacs} (or
3090 @file{_emacs}):
3092 @example
3093 (require 'planner-zoom)
3094 @end example
3096 This module will recognize planner pages named according to the
3097 following scheme:
3099 @table @asis
3101 @item year view
3102 @file{2006.Year}
3104 @item quarter view
3105 @file{2006.Quarter2}
3107 @item month view
3108 @file{2006.January}
3110 @item week view
3111 @file{2006.January.Week3}
3113 @item day view
3114 @file{2006.01.02}
3116 @end table
3118 @subheading Keybindings
3120 This module also adds key bindings that you can use when looking at a
3121 Planner page to easily jump between the different time-period views.
3123 @table @kbd
3125 @item S-up
3126 Move to the view corresponding to the time period one step larger than
3127 the current one. For example, it moves from the weekly view to the
3128 monthly view. It calls @code{planner-zoom-iup}.
3130 @item S-down 
3131 Move to the view corresponding to the time period one step smaller
3132 than the current one. For example, it moves from the weekly view to
3133 the daily view. It calls @code{planner-zoom-idown}.
3135 @item S-left
3136 Stay in the same time-period view as the current one, but move one
3137 interval earlier. For example, it moves from @file{2006.January.Week3}
3138 to @file{2006.January.Week2}. It calls @code{planner-zoom-iprev}.
3140 @item S-right
3141 Stay in the same time-period view as the current one, but move one
3142 interval later. For example, it moves from @file{2006.January.Week3}
3143 to @file{2006.January.Week4}. It calls @code{planner-zoom-inext}.
3145 @end table
3147 @subheading Example usage
3149 Look at the page named @file{2006.January} and then hit @kbd{S-down}
3150 which will show @file{2006.January.Week1}. Then hit @kbd{S-left} and
3151 @kbd{S-right} to look at @file{2006.January.Week2},
3152 @file{2006.January.Week3}, etc.
3154 @subheading Advanced tips and options
3156 You can use any prefix argument with @code{planner-zoom-iup} and
3157 @code{planner-zoom-idown} to have the new view display in a window
3158 other than the current one. This also works with a nonnumeric prefix
3159 argument and @code{planner-zoom-inext} or @code{planner-zoom-iprev}.
3160 For these two functions, a numeric prefix will specify the number of
3161 intervals to move.
3163 If you don't like the default patterns for naming the time-period view
3164 pages, you can change them by customizing @code{planner-zoom-regexps}.
3166 Some people believe weeks start with Sunday, and some believe they
3167 start with Monday. To accommodate both of these colliding worldviews,
3168 @code{planner-zoom-first-day-of-week} can be customized. Its default
3169 value is @samp{1}, which is Monday. If you would prefer Sunday, change
3170 it to @samp{0}. The month to which a week belongs is the month in
3171 which the first day of the week falls.
3173 @subheading Command reference
3175 @defun planner-zoom-iup name other-window
3176 Move to the next higher level in the hierarchy. With a prefix
3177 argument, show the desired page in the other window.
3178 @end defun
3180 @defun planner-zoom-idown name other-window
3181 Move to the next lower level in the hierarchy. If the current date is
3182 within the higher-level time range, zoom to the lower level time range
3183 that also contains today. Otherwise, just go to the first lower-level
3184 time range. With a prefix argument, show the desired page in the other
3185 window.
3186 @end defun
3188 @defun panner-zoom-inext name num other-window
3189 Move to the next time range at the same level in the hierarchy. With a
3190 numeric prefix argument, move by that number of time ranges. With a
3191 non-numeric prefix argument, show the desired page in the other window.
3192 @end defun
3194 @defun planner-zoom-iprev name num other-window
3195 Move to the previous time range at the same level in the hierarchy.
3196 With a numeric prefix argument, move by that number of time ranges.
3197 With a non-numeric prefix argument, show the desired page in the other
3198 window.
3199 @end defun
3201 @node More about Notes, Making Files Pretty, More about Tasks, More about Planner
3202 @section More about Notes
3203 @cindex notes, more about
3205 Planner by default organizes the notes on a planner page so that
3206 the most recent note is first. Each note is numbered, with the oldest
3207 note labeled @samp{.#1}. If you would like to reverse this behavior,
3208 look at @kbd{C-h v planner-reverse-chronological-notes}.
3210 Notes are associated with day pages, but can also be associated with
3211 plan pages when they are created.  A linked note looks like this:
3213 @example
3214 .#1 Headline (LinkedNote#1)
3215 Text
3216 @end example
3218 You can jump to the linked note with
3219 @command{planner-jump-to-linked-note}.
3221 Deleting a note can be dangerous, as the notes are automatically
3222 numbered.  Removing a note could break links in other pages.
3224 @subheading Functions
3226 @defun planner-create-note page
3227 Create a note to be remembered in @var{page} (today if @var{page} is
3228 nil).  If @code{planner-reverse-chronological-notes} is non-nil, create
3229 the note at the beginning of the notes section; otherwise, add it to
3230 the end.  Position point after the anchor.
3231 @end defun
3233 @defun planner-create-note-from-task
3234 Create a note based on the current task and update the current task to
3235 link to the note.
3236 @end defun
3238 @defun planner-renumber-notes
3239 Update note numbering.
3240 @end defun
3242 @defun planner-jump-to-linked-note note-info
3243 Display the note linked to by the current note or @var{note-info} if
3244 non-nil.
3245 @end defun
3247 @defun planner-search-notes regexp limit
3248 Return a buffer with all the notes returned by the query for
3249 @var{regexp}.  If called with a prefix argument, prompt for
3250 @var{limit} and search days on or after @var{limit}.
3251 @end defun
3253 The following sections include instructions for displaying,
3254 manipulating, and navigating your notes efficiently.
3256 @menu
3257 * Using Allout Mode::           Quickly navigating your notes
3258 * <notes>::                     Note headlines
3259 * <past-notes>::                Index of past notes
3260 * Note Indices::                planner-notes-index.el
3261 @end menu
3263 @node Using Allout Mode, <notes>, More about Notes, More about Notes
3264 @subsection Using Allout Mode
3265 @cindex Allout mode
3266 @cindex notes, navigating
3267 @cindex notes, formatting
3268 @cindex notes, displaying
3270 The format of the notes in Planner works well with Allout mode, which
3271 provides helpful commands for navigating and formatting outlines. You
3272 can, for example, hide the bodies of all the notes on a page so you can
3273 see just their headlines. You can also jump easily from headline to
3274 headline, skipping over the bodies in between.
3276 The commands for using Allout mode vary depending on which Emacs
3277 version you are using. In either case, type @kbd{M-x load-library
3278 @key{RET} allout @key{RET}} to start. If you are using Emacs 22 or
3279 later, type @kbd{M-x allout-mode @key{RET}}. If you are using an
3280 earlier version of Emacs, type @kbd{M-x outline-mode @key{RET}}.
3282 The exact commands then available to you differ depending on your
3283 Emacs version, but you can view the commands and their keybindings by
3284 typing @kbd{C-h m}. In Emacs 22 or later, they will start with
3285 @command{allout-}, while in previous versions, they will start with
3286 @command{outline-}.
3288 For more information about using Allout mode, see @kbd{C-h f
3289 allout-mode @key{RET}}.
3291 @node <notes>, <past-notes>, Using Allout Mode, More about Notes
3292 @subsection <notes>
3294 @samp{<notes>} is replaced by a list of note headlines when the page
3295 is published. For example, the notes tag in the following example will
3296 be replaced by the two headlines when published. (@pxref{Publishing})
3298 @example
3299 <notes>
3301 * Notes
3303 .#1 This is a headline
3305 and this is body text
3307 .#2 This is another headline
3309 and this is more body text
3310 @end example
3312 @samp{<notes>} is useful if you want to provide a quick summary of
3313 blog entries at the top of your page. Just add it to your
3314 @code{planner-day-page-template}.
3316 @node <past-notes>, Note Indices, <notes>, More about Notes
3317 @subsection <past-notes>
3319 @samp{<past-notes>} is replaced by an index of note headlines.
3320 If @var{start} is specified, it lists notes starting from that date.
3321 If @var{directory} is specified, you can index notes in another
3322 planner directory.
3324 @example
3325 All the notes I've taken in 2004:
3327 <past-notes start="2004.01.01" end="2004.12.31">
3328 @end example
3330 @node Note Indices,  , <past-notes>, More about Notes
3331 @comment  node-name,  next,  previous,  up
3332 @subsection Note Indices
3333 @cindex @file{planner-notes-index.el}, using
3334 @cindex notes, indexing
3336 Make sure that @file{planner-notes-index.el} is in your load path and
3337 add this to your @file{.emacs} (or @file{_emacs}):
3339 @example
3340 (require 'planner-notes-index)
3341 @end example
3343 Then you can use tags of the form:
3345 @example
3346 <planner-notes-index page="2004.03.02">
3347 <planner-notes-index from="2004.03.01" to="2004.03.31">
3348 <planner-notes-index limit="10">
3349 <planner-notes-index page="PlanPage">
3350 <planner-notes-index-month-table month="2004.03" limit="5">
3351 <planner-notes-index-month-table month="2004.03">
3352 @end example
3354 You can also use the following interactive functions:
3356 @code{planner-notes-index}
3357 @code{planner-notes-index-days}
3358 @code{planner-notes-index-weeks}
3359 @code{planner-notes-index-months}
3360 @code{planner-notes-index-years}    (wow!)
3362 These work based on the current date (date of current buffer, or today).
3364 If a single page is specified, this page is scanned for headlines
3365 of the form:
3367 @example
3368  .#1 Headline
3369 @end example
3371 The results are presented as a bulleted list.
3373 If @var{from} and @var{to} are specified, all date pages between them
3374 (inclusive) are scanned. If @var{from} is omitted, it is assumed to be
3375 the earliest entry.  If @var{to} is omitted, it is assumed to be the
3376 latest entry.
3378 If @var{recent} is specified, the list includes only that many recent
3379 headlines.  and the results are presented as a bulleted list.
3381 To customize presentation, you can write a function that generates
3382 the appropriate @code{<planner-notes-index>} tags. You can also use
3383 @code{planner-extract-note-headlines} in your own functions.
3385 @subheading Functions
3387 The following interactive functions are defined in
3388 @file{planner-notes-index.el}:
3390 @defun planner-notes-index &optional from to limit
3391 Display a clickable notes index. If called from a Lisp program,
3392 display only dates between @var{from} and @var{to}. With a prefix arg
3393 @var{limit}, display only that number of entries.
3394 @end defun
3396 @defun planner-notes-index-days days
3397 Display an index of notes posted over the past few @var{days}. The
3398 list ends with the day of the current buffer or @code{planner-today}.
3399 @end defun
3401 @defun planner-notes-index-weeks weeks
3402 Display an index of notes posted over the past few @var{weeks}. The
3403 list ends with the week of the current buffer or
3404 @code{planner-today}. Weeks start from Sunday.
3405 @end defun
3407 @defun planner-notes-index-months months
3408 Display an index of notes posted over the past few @var{months}. The
3409 list ends with the month of the current buffer or @code{planner-today}.
3410 @end defun
3412 @defun planner-notes-index-years years
3413 Display an index of notes posted over the past few @var{years}. The
3414 current year is included.
3415 @end defun
3417 @file{planner-notes-index.el} does not define any keybindings.
3420 @node Making Files Pretty, Annotations, More about Notes, More about Planner
3421 @section Making Files Pretty
3423 By default, planner does a little bit of fancy reformatting when you
3424 save a file. Tasks are sorted by priority (ABC) and status (_oP>XC) on
3425 day pages. On plan pages, tasks are sorted by priority (ABC), status
3426 (XC), and date. Undated tasks are sorted after dated tasks.
3428 @subheading Options
3430 @defopt planner-sort-tasks-key-function
3431 Control task sorting. Some options include
3432 @code{planner-sort-tasks-default-key},
3433 @code{planner-sort-tasks-basic}, @code{planner-sort-tasks-by-date}, and
3434 @code{planner-sort-tasks-by-link}.
3435 @end defopt
3437 @defopt planner-sort-undated-tasks-equivalent
3438 This option controls the behavior of task sorting on plan pages.  By
3439 default, the value @samp{9999.99.99} causes dated tasks to be listed
3440 before undated tasks.  To sort undated tasks before dated tasks,
3441 set this to a blank string.
3442 @end defopt
3444 @defopt planner-sort-tasks-automatically
3445 Non-nil means sort tasks whenever a planner file is saved.  On day
3446 pages, tasks are sorted by status.  On plan pages, they are sorted by
3447 status and date.  Sorting can take a while.
3448 @end defopt
3450 @defopt planner-renumber-tasks-automatically
3451 Non-nil means renumber tasks from 1 to N whenever a planner file is
3452 saved. This allows you to refer to tasks in previous day pages using
3453 anchors like @samp{2003.08.12#A1}. If you use this function, make sure
3454 @code{planner-use-task-numbers} is non-nil so that new tasks are created
3455 with task numbers.
3456 @end defopt
3458 @defopt planner-align-tasks-automatically
3459 Non-nil means align tasks whenever a planner file is saved.  This
3460 causes the status to line up in a neat column if you have less than
3461 100 tasks.
3462 @end defopt
3464 @defopt planner-renumber-notes-automatically
3465 Non-nil means renumber the notes. If most of your notes are only on
3466 one page, you might like seeing the notes renumbered if you delete a
3467 note in the middle. However, if you use a lot of cross-referencing,
3468 note renumbering will break those links.
3469 @end defopt
3471 @subheading Functions
3473 @defun planner-sort-tasks
3474 Sort tasks according to planner-sort-tasks-key-function. By default,
3475 sort tasks according to priority and position on day pages, and
3476 according to status, priority, date, and position on plan pages.
3477 @end defun
3479 @defun planner-renumber-tasks
3480 Update task numbering.
3481 @end defun
3483 @defun planner-align-tasks
3484 Align tasks neatly. You can add this to @code{write-file-functions} to
3485 have the tasks automatically lined up whenever you save.  For best
3486 results, ensure @code{planner-align-tasks} is run after
3487 @code{planner-renumber-tasks}.
3488 @end defun
3490 @defun planner-fix-tasks
3491 Sort, renumber and align tasks.
3492 @end defun
3494 @node Annotations, Interactive Lisp, Making Files Pretty, More about Planner
3495 @comment  node-name,  next,  previous,  up
3496 @section Annotations
3498 The context included when you create a task and the context included
3499 when you create a note are gained the same way. It sounds like black
3500 magic, but it turns out not to be.
3502 All that happens is, Planner has a list of functions,
3503 @code{planner-annotation-functions}. When you create a task from a
3504 buffer, or remember a note from a buffer, Planner goes through
3505 this list from top to bottom. The first one that returns true is the
3506 one it uses.
3508 For example, if you're in Wanderlust, and you hit the key you've bound
3509 to @code{planner-create-task-from-buffer}, it looks at this list and
3510 does something like this.  Is it an ERC buffer? No. Is it a BBDB
3511 buffer? No. Are we in w3m? No. Are we in Wanderlust? Yes. So this
3512 function succeeds. It stops searching and runs the annotation function
3513 for Wanderlust, which in this case finds out who the message is from
3514 and what the message ID of the message is. It then takes those and
3515 constructs a link back to that message, with a link title something
3516 like @samp{Email from Joe Blogs}.
3518 So, you've read the email from Joe Blogs. He's asked you to do
3519 something and you've hit your key to add that task to your list of
3520 things to do. So what you end up with is a description of the task,
3521 and a link back to what made you create the task in the first place.
3523 The same happens with remembering notes, except that it ends up in the
3524 @samp{* Notes} section of your page instead.
3526 @subheading Options
3528 To change the behavior of annotations, customize the following options:
3530 @defopt planner-annotation-functions
3531 A list of functions tried in order by
3532 @command{planner-create-task-from-buffer} and other functions that
3533 pick up context.  The first non-nil value returned is used as the
3534 annotation.  To cause an item to @strong{not} be annotated, return the
3535 empty string @samp{""}.
3536 @end defopt
3538 @defopt planner-annotation-strip-directory
3539 File links are usually generated with the full path to the file so
3540 that you can easily tell apart files with the same base name.  If
3541 @code{planner-annotation-strip-directory} is non-nil, though, only the
3542 base name of the file will be displayed.  For example, a link to
3543 @samp{/foo/bar/baz} will be displayed as @samp{baz} and hyperlinked to
3544 the file.
3545 @end defopt
3547 @defopt planner-annotation-use-relative-file
3548 If t, always use relative filenames.
3549 @code{planner-annotation-use-relative-file} can also be a function that
3550 takes the filename and returns non-nil if the link should be relative.
3551 Filenames are resolved relative to the first directory of your Planner
3552 project in @code{muse-project-alist}.  That is, the created link will be
3553 of the form @samp{../../somefile} instead of
3554 @samp{/absolute/path/to/file}.  This can be helpful if you publish your
3555 planner files to the Net and your directory structure ensures that
3556 relative links resolve the same from your Plan pages and their
3557 respective publishing directory.
3558 @end defopt
3560 @node Interactive Lisp, Publishing, Annotations, More about Planner
3561 @comment  node-name,  next,  previous,  up
3562 @section Interactive Lisp with planner-lisp.el
3563 @cindex Lisp functions, using with Planner
3564 @cindex interactive Lisp fuctions, using with Planner
3565 @cindex @file{planner-lisp.el}, using
3567 You can include interactive Lisp functions in your planner pages.
3569 First, you need @file{planner-lisp.el}. Put this in your @file{.emacs}
3570 (or @file{_emacs}):
3572 @example
3573 (require 'planner-lisp)
3574 @end example
3576 Then, add a link to the Lisp function to your page, like:
3578 @example
3580 [[lisp:/plan][Plan]]
3582 @end example
3584 This will be rendered as @samp{Plan}. Selecting the link will run the
3585 @code{plan} function interactively.
3587 You can also execute other Lisp expressions. For example:
3589 @example
3590 [[lisp:/(planner-goto (planner-expand-name "+7"))][Next week]]
3591 @end example
3593 @file{planner-lisp.el} does not provide any interactive functions or
3594 keybindings.
3596 @node Publishing, Experimental Functions, Interactive Lisp, More about Planner
3597 @section Publishing
3598 @cindex publishing
3600 You can publish your planner files to a variety of different formats.
3601 For example, you can publish your planner in HTML and put it on a
3602 normal web server. No special server support is required. This gives
3603 you an easy way to keep other people up to date on your tasks, keep a
3604 web log, or simply organize information.
3606 Published files are stored in the path specified by
3607 @code{muse-project-alist} for your Planner project. Just copy the
3608 contents of this directory to your web server, and you're all set! Of
3609 course, publishing is completely optional.
3611 Here are some more features related to publishing:
3613 @menu
3614 * Publishing Planner pages::    planner-publish.el
3615 * Publishing Calendars::        planner-calendar.el
3616 * Authz Access Restriction::    planner-authz.el
3617 * RSS Publication::             Sharing notes with planner-rss.el
3618 * iCal Task Publication::       Sharing tasks with planner-ical.el
3619 * RDF Publication::             planner-rdf.el
3620 @end menu
3622 @node Publishing Planner pages, Publishing Calendars, Publishing, Publishing
3623 @comment  node-name,  next,  previous,  up
3624 @subsection Publishing Planner pages
3625 @cindex publishing
3626 @cindex @file{planner-publish.el}, using
3628 Publishing works by providing Muse with the settings and environment for
3629 Planner publishing.
3631 First, make sure that you have set up a proper
3632 @code{muse-project-alist} (@pxref{Creating Your Planner}).
3634 Second, add:
3636 @example
3637 (require 'planner-publish)
3638 @end example
3640 to your @file{.emacs} (or @file{_emacs}).
3642 To publish your entire Planner project, hit @kbd{C-c C-p}
3643 (@code{muse-project-publish}). To publish just the current buffer, hit
3644 @kbd{C-c C-t} (@code{muse-publish-this-file}).
3646 To automatically publish files when you save them, add the following
3647 code to your @file{~/.emacs} (or @file{_emacs}):
3649 @example
3650 (eval-after-load "muse-mode"
3651   '(add-hook 'after-save-hook
3652             #'(lambda ()
3653                 (when (planner-derived-mode-p 'muse-mode)
3654                   (muse-project-publish nil)))
3655             nil t))
3656 @end example
3658 @subheading Styles provided
3660 The following publishing styles are available.
3662 @table @code
3664 @cindex publishing styles, planner-html
3665 @item planner-html
3666 Publish Planner pages to HTML.
3668 @cindex publishing styles, planner-xhtml
3669 @item planner-xhtml
3670 Publish Planner pages to XHTML.
3672 @cindex publishing styles, planner-xml
3673 @item planner-xml
3674 Publish Planner pages to XML.
3676 @end table
3678 @subheading Options provided
3680 The following options may be customized to enhance your publishing
3681 experience.
3683 @table @code
3685 @item planner-publish-markup-regexps
3686 List of markup rules for publishing Planner pages.
3688 @item planner-publish-markup-functions
3689 Specify which function to use for publishing different kinds of markup.
3691 @item planner-publish-markup-tags
3692 A list of custom HTML-like tags to recognize when publishing.
3694 @item planner-xml-markup-strings
3695 Strings that are inserted to publish XML markup.
3697 @item planner-xml-header
3698 Header used when publishing Planner XML files.
3699 This may be text or a filename.
3701 @item planner-xml-footer
3702 Footer used when publishing Planner XML files.
3703 This may be text or a filename.
3705 @item planner-html-markup-strings
3706 Strings that are inserted to publish HTML markup.
3708 @item planner-html-style-sheet
3709 CSS stylesheet elements used in Planner HTML and XHTML files.
3710 This can also be one or more @samp{<link>} tags.
3712 @item planner-html-header
3713 Header used when publishing Planner HTML files.
3714 This may be text or a filename.
3716 @item planner-html-footer
3717 Footer used when publishing Planner HTML files.
3718 This may be text or a filename.
3720 @item planner-xhtml-header
3721 Header used when publishing Planner XHTML files.
3722 This may be text or a filename.
3724 @item planner-xhtml-footer
3725 Footer used when publishing Planner XHTML files.
3726 This may be text or a filename.
3728 @item planner-html-inner-header
3729 Extra header section that can be embedded within
3730 @code{planner-html-header} and @code{planner-xhtml-header}.
3732 @item planner-html-inner-footer
3733 Extra header section that can be embedded within
3734 @code{planner-html-footer} and @code{planner-xhtml-footer}.
3736 @item planner-publish-prepare-regexps
3737 List of markup rules to apply before publishing a page with Planner.
3739 @item planner-publish-finalize-regexps
3740 List of markup rules to apply after publishing a page with Planner.
3742 @end table
3744 @node Publishing Calendars, Authz Access Restriction, Publishing Planner pages, Publishing
3745 @comment  node-name,  next,  previous,  up
3746 @subsection Publishing Calendars
3747 @cindex calendar, publishing
3748 @cindex @file{planner-calendar.el}, using
3750 To publish calendars in your day pages, it is necessary to do two steps.
3752 @itemize
3753 @item Add @code{(require 'planner-calendar)} to your configuration.
3754 @item Add a @samp{<calendar>} tag to either your header, footer, or
3755 @var{planner-day-page-template}, depending on where you want it to
3756 appear.
3757 @end itemize
3759 To display a calendar based on a different day (given here as DAYPAGE),
3760 use @code{<calendar page="DAYPAGE">}.
3762 To get arrows to previous and next months to show up, use
3763 @code{<calendar arrows="t">}.  The text in
3764 @var{planner-calendar-prev-month-button} and
3765 @var{planner-calendar-next-month-button} will be used for the arrows to
3766 the previous and next months, respectively.
3768 By default, Muse will not display the arrows properly, due to
3769 limitations in the special-escaping algorithm.  To work around this,
3770 remove the @samp{&} rule from @var{muse-xml-markup-specials}, or from
3771 @var{muse-html-markup-specials} if you are using the 3.02.6 version of
3772 Muse.
3774 It is also possible to create a symlink from the current day page to the
3775 page name specified by @var{planner-calendar-today-page-name}.  To
3776 accomplish this, add the following to your configuration.
3778 @example
3779 (eval-after-load "muse-publish"
3780   '(add-hook 'muse-after-publish-hook
3781              'planner-calendar-create-today-link))
3782 @end example
3784 @subheading Options
3786 @defopt planner-calendar-prev-month-button
3787 HTML text used for previous month buttons.
3788 @end defopt
3790 @defopt planner-calendar-next-month-button
3791 HTML text used for next month buttons.
3792 @end defopt
3794 @defopt planner-calendar-day-header-chars
3795 Number of characters to use for day column header names.
3796 @end defopt
3798 @defopt planner-calendar-today-page-name
3799 Default name for published today page link.
3800 @end defopt
3802 @subheading Functions
3804 @defun planner-calendar-create-today-link
3805 Add this function to @code{muse-after-publish-hook} to
3806 create a ``today'' soft-link to the newest published planner day page,
3807 on operating systems that support POSIX @command{ln}.
3808 @end defun
3810 @node Authz Access Restriction, RSS Publication, Publishing Calendars, Publishing
3811 @comment  node-name,  next,  previous,  up
3812 @subsection Authz Access Restriction
3813 @cindex @file{planner-authz.el}, using
3814 @cindex Mason, restricting portions with
3815 @cindex access, restricting
3817 @file{planner-authz.el} was written by Andrew J. Korty in order to
3818 allow the easy restriction of portions of published pages.  It uses
3819 the HTML::Mason module available on CPAN
3820 (@url{http://www.cpan.org}).  Setting up HTML::Mason is
3821 outside the scope of this document.  Make sure that it works before
3822 trying out @file{planner-authz.el}.
3824 @file{planner-authz.el} modifies the behavior of
3825 @command{muse-project-publish} so that published pages follow access
3826 modifiers.
3828 This library lets you publish your planner pages while controlling
3829 access to certain portions of them to users you specify.  When you
3830 load this library, you gain access to two additional markup directives
3831 to use in your planner pages.  The @samp{<authz>} tag lets you
3832 restrict access to arbitrary content as follows:
3834 @example
3835 Here is a sentence everyone should see.  This sentence also
3836 contains no sensitive data whatsoever.  <authz users="ajk">This
3837 sentence, however, talks about my predilection for that French
3838 vanilla instant coffee that comes in the little tin, and I'm
3839 embarrassed for anyone else to know about that.</authz> And
3840 here's some more perfectly innocuous content.
3841 @end example
3843 You can use @samp{<authz>} tags to mark up entire paragraphs, tasks,
3844 notes, and anything else.  The tags are replaced with Mason code in
3845 the published pages.
3847 The @samp{#authz} directive restricts access to an entire page.  A Mason
3848 call is added to this page to generate a 403 error when someone not
3849 listed tries to access it.  Any notes or tasks on a
3850 @samp{#authz}-protected page are also wrapped in Mason code on linked
3851 pages. To add a @samp{#authz} directive to a Muse page, place
3852 @samp{#authz} followed by a space-delimited list of users on one
3853 line. For example:
3855 @example
3856 #authz ajk sacha
3857 @end example
3859 @subheading Getting started
3861 Add the following to your .emacs file to cause @kbd{M-x
3862 muse-project-publish} to automatically use planner-authz features.
3864 @example
3865 (require 'planner-authz)
3866 @end example
3868 @subheading Diary markup
3870 If your pages have a section with diary entries maintained by
3871 planner-appt.el (or by any other means), you can control access to these
3872 entries.  First, customize @code{planner-section-tagnames} to map your
3873 diary section ("* Schedule", in this example) to a tag called
3874 "diary-section".  An example follows.
3876 @example
3877 (add-to-list 'planner-section-tagnames '("Schedule" . "diary-section"))
3878 @end example
3880 If the name of your diary section is "* Diary", you will not need to
3881 customize @code{planner-section-tagnames} by default.
3883 Then make sure the diary entries you want restricted contain a
3884 corresponding plan page name in parentheses, as in the following
3885 example.
3887 @example
3888 10:00 10:30 Meeting with boss (WorkStuff)
3889 @end example
3891 @subheading Options
3893 @defopt planner-authz-project-default
3894 Default access list for project pages (not day pages).  If a given
3895 project page doesn't contain a @samp{#authz} tag, it will receive the
3896 access list defined here.  If this variable is nil, all users will be
3897 allowed to view the page.  No corresponding variable is provided for
3898 day pages because it doesn't seem like you'd ever want to control
3899 access based on what day it was.  (But I will accept patches. :) Notes
3900 and tasks referencing pages without @samp{#authz} tags will also be
3901 restricted to the users listed here.
3902 @end defopt
3904 @defopt planner-authz-day-note-default
3905 Default access list for notes on day pages not associated with
3906 any project.  There is way to set a default for notes on project
3907 pages for the reason above; they would only be associated with
3908 date pages anyway.
3909 @end defopt
3911 @defopt planner-authz-day-task-default
3912 Same as @kbd{planner-authz-day-note-default}, but for tasks.
3913 @end defopt
3915 @subheading Functions
3917 @defun planner-authz-publish-index
3918 Publish an index for the planner marked up with Mason code.
3919 Only those links to pages which the remote user is authorized to
3920 access will be shown.
3921 @end defun
3923 @node RSS Publication, iCal Task Publication, Authz Access Restriction, Publishing
3924 @comment  node-name,  next,  previous,  up
3925 @subsection RSS Publication
3926 @cindex @file{planner-rss.el}, using
3927 @cindex notes, RSS
3928 @cindex RSS
3930 @file{planner-rss.el} allows you to publish your notes in the RSS 2.0
3931 XML format for blog syndication. You will also want to customize the
3932 following variables:
3934 To manually add the current note to all the matching RSS feeds, invoke
3935 @command{planner-rss-add-note}. You can specify a filename with the
3936 universal prefix, like this: @kbd{C-u M-x planner-rss-add-note}.
3938 If you use the @file{remember-planner.el} module to create notes, you
3939 can automatically publish new notes to RSS feeds by adding the
3940 following code to your @file{.emacs} (or @file{_emacs}).
3942 @example
3943 (add-to-list 'remember-planner-append-hook 'planner-rss-add-note t)
3944 @end example
3946 @subheading Options
3948 @defopt planner-rss-base-url
3949 Base absolute URL for published blog entries. Should include trailing
3950 @samp{/}.
3951 @end defopt
3953 @defopt planner-rss-category-feeds
3954 Rules for automatic categorization of posts and publishing to RSS
3955 files. A blog entry is matched against each condition. If it matches
3956 the regular expression or the function returns a non-nil value, the
3957 blog entry is copied into the specified file.
3958 @end defopt
3960 @defopt planner-rss-feed-limits
3961 A list of regular expressions that match feed filenames and the size
3962 and item limits for feeds that match. For example, you can use
3963 @samp{(("." nil 10))} to ensure that all feeds are limited to the 10
3964 most recent items.
3965 @end defopt
3967 @subheading Functions
3969 @file{planner-rss.el} defines the following interactive functions:
3971 @defun planner-rss-add-note @var{feed}
3972 Export the current note using @code{planner-add-item}. If @var{feed}
3973 is specified, add the entry to the specified file. Else, add the entry
3974 to all matching RSS feeds specified by
3975 @code{planner-rss-category-feeds}.
3976 @end defun
3978 @node iCal Task Publication, RDF Publication, RSS Publication, Publishing
3979 @comment  node-name,  next,  previous,  up
3980 @cindex @file{planner-ical.el}, using
3981 @subsection iCal Publication
3983 iCal is an Internet Engineering Task Force (IETF) standard for
3984 calendaring and scheduling. @uref{http://www.ietf.org/rfc/rfc2445.txt}
3986 You can export your tasks to the iCal format using
3987 @file{planner-ical}. Add @code{(require 'planner-ical)} to your
3988 @file{~/.emacs}. Then you can use @kbd{M-x planner-ical-export-page}
3989 to display the iCal equivalent of tasks on a page, which you can then
3990 save to a file.
3992 To export today's tasks to a file in your publishing directory, add
3993 the following to your @file{~/.emacs}.
3995 @example
3996 (planner-ical-export-file
3997  (planner-today)
3998  (expand-file-name
3999    "tasks.ics"
4000    (muse-style-element :path (car (cddr (muse-project planner-project))))))
4001 @end example
4003 @subheading Functions
4005 @defun planner-ical-export-page page &optional file
4006 Export PAGE's tasks in the iCal format.
4007 If FILE is non-nil, results are saved to that file.
4008 If FILE is nil, results are displayed in a `planner-ical-export-buffer'.
4009 @end defun
4011 @defun planner-ical-export-this-page
4012 Display the tasks on the current page in iCal format.
4013 @end defun
4015 @node RDF Publication,  , iCal Task Publication, Publishing
4016 @comment  node-name,  next,  previous,  up
4017 @subsection RDF Publication
4018 @cindex @file{planner-rdf.el}, using
4019 @cindex RDF, publishing to
4021 Put planner-rdf.el in a directory that is in your Emacs load-path and
4022 the following into your ~/.emacs file:
4024 @example
4025 (require 'planner-rdf)
4026 (eval-after-load "muse-publish"
4027   '(progn
4028      (add-hook 'muse-after-publish-hook
4029                'planner-rdf-publish-file)
4030      (add-hook 'muse-after-publish-hook
4031                'planner-rdf-publish-index)))
4032 @end example
4034 @menu
4035 * Publishing with planner-rdf::  
4036 * planner-rdf Tags::            
4037 * planner-rdf Usage Examples::  
4038 @end menu
4040 @node Publishing with planner-rdf, planner-rdf Tags, RDF Publication, RDF Publication
4041 @subsubsection Publishing with planner-rdf
4043 Planner-rdf is now included in the normal Planner publishing process.
4044 Pressing @key{C-p} will create a .owl and a .rdf file for every planner
4045 file. Additionally it creates an index, @file{index.rdf}.
4047 By default all generated files will be stored in the normal Planner
4048 publishing directory, where the HTML files end up. If you would ike to
4049 change that, set the variable @code{planner-rdf-directory} to the desired
4050 location.
4052 The generated files:
4054 @itemize
4055 @item
4056 @file{index.rdf} - a collection with pointers to the
4057 @file{<plan-page>.rdf} files.
4058 @item
4059 @file{<plan-page>.rdf} - contains Dublin Core metadata about the files
4060 related to the current Planner page. Currently it contains metadata
4061 about the source file, the Emacs plan page, the generated HTML page, and
4062 the generated OWL file.
4063 @item
4064 @file{<plan-page>.owl} - contains task and note data from the Planner
4065 file. Task information is stored completely. For notes, the note
4066 headline is stored.
4067 @end itemize
4069 @node planner-rdf Tags, planner-rdf Usage Examples, Publishing with planner-rdf, RDF Publication
4070 @subsubsection planner-rdf Tags
4072 Besides the factual information, e.g. the task status or description,
4073 planner-rdf extracts links (in the format @samp{[[...][...]]} or
4074 @samp{[[...]]}) and tags (@samp{@{@{...:...}@}@}) from tasks and notes
4075 (including the notes text). Links and tags provide context for the plan
4076 elements and so are stored and linked with the containing elements.
4078 Links point to locations that can be used to enrich the information in
4079 the Planner pages (e.g, by retrieving data from them and adding it),
4080 tags -- like the one for the task ids @samp{@{@{Tasks:198@}@}} -- can be
4081 used to express abstract qualities. Some examples:
4083 @itemize
4084 @item
4085 an @samp{@{@{audience:myteam@}@}} tag, can be used to restrict
4086 publishing of items to a certain user group;
4087 @item a @samp{@{@{lang:de@}@}} tag, signifying the language of the text;
4088 @item
4089 a @samp{@{@{location:Hamburg@}@}} tag, can be used to make geographic
4090 reference to an entity that is not stored in your address book, bbdb.
4091 @end itemize
4093 What tags to use is up to the user. Planner-rdf makes no assumptions
4094 about them, it just extracts and stores them. Only the applications
4095 using the data know what to do with them.
4097 @node planner-rdf Usage Examples,  , planner-rdf Tags, RDF Publication
4098 @subsubsection Usage Examples
4100 Report generation with OpenOffice
4102 The Perl file @file{this-week.pl}
4103 (@url{http://www.rainervolz.de/planner-rdf/this-week.pl}) creates a
4104 simple report for the current week. The script extracts task and note
4105 information from the generated OWL files and inserts it into a simple
4106 OpenOffice Writer document. Nothing fancy, just a proof of concept, to
4107 show how planner-rdf can be used to integrate Planner Mode with other
4108 applications.
4110 Besides Perl and OpenOffice you'll need the Redland RDF Application
4111 Framework (@url{http://www.redland.opensource.ac.uk/}). It is used to
4112 process the RDF data. Redland is small, but powerful, and available
4113 for many platforms and languages.
4115 As an example the application loads the RDF data each time it is run.
4116 In the real world you probably would use Redland to store the Planner
4117 data in a database, to save the loading step each time you access the
4118 data.
4120 Importing Planner data into Protege
4122 Protege is a popular ontology editor and knowledge management
4123 application. A simple way to import data into it, is to provide a OWL
4124 file that contains the data as well as the schema. To do this:
4126 @itemize
4127 @item
4128 Use @file{planner2protege.pl}
4129 (@url{http://www.rainervolz.de/planner-rdf/planner2protege.pl}) to
4130 combine all OWL files into a single one.
4131 @item
4132 Use CWM (@url{http://www.w3.org/2000/10/swap/doc/cwm.html}) to combine
4133 schema and data, with @code{python cmw --rdf planner-rdf.owl
4134 planner-data.owl --think --rdf >planner2.owl}
4135 @end itemize
4137 Not the most straightforward process, but it works. The resulting file,
4138 here planner2.owl, can then be loaded into Protege.
4140 @node Experimental Functions,  , Publishing, More about Planner
4141 @comment  node-name,  next,  previous,  up
4142 @section Experimental Functions
4143 @cindex @file{planner-experimental.el}, using
4144 @cindex experimental functions, Planner
4146 These functions are experimental. This means that they may not do
4147 exactly what you expect them to do, so keep backups, be careful, and
4148 don't blame us.
4150 To use these functions, make sure that @file{planner-experimental.el} is
4151 in your load path, and add this to your @file{.emacs} (or
4152 @file{_emacs}):
4154 @example
4155 (require 'planner-experimental)
4156 @end example
4158 @subheading Functions
4160 @file{planner-experimental.el} defines the following interactive
4161 functions:
4163 @defun planner-search-notes-next-match
4164 Jump to the next matching entry.  Call after
4165 @code{planner-search-notes}.
4166 @end defun
4168 @defun planner-search-notes-previous-match
4169 Jump to the previous matching entry.  Call after
4170 @code{planner-search-notes}.
4171 @end defun
4173 @defun planner-remove-duplicates
4174 Remove duplicate tasks.
4175 @end defun
4177 @file{planner-experimental.el} does not define any keybindings.
4179 @node Managing Your Information, Advanced Configuration, More about Planner, Top
4180 @comment  node-name,  next,  previous,  up
4181 @chapter Managing Your Information
4183 Planner can be integrated with other Emacs and even some non-Emacs
4184 programs by loading additional modules. You can pick and choose from
4185 these modules, choosing those that work with programs you use and that
4186 produce information you want to have included in your Planner pages.
4188 @menu
4189 * E-mail::                      Linking notes and tasks to messages
4190 * Scheduling and Time::         Tracking appointments and where your time goes
4191 * Finances::                    Display your account balances and more
4192 * Contacts and Conversations::  BBDB and ERC
4193 * Tracking Research and Resources::  The Web, bibliographies, and bookmarks
4194 * Tracking Development::        
4195 @end menu
4197 @node E-mail, Scheduling and Time, Managing Your Information, Managing Your Information
4198 @comment  node-name,  next,  previous,  up
4199 @section E-mail
4201 Planner can work together with several different Emacs e-mail
4202 clients. If you load the appropriate module for the e-mail client you
4203 use, then your notes and tasks can be annotated with information
4204 pointing to the specific e-mail message you were reading when you
4205 created that note or task. When you are looking at the note or task, you
4206 will be able to jump straight to that message.
4208 @menu
4209 * Unix mail::                   Unix mailboxes: planner-unix-mail.el              
4210 * Gnus::                        Gnus mail and news reader: planner-gnus.el
4211 * VM::                          VM mail reader: planner-vm.el
4212 * Wanderlust::                  Wanderlust mail reader: planner-wl.el
4213 * MH-E::                        MH-E mail reader: planner-mhe.el
4214 * Rmail::                       Rmail: planner-rmail.el
4215 @end menu
4218 @node Unix mail, Gnus, E-mail, E-mail
4219 @comment  node-name,  next,  previous,  up
4220 @subsection Unix mail
4221 @cindex @file{planner-unix-mail.el}, using
4222 @cindex mbox, using Planner with
4223 @cindex Unix mail, using Planner with
4224 @cindex mail client, using Planner with
4226 This module supports links from any kind of Unix mailbox (mbox). To
4227 use this module, make sure that @file{planner-unix-mail.el} is in your
4228 load path and add this to your @file{.emacs} (or @file{_emacs}):
4230 @example
4231 (require 'planner-unix-mail)
4232 @end example
4234 Unix mail URLs are of the form:
4236 @example
4237 ;; mail://PATH/TO/INBOX/message-id
4238 @end example
4240 Annotations will be of the form:
4242 @smallexample
4243 [[mail://PATH/TO/INBOX/E1AyTpt-0000JR-LU%40sacha.ateneo.edu][E-mail from Sacha Chua]]
4244 @end smallexample
4246 @file{planner-unix-mail.el} does not define any interactive functions or
4247 create any new keybindings.
4249 @node Gnus, VM, Unix mail, E-mail
4250 @comment  node-name,  next,  previous,  up
4251 @subsection Gnus
4252 @cindex Gnus, using Planner with
4253 @cindex mail client, using Planner with, Gnus
4254 @cindex @file{planner-gnus.el}, using
4256 To use this module, make sure that it is in your load path and put
4257 this in your @file{.emacs} (or @file{_emacs}):
4259 @example
4260 (require 'planner-gnus)
4261 (planner-gnus-insinuate)
4262 @end example
4264 With this module loaded, when you create tasks from Gnus summary or
4265 message buffers, the tasks will be annotated with information from the
4266 message you were looking at when you created each task. A link will also
4267 be created on your planner page that you can select in order to return
4268 to the message.
4270 So, the created task will look something like this:
4272 @smallexample
4273 #A34 _ Send writing to publishme.com from
4274 [[gnus://alt.books.beatgeneration/<Ifo5c.24632$F9.9567@@nwrddc01.gnilink.net>][E-Mail
4275 from editor@@verizon.net]] @{@{Tasks:71@}@} ([[Writing]])
4276 @end smallexample
4278 This module also binds @kbd{C-c C-t} in the Gnus summary and article
4279 views to the command to create a new task.
4281 @file{planner-gnus.el} does not define any interactive functions.
4283 For more information about Gnus, see @inforef{Top, The Gnus Newsreader,
4284 gnus}.
4286 @node VM, Wanderlust, Gnus, E-mail
4287 @comment  node-name,  next,  previous,  up
4288 @subsection VM
4289 @cindex VM, using Planner with
4290 @cindex mail client, using Planner with, VM
4291 @cindex @file{planner-vm.el}, using
4293 To use this module, make sure that @file{planner-vm.el} is in your load
4294 path and add this to your @file{.emacs} (or @file{_emacs}):
4296 @example
4297 (require 'planner-vm)
4298 @end example
4300 VM URLs are of the form:
4302 @example
4303 vm://path/to/inbox/message-id
4304 @end example
4306 Annotations will be of the form:
4308 @smallexample
4309 [[vm://home/test/INBOX/<E1AyTpt-0000JR-LU@@sacha.ateneo.edu>][E-mail from Sacha Chua]]
4310 @end smallexample
4312 @file{planner-vm.el} does not define any interactive functions or
4313 keybindings.
4316 @node Wanderlust, MH-E, VM, E-mail
4317 @comment  node-name,  next,  previous,  up
4318 @subsection Wanderlust
4319 @cindex Wanderlust, using Planner with
4320 @cindex mail client, using Planner with, Wanderlust
4321 @cindex @file{planner-wl.el}, using
4323 To use this module, make sure that @file{planner-wl.el} is in your
4324 load path and add this to your @file{.emacs} (or @file{_emacs}):
4326 @example
4327 (require 'planner-wl)
4328 @end example
4330 Then, when you call @kbd{M-x planner-create-task-from-buffer} from
4331 Wanderlust summary or message buffers, the task will be created with
4332 the correct annotation.
4334 @subheading Keys
4336 To add keybindings to Wanderlust, call:
4338 @example
4339 (planner-wl-insinuate)
4340 @end example
4342 This binds @kbd{C-c C-t} to @command{planner-create-task-from-buffer}.
4344 @node MH-E, Rmail, Wanderlust, E-mail
4345 @comment  node-name,  next,  previous,  up
4346 @subsection MH-E
4347 @cindex MH-E, using Planner with
4348 @cindex mail client, using Planner with, MH-E
4349 @cindex @file{planner-mhe.el}, using
4351 To use this module, make sure that @file{planner-mhe.el} is in your
4352 load path and add this to your @file{.emacs} (or @file{_emacs}):
4354 @example
4355 (require 'planner-mhe)
4356 @end example
4358 Then, when you call @kbd{M-x planner-create-task-from-buffer} from
4359 MH-E summary or message buffers, the task will be created with
4360 the correct annotation.
4362 @file{planner-mhe} does not define any interactive functions.
4364 @node Rmail,  , MH-E, E-mail
4365 @comment  node-name,  next,  previous,  up
4366 @subsection Rmail
4367 @cindex Rmail, using Planner with
4368 @cindex mail client, using Planner with, Rmail
4369 @cindex @file{planner-rmail.el}, using
4371 To use this module, make sure that @file{planner-rmail.el} is in your
4372 load path and add this to your @file{.emacs} (or @file{_emacs}):
4374 @example
4375 (require 'planner-rmail)
4376 @end example
4378 Rmail URLs are of the form:
4380 @example
4381 rmail://message-id
4382 @end example
4384 Annotations will be of the form:
4386 @smallexample
4387 [[rmail://<E1AyTpt-0000JR-LU@@sacha.ateneo.edu>][E-mail from Sacha Chua]]
4388 @end smallexample
4390 @file{planner-rmail.el} does not define any interactive functions or
4391 create any new keybindings.
4393 For more information about Rmail, see @inforef{Rmail, Reading Mail With
4394 Rmail, Emacs}.
4396 @node Scheduling and Time, Finances, E-mail, Managing Your Information
4397 @comment  node-name,  next,  previous,  up
4398 @section Scheduling and Time
4400 @menu
4401 * Diary::                       Using the Emacs diary: planner-diary.el
4402 * Appointments::                Appointments in plan pages: planner-appt.el
4403 * Timeclock::                   Time tracking: planner-timeclock.el
4404 * schedule.el::                 Project completion: planner-schedule.el
4405 @end menu
4408 @node Diary, Appointments, Scheduling and Time, Scheduling and Time
4409 @comment  node-name,  next,  previous,  up
4410 @subsection Diary
4411 @cindex diary, using Planner with
4412 @cindex @file{planner-diary.el}, using
4414 If you use Emacs's diary feature, Planner-Diary could be helpful for
4415 you. It puts all diary entries for the current day in the @samp{*
4416 Diary} section of your day plan page. This section is updated every
4417 time you display the file in Emacs. By default the diary section of
4418 past pages is not updated; it's pretty unlikely that you want to add
4419 new diary entries for the past. (@pxref{Diary, , , Emacs, GNU Emacs
4420 Manual})
4422 If you want to use @file{planner-diary.el}, make sure the file is in
4423 your load path and add this to your @file{.emacs} (or @file{_emacs}):
4425 @example
4426 (require 'planner-diary)
4427 @end example
4429 @file{planner-diary.el} needs @command{fancy-diary-display}.  To use
4430 @command{fancy-diary-display}, add this to your @file{.emacs} (or
4431 @file{_emacs}):
4433 @example
4434 (add-hook 'diary-display-hook 'fancy-diary-display)
4435 @end example
4437 You can use Planner-Diary in two different ways:
4439 @enumerate
4441 @item
4442 If you want the saved files to contain your entries and not just a line
4443 of Lisp, add the following lines to your @file{.emacs} (or @file{_emacs}):
4445 @example
4446 (setq planner-diary-use-diary t)
4447 (planner-diary-insinuate)
4448 @end example
4450 You should also customize or set @code{planner-day-page-template} to
4451 include a @samp{* Diary}:
4453 @example
4454 (setq planner-day-page-template
4455  "* Tasks\n\n\n* Schedule\n\n\n* Diary\n\n\n* Notes")
4456 @end example
4458 @kbd{C-c C-e} updates the diary sections.  @kbd{C-u C-c C-e} forces an
4459 update---it inserts the diary section for the day, even if the day is in
4460 the past or if there is no @samp{Diary} section in the buffer.
4462 @item
4463 (GNU EMACS ONLY) You can put the following line of Lisp code in your
4464 day plan pages to display your diary entries:
4466 @example
4467 <lisp>(planner-diary-entries-here)</lisp>
4468 @end example
4470 You can do this automatically for all day plan pages:
4472 @smallexample
4473 (setq planner-day-page-template
4474   "* Tasks\n\n\n* Diary\n\n<lisp>(planner-diary-entries-here)</lisp>
4475 \n* Notes")
4476 @end smallexample
4478 When you open a day plan page outside Emacs, you will see the line of
4479 Lisp code and not your diary entries.
4481 @end enumerate
4483 If you want to see your diary entries for more than just one day, set
4484 @code{planner-diary-number-of-days} accordingly.  This works for either
4485 of the two approaches.
4487 These diary sections are only intended for display. Editing them will
4488 not affect your diary file. If you want to add entries to your diary,
4489 you should use the usual Emacs diary and calendar methods for doing
4490 that, or call @code{planner-diary-add-entry}.
4492 If you want to use the Cal-Desk package, simply follow the instructions
4493 in @file{cal-desk.el}.  If you get the Cal-Desk layout from the Calendar
4494 buffer, you get it in the day plan buffer, too.
4496 If you use Planner-Diary, you might consider using the Calendar support
4497 of Planner. (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}) To get
4498 Calendar integration, add this to your @file{.emacs} (or @file{_emacs}):
4500 @example
4501 (planner-insinuate-calendar)
4502 @end example
4504 If @code{planner-diary-create-section-flag} is non-nil, sections are
4505 always inserted if necessary.
4507 @cindex planner2diary.py, using
4508 If you want to import Planner entries into your Diary file, the
4509 @file{planner2diary.py} script will accomplish this for you.  To use it,
4510 execute @code{planner2diary.py} on the command line, specifying your
4511 planner directory as the first and only argument.
4513 @subheading Options
4515 @defopt planner-diary-create-section-flag
4516 Non-nil means create the requested diary sections if they do not
4517 exist. By default, planner-diary tries to create the section. If you
4518 want more control over your pages, you can set this to nil. Trying to
4519 write a diary section to a page that does not have it yet will then
4520 result in an error.
4521 @end defopt
4523 By default, planner-diary lists only the appointments you have on that
4524 day. If you want the date headers included even when showing the diary
4525 entries for a single day, set planner-diary-include-all-output to
4526 non-nil.
4528 @defopt planner-diary-include-all-output-flag
4529 Non-nil means don't omit any data when copying diary entries into day
4530 pages.
4531 @end defopt
4533 @subheading Functions
4535 @file{planner-diary.el} defines the following interactive functions:
4537 @defun planner-diary-add-entry date time text
4538 Prompt for a diary entry to add to @code{diary-file} on @var{date}.
4539 Uses @code{planner-annotation-functions} to make hyperlinks.
4540 @var{time} and @var{text} are used in the description."
4541 @end defun
4543 @defun planner-diary-insert-diary force
4544 Insert the fancy diary for the day into the day plan file. If
4545 @var{force} is non-nil, insert a diary section even if there is no
4546 @var{planner-diary-string} in the buffer.
4547 @end defun
4549 @defun planner-diary-insert-diary-maybe force
4550 Maybe insert the fancy diary for the day into the day plan file. If the
4551 current day is in the past and @var{force} is nil, don't do anything. If
4552 @var{force} is non-nil, insert a diary section even if there is no
4553 @code{planner-diary-string} in the buffer.
4554 @end defun
4556 @defun planner-diary-insert-appts force
4557 Insert the diary appointments for the day into the day plan file.  If
4558 @var{force} is non-nil, insert a diary appointments section even if
4559 there is no @code{planner-diary-appts-string} in the buffer.
4560 @end defun
4562 @defun planner-diary-insert-appts-maybe force
4563 Maybe insert the diary appointments for the day into the day plan file.
4564 If the current day is in the past and @var{force} is nil, don't do
4565 anything.  If @var{force} is non-nil, insert a diary appointments
4566 section even if there is no @code{planner-diary-appts-string} in the
4567 buffer.
4568 @end defun
4570 @defun planner-diary-insert-cal-desk force
4571 Insert the cal-desk diary for the day into the day plan file.  If
4572 @var{force} is non-nil, insert a cal-desk diary section even if there is
4573 no @code{planner-diary-cal-desk-string} in the buffer.
4574 @end defun
4576 @defun planner-diary-insert-cal-desk-maybe force
4577 Maybe insert the cal-desk diary for the day into the day plan file.  If
4578 the current day is in the past and @var{force} is nil, don't do
4579 anything.  If @var{force} is non-nil, insert a cal-desk appointments
4580 section even if there is no @code{planner-diary-cal-desk-string} in the
4581 buffer.
4582 @end defun
4584 @defun planner-diary-insert-public force
4585 Insert the public diary for the day into the day plan file.  If
4586 @var{force} is non-nil, insert a public diary section even if there is
4587 no @code{planner-diary-public-string} in the buffer.
4588 @end defun
4590 @defun planner-diary-insert-public-maybe force
4591 Maybe insert the public diary for the day into the day plan file.  If
4592 the current day is in the past and @var{force} is nil, don't do
4593 anything.  If @var{force} is non-nil, insert a public appointments
4594 section even if there is no @code{planner-diary-public-string} in the
4595 buffer.
4596 @end defun
4598 @defun planner-diary-insert-private force
4599 Insert the private diary for the day into the day plan file.  If
4600 @var{force} is non-nil, insert a private diary section even if there is
4601 no @code{planner-diary-private-string} in the buffer.
4602 @end defun
4604 @defun planner-diary-insert-private-maybe force
4605 Maybe insert the private diary for the day into the day plan file.  If
4606 the current day is in the past and @var{force} is nil, don't do
4607 anything.  If @var{force} is non-nil, insert a private appointments
4608 section even if there is no @code{planner-diary-private-string} in the
4609 buffer.
4610 @end defun
4612 @defun planner-diary-insert-all-diaries force
4613 Update all diary sections in a day plan file.  If @var{force} is
4614 non-nil, insert a diary section even if there is no section header.  It
4615 only inserts diaries if the corresponding @code{planner-diary-use-}*
4616 variable is @samp{t}.
4617 @end defun
4619 @defun planner-diary-insert-all-diaries-maybe force
4620 Update all diary sections in a day plan file.  If the current day is in
4621 the past and @var{force} is nil, don't do anything.  If @var{force} is
4622 non-nil, insert a diary section even if there is no section header.  It
4623 only inserts diaries if the corresponding @code{planner-diary-use-}*
4624 variable is @samp{t}.
4625 @end defun
4627 @defun planner-diary-show-day-plan-or-diary
4628 Show the day plan or diary entries for the date under point in calendar.
4629 Add this to @code{calendar-move-hook} if you want to use it.  In that
4630 case, you should also @command{remove-hook} @samp{planner-calendar-show}
4631 from @code{calendar-move-hook}.
4632 @end defun
4634 @subheading Keys
4636 @file{planner-diary.el} adds the following keybinding to Planner, if
4637 @command{planner-diary-insinuate} is in your @file{.emacs} (or
4638 @file{_emacs}):
4640 @itemize
4642 @item
4643 @kbd{C-c C-e} updates the diary sections by calling
4644 @code{planner-diary-insert-all-diaries-maybe}.
4646 @end itemize
4648 @menu
4649 * Planner-Diary Advanced Features::  
4650 @end menu
4652 @node Planner-Diary Advanced Features,  , Diary, Diary
4653 @comment  node-name,  next,  previous,  up
4654 @subsubsection Planner-Diary Advanced Features
4655 @cindex diary, using Planner with
4656 @cindex @file{planner-diary.el}, advanced features
4658 The features described here are part of the development version.  They
4659 are subject to change without notice.  They may be buggy.  The
4660 documentation may be inaccurate.  Use at your own risk.
4662 There is a lot of code redundancy in the development version.  This is
4663 intentional and makes it easier to change the code for one type of diary
4664 section without breaking others.
4666 @subheading Diary views
4668 @cindex @file{planner-diary.el}, views
4669 Currently Planner-Diary supports six different views of your diary
4670 entries:
4672 @enumerate
4673 @item
4674 Ordinary fancy diary display (what you get by pressing @kbd{d} in the
4675 calendar buffer with @code{fancy-diary-display} switched on)
4677 @item
4678 Schedule/Appointments (all entries from 1 that have a time assigned to
4679 them
4681 @item
4682 Diary without appts (1 without 2)
4684 @item
4685 cal-desk display (appts on top, non appts entries at bottom)
4687 @item
4688 A private diary (same as 1, but uses a different diary-file)
4690 @item
4691 A public diary (same as 1, but uses a different diary-file)
4692 @end enumerate
4694 Put the following line of Lisp code in your day plan pages to display
4695 your diary entries:
4697 @example
4698 <lisp>(planner-diary-entries-here)</lisp>
4699 @end example
4701 The function @code{planner-diary-entries-here} takes two optional
4702 arguments---the diary file you want to use and the number of days you
4703 want to display.
4705 @subheading Exporting Planner-specific Diary files
4707 @cindex @file{planner-diary.el}, exporting entries
4708 If you would like to export diary entries from your Planner pages to
4709 separate Diary files, add @code{(require 'planner-export-diary)} to your
4710 config.  The following steps describe the usage of the functions and
4711 options contained in this file.
4713 @enumerate
4715 @item
4716 Customize @code{planner-export-diary-file}.  The default value is
4717 ``~/diary.planner''.
4719 @item
4720 Add the following line to your main Diary file (default: ``~/diary'').
4722 @example
4723 #include ~/diary.planner
4724 @end example
4726 @item
4727 Then, call @command{M-x planner-export-diary-future} whenever you want
4728 future diary entries published. You can automatically publish entries by
4729 adding either of the following to your .emacs.
4731 @itemize
4733 @item (planner-export-diary-future)
4734 Publish future entries on startup.
4736 @item (add-hook 'planner-mode-hook 'planner-export-diary-setup)
4737 Publish future entries whenever you save a Planner file.
4739 @end itemize
4741 @end enumerate
4743 @node Appointments, Timeclock, Diary, Scheduling and Time
4744 @comment  node-name,  next,  previous,  up
4745 @subsection Appointments
4746 @cindex appointments
4747 @cindex @file{planner-appt.el}, using
4749 If you would like to use planner for your appointment alerts
4750 instead of using the diary system, you might like to try
4751 @file{planner-appt}.
4753 According to your preferences, you may choose from two different
4754 approaches. Appointments in task descriptions on today's plan
4755 page are like this:
4757 @example
4758 #A   _ @@12:45 Do something (TaskPool)
4759 @end example
4761 @noindent
4762 and appointments in today's schedule section are like this:
4764 @example
4765 * Schedule
4767   9:00 | 12:00 | Read Simmel's Philosophy of Money
4768 @@12:45 |       | Do Something Else
4769 @@13:00 | 14:00 | lunch
4770 @end example
4772 @noindent
4773 You can even use both at the same time if you like.
4775 @c Jim Ottaway <j.ottaway@lse.ac.uk>: Changed these kinds of heading
4776 @c back to @unnumberedsec, but left the originals commented out in
4777 @c case there was a good reason for the @strong formatting.
4779 @c @noindent
4780 @c @strong{Usage}
4781 @unnumberedsubsubsec Usage
4783 In the file where you configure Planner, add one of the following.
4785 @itemize
4786 @item
4787 For task-based appointments: @code{(planner-appt-use-tasks)}
4788 @item
4789 For schedule-based appointments: @code{(planner-appt-use-schedule)}
4790 @item
4791 For both task- and schedule-based appointments:
4792 @code{(planner-appt-use-tasks-and-schedule)}
4793 @end itemize
4795 @noindent
4796 And finally if you want everything to be updated automatically add:
4798 @example
4799 (planner-appt-insinuate)
4800 @end example
4802 If you don't want to do the insinuation then you can call:
4804 @example
4805 M-x planner-appt-update
4806 @end example
4808 @noindent
4809 after editing appointments on the page (note that this is not
4810 necessary if you use tasks for the appointments and you don't edit
4811 the task descriptions outside of @code{planner-edit-task-description}).
4813 Try both methods; if you find that you prefer one over the
4814 other, use one of the specific @code{planner-appt-use-} functions, as
4815 there are some performance gains when using one method exclusively.
4817 @menu
4818 * Task-based Appointments::     
4819 * Schedule-based Appointments::  
4820 * Viewing Appointments::        
4821 * Appointment Updating on Save::  
4822 * Appointment and Calendar Integration::  
4823 * Appointment Hooks::           
4824 @end menu
4827 @node Task-based Appointments, Schedule-based Appointments, Appointments, Appointments
4828 @comment  node-name,  next,  previous,  up
4829 @subsubsection Task-based Appointments
4830 @cindex appointments, task-based
4831 @cindex task-based appointments
4833 A task has an appointment if it looks like this:
4835 @example
4836 #A   _ @@12:45 Do something (TaskPool)
4837 @end example
4839 @noindent
4840 i.e., if it has @@ followed by a time at the beginning.  This means
4841 the task is a regular appointment, and will not be carried forward
4842 at the start of a new day.
4844 Alternatively, it may have a !, like this:
4846 @example
4847 #A   _ !12:45 Do something else (TaskPool)
4848 @end example
4850 @noindent
4851 This makes it a "nagging" appointment, which @emph{will} be carried
4852 forward.  It will, however, lose the appointment time in the
4853 process.
4855 This may seem like a strange feature, but here is Henrik's
4856 reasoning:
4858 @quotation
4859 Sometimes I have a task that I want to do at a certain time, so I
4860 make it an appointment.  If I don't get around to doing it anyway,
4861 I want it to be carried forward.  Basically, I sometimes use
4862 appointments on tasks to annoy me until I get them done. :)
4863 @end quotation
4865 You can edit, move and delete tasks with the usual functions, and
4866 appointments will be updated automatically.
4868 You can update all task appointments on your page with
4870 @example
4871 M-x planner-appt-update
4872 @end example
4874 @c @noindent
4875 @c @strong{Cyclic Entries}
4877 @unnumberedsubsubsec Cyclic Entries
4878 @cindex appointments, cyclic task entries
4880 If you have @file{planner-cyclic} (@pxref{Cyclic Tasks}) loaded, entries
4881 in your cyclical tasks file such as
4883 @example
4884 Friday #A _ @@12:45 staff meeting
4885 @end example
4887 @noindent
4888 will appear every Friday and there will be an appointment alert set
4891 @c @noindent
4892 @c @strong{Appointments Section}
4893 @unnumberedsubsubsec Appointments Section
4894 @cindex appointments, appointments section
4896 You can have all task-based appointments copied to a separate section,
4897 providing an overview of your appointments.
4899 To do this, add
4901 @example
4902 (setq planner-appt-task-use-appointments-section-flag t)
4903 @end example
4905 @noindent to your configuration, or use @kbd{M-x customize-variable}.
4907 The variable @code{planner-appt-task-appointments-section} is the name
4908 of the section where the appointments will be copied.  By default, it is
4909 set to @code{"Schedule"}, which means that task appointments will be
4910 intermingled with schedule entries.
4912 It is also a good idea to add the section you wish to use to
4913 @code{planner-day-page-template} in order to control where that section
4914 will appear on the page (otherwise it will appear at the top).
4916 The format of the appointments follows that of a schedule; if you
4917 don't like the way it looks, you can write something different and set
4918 @code{planner-appt-format-appt-section-line-function} appropriately.
4919 See the documentation for
4920 @code{planner-appt-format-appt-section-line-function} for details.  It
4921 should be fairly easy to see what needs to be done if you look at the
4922 source for the default function (which is
4923 @code{planner-appt-format-appt-section-line}).
4925 If the section specified in
4926 @code{planner-appt-task-appointments-section} is the same as the
4927 schedule section specified in @code{planner-appt-schedule-section} (by
4928 default @code{"Schedule"}), the default formatting function adds a
4929 @samp{#} to the description so that one can visually distinguish
4930 appointments from the task list from those that have been added to the
4931 schedule.
4933 @node Schedule-based Appointments, Viewing Appointments, Task-based Appointments, Appointments
4934 @comment node-name,  next,  previous,  up
4935 @subsubsection Schedule-Based Appointments
4936 @cindex appointments, schedule-based
4937 @cindex schedule-based appointments
4939 Some scheduled tasks require reminders, others don't.  In this
4940 schedule:
4942 @example
4943 * Schedule
4945 9:00   | 12:00 | Read Simmel's Philosophy of Money
4946 @@12:45          Do Something Else
4947 @@13:00 | 14:00 | lunch
4948 @@14:30 |       | Meet jrs to discuss his dissertation
4949 @@16:00           Test Society seminar
4950 18:00            go home
4951 @end example
4953 @noindent
4954 those that have an @@ prefix will be added to the appointment
4955 reminder list; the others will not.  The formats that are
4956 recognized are fairly flexible, as you can see from the example.
4958 If you change your schedule, you can update the appointment list
4959 with
4961 @example
4962 M-x planner-appt-update
4963 @end example
4965 @noindent You can also have the schedule sorted as part of the update,
4966 if you have this in your configuration:
4968 @example
4969 (setq planner-appt-sort-schedule-on-update-flag t)
4970 @end example
4972 @c @noindent 
4973 @c @strong{Cyclical Entries}
4974 @unnumberedsubsubsec Cyclical Entries
4975 @cindex appointments, cyclic schedule entries
4977 You can also have cyclical schedule entries(@pxref{Cyclic Tasks}) if you
4980 @example
4981 (planner-appt-schedule-cyclic-insinuate)
4982 @end example
4984 @noindent to your configuration.
4986 If you put an entry in your cyclical task file like this
4988 @example
4989 Friday @@12:45 | 13:45 | Staff Meeting
4990 @end example
4992 @noindent
4993 then it will appear in your schedule every Friday, and an
4994 appointment alert will be set up.
4996 @node Viewing Appointments, Appointment Updating on Save, Schedule-based Appointments, Appointments
4997 @comment  node-name,  next,  previous,  up
4998 @subsubsection Viewing Appointments
4999 @cindex appointments, viewing
5001 The command @command{planner-appt-show-alerts} will show all appointment
5002 alerts currently scheduled.
5004 @subheading Functions
5006 There are two commands that show appointments in the future; the one
5007 displays them in a pop-up buffer, the other puts the information into
5008 the current day page.
5010 @deffn {Command} planner-appt-forthcoming-display &optional days
5011 Display a buffer of appointments for today and the next
5012 @var{days}. Optional prefix argument @var{days} is the number of days
5013 ahead to look. Its default value is defined by
5014 @code{planner-appt-forthcoming-days}.
5015 @end deffn
5017 @deffn {Command} planner-appt-forthcoming-update-section &optional days
5018 In today's plan page, add or update a list of forthcoming
5019 appointments. Optional prefix argument @var{days} is the number of
5020 days ahead to look. Its default value is defined by
5021 @code{planner-appt-forthcoming-days}.  The section heading to use is
5022 defined by @code{planner-appt-forthcoming-appt-section}.
5023 @end deffn
5025 @subheading Options
5027 @defopt planner-appt-forthcoming-days
5028 The number of days to look ahead for forthcoming appointments.  The
5029 default value is seven days.
5030 @end defopt
5032 @defopt planner-appt-forthcoming-appt-section
5033 The name of the section to use for inserting a list of forthcoming
5034 appts.  The default value is @code{"Forthcoming Appointments"}.
5035 @end defopt
5037 @defopt planner-appt-forthcoming-show-day-names-flag
5038 When non-nil (the default), day names will be shown in forthcoming
5039 appointments.
5040 @end defopt
5042 @defopt planner-appt-forthcoming-repeat-date-string
5043 String to insert for repeated dates.
5045 When there are multiple appointments for a date, the date is inserted
5046 in the first appointment and the others have this string in their date
5047 cell.
5049 If the string consists of anything other than whitespace, then a link
5050 to the day page for the appoinment is created.
5051 @end defopt
5053 @defopt planner-appt-forthcoming-look-at-cyclic-flag
5054 When non-nil, find forthcoming appointments in the cyclic diary file
5055 (@pxref{Cyclic Tasks}) as well as in plan pages. Default is @samp{t}.
5056 @end defopt
5058 @node Appointment Updating on Save, Appointment and Calendar Integration, Viewing Appointments, Appointments
5059 @comment  node-name,  next,  previous,  up
5060 @subsubsection Appointment Updating on Save
5061 @cindex appointments, updating on save
5063 @subheading Options
5065 @defopt planner-appt-update-appts-on-save-flag
5066 When non-nil, update appointment reminders whenever today's plan page is
5067 saved. Default value is @samp{nil}.
5068 @end defopt
5070 @node Appointment and Calendar Integration, Appointment Hooks, Appointment Updating on Save, Appointments
5071 @comment  node-name,  next,  previous,  up
5072 @subsubsection Appointment and Calendar Integration
5074 Not strictly part of appointment handling, but if one isn't using
5075 the diary, marking dates with plan pages seems to make sense.
5077 @subheading Functions
5079 @defun planner-appt-calendar-insinuate
5080 Add a hook to diary display so that dates in the calendar that have day
5081 pages are highlighted
5082 @end defun
5084 @node Appointment Hooks,  , Appointment and Calendar Integration, Appointments
5085 @comment  node-name,  next,  previous,  up
5086 @subsubsection Appointment Hooks
5088 @subheading Options
5090 @defvr {Hook} planner-appt-update-hook
5091 Hook run after @code{planner-appt-update} has updated the appointment
5092 list.
5093 @end defvr
5095 @node Timeclock, schedule.el, Appointments, Scheduling and Time
5096 @comment  node-name,  next,  previous,  up
5097 @subsection Timeclock
5098 @cindex @file{planner-timeclock.el}, using
5099 @cindex @file{planner-timeclock-summary.el}, using
5100 @cindex @file{planner-timeclock-summary-proj.el}, using
5101 @cindex timeclock, using Planner with
5103 This module allows you to clock in and clock out of your projects
5104 (@pxref{Time Intervals, , , Emacs, GNU Emacs Manual}) You can also
5105 generate reports with the @code{<timeclock-report>} tag. You may want to
5106 read the ``Keeping Track of Time'' page to see how you can use
5107 planner-timeclock to produce detailed reports;
5108 @xref{Keeping Track of Time}.
5110 @file{timeclock.el} is part of GNU Emacs. If you are using XEmacs,
5111 please use the version of @file{timeclock.el} that comes with Planner in
5112 the @file{contrib} directory.
5114 With @file{planner-timeclock.el} loaded,
5115 @command{planner-task-in-progress} clocks in a task.  To clock out,
5116 use @command{planner-task-done} or @command{timeclock-out}.
5118 @file{planner-timeclock.el} defines the following keybindings:
5120 @itemize
5121 @item @kbd{C-c C-i}: @code{planner-task-in-progress}.
5122 @item @kbd{C-c C-o}: @code{timeclock-out}.
5123 @item @kbd{C-c C-T C-i}: @code{planner-timeclock-in}. (XEmacs)
5124 @item @kbd{C-c C-T C-o}: @code{timeclock-out}. (XEmacs)
5125 @item @kbd{C-c C-S-t C-i}: @code{planner-timeclock-in}. (GNU Emacs)
5126 @item @kbd{C-c C-S-t C-o}: @code{timeclock-out}. (GNU Emacs)
5127 @end itemize
5129 If you use @code{timeclock} a lot, you may also be interested in
5130 Dryice Liu's @file{planner-timeclock-summary.el}, which produces
5131 timeclock reports for planner files.
5133 Here is a sample report:
5135 @example
5136 Project               |     Time| Ratio| Task
5137 PlannerMaintenance    |  0:03:58|  1.1%| Merge doc patch
5138                       |  0:17:09|  5.0%| Track down subdirectories
5139                       |  0:18:11|  5.3%| Merge planner-timeclock-summary-proj.el
5140                Total: |  0:39:18| 11.4%|
5141 JapanCaseStudy        |  2:37:56| 45.6%| Prototype search result page
5142                       |  0:31:50|  9.2%| Update design documents
5143                Total: |  3:09:46| 54.8%|
5144 ChristmasLetter       |  1:46:37| 30.8%| Write and send my Christmas letters
5145                Total: |  1:46:37| 30.8%|
5146 LinuxPeople           |  0:10:29|  3.0%| Send questions for Linux in Education
5147                Total: |  0:10:29|  3.0%|
5148 @end example
5150 If you add @code{(require 'planner-timeclock-summary)} to your
5151 @file{~/.emacs}, you can then use it in two ways.
5153 @itemize
5155 @item Display a temporary buffer
5157 Call @code{planner-timeclock-summary-show} and Emacs will ask you which
5158 day's summary do you want. Choose the date as anywhere else of
5159 Emacs planner, and a tempory buffer will be displayed with the
5160 timeclock summary of that day.
5162 To review tasks over a date range, use
5163 @code{planner-timeclock-summary-show-range}. You can use a regexp or a
5164 function to filter tasks by calling
5165 @code{planner-timeclock-summary-show-range-filter}.
5167 @item Rewrite sections of your planner
5169 Choose this approach if you want timeclock summary to be in their
5170 own section and you would like them to be readable in your plain
5171 text files even outside Emacs. Caveat: The timeclock summary
5172 section should already exist in your template and will be rewritten
5173 when updated. Tip: Add @code{planner-timeclock-summary-section}
5174 (default: @samp{"Timeclock"}) to your @code{planner-day-page-template}.
5176 To use, call @code{planner-timeclock-summary-update} in the planner
5177 day page to update the section. If you want rewriting to be
5178 automatically performed, call
5179 @code{planner-timeclock-summary-insinuate} in your @file{.emacs} file.
5180 @end itemize
5182 @file{planner-timeclock-summary-proj.el} produces task / time
5183 breakdowns on plan pages. Reports are of the form:
5185 @example
5186 TASK 0 | duration
5187 TASK 1 | duration
5188  TOTAL | duration.
5189 @end example
5191 To use, add @code{(require 'planner-timeclock-summary)} to your
5192 @file{~/.emacs}. Call @code{planner-timeclock-summary-proj-current}
5193 from a project page. The report is inserted at the current position in
5194 the buffer. The function @code{planner-timeclock-summary-proj-section}
5195 does the same but the report is inserted inside a section called
5196 @samp{* Report}.
5198 @node schedule.el,  , Timeclock, Scheduling and Time
5199 @comment  node-name,  next,  previous,  up
5200 @subsection @file{schedule.el}
5201 @cindex @file{planner-schedule.el}, using
5202 @cindex @file{schedule.el}, using Planner with
5204 @file{planner-schedule.el} allows you to project task completion time.
5205 Tasks should be of the form:
5207 @example
5208 #A0 _ 2h Do something
5209 #B0 _ 1h30m Do something
5210 #B0 _ 2d Do something
5211 #B0 _ 2w Do something
5212 #B0 _ 10s Do something
5214 s: seconds, m: minutes, h: hours, d: days, w: weeks
5215 @end example
5217 @file{schedule.el} is included with Planner in the @file{contrib}
5218 directory, but you can alternatively get it from
5219 @url{http://www.newartisans.com/johnw/Emacs/schedule.el} if desired.
5221 @file{schedule.el} provides a single Lisp function,
5222 @code{schedule-completion-time}. It takes an Emacs time object and a
5223 quantity of seconds. It returns an Emacs time object that represents
5224 when the given number of seconds will be completed, assuming that work
5225 can only be done during work hours.
5227 The available work hours are affected by several factors:
5229 @enumerate
5231 @item
5232 If @file{timeclock.el} is being used, the amount of time left in the
5233 current work day (@code{timeclock-workday-remaining})
5234 (@pxref{Time Intervals, , , Emacs, GNU Emacs Manual})
5236 @item
5237 The amount of time in each work day (@code{schedule-workday})
5239 @item
5240 The definition of a work week (@code{schedule-week})
5242 @item
5243 Any holidays defined in the Emacs calendar
5244 (@pxref{Holidays, , , Emacs, GNU Emacs Manual})
5246 @item
5247 Any appointments in the Emacs diary
5248 (@pxref{Appointments, , , Emacs, GNU Emacs Manual})
5250 @end enumerate
5252 Taking all of the ``block out'' periods into account,
5253 @code{schedule-completion-time} will compute when the given number of
5254 seconds will be done, based on your current definitions of time
5255 available.
5257 As an example, here's a function which, given a list of durations
5258 in seconds, will return a list of completion times starting from
5259 the current moment:
5261 @example
5263   (defun compute-completion-times (&rest durations)
5264     ``Compute completion times for a list of DURATIONS (in seconds).''
5265     (let ((now (current-time)))
5266       (mapcar
5267        (function
5268         (lambda (dura)
5269           (setq now (schedule-completion-time now dura))))
5270        durations)))
5272 @end example
5274 To call this function, do:
5276 @example
5278 (compute-completion-times 3600 7200 3600)
5280 @end example
5282 @subheading Keys
5284 @file{planner-schedule.el} defines the following keybindings:
5286 @kbd{C-c RET} is bound to @command{planner-schedule-show-end-project}.
5287 @kbd{C-c C-m} is also bound to
5288 @command{planner-schedule-show-end-project}.
5290 In XEmacs, @command{planner-schedule-show-end-project} is bound to
5291 @kbd{C-c C-T c-e} and @kbd{C-c C-S-t C-e}.
5293 @subheading Functions
5295 @file{planner-schedule.el} defines the following interactive
5296 functions:
5298 @defun planner-schedule-show-end-project
5299 Display the estimated project completion time.
5300 @end defun
5302 @file{schedule.el} does not define any interactive functions, or
5303 keybindings.
5305 @node Finances, Contacts and Conversations, Scheduling and Time, Managing Your Information
5306 @comment  node-name,  next,  previous,  up
5307 @section Finances
5308 @cindex finances
5310 Currently, Planner provides one module dedicated to tracking your
5311 finances. This module works with a program called Ledger.
5313 @menu
5314 * Ledger::                      Personal finances: planner-ledger.el
5315 @end menu
5317 @node Ledger,  , Finances, Finances
5318 @comment  node-name,  next,  previous,  up
5319 @subsection Ledger
5320 @cindex finances
5321 @cindex @file{planner-ledger.el}, using
5322 @cindex @file{ledger}, using Planner with
5324 @file{planner-ledger.el} provides integration between planner and John
5325 Wiegley's ledger accounting program, which can be found at
5326 @url{http://newartisans.com/johnw/ledger.tar.gz}.
5328 To use planner-ledger to insert a ledger balance overview and a list
5329 of pending transactions into planner day pages, make sure that your
5330 day page includes sections that match
5331 @code{planner-ledger-balance-regexp} and
5332 @code{planner-ledger-pending-regexp}. Example:
5334 @example
5335 * Tasks
5337 * Ledger
5339 ** Pending transactions
5341 * Notes
5343 @end example
5345 You can manually update ledger sections with the
5346 @command{planner-ledger-insert-maybe} command.
5348 You can also automatically update ledger sections with the following
5349 hook:
5351 @example
5352 (add-hook 'planner-goto-hook 'planner-ledger-insert-maybe)
5353 @end example
5355 You can create ledger entries from specially-formatted tasks using
5356 @command{planner-ledger-add-entry-from-task}.  Tasks should be of the
5357 form @samp{payment due: payee, amount [comment]}.  Example:
5359 @example
5360 #A1 _ payment due: foobar, $1000.00 some comment here
5361 #A2 _ payment due: baz, 1000.00
5362 @end example
5364 @subheading Options
5366 @defopt planner-ledger-balance-accounts
5367 List of accounts to be included or excluded from the balance overview.
5368 @samp{+} includes all matching accounts, and @samp{-} excludes
5369 matching accounts.  See the documentation for
5370 @command{ledger-run-ledger} for more details.
5371 @end defopt
5373 @defopt planner-ledger-balance-regexp
5374 Regular expression matching section for ledger balance.  Do not store
5375 other data in this section, as it will be overwritten.
5376 @end defopt
5378 @defopt planner-ledger-pending-regexp
5379 Regular expression matching section for ledger balance.  Do not store
5380 other data in this section, as it will be overwritten.
5381 @end defopt
5383 @defopt planner-ledger-payment-task-regexp
5384 Regular expression matching special ledger tasks.
5385 @end defopt
5387 @subheading Functions
5389 @defun planner-ledger-insert-maybe
5390 Update any ledger sections on the current page.
5391 @end defun
5393 @defun planner-ledger-add-entry-from-task
5394 Create a ledger entry based on the task at point.  Task should match
5395 @code{planner-ledger-payment-task-regexp}.
5396 @end defun
5398 @node Contacts and Conversations, Tracking Research and Resources, Finances, Managing Your Information
5399 @comment  node-name,  next,  previous,  up
5400 @section Contacts and Conversations
5401 @cindex contacts
5402 @cindex conversations
5404 Planner has two modules available for keeping track of contact and
5405 conversation information. The first uses the Big Brother Database
5406 (BBDB), and the second uses Emacs Relay Chat (ERC). BBDB is a full
5407 contact database. ERC is a client for chatting online on Internet Relay
5408 Chat (IRC) networks. The ERC module for Planner will help you keep
5409 track of online conversations you have if you use ERC for those
5410 conversations, but does not by itself store contact information other
5411 than the time you had the conversation, the network and channel you were
5412 on when you had it, and maybe who you had it with. If you are looking
5413 for a way to manage your full address book, then @file{planner-bbdb.el}
5414 in combination with BBDB is what you are looking for.
5416 @menu
5417 * BBDB::                        Contacts: planner-bbdb.el
5418 * Emacs Relay Chat::            Internet Relay Chat: planner-erc.el
5419 @end menu
5421 @node BBDB, Emacs Relay Chat, Contacts and Conversations, Contacts and Conversations
5422 @comment  node-name,  next,  previous,  up
5423 @subsection BBDB
5424 @cindex @file{planner-bbdb.el}, using
5425 @cindex BBDB, using Planner with
5427 @file{planner-bbdb.el} allows you to refer to your contacts easily
5428 from within a planner page. @inforef{Top, the BBDB Manual, bbdb}.
5430 @samp{[[bbdb://Sacha.*Chua][Sacha]]}, for example, will be linked to
5431 the blog, web or net fields of the first matching BBDB record.
5433 @file{planner-bbdb.el} does not define any interactive functions, or
5434 keybindings.
5436 @node Emacs Relay Chat,  , BBDB, Contacts and Conversations
5437 @comment  node-name,  next,  previous,  up
5438 @subsection Emacs Relay Chat
5439 @cindex @file{planner-erc.el}, using
5440 @cindex ERC, using Planner with
5441 @cindex Emacs Relay Chat, using Planner with
5442 @cindex IRC, using Planner with
5443 @cindex Internet Relay Chat, using Planner with
5445 To use planner-erc, place @file{planner-erc.el} in your load path
5446 and add this to your @file{.emacs} (or @file{_emacs}):
5448 @example
5450 (require 'planner-erc)
5452 @end example
5454 IRC URLs may be of the following forms.
5456 @example
5457 irc://server/nick,isnick
5458 irc://server/#channel
5459 irc://server
5460 @end example
5462 Annotations will be in the following forms.
5464 @example
5465 [[irc://server/nick,isnick][Chat with nick on server#channel]]
5466 [[irc://server/nick,isnick][Chat with nick on server]]
5467 [[irc://server/#channel][Chat on server#channel]]
5468 [[irc://server][Chat on server]]
5469 @end example
5471 @file{planner-erc.el} does not define any interactive functions, or
5472 keybindings.
5474 @node Tracking Research and Resources, Tracking Development, Contacts and Conversations, Managing Your Information
5475 @comment  node-name,  next,  previous,  up
5476 @section Tracking Research and Resources
5478 Planner provides three modules for keeping track of information
5479 involving three specific tools: w3m, BibTeX, and @file{bookmark.el}.
5481 @menu
5482 * W3m::                         Web browser: planner-w3m.el
5483 * BibTeX::                      Bibliographies: planner-bibtex.el
5484 * Bookmark::                    Bookmarks: planner-bookmark.el
5485 @end menu
5487 @node W3m, BibTeX, Tracking Research and Resources, Tracking Research and Resources
5488 @comment node-name,  next,  previous,  up
5489 @subsection W3m
5490 @cindex @file{planner-w3m.el}, using
5491 @cindex w3m, using Planner with
5493 This module allows you to create tasks from a w3m buffer.
5495 @file{planner-w3m.el} does not define any interactive functions, or
5496 keybindings.
5498 @node BibTeX, Bookmark, W3m, Tracking Research and Resources
5499 @comment node-name,  next,  previous,  up
5500 @subsection BibTeX
5501 @cindex @file{planner-bibtex.el}, using
5503 BibTeX URLs are of the form @samp{bibtex:file/name:key}.
5505 @file{planner-bibtex.el} does not define any interactive functions.
5507 @node Bookmark,  , BibTeX, Tracking Research and Resources
5508 @comment  node-name,  next,  previous,  up
5509 @subsection Bookmark
5510 @cindex bookmarks
5511 @cindex @file{bookmark.el}, using Planner with
5512 @cindex @file{planner-bookmark.el}, using
5514 @file{planner-bookmark.el} uses the @file{remember} package to create a
5515 note whenever you create a bookmark (see @inforef{Bookmarks, Bookmarks,
5516 Emacs}). For more information about @file{remember}, please check out
5518 @itemize
5519 @item
5520 @uref{http://www.emacswiki.org/cgi-bin/wiki/RememberMode} -
5521 EmacsWiki.org page
5522 @item
5523 @uref{http://sacha.free.net.ph/notebook/doc/dev/remember/remember.html}
5524 - Online info documentation
5525 @end itemize
5527 Configure remember according to the instructions in
5528 @file{remember-planner.el} so that notes are saved to your planner
5529 pages.
5531 @defopt planner-bookmark-take-note-after-set-bookmark-flag
5532 Non-nil means show a @code{remember} buffer after setting a new
5533 bookmark.
5534 @end defopt
5536 When you create a bookmark, Emacs will open a buffer for your notes.
5537 @kbd{C-c C-c} saves the buffer to today's page. If you don't want to
5538 save a note, you can kill the buffer.
5540 Bookmark URLs are of the form @samp{bookmark://bookmark-name}.
5542 @file{planner-bookmark.el} does not define any interactive functions.
5544 @node Tracking Development,  , Tracking Research and Resources, Managing Your Information
5545 @comment  node-name,  next,  previous,  up
5546 @section Tracking Development
5547 @cindex version control, using Planner with
5549 Planner has three modules geared toward programmers. Two modules deal
5550 with version control and integrating information from those projects
5551 into the planner page. One module deals with the Gnats bug-tracking
5552 system.
5554 @menu
5555 * Log Edit::                    Changelogs: planner-log-edit.el
5556 * PSVN::                        svn changesets: planner-psvn.el
5557 * XTLA::                        TLA changesets: planner-xtla.el
5558 * Gnats::                       Gnats: The GNU bug reporting system
5559 @end menu
5561 @node Log Edit, PSVN, Tracking Development, Tracking Development
5562 @comment  node-name,  next,  previous,  up
5563 @subsection Log Edit
5564 @cindex cvs, using Planner with
5565 @cindex @file{planner-log-edit.el}, using
5566 @cindex version control, using Planner with
5568 This module allows you to automatically record CVS (and VC) commits
5569 in today's page.
5571 You can load the module with @code{(require 'planner-log-edit)}. When
5572 you load the module, @code{planner-log-edit-add-note} will be added to
5573 @code{log-edit-done-hook}.  A note containing the text of the commit
5574 and optionally a list of modified files will be added to today's page
5575 if you use the the Emacs version control interface. (@pxref{Version
5576 Control, , , Emacs, GNU Emacs Manual})
5578 @subheading Options
5580 @defopt planner-log-edit-include-files-flag
5581 Non-nil means include a list of committed files in the note.
5582 @end defopt
5584 @defopt planner-log-edit-notice-commit-function
5585 Non-nil means include a list of committed files in the note. If you
5586 want to enable this feature for some projects but not for others, set
5587 this to a function that returns t only for the commits you want to
5588 note.
5589 @end defopt
5591 @file{planner-log-edit.el} does not define any interactive functions.
5593 @node PSVN, XTLA, Log Edit, Tracking Development
5594 @comment  node-name,  next,  previous,  up
5595 @subsection PSVN
5596 @cindex PSVN
5597 @cindex @file{planner-psvn.el}, using
5598 @cindex Subversion, integration with
5600 This module enables you to refer to your Subversion (svn) changesets
5601 easily from within a Planner page, and to have your svn commits recorded
5602 automatically as notes in your planner.
5604 You must also have @file{psvn.el}, which is often packaged with
5605 Subversion in GNU/Linux distributions.
5607 You can then load the module by adding @code{(require 'planner-psvn)} to
5608 your @file{~/.emacs}.
5610 Once the module is loaded, Planner will pick up annotation information
5611 from any psvn *svn-log-view* buffer. If you create a task or note while
5612 in such a buffer, that task will have a hyperlink you can follow to
5613 return to the changeset later.
5615 These hyperlinks are of the form
5616 @samp{psvn://http://my.svn-repos.at/svn/project1/trunk@@39}
5618 Additionally, you can have notes for your commits automatically
5619 generated. Set @var{planner-psvn-log-edit-notice-commit-function} to t
5620 to enable this.
5622 By default, these commit notes will include a list of the files
5623 modified. If you would prefer to have this list not included, set
5624 @var{planner-psvn-log-edit-include-files-flag} to nil.
5626 @node XTLA, Gnats, PSVN, Tracking Development
5627 @comment  node-name,  next,  previous,  up
5628 @subsection XTLA
5629 @cindex XTLA
5630 @cindex @file{planner-xtla.el}, using
5632 This module allows you to refer to changesets in Tom Lord's Arch (tla)
5633 version control system. You can load the module with @code{(require
5634 'planner-xtla)}. When you load the module, you can create tasks from
5635 XTLA windows by positioning point on a revision.
5637 XTLA URLs are of the form
5638 @samp{xtla://miles@@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-19}
5640 @file{planner-xtla.el} does not define any interactive functions.
5642 @node Gnats,  , XTLA, Tracking Development
5643 @comment  node-name,  next,  previous,  up
5644 @subsection Gnats
5646 @cindex Gnats
5647 @cindex @file{planner-gnats.el}, using
5648 @cindex bug reports, tracking
5650 @file{planner-gnats.el} provides support for the GNU problem report
5651 management system Gnats. This module allows you to refer to problem
5652 reports using hyperlinks.
5654 Configure your Emacs for Gnats access, then add @samp{(require
5655 'planner-gnats)} to your @file{.emacs}. You can then create tasks from
5656 Gnats edit or view buffers.
5658 To add keybindings to Gnats, use @samp{(planner-gnats-insinuate)}.
5660 Gnats URLs are of the form @samp{gnats:pr-number}.
5662 @file{planner-gnats.el} does not define any interactive functions.
5664 @node Advanced Configuration, Reference Material, Managing Your Information, Top
5665 @comment  node-name,  next,  previous,  up
5666 @chapter Advanced Configuration
5667 @cindex configuration, advanced
5669 @menu
5670 * Customizing Your Day Pages::  Change your templates
5671 * Variables to Customize::      Change various aspects of Planner behavior
5672 * Ideas for Other Keybindings::  Add to and change the default keybindings
5673 @end menu
5675 @node Customizing Your Day Pages, Variables to Customize, Advanced Configuration, Advanced Configuration
5676 @comment  node-name,  next,  previous,  up
5677 @section Customizing Your Day Pages
5679 With the variable @code{planner-day-page-template}, you can define how
5680 you want any newly created day planner pages to look.
5682 You might want to include a section for your diary entries. For how to
5683 do this, see @ref{Diary}.
5685 You can add interactive Lisp buttons with the @file{planner-lisp.el}
5686 module. (@pxref{Interactive Lisp})
5688 Your @code{planner-day-page-template} can also include @samp{|<lisp>|}
5689 tags.
5691 For more complex day pages, you can set
5692 @code{planner-day-page-template} to a function that will be called
5693 from an empty day page buffer. The function should initialize the
5694 contents of the day page.
5696 @node Variables to Customize, Ideas for Other Keybindings, Customizing Your Day Pages, Advanced Configuration
5697 @comment  node-name,  next,  previous,  up
5698 @section Variables to Customize
5699 @cindex customize, variables to
5700 @cindex variables, customization of
5701 @cindex configuration, advanced, variables
5703 If you want to change @code{planner-directory} and some other
5704 variables, either use Customize (@kbd{M-x customize-group RET planner
5705 RET}) or use @code{setq}.  An example of the latter follows.
5707 @example
5708 (setq planner-directory "~/Plans")
5709 @end example
5711 Other user options are:
5713 @vindex planner-use-day-pages
5714 @defopt planner-use-day-pages
5715 If you really don't like day pages, you can set this variable to nil
5716 and you won't be prompted for dates for tasks (and notes, if using
5717 @file{remember-planner}).
5718 @end defopt
5720 @vindex planner-use-plan-pages
5721 @defopt planner-use-plan-pages
5722 If you really don't like plan pages, you can set this variable to nil
5723 and you won't be prompted for plan pages for tasks (and notes, if
5724 using @file{remember-planner}).
5725 @end defopt
5727 @vindex planner-mode-hook
5728 @defopt planner-mode-hook
5729 List of functions to run after @code{planner-mode} is initialized.
5730 @end defopt
5732 @vindex planner-tasks-file-behavior
5733 @defopt planner-tasks-file-behavior
5734 This variable controls what happens to files Planner opens by itself.
5735 If your tasks are associated with plan pages, the plan pages are
5736 updated whenever a task is rescheduled.  This could lead to a lot of
5737 open buffers as Planner applies updates to all linked files.
5738 By default, Planner is configured to do nothing.
5739 A value of @samp{save} means save but do not close buffers, and a
5740 value of @samp{nil} means do not save any of the buffers.
5741 @end defopt
5743 @vindex planner-add-task-at-end-flag
5744 @defopt planner-add-task-at-end-flag
5745 This variable controls where new tasks are created.  Non-nil means
5746 create tasks at the bottom of the first task block.  If you set this
5747 to non-nil, new tasks will be listed in order of creation (oldest).
5748 Tasks carried over from previous days will appear at the bottom of the
5749 list.
5751 Nil means create tasks at the top of the first task block.
5752 Carried-over tasks and newly created tasks are prominently placed on
5753 top of the list of tasks for the day.
5754 @end defopt
5756 @vindex planner-default-page
5757 @defopt planner-default-page
5758 Default page for created tasks.  This is used as the initial value for
5759 tasks.  After you create a task, it will be set to the previous page
5760 used.
5761 @end defopt
5763 @vindex planner-hide-task-status-when-highlighting
5764 @defopt planner-hide-task-status-when-highlighting
5765 Font-locking for tasks may be enough for you to determine status and
5766 priority.  Set this to non-nil if you want to hide the status marker
5767 and rely on font-locking instead.
5768 @end defopt
5770 @vindex planner-create-task-hook
5771 @defopt planner-create-task-hook
5772 Functions run after creating a task. @code{planner-id} hooks into
5773 this.
5774 @end defopt
5776 @vindex planner-expand-name-favor-future-p
5777 @defopt planner-expand-name-favor-future-p
5778 If non-nil, partial dates (ex: @kbd{2} or @kbd{5.2}) are completed to
5779 dates in the future instead of using the current year and month.
5780 @end defopt
5782 @vindex planner-task-dates-favor-future-p
5783 @defopt planner-task-dates-favor-future-p
5784 Like @code{planner-expand-name-favor-future-p}, but only for tasks.
5785 @end defopt
5787 @vindex planner-publish-dates-first-p
5788 @defopt planner-publish-dates-first-p
5789 Non-nil means list day pages first in the planner index.
5790 @end defopt
5792 @node Ideas for Other Keybindings,  , Variables to Customize, Advanced Configuration
5793 @comment  node-name,  next,  previous,  up
5794 @section Ideas for Other Keybindings
5795 @cindex keybindings, customization of
5796 @cindex configuration, advanced, keybindings
5797 @cindex customize, keybindings to
5799 By default and for backward compatibility, the following operations
5800 do not have keybindings, and are only accessible from the Planner
5801 menu:
5803 @itemize @bullet
5805 @item
5806 @code{planner-copy-or-move-region}
5808 @item
5809 @code{planner-delete-task}
5811 @item
5812 @code{planner-task-delegated}
5814 @item
5815 @code{planner-task-pending}
5817 @item
5818 @code{planner-task-open}
5820 @item
5821 @code{planner-renumber-tasks}
5823 @end itemize
5825 You may find it easier to install keybindings for those operations by
5826 inserting the following in your @file{.emacs} (or @file{_emacs}).
5827 Note: This changes some of the default keybindings for Planner.
5829 @example
5830 (planner-install-extra-task-keybindings)
5831 @end example
5833 If you install the extra task keybindings, your keybindings will
5834 include:
5836 @itemize @bullet
5838 @item
5839 @kbd{C-c C-t} will be unbound from the default and will serve as the
5840 prefix for the other task keybindings.
5842 @item
5843 @kbd{C-c C-t C-t}: @code{planner-create-task-from-buffer}.
5845 @item
5846 @kbd{C-c C-t C-k}: @code{planner-delete-task}.
5848 @item
5849 @kbd{C-c C-t C-u}: @code{planner-update-task}.
5851 @item
5852 @kbd{C-c C-t C-c}: @code{planner-copy-or-move-task}.
5854 @item
5855 @kbd{C-c C-t C-S-c}: @code{planner-copy-or-move-region}.
5857 @item
5858 @kbd{C-c C-t C-x}: @code{planner-task-done}.
5860 @item
5861 @kbd{C-c C-t C-S-x}: @code{planner-task-cancelled}.
5863 @item
5864 @kbd{C-c C-t C-d}: @code{planner-task-delegated}.
5866 @item
5867 @kbd{C-c C-t C-p}: @code{planner-task-pending}.
5869 @item
5870 @kbd{C-c C-t C-o}: @code{planner-task-in-progress}.
5872 @item
5873 @kbd{C-c C-t C-r}: @code{planner-raise-task}.
5875 @item
5876 @kbd{C-c C-t C-l}: @code{planner-lower-task}.
5878 @item
5879 @kbd{C-c C-t C-n}: @code{planner-renumber-tasks}.
5881 @end itemize
5883 Other keybindings can be configured by adding this to your
5884 @file{.emacs} (or @file{_emacs}):
5886 @example
5887 (planner-install-extra-context-keybindings)
5888 @end example
5890 This will set up the following keybindings:
5892 @itemize @bullet
5894 @item
5895 @kbd{shift up} @code{planner-move-up}
5897 @item
5898 @kbd{shift down} @code{planner-move-down}
5900 @item
5901 @kbd{shift right} @code{planner-jump-to-link}
5903 @end itemize
5905 @node Reference Material, Getting Help, Advanced Configuration, Top
5906 @comment  node-name,  next,  previous,  up
5907 @chapter Reference Material
5909 @menu
5910 * Keeping Track of Time::       
5911 * Other Interactive Functions::  
5912 * Planner Keybindings::         Default keybindings for Planner
5913 * Sample Configuration Files::  
5914 @end menu
5916 @node Keeping Track of Time, Other Interactive Functions, Reference Material, Reference Material
5917 @section Keeping Track of Time
5919 One of the coolest things you can do with Planner is keep track of how
5920 much time you spend not only on projects but even on particular tasks.
5921 @file{planner-timeclock.el} makes it as easy and natural as marking a
5922 task as in progress, postponed, or done. This can help you determine
5923 just how much time you spend working each day. If you add estimates to
5924 your task descriptions, you'll also be able to use this information to
5925 improve your time estimation skills.
5927 For example, I had converted the TODO my teammate sent me into entries
5928 in my JapanProject plan page, and before starting my work I came up
5929 with rough estimates of the time it would take me to do the tasks. I
5930 also marked which tasks I felt were best suited for my coworker so
5931 that he could get started without worrying about conflicts. I like
5932 working on little tasks first, so I estimated the time it would take
5933 me to complete each task and sorted by my estimates using the
5934 @code{sort} command and some cutting and pasting.
5936 Then the fun began. I wanted to see if I could match my estimates.
5937 Before I started working on a task, I used @kbd{C-c TAB} to mark it
5938 @code{in progress} and start the clock. If I decided to work on
5939 something else, I used @kbd{C-c TAB} to clock out of the previous task
5940 and clock into the new one.
5942 When I finished it, I used @kbd{C-c C-x} (@code{planner-task-done}) to
5943 mark it completed and automatically clock out. This is not yet done
5944 for cancelled tasks, so I clocked out of those manually with @kbd{C-c
5945 C-o} (@code{timeclock-out}). I also clocked out whenever I caught
5946 myself being distracted so that the totals wouldn't include the time I
5947 spent chatting on #emacs or checking out del.icio.us links. =) At the
5948 end of the day, I used
5949 @code{planner-timeclock-summary-show-range-filter} to show me the time
5950 elapsed for all of the tasks I'd worked on over the past two days.
5951 Here's the report for that project, edited to reflect how it looks on
5952 my screen and annotated with comments:
5954 @example
5955 Timeclock summary report for 2004.12.28 - 2004.12.29
5957 Project     |     Time| Ratio| Task
5958 JapanProject|  0:23:17|  3.6%| Translate javadoc comment for Messages.java
5959             |  0:33:48|  5.3%| Translate javadoc comment for LoginAction.java
5960             |  1:54:07| 17.8%| Study Struts in Japanese
5961             |  0:46:08|  7.2%| Add javadoc tags for input, output and forwards
5962             |  1:03:48|  9.9%| Help review code
5963             |  0:04:14|  0.7%| Import todo list
5964             |  0:00:37|  0.1%| 2min       Fix Menu Action's unnecessary code - delegated
5965             |  0:01:01|  0.2%| 2min       Remove unnecessary list in UserRemoveSetupAction - cancelled
5966             |  0:02:10|  0.3%| 2min       Remove hard-coded database path from MenuAction
5967             |  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. ...
5968             |  0:07:32|  1.2%| 5min       Add a method that returns the validity of a user in MUserPeer.
5969             |  0:08:28|  1.3%| 5min       Fix indentation
5970             |  0:03:52|  0.6%| 10min      Fix UserPeer so that it doesn't get null pointer exceptions
5971             |  0:04:34|  0.7%| 5min       Add current password field in user_modify page
5972             |  0:21:56|  3.4%| 15min      Make a super class for our service classes that will receive the database connection. (cancelled)
5973             |  0:06:05|  0.9%| 10min      Remove hard-coded constants from the Logic classes
5974             |  0:10:55|  1.7%| 10min      Move logic from UserBean.checkPassword to UserListLogic
5975             |  0:01:20|  0.2%| 20min      Guard against null pointer exceptions in peer classes
5976             |  0:04:57|  0.8%| 10min      Instead of displaying uneditable data with bean:write, just disable the html:text element
5977             |  0:25:03|  3.9%| 10min      Deploy 10:00 version
5978             |  0:04:46|  0.7%| 5min       Separate the configuration file of database and system into another uninternationalized property file.
5979             |  2:09:48| 20.2%| 1h         Decide on a naming convention for localized messages and update files
5980             |  0:00:07|  0.0%| 20min      Explain what is happening in UserModifyAction's nested ifs - pending
5981             |  1:50:23| 17.2%| 2h         Write Javadoc comments in English and Japanese to explain bean structure
5982             |  0:04:19|  0.7%| 2h         Write Javadoc comments in English and Japanese to explain peer operations (pending)
5983             |  0:05:40|  0.9%| 20min      Make a factory class for the database - pending
5984      Total: | 10:41:41|100.0%|      
5986 Day began: 13:03:58, Day ended: 20:51:46
5987 Time elapsed: 31:47:48, Time clocked: 10:41:41
5988 Time clocked ratio: 33.6%
5989 @end example
5991 The time record isn't perfect. I cancelled some tasks after thinking
5992 about them a little and did some tasks simultaneously. Sometimes I
5993 didn't notice that I was getting distracted, too. Still, having all of
5994 that time information neatly summarized made me realize a number of
5995 things.
5997 First, I goof off much less when I have a nice, broken-down task list
5998 in front of me. There's just something about knowing there's a five-
5999 or ten-minute hack you can get out of the way. I found myself looking
6000 forward to getting to the next task just to see if I could make my
6001 estimate. That said, seeing a five-minute task stretch and stretch due
6002 to unforeseen problems did make me a little nervous. I should probably
6003 just make generous estimates so that I don't end up with bugs because
6004 of haste.
6006 Second, I don't goof off as much as I thought I did, although there's
6007 still room for improvement. Yesterday's workday was 9:00 - 12:00, 1:00
6008 - 5:30--7.5 hours. Today was the last day of work, so cleaning and
6009 celebration interrupted my hacking at around 3:00--5 hours of work.
6010 According to my task list, 10:41/12:30 was productive work. Hmm. 1:49
6011 hours unclocked time when I was thinking or goofing off.
6012 planner-timeclock-summary-show for today reveals that I actually
6013 clocked 5:30 today, which means the goofing off happened yesterday.
6014 That makes sense; I remember a pretty long unclocked segment
6015 recuperating from Japanese overload. (This was before we came up with
6016 the task list.)
6018 Third, keeping track of time is way, way cool even if you don't bill
6019 anyone for your time.
6021 Like the idea? It's easy to try out. Just add
6023 @example
6024 (require 'planner-timeclock)
6025 (require 'planner-timeclock-summary)
6026 @end example
6028 to your ~/.emacs. If you want to try it out now, eval those statements
6029 in your Emacs session. After that, simply use @kbd{C-c TAB} to ``clock
6030 in'' a task before you start working on it and @kbd{C-c C-x}
6031 (@code{planner-task-done}) to mark it completed. @kbd{M-x
6032 planner-task-pending} also clocks out the current task if it was
6033 clocked in. To see a summary of how you spent your day, check out the
6034 different functions in @file{planner-timeclock-summary}.
6036 See @ref{Timeclock} for more details.
6038 Happy hacking!
6040 @node Other Interactive Functions, Planner Keybindings, Keeping Track of Time, Reference Material
6041 @comment  node-name,  next,  previous,  up
6042 @section Other Interactive Functions
6044 With @file{planner.el} loaded, you can use any of the functions in this
6045 section by typing @kbd{M-x} followed by the name of the function. Many
6046 of these functions are also bound to keys.
6048 For a list of Planner keybindings, see @ref{Planner Keybindings}.
6050 They are listed in no particular order.
6052 @file{planner.el} defines the following interactive functions:
6055 @defun planner-create-high-priority-task-from-buffer
6056 Create a high priority task based on this buffer.  Do not use this in
6057 LISP programs. Instead, set the value of
6058 @var{planner-default-task-priority} and call @code{planner-create-task}
6059 or @code{planner-create-task-from-buffer}.
6060 @end defun
6062 @defun defun planner-create-medium-priority-task-from-buffer
6063 Create a medium-priority task based on this buffer.  Do not use this in
6064 LISP programs. Instead, set the value of
6065 @var{planner-default-task-priority} and call @code{planner-create-task}
6066 or @code{planner-create-task-from-buffer}.
6067 @end defun
6069 @defun planner-create-low-priority-task-from-buffer
6070 Create a high-priority task based on this buffer.
6071 Do not use this in LISP programs. Instead, set the value of
6072 @var{planner-default-task-priority} and call @code{planner-create-task} or
6073 @code{planner-create-task-from-buffer}.
6074 @end defun
6076 @defun planner-install-extra-context-keybindings
6077 Install extra context-sensitive keybindings. These keybindings
6078 conflict with @file{windmove.el}, but might be useful.
6079 @end defun
6081 @defun planner-narrow-to-section section &optional create
6082 Widen to the whole page and narrow to the section labelled
6083 @var{section}.  If @var{create} is non-nil and the section is not found,
6084 the section is created.  Return non-nil if @var{section} was found or
6085 created.
6086 @end defun
6088 @defun planner-save-buffers
6089 Save all planner-mode buffers.
6090 @end defun
6092 @defun planner-seek-to-first section
6093 Positions the point at the specified @var{section}, or @samp{Tasks} if
6094 not specified.
6095 @end defun
6097 @defun planner-save-buffers
6098 Save all planner buffers.
6099 @end defun
6101 @defun planner-calendar-insinuate
6102 This hooks Planner into  Emacs Calendar (@pxref{Calendar/Diary, ,
6103 , Emacs, GNU Emacs Manual}).
6105 It adds special planner key bindings to @code{calendar-mode-map}.
6106 After this function is evaluated, you can use the following
6107 planner-related keybindings in @code{calendar-mode-map}:
6109 @table @kbd
6111 @item  n
6112 Jump to the planner page for the current day.
6114 @item  N
6115 Display the planner page for the current day.
6116 @end table
6118 @end defun
6120 @defun planner-kill-calendar-files
6121 Remove planner files shown from Calendar (@pxref{Calendar/Diary, , ,
6122 Emacs, GNU Emacs Manual}).
6124 @end defun
6126 @defun planner-calendar-goto
6127 Goto the plan page corresponding to the calendar date
6128 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
6129 @end defun
6131 @defun planner-calendar-show
6132 Show the plan page for the calendar date under point in another window
6133 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
6134 @end defun
6136 @defun planner-calendar-select
6137 Return to @code{planner-read-date} with the date currently selected
6138 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
6139 @end defun
6141 @defun planner-jump-to-link
6142 Jump to the item linked to by the current item.
6143 @end defun
6145 @defun planner-move-up
6146 Move a task up. You can use this to indicate that you will do a task
6147 before another one. On a note, go to the previous note. On a headline,
6148 go to the previous headline of the same depth.
6149 @end defun
6151 @defun planner-move-down 
6152 Move down. You can use this to indicate that you will do a task after
6153 another one. On a note, go to the next note. On a headline, go to the
6154 next headline of the same depth.
6155 @end defun
6157 @node Planner Keybindings, Sample Configuration Files, Other Interactive Functions, Reference Material
6158 @comment  node-name,  next,  previous,  up
6159 @section Planner Keybindings
6160 @cindex keybindings, list
6162 In order to refresh and renumber all of your tasks according to their
6163 actual order in the buffer, simply save the file or call
6164 @kbd{M-x planner-renumber-tasks}.
6166 Here is a summary of the keystrokes available:
6168 @table @kbd
6170 @item M-x plan
6171 Begin your planning session.  This goes to the last day for which
6172 there is any planning info (or today if none), allowing you to review,
6173 and create/move tasks from that day.
6175 @item C-c C-u
6176 Move a task up.
6178 @item C-c C-d
6179 Move a task down.
6181 @item C-c C-s
6182 Mark the task as in progress or delegated.
6184 @item C-c C-x
6185 Mark the task as finished.
6187 @item C-c C-t
6188 Create a task associated with the current Wiki page. If you are on the
6189 opening line of a Note entry, it is assumed that the note itself is the
6190 origin of the task.
6192 @item C-c C-c
6193 Move or copy the current task to another date. If the current task is
6194 an original (meaning you are in the buffer where's defined, hopefully
6195 a planning page) then it will be copied, and the original task will
6196 also now point to the copy.  If the current task is a copy, it will
6197 just be moved to the new day, and the original task's link will be
6198 updated.
6200 @item C-c C-n
6201 Jump to today's task page.  If you call
6202 @code{(planner-calendar-insinuate)}, typing @kbd{n} in the Emacs
6203 calendar (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}) will jump
6204 to today's task page.
6206 @item C-c C-x
6207 @code{planner-task-done}
6209 @item C-c C-z
6210 @code{planner-task-in-progress}
6212 @item C-c C-d
6213 @code{planner-lower-task}
6215 @item C-c C-u
6216 @code{planner-raise-task}
6218 @item C-c C-c
6219 @code{planner-copy-or-move-task}
6221 @item C-c C-t
6222 @code{planner-create-task-from-buffer}
6224 @item C-c C-j
6225 This is a prefix command.
6227 @item C-c C-n
6228 @code{planner-goto-today}
6230 @item C-c C-j C-r
6231 @code{planner-goto-most-recent}
6233 @item C-c C-j C-t
6234 @code{planner-goto-tomorrow}
6236 @item C-c C-j C-y
6237 @code{planner-goto-yesterday}
6239 @item C-c C-j C-j
6240 @code{planner-goto-today}
6242 @item C-c C-j C-n
6243 @code{planner-goto-next-daily-page}
6245 @item C-c C-j C-p
6246 @code{planner-goto-previous-daily-page}
6248 @item C-c C-j C-d
6249 @code{planner-goto}
6251 @end table
6253 @node Sample Configuration Files,  , Planner Keybindings, Reference Material
6254 @comment  node-name,  next,  previous,  up
6255 @section Sample Configuration Files
6256 @cindex configuration, sample
6258 This section includes some sample configuration files. This way, once
6259 you've got the hang of the basics, you can see some different, more
6260 advanced, setups.
6262 There is no One True Way to plan. Every person is different. We hope
6263 you'll find a good starting point among the example configurations
6264 below. If what you want to do does not perfectly fit under one of these
6265 examples, please post a description of the way you plan to our mailing
6266 list (@pxref{Getting Help}).  We look forward to helping you customizing
6267 planner to fit your needs.
6269 @menu
6270 * File Organization::           
6271 * Bare-Bones Planning::         
6272 * Bare-Bones Planning with Plan Pages::  
6273 * Tasks on Plan Pages with Some Day Pages::  
6274 * Hierarchical Tasks::          
6275 @end menu
6277 @node File Organization, Bare-Bones Planning, Sample Configuration Files, Sample Configuration Files
6278 @subsection File Organization
6280 @itemize
6281 @item @strong{Tasks, schedule and notes on day pages.}
6283 By default, tasks, schedule entries and notes are filed on day pages.
6284 This makes it easy for you to see all the entries relevant to a single
6285 day without becoming overwhelmed with information. Unfinished tasks
6286 are carried over to the next day when you use @kbd{M-x plan}, so it's
6287 always kept up to date. Completed tasks are left on the day page you
6288 finished them on, which helps when reviewing one's progress and writing
6289 accomplishment reports.
6291 @item @strong{Cross-referenced with plan pages.}
6293 You can associate your tasks with projects either when you create the
6294 task or later, with @kbd{M-x planner-replan-task}. This makes it easy
6295 for you to see all the information associated with a particular
6296 project. If you use RememberMode to create notes, you will also be
6297 able to associate notes with a plan page.
6299 @item @strong{Just plan pages.}
6301 If your tasks don't usually have dates, you can turn day pages off by
6302 customizing @code{planner-use-day-pages}. If so, then all of your
6303 tasks and notes will be stored on the WelcomePage and/or a plan page.
6305 @end itemize
6307 @node Bare-Bones Planning, Bare-Bones Planning with Plan Pages, File Organization, Sample Configuration Files
6308 @subsection Bare-Bones Planning
6310 You can keep all of your tasks, notes and schedules in a single file:
6311 WelcomePage.  This is good for people who are used to storing all of
6312 their information in a flat text file.  By storing your information in
6313 planner, you'll be able to take advantage of automatic hyperlinking to
6314 files and other resources.  You can also sort your tasks by priority
6315 and status.
6317 To set your system up for bare-bones planning, set the
6318 @code{planner-use-day-pages} variable to nil before loading planner.
6319 For example, you can put this in your @file{~/.emacs} (or @file{_emacs}):
6321 @example
6322 (setq planner-use-day-pages nil)
6323 (setq planner-default-page nil)
6324 (require 'planner)
6325 @end example
6327 When you create a task or note, planner will not prompt you for a
6328 date.  If you press @key{RET} when prompted for a plan page, it will
6329 accept the default of nil, so no other plan pages will be used.  All
6330 of your data will be kept in one file, which can then be easily backed
6333 You can use commands like @command{planner-create-task-from-buffer} to
6334 create tasks, or you can type tasks in manually.  You can edit or
6335 delete anything in the page without having to update other files.
6337 @node Bare-Bones Planning with Plan Pages, Tasks on Plan Pages with Some Day Pages, Bare-Bones Planning, Sample Configuration Files
6338 @subsection Bare-Bones Planning with Plan Pages
6340 When you create a task or note, Planner.el can copy this to a plan
6341 page. Plan pages allow you to see an overview of all the data for a
6342 project.
6344 For convenience, the @command{planner-create-task-from-buffer} command
6345 prompts you for a plan page when you create a task.
6349 @node Tasks on Plan Pages with Some Day Pages, Hierarchical Tasks, Bare-Bones Planning with Plan Pages, Sample Configuration Files
6350 @subsection Tasks on Plan Pages with Some Day Pages
6352 If most of your tasks are associated with plan pages but you want to
6353 schedule some tasks on day pages, you can leave day pages on (default)
6354 and then write a function that turns off day pages. For example, the
6355 following code snippet turns off day pages for task creation from
6356 buffers.
6358 @example
6359 (require 'planner)
6361 (defun my-planner-create-task-from-buffer ()
6362   "Call `planner-create-task-from-buffer', but without dates."
6363   (interactive)
6364   (let ((planner-use-day-pages nil))
6365     (call-interactively 'planner-create-task-from-buffer)))
6366 @end example
6368 @node Hierarchical Tasks,  , Tasks on Plan Pages with Some Day Pages, Sample Configuration Files
6369 @subsection Hierarchical Tasks
6370 @cindex hierarchical tasks
6371 @cindex tasks, hierarchy of
6373 You can use @file{allout.el} or other modes for outlining to support
6374 hierarchical tasks in plan pages. No special support is needed.
6376 Tasks created by @command{planner-create-task-from-buffer} and
6377 @code{planner-create-task} are created in the @samp{* Tasks} section.
6378 If @code{planner-add-task-at-end-flag} is non-nil, tasks are added to
6379 the end of the first task block, else they are added to the beginning.
6380 You can then copy and paste tasks into your preferred hierarchy.
6381 Blank lines delimit blocks of tasks upon which automatic sorting is
6382 performed.
6384 You can also type in tasks manually. You may find this approach faster
6385 when you are comfortable with planner.
6387 For example, a @file{LearnPlanner} plan page might contain the
6388 following lines:
6390 @example
6391 * Learn how to use planner.el
6393 ** Installation
6395 #C0 _ Decide where to put Planner
6396 #C0 _ Download the archives
6398 ** Configuration
6400 *** Load path
6402 #C0 _ Figure out how to add things to my load path
6403 #C0 _ Actually add it to my load path
6406 @end example
6408 If you create tasks for the finest level of detail available at the
6409 moment, you can schedule them onto day pages with @kbd{C-c C-c}
6410 (@command{planner-copy-or-move-task}). Then you can use
6411 @command{planner-jump-to-link} to switch between the day page and the
6412 plan page link.
6415 @node Getting Help, Acknowledgements, Reference Material, Top
6416 @comment  node-name,  next,  previous,  up
6417 @chapter Getting Help
6418 @cindex help, getting
6419 @cindex bugs, reporting
6421 After you have read this guide, if you still have questions about
6422 Planner, or if you have bugs to report, there are several places
6423 you can go.
6425 Planner has an official website at
6426 @url{http://www.emacswiki.org/cgi-bin/wiki/PlannerMode}.  It is a
6427 collaborative wiki.
6429 Bugs may be reported using the Planner Bug-Tracker at
6430 @url{http://gna.org/bugs/?group=planner-el}.
6432 Planner has three mailing lists.
6434 @table @samp
6436 @item planner-el-announce
6437 Low-traffic list for planner-related announcements.
6439 You can join this mailing list (@email{planner-el-announce@@gna.org})
6440 using the subscription form at
6441 @url{http://mail.gna.org/listinfo/planner-el-announce/}.  This
6442 mailing list is also available via Gmane (@url{http://gmane.org/}). The
6443 group is called @samp{gmane.emacs.planner.announce}.
6445 @item planner-el-discuss
6446 Discussion, bugfixes, suggestions, tips, and the like for Planner.
6447 This mailing list also includes the content of planner-el-announce.
6449 You can join this mailing list (@email{planner-el-discuss@@gna.org})
6450 using the subscription form at
6451 @url{http://mail.gna.org/listinfo/planner-el-discuss/}.  This mailing
6452 list is also available via Gmane with the identifier
6453 @samp{gmane.emacs.planner.general}.
6455 @item planner-el-logs
6456 Log messages for commits made to Planner.
6458 You can join this mailing list (@email{planner-el-logs@@gna.org}) using
6459 the subscription form at
6460 @url{http://mail.gna.org/listinfo/planner-el-logs/}.  This mailing list
6461 is also available via Gmane with the identifier
6462 @samp{gmane.emacs.planner.scm}.
6464 @item planner-el-cvs
6465 Generated bug reports for Planner.
6467 You can join this mailing list (@email{planner-el-cvs@@gna.org}) using
6468 the subscription form at
6469 @url{http://mail.gna.org/listinfo/planner-el-cvs/}.  This mailing list
6470 is also available via Gmane with the identifier
6471 @samp{gmane.emacs.planner.cvs}.
6473 @end table
6475 You can also contact the maintainer of Planner, John Sullivan, at
6476 @email{john@@wjsullivan.net}, but it is better to use the other options.
6478 You can explore the relevant sections of the EmacsWiki.org:
6480 @itemize @bullet
6482 @item
6483 @url{http://www.emacswiki.org/cgi-bin/wiki/PlannerMode}
6485 @item
6486 @url{http://www.emacswiki.org/cgi-bin/wiki/MuseMode}
6488 @item
6489 @url{http://www.emacswiki.org/cgi-bin/wiki/RememberMode}
6491 @end itemize
6493 You can visit the IRC Freenode channel @samp{#emacs}. Many of the
6494 contributors are frequently around and willing to answer your
6495 questions.
6497 There is an Orkut community called PlannerMode.
6499 For issues relating to this documentation, please contact John
6500 Sullivan at @email{john@@wjsullivan.net}.
6502 @node Acknowledgements, GNU General Public License, Getting Help, Top
6503 @comment  node-name,  next,  previous,  up
6504 @chapter Acknowledgements
6505 @itemize
6506 @item Maintainers
6508 @cindex maintainers
6510 @itemize
6511 @item 2006
6513 John Sullivan volunteered to maintain Planner, and Michael Olson passed
6514 the maintainership on to him with the release of Planner 3.41.
6516 @item 2005
6518 Michael Olson, Sacha Chua, and several others from the Planner community
6519 ported Planner to use Muse instead of emacs-wiki.  Michael Olson became
6520 the maintainer of Planner.
6522 @item 2004
6524 Damien Elmes handed EmacsWikiMode to Mark Triggs for a short period of
6525 time.  Mark Triggs deferred to Sacha Chua as official maintainer of
6526 Planner.  Sacha Chua volunteered to maintain RememberMode.
6527 Michael Olson became the maintainer of both emacs-wiki and Muse.
6529 @item 2003
6531 Sacha Chua volunteered to maintain Planner.  Damien Elmes
6532 volunteered to maintain EmacsWikiMode.
6534 @item 2001
6536 John Wiegley wrote EmacsWikiMode and Planner.
6537 @end itemize
6539 @item Contributors
6540 @cindex contributors
6542 For a complete list of people who have helped out with Planner, please
6543 check out the @file{AUTHORS} file that is included with Planner.
6545 @end itemize
6547 @node GNU General Public License, Concept Index, Acknowledgements, Top
6548 @comment  node-name,  next,  previous,  up
6549 @appendix GNU GENERAL PUBLIC LICENSE
6550 @center Version 2, June 1991
6551 @cindex GPL
6552 @cindex GNU General Public License
6554 @c The GNU General Public License.
6555 @center Version 3, 29 June 2007
6557 @c This file is intended to be included within another document,
6558 @c hence no sectioning command or @node.  
6560 @display
6561 Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/}
6563 Everyone is permitted to copy and distribute verbatim copies of this
6564 license document, but changing it is not allowed.
6565 @end display
6567 @heading Preamble
6569 The GNU General Public License is a free, copyleft license for
6570 software and other kinds of works.
6572 The licenses for most software and other practical works are designed
6573 to take away your freedom to share and change the works.  By contrast,
6574 the GNU General Public License is intended to guarantee your freedom
6575 to share and change all versions of a program---to make sure it remains
6576 free software for all its users.  We, the Free Software Foundation,
6577 use the GNU General Public License for most of our software; it
6578 applies also to any other work released this way by its authors.  You
6579 can apply it to your programs, too.
6581 When we speak of free software, we are referring to freedom, not
6582 price.  Our General Public Licenses are designed to make sure that you
6583 have the freedom to distribute copies of free software (and charge for
6584 them if you wish), that you receive source code or can get it if you
6585 want it, that you can change the software or use pieces of it in new
6586 free programs, and that you know you can do these things.
6588 To protect your rights, we need to prevent others from denying you
6589 these rights or asking you to surrender the rights.  Therefore, you
6590 have certain responsibilities if you distribute copies of the
6591 software, or if you modify it: responsibilities to respect the freedom
6592 of others.
6594 For example, if you distribute copies of such a program, whether
6595 gratis or for a fee, you must pass on to the recipients the same
6596 freedoms that you received.  You must make sure that they, too,
6597 receive or can get the source code.  And you must show them these
6598 terms so they know their rights.
6600 Developers that use the GNU GPL protect your rights with two steps:
6601 (1) assert copyright on the software, and (2) offer you this License
6602 giving you legal permission to copy, distribute and/or modify it.
6604 For the developers' and authors' protection, the GPL clearly explains
6605 that there is no warranty for this free software.  For both users' and
6606 authors' sake, the GPL requires that modified versions be marked as
6607 changed, so that their problems will not be attributed erroneously to
6608 authors of previous versions.
6610 Some devices are designed to deny users access to install or run
6611 modified versions of the software inside them, although the
6612 manufacturer can do so.  This is fundamentally incompatible with the
6613 aim of protecting users' freedom to change the software.  The
6614 systematic pattern of such abuse occurs in the area of products for
6615 individuals to use, which is precisely where it is most unacceptable.
6616 Therefore, we have designed this version of the GPL to prohibit the
6617 practice for those products.  If such problems arise substantially in
6618 other domains, we stand ready to extend this provision to those
6619 domains in future versions of the GPL, as needed to protect the
6620 freedom of users.
6622 Finally, every program is threatened constantly by software patents.
6623 States should not allow patents to restrict development and use of
6624 software on general-purpose computers, but in those that do, we wish
6625 to avoid the special danger that patents applied to a free program
6626 could make it effectively proprietary.  To prevent this, the GPL
6627 assures that patents cannot be used to render the program non-free.
6629 The precise terms and conditions for copying, distribution and
6630 modification follow.
6632 @heading TERMS AND CONDITIONS
6634 @enumerate 0
6635 @item Definitions.
6637 ``This License'' refers to version 3 of the GNU General Public License.
6639 ``Copyright'' also means copyright-like laws that apply to other kinds
6640 of works, such as semiconductor masks.
6642 ``The Program'' refers to any copyrightable work licensed under this
6643 License.  Each licensee is addressed as ``you''.  ``Licensees'' and
6644 ``recipients'' may be individuals or organizations.
6646 To ``modify'' a work means to copy from or adapt all or part of the work
6647 in a fashion requiring copyright permission, other than the making of
6648 an exact copy.  The resulting work is called a ``modified version'' of
6649 the earlier work or a work ``based on'' the earlier work.
6651 A ``covered work'' means either the unmodified Program or a work based
6652 on the Program.
6654 To ``propagate'' a work means to do anything with it that, without
6655 permission, would make you directly or secondarily liable for
6656 infringement under applicable copyright law, except executing it on a
6657 computer or modifying a private copy.  Propagation includes copying,
6658 distribution (with or without modification), making available to the
6659 public, and in some countries other activities as well.
6661 To ``convey'' a work means any kind of propagation that enables other
6662 parties to make or receive copies.  Mere interaction with a user
6663 through a computer network, with no transfer of a copy, is not
6664 conveying.
6666 An interactive user interface displays ``Appropriate Legal Notices'' to
6667 the extent that it includes a convenient and prominently visible
6668 feature that (1) displays an appropriate copyright notice, and (2)
6669 tells the user that there is no warranty for the work (except to the
6670 extent that warranties are provided), that licensees may convey the
6671 work under this License, and how to view a copy of this License.  If
6672 the interface presents a list of user commands or options, such as a
6673 menu, a prominent item in the list meets this criterion.
6675 @item Source Code.
6677 The ``source code'' for a work means the preferred form of the work for
6678 making modifications to it.  ``Object code'' means any non-source form
6679 of a work.
6681 A ``Standard Interface'' means an interface that either is an official
6682 standard defined by a recognized standards body, or, in the case of
6683 interfaces specified for a particular programming language, one that
6684 is widely used among developers working in that language.
6686 The ``System Libraries'' of an executable work include anything, other
6687 than the work as a whole, that (a) is included in the normal form of
6688 packaging a Major Component, but which is not part of that Major
6689 Component, and (b) serves only to enable use of the work with that
6690 Major Component, or to implement a Standard Interface for which an
6691 implementation is available to the public in source code form.  A
6692 ``Major Component'', in this context, means a major essential component
6693 (kernel, window system, and so on) of the specific operating system
6694 (if any) on which the executable work runs, or a compiler used to
6695 produce the work, or an object code interpreter used to run it.
6697 The ``Corresponding Source'' for a work in object code form means all
6698 the source code needed to generate, install, and (for an executable
6699 work) run the object code and to modify the work, including scripts to
6700 control those activities.  However, it does not include the work's
6701 System Libraries, or general-purpose tools or generally available free
6702 programs which are used unmodified in performing those activities but
6703 which are not part of the work.  For example, Corresponding Source
6704 includes interface definition files associated with source files for
6705 the work, and the source code for shared libraries and dynamically
6706 linked subprograms that the work is specifically designed to require,
6707 such as by intimate data communication or control flow between those
6708 subprograms and other parts of the work.
6710 The Corresponding Source need not include anything that users can
6711 regenerate automatically from other parts of the Corresponding Source.
6713 The Corresponding Source for a work in source code form is that same
6714 work.
6716 @item Basic Permissions.
6718 All rights granted under this License are granted for the term of
6719 copyright on the Program, and are irrevocable provided the stated
6720 conditions are met.  This License explicitly affirms your unlimited
6721 permission to run the unmodified Program.  The output from running a
6722 covered work is covered by this License only if the output, given its
6723 content, constitutes a covered work.  This License acknowledges your
6724 rights of fair use or other equivalent, as provided by copyright law.
6726 You may make, run and propagate covered works that you do not convey,
6727 without conditions so long as your license otherwise remains in force.
6728 You may convey covered works to others for the sole purpose of having
6729 them make modifications exclusively for you, or provide you with
6730 facilities for running those works, provided that you comply with the
6731 terms of this License in conveying all material for which you do not
6732 control copyright.  Those thus making or running the covered works for
6733 you must do so exclusively on your behalf, under your direction and
6734 control, on terms that prohibit them from making any copies of your
6735 copyrighted material outside their relationship with you.
6737 Conveying under any other circumstances is permitted solely under the
6738 conditions stated below.  Sublicensing is not allowed; section 10
6739 makes it unnecessary.
6741 @item Protecting Users' Legal Rights From Anti-Circumvention Law.
6743 No covered work shall be deemed part of an effective technological
6744 measure under any applicable law fulfilling obligations under article
6745 11 of the WIPO copyright treaty adopted on 20 December 1996, or
6746 similar laws prohibiting or restricting circumvention of such
6747 measures.
6749 When you convey a covered work, you waive any legal power to forbid
6750 circumvention of technological measures to the extent such
6751 circumvention is effected by exercising rights under this License with
6752 respect to the covered work, and you disclaim any intention to limit
6753 operation or modification of the work as a means of enforcing, against
6754 the work's users, your or third parties' legal rights to forbid
6755 circumvention of technological measures.
6757 @item Conveying Verbatim Copies.
6759 You may convey verbatim copies of the Program's source code as you
6760 receive it, in any medium, provided that you conspicuously and
6761 appropriately publish on each copy an appropriate copyright notice;
6762 keep intact all notices stating that this License and any
6763 non-permissive terms added in accord with section 7 apply to the code;
6764 keep intact all notices of the absence of any warranty; and give all
6765 recipients a copy of this License along with the Program.
6767 You may charge any price or no price for each copy that you convey,
6768 and you may offer support or warranty protection for a fee.
6770 @item Conveying Modified Source Versions.
6772 You may convey a work based on the Program, or the modifications to
6773 produce it from the Program, in the form of source code under the
6774 terms of section 4, provided that you also meet all of these
6775 conditions:
6777 @enumerate a
6778 @item 
6779 The work must carry prominent notices stating that you modified it,
6780 and giving a relevant date.
6782 @item
6783 The work must carry prominent notices stating that it is released
6784 under this License and any conditions added under section 7.  This
6785 requirement modifies the requirement in section 4 to ``keep intact all
6786 notices''.
6788 @item
6789 You must license the entire work, as a whole, under this License to
6790 anyone who comes into possession of a copy.  This License will
6791 therefore apply, along with any applicable section 7 additional terms,
6792 to the whole of the work, and all its parts, regardless of how they
6793 are packaged.  This License gives no permission to license the work in
6794 any other way, but it does not invalidate such permission if you have
6795 separately received it.
6797 @item
6798 If the work has interactive user interfaces, each must display
6799 Appropriate Legal Notices; however, if the Program has interactive
6800 interfaces that do not display Appropriate Legal Notices, your work
6801 need not make them do so.
6802 @end enumerate
6804 A compilation of a covered work with other separate and independent
6805 works, which are not by their nature extensions of the covered work,
6806 and which are not combined with it such as to form a larger program,
6807 in or on a volume of a storage or distribution medium, is called an
6808 ``aggregate'' if the compilation and its resulting copyright are not
6809 used to limit the access or legal rights of the compilation's users
6810 beyond what the individual works permit.  Inclusion of a covered work
6811 in an aggregate does not cause this License to apply to the other
6812 parts of the aggregate.
6814 @item  Conveying Non-Source Forms.
6816 You may convey a covered work in object code form under the terms of
6817 sections 4 and 5, provided that you also convey the machine-readable
6818 Corresponding Source under the terms of this License, in one of these
6819 ways:
6821 @enumerate a
6822 @item
6823 Convey the object code in, or embodied in, a physical product
6824 (including a physical distribution medium), accompanied by the
6825 Corresponding Source fixed on a durable physical medium customarily
6826 used for software interchange.
6828 @item
6829 Convey the object code in, or embodied in, a physical product
6830 (including a physical distribution medium), accompanied by a written
6831 offer, valid for at least three years and valid for as long as you
6832 offer spare parts or customer support for that product model, to give
6833 anyone who possesses the object code either (1) a copy of the
6834 Corresponding Source for all the software in the product that is
6835 covered by this License, on a durable physical medium customarily used
6836 for software interchange, for a price no more than your reasonable
6837 cost of physically performing this conveying of source, or (2) access
6838 to copy the Corresponding Source from a network server at no charge.
6840 @item
6841 Convey individual copies of the object code with a copy of the written
6842 offer to provide the Corresponding Source.  This alternative is
6843 allowed only occasionally and noncommercially, and only if you
6844 received the object code with such an offer, in accord with subsection
6847 @item
6848 Convey the object code by offering access from a designated place
6849 (gratis or for a charge), and offer equivalent access to the
6850 Corresponding Source in the same way through the same place at no
6851 further charge.  You need not require recipients to copy the
6852 Corresponding Source along with the object code.  If the place to copy
6853 the object code is a network server, the Corresponding Source may be
6854 on a different server (operated by you or a third party) that supports
6855 equivalent copying facilities, provided you maintain clear directions
6856 next to the object code saying where to find the Corresponding Source.
6857 Regardless of what server hosts the Corresponding Source, you remain
6858 obligated to ensure that it is available for as long as needed to
6859 satisfy these requirements.
6861 @item
6862 Convey the object code using peer-to-peer transmission, provided you
6863 inform other peers where the object code and Corresponding Source of
6864 the work are being offered to the general public at no charge under
6865 subsection 6d.
6867 @end enumerate
6869 A separable portion of the object code, whose source code is excluded
6870 from the Corresponding Source as a System Library, need not be
6871 included in conveying the object code work.
6873 A ``User Product'' is either (1) a ``consumer product'', which means any
6874 tangible personal property which is normally used for personal,
6875 family, or household purposes, or (2) anything designed or sold for
6876 incorporation into a dwelling.  In determining whether a product is a
6877 consumer product, doubtful cases shall be resolved in favor of
6878 coverage.  For a particular product received by a particular user,
6879 ``normally used'' refers to a typical or common use of that class of
6880 product, regardless of the status of the particular user or of the way
6881 in which the particular user actually uses, or expects or is expected
6882 to use, the product.  A product is a consumer product regardless of
6883 whether the product has substantial commercial, industrial or
6884 non-consumer uses, unless such uses represent the only significant
6885 mode of use of the product.
6887 ``Installation Information'' for a User Product means any methods,
6888 procedures, authorization keys, or other information required to
6889 install and execute modified versions of a covered work in that User
6890 Product from a modified version of its Corresponding Source.  The
6891 information must suffice to ensure that the continued functioning of
6892 the modified object code is in no case prevented or interfered with
6893 solely because modification has been made.
6895 If you convey an object code work under this section in, or with, or
6896 specifically for use in, a User Product, and the conveying occurs as
6897 part of a transaction in which the right of possession and use of the
6898 User Product is transferred to the recipient in perpetuity or for a
6899 fixed term (regardless of how the transaction is characterized), the
6900 Corresponding Source conveyed under this section must be accompanied
6901 by the Installation Information.  But this requirement does not apply
6902 if neither you nor any third party retains the ability to install
6903 modified object code on the User Product (for example, the work has
6904 been installed in ROM).
6906 The requirement to provide Installation Information does not include a
6907 requirement to continue to provide support service, warranty, or
6908 updates for a work that has been modified or installed by the
6909 recipient, or for the User Product in which it has been modified or
6910 installed.  Access to a network may be denied when the modification
6911 itself materially and adversely affects the operation of the network
6912 or violates the rules and protocols for communication across the
6913 network.
6915 Corresponding Source conveyed, and Installation Information provided,
6916 in accord with this section must be in a format that is publicly
6917 documented (and with an implementation available to the public in
6918 source code form), and must require no special password or key for
6919 unpacking, reading or copying.
6921 @item Additional Terms.
6923 ``Additional permissions'' are terms that supplement the terms of this
6924 License by making exceptions from one or more of its conditions.
6925 Additional permissions that are applicable to the entire Program shall
6926 be treated as though they were included in this License, to the extent
6927 that they are valid under applicable law.  If additional permissions
6928 apply only to part of the Program, that part may be used separately
6929 under those permissions, but the entire Program remains governed by
6930 this License without regard to the additional permissions.
6932 When you convey a copy of a covered work, you may at your option
6933 remove any additional permissions from that copy, or from any part of
6934 it.  (Additional permissions may be written to require their own
6935 removal in certain cases when you modify the work.)  You may place
6936 additional permissions on material, added by you to a covered work,
6937 for which you have or can give appropriate copyright permission.
6939 Notwithstanding any other provision of this License, for material you
6940 add to a covered work, you may (if authorized by the copyright holders
6941 of that material) supplement the terms of this License with terms:
6943 @enumerate a
6944 @item
6945 Disclaiming warranty or limiting liability differently from the terms
6946 of sections 15 and 16 of this License; or
6948 @item
6949 Requiring preservation of specified reasonable legal notices or author
6950 attributions in that material or in the Appropriate Legal Notices
6951 displayed by works containing it; or
6953 @item
6954 Prohibiting misrepresentation of the origin of that material, or
6955 requiring that modified versions of such material be marked in
6956 reasonable ways as different from the original version; or
6958 @item
6959 Limiting the use for publicity purposes of names of licensors or
6960 authors of the material; or
6962 @item
6963 Declining to grant rights under trademark law for use of some trade
6964 names, trademarks, or service marks; or
6966 @item
6967 Requiring indemnification of licensors and authors of that material by
6968 anyone who conveys the material (or modified versions of it) with
6969 contractual assumptions of liability to the recipient, for any
6970 liability that these contractual assumptions directly impose on those
6971 licensors and authors.
6972 @end enumerate
6974 All other non-permissive additional terms are considered ``further
6975 restrictions'' within the meaning of section 10.  If the Program as you
6976 received it, or any part of it, contains a notice stating that it is
6977 governed by this License along with a term that is a further
6978 restriction, you may remove that term.  If a license document contains
6979 a further restriction but permits relicensing or conveying under this
6980 License, you may add to a covered work material governed by the terms
6981 of that license document, provided that the further restriction does
6982 not survive such relicensing or conveying.
6984 If you add terms to a covered work in accord with this section, you
6985 must place, in the relevant source files, a statement of the
6986 additional terms that apply to those files, or a notice indicating
6987 where to find the applicable terms.
6989 Additional terms, permissive or non-permissive, may be stated in the
6990 form of a separately written license, or stated as exceptions; the
6991 above requirements apply either way.
6993 @item Termination.
6995 You may not propagate or modify a covered work except as expressly
6996 provided under this License.  Any attempt otherwise to propagate or
6997 modify it is void, and will automatically terminate your rights under
6998 this License (including any patent licenses granted under the third
6999 paragraph of section 11).
7001 However, if you cease all violation of this License, then your license
7002 from a particular copyright holder is reinstated (a) provisionally,
7003 unless and until the copyright holder explicitly and finally
7004 terminates your license, and (b) permanently, if the copyright holder
7005 fails to notify you of the violation by some reasonable means prior to
7006 60 days after the cessation.
7008 Moreover, your license from a particular copyright holder is
7009 reinstated permanently if the copyright holder notifies you of the
7010 violation by some reasonable means, this is the first time you have
7011 received notice of violation of this License (for any work) from that
7012 copyright holder, and you cure the violation prior to 30 days after
7013 your receipt of the notice.
7015 Termination of your rights under this section does not terminate the
7016 licenses of parties who have received copies or rights from you under
7017 this License.  If your rights have been terminated and not permanently
7018 reinstated, you do not qualify to receive new licenses for the same
7019 material under section 10.
7021 @item Acceptance Not Required for Having Copies.
7023 You are not required to accept this License in order to receive or run
7024 a copy of the Program.  Ancillary propagation of a covered work
7025 occurring solely as a consequence of using peer-to-peer transmission
7026 to receive a copy likewise does not require acceptance.  However,
7027 nothing other than this License grants you permission to propagate or
7028 modify any covered work.  These actions infringe copyright if you do
7029 not accept this License.  Therefore, by modifying or propagating a
7030 covered work, you indicate your acceptance of this License to do so.
7032 @item Automatic Licensing of Downstream Recipients.
7034 Each time you convey a covered work, the recipient automatically
7035 receives a license from the original licensors, to run, modify and
7036 propagate that work, subject to this License.  You are not responsible
7037 for enforcing compliance by third parties with this License.
7039 An ``entity transaction'' is a transaction transferring control of an
7040 organization, or substantially all assets of one, or subdividing an
7041 organization, or merging organizations.  If propagation of a covered
7042 work results from an entity transaction, each party to that
7043 transaction who receives a copy of the work also receives whatever
7044 licenses to the work the party's predecessor in interest had or could
7045 give under the previous paragraph, plus a right to possession of the
7046 Corresponding Source of the work from the predecessor in interest, if
7047 the predecessor has it or can get it with reasonable efforts.
7049 You may not impose any further restrictions on the exercise of the
7050 rights granted or affirmed under this License.  For example, you may
7051 not impose a license fee, royalty, or other charge for exercise of
7052 rights granted under this License, and you may not initiate litigation
7053 (including a cross-claim or counterclaim in a lawsuit) alleging that
7054 any patent claim is infringed by making, using, selling, offering for
7055 sale, or importing the Program or any portion of it.
7057 @item Patents.
7059 A ``contributor'' is a copyright holder who authorizes use under this
7060 License of the Program or a work on which the Program is based.  The
7061 work thus licensed is called the contributor's ``contributor version''.
7063 A contributor's ``essential patent claims'' are all patent claims owned
7064 or controlled by the contributor, whether already acquired or
7065 hereafter acquired, that would be infringed by some manner, permitted
7066 by this License, of making, using, or selling its contributor version,
7067 but do not include claims that would be infringed only as a
7068 consequence of further modification of the contributor version.  For
7069 purposes of this definition, ``control'' includes the right to grant
7070 patent sublicenses in a manner consistent with the requirements of
7071 this License.
7073 Each contributor grants you a non-exclusive, worldwide, royalty-free
7074 patent license under the contributor's essential patent claims, to
7075 make, use, sell, offer for sale, import and otherwise run, modify and
7076 propagate the contents of its contributor version.
7078 In the following three paragraphs, a ``patent license'' is any express
7079 agreement or commitment, however denominated, not to enforce a patent
7080 (such as an express permission to practice a patent or covenant not to
7081 sue for patent infringement).  To ``grant'' such a patent license to a
7082 party means to make such an agreement or commitment not to enforce a
7083 patent against the party.
7085 If you convey a covered work, knowingly relying on a patent license,
7086 and the Corresponding Source of the work is not available for anyone
7087 to copy, free of charge and under the terms of this License, through a
7088 publicly available network server or other readily accessible means,
7089 then you must either (1) cause the Corresponding Source to be so
7090 available, or (2) arrange to deprive yourself of the benefit of the
7091 patent license for this particular work, or (3) arrange, in a manner
7092 consistent with the requirements of this License, to extend the patent
7093 license to downstream recipients.  ``Knowingly relying'' means you have
7094 actual knowledge that, but for the patent license, your conveying the
7095 covered work in a country, or your recipient's use of the covered work
7096 in a country, would infringe one or more identifiable patents in that
7097 country that you have reason to believe are valid.
7099 If, pursuant to or in connection with a single transaction or
7100 arrangement, you convey, or propagate by procuring conveyance of, a
7101 covered work, and grant a patent license to some of the parties
7102 receiving the covered work authorizing them to use, propagate, modify
7103 or convey a specific copy of the covered work, then the patent license
7104 you grant is automatically extended to all recipients of the covered
7105 work and works based on it.
7107 A patent license is ``discriminatory'' if it does not include within the
7108 scope of its coverage, prohibits the exercise of, or is conditioned on
7109 the non-exercise of one or more of the rights that are specifically
7110 granted under this License.  You may not convey a covered work if you
7111 are a party to an arrangement with a third party that is in the
7112 business of distributing software, under which you make payment to the
7113 third party based on the extent of your activity of conveying the
7114 work, and under which the third party grants, to any of the parties
7115 who would receive the covered work from you, a discriminatory patent
7116 license (a) in connection with copies of the covered work conveyed by
7117 you (or copies made from those copies), or (b) primarily for and in
7118 connection with specific products or compilations that contain the
7119 covered work, unless you entered into that arrangement, or that patent
7120 license was granted, prior to 28 March 2007.
7122 Nothing in this License shall be construed as excluding or limiting
7123 any implied license or other defenses to infringement that may
7124 otherwise be available to you under applicable patent law.
7126 @item No Surrender of Others' Freedom.
7128 If conditions are imposed on you (whether by court order, agreement or
7129 otherwise) that contradict the conditions of this License, they do not
7130 excuse you from the conditions of this License.  If you cannot convey
7131 a covered work so as to satisfy simultaneously your obligations under
7132 this License and any other pertinent obligations, then as a
7133 consequence you may not convey it at all.  For example, if you agree
7134 to terms that obligate you to collect a royalty for further conveying
7135 from those to whom you convey the Program, the only way you could
7136 satisfy both those terms and this License would be to refrain entirely
7137 from conveying the Program.
7139 @item Use with the GNU Affero General Public License.
7141 Notwithstanding any other provision of this License, you have
7142 permission to link or combine any covered work with a work licensed
7143 under version 3 of the GNU Affero General Public License into a single
7144 combined work, and to convey the resulting work.  The terms of this
7145 License will continue to apply to the part which is the covered work,
7146 but the special requirements of the GNU Affero General Public License,
7147 section 13, concerning interaction through a network will apply to the
7148 combination as such.
7150 @item Revised Versions of this License.
7152 The Free Software Foundation may publish revised and/or new versions
7153 of the GNU General Public License from time to time.  Such new
7154 versions will be similar in spirit to the present version, but may
7155 differ in detail to address new problems or concerns.
7157 Each version is given a distinguishing version number.  If the Program
7158 specifies that a certain numbered version of the GNU General Public
7159 License ``or any later version'' applies to it, you have the option of
7160 following the terms and conditions either of that numbered version or
7161 of any later version published by the Free Software Foundation.  If
7162 the Program does not specify a version number of the GNU General
7163 Public License, you may choose any version ever published by the Free
7164 Software Foundation.
7166 If the Program specifies that a proxy can decide which future versions
7167 of the GNU General Public License can be used, that proxy's public
7168 statement of acceptance of a version permanently authorizes you to
7169 choose that version for the Program.
7171 Later license versions may give you additional or different
7172 permissions.  However, no additional obligations are imposed on any
7173 author or copyright holder as a result of your choosing to follow a
7174 later version.
7176 @item Disclaimer of Warranty.
7178 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
7179 APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
7180 HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT
7181 WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
7182 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
7183 A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
7184 PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE
7185 DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
7186 CORRECTION.
7188 @item Limitation of Liability.
7190 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
7191 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
7192 CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
7193 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
7194 ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
7195 NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
7196 LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
7197 TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
7198 PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7200 @item Interpretation of Sections 15 and 16.
7202 If the disclaimer of warranty and limitation of liability provided
7203 above cannot be given local legal effect according to their terms,
7204 reviewing courts shall apply local law that most closely approximates
7205 an absolute waiver of all civil liability in connection with the
7206 Program, unless a warranty or assumption of liability accompanies a
7207 copy of the Program in return for a fee.
7209 @end enumerate
7211 @heading END OF TERMS AND CONDITIONS
7213 @heading How to Apply These Terms to Your New Programs
7215 If you develop a new program, and you want it to be of the greatest
7216 possible use to the public, the best way to achieve this is to make it
7217 free software which everyone can redistribute and change under these
7218 terms.
7220 To do so, attach the following notices to the program.  It is safest
7221 to attach them to the start of each source file to most effectively
7222 state the exclusion of warranty; and each file should have at least
7223 the ``copyright'' line and a pointer to where the full notice is found.
7225 @smallexample
7226 @var{one line to give the program's name and a brief idea of what it does.}  
7227 Copyright (C) @var{year} @var{name of author}
7229 This program is free software: you can redistribute it and/or modify
7230 it under the terms of the GNU General Public License as published by
7231 the Free Software Foundation, either version 3 of the License, or (at
7232 your option) any later version.
7234 This program is distributed in the hope that it will be useful, but
7235 WITHOUT ANY WARRANTY; without even the implied warranty of
7236 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
7237 General Public License for more details.
7239 You should have received a copy of the GNU General Public License
7240 along with this program.  If not, see @url{http://www.gnu.org/licenses/}.
7241 @end smallexample
7243 Also add information on how to contact you by electronic and paper mail.
7245 If the program does terminal interaction, make it output a short
7246 notice like this when it starts in an interactive mode:
7248 @smallexample
7249 @var{program} Copyright (C) @var{year} @var{name of author} 
7250 This program comes with ABSOLUTELY NO WARRANTY; for details type @samp{show w}.
7251 This is free software, and you are welcome to redistribute it
7252 under certain conditions; type @samp{show c} for details.
7253 @end smallexample
7255 The hypothetical commands @samp{show w} and @samp{show c} should show
7256 the appropriate parts of the General Public License.  Of course, your
7257 program's commands might be different; for a GUI interface, you would
7258 use an ``about box''.
7260 You should also get your employer (if you work as a programmer) or school,
7261 if any, to sign a ``copyright disclaimer'' for the program, if necessary.
7262 For more information on this, and how to apply and follow the GNU GPL, see
7263 @url{http://www.gnu.org/licenses/}.
7265 The GNU General Public License does not permit incorporating your
7266 program into proprietary programs.  If your program is a subroutine
7267 library, you may consider it more useful to permit linking proprietary
7268 applications with the library.  If this is what you want to do, use
7269 the GNU Lesser General Public License instead of this License.  But
7270 first, please read @url{http://www.gnu.org/philosophy/why-not-lgpl.html}.
7272 @node Concept Index,  , GNU General Public License, Top
7273 @comment  node-name,  next,  previous,  up
7274 @unnumbered Index
7276 @printindex cp
7278 @bye