Manual: Fix syntax error introduced in last patch.
[planner-el.git] / planner-el.texi
blobc6e10e28c3de39ba24600899d1112d7783cfea7b
1 \input texinfo @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename planner-el.info
4 @settitle planner-el
5 @c %**end of header
7 @dircategory Emacs
8 @direntry
9 * planner-el: (planner-el). planner.el: Day planner/organizer for Emacs.
10 @end direntry
12 @syncodeindex fn cp
14 @copying
15 This manual is for Planner version 3.41.
17 Copyright @copyright{} 2001, 2004, 2005, 2006 Free Software Foundation, Inc.@*
18 Parts copyright @copyright{} 2005 Jim Ottaway@*
19 Parts copyright @copyright{} 2005 Dryice Dong Liu
21 @quotation
22 Permission is granted to copy, distribute and/or modify this document
23 under the terms of the GNU General Public License, Version 2.0
24 or any later version published by the Free Software Foundation.
25 A copy of the license is included in the section entitled ``GNU
26 General Public License.''
27 @end quotation
28 @end copying
30 @titlepage
31 @title Guide to Planner
32 @subtitle a day planner and organizer
33 @subtitle for GNU Emacs and XEmacs
35 @c The following two commands
36 @c start the copyright page.
37 @page
38 @vskip 0pt plus 1filll
39 @insertcopying
40 @end titlepage
42 @c So the toc is printed at the start
43 @contents
45 @ifnottex
46 @node Top, Preface, (dir), (dir)
47 @comment  node-name,  next,  previous,  up
48 @top Planner
50 @insertcopying
51 @end ifnottex
53 @menu
54 * Preface::                     
55 * Introduction::                
56 * Installation::                
57 * Overview::                    A discussion of different approaches to planning
58 * Getting Started::             
59 * More about Planner::          In-depth look at some core features
60 * Managing Your Information::   Integration with external programs
61 * Advanced Configuration::      
62 * Reference Material::          
63 * Getting Help::                
64 * Acknowledgements::            
65 * GNU General Public License::  
66 * Concept Index::               
68 @detailmenu
69  --- The Detailed Node Listing ---
71 Installation
73 * Getting the Files::           
74 * Creating Your Planner::       
75 * Components::                  
76 * Advanced Installation::       
78 Getting the Files
80 * Installing from a Source Archive::  
81 * Installing from Arch::        
82 * Installing from Debian::      
84 Overview
86 * Planning based on the Franklin-Covey Approach::  
87 * Why Use Planner::             
89 Getting Started
91 * Tasks::                       
92 * Schedule::                    
93 * Notes::                       
94 * Hyperlinks::                  
95 * Example Page::                
96 * Review::                      
98 More about Planner
100 * Navigation::                  
101 * More about Tasks::            
102 * More about Notes::            
103 * Making Files Pretty::         
104 * Annotations::                 
105 * Interactive Lisp::            planner-lisp.el
106 * Publishing::                  planner-publish.el
107 * Experimental Functions::      planner-experimental.el
109 More about Tasks
111 * Creating New Tasks::          
112 * Organizing Your Tasks::       
113 * Task Reports and Overviews::  
115 Creating New Tasks
117 * Creating a Task::             
118 * Task Priorities::             
119 * Task IDs::                    planner-id.el
120 * Cyclic Tasks::                planner-cyclic.el
121 * Task Detail::                 
122 * Deadlines::                   planner-deadline.el
124 Organizing Your Tasks
126 * Multiple Projects::           
127 * Viewing Tasks::               
128 * Modifying Tasks::             
129 * Carrying Over Unfinished Tasks::  
130 * Task Numbering::              
131 * Task Ranks::                  planner-rank.el
132 * Grouping Tasks::              planner-trunk.el
134 Task Reports and Overviews
136 * Accomplishments::             planner-accomplishments.el
137 * Status Reports::              planner-report.el
138 * Task Overviews::              planner-tasks-overview.el
139 * <tasks> tag::                 
140 * planner-registry::            Keep track of annotations
141 * planner-zoom::                View and navigate tasks by time period
143 More about Notes
145 * Using Allout Mode::           Quickly navigating your notes
146 * <notes>::                     Note headlines
147 * <past-notes>::                Index of past notes
148 * Note Indices::                planner-notes-index.el
150 Publishing
152 * Publishing Planner pages::    planner-publish.el
153 * Publishing Calendars::        planner-calendar.el
154 * Authz Access Restriction::    planner-authz.el
155 * RSS Publication::             Sharing notes with planner-rss.el
156 * iCal Task Publication::       Sharing tasks with planner-ical.el
157 * RDF Publication::             planner-rdf.el
159 RDF Publication
161 * Publishing with planner-rdf::  
162 * planner-rdf Tags::            
163 * planner-rdf Usage Examples::  
165 Managing Your Information
167 * E-mail::                      Linking notes and tasks to messages
168 * Scheduling and Time::         Tracking appointments and where your time goes
169 * Finances::                    Display your account balances and more
170 * Contacts and Conversations::  BBDB and ERC
171 * Tracking Research and Resources::  The Web, bibliographies, and bookmarks
172 * Tracking Development::        
174 E-mail
176 * Unix mail::                   Unix mailboxes: planner-unix-mail.el
177 * Gnus::                        Gnus mail and news reader: planner-gnus.el
178 * VM::                          VM mail reader: planner-vm.el
179 * Wanderlust::                  Wanderlust mail reader: planner-wl.el
180 * MH-E::                        MH-E mail reader: planner-mhe.el
181 * Rmail::                       Rmail: planner-rmail.el
183 Scheduling and Time
185 * Diary::                       Using the Emacs diary: planner-diary.el
186 * Appointments::                Appointments in plan pages: planner-appt.el
187 * Timeclock::                   Time tracking: planner-timeclock.el
188 * schedule.el::                 Project completion: planner-schedule.el
190 Diary
192 * Planner-Diary Advanced Features::  
194 Usage
196 * Task-based Appointments::     
197 * Schedule-based Appointments::  
198 * Viewing Appointments::        
199 * Appointment Updating on Save::  
200 * Appointment and Calendar Integration::  
201 * Appointment Hooks::           
203 Finances
205 * Ledger::                      Personal finances: planner-ledger.el
207 Contacts and Conversations
209 * BBDB::                        Contacts: planner-bbdb.el
210 * Emacs Relay Chat::            Internet Relay Chat: planner-erc.el
212 Tracking Research and Resources
214 * W3m::                         Web browser: planner-w3m.el
215 * BibTeX::                      Bibliographies: planner-bibtex.el
216 * Bookmark::                    Bookmarks: planner-bookmark.el
218 Tracking Development
220 * Log Edit::                    Changelogs: planner-log-edit.el
221 * PSVN::                        svn changesets: planner-psvn.el
222 * XTLA::                        TLA changesets: planner-xtla.el
223 * Gnats::                       Gnats: The GNU bug reporting system
225 Advanced Configuration
227 * Customizing Your Day Pages::  Change your templates
228 * Variables to Customize::      Change various aspects of Planner behavior
229 * Ideas for Other Keybindings::  Add to and change the default keybindings
231 Reference Material
233 * Keeping Track of Time::       
234 * Other Interactive Functions::  
235 * Planner Keybindings::         Default keybindings for Planner
236 * Sample Configuration Files::  
238 Sample Configuration Files
240 * File Organization::           
241 * Bare-Bones Planning::         
242 * Bare-Bones Planning with Plan Pages::  
243 * Tasks on Plan Pages with Some Day Pages::  
244 * Hierarchical Tasks::          
246 @end detailmenu
247 @end menu
249 @node Preface, Introduction, Top, Top
250 @comment  node-name,  next,  previous,  up
251 @chapter Preface
253 This document describes Planner, which was written by John Wiegley and
254 is now maintained by John Sullivan (@pxref{Acknowledgements}).
256 This document is a work in progress, and your contribution will be
257 greatly appreciated. Please e-mail comments and suggestions to the
258 mailing list (@pxref{Getting Help}). In the subject line of your
259 e-mail, include the word @samp{Planner}.
261 This documentation is available in eye-pleasing formats including PDF
262 and HTML at @url{http://www.mwolson.org/static/doc/}.
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://www.mwolson.org/static/doc/muse.html}.
315 Make sure that you use the latest Muse release.  Development code might
316 prove unstable.
318 @menu
319 * Getting the Files::           
320 * Creating Your Planner::       
321 * Components::                  
322 * Advanced Installation::       
323 @end menu
325 @node Getting the Files, Creating Your Planner, Installation, Installation
326 @comment node-name,  next,  previous,  up
327 @section Getting the Files
329 Currently, there are three ways to obtain and install Planner. You can
330 install it from a source archive, Arch repository, or Debian package.
332 @menu
333 * Installing from a Source Archive::  
334 * Installing from Arch::        
335 * Installing from Debian::      
336 @end menu
338 @node Installing from a Source Archive, Installing from Arch, Getting the Files, Getting the Files
339 @comment node-name,  next,  previous,  up
340 @subsection Installing from a Source Archive
341 @cindex source code archive, installing from
343 You can install Planner from the source archive packaged and
344 distributed directly by the maintainer. This archive is provided in
345 both @file{.tar.gz} and @file{.zip} format.
347 @enumerate
348 @item
349 Download and unpack either
350 @url{http://www.mwolson.org/static/dist/planner-latest.tar.gz} or
351 @url{http://www.mwolson.org/static/dist/planner-latest.zip}.
353 @item Edit your @file{~/.emacs} (@file{_emacs} on Microsoft Windows).
355 @example
356 ;; Add the directories to your load path
357 (add-to-list 'load-path "/path/to/muse/lisp")
358 (add-to-list 'load-path "/path/to/planner")
359 (add-to-list 'load-path "/path/to/remember")
361 ;; Load planner
362 (require 'planner)
363 @end example
364 @end enumerate
366 @subheading Updating Your Version
368 Download a new version and extract it over the old directory. Don't
369 forget to delete any byte-compiled files (@file{*.elc}) in the
370 directories so that the new code will be used.
372 @node Installing from Arch, Installing from Debian, Installing from a Source Archive, Getting the Files
373 @comment node-name,  next,  previous,  up
374 @subsection Installing from Arch
375 @cindex Arch repositories
376 @cindex Arch, installing from
378 Arch allows you to retrieve previous versions and select specific
379 features and bugfixes. Debian users can install Arch with @kbd{apt-get
380 install tla}. Users of other distributions should see
381 @url{http://regexps.srparish.net/www/}.
383 To get started with Planner using Arch, you'll need to run some initial
384 commands to register your local copy of the archive and retrieve the
385 files.
387 @example
388 # Register the Muse archive
389 tla register-archive http://www.mwolson.org/archives/2006
391 # Register the Planner archive
392 tla register-archive http://arch.gna.org/planner-el/archive-2006
394 # Get the Muse archive
395 tla get mwolson@@gnu.org--2006/muse--main--1.0 muse
397 # Download planner module into the planner/ subdirectory
398 tla get mwolson@@gnu.org--2006-planner-el/planner-el--devel--1.0 planner
399 @end example
401 Then add the following lines to your @code{~/.emacs}:
403 @example
404 ;; Add the directories to your load path
405 (add-to-list 'load-path "/path/to/muse/lisp")
406 (add-to-list 'load-path "/path/to/planner")
407 (add-to-list 'load-path "/path/to/remember")
409 ;; Load planner
410 (require 'planner)
411 @end example
413 You can also browse the Arch repository on the web at
414 @url{http://www.mwolson.org/cgi-bin/archzoom/archzoom.cgi/mwolson@@gnu.org--2006-planner-el}.
416 @subheading Updating Your Version
417 @cindex Arch, updating from
419 To stay up-to-date using Arch, here are some commands that might be
420 useful.
422 To list upstream changes not in local copy:
424 @example
425 # Change to the source directory you are interested in. Example:
426 cd muse/
428 # Display the summary of changes
429 tla missing --summary
430 @end example
432 To update to the latest version:
434 @example
435 cd muse; tla replay
436 cd ../planner; tla replay
437 cd ../remember; tla replay
438 @end example
440 Don't forget to delete any byte-compiled files (@file{*.elc}) in the
441 directories so that the new code will be used.
443 @node Installing from Debian, , Installing from Arch, Getting the Files
444 @comment node-name,  next,  previous,  up
445 @subsection Installing from Debian
446 @cindex Debian package
448 Debian packages for Planner, Muse, and Remember are available in Debian
449 proper as the @code{planner-el}, @code{muse-el}, and @code{remember-el}
450 packages, respectively.
452 If you wish to try experimental packages, add the following lines to
453 your @file{/etc/apt/sources.list}
455 @example
456 deb http://www.mwolson.org/debian/ ./
457 @end example
459 Then, do the following steps as root:
461 @example
462 apt-get update
463 apt-get install muse-el
464 apt-get install planner-el
465 @end example
467 @subheading Updating Your Version
468 @cindex Debian package, updating
470 If you installed Planner from Debian, do @kbd{apt-get update; apt-get
471 upgrade} to upgrade all packages that can be upgraded, or @kbd{apt-get
472 update; apt-get install planner-el} to upgrade just planner-el.
474 @node Creating Your Planner, Components, Getting the Files, Installation
475 @section Creating Your Planner
477 Now that you have installed the files for Planner and Muse, you need
478 to set some options to create your first planner.
480 Muse thinks in terms of projects. Each project consists of a group of
481 documents and certain information associated with these
482 documents. Planner is organized as a project within Muse. So, you need
483 to tell Muse a bit about it.
485 Add something like the following code to your @file{.emacs} file.
487 First, give your new Planner project a name. In this case, we use the
488 name, ``WikiPlanner''.
490 @example
491 (setq planner-project "WikiPlanner")
492 @end example
494 Next, add an entry for your project to Muse's master list of
495 projects. Don't forget to use your own name here in place of
496 ``WikiPlanner'' if you have chosen something different.
498 @example
499 (setq muse-project-alist
500       '(("WikiPlanner"
501          ("~/Plans"           ;; where your Planner pages are located
502           :default "TaskPool" ;; use value of `planner-default-page'
503           :major-mode planner-mode
504           :visit-link planner-visit-link)
506          ;; This next part is for specifying where Planner pages
507          ;; should be published and what Muse publishing style to
508          ;; use.  In this example, we will use the XHTML publishing
509          ;; style.
511          (:base "planner-xhtml"
512                 ;; where files are published to
513                 ;; (the value of `planner-publishing-directory', if
514                 ;;  you have a configuration for an older version
515                 ;;  of Planner)
516                 :path "~/public_html/Plans"))))
517 @end example
519 This code should work fine as-is for you as long as the directories
520 you see exist, and as long as you have no other Muse projects besides
521 your planner.
523 The first directory (@file{~/Plans}) is the directory where the
524 source files for your planner will reside. This is the directory where
525 you will actually visit files and edit them.  These files must have a
526 ``.muse'' extension.
528 The second directory (@file{~/public_html/Plans}) is the directory where
529 your planner files will be published by Muse as XHTML.
531 After you have added this code, make sure to either evaluate it or
532 restart Emacs.
534 @node Components, Advanced Installation, Creating Your Planner, Installation
535 @comment node-name,  next,  previous,  up
536 @section Components
538 Now that you have the archive, let's look at what's in it.
540 There should be three directories, named @file{planner}, @file{muse} and
541 @file{remember}.
543 In the @file{planner/} directory, you'll see many files with names like
544 @file{planner-gnus.el}. These are extra modules and extensions for
545 Planner, which you can use to tailor Planner to fit your desired
546 planning and information management habits.
548 In the @file{muse/lisp} directory, you'll see many files with names like
549 @file{muse-blosxom.el}. As in @file{planner/}, these are optional
550 modules and extensions.
552 A minimal working installation includes just @file{planner/planner.el}.
554 You need @file{planner.el} because it provides the core functions for
555 handling tasks, notes, and page navigation. You need @file{Emacs Muse}
556 because it provides the functions used to display your pages (both in an
557 emacs buffer and as HTML), and for connecting them to each other. More
558 specifically, it enables you to have hyperlinks and formatting in your
559 emacs buffers even though the actual files you are working with are
560 saved in plain text. These abilities are used in Planner to format your
561 planner pages the way you like, to create links from your tasks and
562 notes to the materials and projects they refer to, and to optionally
563 ``publish'' your pages in different formats, including HTML.
565 In the @file{remember/} directory are files related to
566 RememberMode. RememberMode does not depend on Planner or Muse, but works
567 best with Planner installed. It is not required in order to use Planner,
568 but it is used by many Planner users to record notes and information to
569 their planner pages.
571 If you are curious, you can open each file in these directories and read
572 the comments at the top, to get an idea of what each extension is used
573 for. They are also all detailed later in this manual.
575 @node Advanced Installation,  , Components, Installation
576 @comment  node-name,  next,  previous,  up
577 @section Advanced Installation
579 Once you decide you want to keep Planner around for a while, there
580 are two additional steps you can take to make using it easier and more
581 efficient. These steps are optional.
583 @itemize
584 @cindex installing the info file
585 @cindex @file{planner-el.texi}, installing
586 @cindex @file{planner-el.info}, installing
587 @item You can make this document, the Planner info file, appear in
588 the index of info files you see when you type @command{M-x info} or
589 @kbd{C-h i} in Emacs. The instructions for doing this vary depending
590 on whether you have permission to edit certain files on your
591 system. Follow the instructions in @ref{Installing an Info File, ,
592 ,texinfo, Texinfo}, using something like:
594 @example
595 * Planner: (path/to/planner/Planner). Organizer/day planner
596 for Emacs.
597 @end example
599 for the new entry in the info @file{dir} file.
601 @cindex byte compiling
602 @item You can byte-compile @file{planner.el}, @file{Muse},
603 @file{remember.el}, or any of the optional modules you frequently use,
604 in order to improve the speed of their execution. Basically, all you
605 need to do is change to the directory of each project in
606 @file{scripts/planner-build.el} and run @command{make} from the command
607 line. To read more detail about byte compilation, see
608 @ref{Byte Compilation, , ,elisp, Emacs Lisp Reference Manual}.
610 @end itemize
612 @node Overview, Getting Started, Installation, Top
613 @comment node-name,  next,  previous,  up
614 @chapter Overview
616 Planner is a plain-text hyperlinked personal information manager
617 for Emacs that helps you keep track of tasks, notes, and other
618 information. People use Planner to support different ways of planning
619 one's day, from Franklin-Covey and David Allen's Getting Things Done
620 to home-brew hacks. Planner is even used to manage information not
621 normally handled by a personal information manager, like bugtracking,
622 time tracking, and team data. If you start by using Planner as a basic
623 TODO and notes manager, you might find other ways it can help you
624 improve your process.
626 You can use Planner to keep track of your tasks, schedule, notes,
627 and other information you want to store in hyperlinkable text files.
628 You can get the most benefit out of a personal information manager if
629 you use it everyday. Most people add @code{(plan)} to the end of their
630 @file{~/.emacs} so that Planner shows today's schedule and
631 unfinished tasks whenever Emacs starts. If you leave your Emacs
632 running for more than 24 hours, try to get into the habit of running
633 @code{plan} at least once a day.
635 Because your time is important, Planner tries to minimize
636 distractions, making it easier for you to jot down tasks and notes
637 without being distracted from your work. People often make tasks based
638 on the current buffer, so Planner tries to create hyperlinks to
639 whatever you're looking at so that you can jump back to it easily. The
640 @ref{Getting Started} tutorial will show you how to set that up for
641 both tasks and notes.
643 The customizability of Planner means you can make your personal
644 information manager truly personal. Planner strives to be as flexible
645 as possible, and we would love to adapt Planner to fit your needs.
646 Browse through our mailing list (@pxref{Getting Help}) to
647 find out how other people are using Planner, and post your feature
648 requests and bug reports there!
650 Planner is just a tool. It does not dictate a particular way of
651 planning, although it supports some ways better than it supports
652 others. If you want to take some time thinking about planning, read
653 the following reflections for inspiration and ideas. On the other
654 hand, if you want to hit the ground running, see @ref{Getting
655 Started}. If you already have a specific way of planning in mind,
656 check out @ref{Sample Configuration Files}.
658 @menu
659 * Planning based on the Franklin-Covey Approach::  
660 * Why Use Planner::             
661 @end menu
663 @node Planning based on the Franklin-Covey Approach, Why Use Planner, Overview, Overview
664 @comment  node-name,  next,  previous,  up
665 @section Planning Based on the Franklin-Covey Approach
666 @cindex philosophy of planning
668 This is a slightly edited and updated version of an essay by John
669 Wiegley. Read it if you want to get some insights into one way of
670 planning. You can skip this if you want to go straight to planning
671 your day.
673 What is planning?  It can be a nebulous thing to define.  In its
674 essence, however, it is very simple: it's how we achieve our dreams.
676 Our days are filled with time, and hence with actions, whether they
677 be of a mental or physical sort.  But there are two kinds of
678 action: reactive and creative.  Reactive action is a response to
679 the environment, a reaction to stimulus.  Had we enough instincts
680 to ensure survival, we could live according to this kind of action
681 alone.  It is a mode of behavior we share with every living
682 species.
684 The opposite to reactivity is creativity, when we decide upon a
685 course of action that is a wholly a product of personal choice.  We
686 then make decisions as to the steps needed to make this wish a
687 reality.  This is planning.  Planning is essentially a creative
688 endeavor at every step.
690 First, create the idea, what you want to achieve.  Very short-term
691 ideas do not need much more than thinking about how to do it.  But
692 long-term ideas require planning, since the mind cannot contain all
693 of the details.
695 Second, decide how the idea maps into the circumstances you find
696 yourself in.  Some environments will assist your plan, others
697 hinder it.  But step by step, identify every barrier to the
698 realization of your idea, and devise a countermeasure to overcome
699 it.  Once you've mapped things out from beginning to end,
700 accounting for unknowables as best you can, you now have your plan.
702 Third is to break the stages of the plan into parts that are not
703 overwhelming in their complexity.  It is at during this phase that
704 a plan is turned into task items, each to be accomplished within
705 the span of one day's time.  If a task requires several days, break
706 it up further.  The smaller it is, the less your mind will recoil
707 from attempting it.
709 Fourth is to monitor your progress, identifying problems and
710 correcting for them as you go.  Some plans start out unachievable,
711 and remain that way indefinitely, due to a simple lack of
712 observation.  If nothing is working for you, change it.  Otherwise,
713 your plan is merely a well-crafted wish.
715 Fifth is just to do the work, and be patient.  All good plans take a
716 great deal of time, and *cannot* happen immediately.  The groundwork
717 must be laid for each step, or else it will rest on an unsecure
718 foundation.  If you follow your plan doggedly, applying some time to
719 it each day or week, it @emph{will} happen.  Remember the story of the
720 tortoise and the hare.  I've even written a short essay on the
721 necessity of gradual accomplishment, which can be found at
722 @url{http://emacswiki.org/johnw/essays/node2.html}.
724 How can this software help?  Computers are ideal for manipulating
725 information, since they allow you to change things without erasing
726 or rewriting.  And since all plans change quite a bit during their
727 implementation, a planning program can be very helpful.
729 Start by adding the following to your @file{.emacs} (or @file{_emacs}):
731 @example
732 (load "planner")
733 @end example
735 Now, conceive your idea.  I can't believe there's nothing you want
736 from life.  More peace, time to enjoy the world, an end to war?
737 Everyone wants something.  Search deeply, and you will find
738 countless unhoped wishes lurking therein.  Choose one for now, and
739 think on it for a while.
741 Then open a file (using @kbd{C-x C-f}) within the directory named by
742 @code{planner-directory}.  Emacs will automatically recognize this file
743 as a planner file.  Name the file after your plan, such as
744 @file{BetterHealth}.
746 Choose an idea you really want to accomplish.  Struggle to
747 differentiate between the things you want because others want them,
748 and the things you want for yourself.  It takes quite an effort, and
749 may require a long time before you notice the difference.  Many people
750 want to be more healthy to be more attractive, which is an externally
751 driven goal.  Unless @emph{you} really want to accomplish what you
752 envision, the odds are you will fail.  Only our own wishes and dreams
753 possess enough personal energy to see themselves to fruition.  What
754 happens to many of us is simply that we never become conscious of
755 these dreams: what we love, what we desire most.  When I talk to
756 friends, so much of what I hear is things they want because they feel
757 they should want them.  There's just not enough energy there to pursue
758 a good plan, because nearly all of it is negative energy.
760 Do you know what you really want?  Don't worry, many people don't.
761 It's not a question anyone really wants us to pursue, because often
762 we don't want what others do; it doesn't contribute to the social
763 welfare, and all that nonsense.  Somehow we always forget that
764 what's good for the social welfare now, was someone else's crazy
765 dream a hundred years ago.  The human aversion to fundamental
766 change is always one's greatest enemy, so don't waste any time
767 getting bitter about it.
769 For the sake of argument I assume you really do want to be
770 healthier, because you've fallen in love with the ideal of purity,
771 or you understand the connection between your physical self and the
772 world around you, and how this can open up your spirit to desiring
773 more.  I assume.  :)
775 So you're in a Wiki file called @file{BetterHealth}.  Start typing.
776 Type anything related to your idea: what you think about it, your
777 ideas on it, @emph{and especially what the end will look like}.  If
778 you can't visualize the end, you can't plan, since planning is about
779 drawing a line between now and then.
781 When you've typed enough to gain a vision of your goal, start
782 drafting what the possible intermediate steps might be.  Then stop,
783 get up, walk around, enjoy life, and come back to it.  Taking a
784 long time at the beginning is not a bad idea at all, as long as
785 it's not forever.
787 As you chew on your idea, it will begin to become more and more
788 concrete.  You'll have ideas about the smallest pieces, and ideas
789 about the biggest pieces.  Keep going until it starts to take shape
790 before you, and you can see yourself in your mind's eye moving from
791 the present into the future.  Write down this progression, and the
792 sorts of things you might encounter along the way.
794 As you continue, you'll naturally discover discrete phases, or
795 ``milestones'' as managers love to call them.  These are very
796 important, because they let you know you're making progress.  I
797 recommend having a big party with friends every time you achieve a
798 milestone.  A typical plan might have between three and ten.
800 Between the milestones are the bigger pieces of your plan.  Name
801 these pieces using MixedCase words, and you'll notice that Emacs
802 colors and underlines them for you.  Like, FindGoodGym.  Hit return
803 on this highlighted word, and you'll find yourself in another,
804 blank file.  In this file, start drafting your sub-plan, just as
805 you did with the larger plan.  You should find it easier now, since
806 the scope is smaller.
808 As you break down further, you'll notice simple little things that
809 need to get done.  These are your tasks.  Every plan is a
810 succession of tasks.  The difference from reactivity is that each
811 task is part of the larger plan. This is what it means to be
812 systematic: that everything you do helps further your plan.  If you
813 have tasks in your day that contribute to no plan, they are
814 reactive.  Of course, life is full of these, but don't let them
815 take up more than 20% of your day.  If you allow yourself to be
816 dominated by reactive tasks, you'll regret it at the end of your
817 life.  I don't know this personally, but I do know that striving
818 for one's dreams -- and seeing them come to fruition -- is the
819 greatest joy a man can possess.  It is the essence of freedom, of
820 living, of creation.  Reactivity is the opposite of this, and
821 serves only to drain our energy and slacken our spirits.
823 Now that you've thought of a simple task, type @kbd{C-c C-t}. This
824 will ask for a brief description of the task, and when you plan to do
825 it. If you hit @key{RETURN} at the question @samp{When}, it assumes
826 you mean today. It will also pop up a three-month calendar at this
827 question, so you can see where your free days are. Make sure you set
828 the variable @code{mark-diary-entries-in-calendar} to @samp{t} in your
829 @file{.emacs} (or @file{_emacs}) file. This way, you can see which
830 days your appointments fall on. (Read about the Emacs Calendar and
831 Diary in @ref{Calendar/Diary, , , Emacs, GNU Emacs Manual}.)
833 @example
834 (setq mark-diary-entries-in-calendar t)
835 @end example
837 Once your task is in there, go back to your plan and keep
838 generating more tasks.  Generate them all!  Fully describe---as
839 tasks---everything necessary to bring your sub-plan to completion.
840 Don't create tasks for the other sub-plans.  You may have good idea
841 of what they'll look like, but don't bother rendering them into
842 tasks just yet.  Things will change too much between now and then,
843 for that to be a good use of your time.
845 Is your sub-plan now rendered into all of the tasks necessary to
846 reach your first milestone?  Great!  That is the purpose of
847 planner.el.  The rest is really up to you.  If you find that you
848 keep putting things off, and never do them, that's the surest sign
849 you're planning for someone else's dream, and not your own.
851 Here are some of the things planner.el can do, to help you manage
852 and track your tasks:
854 At the beginning of every day, type @kbd{M-x plan}.  This will jump
855 you to the top of the most recent task list before today.  If you
856 skipped a bunch of days, you'll have to open up those files on your
857 own.
859 Probably some of the tasks that day won't be finished -- that's OK.
860 Learning to properly estimate time is a magical, mystical art that few
861 have mastered.  Put your cursor on those undone tasks, and type
862 @kbd{C-c C-c}.  This will move them into today's task page.  You can
863 jump to today's task page at any time by typing @kbd{C-c C-n} (from a
864 Wiki or planning page).  I heartily recommend binding @kbd{C-c n}, to
865 jump you to this page from anywhere:
867 @example
868 (define-key mode-specific-map [?n] 'planner-goto-today)
869 @end example
871 As you look at your task sheet each day, the first thing to do is to
872 ``clock in'' to one of them.  This isn't necessary, and is only
873 helpful if you're around your computer a lot.  But by typing @kbd{C-c
874 C-i} (assuming you have my @file{timeclock.el} on your load-path), it
875 will log the time you spend working on your sub-plan (@pxref{Time
876 Intervals, , , Emacs, GNU Emacs Manual}).  This is helpful for viewing
877 your progress.  Type @kbd{C-c C-o} to clock out.
879 @kbd{C-M-p} and @kbd{C-M-n} will move a task up and down in priority.
880 Priority is represented by a letter A through C.  'A' tasks mean they
881 must be done that day, or else your plan is compromised and you will
882 have to replan.  'B' means they should be done that day, to further the
883 plan, otherwise things will be delayed.  'C' means you can put off the
884 task if you need to, although ultimately it will have to be done.
886 For reactive tasks, the letters mean something different: 'A' means
887 you must do it today, or somebody will roast your chestnuts over an
888 open fire.  'B' means you should do it today, or else someone will
889 be practicing patience at the day's end.  'C' means no one will
890 notice if you don't do it.
892 Again, reactive tasks are ENEMIES OF PLANNING.  Really, until you
893 see them that way, circumstances will push you around and steal
894 your life away.  We have only so many years to use, and everyone is
895 greedy to take them.  It's insidious, almost invisible.  A healthy
896 dislike of reactivity will do wonders for organizing your affairs
897 according to their true priority.
899 The last word that needs to be said concerns ``roles''.  Every person
900 stands in several positions in his life: husband, employee, manager,
901 etc.  These roles will tend to generate tasks not associated with any
902 immediate plan, but necessary to maintain the health and functioning
903 of the role.  My suggestion is to keep this the smallest possible
904 number, and fulfill those that remain well.  How you decide to
905 apportion your time between pursuing grand designs, and fostering deep
906 relationships, is a personal matter.  If you choose well, each will
907 feed the other.
909 I mention this to point that reactivity is something not
910 exclusively associated with tasks that have no master plan, because
911 being a father, for example, is something that rarely proceeds
912 according to orderly plans.  But the role of father itself is its
913 own plan, whose goal is ``to be the best one can'', and whose
914 component tasks are spending time on whatever comes up.  It is, in
915 a sense, an implicit plan.  But reactive tasks follow no plan at
916 all; they are parasites of time that suck the spirit away, whereas
917 properly chose roles actually help fulfill one's own inner needs.
918 At least, this is what I believe.
920 @defun plan force-days
921 Start your planning for the day, beginning with the last day's tasks.
923 If @code{planner-carry-tasks-forward} is non-nil, find the most recent
924 daily page with unfinished tasks and reschedule those tasks to
925 the current day.  If @var{force} is non-nil, examine all past daily
926 pages for unfinished tasks.
928 If @code{planner-carry-tasks-forward} is nil, visit the most recent
929 daily page.  If a daily page for today exists, visit that instead.
931 If @var{force-days} is a positive integer, scan that number of days.
932 If @var{force-days} is @samp{t}, scan all days.
934 @end defun
936 @node Why Use Planner,  , Planning based on the Franklin-Covey Approach, Overview
937 @comment  node-name,  next,  previous,  up
938 @section Why Use Planner?
939 @cindex Planner, why use
941 You can skip this essay if you just want to get started, or read it
942 for some insights into why the previous maintainer is crazy about it.
944 Why I Use Planner, by Sacha Chua
946 I thought about why I liked Planner. Planner as a TODO manager
947 isn't particularly special. Although I can assign tasks to categories
948 and see a breakdown of what projects are taking up my time, Evolution
949 and Microsoft Outlook provide more powerful task support. In other
950 task managers, you can e-mail tasks, assign multiple categories and
951 fill in all sorts of metadata. You can even synchronize your tasks
952 with devices like a phone or PDA. So why use Planner?
954 I realized that integration into my way of life and automatic context
955 clues are what really make planner tasks worth it for me. I don't have
956 to switch to another application to create a task. I can just hit a
957 keyboard shortcut. Planner uses a minibuffer to get the task
958 description. My windows are not rearranged in any way, and I can look
959 at the data that's relevant to a task. Not only that, tasks
960 automatically pick up context clues, like whom I'm talking to on IRC
961 or the file I'm editing at the moment. This cuts down on the explicit
962 context I need to include and makes it easier for me to bring up the
963 task again.
965 As a scheduler, Planner is also not particularly distinguished.
966 Sure, it can display my @file{~/diary}, but for that matter so can
967 @kbd{M-x diary}. Evolution and Outlook can give me a more graphical
968 view of my time, sync with my PDA, and coordinate my schedule with
969 other people. Those applications support detailed schedule entries
970 with powerful cyclic options. On the other hand, Planner gives me
971 a personal, plain text view and (at least the way I use it) requires
972 me to edit a separate file to add new appointments. (I've defined a
973 few shortcut keys to deal with this.) However, it does have one
974 advantage---my schedule is always loaded. I used to use Outlook on
975 Windows, but having my schedule in a separate application meant that I
976 actually looked at it very rarely, as I had turned off reminders
977 because they got annoying.
979 Planner's notes, however, are what really convinced me. I can hit
980 a keyboard shortcut from anywhere and type my notes into a buffer
981 which automatically keeps context information. After typing the note,
982 I can then categorize it. I think that the critical thing here is that
983 interruptions---fleeting thoughts---don't break my flow. I can just
984 pop up a remember buffer, stow that thought away somewhere, and go
985 back to it whenever I want. In contrast, creating a note in Outlook
986 means switching out of my application, making a couple of keystrokes,
987 typing the note in, and then switching back. The context switches make
988 it hard to keep track of where I am and what I'm supposed to remember.
989 Not only that, I need to enter context by hand. Even though I can
990 color my notes and reorganize them in Outlook, I find the context
991 switch too expensive. I used to keep notes in other knowledge
992 management tools as well. Some applications allowed me to
993 drag-and-drop links into the current note, and that was cool. But that
994 required a manual action, and those applications didn't feel
995 integrated into my way of working. (Note: You'll need remember.el for
996 this.)
998 I guess that's why I like Planner. Unlike other organizers which
999 don't know anything about the applications I use, Planner tries
1000 its best to integrate into the way I work, and it's easy to extend.
1001 Fortunately I do almost all my work in Emacs, so I can think of my
1002 organizer as integrated into my e-mail client, Internet Relay Chat
1003 client, web browser, file editor and even games. It automatically
1004 picks up context clues from these applications and allows me to easily
1005 jump back to relevant files. It doesn't distract me. It allows me to
1006 key in data and then it gets out of my way.
1008 (That said, it's perfectly okay to use Planner even if you don't live
1009 in Emacs.)
1011 The processing that happens in the background is a bonus, and
1012 publishing my task list and notes online has greatly helped me. It
1013 gives other people a way to see what I'm working on and what I've
1014 planned for the future. Occasionally people write in with additional
1015 resources and helpful tips. (Again, this is purely optional. Many
1016 people don't publish their planner pages. Other people use really
1017 fine-grained access control.)
1019 I think the greatest feature of Planner, though, is its user
1020 community. Because Planner can be easily modified, we can experiment
1021 with a lot of new ideas quickly, and we can tailor Planner to fit our
1022 needs. I love checking my @samp{planner-el-discuss} mail and finding
1023 out how people have tweaked Planner or would like to tweak Planner,
1024 and I've learned a lot by exchanging reflections on organizing one's
1025 life.
1027 I really wasn't an organization freak before I started using Planner.
1028 I often forgot to do my homework or answer important mail. I still
1029 procrastinate now, but at least it's all being kept track of
1030 somewhere! I also really like how Planner lets me to gradually improve
1031 how I'm doing things, and I feel I've come a long way.
1033 Please try it out! We'd love to hear how Planner can become
1034 @emph{your} personal information manager.
1036 @node Getting Started, More about Planner, Overview, Top
1037 @comment  node-name,  next,  previous,  up
1038 @chapter Getting Started
1040 At the end of this tutorial, you will be able to use Planner and
1041 related modules to keep track of your tasks, schedules and notes, all
1042 within the convenience of Emacs.
1044 There are two kinds of pages in a Planner wiki. Day pages show tasks,
1045 schedule, and notes for the day, while plan pages organize related tasks
1046 and notes into a single page.
1048 If you have not yet added planner to your @file{~/.emacs}, add the
1049 following lines:
1051 @example
1052 (add-to-list 'load-path "/path/to/muse/lisp")
1053 (add-to-list 'load-path "/path/to/planner")
1054 (add-to-list 'load-path "/path/to/remember")
1055 (require 'planner)
1056 @end example
1058 This will bring up the most recent day page with unfinished tasks or
1059 create a new day page if necessary. By default, planner pages are
1060 stored in @samp{~/Plans} (@code{planner-directory}).
1062 @menu
1063 * Tasks::                       
1064 * Schedule::                    
1065 * Notes::                       
1066 * Hyperlinks::                  
1067 * Example Page::                
1068 * Review::                      
1069 @end menu
1071 @node Tasks, Schedule, Getting Started, Getting Started
1072 @section Tasks
1074 Let us start by creating a task labelled
1076 @example
1077 Join http://mail.gna.org/listinfo/planner-el-discuss/
1078 @end example
1080 From anywhere (even this info buffer!), call @kbd{M-x
1081 planner-create-task-from-buffer} to create a new task. Fill in the
1082 description and choose a date by:
1084 @itemize
1085 @item typing 1 - 31 to put the task on that day of the month,
1086 @item accepting the default (today) by pressing RET,
1087 @item selecting the date with mouse-1,
1088 @item
1089 typing +n (where in is an integer) to schedule the task in n days time,
1091 @item typing nil to make an undated task.
1092 @end itemize
1094 For now, accept the default (@samp{today}) by pressing @key{RET}.
1096 You will then be prompted for a plan page. Plan pages gather related
1097 tasks and notes, giving you an overview of what you've done so far.
1098 You can accept the default TaskPool, create your own plan page, or
1099 specify nil to make a task that is not associated with a plan page.
1100 For now, accept the default (@samp{TaskPool}) by pressing RET.
1102 You have created your first task. View today's page with
1103 @kbd{M-x planner-goto-today}. You will see a line of the form
1105 @example
1106 #B  _ Join http://mail.gna.org/listinfo/planner-el-discuss/ (TaskPool)
1107 @end example
1109 If you created the task from this page, then there will be an additional
1110 annotation:
1112 @example
1113 #B  _ Join http://mail.gna.org/listinfo/planner-el-discuss/ : Tasks (TaskPool)
1114 @end example
1116 The URL, @samp{TaskPool} and @samp{Getting Started} are
1117 hyperlinks. You can use TAB and S-TAB to navigate between them and RET
1118 to follow the link.
1120 Create more tasks using @kbd{M-x planner-create-task-from-buffer}.
1121 This is bound to @kbd{C-c C-t} in @code{planner-mode} pages
1122 for your convenience. For example, create the following tasks:
1124 @itemize
1125 @item
1126 @samp{Describe my current way of working and how I would like to work},
1127 for three days from now (@samp{+3}),
1128 @item
1129 @samp{Learn how to schedule a task}, an undated task (@kbd{nil}) on the
1130 TaskPool page,
1131 @item
1132 @samp{Browse through the Planner info manual} for today (@kbd{.} or
1133 accept the defaults), and
1134 @item
1135 @samp{Add (plan) to the end of my [[~/.emacs]]} for today, but without a
1136 plan page (specify @kbd{nil} at the plan page prompt)
1137 @end itemize
1139 Tip: I bind planner-create-task-from-buffer to "F9 t" so that I can
1140 easily call it from anywhere. You can do that with this elisp fragment:
1141 @code{(global-set-key (kbd "<f9> t") 'planner-create-task-from-buffer)}
1143 Next, visit the TaskPool by:
1145 @itemize
1146 @item
1147 @key{TAB}-bing or using the cursor and typing @key{RET} to follow the
1148 link,
1149 @item @kbd{C-x C-f TaskPool RET} to use @code{find-file}, or
1150 @item @kbd{C-c C-f TaskPool RET} to use @code{muse-project-find-file}
1151 @end itemize
1153 You can see an overview of the tasks as scheduled on different days.
1154 Unlike many personal information managers that store all of your data
1155 in one file and then perform magic in order to present different
1156 views, Planner uses plain text files. The data is duplicated and kept
1157 updated by functions. This makes it simpler and easier to modify,
1158 because what you see is (almost) what you get. On the other hand,
1159 you'll need to get used to either editing both files, or using the
1160 built-in functions for editing and updating files. If you prefer not
1161 to work with linked tasks, you can configure Planner to use only plan
1162 pages or use only day pages.
1164 The TaskPool page should list the tasks you created earlier. Go to the
1165 one named Learn how to schedule a task . Type @kbd{C-c C-c}
1166 (@code{planner-copy-or-move-task}) to schedule the task. Type RET to
1167 accept the default (today). Go to the day page by following the link
1168 or calling @kbd{M-x planner-goto} (@kbd{C-c C-j C-d} or the menu bar);
1169 you will see the newly-created task there. You can also use @kbd{C-c
1170 C-c} (@kbd{planner-copy-or-move-task}) to reschedule a task to an
1171 earlier or later date.
1173 Well, that task is done. To mark the task as completed, type @kbd{C-c
1174 C-x} (@code{planner-task-done}). You can also edit the status manually
1175 (change _ to X) as long as you remember to call @kbd{M-x
1176 planner-update-task} to update the link page as well. Updating relies on
1177 the task description being the same, so do not edit this manually.
1179 Quick summary of commands:
1181 @itemize
1182 @item
1183 Go to today's page: @kbd{M-x plan} to carry unfinished tasks forward, or
1184 @kbd{M-x planner-goto-today} to just go to today's page.
1185 @item
1186 Create a task: @kbd{C-c C-t} (@code{planner-create-task-from-buffer}),
1187 or type a task manually (call M-x planner-update-task if the task is
1188 linked)
1189 @item
1190 Mark a task as done: @kbd{C-c C-x} (@code{planner-task-done}), or edit
1191 the task and call @kbd{M-x planner-update-task}
1192 @item Edit a task description: @kbd{M-x planner-edit-task-description}
1193 @item Reschedule a task: @kbd{C-c C-c} (@code{planner-copy-or-move-task})
1194 @item
1195 Reschedule many tasks: Mark a region and use @kbd{M-x
1196 planner-copy-or-move-region}
1197 @item
1198 Change the plan of a task: @kbd{M-x planner-replan-task}, or @kbd{C-c
1199 C-c} (@code{planner-copy-or-move-task}) with a plan page
1200 @item Delete a task: @kbd{M-x planner-delete-task}
1201 @item
1202 Reorder tasks: @key{M-p} (@code{planner-raise-task}) and @key{M-n}
1203 (@code{planner-lower-task}), or normal editing commands like kill and
1204 yank
1205 @item Change task priorities (@samp{#A} > @samp{#B} > @samp{#C}):
1206       @key{C-M-p} (@code{planner-raise-task-priority}) and
1207       @key{C-M-n} (@code{planner-lower-task-priority}),
1208       or edit the task and call @kbd{M-x planner-update-task}.
1209 @end itemize
1211 You can save your tasks with @kbd{C-x C-s} the same way you save any
1212 other file, or Emacs will prompt you to save it when you exit.
1214 @node Schedule, Notes, Tasks, Getting Started
1215 @comment  node-name,  next,  previous,  up
1216 @section Schedule
1218 This is free-form. You can put anything you want into this, or remove
1219 it from @code{planner-day-page-template} entirely. Some people use it
1220 to keep track of their plans for the day with tables like this:
1222 @example
1223 hh:mm | hh:mm | activity
1224 hh:mm | hh:mm | activity
1225 hh:mm | hh:mm | activity
1226 @end example
1228 Remember, Planner files are just plain text. You can add new sections
1229 or remove old ones, or use the suggested sections for entirely
1230 different activities.
1232 @node Notes, Hyperlinks, Schedule, Getting Started
1233 @comment  node-name,  next,  previous,  up
1234 @section Notes
1235 @cindex @file{remember.el}
1236 @cindex @file{remember-planner.el}
1237 @cindex notes
1239 By default, your Planner pages will have a Notes section. You can put
1240 anything you want in this section, or remove it from your
1241 @code{planner-day-page-template} entirely.
1243 You may be interested in @file{remember-planner.el}, part of the
1244 Remember package. @code{remember-planner.el} makes it easy to create
1245 notes from anywhere in Emacs, and it uses the same hyperlink-sensing
1246 code that Planner uses. Notes added by @code{remember-planner.el} look
1247 like this:
1249 @example
1250 .#1 Headline 00:00
1251 Body
1252 @end example
1254 and are outlined at the H2 level in published HTML.
1256 If you include the following in your @file{~/.emacs}:
1258 @example
1259 (require 'remember-planner)
1260 (setq remember-handler-functions '(remember-planner-append))
1261 (setq remember-annotation-functions planner-annotation-functions)
1262 @end example
1264 you can easily create context-aware notes. @kbd{M-x remember} will
1265 create a dedicated buffer for you to fill in your note. If Planner
1266 recognizes the buffer as one with context then it will include a
1267 hyperlink at the bottom. The first line is used as a title, so make it
1268 short and meaningful. The rest of the text will be used as the body of
1269 the note. Try it now by creating a note, perhaps about things you'd
1270 like to remember from this tutorial.
1272 Typing @kbd{C-c C-c} after composing will prompt for a plan page to
1273 put this on, with auto-completion. By default, notes will go on
1274 today's page only. If you specify a plan page, the note will go on
1275 today's page and on the plan page. Let's try specifying
1276 @samp{TaskPool} for the note.
1278 If you look at today's page, you'll find a timestamped note that links
1279 to @samp{TaskPool}. Likewise, @samp{TaskPool} contains a note that
1280 links to today's page. Because the text is copied, changes in one will
1281 not be automatically reflected in the other. To update the linked page
1282 after editing a note, use @kbd{M-x planner-update-note}. To change the
1283 plan page of a note, use @kbd{planner-replan-note}.
1285 @node Hyperlinks, Example Page, Notes, Getting Started
1286 @section Hyperlinks
1287 @cindex hyperlinks
1289 Planner automatically creates context-sensitive hyperlinks for your
1290 tasks and notes when you use @code{planner-create-task-from-buffer}
1291 and @code{remember}.
1293 Blue links indicate URLs and Planner pages that already exist. Red links
1294 indicate Planner pages that have not yet been created.
1296 Middle-click or type @key{RET} on any link to view the link in the
1297 current window. Shift-middle-click or type @key{S-RET} to view the
1298 link in another window. @key{TAB} goes to the next link, while
1299 @key{S-TAB} goes to the previous one.
1301 You can pick up hyperlinks using the @code{planner-annotation-as-kill}
1302 function.
1304 @defun planner-annotation-as-kill
1305 Create a context-sensitive hyperlink for the current buffer and copy
1306 it to the kill ring. When called with a prefix argument, prompt for
1307 the link display name.
1308 @end defun
1310 You can then paste it into any Planner buffer by using @kbd{M-x yank}
1311 or the keyboard shortcut.
1313 Hyperlinks are a powerful feature of Planner. You can use them to
1314 hyperlink to mail, news, Web pages, and even IRC connections. See the
1315 section on @ref{Managing Your Information} to find out how to enable
1316 support for various parts of Emacs. Want to add a new hyperlink
1317 scheme? Check out the source code for examples or ask on the mailing
1318 list for help.
1320 @node Example Page, Review, Hyperlinks, Getting Started
1321 @comment  node-name,  next,  previous,  up
1322 @section Example Page
1323 @cindex example page
1324 @cindex planning page, example
1326 An example planner file is given below. You'll notice that Planner
1327 does not have a well-defined user interface. Rather, it's free-form
1328 and open, allowing you to adapt it to your preferences.
1330 @example
1331 ----------------------------------------------------------------------
1332 * Tasks
1334 #B  _ Join http://mail.gna.org/listinfo/planner-el-discuss/ (TaskPool)
1335 #B  _ Browse through the Planner info manual (TaskPool)
1336 #B  _ Add (plan) to the end of my ~/.emacs
1337 #B  X Learn how to schedule a task (TaskPool)
1339 * Schedule
1341 18:00 | 19:00 | Learn how to use Planner
1343 * Notes
1345 Notes are free-form. You can put anything you want into this.
1347 .#1 This is note number one
1349 Notes on note number one!
1351 .#2 This weird ".#2" syntax is used for allout.el enumerated lists
1353 It makes using allout-mode very handy.
1355 @end example
1357 @node Review,  , Example Page, Getting Started
1358 @comment  node-name,  next,  previous,  up
1359 @section Review
1361 @itemize
1363 @item @emph{Ideas for using planner more effectively:}
1365 @itemize
1366 @item
1367 Add @code{(plan)} to the end of your @file{~/.emacs} so that you are
1368 reminded about your tasks every day.
1370 @item
1371 Bind useful functions to shortcut keys and get used to creating tasks
1372 and notes from anywhere.
1374 @item
1375 Think about how you plan your day and look for ways to improve it. Ask
1376 the mailing list (@pxref{Getting Help}) for tips.
1378 @item
1379 Browse the rest of this manual, the source code, and other resources on
1380 the Net for tidbits you can use.
1382 @item Have fun!
1383 @end itemize
1385 @item @emph{Useful functions outside planner buffers:}
1387 @itemize
1388 @item @code{planner-create-task-from-buffer}
1389 @item @code{remember}
1390 @item @code{planner-goto-today}
1391 @item @code{planner-goto}
1392 @item @code{plan}
1393 @end itemize
1395 @item @emph{Useful functions inside planner buffers:}
1397 @itemize
1398 @item @kbd{C-c C-t} (@code{planner-create-task-from-buffer})
1399 @item @kbd{C-c C-x} (@code{planner-task-done})
1400 @item @kbd{M-x planner-edit-task-description}
1402 @item
1403 @kbd{C-c C-c} (@code{planner-copy-or-move-task}), @kbd{M-x
1404 planner-copy-or-move-region}
1406 @item @kbd{M-x planner-replan-task}
1407 @item @kbd{M-x planner-delete-task}
1409 @item
1410 @key{M-p} (@code{planner-raise-task}) and @key{M-n}
1411 (@code{planner-lower-task})
1413 @item @key{C-M-p} (@code{planner-raise-task-priority}) and
1414       @key{C-M-n} (@code{planner-lower-task-priority}),
1415 @item @code{planner-replan-note}
1416 @item @code{planner-update-note}
1417 @end itemize
1419 @end itemize
1421 That's all you need to know in order to use Planner as a basic TODO and
1422 notes manager, but there's a whole lot more. Read through this manual
1423 and our mailing list archives (@pxref{Getting Help}) for lots of
1424 wonderful ideas about planning in Emacs!
1426 @node More about Planner, Managing Your Information, Getting Started, Top
1427 @comment  node-name,  next,  previous,  up
1428 @chapter More about Planner
1430 @menu
1431 * Navigation::                  
1432 * More about Tasks::            
1433 * More about Notes::            
1434 * Making Files Pretty::         
1435 * Annotations::                 
1436 * Interactive Lisp::            planner-lisp.el
1437 * Publishing::                  planner-publish.el
1438 * Experimental Functions::      planner-experimental.el
1439 @end menu
1441 @node Navigation, More about Tasks, More about Planner, More about Planner
1442 @comment  node-name,  next,  previous,  up
1443 @section Starting with Day Pages
1445 @command{planner-goto-today} opens today's page.  Day pages are named
1446 @samp{YYYY.MM.DD} and contain your notes for the day.
1448 You should see a file that looks like this:
1450 @example
1451 * Tasks
1454 * Schedule
1456 * Notes
1457 @end example
1459 You can type anything you want into this file.  You can add or delete
1460 sections.  When you save, Emacs stores your information in
1461 @code{planner-directory}.
1463 Use the following commands to navigate through day pages:
1465 @defun plan
1466 Start planning the day.  If @code{planner-carry-tasks-forward} is
1467 non-nil, copy the most recent unfinished tasks to today's page, else
1468 open the most recent page.
1469 @end defun
1471 @defun planner-goto (@kbd{C-c C-j C-d})
1472 Prompt for a date using a calendar pop-up and display the
1473 corresponding day page.  You can specify dates partially.  The current
1474 year and month are used if omitted from the input.  For example, if
1475 today is 2004.05.05, then
1477 @itemize
1478 @item @kbd{+1} is one day from now, or @samp{2004.05.06}
1479 @item @kbd{-1} is one day before now, or @samp{2004.05.04}
1480 @item @kbd{12} is equivalent to @samp{2004.05.12}
1481 @item @kbd{8.12} is equivalent to @samp{2004.08.12}
1482 @item @kbd{2005.08.12} is a full date specification
1483 @end itemize
1485 In the calendar buffer, you can also left-click or press @key{RET} on
1486 a date to select it.
1487 @end defun
1489 @defun planner-goto-today (@kbd{C-c C-j C-j})
1490 Display today's page. Create the page if it does not yet exist.
1491 @end defun
1493 @defun planner-goto-tomorrow (@kbd{C-c C-j C-t})
1494 Goto the planner page days @var{after} the currently displayed date.
1495 If @var{days} is nil, go to the day immediately after the currently
1496 displayed date.  If the current buffer is not a daily planner page,
1497 calculate date based on today.
1498 @end defun
1500 @defun planner-goto-yesterday (@kbd{C-c C-j C-y})
1501 Goto the planner page @var{days} before the currently displayed date.
1502 If @var{days} is nil, go to the day immediately before the currently
1503 displayed date.  If the current buffer is not a daily planner page,
1504 calculate date based on today.
1505 @end defun
1507 @defun planner-goto-most-recent
1508 Go to the most recent day with planning info.
1509 @end defun
1511 @defun planner-goto-previous-daily-page
1512 Goto the last plan page before the current date.
1513 The current date is taken from the day page in the current
1514 buffer, or today if the current buffer is not a planner page.
1515 Do not create pages if they do not yet exist.
1516 @end defun
1518 @defun planner-goto-next-daily-page
1519 Goto the first plan page after the current date.
1520 The current date is taken from the day page in the current
1521 buffer, or today if the current buffer is not a planner page.
1522 Do not create pages if they do not yet exist.
1523 @end defun
1525 @defun planner-goto-plan-page page
1526 Opens @var{page} in the the @code{planner-project} Wiki.  Use
1527 @code{planner-goto} if you want fancy calendar completion.
1528 @end defun
1530 @defun planner-show date
1531 Show the plan page for @var{date} in another window, but don't select
1532 it.  If no page for @var{date} exists, return nil.
1533 @end defun
1536 @node More about Tasks, More about Notes, Navigation, More about Planner
1537 @comment  node-name,  next,  previous,  up
1538 @section More about Tasks
1539 @cindex tasks, more about
1541 This section is divided into three parts. In the first part, you can
1542 read about all the options, strategies and commands to help you
1543 efficiently add new tasks to your planner. In the second part, we'll go
1544 over all of the aspects of Planner that relate to organizing, editing,
1545 rescheduling and viewing the tasks you've already created. Finally,
1546 we'll cover some ways to step back and look at various reports and
1547 overviews that can be generated from your planner pages.
1549 You may also be interested in tracking time spent on tasks with
1550 @ref{Timeclock} and estimating project completion time with
1551 @ref{Schedule} (also see @pxref{schedule.el}).
1553 @menu
1554 * Creating New Tasks::          
1555 * Organizing Your Tasks::       
1556 * Task Reports and Overviews::  
1557 @end menu
1559 @node Creating New Tasks, Organizing Your Tasks, More about Tasks, More about Tasks
1560 @comment  node-name,  next,  previous,  up
1561 @subsection Creating New Tasks
1562 @cindex tasks, creating
1564 Planner makes it very easy to quickly add something to your list of
1565 tasks. Once you get used to the basics of
1566 @command{planner-create-task-from-buffer}, you might want to take a
1567 closer look at some things in Planner that can help you create new tasks
1568 in a way that fits with your system.
1570 @menu
1571 * Creating a Task::             
1572 * Task Priorities::             
1573 * Task IDs::                    planner-id.el
1574 * Cyclic Tasks::                planner-cyclic.el
1575 * Task Detail::                 
1576 * Deadlines::                   planner-deadline.el
1577 @end menu
1579 @node Creating a Task, Task Priorities, Creating New Tasks, Creating New Tasks
1580 @comment  node-name,  next,  previous,  up
1581 @subsubsection Creating a Task
1582 @cindex tasks, creating
1584 You can create a task from any buffer in Emacs by invoking
1585 @command{M-x planner-create-task-from-buffer}.
1587 This command does more than just add an item to your list of tasks. It
1588 also connects that item to some useful context information.
1590 If you create a task while viewing any buffer other than a Planner
1591 day page, Planner will associate the task with a hyperlink to that
1592 buffer. Try it now by creating a task from this Info buffer.
1594 @enumerate
1595 @item @kbd{M-x planner-create-task-from-buffer}
1596 @item
1597 When prompted for the task name, enter @kbd{Learn how to change a task's
1598 status} and press @key{RET}.
1600 @item
1601 When prompted for the date, press @key{RET} to schedule the task for
1602 today.
1604 @item
1605 When prompted for the project page, press @key{RET} to accept the
1606 default page of @samp{TaskPool}. This is a page for tasks not connected
1607 to a larger plan.
1609 @end enumerate
1611 Planner prompts you for two pieces of information when you ask it
1612 to create a task. First, it asks you when you would like to have the
1613 task show up in your planner. If you would like it to be scheduled for
1614 today, you can just hit @key{RET}. If you would like it to be
1615 scheduled for some day during the current month, you can just enter
1616 the date, without the month, like @samp{16}. If you would like it to
1617 be scheduled for some day in a future month of the current year, you
1618 can enter just the month and date, like @samp{06.16}. If you would
1619 like to schedule something for next year, then enter the full date,
1620 like @samp{06.16.2005}. If you do not want this task to appear on a
1621 day page at all, you can enter @samp{nil}.
1623 The second piece of information Planner asks for is the name of
1624 the project to associate the task with. In the above example, you
1625 associated the task with the project ``TaskPool'', which means that
1626 you did not want to associate the task with a particular project or
1627 goal in your life. Another way to do this is to answer the project
1628 prompt by entering @samp{nil}. But instead, you might enter
1629 @samp{LearnPlanner} as the project. This creates a new page called
1630 ``LearnPlanner'' in your planner directory and places an entry for the
1631 task on that page.
1633 The task then exists in two places: once on your day page, to show how
1634 it fits into your daily work; and once on a project page, to show how
1635 it fits into your larger projects and goals. In the future you might
1636 add related tasks like, ``Memorize Planner keybindings''. These
1637 tasks might be scattered over weeks or months worth of day pages, but
1638 as long as you enter the same project name for each, you will have a
1639 way to look at them all together on a single project page.
1641 Planner also creates hyperlinks to enable you to easily move back
1642 and forth between the day page system and the project page
1643 system. Each task on a day page will have a hyperlink to its project
1644 page. Each task on a project page will have a hyperlink to its day
1645 page.
1647 After using Planner for a while, you may find yourself with quite
1648 a few project pages. Keep in mind that completion is enabled at the
1649 project prompt when you create a task, so hitting @kbd{SPC} or
1650 @kbd{TAB} at the prompt will show you a list of your current project
1651 pages.
1653 Once the task is created, you are returned to the buffer you were
1654 working in again, Planner gets out of your way, and you can go on
1655 about your business. Later on, when you decide to actually work on
1656 that ``Memorize Planner keybindings'' task, you will be able to
1657 follow the hyperlink from that task on your day or project page
1658 directly to the relevant node in the Planner info file!
1660 By default, @command{M-x planner-create-task-from-buffer} creates
1661 medium-priority tasks, marked with the letter @samp{B}.  But you can
1662 specify a particular priority or change the default (@pxref{Task
1663 Priorities}).
1665 You don't have to use @command{planner-create-task-from-buffer} to
1666 create tasks. You can also create new tasks manually by typing them
1667 directly on your day or project page in the format Planner expects. You
1668 can even still create hyperlinks by using Muse formatting as you
1669 manually type the new task. Keep in mind also that tasks do not have to
1670 be linked to any other page.
1672 For convenience, @command{planner-create-task-from-buffer} is bound to
1673 @kbd{C-c C-t} in Planner buffers.  You can bind
1674 @command{planner-create-task-buffer} to a shortcut key.  See the
1675 manual for your Emacs distribution to find out more about keybinding.
1677 @defun planner-create-task-from-buffer title date plan-page
1678 Create a new task named @var{title} on @var{date} based on the current
1679 buffer.
1681 With a prefix, associate the task with the current planner page.  If
1682 you create a task on a date page, you will be prompted for a plan
1683 page.  If you create a task on a plan page, you will be prompted for a
1684 day page.  If nil is specified, the task is created only on the
1685 current page.
1687 See @code{planner-create-task} for more information.
1689 The new task is created at the top or bottom of the first block of
1690 tasks on the scheduled day page (if any), depending on the value of
1691 @code{planner-add-task-at-end-flag}.
1692 @end defun
1694 @defun planner-create-task title date annotation plan-page
1695 Create a new task named @var{title} based on the current Wiki page.
1696 If @var{date} is non-nil, makes a daily entry on @var{date}, else
1697 makes an entry in today's planner page. It's assumed that the current
1698 Wiki page is the page you're using to plan an activity. Any time
1699 accrued to this task will be applied to that page's name in the
1700 timelog file, assuming you use timeclock (@pxref{Time Intervals, , ,
1701 Emacs, GNU Emacs Manual}). If @var{annotation} is non-nil, it will be
1702 used for the page annotation. If @var{plan-page} is non-nil, the task
1703 is associated with the given page.
1705 With a prefix, associate the task with the current planner page.  If
1706 you create a task on a date page, you will be prompted for a plan
1707 page.  If you create a task on a plan page, you will be prompted for a
1708 day page.  If nil is specified, the task is created only on the
1709 current page.
1711 You probably want to call @code{planner-create-task-from-buffer}
1712 instead.
1714 The new task is created at the top or bottom of the first block of
1715 tasks on the scheduled day page (if any), depending on the value of
1716 @code{planner-add-task-at-end-flag}.
1717 @end defun
1719 @node Task Priorities, Task IDs, Creating a Task, Creating New Tasks
1720 @comment  node-name,  next,  previous,  up
1721 @subsubsection Task Priorities
1723 You can set the priority of a task when you create it, rather than
1724 waiting to adjust it after the fact. In order to do this, call the
1725 function corresponding to the priority you want. You probably want to
1726 bind these functions to some keys if you intend to use them much.
1728 @itemize
1729 @item @code{planner-create-high-priority-task-from-buffer}
1730 creates a task with priority @samp{A}.
1732 @item @code{planner-create-medium-priority-task-from-buffer}
1733 creates a task with priority @samp{B}.
1735 @item @code{planner-create-low-priority-task-from-buffer}
1736 creates a task with priority @samp{C}.
1737 @end itemize
1739 Or, you can change the default priority of
1740 @command{planner-create-task-from-buffer} by customizing
1741 @var{planner-default-task-priority}.
1743 You can actually use just one general priority, but using more than
1744 one color-codes your tasks and gives you a better overview of your
1745 day.
1748 @node Task IDs, Cyclic Tasks, Task Priorities, Creating New Tasks
1749 @comment  node-name,  next,  previous,  up
1750 @subsubsection Task IDs
1751 @cindex @file{planner-id.el}, using
1752 @cindex tasks, IDs
1754 After loading @file{planner.el}, make sure that @file{planner-id.el} is
1755 in your load path and add this to your @file{.emacs} (or @file{_emacs}):
1757 @example
1758 (require 'planner-id)
1759 @end example
1761 This module modifies the behavior of @file{planner.el}, adding global
1762 task IDs so that tasks can be edited and updated. Planner IDs are of
1763 the form @samp{@{@{Identifier:Number@}@}}.
1765 @subheading Options
1767 @defopt planner-id-add-task-id-flag
1768 Non-nil means automatically add global task IDs to newly-created
1769 tasks. If nil, use @command{planner-id-add-task-id} to add IDs to
1770 existing tasks, or @command{planner-id-add-task-id-to-all} to add to
1771 all tasks on the current page.
1772 @end defopt
1774 @defopt planner-id-update-automatically
1775 Non-nil means automatically update linked tasks whenever a page is
1776 saved. If nil, use @command{planner-update-task} to update the linked
1777 task. By default, linked tasks are automatically updated.
1778 @end defopt
1780 @defopt planner-id-tracking-file
1781 File that contains ID tracking data. This file is automatically
1782 overwritten.
1783 @end defopt
1785 @subheading Functions
1787 The following interactive functions are defined in @file{planner-id.el}:
1789 @defun planner-id-jump-to-linked-task &optional info
1790 Display the linked task page. If @var{info} is specified, follow that
1791 task instead.
1792 @end defun
1794 @defun planner-id-add-task
1795 Add a task ID for the current task if it does not have one
1796 yet. Update the linked task page, if any.
1797 @end defun
1799 @defun planner-id-update-tasks-on-page &optional force
1800 Update all tasks on this page. Completed or cancelled tasks are not
1801 updated. This can be added to @code{write-file-functions}. If
1802 @var{force} is non-nil, completed and cancelled tasks are also
1803 updated.
1804 @end defun
1806 @defun planner-id-add-task-id-to-all
1807 Add a task ID for all the tasks on the page. Update the linked page,
1808 if any.
1809 @end defun
1811 @defun planner-id-search-id id
1812 Search for all occurrences of @var{id}.
1813 @end defun
1815 @defun planner-id-follow-id-at-point
1816 Display a list of all pages containing the ID at point.
1817 @end defun
1819 @defun planner-id-follow-id-at-mouse event
1820 Display a list of all pages containing the ID at mouse. @var{event} is
1821 the mouse event.
1822 @end defun
1824 @node Cyclic Tasks, Task Detail, Task IDs, Creating New Tasks
1825 @comment  node-name,  next,  previous,  up
1826 @subsubsection Cyclic Tasks
1827 @cindex @file{planner-cyclic.el}, using
1828 @cindex tasks, cyclic
1829 @cindex cyclic tasks
1830 @cindex recurring tasks
1832 If there are tasks that you have to do regularly, you can have Planner
1833 schedule those tasks automatically.
1835 Make sure that @file{planner-cyclic.el} is in your load path and add
1836 this to your @file{.emacs} (or @file{_emacs}):
1838 @example
1839 (require 'planner-cyclic)
1840 @end example
1842 Create a diary file named @file{~/.diary.cyclic-tasks}
1843 (or the value of @code{planner-cyclic-diary-file}). Here is an example:
1845 @example
1846 Tuesday #B0 _ Study Japanese
1847 Friday #B0 _ Study Japanese (JapaneseStudies)
1848 @end example
1850 The first will be a plain task, the second will be linked.  The first
1851 line will automatically create its task every Tuesday, while the
1852 second will create it every Friday.
1854 You can schedule tasks in a variety of ways. This module uses the same
1855 syntax for specifying when tasks will be scheduled as the Emacs diary
1856 uses for appointments and events. See @ref{Date Formats, the GNU Emacs
1857 Manual, Date Formats,emacs, the GNU Emacs Manual}, and @ref{Sexp Diary
1858 Entries, the GNU Emacs Lisp Reference Manual, Sexp Diary
1859 Entries,elisp, the GNU Emacs Lisp Reference Manual}, for a full
1860 description of the possibilities.
1862 By default, planner-cyclic creates multiple tasks if you let tasks build
1863 up (that is, the next Tuesday rolls around and you @emph{still} haven't
1864 marked the task as done.) To turn off this behavior:
1866 @example
1867 (setq planner-cyclic-diary-nag nil)
1868 @end example
1870 @subheading Functions
1872 @file{planner-cyclic-diary} includes the following interactive
1873 functions:
1875 @defun planner-cyclic-create-tasks-maybe
1876 Maybe create cyclic tasks. This will only create tasks for future
1877 dates or today.
1878 @end defun
1880 @node Task Detail, Deadlines, Cyclic Tasks, Creating New Tasks
1881 @comment  node-name,  next,  previous,  up
1882 @subsubsection Task Detail
1883 @cindex tasks
1885 You may find your planner pages getting very full, so that you want to
1886 have one broad task entry be linked to a more specific list of
1887 sub-tasks. Or, maybe you want to have a number of notes linked to a
1888 particular task.
1889 @cindex tasks, sub-
1890 @cindex tasks, meta-
1891 @cindex meta-tasks
1892 @cindex sub-tasks
1894 This can be done with targets.  You can have a task that is really a
1895 meta-task:
1897 @example
1898 #A1  _ Do things in RevelleLog#13 @{@{Tasks:101@}@} (RevelleLog)
1899 @end example
1901 @samp{RevelleLog#13} could then be a list of sub-tasks in the form of
1902 a note, or any kind of note.
1904 Or, instead of pointing to a particular note on @samp{RevelleLog}, you
1905 could have the whole page be tasks that you enter in manually, without
1906 linking them to another page. You can just type them in like this:
1908 @example
1909 #A1  _ First specific thing to do
1910 @end example
1912 This way, the tasks will only appear on this specific project page,
1913 and not on any daily page, so you only see them when you want to look
1914 up all of the specific tasks associated with @samp{#A1  _ Do things in
1915 RevelleLog @{@{Tasks:101@}@} (RevelleLog)}.
1917 As you can see, the ability to manually enter tasks is one of
1918 Planner's nicest features. It allows you to create tasks that are
1919 not assigned to a specific date (by manually entering them on a
1920 project page with no date) or to a specific project (by manually
1921 entering them on a day page with no project). Yet as long as you enter
1922 them using the syntax it understands, Planner will continue to
1923 recognize them as tasks.
1925 Another way to have a task not be connected to a particular date is to
1926 do @kbd{C-c C-c} (@code{planner-copy-or-move-task}) and specify
1927 @samp{nil} when asked for the date.
1929 If you would like to see a list of all of your unfinished tasks, do
1930 @kbd{M-x planner-list-unfinished-tasks}. This function only checks
1931 day plan pages, not project pages.
1933 @node Deadlines,  , Task Detail, Creating New Tasks
1934 @comment  node-name,  next,  previous,  up
1935 @subsubsection Deadlines
1936 @cindex tasks, deadlines for
1937 @cindex deadlines, task
1938 @cindex @file{planner-deadline.el}, using
1940 You can use @file{planner-deadline.el} to automatically recalculate
1941 days to a deadline by adding @code{(require 'planner-deadline)} to
1942 your @file{~/.emacs}. With the default setup, make your tasks of the
1943 form
1945 @example
1946 #A0 _ Some task @{@{Deadline: 2004.09.12@}@}
1947 @end example
1949 (Note: There must be at least one space after the colon.)
1951 After you run @code{planner-deadline-update} to update task descriptions,
1952 the task will be of the form
1954 @example
1955 #A0 _ Some task @{@{Deadline: 2004.09.12 - 2 days@}@}
1956 @end example
1958 @subheading Options
1960 @defopt planner-deadline-regexp
1961 Regular expression for deadline data.
1962 The special deadline string should be regexp group 1. The
1963 date (YYYY.MM.DD) should be regexp group 2.
1964 @end defopt
1966 @subheading Functions
1968 @defun planner-deadline-update
1969 Replace the text for all tasks with deadlines. Deadlines are of the
1970 form @samp{@{@{Deadline: YYYY.MM.DD@}@}} by default.
1971 @end defun
1973 @defun planner-deadline-change &optional date
1974 Change the deadline of current task to @var{date}. If @var{date} is nil,
1975 remove deadline.
1976 @end defun
1978 @node Organizing Your Tasks, Task Reports and Overviews, Creating New Tasks, More about Tasks
1979 @comment  node-name,  next,  previous,  up
1980 @subsection Organizing Your Tasks
1981 @cindex tasks, organizing
1982 @cindex tasks, old
1984 Okay, now that you've gotten the hang of creating tasks, you're probably
1985 facing a really long list of things to do. How can you organize them so
1986 that they don't overwhelm you? Planner gives you a number of strategies
1987 for dealing with large numbers of tasks.
1989 @enumerate
1990 @item Arrange your tasks in the rough order you're going to do them.
1991 @item Use #A, #B and #C task priorities to differentiate between
1992       high-priority, normal and low-priority tasks.
1993 @item Schedule your tasks onto different days.
1994 @item Group your tasks into plan pages.
1995 @item Don't schedule all your tasks.
1996 @end enumerate
1998 @enumerate
2000 @item @emph{Task order}
2002 To remind yourself to do tasks in a certain order, simply edit the
2003 lines so that they're in the order you want. You can use normal
2004 editing commands like kill, yank and transpose-line to reorder the
2005 tasks, or use @key{M-p} (@code{planner-raise-task}) and @key{M-n}
2006 (@code{planner-lower-task}) to rearrange the tasks.
2008 @item @emph{Task priorities}
2010 By default, tasks are created with medium priority (@samp{#B}). You
2011 can make a task high-priority (@samp{#A}) or low-priority (@samp{#C})
2012 by manually editing the task and calling M-x planner-update-task to
2013 update the linked page. Alternatively, you can use @key{C-M-p}
2014 (@code{planner-raise-task-priority}) and @key{C-M-n}
2015 (@code{planner-lower-task-priority}) to modify the task and update the
2016 linked page.
2018 You can edit the priority of a task using @kbd{M-x
2019 planner-edit-task-priority}, or manually edit it and call @kbd{M-x
2020 planner-update-task} to update tasks on the linked page.
2022 @item @emph{Schedule your tasks on different days}
2024 You don't have to do everything today. Is this a task you would rather
2025 do tomorrow? Schedule it for then instead. You can specify @samp{+n}
2026 or @samp{-n} whenever you are asked for a date, where @var{n} is the
2027 number of days before or after the current file's date or today.
2028 Don't over-procrastinate things, though!
2030 @item @emph{Plan pages}
2032 Plan pages let you group related tasks and notes together for easy
2033 reference. For example, you could have a plan page for each major
2034 project or goal in your life, like @samp{GoodHealth} or
2035 @samp{FurtherStudies}.
2037 Although plan pages start by grouping everything under a @samp{*
2038 Tasks} header, you can organize your plan pages in different ways. For
2039 example, you can separate groups of tasks with blank lines, and
2040 Planner will sort tasks within each group.
2042 @item @emph{Tasks without dates}
2044 Plan pages also allow you to have undated tasks or tasks with no
2045 particular deadlines. This keeps your daily task list small and
2046 manageable while making it easier for you to find things to do if you
2047 have free time. Make sure you check your plan pages regularly so that
2048 you don't completely forget about them.
2050 For automated scheduling of the next task on a plan page after you
2051 complete a task, see the section in
2052 @uref{http://sacha.free.net.ph/notebook/emacs/planner-config.el} named
2053 ``Schedule next undated task from same project''.
2055 @end enumerate
2058 @menu
2059 * Multiple Projects::           
2060 * Viewing Tasks::               
2061 * Modifying Tasks::             
2062 * Carrying Over Unfinished Tasks::  
2063 * Task Numbering::              
2064 * Task Ranks::                  planner-rank.el
2065 * Grouping Tasks::              planner-trunk.el
2066 @end menu
2068 @node Multiple Projects, Viewing Tasks, Organizing Your Tasks, Organizing Your Tasks
2069 @comment  node-name,  next,  previous,  up
2070 @subsubsection Associating Tasks with Multiple Projects
2071 @cindex multiple projects
2072 @cindex planner-multi.el, using
2074 You can use @file{planner-multi.el} to associate a task with more than
2075 one project. That way, you can easily keep GTD-style context lists as
2076 well as project-related lists.
2078 To use multiple projects, add the following to your @samp{~/.emacs}:
2080 @example
2081 (require 'planner-multi)
2082 @end example
2084 Under GNU Emacs, you can specify multiple projects by separating them
2085 with a single space. For example, you can specify @kbd{planner doc}
2086 when creating a task to associate the task with those two projects.
2088 Under XEmacs, you can specify multiple projects by typing @kbd{RET}
2089 after each entry and terminating the list with another @kbd{RET}. For
2090 example, to specify @kbd{planner} and @kbd{doc}, you would type
2091 @kbd{planner RET doc RET RET} at the prompt.
2093 If you want to see an overview of all of your tasks as well as
2094 project- or context-specific lists, you can set
2095 @code{planner-multi-copy-tasks-to-page} to your overview page(s). For
2096 example, set it to @samp{TaskPool} to be able to see an overview of
2097 all of your unfinished tasks. You can also set this to multiple pages
2098 such as @samp{[[TasksByProject][p]] [[TasksByContext][c]]} and use
2099 @file{planner-trunk.el} to sort and organize tasks for easy reference.
2100 (@pxref{Grouping Tasks})
2102 @subheading Options
2104 @defopt planner-multi-copy-tasks-to-page
2105 Automatically copy newly-created tasks to the specified page.
2106 @end defopt
2108 By default, tasks are removed from
2109 @code{planner-multi-copy-tasks-to-page} when you call
2110 @code{planner-task-done} or @code{planner-task-cancelled}. If you
2111 prefer to keep a copy of the task, remove
2112 @code{planner-multi-remove-task-from-pool} from
2113 @code{planner-mark-task-hook}.
2115 If you want to use a different separator instead of spaces, customize
2116 the @code{planner-multi-separator} variable.
2118 @defopt planner-multi-separator
2119 String that separates multiple page references.
2121 For best results, this should be something recognized by
2122 @code{muse-link-at-point} so that links are highlighted
2123 separately.
2124 @end defopt
2126 @node Viewing Tasks, Modifying Tasks, Multiple Projects, Organizing Your Tasks
2127 @comment  node-name,  next,  previous,  up
2128 @subsubsection Viewing tasks
2129 @cindex tasks, viewing
2131 Review the tasks scheduled for today by typing @kbd{M-x
2132 planner-goto-today}.  If you created the task from the previous
2133 section in this tutorial, you should see a line that looks like
2135 @example
2136 #A _ Learn how to change a task's status from Tasks (TaskPool)
2137 @end example
2139 If you have @code{planner-use-task-numbers} set to non-nil, you will see
2140 something like the following instead.
2142 @example
2143 #A0 _ Learn how to change a task's status from Tasks (TaskPool)
2144 @end example
2146 From left to right, these are what the symbols mean:
2148 @itemize
2149 @item @samp{A} - Priority.  A (high)
2150 @item
2151 @samp{0} - Priority number.  It is calculated whenever you save the file
2152 or call @command{planner-renumber-tasks}, provided that
2153 @code{planner-use-task-numbers} is non-nil.  Tasks are numbered in
2154 ascending order according to priorities.
2155 @item @samp{_} - Status.  _ (unfinished)
2156 @end itemize
2158 If you click on @samp{Tasks} or press @key{RET} while your cursor is
2159 in the link, Emacs will display the previous info page.
2161 If you select @samp{TaskPool}, Emacs will display the @samp{TaskPool}
2162 plan page.  Plan pages organize your tasks and notes about a project
2163 in one file.
2165 @subheading Functions
2167 You can use @command{planner-seek-next-unfinished-task} to move to the
2168 next unfinished task on the current page.
2170 @defun planner-list-tasks-with-status status &optional pages
2171 Display all tasks that match the STATUS regular expression on all day
2172 pages.  The PAGES argument limits the pages to be checked in this
2173 manner:
2175 @itemize
2176 @item @code{t}: check all pages
2177 @item regexp: search all pages whose filenames match the regexp
2178 @item list of page names: limit to those pages
2179 @item alist of page/filenames: limit to those pages
2180 @end itemize
2182 Called interactively, this function will search day pages by
2183 default. You can specify the start and end dates or leave them as
2184 nil to search all days. Calling this function with an interactive
2185 prefix will prompt for a regular expression to limit pages.
2186 Specify @samp{.} or leave this blank to include all pages.
2188 This function could take a long time.
2189 @end defun
2191 @defun planner-list-unfinished-tasks &optional pages
2192 Display all unfinished tasks. @var{pages} follows
2193 planner-list-tasks-with-status.
2194 @end defun
2196 @defun planner-jump-to-linked-task task-info
2197 Display the task page linked to by the current task or
2198 @var{task-info}.
2199 @end defun
2201 @node Modifying Tasks, Carrying Over Unfinished Tasks, Viewing Tasks, Organizing Your Tasks
2202 @comment  node-name,  next,  previous,  up
2203 @subsubsection Modifying Tasks
2204 @cindex tasks, modifying
2205 @cindex tasks, editing
2207 To select a task, move your cursor to the line containing the task.
2209 Change a task's priority (@samp{A}, @samp{B} or @samp{C}) by editing
2210 the line. @samp{#A} tasks are important. @samp{#B} are medium
2211 priority. @samp{#C} are low priority. Whenever you save the file or
2212 call @kbd{M-x planner-fix-tasks}, tasks are sorted and numbered
2213 according to priority and status.
2215 Change a task's status by calling one of the following functions:
2217 @itemize
2218 @item planner-task-in-progress @samp{o} (@kbd{C-c C-z})
2219 @item planner-task-done @samp{X} (@kbd{C-c C-x})
2220 @item planner-task-cancelled @samp{C} (@kbd{C-c C-S-x})
2221 @item planner-task-delegated @samp{D}
2222 @item planner-task-pending @samp{P}
2223 @item planner-task-open @samp{_}
2224 @end itemize
2226 After changing the status using a function, look at the
2227 @samp{TaskPool} plan page.  The task is also updated on the linked
2228 page.  If you changed the task status manually by replacing the status
2229 with another character, you will need to call
2230 @command{planner-update-task} to update the linked page.
2232 To reschedule a task, call @command{planner-copy-or-move-task} (@kbd{C-c
2233 C-c}) and choose a new date.  You can mark a region and type @kbd{M-x
2234 planner-copy-or-move-region} to reschedule all the contained tasks to a
2235 different date.  Enter @samp{nil} for the date if you don't want the
2236 task or group of tasks to appear on any date page at all anymore. This
2237 is a good way to ``de-schedule'' a task for the time being, but still
2238 keep it linked to a plan page for possible future scheduling.
2240 To change the plan page associated with a task, call
2241 @command{planner-replan-task}.  Enter @samp{nil} for the plan page if
2242 you don't want the task to appear on any plan page anymore. If you
2243 precede the command with a prefix argument, the text of the original
2244 plan page will appear in the prompt for easy editing.
2246 Since the same task may exist on two or more pages, such as a date page
2247 and a plan page, it is dangerous to edit the description of the task by
2248 hand. You should not do it unless you want to make the exact same
2249 changes on all its linked pages.
2251 Instead of doing this by hand, you should use
2252 @command{planner-edit-task-description}. This will prompt you for the
2253 changes to the task description and then update all the other pages to
2254 which the task is linked.  Or, you can just use
2255 @command{planner-delete-task} to remove the task from both pages, and
2256 then create it again with the new desired description.
2258 To remind yourself to do tasks in a certain order, simply edit the
2259 lines so that they're in the order you want.
2260 @command{planner-raise-task} and @command{planner-lower-task} update
2261 the priorities on linked pages automatically. You can organize tasks
2262 into groups by putting a blank line between groups of tasks.
2263 Planner will maintain the groupings and only sort the tasks within
2264 that group.
2266 @subheading Functions
2268 @defun planner-replan-task page-name
2269 Change or assign the plan page for the current task.  @var{page-name}
2270 is the new plan page for the task. Use
2271 @code{planner-copy-or-move-task} if you want to change the date. With a
2272 prefix, provide the current link text for editing.
2273 @end defun
2275 @defun planner-raise-task-priority
2276 Change a low-priority task to a medium-priority task and a
2277 medium-priority task to a high-priority task (C to B to A).
2278 @end defun
2280 @defun planner-lower-task-priority
2281 Change a high-priority task to a medium-priority task and a
2282 medium-priority task to a low-priority task (A to B to C).
2283 @end defun
2285 @defun planner-raise-task arg
2286 Move a task up @var{arg} steps.  By default, @var{arg} is 1.
2287 @end defun
2289 @defun planner-lower-task  arg
2290 Move a task down @var{arg} steps.  By default, @var{arg} is 1.
2291 @end defun
2293 @defun planner-edit-task-description description
2294 Change the description of the current task, updating the linked page
2295 if any.
2296 @end defun
2298 @defun planner-delete-task
2299 Delete this task from the current page and the linked page.
2300 @end defun
2302 @defun planner-update-task
2303 Update the current task's priority and status on the linked page.
2304 Tasks are considered the same if they have the same description.
2305 This function allows you to force a task to be recreated if it
2306 disappeared from the associated page.
2307   
2308 Note that the text of the task must not change. If you want to be able
2309 to update the task description, see @code{planner-edit-task-description}
2310 or @file{planner-id.el}.
2311 @end defun
2313 See @command{planner-install-extra-task-keybindings} for additional
2314 task-related shortcuts.
2316 @node Carrying Over Unfinished Tasks, Task Numbering, Modifying Tasks, Organizing Your Tasks
2317 @comment  node-name,  next,  previous,  up
2318 @subsubsection Carrying Over Unfinished Tasks
2319 @cindex tasks, carrying over
2321 Sometimes you won't be able to cross off all the tasks on your list.
2322 Planner makes it easy for you to keep track of things you still have
2323 to do by automatically rescheduling unfinished tasks from the past few
2324 days. By default, the @command{plan} command searches for unfinished
2325 tasks from the last three days and reschedules them onto today. If you
2326 open Planner every day, this should cover weekends easily.
2328 It's a good idea to start Planner whenever you start Emacs. That way,
2329 Planner can help remind you about today's tasks, appointments, and other
2330 things. To automatically start Planner whenever you start up Emacs, add
2331 the following code to the end of your @file{~/.emacs}:
2333 @example
2334 (plan)
2335 @end example
2337 Now, every time you start Emacs (which should be more or less once a
2338 day), you'll see today's page. If you don't finish all the tasks today,
2339 you'll see them again tomorrow.
2341 It's a good idea to start Planner every time you start Emacs so that
2342 you get reminded about your task list. If you prefer to start Planner
2343 manually, remember to call @kbd{M-x plan} every so often to make sure
2344 that you don't forget any unfinished tasks. Safe in the knowledge that
2345 Planner tasks won't slip through the cracks (unlike little slips of
2346 paper that will invariably get mislaid), you can then get on with the
2347 rest of your life.
2349 If your increased productivity with Planner leads to a well-deserved
2350 two-week vacation, then you'll need to tell Planner to search more days
2351 for unfinished tasks. By using @kbd{M-x plan}, you can automatically
2352 bring forward tasks over a given number of days or even scan all the
2353 days since time immemorial. @kbd{C-u 15 M-x plan} reschedules all
2354 unfinished tasks from the last 15 days. @kbd{C-u -1 M-x plan} checks all
2355 of your past day pages for unfinished tasks.
2357 Like everything else in Planner, you can adapt @kbd{M-x plan} to your
2358 particular way of life. For example, if you find yourself starting up
2359 Emacs and Planner every day--including weekends--because it's just so
2360 much fun, you can set the @code{planner-carry-tasks-forward} to 1.
2361 This can make your Emacs startup marginally faster. On the other hand,
2362 if you normally start Emacs once a week, you can set it to 7 or 8. If
2363 you're worried about tasks dropping off your radar, you can set it to
2364 0. You can set the value of @var{planner-carry-tasks-forward} either
2365 with @key{M-x customize-variable RET planner-carry-tasks-forward RET},
2366 or by putting @code{(setq planner-carry-tasks-forward 3)} (replacing
2367 @code{3} with the value appropriate for what you want) in your
2368 @file{~/.emacs} file.
2370 On the other hand, you might prefer to reschedule tasks yourself. If
2371 you set @code{planner-carry-tasks-forward} to @code{nil}, then
2372 @command{M-x plan} and @code{(plan)} will bring you to the most recent
2373 page with unfinished tasks if there is no page for today. You can then
2374 use @command{planner-copy-or-move-task} and
2375 @command{planner-copy-or-move-region} to reschedule tasks. This is
2376 probably more hassle than it's worth, though, so let Planner take care
2377 of this for you.
2379 @subheading Options
2381 @defopt planner-carry-tasks-forward
2382 If non-nil, carry unfinished tasks forward automatically.
2383 If a positive integer, scan that number of days in the past.
2384 If 0, scan all days for unfinished tasks.
2385 If t, scan one day in the past (old behavior).
2386 If nil, do not carry unfinished tasks forward.
2387 @end defopt
2389 @subheading Functions
2391 @defun plan &optional force-days
2392 Start your planning for the day, carrying unfinished tasks forward.
2394 If @var{force-days} is a positive integer, search that many days in the
2395 past for unfinished tasks.
2396 If @var{force-days} is @code{0} or @code{t}, scan all days.
2397 If @var{force-days} is @code{nil}, use the value of
2398 @code{planner-carry-tasks-forward} instead, except t means scan only
2399 yesterday
2401 @end defun
2403 @defun planner-copy-or-move-task date force
2404 Reschedule the task for @var{date}. If @var{force} is non-nil, the
2405 task is moved regardless of status. It also works for creating tasks
2406 from a Note. Use @code{planner-replan-task} if you want to change the
2407 plan page in order to get better completion.
2408 @end defun
2410 @defun planner-copy-or-move-region beg end date muffle-errors
2411 Move all tasks from @var{beg} to @var{end} to @var{date}.
2412 @code{planner-copy-or-move-region} will copy or move all tasks from
2413 the line containing @var{beg} to the line just before @var{end}. If
2414 @var{muffle-errors} is non-nil, no errors will be reported.
2415 @end defun
2417 @node Task Numbering, Task Ranks, Carrying Over Unfinished Tasks, Organizing Your Tasks
2418 @comment  node-name,  next,  previous,  up
2419 @subsubsection Task Numbering
2421 By default, tasks are numbered according to their position on the
2422 page.  Task numbers allow you to refer to tasks using Muse links.
2423 For example, the @samp{#A1} task in @file{2004.08.16} can be referred to
2424 as @samp{2004.08.16#A1}.
2426 Note that task numbers change every time you re-sort and re-number tasks
2427 with @code{planner-fix-tasks}.  As a result, they are only reliable for
2428 references to past tasks.
2430 If you find yourself not using this functionality, you can turn off task
2431 numbers by using the following option.
2433 @subheading Options
2435 @defopt planner-use-task-numbers
2436 Non-nil means use task numbers when creating tasks.  This allows you
2437 to refer to past tasks if your tasks are numbered appropriately.
2438 If you set this to nil, you can save space in your plan files.
2439 @end defopt
2441 @node Task Ranks, Grouping Tasks, Task Numbering, Organizing Your Tasks
2442 @comment  node-name,  next,  previous,  up
2443 @subsubsection Task Ranks
2444 @cindex ranking tasks
2445 @cindex tasks, ranking
2446 @cindex @file{planner-rank.el}, using
2448 @file{planner-rank.el} models Franklin Covey's Urgency and Importance
2449 principle. When you think about a task, there are two aspects in
2450 consideration: Urgency and Importance. You may want to do the most
2451 urgent things first, like answering an email, or you may want to do
2452 the most important things first, like reading this manual. Or much
2453 better, balance Urgency and Importance and decide what to do.
2455 @file{planner-rank.el} can help you balance.
2457 Urgency and Importance are both measured by scores from 0-9. The
2458 higher the score, the more you want to do it first. 9 stands for ``I
2459 should have done this'' and 0 stands for ``I can forget this''.
2461 If you are using the planner @ref{Deadlines} feature, the Urgency
2462 score is automatically calculated from how many days are left to meet
2463 the deadline. By default, it will score 9 if the task is overdue and 0
2464 if the deadline is years away. Please refer to the docstring of
2465 @code{planner-rank-deadline-urgency-map-list} for detail.
2467 The task rank is calculated from Urgency and Importance scores. As
2468 different people balance urgency and importance differently, a number
2469 of @code{planner-rank-calculate-rank-*} functions are provided. The
2470 algorithms vary from a simple average to something like a weighted
2471 root mean square deviation.
2473 The aggressive versions of these functions
2474 (@code{planner-rank-calculate-rank-*-aggressive}) will make sure if
2475 one of Urgency and Importance is high, the resulting rank will be high
2476 as well. @code{planner-rank-calculate-rank-weighted-*} functions weigh
2477 the Urgency and Important scores depending on
2478 @code{planner-rank-importance-vs-urgency-factor}.
2480 Call @code{planner-rank-test-algorithm} on each of the functions and
2481 check the result tables to see which one you like most, and set it to
2482 @code{planner-rank-rank-calculate-function}. Alternatively, accept the
2483 defaults and tweak them when you get a better feel for ranking.
2485 Once the Rank is calculated, the @ref{Task Priorities} will be
2486 automatically reset. If the Rank is greater than or equal to
2487 @code{planner-rank-priority-A-valve}, the task priority will be
2488 @samp{A}, if the Rank is between @code{planner-rank-priority-A-valve}
2489 and @code{planner-rank-priority-B-valve}, the priority will be @samp{B},
2490 else it will be @samp{C}.
2492 After setting the task importance and deadline, you can leave it as
2493 is. As the deadline approaches, the task priority will automatically
2494 be raised and the task re-colored to catch your eyes.
2496 If you are using @code{planner-sort-tasks} (see @pxref{Making Files
2497 Pretty}), you can set @code{planner-sort-tasks-key-function} to one of
2498 @code{planner-sort-tasks-by-rank},
2499 @code{planner-sort-tasks-by-importance}, and
2500 @code{planner-sort-tasks-by-urgency}.
2502 @subheading Options
2504 @defopt planner-rank-change-hook
2505 Functions to run after @code{planner-rank-change}.
2506 @end defopt
2508 @defopt planner-rank-priority-A-valve
2509 Tasks with rank greater than or equal to this value will be set to
2510 priority @samp{A}.
2511 @end defopt
2513 @defopt planner-rank-priority-B-valve
2514 Tasks with rank greater than or equal to this value and less than
2515 @code{planner-rank-priority-A-valve} will be set to priority
2516 @samp{B}. Tasks with rank less than this value will be set to priority
2517 @samp{C}.
2518 @end defopt
2520 @defopt planner-rank-deadline-urgency-map-list
2521 Defines how to calculate the Urgency score according to how many days
2522 are left to meet the deadline.
2523 @end defopt
2525 @defopt planner-rank-default-importance
2526 Default importance value for newly added rank.
2527 @end defopt
2529 @defopt planner-rank-default-urgency
2530 Default urgency value for newly added rank.
2531 @end defopt
2533 @defopt planner-rank-importance-vs-urgency-factor
2534 How much do you think importance is more ``important'' than urgency.
2535 This will be used in @code{planner-rank-calculate-rank-weighted-*}
2536 functions.
2537 @end defopt
2539 @defopt planner-rank-rank-calculate-function
2540 Define the function called to calculate rank.
2541 @end defopt
2543 @subheading Functions
2545 @defun planner-rank-change &optional importance urgency
2546 Set the Importance and Urgency of the current task.
2547 @end defun
2549 @defun planner-rank-update-current-task
2550 Recalculate rank for the current task.
2551 @end defun
2553 @defun planner-rank-update-all
2554 Recalculate rank for all tasks in the current page
2555 @end defun
2557 @defun planner-rank-update-all
2558 Recalculate rank for all tasks in the current page
2559 @end defun
2561 @node Grouping Tasks,  , Task Ranks, Organizing Your Tasks
2562 @comment  node-name,  next,  previous,  up
2563 @subsubsection Grouping Tasks with planner-trunk.el
2564 @cindex grouping tasks
2565 @cindex tasks, grouping
2566 @cindex @file{planner-trunk.el}, using
2568 @file{planner-trunk.el} helps you automatically group tasks according
2569 to a set of rules. It sorts and splits your tasks, adding a blank line
2570 between groups of tasks. For example, if today's page looks like this:
2572 @example
2573 * Tasks
2575 #B   _ Buy milk (GroceryShopping)
2576 #B   _ Learn how to use planner-trunk (PlannerMode)
2577 #B   _ Buy a notebook (Bookstore)
2578 #B   _ Buy cereal (GroceryShopping)
2579 #B   _ Set up my own planner-trunk rules (PlannerMode)
2580 #B   _ Customize my stylesheet (MuseMode)
2581 #B   _ Go for a health checkup (BetterHealth)
2582 @end example
2584 @noindent
2585 then you might want to group the tasks into: planner and muse,
2586 shopping list, and other items. If you set up the appropriate rules by
2587 customizing @code{planner-trunk-rule-list}, @file{planner-trunk.el}
2588 can automatically rewrite that section line this:
2590 @example
2591 * Tasks
2593 #B   _ Learn how to use planner-trunk (PlannerMode)
2594 #B   _ Set up my own planner-trunk rules (PlannerMode)
2595 #B   _ Customize my stylesheet (MuseMode)
2597 #B   _ Buy milk (GroceryShopping)
2598 #B   _ Buy a notebook (BookstoreShopping)
2599 #B   _ Buy cereal (GroceryShopping)
2601 #B   _ Go for a health checkup
2602 @end example
2604 @noindent
2605 In this case, you would set @code{planner-trunk-rule-list}
2606 to @code{(("." nil ("PlannerMode\\|MuseMode" "Shopping")))}.
2608 You can load @file{planner-trunk} with @kbd{M-x load-library RET
2609 planner-trunk RET} or add @code{(require 'planner-trunk)}. If you're
2610 not yet comfortable with Emacs Lisp, you can use @kbd{M-x
2611 customize-variable RET planner-trunk-rule-list RET} to edit this rule
2612 using an easy-to-use interface.
2614 WARNING: Do not keep non-task information in the Tasks section.
2615 planner-trunk will delete @strong{all} non-task lines from the Tasks
2616 section of your plan page in the process of grouping the tasks.
2618 After you set up @code{planner-trunk-rule-list}, use @command{M-x
2619 planner-trunk-tasks} to try out your rules until you're satistfied.
2621 If you want to do this automatically, you can use @code{(add-hook
2622 'planner-mode-hook 'planner-trunk-tasks)} to trigger it automatically
2623 whenever you open a Planner page.
2625 @node Task Reports and Overviews,  , Organizing Your Tasks, More about Tasks
2626 @subsection Task Reports and Overviews
2627 @cindex task reports
2628 @cindex task overviews
2629 @cindex reports, task
2630 @cindex overviews, task
2631 @cindex reports, accomplishment
2632 @cindex tasks, overview of
2634 Planner provides a number of different ways to generate different
2635 presentations of your tasks.
2637 @menu
2638 * Accomplishments::             planner-accomplishments.el
2639 * Status Reports::              planner-report.el
2640 * Task Overviews::              planner-tasks-overview.el
2641 * <tasks> tag::             
2642 * planner-registry::            Keep track of annotations
2643 * planner-zoom::                View and navigate tasks by time period
2644 @end menu
2646 @node Accomplishments, Status Reports, Task Reports and Overviews, Task Reports and Overviews
2647 @comment  node-name,  next,  previous,  up
2648 @subsubsection Generating Daily Accomplishment Reports
2649 @cindex reports, accomplishment
2650 @cindex @file{planner-accomplishments.el}, using
2651 @cindex tasks, overview of
2652 @cindex task reports
2653 @cindex reports, task
2654 @cindex overviews, task
2655 @cindex task overviews
2657 You can use @file{planner-accomplishments.el} to get a summary of your
2658 task activity for a particular day. The report is grouped by status
2659 and plan (on day pages) or date (on plan pages). An example report
2660 follows:
2662 @example
2663 Link        | Unfinished | In progress | Delegated | Completed | Total
2664 nil         | 1          | 0           | 0         | 6         | 7
2665 TaskPool    | 1          | 1           | 0         | 3         | 5
2666 Planner     | 0          | 0           | 1         | 1         | 2
2667 SchoolWork  | 0          | 0           | 0         | 1         | 1
2668 Total       | 2          | 1           | 1         | 11        | 15
2669 @end example
2671 This lets you see how you balance your time between your projects.
2673 @itemize
2675 There are currently two ways to use @file{planner-accomplishments.el}.
2677 @item Displaying a temporary buffer
2679 You can call @code{planner-accomplishments-show} to display a buffer
2680 containing the current page's accomplishment report.
2682 @item Rewriting sections of your planner
2684 Choose this approach if you want accomplishment reports to be in
2685 their own section and you would like them to be readable in your
2686 plain text files even outside Emacs. Caveat: The accomplishment
2687 section should already exist in your template and will be rewritten
2688 when updated.
2690 To use, set @code{planner-accomplishments-section} to the name of the
2691 section to rewrite (default: @samp{Accomplishments}). If you want
2692 rewriting to be automatically performed, call
2693 @code{planner-accomplishments-insinuate}. The accomplishments will be
2694 rewritten whenever you save a planner page. If you want rewriting to
2695 be manual, call @code{planner-accomplishments-update}.
2697 @end itemize
2699 @subheading Options
2701 @defopt planner-accomplishments-section
2702 Header for the accomplishments section in a plan page.
2703 Used by @code{planner-accomplishments-update}.
2704 @end defopt
2706 @defopt planner-accomplishments-status-display
2707 Alist of status-label maps also defining the order of display.
2708 Used by @code{planner-accomplishments-format-table}.
2709 @end defopt
2711 @subheading Functions
2713 @defun planner-accomplishments-insinuate ()
2714 Automatically call @code{planner-accomplishments-update} when saving
2715 tasks in @code{planner-mode} buffers.
2716 @end defun
2718 @defun planner-accomplishments-update ()
2719 Rewrite @code{planner-accomplishments-section} with a summary of tasks
2720 on this page.
2721 @end defun
2723 @defun planner-accomplishments-show ()
2724 Display a buffer with the current page's accomplishment report.
2725 @end defun
2727 @node Status Reports, Task Overviews, Accomplishments, Task Reports and Overviews
2728 @comment  node-name,  next,  previous,  up
2729 @subsubsection Status Reports
2730 @cindex status reports
2731 @cindex reports, status
2732 @cindex @file{planner-report.el}, using
2734 @file{planner-report.el} creates a status report for a given timespan.
2735 The report itself is just another Planner page in your planner
2736 directory.  Once generated, it contains tasks and notes culled from
2737 active project pages.  Tasks are only shown if they are incomplete or
2738 were completed within the timespan.  Notes are shown if they were
2739 created during the timespan.  Tasks and notes are grouped together under
2740 a heading for their corresponding project.
2742 The idea is you have one of these status reports generated periodically
2743 (say, every couple of weeks).  Perhaps you use cron to run them
2744 automatically and then mail you a reminder that they've been done.  Then
2745 you can edit the page, adding verbiage where it is needed and removing
2746 irrelevant items.  This editing process is as easy as editing any other
2747 Planner page.  Finally, you can publish the page along with the rest of
2748 your planner using @kbd{M-x muse-project-publish}.
2750 If you use planner-authz.el, you can tell planner-report.el only to
2751 consult project pages that a given list of users
2752 (@var{planner-report-authz}) can access when generating the report.  For
2753 example, if you're preparing a status report for your boss, add yourself
2754 and him to @var{planner-report-authz}.  The resulting status report will
2755 only contain information the two of you are supposed to have access to,
2756 and the report itself will be similarly restricted.
2758 @subheading Getting started
2760 Add the following to your .emacs file:
2762 @example
2763 (require 'planner-report)
2764 @end example
2766 Then you can use the following command to generate a status report:
2768 @example
2769 M-x planner-report-generate
2770 @end example
2772 You will be prompted for a beginning and ending date, and then the
2773 status report will be generated.  You can then edit it to your liking
2774 and publish it just like you would the rest of your planner.
2776 @subheading Options
2778 @defopt planner-report-authz
2779 List of users a status report should be restricted to.
2780 When status reports are generated, only planner pages accessible
2781 by these users will be consulted, and the resulting status report
2782 will be similarly restricted.
2783 @end defopt
2785 @defopt planner-report-pretty-print-plan-pages
2786 If non-nil, pretty print plan pages.
2787 If nil, leave page names as-is.
2788 This requires that @file{muse-wiki.el} be loaded to work properly.
2789 @end defopt
2791 @defopt planner-report-remove-task-numbers
2792 Remove task numbers when generating status reports.
2793 @end defopt
2795 @defopt planner-report-replace-note-numbers
2796 If non-nil, a string with which to replace note numbers when
2797 generating status reports.
2798 @end defopt
2800 @defopt planner-report-unfinished-offset
2801 If non-nil, the offset in days from the current date of
2802 unfinished tasks to include in the status report.  If nil,
2803 include all unfinished tasks.
2804 @end defopt
2806 @subheading Functions
2808 @defun planner-report-generate begin end
2809 Generate a status report spanning a period from @var{begin} to @var{end}.
2810 @var{begin} and @var{end} are in the format YYYY.MM.DD.
2811 @end defun
2813 @node Task Overviews, <tasks> tag, Status Reports, Task Reports and Overviews
2814 @comment  node-name,  next,  previous,  up
2815 @subsubsection Seeing an Overview of Tasks
2816 @cindex tasks, overview of
2817 @cindex task reports
2818 @cindex reports, task
2819 @cindex overviews, task
2820 @cindex task overviews
2821 @cindex @file{planner-tasks-overview.el}, using
2823 You can see a list of tasks with @file{planner-tasks-overview.el}.
2824 Seeing how you've scheduled tasks over the next few days can help you
2825 decide when to schedule another task. Table entries will be of the form
2827 @var{date} | @var{link} | @var{priority} @var{status} | @var{task-description}
2829 @subheading Functions
2831 To display the tasks between a set of day pages, use
2833 @defun planner-tasks-overview start end
2834 Display an overview of your tasks from @var{start} to @var{end}. If
2835 @var{start} is nil, start from the very first day page. If @var{end}
2836 is nil, include the very last day page. You can use
2837 @code{planner-expand-name} shortcuts here, like @kbd{+1} or @kbd{-1}.
2838 Pressing @key{RET} at the prompt will use today.
2840 Once in a @code{planner-tasks-overview} buffer, you can use
2841 the keyboard shortcut @key{o} to change the overview period.
2842 @end defun
2844 You can sort the task display with the following functions:
2846 @defun planner-tasks-overview-sort-by-date
2847 Sort the tasks by date. Keyboard shortcut: @key{1}
2848 @end defun
2850 @defun planner-tasks-overview-sort-by-plan
2851 Sort the tasks by associated plan page. Keyboard shortcut: @key{2}
2852 @end defun
2854 @defun planner-tasks-overview-sort-by-priority
2855 Sort the tasks by priority. Keyboard shortcut: @key{3}
2856 @end defun
2858 @defun planner-tasks-overview-sort-by-status
2859 Sort the tasks by status. Keyboard shortcut: @key{4}
2860 @end defun
2862 You can jump to linked tasks with
2864 @defun planner-tasks-overview-jump other-window
2865 Display the current task. If a prefix argument is supplied, show the
2866 task in another window. Keyboard shortcut: @key{j}
2867 @end defun
2869 @defun planner-tasks-overview-jump-other-window
2870 Display the current task in another window. Keyboard shortcut: @kbd{C-u j}
2871 @end defun
2873 You can view a summary of the tasks in your plan pages with
2875 @defun planner-tasks-overview-show-summary &optional file-list
2876 Count unscheduled, scheduled, and completed tasks for FILE-LIST. If
2877 called with an interactive prefix, prompt for the plan page(s) to
2878 display. Load @file{planner-multi.el} to be able to specify multiple
2879 pages.
2880 @end defun
2882 @subheading Keys
2884 @key{TAB}, @kbd{SHIFT-TAB} and @key{RET} navigate links in the usual
2885 fashion.
2887 @node <tasks> tag, planner-registry, Task Overviews, Task Reports and Overviews
2888 @subsubsection <tasks> tag
2889 @cindex <tasks> tag
2890 @cindex task reports
2891 @cindex reports, task
2892 @cindex overviews, task
2893 @cindex task overviews
2894 @cindex tasks, overview of
2896 @samp{<tasks>} is replaced by a report of tasks over all day pages in
2897 published pages (@pxref{Publishing}).
2899 @example
2900 All incomplete tasks
2902 <tasks status="^X">
2904 All completed tasks
2906 <tasks status="X">
2908 All tasks
2910 <tasks>
2911 @end example
2913 Warning: this function can be slow, as it checks all the day pages!
2915 @node planner-registry, planner-zoom ,<tasks> tag, Task Reports and Overviews
2916 @comment  node-name,  next,  previous,  up
2917 @section planner-registry
2918 @cindex planner-registry
2920 The @file{planner-registry} module provides a way to keep track of all
2921 the URLs in your projects, and to list them depending on the current
2922 buffer.  The URLs are defined in @code{muse-url-protocols} module from
2923 Muse.
2925 If a URL has been created by @code{planner-create-task-from-buffer},
2926 going to that buffer and calling @code{planner-registry-show} will show
2927 you where Planner put the URL.
2929 @subheading Getting started
2931 To begin using @file{planner-registry}, add the following to your
2932 Planner configuration file.
2934 @example
2935 (require 'planner-registry)
2936 (planner-registry-initialize)
2937 @end example
2939 You must put it after the place where Planner has been loaded in your
2940 configuration file.
2942 If you want the registry to be updated each time you save a Planner
2943 file, add the following to your Planner configuration.
2945 @example
2946 (planner-registry-insinuate)
2947 @end example
2949 If you don't want to update the registry each time a file is written,
2950 you can do it manually with @code{planner-registry-update}: it will
2951 update the registry for saved Planner/Muse buffers only.
2953 @file{planner-registry} does not define any keybindings by default.  Its
2954 most useful interactive function is @code{planner-registry-show}.
2956 @subheading Example usage
2958 Say for example that you created a task from an e-mail.  Go to that
2959 e-mail and call @code{planner-registry-show}: it will open a new buffer
2960 displaying the files (in a muse links format) where a link to this
2961 e-mail has been added.
2963 @subheading Options
2965 @file{planner-registry} defines the following options.
2967 @defopt planner-registry-file
2968 The file where @file{planner-registry} stores its URL registry.
2969 @end defopt
2971 @defopt planner-registry-min-keyword-size
2972 The minimum size for keywords.
2973 @end defopt
2975 @defopt planner-registry-max-keyword-size
2976 The maximum size for keywords.
2977 @end defopt
2979 @defopt planner-registry-max-number-of-keywords
2980 The maximum number of keywords.
2981 @end defopt
2983 @defopt planner-registry-ignore-keywords
2984 A list of keywords to ignore.
2985 @end defopt
2987 @defopt planner-registry-show-level
2988 Level used by the @code{planner-registry-show} function.
2989 0 means that this function shows only exact matches.
2990 1 means that this function also shows descriptive matches.
2991 2 (or more) means that this function also shows fuzzy matches.
2992 @end defopt
2994 @node planner-zoom, , planner-registry, Task Reports and Overviews
2995 @comment  node-name,  next,  previous,  up
2996 @section planner-zoom
2997 @cindex planner-zoom
2998 @cindex view, weekly
2999 @cindex view, quarterly
3000 @cindex view, monthly
3001 @cindex view, yearly
3003 When assessing where you stand in relation to the tasks you have set
3004 out for yourself, you might want a way to survey those tasks in groups
3005 divided by time periods, like by the week or by the month. You could
3006 create all of these overview pages by hand, but if you like to have
3007 this kind of overview frequently, you might find manually creating
3008 such pages to be tedious and time consuming.
3010 @file{planner-zoom} is an optional module designed to make it easy to
3011 view your task information grouped by year, quarter, month, week or
3012 day.
3014 To install this module, just load it in your @file{.emacs} (or
3015 @file{_emacs}):
3017 @example
3018 (require 'planner-zoom)
3019 @end example
3021 This module will recognize planner pages named according to the
3022 following scheme:
3024 @table @asis
3026 @item year view
3027 @file{2006.Year}
3029 @item quarter view
3030 @file{2006.Quarter2}
3032 @item month view
3033 @file{2006.January}
3035 @item week view
3036 @file{2006.January.Week3}
3038 @item day view
3039 @file{2006.01.02}
3041 @end table
3043 @subheading Keybindings
3045 This module also adds key bindings that you can use when looking at a
3046 Planner page to easily jump between the different time-period views.
3048 @table @kbd
3050 @item S-up
3051 Move to the view corresponding to the time period one step larger than
3052 the current one. For example, it moves from the weekly view to the
3053 monthly view. It calls @code{planner-zoom-iup}.
3055 @item S-down 
3056 Move to the view corresponding to the time period one step smaller
3057 than the current one. For example, it moves from the weekly view to
3058 the daily view. It calls @code{planner-zoom-idown}.
3060 @item S-left
3061 Stay in the same time-period view as the current one, but move one
3062 interval earlier. For example, it moves from @file{2006.January.Week3}
3063 to @file{2006.January.Week2}. It calls @code{planner-zoom-iprev}.
3065 @item S-right
3066 Stay in the same time-period view as the current one, but move one
3067 interval later. For example, it moves from @file{2006.January.Week3}
3068 to @file{2006.January.Week4}. It calls @code{planner-zoom-inext}.
3070 @end table
3072 @subheading Example usage
3074 Look at the page named @file{2006.January} and then hit @kbd{S-down}
3075 which will show @file{2006.January.Week1}. Then hit @kbd{S-left} and
3076 @kbd{S-right} to look at @file{2006.January.Week2},
3077 @file{2006.January.Week3}, etc.
3079 @subheading Advanced tips and options
3081 You can use any prefix argument with @code{planner-zoom-iup} and
3082 @code{planner-zoom-idown} to have the new view display in a window
3083 other than the current one. This also works with a nonnumeric prefix
3084 argument and @code{planner-zoom-inext} or @code{planner-zoom-iprev}.
3085 For these two functions, a numeric prefix will specify the number of
3086 intervals to move.
3088 If you don't like the default patterns for naming the time-period view
3089 pages, you can change them by customizing @code{planner-zoom-regexps}.
3091 Some people believe weeks start with Sunday, and some believe they
3092 start with Monday. To accommodate both of these colliding worldviews,
3093 @code{planner-zoom-first-day-of-week} can be customized. Its default
3094 value is @samp{1}, which is Monday. If you would prefer Sunday, change
3095 it to @samp{0}. The month to which a week belongs is the month in
3096 which the first day of the week falls.
3098 @subheading Command reference
3100 @defun planner-zoom-iup name other-window
3101 Move to the next higher level in the hierarchy. With a prefix
3102 argument, show the desired page in the other window.
3103 @end defun
3105 @defun planner-zoom-idown name other-window
3106 Move to the next lower level in the hierarchy. If the current date is
3107 within the higher-level time range, zoom to the lower level time range
3108 that also contains today. Otherwise, just go to the first lower-level
3109 time range. With a prefix argument, show the desired page in the other
3110 window.
3111 @end defun
3113 @defun panner-zoom-inext name num other-window
3114 Move to the next time range at the same level in the hierarchy. With a
3115 numeric prefix argument, move by that number of time ranges. With a
3116 non-numeric prefix argument, show the desired page in the other window.
3117 @end defun
3119 @defun planner-zoom-iprev name num other-window
3120 Move to the previous time range at the same level in the hierarchy.
3121 With a numeric prefix argument, move by that number of time ranges.
3122 With a non-numeric prefix argument, show the desired page in the other
3123 window.
3124 @end defun
3126 @node More about Notes, Making Files Pretty, More about Tasks, More about Planner
3127 @section More about Notes
3128 @cindex notes, more about
3130 Planner by default organizes the notes on a planner page so that
3131 the most recent note is first. Each note is numbered, with the oldest
3132 note labeled @samp{.#1}. If you would like to reverse this behavior,
3133 look at @kbd{C-h v planner-reverse-chronological-notes}.
3135 Notes are associated with day pages, but can also be associated with
3136 plan pages when they are created.  A linked note looks like this:
3138 @example
3139 .#1 Headline (LinkedNote#1)
3140 Text
3141 @end example
3143 You can jump to the linked note with
3144 @command{planner-jump-to-linked-note}.
3146 Deleting a note can be dangerous, as the notes are automatically
3147 numbered.  Removing a note could break links in other pages.
3149 @subheading Functions
3151 @defun planner-create-note page
3152 Create a note to be remembered in @var{page} (today if @var{page} is
3153 nil).  If @code{planner-reverse-chronological-notes} is non-nil, create
3154 the note at the beginning of the notes section; otherwise, add it to
3155 the end.  Position point after the anchor.
3156 @end defun
3158 @defun planner-create-note-from-task
3159 Create a note based on the current task and update the current task to
3160 link to the note.
3161 @end defun
3163 @defun planner-renumber-notes
3164 Update note numbering.
3165 @end defun
3167 @defun planner-jump-to-linked-note note-info
3168 Display the note linked to by the current note or @var{note-info} if
3169 non-nil.
3170 @end defun
3172 @defun planner-search-notes regexp limit
3173 Return a buffer with all the notes returned by the query for
3174 @var{regexp}.  If called with a prefix argument, prompt for
3175 @var{limit} and search days on or after @var{limit}.
3176 @end defun
3178 The following sections include instructions for displaying,
3179 manipulating, and navigating your notes efficiently.
3181 @menu
3182 * Using Allout Mode::           Quickly navigating your notes
3183 * <notes>::                     Note headlines
3184 * <past-notes>::                Index of past notes
3185 * Note Indices::                planner-notes-index.el
3186 @end menu
3188 @node Using Allout Mode, <notes>, More about Notes, More about Notes
3189 @subsection Using Allout Mode
3190 @cindex Allout mode
3191 @cindex notes, navigating
3192 @cindex notes, formatting
3193 @cindex notes, displaying
3195 The format of the notes in Planner works well with Allout mode, which
3196 provides helpful commands for navigating and formatting outlines. You
3197 can, for example, hide the bodies of all the notes on a page so you can
3198 see just their headlines. You can also jump easily from headline to
3199 headline, skipping over the bodies in between.
3201 The commands for using Allout mode vary depending on which Emacs version
3202 you are using. In either case, type @kbd{M-x load-library @key{RET}
3203 allout @key{RET}} to start. If you are using CVS Emacs, type @kbd{M-x
3204 allout-mode @key{RET}}. If you are using an earlier version of Emacs,
3205 type @kbd{M-x outline-mode @key{RET}}.
3207 The exact commands then available to you differ depending on your Emacs
3208 version, but you can view the commands and their keybindings by typing
3209 @kbd{C-h m}. In CVS Emacs, they will start with @command{allout-}, while
3210 in previous versions, they will start with @command{outline-}.
3212 @node <notes>, <past-notes>, Using Allout Mode, More about Notes
3213 @subsection <notes>
3215 @samp{<notes>} is replaced by a list of note headlines when the page
3216 is published. For example, the notes tag in the following example will
3217 be replaced by the two headlines when published. (@pxref{Publishing})
3219 @example
3220 <notes>
3222 * Notes
3224 .#1 This is a headline
3226 and this is body text
3228 .#2 This is another headline
3230 and this is more body text
3231 @end example
3233 @samp{<notes>} is useful if you want to provide a quick summary of
3234 blog entries at the top of your page. Just add it to your
3235 @code{planner-day-page-template}.
3237 @node <past-notes>, Note Indices, <notes>, More about Notes
3238 @subsection <past-notes>
3240 @samp{<past-notes>} is replaced by an index of note headlines.
3241 If @var{start} is specified, it lists notes starting from that date.
3242 If @var{directory} is specified, you can index notes in another
3243 planner directory.
3245 @example
3246 All the notes I've taken in 2004:
3248 <past-notes start="2004.01.01" end="2004.12.31">
3249 @end example
3251 @node Note Indices,  , <past-notes>, More about Notes
3252 @comment  node-name,  next,  previous,  up
3253 @subsection Note Indices
3254 @cindex @file{planner-notes-index.el}, using
3255 @cindex notes, indexing
3257 Make sure that @file{planner-notes-index.el} is in your load path and
3258 add this to your @file{.emacs} (or @file{_emacs}):
3260 @example
3261 (require 'planner-notes-index)
3262 @end example
3264 Then you can use tags of the form:
3266 @example
3267 <planner-notes-index page="2004.03.02">
3268 <planner-notes-index from="2004.03.01" to="2004.03.31">
3269 <planner-notes-index limit="10">
3270 <planner-notes-index page="PlanPage">
3271 <planner-notes-index-month-table month="2004.03" limit="5">
3272 <planner-notes-index-month-table month="2004.03">
3273 @end example
3275 You can also use the following interactive functions:
3277 @code{planner-notes-index}
3278 @code{planner-notes-index-days}
3279 @code{planner-notes-index-weeks}
3280 @code{planner-notes-index-months}
3281 @code{planner-notes-index-years}    (wow!)
3283 These work based on the current date (date of current buffer, or today).
3285 If a single page is specified, this page is scanned for headlines
3286 of the form:
3288 @example
3289  .#1 Headline
3290 @end example
3292 The results are presented as a bulleted list.
3294 If @var{from} and @var{to} are specified, all date pages between them
3295 (inclusive) are scanned. If @var{from} is omitted, it is assumed to be
3296 the earliest entry.  If @var{to} is omitted, it is assumed to be the
3297 latest entry.
3299 If @var{recent} is specified, the list includes only that many recent
3300 headlines.  and the results are presented as a bulleted list.
3302 To customize presentation, you can write a function that generates
3303 the appropriate @code{<planner-notes-index>} tags. You can also use
3304 @code{planner-extract-note-headlines} in your own functions.
3306 @subheading Functions
3308 The following interactive functions are defined in
3309 @file{planner-notes-index.el}:
3311 @defun planner-notes-index &optional from to limit
3312 Display a clickable notes index. If called from a Lisp program,
3313 display only dates between @var{from} and @var{to}. With a prefix arg
3314 @var{limit}, display only that number of entries.
3315 @end defun
3317 @defun planner-notes-index-days days
3318 Display an index of notes posted over the past few @var{days}. The
3319 list ends with the day of the current buffer or @code{planner-today}.
3320 @end defun
3322 @defun planner-notes-index-weeks weeks
3323 Display an index of notes posted over the past few @var{weeks}. The
3324 list ends with the week of the current buffer or
3325 @code{planner-today}. Weeks start from Sunday.
3326 @end defun
3328 @defun planner-notes-index-months months
3329 Display an index of notes posted over the past few @var{months}. The
3330 list ends with the month of the current buffer or @code{planner-today}.
3331 @end defun
3333 @defun planner-notes-index-years years
3334 Display an index of notes posted over the past few @var{years}. The
3335 current year is included.
3336 @end defun
3338 @file{planner-notes-index.el} does not define any keybindings.
3341 @node Making Files Pretty, Annotations, More about Notes, More about Planner
3342 @section Making Files Pretty
3344 By default, planner does a little bit of fancy reformatting when you
3345 save a file. Tasks are sorted by priority (ABC) and status (_oP>XC) on
3346 day pages. On plan pages, tasks are sorted by priority (ABC), status
3347 (XC), and date. Undated tasks are sorted after dated tasks.
3349 @subheading Options
3351 @defopt planner-sort-tasks-key-function
3352 Control task sorting. Some options include
3353 @code{planner-sort-tasks-default-key},
3354 @code{planner-sort-tasks-basic}, @code{planner-sort-tasks-by-date}, and
3355 @code{planner-sort-tasks-by-link}.
3356 @end defopt
3358 @defopt planner-sort-undated-tasks-equivalent
3359 This option controls the behavior of task sorting on plan pages.  By
3360 default, the value @samp{9999.99.99} causes dated tasks to be listed
3361 before undated tasks.  To sort undated tasks before dated tasks,
3362 set this to a blank string.
3363 @end defopt
3365 @defopt planner-sort-tasks-automatically
3366 Non-nil means sort tasks whenever a planner file is saved.  On day
3367 pages, tasks are sorted by status.  On plan pages, they are sorted by
3368 status and date.  Sorting can take a while.
3369 @end defopt
3371 @defopt planner-renumber-tasks-automatically
3372 Non-nil means renumber tasks from 1 to N whenever a planner file is
3373 saved. This allows you to refer to tasks in previous day pages using
3374 anchors like @samp{2003.08.12#A1}. If you use this function, make sure
3375 @code{planner-use-task-numbers} is non-nil so that new tasks are created
3376 with task numbers.
3377 @end defopt
3379 @defopt planner-align-tasks-automatically
3380 Non-nil means align tasks whenever a planner file is saved.  This
3381 causes the status to line up in a neat column if you have less than
3382 100 tasks.
3383 @end defopt
3385 @defopt planner-renumber-notes-automatically
3386 Non-nil means renumber the notes. If most of your notes are only on
3387 one page, you might like seeing the notes renumbered if you delete a
3388 note in the middle. However, if you use a lot of cross-referencing,
3389 note renumbering will break those links.
3390 @end defopt
3392 @subheading Functions
3394 @defun planner-sort-tasks
3395 Sort tasks according to planner-sort-tasks-key-function. By default,
3396 sort tasks according to priority and position on day pages, and
3397 according to status, priority, date, and position on plan pages.
3398 @end defun
3400 @defun planner-renumber-tasks
3401 Update task numbering.
3402 @end defun
3404 @defun planner-align-tasks
3405 Align tasks neatly. You can add this to @code{write-file-functions} to
3406 have the tasks automatically lined up whenever you save.  For best
3407 results, ensure @code{planner-align-tasks} is run after
3408 @code{planner-renumber-tasks}.
3409 @end defun
3411 @defun planner-fix-tasks
3412 Sort, renumber and align tasks.
3413 @end defun
3415 @node Annotations, Interactive Lisp, Making Files Pretty, More about Planner
3416 @comment  node-name,  next,  previous,  up
3417 @section Annotations
3419 The context included when you create a task and the context included
3420 when you create a note are gained the same way. It sounds like black
3421 magic, but it turns out not to be.
3423 All that happens is, Planner has a list of functions,
3424 @code{planner-annotation-functions}. When you create a task from a
3425 buffer, or remember a note from a buffer, Planner goes through
3426 this list from top to bottom. The first one that returns true is the
3427 one it uses.
3429 For example, if you're in Wanderlust, and you hit the key you've bound
3430 to @code{planner-create-task-from-buffer}, it looks at this list and
3431 does something like this.  Is it an ERC buffer? No. Is it a BBDB
3432 buffer? No. Are we in w3m? No. Are we in Wanderlust? Yes. So this
3433 function succeeds. It stops searching and runs the annotation function
3434 for Wanderlust, which in this case finds out who the message is from
3435 and what the message ID of the message is. It then takes those and
3436 constructs a link back to that message, with a link title something
3437 like @samp{Email from Joe Blogs}.
3439 So, you've read the email from Joe Blogs. He's asked you to do
3440 something and you've hit your key to add that task to your list of
3441 things to do. So what you end up with is a description of the task,
3442 and a link back to what made you create the task in the first place.
3444 The same happens with remembering notes, except that it ends up in the
3445 @samp{* Notes} section of your page instead.
3447 By default, @file{planner.el} can annotate tasks and notes based on
3448 the current filename.
3450 @subheading Options
3452 To change the behavior of annotations, customize the following options:
3454 @defopt planner-annotation-functions
3455 A list of functions tried in order by
3456 @command{planner-create-task-from-buffer} and other functions that
3457 pick up context.  The first non-nil value returned is used as the
3458 annotation.  To cause an item to @strong{not} be annotated, return the
3459 empty string @samp{""}.
3460 @end defopt
3462 @defopt planner-annotation-strip-directory
3463 File links are usually generated with the full path to the file so
3464 that you can easily tell apart files with the same base name.  If
3465 @code{planner-annotation-strip-directory} is non-nil, though, only the
3466 base name of the file will be displayed.  For example, a link to
3467 @samp{/foo/bar/baz} will be displayed as @samp{baz} and hyperlinked to
3468 the file.
3469 @end defopt
3471 @defopt planner-annotation-use-relative-file
3472 If t, always use relative filenames.
3473 @code{planner-annotation-use-relative-file} can also be a function that
3474 takes the filename and returns non-nil if the link should be relative.
3475 Filenames are resolved relative to the first directory of your Planner
3476 project in @code{muse-project-alist}.  That is, the created link will be
3477 of the form @samp{../../somefile} instead of
3478 @samp{/absolute/path/to/file}.  This can be helpful if you publish your
3479 planner files to the Net and your directory structure ensures that
3480 relative links resolve the same from your Plan pages and their
3481 respective publishing directory.
3482 @end defopt
3484 @node Interactive Lisp, Publishing, Annotations, More about Planner
3485 @comment  node-name,  next,  previous,  up
3486 @section Interactive Lisp with planner-lisp.el
3487 @cindex Lisp functions, using with Planner
3488 @cindex interactive Lisp fuctions, using with Planner
3489 @cindex @file{planner-lisp.el}, using
3491 You can include interactive Lisp functions in your planner pages.
3493 First, you need @file{planner-lisp.el}. Put this in your @file{.emacs}
3494 (or @file{_emacs}):
3496 @example
3497 (require 'planner-lisp)
3498 @end example
3500 Then, add a link to the Lisp function to your page, like:
3502 @example
3504 [[lisp:/plan][Plan]]
3506 @end example
3508 This will be rendered as @samp{Plan}. Selecting the link will run the
3509 @code{plan} function interactively.
3511 You can also execute other Lisp expressions. For example:
3513 @example
3514 [[lisp:/(planner-goto (planner-expand-name "+7"))][Next week]]
3515 @end example
3517 @file{planner-lisp.el} does not provide any interactive functions or
3518 keybindings.
3520 @node Publishing, Experimental Functions, Interactive Lisp, More about Planner
3521 @section Publishing
3523 You can publish your planner files to HTML and put them on a normal
3524 web server--no special server support required. This gives you an easy
3525 way to keep other people up to date on your tasks, keep a web log, or
3526 simply organize information.
3528 Publish your planner wiki with @kbd{C-c C-p}
3529 (@code{muse-project-publish}). You can publish individual files with
3530 @kbd{C-c C-t} (@code{muse-publish-this-file}). To automatically publish
3531 files when you save them, add the following code to your
3532 @file{~/.emacs}:
3534 @example
3535 (eval-after-load "muse-mode"
3536   (add-hook 'after-save-hook
3537             #'(lambda ()
3538                 (when (planner-derived-mode-p 'muse-mode)
3539                   (muse-project-publish nil)))
3540             nil t))
3541 @end example
3543 Published files are stored in the path specified by
3544 @code{muse-project-alist} for your Planner project.  Just copy the
3545 contents of this directory to your webserver, and you're all set! Of
3546 course, publishing is completely optional.
3548 Here are some more features related to publishing:
3550 @menu
3551 * Publishing Planner pages::    planner-publish.el
3552 * Publishing Calendars::        planner-calendar.el
3553 * Authz Access Restriction::    planner-authz.el
3554 * RSS Publication::             Sharing notes with planner-rss.el
3555 * iCal Task Publication::       Sharing tasks with planner-ical.el
3556 * RDF Publication::             planner-rdf.el
3557 @end menu
3560 @node Publishing Planner pages, Publishing Calendars, Publishing, Publishing
3561 @comment  node-name,  next,  previous,  up
3562 @subsection Publishing Planner pages
3563 @cindex publishing
3564 @cindex @file{planner-publish.el}, using
3566 The task of publishing Planner pages is handled by
3567 @file{planner-publish.el}.  It is loaded by default when Planner is
3568 loaded.  To publish an entire Planner project, set up
3569 @code{muse-project-alist} (@pxref{Creating Your Planner}) and hit
3570 @kbd{C-c C-p}.  To publish an individual page, hit @kbd{C-c C-t}.
3572 Publishing works by providing Muse with the settings and environment for
3573 Planner publishing.
3575 @subheading Styles provided
3577 The following publishing styles are available.
3579 @table @code
3581 @cindex publishing styles, planner-html
3582 @item planner-html
3583 Publish Planner pages to HTML.
3585 @cindex publishing styles, planner-xhtml
3586 @item planner-xhtml
3587 Publish Planner pages to XHTML.
3589 @cindex publishing styles, planner-xml
3590 @item planner-xml
3591 Publish Planner pages to XML.
3593 @end table
3595 @subheading Options provided
3597 The following options may be customized to enhance your publishing
3598 experience.
3600 @table @code
3602 @item planner-publish-markup-regexps
3603 List of markup rules for publishing Planner pages.
3605 @item planner-publish-markup-functions
3606 Specify which function to use for publishing different kinds of markup.
3608 @item planner-publish-markup-tags
3609 A list of custom HTML-like tags to recognize when publishing.
3611 @item planner-xml-markup-strings
3612 Strings that are inserted to publish XML markup.
3614 @item planner-xml-header
3615 Header used when publishing Planner XML files.
3616 This may be text or a filename.
3618 @item planner-xml-footer
3619 Footer used when publishing Planner XML files.
3620 This may be text or a filename.
3622 @item planner-html-markup-strings
3623 Strings that are inserted to publish HTML markup.
3625 @item planner-html-style-sheet
3626 CSS stylesheet elements used in Planner HTML and XHTML files.
3627 This can also be one or more @samp{<link>} tags.
3629 @item planner-html-header
3630 Header used when publishing Planner HTML files.
3631 This may be text or a filename.
3633 @item planner-html-footer
3634 Footer used when publishing Planner HTML files.
3635 This may be text or a filename.
3637 @item planner-xhtml-header
3638 Header used when publishing Planner XHTML files.
3639 This may be text or a filename.
3641 @item planner-xhtml-footer
3642 Footer used when publishing Planner XHTML files.
3643 This may be text or a filename.
3645 @item planner-html-inner-header
3646 Extra header section that can be embedded within
3647 @code{planner-html-header} and @code{planner-xhtml-header}.
3649 @item planner-html-inner-footer
3650 Extra header section that can be embedded within
3651 @code{planner-html-footer} and @code{planner-xhtml-footer}.
3653 @item planner-publish-prepare-regexps
3654 List of markup rules to apply before publishing a page with Planner.
3656 @item planner-publish-finalize-regexps
3657 List of markup rules to apply after publishing a page with Planner.
3659 @end table
3661 @node Publishing Calendars, Authz Access Restriction, Publishing Planner pages, Publishing
3662 @comment  node-name,  next,  previous,  up
3663 @subsection Publishing Calendars
3664 @cindex calendar, publishing
3665 @cindex @file{planner-calendar.el}, using
3667 To publish calendars in your day pages, it is necessary to do two steps.
3669 @itemize
3670 @item Add @code{(require 'planner-calendar)} to your configuration.
3671 @item Add a @samp{<calendar>} tag to either your header, footer, or
3672 @var{planner-day-page-template}, depending on where you want it to
3673 appear.
3674 @end itemize
3676 To display a calendar based on a different day (given here as DAYPAGE),
3677 use @code{<calendar page="DAYPAGE">}.
3679 To get arrows to previous and next months to show up, use
3680 @code{<calendar arrows="t">}.  The text in
3681 @var{planner-calendar-prev-month-button} and
3682 @var{planner-calendar-next-month-button} will be used for the arrows to
3683 the previous and next months, respectively.
3685 By default, Muse will not display the arrows properly, due to
3686 limitations in the special-escaping algorithm.  To work around this,
3687 remove the @samp{&} rule from @var{muse-xml-markup-specials}, or from
3688 @var{muse-html-markup-specials} if you are using the 3.02.6 version of
3689 Muse.
3691 It is also possible to create a symlink from the current day page to the
3692 page name specified by @var{planner-calendar-today-page-name}.  To
3693 accomplish this, add the following to your configuration.
3695 @example
3696 (eval-after-load "muse-publish"
3697   '(add-hook 'muse-after-publish-hook
3698              'planner-calendar-create-today-link))
3699 @end example
3701 @subheading Options
3703 @defopt planner-calendar-prev-month-button
3704 HTML text used for previous month buttons.
3705 @end defopt
3707 @defopt planner-calendar-next-month-button
3708 HTML text used for next month buttons.
3709 @end defopt
3711 @defopt planner-calendar-day-header-chars
3712 Number of characters to use for day column header names.
3713 @end defopt
3715 @defopt planner-calendar-today-page-name
3716 Default name for published today page link.
3717 @end defopt
3719 @subheading Functions
3721 @defun planner-calendar-create-today-link
3722 Add this function to @code{muse-after-publish-hook} to
3723 create a ``today'' soft-link to the newest published planner day page,
3724 on operating systems that support POSIX @command{ln}.
3725 @end defun
3727 @node Authz Access Restriction, RSS Publication, Publishing Calendars, Publishing
3728 @comment  node-name,  next,  previous,  up
3729 @subsection Authz Access Restriction
3730 @cindex @file{planner-authz.el}, using
3731 @cindex Mason, restricting portions with
3732 @cindex access, restricting
3734 @file{planner-authz.el} was written by Andrew J. Korty in order to
3735 allow the easy restriction of portions of published pages.  It uses
3736 the HTML::Mason module available on CPAN
3737 (@url{http://www.cpan.org}).  Setting up HTML::Mason is
3738 outside the scope of this document.  Make sure that it works before
3739 trying out @file{planner-authz.el}.
3741 @file{planner-authz.el} modifies the behavior of
3742 @command{muse-project-publish} so that published pages follow access
3743 modifiers.
3745 This library lets you publish your planner pages while controlling
3746 access to certain portions of them to users you specify.  When you
3747 load this library, you gain access to two additional markup directives
3748 to use in your planner pages.  The @samp{<authz>} tag lets you
3749 restrict access to arbitrary content as follows:
3751 @example
3752 Here is a sentence everyone should see.  This sentence also
3753 contains no sensitive data whatsoever.  <authz users="ajk">This
3754 sentence, however, talks about my predilection for that French
3755 vanilla instant coffee that comes in the little tin, and I'm
3756 embarrassed for anyone else to know about that.</authz> And
3757 here's some more perfectly innocuous content.
3758 @end example
3760 You can use @samp{<authz>} tags to mark up entire paragraphs, tasks,
3761 notes, and anything else.  The tags are replaced with Mason code in
3762 the published pages.
3764 The @samp{#authz} directive restricts access to an entire page.  A Mason
3765 call is added to this page to generate a 403 error when someone not
3766 listed tries to access it.  Any notes or tasks on a
3767 @samp{#authz}-protected page are also wrapped in Mason code on linked
3768 pages. To add a @samp{#authz} directive to a Muse page, place
3769 @samp{#authz} followed by a space-delimited list of users on one
3770 line. For example:
3772 @example
3773 #authz ajk sacha
3774 @end example
3776 @subheading Getting started
3778 Add the following to your .emacs file to cause @kbd{M-x
3779 muse-project-publish} to automatically use planner-authz features.
3781 @example
3782 (require 'planner-authz)
3783 @end example
3785 @subheading Diary markup
3787 If your pages have a section with diary entries maintained by
3788 planner-appt.el (or by any other means), you can control access to these
3789 entries.  First, customize @code{planner-section-tagnames} to map your
3790 diary section ("* Schedule", in this example) to a tag called
3791 "diary-section".  An example follows.
3793 @example
3794 (add-to-list 'planner-section-tagnames '("Schedule" . "diary-section"))
3795 @end example
3797 If the name of your diary section is "* Diary", you will not need to
3798 customize @code{planner-section-tagnames} by default.
3800 Then make sure the diary entries you want restricted contain a
3801 corresponding plan page name in parentheses, as in the following
3802 example.
3804 @example
3805 10:00 10:30 Meeting with boss (WorkStuff)
3806 @end example
3808 @subheading Options
3810 @defopt planner-authz-project-default
3811 Default access list for project pages (not day pages).  If a given
3812 project page doesn't contain a @samp{#authz} tag, it will receive the
3813 access list defined here.  If this variable is nil, all users will be
3814 allowed to view the page.  No corresponding variable is provided for
3815 day pages because it doesn't seem like you'd ever want to control
3816 access based on what day it was.  (But I will accept patches. :) Notes
3817 and tasks referencing pages without @samp{#authz} tags will also be
3818 restricted to the users listed here.
3819 @end defopt
3821 @defopt planner-authz-day-note-default
3822 Default access list for notes on day pages not associated with
3823 any project.  There is way to set a default for notes on project
3824 pages for the reason above; they would only be associated with
3825 date pages anyway.
3826 @end defopt
3828 @defopt planner-authz-day-task-default
3829 Same as @kbd{planner-authz-day-note-default}, but for tasks.
3830 @end defopt
3832 @subheading Functions
3834 @defun planner-authz-publish-index
3835 Publish an index for the planner marked up with Mason code.
3836 Only those links to pages which the remote user is authorized to
3837 access will be shown.
3838 @end defun
3840 @node RSS Publication, iCal Task Publication, Authz Access Restriction, Publishing
3841 @comment  node-name,  next,  previous,  up
3842 @subsection RSS Publication
3843 @cindex @file{planner-rss.el}, using
3844 @cindex notes, RSS
3845 @cindex RSS
3847 @file{planner-rss.el} allows you to publish your notes in the RSS 2.0
3848 XML format for blog syndication. You will also want to customize the
3849 following variables:
3851 To manually add the current note to all the matching RSS feeds, invoke
3852 @command{planner-rss-add-note}. You can specify a filename with the
3853 universal prefix, like this: @kbd{C-u M-x planner-rss-add-note}.
3855 If you use the @file{remember-planner.el} module to create notes, you
3856 can automatically publish new notes to RSS feeds by adding the
3857 following code to your @file{.emacs} (or @file{_emacs}).
3859 @example
3860 (add-to-list 'remember-planner-append-hook 'planner-rss-add-note t)
3861 @end example
3863 @subheading Options
3865 @defopt planner-rss-base-url
3866 Base absolute URL for published blog entries. Should include trailing
3867 @samp{/}.
3868 @end defopt
3870 @defopt planner-rss-category-feeds
3871 Rules for automatic categorization of posts and publishing to RSS
3872 files. A blog entry is matched against each condition. If it matches
3873 the regular expression or the function returns a non-nil value, the
3874 blog entry is copied into the specified file.
3875 @end defopt
3877 @defopt planner-rss-feed-limits
3878 A list of regular expressions that match feed filenames and the size
3879 and item limits for feeds that match. For example, you can use
3880 @samp{(("." nil 10))} to ensure that all feeds are limited to the 10
3881 most recent items.
3882 @end defopt
3884 @subheading Functions
3886 @file{planner-rss.el} defines the following interactive functions:
3888 @defun planner-rss-add-note @var{feed}
3889 Export the current note using @code{planner-add-item}. If @var{feed}
3890 is specified, add the entry to the specified file. Else, add the entry
3891 to all matching RSS feeds specified by
3892 @code{planner-rss-category-feeds}.
3893 @end defun
3895 @node iCal Task Publication, RDF Publication, RSS Publication, Publishing
3896 @comment  node-name,  next,  previous,  up
3897 @subsection iCal Publication
3899 iCal is an Internet Engineering Task Force (IETF) standard for
3900 calendaring and scheduling. @uref{http://www.ietf.org/rfc/rfc2445.txt}
3902 You can export your tasks to the iCal format using
3903 @file{planner-ical}. Add @code{(require 'planner-ical)} to your
3904 @file{~/.emacs}. Then you can use @kbd{M-x planner-ical-export-page}
3905 to display the iCal equivalent of tasks on a page, which you can then
3906 save to a file.
3908 To export today's tasks to a file in your publishing directory, add
3909 the following to your @file{~/.emacs}.
3911 @example
3912 (planner-ical-export-file
3913  (planner-today)
3914  (expand-file-name
3915    "tasks.ics"
3916    (muse-style-element :path (car (cddr (muse-project planner-project))))))
3917 @end example
3919 @subheading Functions
3921 @defun planner-ical-export-page page &optional file
3922 Export PAGE's tasks in the iCal format.
3923 If FILE is non-nil, results are saved to that file.
3924 If FILE is nil, results are displayed in a `planner-ical-export-buffer'.
3925 @end defun
3927 @defun planner-ical-export-this-page
3928 Display the tasks on the current page in iCal format.
3929 @end defun
3931 @node RDF Publication,  , iCal Task Publication, Publishing
3932 @comment  node-name,  next,  previous,  up
3933 @subsection RDF Publication
3934 @cindex @file{planner-rdf.el}, using
3935 @cindex RDF, publishing to
3937 Put planner-rdf.el in a directory that is in your Emacs load-path and
3938 the following into your ~/.emacs file:
3940 @example
3941 (require 'planner-rdf)
3942 (eval-after-load "muse-publish"
3943   '(progn
3944      (add-hook 'muse-after-publish-hook
3945                'planner-rdf-publish-file)
3946      (add-hook 'muse-after-publish-hook
3947                'planner-rdf-publish-index)))
3948 @end example
3950 @menu
3951 * Publishing with planner-rdf::  
3952 * planner-rdf Tags::            
3953 * planner-rdf Usage Examples::  
3954 @end menu
3956 @node Publishing with planner-rdf, planner-rdf Tags, RDF Publication, RDF Publication
3957 @subsubsection Publishing with planner-rdf
3959 Planner-rdf is now included in the normal Planner publishing process.
3960 Pressing @key{C-p} will create a .owl and a .rdf file for every planner
3961 file. Additionally it creates an index, @file{index.rdf}.
3963 By default all generated files will be stored in the normal Planner
3964 publishing directory, where the HTML files end up. If you would ike to
3965 change that, set the variable @code{planner-rdf-directory} to the desired
3966 location.
3968 The generated files:
3970 @itemize
3971 @item
3972 @file{index.rdf} - a collection with pointers to the
3973 @file{<plan-page>.rdf} files.
3974 @item
3975 @file{<plan-page>.rdf} - contains Dublin Core metadata about the files
3976 related to the current Planner page. Currently it contains metadata
3977 about the source file, the Emacs plan page, the generated HTML page, and
3978 the generated OWL file.
3979 @item
3980 @file{<plan-page>.owl} - contains task and note data from the Planner
3981 file. Task information is stored completely. For notes, the note
3982 headline is stored.
3983 @end itemize
3985 @node planner-rdf Tags, planner-rdf Usage Examples, Publishing with planner-rdf, RDF Publication
3986 @subsubsection planner-rdf Tags
3988 Besides the factual information, e.g. the task status or description,
3989 planner-rdf extracts links (in the format @samp{[[...][...]]} or
3990 @samp{[[...]]}) and tags (@samp{@{@{...:...}@}@}) from tasks and notes
3991 (including the notes text). Links and tags provide context for the plan
3992 elements and so are stored and linked with the containing elements.
3994 Links point to locations that can be used to enrich the information in
3995 the Planner pages (e.g, by retrieving data from them and adding it),
3996 tags -- like the one for the task ids @samp{@{@{Tasks:198@}@}} -- can be
3997 used to express abstract qualities. Some examples:
3999 @itemize
4000 @item
4001 an @samp{@{@{audience:myteam@}@}} tag, can be used to restrict
4002 publishing of items to a certain user group;
4003 @item a @samp{@{@{lang:de@}@}} tag, signifying the language of the text;
4004 @item
4005 a @samp{@{@{location:Hamburg@}@}} tag, can be used to make geographic
4006 reference to an entity that is not stored in your address book, bbdb.
4007 @end itemize
4009 What tags to use is up to the user. Planner-rdf makes no assumptions
4010 about them, it just extracts and stores them. Only the applications
4011 using the data know what to do with them.
4013 @node planner-rdf Usage Examples,  , planner-rdf Tags, RDF Publication
4014 @subsubsection Usage Examples
4016 Report generation with OpenOffice
4018 The Perl file @file{this-week.pl}
4019 (@url{http://www.rainervolz.de/planner-rdf/this-week.pl}) creates a
4020 simple report for the current week. The script extracts task and note
4021 information from the generated OWL files and inserts it into a simple
4022 OpenOffice Writer document. Nothing fancy, just a proof of concept, to
4023 show how planner-rdf can be used to integrate Planner Mode with other
4024 applications.
4026 Besides Perl and OpenOffice you'll need the Redland RDF Application
4027 Framework (@url{http://www.redland.opensource.ac.uk/}). It is used to
4028 process the RDF data. Redland is small, but powerful, and available
4029 for many platforms and languages.
4031 As an example the application loads the RDF data each time it is run.
4032 In the real world you probably would use Redland to store the Planner
4033 data in a database, to save the loading step each time you access the
4034 data.
4036 Importing Planner data into Protege
4038 Protege is a popular ontology editor and knowledge management
4039 application. A simple way to import data into it, is to provide a OWL
4040 file that contains the data as well as the schema. To do this:
4042 @itemize
4043 @item
4044 Use @file{planner2protege.pl}
4045 (@url{http://www.rainervolz.de/planner-rdf/planner2protege.pl}) to
4046 combine all OWL files into a single one.
4047 @item
4048 Use CWM (@url{http://www.w3.org/2000/10/swap/doc/cwm.html}) to combine
4049 schema and data, with @code{python cmw --rdf planner-rdf.owl
4050 planner-data.owl --think --rdf >planner2.owl}
4051 @end itemize
4053 Not the most straightforward process, but it works. The resulting file,
4054 here planner2.owl, can then be loaded into Protege.
4056 @node Experimental Functions,  , Publishing, More about Planner
4057 @comment  node-name,  next,  previous,  up
4058 @section Experimental Functions
4059 @cindex @file{planner-experimental.el}, using
4060 @cindex experimental functions, Planner
4062 These functions are experimental. This means that they may not do
4063 exactly what you expect them to do, so keep backups, be careful, and
4064 don't blame us.
4066 To use these functions, make sure that @file{planner-experimental.el} is
4067 in your load path, and add this to your @file{.emacs} (or
4068 @file{_emacs}):
4070 @example
4071 (require 'planner-experimental)
4072 @end example
4074 @subheading Functions
4076 @file{planner-experimental.el} defines the following interactive
4077 functions:
4079 @defun planner-search-notes-next-match
4080 Jump to the next matching entry.  Call after
4081 @code{planner-search-notes}.
4082 @end defun
4084 @defun planner-search-notes-previous-match
4085 Jump to the previous matching entry.  Call after
4086 @code{planner-search-notes}.
4087 @end defun
4089 @defun planner-remove-duplicates
4090 Remove duplicate tasks.
4091 @end defun
4093 @file{planner-experimental.el} does not define any keybindings.
4095 @node Managing Your Information, Advanced Configuration, More about Planner, Top
4096 @comment  node-name,  next,  previous,  up
4097 @chapter Managing Your Information
4099 Planner can be integrated with other Emacs and even some non-Emacs
4100 programs by loading additional modules. You can pick and choose from
4101 these modules, choosing those that work with programs you use and that
4102 produce information you want to have included in your Planner pages.
4104 @menu
4105 * E-mail::                      Linking notes and tasks to messages
4106 * Scheduling and Time::         Tracking appointments and where your time goes
4107 * Finances::                    Display your account balances and more
4108 * Contacts and Conversations::  BBDB and ERC
4109 * Tracking Research and Resources::  The Web, bibliographies, and bookmarks
4110 * Tracking Development::        
4111 @end menu
4113 @node E-mail, Scheduling and Time, Managing Your Information, Managing Your Information
4114 @comment  node-name,  next,  previous,  up
4115 @section E-mail
4117 Planner can work together with several different Emacs e-mail
4118 clients. If you load the appropriate module for the e-mail client you
4119 use, then your notes and tasks can be annotated with information
4120 pointing to the specific e-mail message you were reading when you
4121 created that note or task. When you are looking at the note or task, you
4122 will be able to jump straight to that message.
4124 @menu
4125 * Unix mail::                   Unix mailboxes: planner-unix-mail.el              
4126 * Gnus::                        Gnus mail and news reader: planner-gnus.el
4127 * VM::                          VM mail reader: planner-vm.el
4128 * Wanderlust::                  Wanderlust mail reader: planner-wl.el
4129 * MH-E::                        MH-E mail reader: planner-mhe.el
4130 * Rmail::                       Rmail: planner-rmail.el
4131 @end menu
4134 @node Unix mail, Gnus, E-mail, E-mail
4135 @comment  node-name,  next,  previous,  up
4136 @subsection Unix mail
4137 @cindex mbox, using Planner with
4138 @cindex Unix mail, using Planner with
4139 @cindex mail client, using Planner with
4141 This module supports links from any kind of Unix mailbox (mbox). To
4142 use this module, make sure that @file{planner-unix-mail.el} is in your
4143 load path and add this to your @file{.emacs} (or @file{_emacs}):
4145 @example
4146 (require 'planner-unix-mail)
4147 @end example
4149 Unix mail URLs are of the form:
4151 @example
4152 ;; mail://PATH/TO/INBOX/message-id
4153 @end example
4155 Annotations will be of the form:
4157 @smallexample
4158 [[mail://PATH/TO/INBOX/E1AyTpt-0000JR-LU%40sacha.ateneo.edu][E-mail from Sacha Chua]]
4159 @end smallexample
4161 @file{planner-unix-mail.el} does not define any interactive functions or
4162 create any new keybindings.
4164 @node Gnus, VM, Unix mail, E-mail
4165 @comment  node-name,  next,  previous,  up
4166 @subsection Gnus
4167 @cindex Gnus, using Planner with
4168 @cindex mail client, using Planner with, Gnus
4170 To use this module, make sure that it is in your load path and put
4171 this in your @file{.emacs} (or @file{_emacs}):
4173 @example
4174 (require 'planner-gnus)
4175 (planner-gnus-insinuate)
4176 @end example
4178 With this module loaded, when you create tasks from Gnus summary or
4179 message buffers, the tasks will be annotated with information from the
4180 message you were looking at when you created each task. A link will also
4181 be created on your planner page that you can select in order to return
4182 to the message.
4184 So, the created task will look something like this:
4186 @smallexample
4187 #A34 _ Send writing to publishme.com from
4188 [[gnus://alt.books.beatgeneration/<Ifo5c.24632$F9.9567@@nwrddc01.gnilink.net>][E-Mail
4189 from editor@@verizon.net]] @{@{Tasks:71@}@} ([[Writing]])
4190 @end smallexample
4192 This module also binds @kbd{C-c C-t} in the Gnus summary and article
4193 views to the command to create a new task.
4195 @file{planner-gnus.el} does not define any interactive functions.
4197 For more information about Gnus, see @inforef{Top, The Gnus Newsreader,
4198 gnus}.
4200 @node VM, Wanderlust, Gnus, E-mail
4201 @comment  node-name,  next,  previous,  up
4202 @subsection VM
4203 @cindex VM, using Planner with
4204 @cindex mail client, using Planner with, VM
4206 To use this module, make sure that @file{planner-vm.el} is in your load
4207 path and add this to your @file{.emacs} (or @file{_emacs}):
4209 @example
4210 (require 'planner-vm)
4211 @end example
4213 VM URLs are of the form:
4215 @example
4216 vm://path/to/inbox/message-id
4217 @end example
4219 Annotations will be of the form:
4221 @smallexample
4222 [[vm://home/test/INBOX/<E1AyTpt-0000JR-LU@@sacha.ateneo.edu>][E-mail from Sacha Chua]]
4223 @end smallexample
4225 @file{planner-vm.el} does not define any interactive functions or
4226 keybindings.
4229 @node Wanderlust, MH-E, VM, E-mail
4230 @comment  node-name,  next,  previous,  up
4231 @subsection Wanderlust
4232 @cindex Wanderlust, using Planner with
4233 @cindex mail client, using Planner with, Wanderlust
4235 To use this module, make sure that @file{planner-wl.el} is in your
4236 load path and add this to your @file{.emacs} (or @file{_emacs}):
4238 @example
4239 (require 'planner-wl)
4240 @end example
4242 Then, when you call @kbd{M-x planner-create-task-from-buffer} from
4243 Wanderlust summary or message buffers, the task will be created with
4244 the correct annotation.
4246 @file{planner-wl} does not define any interactive functions.
4248 @subheading Keys
4250 To add keybindings to Wanderlust, call:
4252 @example
4253 (planner-wl-insinuate)
4254 @end example
4256 This binds @kbd{F} to @command{planner-create-task-from-buffer}.
4258 @node MH-E, Rmail, Wanderlust, E-mail
4259 @comment  node-name,  next,  previous,  up
4260 @subsection MH-E
4261 @cindex MH-E, using Planner with
4262 @cindex mail client, using Planner with, MH-E
4264 To use this module, make sure that @file{planner-mhe.el} is in your
4265 load path and add this to your @file{.emacs} (or @file{_emacs}):
4267 @example
4268 (require 'planner-mhe)
4269 @end example
4271 Then, when you call @kbd{M-x planner-create-task-from-buffer} from
4272 MH-E summary or message buffers, the task will be created with
4273 the correct annotation.
4275 @file{planner-mhe} does not define any interactive functions.
4277 @node Rmail,  , MH-E, E-mail
4278 @comment  node-name,  next,  previous,  up
4279 @subsection Rmail
4280 @cindex Rmail, using Planner with
4281 @cindex mail client, using Planner with, Rmail
4283 To use this module, make sure that @file{planner-rmail.el} is in your
4284 load path and add this to your @file{.emacs} (or @file{_emacs}):
4286 @example
4287 (require 'planner-rmail)
4288 @end example
4290 Rmail URLs are of the form:
4292 @example
4293 rmail://message-id
4294 @end example
4296 Annotations will be of the form:
4298 @smallexample
4299 [[rmail://<E1AyTpt-0000JR-LU@@sacha.ateneo.edu>][E-mail from Sacha Chua]]
4300 @end smallexample
4302 @file{planner-rmail.el} does not define any interactive functions or
4303 create any new keybindings.
4305 For more information about Rmail, see @inforef{Rmail, Reading Mail With
4306 Rmail, Emacs}.
4308 @node Scheduling and Time, Finances, E-mail, Managing Your Information
4309 @comment  node-name,  next,  previous,  up
4310 @section Scheduling and Time
4312 @menu
4313 * Diary::                       Using the Emacs diary: planner-diary.el
4314 * Appointments::                Appointments in plan pages: planner-appt.el
4315 * Timeclock::                   Time tracking: planner-timeclock.el
4316 * schedule.el::                 Project completion: planner-schedule.el
4317 @end menu
4320 @node Diary, Appointments, Scheduling and Time, Scheduling and Time
4321 @comment  node-name,  next,  previous,  up
4322 @subsection Diary
4323 @cindex diary, using Planner with
4324 @cindex @file{planner-diary.el}, using
4326 If you use Emacs's diary feature, Planner-Diary could be helpful for
4327 you. It puts all diary entries for the current day in the @samp{*
4328 Diary} section of your day plan page. This section is updated every
4329 time you display the file in Emacs. By default the diary section of
4330 past pages is not updated; it's pretty unlikely that you want to add
4331 new diary entries for the past. (@pxref{Diary, , , Emacs, GNU Emacs
4332 Manual})
4334 If you want to use @file{planner-diary.el}, make sure the file is in
4335 your load path and add this to your @file{.emacs} (or @file{_emacs}):
4337 @example
4338 (require 'planner-diary)
4339 @end example
4341 @file{planner-diary.el} needs @command{fancy-diary-display}.  To use
4342 @command{fancy-diary-display}, add this to your @file{.emacs} (or
4343 @file{_emacs}):
4345 @example
4346 (add-hook 'diary-display-hook 'fancy-diary-display)
4347 @end example
4349 You can use Planner-Diary in two different ways:
4351 @enumerate
4353 @item
4354 If you want the saved files to contain your entries and not just a line
4355 of Lisp, add the following lines to your @file{.emacs} (or @file{_emacs}):
4357 @example
4358 (setq planner-diary-use-diary t)
4359 (planner-diary-insinuate)
4360 @end example
4362 You should also customize or set @code{planner-day-page-template} to
4363 include a @samp{* Diary}:
4365 @example
4366 (setq planner-day-page-template
4367  "* Tasks\n\n\n* Schedule\n\n\n* Diary\n\n\n* Notes")
4368 @end example
4370 @item
4371 (GNU EMACS ONLY) You can put the following line of Lisp code in your
4372 day plan pages to display your diary entries:
4374 @example
4375 <lisp>(planner-diary-entries-here)</lisp>
4376 @end example
4378 You can do this automatically for all day plan pages:
4380 @smallexample
4381 (setq planner-day-page-template
4382   "* Tasks\n\n\n* Diary\n\n<lisp>(planner-diary-entries-here)</lisp>
4383 \n* Notes")
4384 @end smallexample
4386 When you open a day plan page outside Emacs, you will see the line of
4387 Lisp code and not your diary entries.
4389 @end enumerate
4391 If you want to see your diary entries for more than just one day, set
4392 @code{planner-diary-number-of-days} accordingly.  This works for either
4393 of the two approaches.
4395 @kbd{C-c C-e} updates the diary sections.  @kbd{C-u C-c C-e} forces an
4396 update---it inserts the diary section for the day, even if the day is in
4397 the past or if there is no @samp{Diary} section in the buffer.
4399 If you want to use the Cal-Desk package, simply follow the instructions
4400 in @file{cal-desk.el}.  If you get the Cal-Desk layout from the Calendar
4401 buffer, you get it in the day plan buffer, too.
4403 If you use Planner-Diary, you might consider using the Calendar support
4404 of Planner. (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}) To get
4405 Calendar integration, add this to your @file{.emacs} (or @file{_emacs}):
4407 @example
4408 (planner-insinuate-calendar)
4409 @end example
4411 If @code{planner-diary-create-section-flag} is non-nil, sections are
4412 always inserted if necessary.
4414 @cindex planner2diary.py, using
4415 If you want to import Planner entries into your Diary file, the
4416 @file{planner2diary.py} script will accomplish this for you.  To use it,
4417 execute @code{planner2diary.py} on the command line, specifying your
4418 planner directory as the first and only argument.
4420 @subheading Options
4422 @defopt planner-diary-create-section-flag
4423 Non-nil means create the requested diary sections if they do not
4424 exist. By default, planner-diary tries to create the section. If you
4425 want more control over your pages, you can set this to nil. Trying to
4426 write a diary section to a page that does not have it yet will then
4427 result in an error.
4428 @end defopt
4430 By default, planner-diary lists only the appointments you have on that
4431 day. If you want the date headers included even when showing the diary
4432 entries for a single day, set planner-diary-include-all-output to
4433 non-nil.
4435 @defopt planner-diary-include-all-output-flag
4436 Non-nil means don't omit any data when copying diary entries into day
4437 pages.
4438 @end defopt
4440 @subheading Functions
4442 @file{planner-diary.el} defines the following interactive functions:
4444 @defun planner-diary-add-entry date time text
4445 Prompt for a diary entry to add to @code{diary-file} on @var{date}.
4446 Uses @code{planner-annotation-functions} to make hyperlinks.
4447 @var{time} and @var{text} are used in the description."
4448 @end defun
4450 @defun planner-diary-insert-diary force
4451 Insert the fancy diary for the day into the day plan file. If
4452 @var{force} is non-nil, insert a diary section even if there is no
4453 @var{planner-diary-string} in the buffer.
4454 @end defun
4456 @defun planner-diary-insert-diary-maybe force
4457 Maybe insert the fancy diary for the day into the day plan file. If the
4458 current day is in the past and @var{force} is nil, don't do anything. If
4459 @var{force} is non-nil, insert a diary section even if there is no
4460 @code{planner-diary-string} in the buffer.
4461 @end defun
4463 @defun planner-diary-insert-appts force
4464 Insert the diary appointments for the day into the day plan file.  If
4465 @var{force} is non-nil, insert a diary appointments section even if
4466 there is no @code{planner-diary-appts-string} in the buffer.
4467 @end defun
4469 @defun planner-diary-insert-appts-maybe force
4470 Maybe insert the diary appointments for the day into the day plan file.
4471 If the current day is in the past and @var{force} is nil, don't do
4472 anything.  If @var{force} is non-nil, insert a diary appointments
4473 section even if there is no @code{planner-diary-appts-string} in the
4474 buffer.
4475 @end defun
4477 @defun planner-diary-insert-cal-desk force
4478 Insert the cal-desk diary for the day into the day plan file.  If
4479 @var{force} is non-nil, insert a cal-desk diary section even if there is
4480 no @code{planner-diary-cal-desk-string} in the buffer.
4481 @end defun
4483 @defun planner-diary-insert-cal-desk-maybe force
4484 Maybe insert the cal-desk diary for the day into the day plan file.  If
4485 the current day is in the past and @var{force} is nil, don't do
4486 anything.  If @var{force} is non-nil, insert a cal-desk appointments
4487 section even if there is no @code{planner-diary-cal-desk-string} in the
4488 buffer.
4489 @end defun
4491 @defun planner-diary-insert-public force
4492 Insert the public diary for the day into the day plan file.  If
4493 @var{force} is non-nil, insert a public diary section even if there is
4494 no @code{planner-diary-public-string} in the buffer.
4495 @end defun
4497 @defun planner-diary-insert-public-maybe force
4498 Maybe insert the public diary for the day into the day plan file.  If
4499 the current day is in the past and @var{force} is nil, don't do
4500 anything.  If @var{force} is non-nil, insert a public appointments
4501 section even if there is no @code{planner-diary-public-string} in the
4502 buffer.
4503 @end defun
4505 @defun planner-diary-insert-private force
4506 Insert the private diary for the day into the day plan file.  If
4507 @var{force} is non-nil, insert a private diary section even if there is
4508 no @code{planner-diary-private-string} in the buffer.
4509 @end defun
4511 @defun planner-diary-insert-private-maybe force
4512 Maybe insert the private diary for the day into the day plan file.  If
4513 the current day is in the past and @var{force} is nil, don't do
4514 anything.  If @var{force} is non-nil, insert a private appointments
4515 section even if there is no @code{planner-diary-private-string} in the
4516 buffer.
4517 @end defun
4519 @defun planner-diary-insert-all-diaries force
4520 Update all diary sections in a day plan file.  If @var{force} is
4521 non-nil, insert a diary section even if there is no section header.  It
4522 only inserts diaries if the corresponding @code{planner-diary-use-}*
4523 variable is @samp{t}.
4524 @end defun
4526 @defun planner-diary-insert-all-diaries-maybe force
4527 Update all diary sections in a day plan file.  If the current day is in
4528 the past and @var{force} is nil, don't do anything.  If @var{force} is
4529 non-nil, insert a diary section even if there is no section header.  It
4530 only inserts diaries if the corresponding @code{planner-diary-use-}*
4531 variable is @samp{t}.
4532 @end defun
4534 @defun planner-diary-show-day-plan-or-diary
4535 Show the day plan or diary entries for the date under point in calendar.
4536 Add this to @code{calendar-move-hook} if you want to use it.  In that
4537 case, you should also @command{remove-hook} @samp{planner-calendar-show}
4538 from @code{calendar-move-hook}.
4539 @end defun
4541 @subheading Keys
4543 @file{planner-diary.el} adds the following keybinding to Planner, if
4544 @command{planner-diary-insinuate} is in your @file{.emacs} (or
4545 @file{_emacs}):
4547 @itemize
4549 @item
4550 @kbd{C-c C-e} updates the diary sections.
4552 @end itemize
4554 @menu
4555 * Planner-Diary Advanced Features::  
4556 @end menu
4558 @node Planner-Diary Advanced Features,  , Diary, Diary
4559 @comment  node-name,  next,  previous,  up
4560 @subsubsection Planner-Diary Advanced Features
4561 @cindex diary, using Planner with
4562 @cindex @file{planner-diary.el}, advanced features
4564 The features described here are part of the development version.  They
4565 are subject to change without notice.  They may be buggy.  The
4566 documentation may be inaccurate.  Use at your own risk.
4568 There is a lot of code redundancy in the development version.  This is
4569 intentional and makes it easier to change the code for one type of diary
4570 section without breaking others.
4572 @subheading Diary views
4574 @cindex @file{planner-diary.el}, views
4575 Currently Planner-Diary supports six different views of your diary
4576 entries:
4578 @enumerate
4579 @item
4580 Ordinary fancy diary display (what you get by pressing @kbd{d} in the
4581 calendar buffer with @code{fancy-diary-display} switched on)
4583 @item
4584 Schedule/Appointments (all entries from 1 that have a time assigned to
4585 them
4587 @item
4588 Diary without appts (1 without 2)
4590 @item
4591 cal-desk display (appts on top, non appts entries at bottom)
4593 @item
4594 A private diary (same as 1, but uses a different diary-file)
4596 @item
4597 A public diary (same as 1, but uses a different diary-file)
4598 @end enumerate
4600 Put the following line of Lisp code in your day plan pages to display
4601 your diary entries:
4603 @example
4604 <lisp>(planner-diary-entries-here)</lisp>
4605 @end example
4607 The function @code{planner-diary-entries-here} takes two optional
4608 arguments---the diary file you want to use and the number of days you
4609 want to display.
4611 @subheading Exporting Planner-specific Diary files
4613 @cindex @file{planner-diary.el}, exporting entries
4614 If you would like to export diary entries from your Planner pages to
4615 separate Diary files, add @code{(require 'planner-export-diary)} to your
4616 config.  The following steps describe the usage of the functions and
4617 options contained in this file.
4619 @enumerate
4621 @item
4622 Customize @code{planner-export-diary-file}.  The default value is
4623 ``~/diary.planner''.
4625 @item
4626 Add the following line to your main Diary file (default: ``~/diary'').
4628 @example
4629 #include ~/diary.planner
4630 @end example
4632 @item
4633 Then, call @command{M-x planner-export-diary-future} whenever you want
4634 future diary entries published. You can automatically publish entries by
4635 adding either of the following to your .emacs.
4637 @itemize
4639 @item (planner-export-diary-future)
4640 Publish future entries on startup.
4642 @item (add-hook 'planner-mode-hook 'planner-export-diary-setup)
4643 Publish future entries whenever you save a Planner file.
4645 @end itemize
4647 @end enumerate
4649 @node Appointments, Timeclock, Diary, Scheduling and Time
4650 @comment  node-name,  next,  previous,  up
4651 @subsection Appointments
4652 @cindex appointments
4653 @cindex @file{planner-appt.el}, using
4655 If you would like to use planner for your appointment alerts
4656 instead of using the diary system, you might like to try
4657 @file{planner-appt}.
4659 According to your preferences, you may choose from two different
4660 approaches. Appointments in task descriptions on today's plan
4661 page are like this:
4663 @example
4664 #A   _ @@12:45 Do something (TaskPool)
4665 @end example
4667 @noindent
4668 and appointments in today's schedule section are like this:
4670 @example
4671 * Schedule
4673   9:00 | 12:00 | Read Simmel's Philosophy of Money
4674 @@12:45 |       | Do Something Else
4675 @@13:00 | 14:00 | lunch
4676 @end example
4678 @noindent
4679 You can even use both at the same time if you like.
4681 @c Jim Ottaway <j.ottaway@lse.ac.uk>: Changed these kinds of heading
4682 @c back to @unnumberedsec, but left the originals commented out in
4683 @c case there was a good reason for the @strong formatting.
4685 @c @noindent
4686 @c @strong{Usage}
4687 @unnumberedsubsubsec Usage
4689 In the file where you configure Planner, add one of the following.
4691 @itemize
4692 @item
4693 For task-based appointments: @code{(planner-appt-use-tasks)}
4694 @item
4695 For schedule-based appointments: @code{(planner-appt-use-schedule)}
4696 @item
4697 For both task- and schedule-based appointments:
4698 @code{(planner-appt-use-tasks-and-schedule)}
4699 @end itemize
4701 @noindent
4702 And finally if you want everything to be updated automatically add:
4704 @example
4705 (planner-appt-insinuate)
4706 @end example
4708 If you don't want to do the insinuation then you can call:
4710 @example
4711 M-x planner-appt-update
4712 @end example
4714 @noindent
4715 after editing appointments on the page (note that this is not
4716 necessary if you use tasks for the appointments and you don't edit
4717 the task descriptions outside of @code{planner-edit-task-description}).
4719 Try both methods; if you find that you prefer one over the
4720 other, use one of the specific @code{planner-appt-use-} functions, as
4721 there are some performance gains when using one method exclusively.
4723 @menu
4724 * Task-based Appointments::     
4725 * Schedule-based Appointments::  
4726 * Viewing Appointments::        
4727 * Appointment Updating on Save::  
4728 * Appointment and Calendar Integration::  
4729 * Appointment Hooks::           
4730 @end menu
4733 @node Task-based Appointments, Schedule-based Appointments, Appointments, Appointments
4734 @comment  node-name,  next,  previous,  up
4735 @subsubsection Task-based Appointments
4736 @cindex appointments, task-based
4737 @cindex task-based appointments
4739 A task has an appointment if it looks like this:
4741 @example
4742 #A   _ @@12:45 Do something (TaskPool)
4743 @end example
4745 @noindent
4746 i.e., if it has @@ followed by a time at the beginning.  This means
4747 the task is a regular appointment, and will not be carried forward
4748 at the start of a new day.
4750 Alternatively, it may have a !, like this:
4752 @example
4753 #A   _ !12:45 Do something else (TaskPool)
4754 @end example
4756 @noindent
4757 This makes it a "nagging" appointment, which @emph{will} be carried
4758 forward.  It will, however, lose the appointment time in the
4759 process.
4761 This may seem like a strange feature, but here is Henrik's
4762 reasoning:
4764 @quotation
4765 Sometimes I have a task that I want to do at a certain time, so I
4766 make it an appointment.  If I don't get around to doing it anyway,
4767 I want it to be carried forward.  Basically, I sometimes use
4768 appointments on tasks to annoy me until I get them done. :)
4769 @end quotation
4771 You can edit, move and delete tasks with the usual functions, and
4772 appointments will be updated automatically.
4774 You can update all task appointments on your page with
4776 @example
4777 M-x planner-appt-update
4778 @end example
4780 @c @noindent
4781 @c @strong{Cyclic Entries}
4783 @unnumberedsubsubsec Cyclic Entries
4784 @cindex appointments, cyclic task entries
4786 If you have @file{planner-cyclic} (@pxref{Cyclic Tasks}) loaded, entries
4787 in your cyclical tasks file such as
4789 @example
4790 Friday #A _ @@12:45 staff meeting
4791 @end example
4793 @noindent
4794 will appear every Friday and there will be an appointment alert set
4797 @c @noindent
4798 @c @strong{Appointments Section}
4799 @unnumberedsubsubsec Appointments Section
4800 @cindex appointments, appointments section
4802 You can have all task-based appointments copied to a separate section,
4803 providing an overview of your appointments.
4805 To do this, add
4807 @example
4808 (setq planner-appt-task-use-appointments-section-flag t)
4809 @end example
4811 @noindent to your configuration, or use @kbd{M-x customize-variable}.
4813 The variable @code{planner-appt-task-appointments-section} is the name
4814 of the section where the appointments will be copied.  By default, it is
4815 set to @code{"Schedule"}, which means that task appointments will be
4816 intermingled with schedule entries.
4818 It is also a good idea to add the section you wish to use to
4819 @code{planner-day-page-template} in order to control where that section
4820 will appear on the page (otherwise it will appear at the top).
4822 The format of the appointments follows that of a schedule; if you
4823 don't like the way it looks, you can write something different and set
4824 @code{planner-appt-format-appt-section-line-function} appropriately.
4825 See the documentation for
4826 @code{planner-appt-format-appt-section-line-function} for details.  It
4827 should be fairly easy to see what needs to be done if you look at the
4828 source for the default function (which is
4829 @code{planner-appt-format-appt-section-line}).
4831 If the section specified in
4832 @code{planner-appt-task-appointments-section} is the same as the
4833 schedule section specified in @code{planner-appt-schedule-section} (by
4834 default @code{"Schedule"}), the default formatting function adds a
4835 @samp{#} to the description so that one can visually distinguish
4836 appointments from the task list from those that have been added to the
4837 schedule.
4839 @node Schedule-based Appointments, Viewing Appointments, Task-based Appointments, Appointments
4840 @comment node-name,  next,  previous,  up
4841 @subsubsection Schedule-Based Appointments
4842 @cindex appointments, schedule-based
4843 @cindex schedule-based appointments
4845 Some scheduled tasks require reminders, others don't.  In this
4846 schedule:
4848 @example
4849 * Schedule
4851 9:00   | 12:00 | Read Simmel's Philosophy of Money
4852 @@12:45          Do Something Else
4853 @@13:00 | 14:00 | lunch
4854 @@14:30 |       | Meet jrs to discuss his dissertation
4855 @@16:00           Test Society seminar
4856 18:00            go home
4857 @end example
4859 @noindent
4860 those that have an @@ prefix will be added to the appointment
4861 reminder list; the others will not.  The formats that are
4862 recognized are fairly flexible, as you can see from the example.
4864 If you change your schedule, you can update the appointment list
4865 with
4867 @example
4868 M-x planner-appt-update
4869 @end example
4871 @noindent You can also have the schedule sorted as part of the update,
4872 if you have this in your configuration:
4874 @example
4875 (setq planner-appt-sort-schedule-on-update-flag t)
4876 @end example
4878 @c @noindent 
4879 @c @strong{Cyclical Entries}
4880 @unnumberedsubsubsec Cyclical Entries
4881 @cindex appointments, cyclic schedule entries
4883 You can also have cyclical schedule entries(@pxref{Cyclic Tasks}) if you
4886 @example
4887 (planner-appt-schedule-cyclic-insinuate)
4888 @end example
4890 @noindent to your configuration.
4892 If you put an entry in your cyclical task file like this
4894 @example
4895 Friday @@12:45 | 13:45 | Staff Meeting
4896 @end example
4898 @noindent
4899 then it will appear in your schedule every Friday, and an
4900 appointment alert will be set up.
4902 @node Viewing Appointments, Appointment Updating on Save, Schedule-based Appointments, Appointments
4903 @comment  node-name,  next,  previous,  up
4904 @subsubsection Viewing Appointments
4905 @cindex appointments, viewing
4907 The command @command{planner-appt-show-alerts} will show all appointment
4908 alerts currently scheduled.
4910 @subheading Functions
4912 There are two commands that show appointments in the future; the one
4913 displays them in a pop-up buffer, the other puts the information into
4914 the current day page.
4916 @deffn {Command} planner-appt-forthcoming-display &optional days
4917 Display a buffer of appointments for today and the next
4918 @var{days}. Optional prefix argument @var{days} is the number of days
4919 ahead to look. Its default value is defined by
4920 @code{planner-appt-forthcoming-days}.
4921 @end deffn
4923 @deffn {Command} planner-appt-forthcoming-update-section &optional days
4924 In today's plan page, add or update a list of forthcoming
4925 appointments. Optional prefix argument @var{days} is the number of
4926 days ahead to look. Its default value is defined by
4927 @code{planner-appt-forthcoming-days}.  The section heading to use is
4928 defined by @code{planner-appt-forthcoming-appt-section}.
4929 @end deffn
4931 @subheading Options
4933 @defopt planner-appt-forthcoming-days
4934 The number of days to look ahead for forthcoming appointments.  The
4935 default value is seven days.
4936 @end defopt
4938 @defopt planner-appt-forthcoming-appt-section
4939 The name of the section to use for inserting a list of forthcoming
4940 appts.  The default value is @code{"Forthcoming Appointments"}.
4941 @end defopt
4943 @defopt planner-appt-forthcoming-show-day-names-flag
4944 When non-nil (the default), day names will be shown in forthcoming
4945 appointments.
4946 @end defopt
4948 @defopt planner-appt-forthcoming-repeat-date-string
4949 String to insert for repeated dates.
4951 When there are multiple appointments for a date, the date is inserted
4952 in the first appointment and the others have this string in their date
4953 cell.
4955 If the string consists of anything other than whitespace, then a link
4956 to the day page for the appoinment is created.
4957 @end defopt
4959 @defopt planner-appt-forthcoming-look-at-cyclic-flag
4960 When non-nil, find forthcoming appointments in the cyclic diary file
4961 (@pxref{Cyclic Tasks}) as well as in plan pages. Default is @samp{t}.
4962 @end defopt
4964 @node Appointment Updating on Save, Appointment and Calendar Integration, Viewing Appointments, Appointments
4965 @comment  node-name,  next,  previous,  up
4966 @subsubsection Appointment Updating on Save
4967 @cindex appointments, updating on save
4969 @subheading Options
4971 @defopt planner-appt-update-appts-on-save-flag
4972 When non-nil, update appointment reminders whenever today's plan page is
4973 saved. Default value is @samp{nil}.
4974 @end defopt
4976 @node Appointment and Calendar Integration, Appointment Hooks, Appointment Updating on Save, Appointments
4977 @comment  node-name,  next,  previous,  up
4978 @subsubsection Appointment and Calendar Integration
4980 Not strictly part of appointment handling, but if one isn't using
4981 the diary, marking dates with plan pages seems to make sense.
4983 @subheading Functions
4985 @defun planner-appt-calendar-insinuate
4986 Add a hook to diary display so that dates in the calendar that have day
4987 pages are highlighted
4988 @end defun
4990 @node Appointment Hooks,  , Appointment and Calendar Integration, Appointments
4991 @comment  node-name,  next,  previous,  up
4992 @subsubsection Appointment Hooks
4994 @subheading Options
4996 @defvr {Hook} planner-appt-update-hook
4997 Hook run after @code{planner-appt-update} has updated the appointment
4998 list.
4999 @end defvr
5001 @node Timeclock, schedule.el, Appointments, Scheduling and Time
5002 @comment  node-name,  next,  previous,  up
5003 @subsection Timeclock
5004 @cindex @file{planner-timeclock.el}, using
5005 @cindex @file{planner-timeclock-summary.el}, using
5006 @cindex @file{planner-timeclock-summary-proj.el}, using
5007 @cindex timeclock, using Planner with
5009 This module allows you to clock in and clock out of your projects
5010 (@pxref{Time Intervals, , , Emacs, GNU Emacs Manual}). You can also
5011 generate reports with the @code{<timeclock-report>} tag. You may want
5012 to read the @ref{Keeping Track of Time} page to see how you can use
5013 planner-timeclock to produce detailed reports.
5015 @file{timeclock.el} is part of GNU Emacs.  If you are using XEmacs,
5016 please use the version of @file{timeclock.el} the comes with Planner in
5017 the @file{contrib} directory.
5019 With @file{planner-timeclock.el} loaded,
5020 @command{planner-task-in-progress} clocks in a task.  To clock out,
5021 use @command{planner-task-done} or @command{timeclock-out}.
5023 @file{planner-timeclock.el} defines the following keybindings:
5025 @itemize
5026 @item @kbd{C-c C-i}: @code{planner-task-in-progress}.
5027 @item @kbd{C-c C-o}: @code{timeclock-out}.
5028 @item @kbd{C-c C-T C-i}: @code{planner-timeclock-in}. (XEmacs)
5029 @item @kbd{C-c C-T C-o}: @code{timeclock-out}. (XEmacs)
5030 @item @kbd{C-c C-S-t C-i}: @code{planner-timeclock-in}. (GNU Emacs)
5031 @item @kbd{C-c C-S-t C-o}: @code{timeclock-out}. (GNU Emacs)
5032 @end itemize
5034 If you use @code{timeclock} a lot, you may also be interested in
5035 Dryice Liu's @file{planner-timeclock-summary.el}, which produces
5036 timeclock reports for planner files.
5038 Here is a sample report:
5040 @example
5041 Project               |     Time| Ratio| Task
5042 PlannerMaintenance    |  0:03:58|  1.1%| Merge doc patch
5043                       |  0:17:09|  5.0%| Track down subdirectories
5044                       |  0:18:11|  5.3%| Merge planner-timeclock-summary-proj.el
5045                Total: |  0:39:18| 11.4%|
5046 JapanCaseStudy        |  2:37:56| 45.6%| Prototype search result page
5047                       |  0:31:50|  9.2%| Update design documents
5048                Total: |  3:09:46| 54.8%|
5049 ChristmasLetter       |  1:46:37| 30.8%| Write and send my Christmas letters
5050                Total: |  1:46:37| 30.8%|
5051 LinuxPeople           |  0:10:29|  3.0%| Send questions for Linux in Education
5052                Total: |  0:10:29|  3.0%|
5053 @end example
5055 If you add @code{(require 'planner-timeclock-summary)} to your
5056 @file{~/.emacs}, you can then use it in two ways.
5058 @itemize
5060 @item Display a temporary buffer
5062 Call @code{planner-timeclock-summary-show} and Emacs will ask you which
5063 day's summary do you want. Choose the date as anywhere else of
5064 Emacs planner, and a tempory buffer will be displayed with the
5065 timeclock summary of that day.
5067 To review tasks over a date range, use
5068 @code{planner-timeclock-summary-show-range}. You can use a regexp or a
5069 function to filter tasks by calling
5070 @code{planner-timeclock-summary-show-range-filter}.
5072 @item Rewrite sections of your planner
5074 Choose this approach if you want timeclock summary to be in their
5075 own section and you would like them to be readable in your plain
5076 text files even outside Emacs. Caveat: The timeclock summary
5077 section should already exist in your template and will be rewritten
5078 when updated. Tip: Add @code{planner-timeclock-summary-section}
5079 (default: @samp{"Timeclock"}) to your @code{planner-day-page-template}.
5081 To use, call @code{planner-timeclock-summary-update} in the planner
5082 day page to update the section. If you want rewriting to be
5083 automatically performed, call
5084 @code{planner-timeclock-summary-insinuate} in your @file{.emacs} file.
5085 @end itemize
5087 @file{planner-timeclock-summary-proj.el} produces task / time
5088 breakdowns on plan pages. Reports are of the form:
5090 @example
5091 TASK 0 | duration
5092 TASK 1 | duration
5093  TOTAL | duration.
5094 @end example
5096 To use, add @code{(require 'planner-timeclock-summary)} to your
5097 @file{~/.emacs}. Call @code{planner-timeclock-summary-proj-current}
5098 from a project page. The report is inserted at the current position in
5099 the buffer. The function @code{planner-timeclock-summary-proj-section}
5100 does the same but the report is inserted inside a section called
5101 @samp{* Report}.
5103 @node schedule.el,  , Timeclock, Scheduling and Time
5104 @comment  node-name,  next,  previous,  up
5105 @subsection @file{schedule.el}
5106 @cindex @file{planner-schedule.el}, using
5107 @cindex @file{schedule.el}, using Planner with
5109 @file{planner-schedule.el} allows you to project task completion time.
5110 Tasks should be of the form:
5112 @example
5113 #A0 _ 2h Do something
5114 #B0 _ 1h30m Do something
5115 #B0 _ 2d Do something
5116 #B0 _ 2w Do something
5117 #B0 _ 10s Do something
5119 s: seconds, m: minutes, h: hours, d: days, w: weeks
5120 @end example
5122 @file{schedule.el} is included with Planner in the @file{contrib}
5123 directory, but you can alternatively get it from
5124 @url{http://www.newartisans.com/johnw/Emacs/schedule.el} if desired.
5126 @file{schedule.el} provides a single Lisp function,
5127 @code{schedule-completion-time}. It takes an Emacs time object and a
5128 quantity of seconds. It returns an Emacs time object that represents
5129 when the given number of seconds will be completed, assuming that work
5130 can only be done during work hours.
5132 The available work hours are affected by several factors:
5134 @enumerate
5136 @item
5137 If @file{timeclock.el} is being used, the amount of time left in the
5138 current work day (@code{timeclock-workday-remaining})
5139 (@pxref{Time Intervals, , , Emacs, GNU Emacs Manual})
5141 @item
5142 The amount of time in each work day (@code{schedule-workday})
5144 @item
5145 The definition of a work week (@code{schedule-week})
5147 @item
5148 Any holidays defined in the Emacs calendar
5149 (@pxref{Holidays, , , Emacs, GNU Emacs Manual})
5151 @item
5152 Any appointments in the Emacs diary
5153 (@pxref{Appointments, , , Emacs, GNU Emacs Manual})
5155 @end enumerate
5157 Taking all of the ``block out'' periods into account,
5158 @code{schedule-completion-time} will compute when the given number of
5159 seconds will be done, based on your current definitions of time
5160 available.
5162 As an example, here's a function which, given a list of durations
5163 in seconds, will return a list of completion times starting from
5164 the current moment:
5166 @example
5168   (defun compute-completion-times (&rest durations)
5169     ``Compute completion times for a list of DURATIONS (in seconds).''
5170     (let ((now (current-time)))
5171       (mapcar
5172        (function
5173         (lambda (dura)
5174           (setq now (schedule-completion-time now dura))))
5175        durations)))
5177 @end example
5179 To call this function, do:
5181 @example
5183 (compute-completion-times 3600 7200 3600)
5185 @end example
5187 @subheading Keys
5189 @file{planner-schedule.el} defines the following keybindings:
5191 @kbd{C-c RET} is bound to @command{planner-schedule-show-end-project}.
5192 @kbd{C-c C-m} is also bound to
5193 @command{planner-schedule-show-end-project}.
5195 In XEmacs, @command{planner-schedule-show-end-project} is bound to
5196 @kbd{C-c C-T c-e} and @kbd{C-c C-S-t C-e}.
5198 @subheading Functions
5200 @file{planner-schedule.el} defines the following interactive
5201 functions:
5203 @defun planner-schedule-show-end-project
5204 Display the estimated project completion time.
5205 @end defun
5207 @file{schedule.el} does not define any interactive functions, or
5208 keybindings.
5210 @node Finances, Contacts and Conversations, Scheduling and Time, Managing Your Information
5211 @comment  node-name,  next,  previous,  up
5212 @section Finances
5213 @cindex finances
5215 Currently, Planner provides one module dedicated to tracking your
5216 finances. This module works with a program called Ledger.
5218 @menu
5219 * Ledger::                      Personal finances: planner-ledger.el
5220 @end menu
5222 @node Ledger,  , Finances, Finances
5223 @comment  node-name,  next,  previous,  up
5224 @subsection Ledger
5225 @cindex finances
5226 @cindex @file{planner-ledger.el}, using
5227 @cindex @file{ledger}, using Planner with
5229 @file{planner-ledger.el} provides integration between planner and John
5230 Wiegley's ledger accounting program, which can be found at
5231 @url{http://newartisans.com/johnw/ledger.tar.gz}.
5233 To use planner-ledger to insert a ledger balance overview and a list
5234 of pending transactions into planner day pages, make sure that your
5235 day page includes sections that match
5236 @code{planner-ledger-balance-regexp} and
5237 @code{planner-ledger-pending-regexp}. Example:
5239 @example
5240 * Tasks
5242 * Ledger
5244 ** Pending transactions
5246 * Notes
5248 @end example
5250 You can manually update ledger sections with the
5251 @command{planner-ledger-insert-maybe} command.
5253 You can also automatically update ledger sections with the following
5254 hook:
5256 @example
5257 (add-hook 'planner-goto-hook 'planner-ledger-insert-maybe)
5258 @end example
5260 You can create ledger entries from specially-formatted tasks using
5261 @command{planner-ledger-add-entry-from-task}.  Tasks should be of the
5262 form @samp{payment due: payee, amount [comment]}.  Example:
5264 @example
5265 #A1 _ payment due: foobar, $1000.00 some comment here
5266 #A2 _ payment due: baz, 1000.00
5267 @end example
5269 @subheading Options
5271 @defopt planner-ledger-balance-accounts
5272 List of accounts to be included or excluded from the balance overview.
5273 @samp{+} includes all matching accounts, and @samp{-} excludes
5274 matching accounts.  See the documentation for
5275 @command{ledger-run-ledger} for more details.
5276 @end defopt
5278 @defopt planner-ledger-balance-regexp
5279 Regular expression matching section for ledger balance.  Do not store
5280 other data in this section, as it will be overwritten.
5281 @end defopt
5283 @defopt planner-ledger-pending-regexp
5284 Regular expression matching section for ledger balance.  Do not store
5285 other data in this section, as it will be overwritten.
5286 @end defopt
5288 @defopt planner-ledger-payment-task-regexp
5289 Regular expression matching special ledger tasks.
5290 @end defopt
5292 @subheading Functions
5294 @defun planner-ledger-insert-maybe
5295 Update any ledger sections on the current page.
5296 @end defun
5298 @defun planner-ledger-add-entry-from-task
5299 Create a ledger entry based on the task at point.  Task should match
5300 @code{planner-ledger-payment-task-regexp}.
5301 @end defun
5303 @node Contacts and Conversations, Tracking Research and Resources, Finances, Managing Your Information
5304 @comment  node-name,  next,  previous,  up
5305 @section Contacts and Conversations
5306 @cindex contacts
5307 @cindex conversations
5309 Planner has two modules available for keeping track of contact and
5310 conversation information. The first uses the Big Brother Database
5311 (BBDB), and the second uses Emacs Relay Chat (ERC). BBDB is a full
5312 contact database. ERC is a client for chatting online on Internet Relay
5313 Chat (IRC) networks. The ERC module for Planner will help you keep
5314 track of online conversations you have if you use ERC for those
5315 conversations, but does not by itself store contact information other
5316 than the time you had the conversation, the network and channel you were
5317 on when you had it, and maybe who you had it with. If you are looking
5318 for a way to manage your full address book, then @file{planner-bbdb.el}
5319 in combination with BBDB is what you are looking for.
5321 @menu
5322 * BBDB::                        Contacts: planner-bbdb.el
5323 * Emacs Relay Chat::            Internet Relay Chat: planner-erc.el
5324 @end menu
5326 @node BBDB, Emacs Relay Chat, Contacts and Conversations, Contacts and Conversations
5327 @comment  node-name,  next,  previous,  up
5328 @subsection BBDB
5329 @cindex @file{planner-bbdb.el}, using
5330 @cindex BBDB, using Planner with
5332 @file{planner-bbdb.el} allows you to refer to your contacts easily
5333 from within a planner page. @inforef{Top, the BBDB Manual, bbdb}.
5335 @samp{[[bbdb://Sacha.*Chua][Sacha]]}, for example, will be linked to
5336 the blog, web or net fields of the first matching BBDB record.
5338 @file{planner-bbdb.el} does not define any interactive functions, or
5339 keybindings.
5341 @node Emacs Relay Chat,  , BBDB, Contacts and Conversations
5342 @comment  node-name,  next,  previous,  up
5343 @subsection Emacs Relay Chat
5344 @cindex @file{planner-erc.el}, using
5345 @cindex ERC, using Planner with
5346 @cindex Emacs Relay Chat, using Planner with
5347 @cindex IRC, using Planner with
5348 @cindex Internet Relay Chat, using Planner with
5350 To use planner-erc, place @file{planner-erc.el} in your load path
5351 and add this to your @file{.emacs} (or @file{_emacs}):
5353 @example
5355 (require 'planner-erc)
5357 @end example
5359 IRC URLs may be of the following forms.
5361 @example
5362 irc://server/nick,isnick
5363 irc://server/#channel
5364 irc://server
5365 @end example
5367 Annotations will be in the following forms.
5369 @example
5370 [[irc://server/nick,isnick][Chat with nick on server#channel]]
5371 [[irc://server/nick,isnick][Chat with nick on server]]
5372 [[irc://server/#channel][Chat on server#channel]]
5373 [[irc://server][Chat on server]]
5374 @end example
5376 @file{planner-erc.el} does not define any interactive functions, or
5377 keybindings.
5379 @node Tracking Research and Resources, Tracking Development, Contacts and Conversations, Managing Your Information
5380 @comment  node-name,  next,  previous,  up
5381 @section Tracking Research and Resources
5383 Planner provides three modules for keeping track of information
5384 involving three specific tools: w3m, BibTeX, and @file{bookmark.el}.
5386 @menu
5387 * W3m::                         Web browser: planner-w3m.el
5388 * BibTeX::                      Bibliographies: planner-bibtex.el
5389 * Bookmark::                    Bookmarks: planner-bookmark.el
5390 @end menu
5392 @node W3m, BibTeX, Tracking Research and Resources, Tracking Research and Resources
5393 @comment node-name,  next,  previous,  up
5394 @subsection W3m
5395 @cindex @file{planner-w3m.el}, using
5396 @cindex w3m, using Planner with
5398 This module allows you to create tasks from a w3m buffer.
5400 @file{planner-w3m.el} does not define any interactive functions, or
5401 keybindings.
5403 @node BibTeX, Bookmark, W3m, Tracking Research and Resources
5404 @comment node-name,  next,  previous,  up
5405 @subsection BibTeX
5406 @cindex @file{planner-bibtex.el}, using
5408 BibTeX URLs are of the form @samp{bibtex:file/name:key}.
5410 @file{planner-bibtex.el} does not define any interactive functions.
5412 @node Bookmark,  , BibTeX, Tracking Research and Resources
5413 @comment  node-name,  next,  previous,  up
5414 @subsection Bookmark
5415 @cindex bookmarks
5416 @cindex @file{bookmark.el}, using Planner with
5417 @cindex @file{planner-bookmark.el}, using
5419 @file{planner-bookmark.el} uses the @file{remember} package to create a
5420 note whenever you create a bookmark (see @inforef{Bookmarks, Bookmarks,
5421 Emacs}). For more information about @file{remember}, please check out
5423 @itemize
5424 @item
5425 @uref{http://www.emacswiki.org/cgi-bin/wiki/RememberMode} -
5426 EmacsWiki.org page
5427 @item
5428 @uref{http://sacha.free.net.ph/notebook/doc/dev/remember/remember.html}
5429 - Online info documentation
5430 @end itemize
5432 Configure remember according to the instructions in
5433 @file{remember-planner.el} so that notes are saved to your planner
5434 pages.
5436 @defopt planner-bookmark-take-note-after-set-bookmark-flag
5437 Non-nil means show a @code{remember} buffer after setting a new
5438 bookmark.
5439 @end defopt
5441 When you create a bookmark, Emacs will open a buffer for your notes.
5442 @kbd{C-c C-c} saves the buffer to today's page. If you don't want to
5443 save a note, you can kill the buffer.
5445 Bookmark URLs are of the form @samp{bookmark://bookmark-name}.
5447 @file{planner-bookmark.el} does not define any interactive functions.
5449 @node Tracking Development,  , Tracking Research and Resources, Managing Your Information
5450 @comment  node-name,  next,  previous,  up
5451 @section Tracking Development
5452 @cindex version control, using Planner with
5454 Planner has three modules geared toward programmers. Two modules deal
5455 with version control and integrating information from those projects
5456 into the planner page. One module deals with the Gnats bug-tracking
5457 system.
5459 @menu
5460 * Log Edit::                    Changelogs: planner-log-edit.el
5461 * PSVN::                        svn changesets: planner-psvn.el
5462 * XTLA::                        TLA changesets: planner-xtla.el
5463 * Gnats::                       Gnats: The GNU bug reporting system
5464 @end menu
5466 @node Log Edit, PSVN, Tracking Development, Tracking Development
5467 @comment  node-name,  next,  previous,  up
5468 @subsection Log Edit
5469 @cindex cvs, using Planner with
5470 @cindex @file{planner-log-edit}, using
5471 @cindex version control, using Planner with
5473 This module allows you to automatically record CVS (and VC) commits
5474 in today's page.
5476 You can load the module with @code{(require 'planner-log-edit)}. When
5477 you load the module, @code{planner-log-edit-add-note} will be added to
5478 @code{log-edit-done-hook}.  A note containing the text of the commit
5479 and optionally a list of modified files will be added to today's page
5480 if you use the the Emacs version control interface. (@pxref{Version
5481 Control, , , Emacs, GNU Emacs Manual})
5483 @subheading Options
5485 @defopt planner-log-edit-include-files-flag
5486 Non-nil means include a list of committed files in the note.
5487 @end defopt
5489 @defopt planner-log-edit-notice-commit-function
5490 Non-nil means include a list of committed files in the note. If you
5491 want to enable this feature for some projects but not for others, set
5492 this to a function that returns t only for the commits you want to
5493 note.
5494 @end defopt
5496 @file{planner-log-edit.el} does not define any interactive functions.
5498 @node PSVN, XTLA, Log Edit, Tracking Development
5499 @comment  node-name,  next,  previous,  up
5500 @subsection PSVN
5501 @cindex PSVN
5502 @cindex @file{planner-psvn.el}, using
5504 This file allows you to refer to your svn changesets easily from within
5505 a Planner page.  You can load the module with @code{(require
5506 'planner-psvn)}.
5508 PSVN URLs are of the form
5509 @samp{psvn://http://my.svn-repos.at/svn/project1/trunk@@39}
5511 Additionally there is functionality to generate a note for your commits
5512 via subversion: just set
5513 @var{planner-psvn-log-edit-notice-commit-function} to t.
5515 @file{planner-psvn.el} does not define any interactive functions.
5517 @node XTLA, Gnats, PSVN, Tracking Development
5518 @comment  node-name,  next,  previous,  up
5519 @subsection XTLA
5520 @cindex XTLA
5521 @cindex @file{planner-xtla.el}, using
5523 This module allows you to refer to changesets in Tom Lord's Arch (tla)
5524 version control system. You can load the module with @code{(require
5525 'planner-xtla)}. When you load the module, you can create tasks from
5526 XTLA windows by positioning point on a revision.
5528 XTLA URLs are of the form
5529 @samp{xtla://miles@@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-19}
5531 @file{planner-xtla.el} does not define any interactive functions.
5533 @node Gnats,  , XTLA, Tracking Development
5534 @comment  node-name,  next,  previous,  up
5535 @subsection Gnats
5537 @cindex Gnats
5538 @cindex @file{planner-gnats.el}, using
5539 @cindex bug reports, tracking
5541 @file{planner-gnats.el} provides support for the GNU problem report
5542 management system Gnats. This module allows you to refer to problem
5543 reports using hyperlinks.
5545 Configure your Emacs for Gnats access, then add @samp{(require
5546 'planner-gnats)} to your @file{.emacs}. You can then create tasks from
5547 Gnats edit or view buffers.
5549 To add keybindings to Gnats, use @samp{(planner-gnats-insinuate)}.
5551 Gnats URLs are of the form @samp{gnats:pr-number}.
5553 @file{planner-gnats.el} does not define any interactive functions.
5555 @node Advanced Configuration, Reference Material, Managing Your Information, Top
5556 @comment  node-name,  next,  previous,  up
5557 @chapter Advanced Configuration
5558 @cindex configuration, advanced
5560 @menu
5561 * Customizing Your Day Pages::  Change your templates
5562 * Variables to Customize::      Change various aspects of Planner behavior
5563 * Ideas for Other Keybindings::  Add to and change the default keybindings
5564 @end menu
5566 @node Customizing Your Day Pages, Variables to Customize, Advanced Configuration, Advanced Configuration
5567 @comment  node-name,  next,  previous,  up
5568 @section Customizing Your Day Pages
5570 With the variable @code{planner-day-page-template}, you can define how
5571 you want any newly created day planner pages to look.
5573 You might want to include a section for your diary entries. For how to
5574 do this, see @ref{Diary}.
5576 You can add interactive Lisp buttons with the @file{planner-lisp.el}
5577 module. (@pxref{Interactive Lisp})
5579 Your @code{planner-day-page-template} can also include @samp{|<lisp>|}
5580 tags.
5582 For more complex day pages, you can set
5583 @code{planner-day-page-template} to a function that will be called
5584 from an empty day page buffer. The function should initialize the
5585 contents of the day page.
5587 @node Variables to Customize, Ideas for Other Keybindings, Customizing Your Day Pages, Advanced Configuration
5588 @comment  node-name,  next,  previous,  up
5589 @section Variables to Customize
5590 @cindex customize, variables to
5591 @cindex variables, customization of
5592 @cindex configuration, advanced, variables
5594 If you want to change @code{planner-directory} and some other
5595 variables, either use Customize (@kbd{M-x customize-group RET planner
5596 RET}) or use @code{setq}.  An example of the latter follows.
5598 @example
5599 (setq planner-directory "~/Plans")
5600 @end example
5602 Other user options are:
5604 @vindex planner-use-day-pages
5605 @defopt planner-use-day-pages
5606 If you really don't like day pages, you can set this variable to nil
5607 and you won't be prompted for dates for tasks (and notes, if using
5608 @file{remember-planner}).
5609 @end defopt
5611 @vindex planner-use-plan-pages
5612 @defopt planner-use-plan-pages
5613 If you really don't like plan pages, you can set this variable to nil
5614 and you won't be prompted for plan pages for tasks (and notes, if
5615 using @file{remember-planner}).
5616 @end defopt
5618 @vindex planner-mode-hook
5619 @defopt planner-mode-hook
5620 List of functions to run after @code{planner-mode} is initialized.
5621 @end defopt
5623 @vindex planner-tasks-file-behavior
5624 @defopt planner-tasks-file-behavior
5625 This variable controls what happens to files Planner opens by itself.
5626 If your tasks are associated with plan pages, the plan pages are
5627 updated whenever a task is rescheduled.  This could lead to a lot of
5628 open buffers as Planner applies updates to all linked files.
5629 By default, Planner is configured to do nothing.
5630 A value of @samp{save} means save but do not close buffers, and a
5631 value of @samp{nil} means do not save any of the buffers.
5632 @end defopt
5634 @vindex planner-add-task-at-end-flag
5635 @defopt planner-add-task-at-end-flag
5636 This variable controls where new tasks are created.  Non-nil means
5637 create tasks at the bottom of the first task block.  If you set this
5638 to non-nil, new tasks will be listed in order of creation (oldest).
5639 Tasks carried over from previous days will appear at the bottom of the
5640 list.
5642 Nil means create tasks at the top of the first task block.
5643 Carried-over tasks and newly created tasks are prominently placed on
5644 top of the list of tasks for the day.
5645 @end defopt
5647 @vindex planner-default-page
5648 @defopt planner-default-page
5649 Default page for created tasks.  This is used as the initial value for
5650 tasks.  After you create a task, it will be set to the previous page
5651 used.
5652 @end defopt
5654 @vindex planner-hide-task-status-when-highlighting
5655 @defopt planner-hide-task-status-when-highlighting
5656 Font-locking for tasks may be enough for you to determine status and
5657 priority.  Set this to non-nil if you want to hide the status marker
5658 and rely on font-locking instead.
5659 @end defopt
5661 @vindex planner-create-task-hook
5662 @defopt planner-create-task-hook
5663 Functions run after creating a task. @code{planner-id} hooks into
5664 this.
5665 @end defopt
5667 @vindex planner-expand-name-favor-future-p
5668 @defopt planner-expand-name-favor-future-p
5669 If non-nil, partial dates (ex: @kbd{2} or @kbd{5.2}) are completed to
5670 dates in the future instead of using the current year and month.
5671 @end defopt
5673 @vindex planner-task-dates-favor-future-p
5674 @defopt planner-task-dates-favor-future-p
5675 Like @code{planner-expand-name-favor-future-p}, but only for tasks.
5676 @end defopt
5678 @vindex planner-publish-dates-first-p
5679 @defopt planner-publish-dates-first-p
5680 Non-nil means list day pages first in the planner index.
5681 @end defopt
5683 @node Ideas for Other Keybindings,  , Variables to Customize, Advanced Configuration
5684 @comment  node-name,  next,  previous,  up
5685 @section Ideas for Other Keybindings
5686 @cindex keybindings, customization of
5687 @cindex configuration, advanced, keybindings
5688 @cindex customize, keybindings to
5690 By default and for backward compatibility, the following operations
5691 do not have keybindings, and are only accessible from the Planner
5692 menu:
5694 @itemize @bullet
5696 @item
5697 @code{planner-copy-or-move-region}
5699 @item
5700 @code{planner-delete-task}
5702 @item
5703 @code{planner-task-delegated}
5705 @item
5706 @code{planner-task-pending}
5708 @item
5709 @code{planner-task-open}
5711 @item
5712 @code{planner-renumber-tasks}
5714 @end itemize
5716 You may find it easier to install keybindings for those operations by
5717 inserting the following in your @file{.emacs} (or @file{_emacs}).
5718 Note: This changes some of the default keybindings for Planner.
5720 @example
5721 (planner-install-extra-task-keybindings)
5722 @end example
5724 If you install the extra task keybindings, your keybindings will
5725 include:
5727 @itemize @bullet
5729 @item
5730 @kbd{C-c C-t} will be unbound from the default and will serve as the
5731 prefix for the other task keybindings.
5733 @item
5734 @kbd{C-c C-t C-t}: @code{planner-create-task-from-buffer}.
5736 @item
5737 @kbd{C-c C-t C-k}: @code{planner-delete-task}.
5739 @item
5740 @kbd{C-c C-t C-u}: @code{planner-update-task}.
5742 @item
5743 @kbd{C-c C-t C-c}: @code{planner-copy-or-move-task}.
5745 @item
5746 @kbd{C-c C-t C-S-c}: @code{planner-copy-or-move-region}.
5748 @item
5749 @kbd{C-c C-t C-x}: @code{planner-task-done}.
5751 @item
5752 @kbd{C-c C-t C-S-x}: @code{planner-task-cancelled}.
5754 @item
5755 @kbd{C-c C-t C-d}: @code{planner-task-delegated}.
5757 @item
5758 @kbd{C-c C-t C-p}: @code{planner-task-pending}.
5760 @item
5761 @kbd{C-c C-t C-o}: @code{planner-task-in-progress}.
5763 @item
5764 @kbd{C-c C-t C-r}: @code{planner-raise-task}.
5766 @item
5767 @kbd{C-c C-t C-l}: @code{planner-lower-task}.
5769 @item
5770 @kbd{C-c C-t C-n}: @code{planner-renumber-tasks}.
5772 @end itemize
5774 Other keybindings can be configured by adding this to your
5775 @file{.emacs} (or @file{_emacs}):
5777 @example
5778 (planner-install-extra-context-keybindings)
5779 @end example
5781 This will set up the following keybindings:
5783 @itemize @bullet
5785 @item
5786 @kbd{shift up} @code{planner-move-up}
5788 @item
5789 @kbd{shift down} @code{planner-move-down}
5791 @item
5792 @kbd{shift right} @code{planner-jump-to-link}
5794 @end itemize
5796 @node Reference Material, Getting Help, Advanced Configuration, Top
5797 @comment  node-name,  next,  previous,  up
5798 @chapter Reference Material
5800 @menu
5801 * Keeping Track of Time::       
5802 * Other Interactive Functions::  
5803 * Planner Keybindings::         Default keybindings for Planner
5804 * Sample Configuration Files::  
5805 @end menu
5807 @node Keeping Track of Time, Other Interactive Functions, Reference Material, Reference Material
5808 @section Keeping Track of Time
5810 One of the coolest things you can do with Planner is keep track of how
5811 much time you spend not only on projects but even on particular tasks.
5812 @file{planner-timeclock.el} makes it as easy and natural as marking a
5813 task as in progress, postponed, or done. This can help you determine
5814 just how much time you spend working each day. If you add estimates to
5815 your task descriptions, you'll also be able to use this information to
5816 improve your time estimation skills.
5818 Here's how you can keep track of the time you
5821 Then the fun began. I wanted to see if I could match my estimates.
5822 Before I started working on a task, I used @kbd{C-c TAB} to mark it
5823 @code{in progress} and start the clock. If I decided to work on
5824 something else, I used @kbd{C-c TAB} to clock out of the previous task
5825 and clock into the new one.
5827 When I finished it, I used @kbd{C-c C-x} (@code{planner-task-done}) to
5828 mark it completed and automatically clock out. This is not yet done
5829 for cancelled tasks, so I clocked out of those manually with @kbd{C-c
5830 C-o} (@code{timeclock-out}). I also clocked out whenever I caught
5831 myself being distracted so that the totals wouldn't include the time I
5832 spent chatting on #emacs or checking out del.icio.us links. =) At the
5833 end of the day, I used
5834 @code{planner-timeclock-summary-show-range-filter} to show me the time
5835 elapsed for all of the tasks I'd worked on over the past two days.
5836 Here's the report for that project, edited to reflect how it looks on
5837 my screen and annotated with comments:
5839 @example
5840 Timeclock summary report for 2004.12.28 - 2004.12.29
5842 Project     |     Time| Ratio| Task
5843 JapanProject|  0:23:17|  3.6%| Translate javadoc comment for Messages.java
5844             |  0:33:48|  5.3%| Translate javadoc comment for LoginAction.java
5845             |  1:54:07| 17.8%| Study Struts in Japanese
5846             |  0:46:08|  7.2%| Add javadoc tags for input, output and forwards
5847             |  1:03:48|  9.9%| Help review code
5848             |  0:04:14|  0.7%| Import todo list
5849             |  0:00:37|  0.1%| 2min       Fix Menu Action's unnecessary code - delegated
5850             |  0:01:01|  0.2%| 2min       Remove unnecessary list in UserRemoveSetupAction - cancelled
5851             |  0:02:10|  0.3%| 2min       Remove hard-coded database path from MenuAction
5852             |  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. ...
5853             |  0:07:32|  1.2%| 5min       Add a method that returns the validity of a user in MUserPeer.
5854             |  0:08:28|  1.3%| 5min       Fix indentation
5855             |  0:03:52|  0.6%| 10min      Fix UserPeer so that it doesn't get null pointer exceptions
5856             |  0:04:34|  0.7%| 5min       Add current password field in user_modify page
5857             |  0:21:56|  3.4%| 15min      Make a super class for our service classes that will receive the database connection. (cancelled)
5858             |  0:06:05|  0.9%| 10min      Remove hard-coded constants from the Logic classes
5859             |  0:10:55|  1.7%| 10min      Move logic from UserBean.checkPassword to UserListLogic
5860             |  0:01:20|  0.2%| 20min      Guard against null pointer exceptions in peer classes
5861             |  0:04:57|  0.8%| 10min      Instead of displaying uneditable data with bean:write, just disable the html:text element
5862             |  0:25:03|  3.9%| 10min      Deploy 10:00 version
5863             |  0:04:46|  0.7%| 5min       Separate the configuration file of database and system into another uninternationalized property file.
5864             |  2:09:48| 20.2%| 1h         Decide on a naming convention for localized messages and update files
5865             |  0:00:07|  0.0%| 20min      Explain what is happening in UserModifyAction's nested ifs - pending
5866             |  1:50:23| 17.2%| 2h         Write Javadoc comments in English and Japanese to explain bean structure
5867             |  0:04:19|  0.7%| 2h         Write Javadoc comments in English and Japanese to explain peer operations (pending)
5868             |  0:05:40|  0.9%| 20min      Make a factory class for the database - pending
5869      Total: | 10:41:41|100.0%|      
5871 Day began: 13:03:58, Day ended: 20:51:46
5872 Time elapsed: 31:47:48, Time clocked: 10:41:41
5873 Time clocked ratio: 33.6%
5874 @end example
5876 The time record isn't perfect. I cancelled some tasks after thinking
5877 about them a little and did some tasks simultaneously. Sometimes I
5878 didn't notice that I was getting distracted, too. Still, having all of
5879 that time information neatly summarized made me realize a number of
5880 things.
5882 First, I goof off much less when I have a nice, broken-down task list
5883 in front of me. There's just something about knowing there's a five-
5884 or ten-minute hack you can get out of the way. I found myself looking
5885 forward to getting to the next task just to see if I could make my
5886 estimate. That said, seeing a five-minute task stretch and stretch due
5887 to unforeseen problems did make me a little nervous. I should probably
5888 just make generous estimates so that I don't end up with bugs because
5889 of haste.
5891 Second, I don't goof off as much as I thought I did, although there's
5892 still room for improvement. Yesterday's workday was 9:00 - 12:00, 1:00
5893 - 5:30--7.5 hours. Today was the last day of work, so cleaning and
5894 celebration interrupted my hacking at around 3:00--5 hours of work.
5895 According to my task list, 10:41/12:30 was productive work. Hmm. 1:49
5896 hours unclocked time when I was thinking or goofing off.
5897 planner-timeclock-summary-show for today reveals that I actually
5898 clocked 5:30 today, which means the goofing off happened yesterday.
5899 That makes sense; I remember a pretty long unclocked segment
5900 recuperating from Japanese overload. (This was before we came up with
5901 the task list.)
5903 Third, keeping track of time is way, way cool even if you don't bill
5904 anyone for your time.
5906 Like the idea? It's easy to try out. Just add
5908 @example
5909 (require 'planner-timeclock)
5910 (require 'planner-timeclock-summary)
5911 @end example
5913 to your ~/.emacs. If you want to try it out now, eval those statements
5914 in your Emacs session. After that, simply use @kbd{C-c TAB} to ``clock
5915 in'' a task before you start working on it and @kbd{C-c C-x}
5916 (@code{planner-task-done}) to mark it completed. @kbd{M-x
5917 planner-task-pending} also clocks out the current task if it was
5918 clocked in. To see a summary of how you spent your day, check out the
5919 different functions in @file{planner-timeclock-summary}.
5921 See @ref{Timeclock} for more details.
5923 Happy hacking!
5925 @node Other Interactive Functions, Planner Keybindings, Keeping Track of Time, Reference Material
5926 @comment  node-name,  next,  previous,  up
5927 @section Other Interactive Functions
5929 With @file{planner.el} loaded, you can use any of the functions in this
5930 section by typing @kbd{M-x} followed by the name of the function. Many
5931 of these functions are also bound to keys.
5933 For a list of Planner keybindings, see @ref{Planner Keybindings}.
5935 They are listed in no particular order.
5937 @file{planner.el} defines the following interactive functions:
5940 @defun planner-create-high-priority-task-from-buffer
5941 Create a high priority task based on this buffer.  Do not use this in
5942 LISP programs. Instead, set the value of
5943 @var{planner-default-task-priority} and call @code{planner-create-task}
5944 or @code{planner-create-task-from-buffer}.
5945 @end defun
5947 @defun defun planner-create-medium-priority-task-from-buffer
5948 Create a medium-priority task based on this buffer.  Do not use this in
5949 LISP programs. Instead, set the value of
5950 @var{planner-default-task-priority} and call @code{planner-create-task}
5951 or @code{planner-create-task-from-buffer}.
5952 @end defun
5954 @defun planner-create-low-priority-task-from-buffer
5955 Create a high-priority task based on this buffer.
5956 Do not use this in LISP programs. Instead, set the value of
5957 @var{planner-default-task-priority} and call @code{planner-create-task} or
5958 @code{planner-create-task-from-buffer}.
5959 @end defun
5961 @defun planner-install-extra-context-keybindings
5962 Install extra context-sensitive keybindings. These keybindings
5963 conflict with @file{windmove.el}, but might be useful.
5964 @end defun
5966 @defun planner-narrow-to-section section &optional create
5967 Widen to the whole page and narrow to the section labelled
5968 @var{section}.  If @var{create} is non-nil and the section is not found,
5969 the section is created.  Return non-nil if @var{section} was found or
5970 created.
5971 @end defun
5973 @defun planner-save-buffers
5974 Save all planner-mode buffers.
5975 @end defun
5977 @defun planner-seek-to-first section
5978 Positions the point at the specified @var{section}, or @samp{Tasks} if
5979 not specified.
5980 @end defun
5982 @defun planner-save-buffers
5983 Save all planner buffers.
5984 @end defun
5986 @defun planner-calendar-insinuate
5987 This hooks Planner into  Emacs Calendar (@pxref{Calendar/Diary, ,
5988 , Emacs, GNU Emacs Manual}).
5990 It adds special planner key bindings to @code{calendar-mode-map}.
5991 After this function is evaluated, you can use the following
5992 planner-related keybindings in @code{calendar-mode-map}:
5994 @table @kbd
5996 @item  n
5997 Jump to the planner page for the current day.
5999 @item  N
6000 Display the planner page for the current day.
6001 @end table
6003 @end defun
6005 @defun planner-kill-calendar-files
6006 Remove planner files shown from Calendar (@pxref{Calendar/Diary, , ,
6007 Emacs, GNU Emacs Manual}).
6009 @end defun
6011 @defun planner-calendar-goto
6012 Goto the plan page corresponding to the calendar date
6013 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
6014 @end defun
6016 @defun planner-calendar-show
6017 Show the plan page for the calendar date under point in another window
6018 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
6019 @end defun
6021 @defun planner-calendar-select
6022 Return to @code{planner-read-date} with the date currently selected
6023 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
6024 @end defun
6026 @defun planner-jump-to-link
6027 Jump to the item linked to by the current item.
6028 @end defun
6030 @defun planner-move-up
6031 Move a task up. You can use this to indicate that you will do a task
6032 before another one. On a note, go to the previous note. On a headline,
6033 go to the previous headline of the same depth.
6034 @end defun
6036 @defun planner-move-down 
6037 Move down. You can use this to indicate that you will do a task after
6038 another one. On a note, go to the next note. On a headline, go to the
6039 next headline of the same depth.
6040 @end defun
6042 @node Planner Keybindings, Sample Configuration Files, Other Interactive Functions, Reference Material
6043 @comment  node-name,  next,  previous,  up
6044 @section Planner Keybindings
6045 @cindex keybindings, list
6047 In order to refresh and renumber all of your tasks according to their
6048 actual order in the buffer, simply save the file or call
6049 @kbd{M-x planner-renumber-tasks}.
6051 Here is a summary of the keystrokes available:
6053 @table @kbd
6055 @item M-x plan
6056 Begin your planning session.  This goes to the last day for which
6057 there is any planning info (or today if none), allowing you to review,
6058 and create/move tasks from that day.
6060 @item C-c C-u
6061 Move a task up.
6063 @item C-c C-d
6064 Move a task down.
6066 @item C-c C-s
6067 Mark the task as in progress or delegated.
6069 @item C-c C-x
6070 Mark the task as finished.
6072 @item C-c C-t
6073 Create a task associated with the current Wiki page. If you are on the
6074 opening line of a Note entry, it is assumed that the note itself is the
6075 origin of the task.
6077 @item C-c C-c
6078 Move or copy the current task to another date. If the current task is
6079 an original (meaning you are in the buffer where's defined, hopefully
6080 a planning page) then it will be copied, and the original task will
6081 also now point to the copy.  If the current task is a copy, it will
6082 just be moved to the new day, and the original task's link will be
6083 updated.
6085 @item C-c C-n
6086 Jump to today's task page.  If you call
6087 @code{(planner-calendar-insinuate)}, typing @kbd{n} in the Emacs
6088 calendar (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}) will jump
6089 to today's task page.
6091 @item C-c C-x
6092 @code{planner-task-done}
6094 @item C-c C-z
6095 @code{planner-task-in-progress}
6097 @item C-c C-d
6098 @code{planner-lower-task}
6100 @item C-c C-u
6101 @code{planner-raise-task}
6103 @item C-c C-c
6104 @code{planner-copy-or-move-task}
6106 @item C-c C-t
6107 @code{planner-create-task-from-buffer}
6109 @item C-c C-j
6110 This is a prefix command.
6112 @item C-c C-n
6113 @code{planner-goto-today}
6115 @item C-c C-j C-r
6116 @code{planner-goto-most-recent}
6118 @item C-c C-j C-t
6119 @code{planner-goto-tomorrow}
6121 @item C-c C-j C-y
6122 @code{planner-goto-yesterday}
6124 @item C-c C-j C-j
6125 @code{planner-goto-today}
6127 @item C-c C-j C-n
6128 @code{planner-goto-next-daily-page}
6130 @item C-c C-j C-p
6131 @code{planner-goto-previous-daily-page}
6133 @item C-c C-j C-d
6134 @code{planner-goto}
6136 @end table
6138 @node Sample Configuration Files,  , Planner Keybindings, Reference Material
6139 @comment  node-name,  next,  previous,  up
6140 @section Sample Configuration Files
6141 @cindex configuration, sample
6143 This section includes some sample configuration files. This way, once
6144 you've got the hang of the basics, you can see some different, more
6145 advanced, setups.
6147 There is no One True Way to plan. Every person is different. We hope
6148 you'll find a good starting point among the example configurations
6149 below. If what you want to do does not perfectly fit under one of these
6150 examples, please post a description of the way you plan to our mailing
6151 list (@pxref{Getting Help}).  We look forward to helping you customizing
6152 planner to fit your needs.
6154 @menu
6155 * File Organization::           
6156 * Bare-Bones Planning::         
6157 * Bare-Bones Planning with Plan Pages::  
6158 * Tasks on Plan Pages with Some Day Pages::  
6159 * Hierarchical Tasks::          
6160 @end menu
6162 @node File Organization, Bare-Bones Planning, Sample Configuration Files, Sample Configuration Files
6163 @subsection File Organization
6165 @itemize
6166 @item @strong{Tasks, schedule and notes on day pages.}
6168 By default, tasks, schedule entries and notes are filed on day pages.
6169 This makes it easy for you to see all the entries relevant to a single
6170 day without becoming overwhelmed with information. Unfinished tasks
6171 are carried over to the next day when you use @kbd{M-x plan}, so it's
6172 always kept up to date. Completed tasks are left on the day page you
6173 finished them on, which helps when reviewing one's progress and writing
6174 accomplishment reports.
6176 @item @strong{Cross-referenced with plan pages.}
6178 You can associate your tasks with projects either when you create the
6179 task or later, with @kbd{M-x planner-replan-task}. This makes it easy
6180 for you to see all the information associated with a particular
6181 project. If you use RememberMode to create notes, you will also be
6182 able to associate notes with a plan page.
6184 @item @strong{Just plan pages.}
6186 If your tasks don't usually have dates, you can turn day pages off by
6187 customizing @code{planner-use-day-pages}. If so, then all of your
6188 tasks and notes will be stored on the WelcomePage and/or a plan page.
6190 @end itemize
6192 @node Bare-Bones Planning, Bare-Bones Planning with Plan Pages, File Organization, Sample Configuration Files
6193 @subsection Bare-Bones Planning
6195 You can keep all of your tasks, notes and schedules in a single file:
6196 WelcomePage.  This is good for people who are used to storing all of
6197 their information in a flat text file.  By storing your information in
6198 planner, you'll be able to take advantage of automatic hyperlinking to
6199 files and other resources.  You can also sort your tasks by priority
6200 and status.
6202 To set your system up for bare-bones planning, set the
6203 @code{planner-use-day-pages} variable to nil before loading planner.
6204 For example, you can put this in your @file{~/.emacs} (or @file{_emacs}):
6206 @example
6207 (setq planner-use-day-pages nil)
6208 (setq planner-default-page nil)
6209 (require 'planner)
6210 @end example
6212 When you create a task or note, planner will not prompt you for a
6213 date.  If you press @key{RET} when prompted for a plan page, it will
6214 accept the default of nil, so no other plan pages will be used.  All
6215 of your data will be kept in one file, which can then be easily backed
6218 You can use commands like @command{planner-create-task-from-buffer} to
6219 create tasks, or you can type tasks in manually.  You can edit or
6220 delete anything in the page without having to update other files.
6222 @node Bare-Bones Planning with Plan Pages, Tasks on Plan Pages with Some Day Pages, Bare-Bones Planning, Sample Configuration Files
6223 @subsection Bare-Bones Planning with Plan Pages
6225 When you create a task or note, Planner.el can copy this to a plan
6226 page. Plan pages allow you to see an overview of all the data for a
6227 project.
6229 For convenience, the @command{planner-create-task-from-buffer} command
6230 prompts you for a plan page when you create a task.
6234 @node Tasks on Plan Pages with Some Day Pages, Hierarchical Tasks, Bare-Bones Planning with Plan Pages, Sample Configuration Files
6235 @subsection Tasks on Plan Pages with Some Day Pages
6237 If most of your tasks are associated with plan pages but you want to
6238 schedule some tasks on day pages, you can leave day pages on (default)
6239 and then write a function that turns off day pages. For example, the
6240 following code snippet turns off day pages for task creation from
6241 buffers.
6243 @example
6244 (require 'planner)
6246 (defun my-planner-create-task-from-buffer ()
6247   "Call `planner-create-task-from-buffer', but without dates."
6248   (interactive)
6249   (let ((planner-use-day-pages nil))
6250     (call-interactively 'planner-create-task-from-buffer)))
6251 @end example
6253 @node Hierarchical Tasks,  , Tasks on Plan Pages with Some Day Pages, Sample Configuration Files
6254 @subsection Hierarchical Tasks
6255 @cindex hierarchical tasks
6256 @cindex tasks, hierarchy of
6258 You can use @file{allout.el} or other modes for outlining to support
6259 hierarchical tasks in plan pages. No special support is needed.
6261 Tasks created by @command{planner-create-task-from-buffer} and
6262 @code{planner-create-task} are created in the @samp{* Tasks} section.
6263 If @code{planner-add-task-at-end-flag} is non-nil, tasks are added to
6264 the end of the first task block, else they are added to the beginning.
6265 You can then copy and paste tasks into your preferred hierarchy.
6266 Blank lines delimit blocks of tasks upon which automatic sorting is
6267 performed.
6269 You can also type in tasks manually. You may find this approach faster
6270 when you are comfortable with planner.
6272 For example, a @file{LearnPlanner} plan page might contain the
6273 following lines:
6275 @example
6276 * Learn how to use planner.el
6278 ** Installation
6280 #C0 _ Decide where to put Planner
6281 #C0 _ Download the archives
6283 ** Configuration
6285 *** Load path
6287 #C0 _ Figure out how to add things to my load path
6288 #C0 _ Actually add it to my load path
6291 @end example
6293 If you create tasks for the finest level of detail available at the
6294 moment, you can schedule them onto day pages with @kbd{C-c C-c}
6295 (@command{planner-copy-or-move-task}). Then you can use
6296 @command{planner-jump-to-link} to switch between the day page and the
6297 plan page link.
6300 @node Getting Help, Acknowledgements, Reference Material, Top
6301 @comment  node-name,  next,  previous,  up
6302 @chapter Getting Help
6303 @cindex help, getting
6304 @cindex bugs, reporting
6306 After you have read this guide, if you still have questions about
6307 Planner, or if you have bugs to report, there are several places
6308 you can go.
6310 Planner has an official website at @url{http://www.plannerlove.com/}.
6311 It is a collaborative wiki.
6313 Bugs may be reported using the Planner Bug-Tracker at
6314 @url{http://gna.org/bugs/?group=planner-el}.
6316 Planner has three mailing lists.
6318 @table @samp
6320 @item planner-el-announce
6321 Low-traffic list for planner-related announcements.
6323 You can join this mailing list (@email{planner-el-announce@@gna.org})
6324 using the subscription form at
6325 @url{http://mail.gna.org/listinfo/planner-el-announce/}.  This
6326 mailing list is also available via Gmane (@url{http://gmane.org/}). The
6327 group is called @samp{gmane.emacs.planner.announce}.
6329 @item planner-el-discuss
6330 Discussion, bugfixes, suggestions, tips, and the like for Planner.
6331 This mailing list also includes the content of planner-el-announce.
6333 You can join this mailing list (@email{planner-el-discuss@@gna.org})
6334 using the subscription form at
6335 @url{http://mail.gna.org/listinfo/planner-el-discuss/}.  This mailing
6336 list is also available via Gmane with the identifier
6337 @samp{gmane.emacs.planner.general}.
6339 @item planner-el-cvs
6340 Log messages for changes committed to Planner.
6342 You can join this mailing list (@email{planner-el-cvs@@gna.org}) using
6343 the subscription form at
6344 @url{http://mail.gna.org/listinfo/planner-el-cvs/}.  This mailing list
6345 is also available via Gmane with the identifier
6346 @samp{gmane.emacs.planner.cvs}.
6348 @end table
6350 You can also contact the maintainer of Planner, John Sullivan, at
6351 @email{john@@wjsullivan.net}, but it is better to use the other options.
6353 You can explore the relevant sections of the EmacsWiki.org:
6355 @itemize @bullet
6357 @item
6358 @url{http://www.emacswiki.org/cgi-bin/wiki/PlannerMode}
6360 @item
6361 @url{http://www.emacswiki.org/cgi-bin/wiki/MuseMode}
6363 @item
6364 @url{http://www.emacswiki.org/cgi-bin/wiki/RememberMode}
6366 @end itemize
6368 You can visit the IRC Freenode channel @samp{#emacs}. Many of the
6369 contributors are frequently around and willing to answer your
6370 questions.
6372 There is an Orkut community called PlannerMode.
6374 For issues relating to this documentation, please contact John
6375 Sullivan at @email{johnsu01@@yahoo.com}.
6377 @node Acknowledgements, GNU General Public License, Getting Help, Top
6378 @comment  node-name,  next,  previous,  up
6379 @chapter Acknowledgements
6380 @itemize
6381 @item Maintainers
6383 @cindex maintainers
6385 @itemize
6386 @item 2006
6388 John Sullivan volunteered to maintain Planner, and Michael Olson passed
6389 the maintainership on to him with the release of Planner 3.41.
6391 @item 2005
6393 Michael Olson, Sacha Chua, and several others from the Planner community
6394 ported Planner to use Muse instead of emacs-wiki.  Michael Olson became
6395 the maintainer of Planner.
6397 @item 2004
6399 Damien Elmes handed EmacsWikiMode to Mark Triggs for a short period of
6400 time.  Mark Triggs deferred to Sacha Chua as official maintainer of
6401 Planner.  Sacha Chua volunteered to maintain RememberMode.
6402 Michael Olson became the maintainer of both emacs-wiki and Muse.
6404 @item 2003
6406 Sacha Chua volunteered to maintain Planner.  Damien Elmes
6407 volunteered to maintain EmacsWikiMode.
6409 @item 2001
6411 John Wiegley wrote EmacsWikiMode and Planner.
6412 @end itemize
6414 @item Contributors
6415 @cindex contributors
6417 For a complete list of people who have helped out with Planner, please
6418 check out the @file{AUTHORS} file that is included with Planner.
6420 @end itemize
6422 @node GNU General Public License, Concept Index, Acknowledgements, Top
6423 @comment  node-name,  next,  previous,  up
6424 @appendix GNU GENERAL PUBLIC LICENSE
6425 @center Version 2, June 1991
6426 @cindex GPL
6427 @cindex GNU General Public License
6429 @c This file is intended to be included in another file.
6431 @display
6432 Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
6433 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
6435 Everyone is permitted to copy and distribute verbatim copies
6436 of this license document, but changing it is not allowed.
6437 @end display
6439 @appendixsec Preamble
6441   The licenses for most software are designed to take away your
6442 freedom to share and change it.  By contrast, the GNU General Public
6443 License is intended to guarantee your freedom to share and change free
6444 software---to make sure the software is free for all its users.  This
6445 General Public License applies to most of the Free Software
6446 Foundation's software and to any other program whose authors commit to
6447 using it.  (Some other Free Software Foundation software is covered by
6448 the GNU Library General Public License instead.)  You can apply it to
6449 your programs, too.
6451   When we speak of free software, we are referring to freedom, not
6452 price.  Our General Public Licenses are designed to make sure that you
6453 have the freedom to distribute copies of free software (and charge for
6454 this service if you wish), that you receive source code or can get it
6455 if you want it, that you can change the software or use pieces of it
6456 in new free programs; and that you know you can do these things.
6458   To protect your rights, we need to make restrictions that forbid
6459 anyone to deny you these rights or to ask you to surrender the rights.
6460 These restrictions translate to certain responsibilities for you if you
6461 distribute copies of the software, or if you modify it.
6463   For example, if you distribute copies of such a program, whether
6464 gratis or for a fee, you must give the recipients all the rights that
6465 you have.  You must make sure that they, too, receive or can get the
6466 source code.  And you must show them these terms so they know their
6467 rights.
6469   We protect your rights with two steps: (1) copyright the software, and
6470 (2) offer you this license which gives you legal permission to copy,
6471 distribute and/or modify the software.
6473   Also, for each author's protection and ours, we want to make certain
6474 that everyone understands that there is no warranty for this free
6475 software.  If the software is modified by someone else and passed on, we
6476 want its recipients to know that what they have is not the original, so
6477 that any problems introduced by others will not reflect on the original
6478 authors' reputations.
6480   Finally, any free program is threatened constantly by software
6481 patents.  We wish to avoid the danger that redistributors of a free
6482 program will individually obtain patent licenses, in effect making the
6483 program proprietary.  To prevent this, we have made it clear that any
6484 patent must be licensed for everyone's free use or not licensed at all.
6486   The precise terms and conditions for copying, distribution and
6487 modification follow.
6489 @iftex
6490 @appendixsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
6491 @end iftex
6492 @ifinfo
6493 @center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
6494 @end ifinfo
6496 @enumerate 0
6497 @item
6498 This License applies to any program or other work which contains
6499 a notice placed by the copyright holder saying it may be distributed
6500 under the terms of this General Public License.  The ``Program'', below,
6501 refers to any such program or work, and a ``work based on the Program''
6502 means either the Program or any derivative work under copyright law:
6503 that is to say, a work containing the Program or a portion of it,
6504 either verbatim or with modifications and/or translated into another
6505 language.  (Hereinafter, translation is included without limitation in
6506 the term ``modification''.)  Each licensee is addressed as ``you''.
6508 Activities other than copying, distribution and modification are not
6509 covered by this License; they are outside its scope.  The act of
6510 running the Program is not restricted, and the output from the Program
6511 is covered only if its contents constitute a work based on the
6512 Program (independent of having been made by running the Program).
6513 Whether that is true depends on what the Program does.
6515 @item
6516 You may copy and distribute verbatim copies of the Program's
6517 source code as you receive it, in any medium, provided that you
6518 conspicuously and appropriately publish on each copy an appropriate
6519 copyright notice and disclaimer of warranty; keep intact all the
6520 notices that refer to this License and to the absence of any warranty;
6521 and give any other recipients of the Program a copy of this License
6522 along with the Program.
6524 You may charge a fee for the physical act of transferring a copy, and
6525 you may at your option offer warranty protection in exchange for a fee.
6527 @item
6528 You may modify your copy or copies of the Program or any portion
6529 of it, thus forming a work based on the Program, and copy and
6530 distribute such modifications or work under the terms of Section 1
6531 above, provided that you also meet all of these conditions:
6533 @enumerate a
6534 @item
6535 You must cause the modified files to carry prominent notices
6536 stating that you changed the files and the date of any change.
6538 @item
6539 You must cause any work that you distribute or publish, that in
6540 whole or in part contains or is derived from the Program or any
6541 part thereof, to be licensed as a whole at no charge to all third
6542 parties under the terms of this License.
6544 @item
6545 If the modified program normally reads commands interactively
6546 when run, you must cause it, when started running for such
6547 interactive use in the most ordinary way, to print or display an
6548 announcement including an appropriate copyright notice and a
6549 notice that there is no warranty (or else, saying that you provide
6550 a warranty) and that users may redistribute the program under
6551 these conditions, and telling the user how to view a copy of this
6552 License.  (Exception: if the Program itself is interactive but
6553 does not normally print such an announcement, your work based on
6554 the Program is not required to print an announcement.)
6555 @end enumerate
6557 These requirements apply to the modified work as a whole.  If
6558 identifiable sections of that work are not derived from the Program,
6559 and can be reasonably considered independent and separate works in
6560 themselves, then this License, and its terms, do not apply to those
6561 sections when you distribute them as separate works.  But when you
6562 distribute the same sections as part of a whole which is a work based
6563 on the Program, the distribution of the whole must be on the terms of
6564 this License, whose permissions for other licensees extend to the
6565 entire whole, and thus to each and every part regardless of who wrote it.
6567 Thus, it is not the intent of this section to claim rights or contest
6568 your rights to work written entirely by you; rather, the intent is to
6569 exercise the right to control the distribution of derivative or
6570 collective works based on the Program.
6572 In addition, mere aggregation of another work not based on the Program
6573 with the Program (or with a work based on the Program) on a volume of
6574 a storage or distribution medium does not bring the other work under
6575 the scope of this License.
6577 @item
6578 You may copy and distribute the Program (or a work based on it,
6579 under Section 2) in object code or executable form under the terms of
6580 Sections 1 and 2 above provided that you also do one of the following:
6582 @enumerate a
6583 @item
6584 Accompany it with the complete corresponding machine-readable
6585 source code, which must be distributed under the terms of Sections
6586 1 and 2 above on a medium customarily used for software interchange; or,
6588 @item
6589 Accompany it with a written offer, valid for at least three
6590 years, to give any third party, for a charge no more than your
6591 cost of physically performing source distribution, a complete
6592 machine-readable copy of the corresponding source code, to be
6593 distributed under the terms of Sections 1 and 2 above on a medium
6594 customarily used for software interchange; or,
6596 @item
6597 Accompany it with the information you received as to the offer
6598 to distribute corresponding source code.  (This alternative is
6599 allowed only for noncommercial distribution and only if you
6600 received the program in object code or executable form with such
6601 an offer, in accord with Subsection b above.)
6602 @end enumerate
6604 The source code for a work means the preferred form of the work for
6605 making modifications to it.  For an executable work, complete source
6606 code means all the source code for all modules it contains, plus any
6607 associated interface definition files, plus the scripts used to
6608 control compilation and installation of the executable.  However, as a
6609 special exception, the source code distributed need not include
6610 anything that is normally distributed (in either source or binary
6611 form) with the major components (compiler, kernel, and so on) of the
6612 operating system on which the executable runs, unless that component
6613 itself accompanies the executable.
6615 If distribution of executable or object code is made by offering
6616 access to copy from a designated place, then offering equivalent
6617 access to copy the source code from the same place counts as
6618 distribution of the source code, even though third parties are not
6619 compelled to copy the source along with the object code.
6621 @item
6622 You may not copy, modify, sublicense, or distribute the Program
6623 except as expressly provided under this License.  Any attempt
6624 otherwise to copy, modify, sublicense or distribute the Program is
6625 void, and will automatically terminate your rights under this License.
6626 However, parties who have received copies, or rights, from you under
6627 this License will not have their licenses terminated so long as such
6628 parties remain in full compliance.
6630 @item
6631 You are not required to accept this License, since you have not
6632 signed it.  However, nothing else grants you permission to modify or
6633 distribute the Program or its derivative works.  These actions are
6634 prohibited by law if you do not accept this License.  Therefore, by
6635 modifying or distributing the Program (or any work based on the
6636 Program), you indicate your acceptance of this License to do so, and
6637 all its terms and conditions for copying, distributing or modifying
6638 the Program or works based on it.
6640 @item
6641 Each time you redistribute the Program (or any work based on the
6642 Program), the recipient automatically receives a license from the
6643 original licensor to copy, distribute or modify the Program subject to
6644 these terms and conditions.  You may not impose any further
6645 restrictions on the recipients' exercise of the rights granted herein.
6646 You are not responsible for enforcing compliance by third parties to
6647 this License.
6649 @item
6650 If, as a consequence of a court judgment or allegation of patent
6651 infringement or for any other reason (not limited to patent issues),
6652 conditions are imposed on you (whether by court order, agreement or
6653 otherwise) that contradict the conditions of this License, they do not
6654 excuse you from the conditions of this License.  If you cannot
6655 distribute so as to satisfy simultaneously your obligations under this
6656 License and any other pertinent obligations, then as a consequence you
6657 may not distribute the Program at all.  For example, if a patent
6658 license would not permit royalty-free redistribution of the Program by
6659 all those who receive copies directly or indirectly through you, then
6660 the only way you could satisfy both it and this License would be to
6661 refrain entirely from distribution of the Program.
6663 If any portion of this section is held invalid or unenforceable under
6664 any particular circumstance, the balance of the section is intended to
6665 apply and the section as a whole is intended to apply in other
6666 circumstances.
6668 It is not the purpose of this section to induce you to infringe any
6669 patents or other property right claims or to contest validity of any
6670 such claims; this section has the sole purpose of protecting the
6671 integrity of the free software distribution system, which is
6672 implemented by public license practices.  Many people have made
6673 generous contributions to the wide range of software distributed
6674 through that system in reliance on consistent application of that
6675 system; it is up to the author/donor to decide if he or she is willing
6676 to distribute software through any other system and a licensee cannot
6677 impose that choice.
6679 This section is intended to make thoroughly clear what is believed to
6680 be a consequence of the rest of this License.
6682 @item
6683 If the distribution and/or use of the Program is restricted in
6684 certain countries either by patents or by copyrighted interfaces, the
6685 original copyright holder who places the Program under this License
6686 may add an explicit geographical distribution limitation excluding
6687 those countries, so that distribution is permitted only in or among
6688 countries not thus excluded.  In such case, this License incorporates
6689 the limitation as if written in the body of this License.
6691 @item
6692 The Free Software Foundation may publish revised and/or new versions
6693 of the General Public License from time to time.  Such new versions will
6694 be similar in spirit to the present version, but may differ in detail to
6695 address new problems or concerns.
6697 Each version is given a distinguishing version number.  If the Program
6698 specifies a version number of this License which applies to it and ``any
6699 later version'', you have the option of following the terms and conditions
6700 either of that version or of any later version published by the Free
6701 Software Foundation.  If the Program does not specify a version number of
6702 this License, you may choose any version ever published by the Free Software
6703 Foundation.
6705 @item
6706 If you wish to incorporate parts of the Program into other free
6707 programs whose distribution conditions are different, write to the author
6708 to ask for permission.  For software which is copyrighted by the Free
6709 Software Foundation, write to the Free Software Foundation; we sometimes
6710 make exceptions for this.  Our decision will be guided by the two goals
6711 of preserving the free status of all derivatives of our free software and
6712 of promoting the sharing and reuse of software generally.
6714 @iftex
6715 @heading NO WARRANTY
6716 @end iftex
6717 @ifinfo
6718 @center NO WARRANTY
6719 @end ifinfo
6721 @item
6722 BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
6723 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
6724 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
6725 PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
6726 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
6727 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
6728 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
6729 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
6730 REPAIR OR CORRECTION.
6732 @item
6733 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
6734 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
6735 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
6736 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
6737 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
6738 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
6739 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
6740 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
6741 POSSIBILITY OF SUCH DAMAGES.
6742 @end enumerate
6744 @iftex
6745 @heading END OF TERMS AND CONDITIONS
6746 @end iftex
6747 @ifinfo
6748 @center END OF TERMS AND CONDITIONS
6749 @end ifinfo
6751 @page
6752 @appendixsec Appendix: How to Apply These Terms to Your New Programs
6754   If you develop a new program, and you want it to be of the greatest
6755 possible use to the public, the best way to achieve this is to make it
6756 free software which everyone can redistribute and change under these terms.
6758   To do so, attach the following notices to the program.  It is safest
6759 to attach them to the start of each source file to most effectively
6760 convey the exclusion of warranty; and each file should have at least
6761 the ``copyright'' line and a pointer to where the full notice is found.
6763 @smallexample
6764 @var{one line to give the program's name and a brief idea of what it does.}
6765 Copyright (C) @var{yyyy}  @var{name of author}
6767 This program is free software; you can redistribute it and/or modify
6768 it under the terms of the GNU General Public License as published by
6769 the Free Software Foundation; either version 2 of the License, or
6770 (at your option) any later version.
6772 This program is distributed in the hope that it will be useful,
6773 but WITHOUT ANY WARRANTY; without even the implied warranty of
6774 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6775 GNU General Public License for more details.
6777 You should have received a copy of the GNU General Public License
6778 along with this program; if not, write to the Free Software
6779 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
6780 @end smallexample
6782 Also add information on how to contact you by electronic and paper mail.
6784 If the program is interactive, make it output a short notice like this
6785 when it starts in an interactive mode:
6787 @smallexample
6788 Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
6789 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
6790 This is free software, and you are welcome to redistribute it
6791 under certain conditions; type `show c' for details.
6792 @end smallexample
6794 The hypothetical commands @samp{show w} and @samp{show c} should show
6795 the appropriate parts of the General Public License.  Of course, the
6796 commands you use may be called something other than @samp{show w} and
6797 @samp{show c}; they could even be mouse-clicks or menu items---whatever
6798 suits your program.
6800 You should also get your employer (if you work as a programmer) or your
6801 school, if any, to sign a ``copyright disclaimer'' for the program, if
6802 necessary.  Here is a sample; alter the names:
6804 @example
6805 Yoyodyne, Inc., hereby disclaims all copyright interest in the program
6806 `Gnomovision' (which makes passes at compilers) written by James Hacker.
6808 @var{signature of Ty Coon}, 1 April 1989
6809 Ty Coon, President of Vice
6810 @end example
6812 This General Public License does not permit incorporating your program into
6813 proprietary programs.  If your program is a subroutine library, you may
6814 consider it more useful to permit linking proprietary applications with the
6815 library.  If this is what you want to do, use the GNU Library General
6816 Public License instead of this License.
6818 @node Concept Index,  , GNU General Public License, Top
6819 @comment  node-name,  next,  previous,  up
6820 @unnumbered Index
6822 @printindex cp
6824 @bye