Remove unnecessary require, from Christophe Garion
[planner-el.git] / planner-el.texi
blob39b369805a0689a3387562543f434e31acf19965
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--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
529 where your planner files will be published by Muse as XHTML
530 (@pxref{Publishing}).
532 After you have added this code, make sure to either evaluate it or
533 restart Emacs.
535 @node Components, Advanced Installation, Creating Your Planner, Installation
536 @comment node-name,  next,  previous,  up
537 @section Components
539 Now that you have the archive, let's look at what's in it.
541 There should be three directories, named @file{planner}, @file{muse} and
542 @file{remember}.
544 In the @file{planner/} directory, you'll see many files with names like
545 @file{planner-gnus.el}. These are extra modules and extensions for
546 Planner, which you can use to tailor Planner to fit your desired
547 planning and information management habits.
549 In the @file{muse/lisp} directory, you'll see many files with names like
550 @file{muse-blosxom.el}. As in @file{planner/}, these are optional
551 modules and extensions.
553 A minimal working installation includes just @file{planner/planner.el}.
555 You need @file{planner.el} because it provides the core functions for
556 handling tasks, notes, and page navigation. You need @file{Emacs Muse}
557 because it provides the functions used to display your pages (both in an
558 emacs buffer and as HTML), and for connecting them to each other. More
559 specifically, it enables you to have hyperlinks and formatting in your
560 emacs buffers even though the actual files you are working with are
561 saved in plain text. These abilities are used in Planner to format your
562 planner pages the way you like, to create links from your tasks and
563 notes to the materials and projects they refer to, and to optionally
564 ``publish'' your pages in different formats, including HTML.
566 In the @file{remember/} directory are files related to
567 RememberMode. RememberMode does not depend on Planner or Muse, but works
568 best with Planner installed. It is not required in order to use Planner,
569 but it is used by many Planner users to record notes and information to
570 their planner pages.
572 If you are curious, you can open each file in these directories and read
573 the comments at the top, to get an idea of what each extension is used
574 for. They are also all detailed later in this manual.
576 @node Advanced Installation,  , Components, Installation
577 @comment  node-name,  next,  previous,  up
578 @section Advanced Installation
580 Once you decide you want to keep Planner around for a while, there
581 are two additional steps you can take to make using it easier and more
582 efficient. These steps are optional.
584 @itemize
585 @cindex installing the info file
586 @cindex @file{planner-el.texi}, installing
587 @cindex @file{planner-el.info}, installing
588 @item You can make this document, the Planner info file, appear in
589 the index of info files you see when you type @command{M-x info} or
590 @kbd{C-h i} in Emacs. The instructions for doing this vary depending
591 on whether you have permission to edit certain files on your
592 system. Follow the instructions in @ref{Installing an Info File, ,
593 ,texinfo, Texinfo}, using something like:
595 @example
596 * Planner: (path/to/planner/Planner). Organizer/day planner
597 for Emacs.
598 @end example
600 for the new entry in the info @file{dir} file.
602 @cindex byte compiling
603 @item You can byte-compile @file{planner.el}, @file{Muse},
604 @file{remember.el}, or any of the optional modules you frequently use,
605 in order to improve the speed of their execution. Basically, all you
606 need to do is change to the directory of each project in
607 @file{scripts/planner-build.el} and run @command{make} from the command
608 line. To read more detail about byte compilation, see
609 @ref{Byte Compilation, , ,elisp, Emacs Lisp Reference Manual}.
611 @end itemize
613 @node Overview, Getting Started, Installation, Top
614 @comment node-name,  next,  previous,  up
615 @chapter Overview
617 Planner is a plain-text hyperlinked personal information manager
618 for Emacs that helps you keep track of tasks, notes, and other
619 information. People use Planner to support different ways of planning
620 one's day, from Franklin-Covey and David Allen's Getting Things Done
621 to home-brew hacks. Planner is even used to manage information not
622 normally handled by a personal information manager, like bugtracking,
623 time tracking, and team data. If you start by using Planner as a basic
624 TODO and notes manager, you might find other ways it can help you
625 improve your process.
627 You can use Planner to keep track of your tasks, schedule, notes,
628 and other information you want to store in hyperlinkable text files.
629 You can get the most benefit out of a personal information manager if
630 you use it everyday. Most people add @code{(plan)} to the end of their
631 @file{~/.emacs} so that Planner shows today's schedule and
632 unfinished tasks whenever Emacs starts. If you leave your Emacs
633 running for more than 24 hours, try to get into the habit of running
634 @code{plan} at least once a day.
636 Because your time is important, Planner tries to minimize
637 distractions, making it easier for you to jot down tasks and notes
638 without being distracted from your work. People often make tasks based
639 on the current buffer, so Planner tries to create hyperlinks to
640 whatever you're looking at so that you can jump back to it easily. The
641 @ref{Getting Started} tutorial will show you how to set that up for
642 both tasks and notes.
644 The customizability of Planner means you can make your personal
645 information manager truly personal. Planner strives to be as flexible
646 as possible, and we would love to adapt Planner to fit your needs.
647 Browse through our mailing list (@pxref{Getting Help}) to
648 find out how other people are using Planner, and post your feature
649 requests and bug reports there!
651 Planner is just a tool. It does not dictate a particular way of
652 planning, although it supports some ways better than it supports
653 others. If you want to take some time thinking about planning, read
654 the following reflections for inspiration and ideas. On the other
655 hand, if you want to hit the ground running, see @ref{Getting
656 Started}. If you already have a specific way of planning in mind,
657 check out @ref{Sample Configuration Files}.
659 @menu
660 * Planning based on the Franklin-Covey Approach::  
661 * Why Use Planner::             
662 @end menu
664 @node Planning based on the Franklin-Covey Approach, Why Use Planner, Overview, Overview
665 @comment  node-name,  next,  previous,  up
666 @section Planning Based on the Franklin-Covey Approach
667 @cindex philosophy of planning
669 This is a slightly edited and updated version of an essay by John
670 Wiegley. Read it if you want to get some insights into one way of
671 planning. You can skip this if you want to go straight to planning
672 your day.
674 What is planning?  It can be a nebulous thing to define.  In its
675 essence, however, it is very simple: it's how we achieve our dreams.
677 Our days are filled with time, and hence with actions, whether they
678 be of a mental or physical sort.  But there are two kinds of
679 action: reactive and creative.  Reactive action is a response to
680 the environment, a reaction to stimulus.  Had we enough instincts
681 to ensure survival, we could live according to this kind of action
682 alone.  It is a mode of behavior we share with every living
683 species.
685 The opposite to reactivity is creativity, when we decide upon a
686 course of action that is a wholly a product of personal choice.  We
687 then make decisions as to the steps needed to make this wish a
688 reality.  This is planning.  Planning is essentially a creative
689 endeavor at every step.
691 First, create the idea, what you want to achieve.  Very short-term
692 ideas do not need much more than thinking about how to do it.  But
693 long-term ideas require planning, since the mind cannot contain all
694 of the details.
696 Second, decide how the idea maps into the circumstances you find
697 yourself in.  Some environments will assist your plan, others
698 hinder it.  But step by step, identify every barrier to the
699 realization of your idea, and devise a countermeasure to overcome
700 it.  Once you've mapped things out from beginning to end,
701 accounting for unknowables as best you can, you now have your plan.
703 Third is to break the stages of the plan into parts that are not
704 overwhelming in their complexity.  It is at during this phase that
705 a plan is turned into task items, each to be accomplished within
706 the span of one day's time.  If a task requires several days, break
707 it up further.  The smaller it is, the less your mind will recoil
708 from attempting it.
710 Fourth is to monitor your progress, identifying problems and
711 correcting for them as you go.  Some plans start out unachievable,
712 and remain that way indefinitely, due to a simple lack of
713 observation.  If nothing is working for you, change it.  Otherwise,
714 your plan is merely a well-crafted wish.
716 Fifth is just to do the work, and be patient.  All good plans take a
717 great deal of time, and *cannot* happen immediately.  The groundwork
718 must be laid for each step, or else it will rest on an unsecure
719 foundation.  If you follow your plan doggedly, applying some time to
720 it each day or week, it @emph{will} happen.  Remember the story of the
721 tortoise and the hare.  I've even written a short essay on the
722 necessity of gradual accomplishment, which can be found at
723 @url{http://emacswiki.org/johnw/essays/node2.html}.
725 How can this software help?  Computers are ideal for manipulating
726 information, since they allow you to change things without erasing
727 or rewriting.  And since all plans change quite a bit during their
728 implementation, a planning program can be very helpful.
730 Start by adding the following to your @file{.emacs} (or @file{_emacs}):
732 @example
733 (load "planner")
734 @end example
736 Now, conceive your idea.  I can't believe there's nothing you want
737 from life.  More peace, time to enjoy the world, an end to war?
738 Everyone wants something.  Search deeply, and you will find
739 countless unhoped wishes lurking therein.  Choose one for now, and
740 think on it for a while.
742 Then open a file (using @kbd{C-x C-f}) within the directory named by
743 @code{planner-directory}.  Emacs will automatically recognize this file
744 as a planner file.  Name the file after your plan, such as
745 @file{BetterHealth}.
747 Choose an idea you really want to accomplish.  Struggle to
748 differentiate between the things you want because others want them,
749 and the things you want for yourself.  It takes quite an effort, and
750 may require a long time before you notice the difference.  Many people
751 want to be more healthy to be more attractive, which is an externally
752 driven goal.  Unless @emph{you} really want to accomplish what you
753 envision, the odds are you will fail.  Only our own wishes and dreams
754 possess enough personal energy to see themselves to fruition.  What
755 happens to many of us is simply that we never become conscious of
756 these dreams: what we love, what we desire most.  When I talk to
757 friends, so much of what I hear is things they want because they feel
758 they should want them.  There's just not enough energy there to pursue
759 a good plan, because nearly all of it is negative energy.
761 Do you know what you really want?  Don't worry, many people don't.
762 It's not a question anyone really wants us to pursue, because often
763 we don't want what others do; it doesn't contribute to the social
764 welfare, and all that nonsense.  Somehow we always forget that
765 what's good for the social welfare now, was someone else's crazy
766 dream a hundred years ago.  The human aversion to fundamental
767 change is always one's greatest enemy, so don't waste any time
768 getting bitter about it.
770 For the sake of argument I assume you really do want to be
771 healthier, because you've fallen in love with the ideal of purity,
772 or you understand the connection between your physical self and the
773 world around you, and how this can open up your spirit to desiring
774 more.  I assume.  :)
776 So you're in a Wiki file called @file{BetterHealth}.  Start typing.
777 Type anything related to your idea: what you think about it, your
778 ideas on it, @emph{and especially what the end will look like}.  If
779 you can't visualize the end, you can't plan, since planning is about
780 drawing a line between now and then.
782 When you've typed enough to gain a vision of your goal, start
783 drafting what the possible intermediate steps might be.  Then stop,
784 get up, walk around, enjoy life, and come back to it.  Taking a
785 long time at the beginning is not a bad idea at all, as long as
786 it's not forever.
788 As you chew on your idea, it will begin to become more and more
789 concrete.  You'll have ideas about the smallest pieces, and ideas
790 about the biggest pieces.  Keep going until it starts to take shape
791 before you, and you can see yourself in your mind's eye moving from
792 the present into the future.  Write down this progression, and the
793 sorts of things you might encounter along the way.
795 As you continue, you'll naturally discover discrete phases, or
796 ``milestones'' as managers love to call them.  These are very
797 important, because they let you know you're making progress.  I
798 recommend having a big party with friends every time you achieve a
799 milestone.  A typical plan might have between three and ten.
801 Between the milestones are the bigger pieces of your plan.  Name
802 these pieces using MixedCase words, and you'll notice that Emacs
803 colors and underlines them for you.  Like, FindGoodGym.  Hit return
804 on this highlighted word, and you'll find yourself in another,
805 blank file.  In this file, start drafting your sub-plan, just as
806 you did with the larger plan.  You should find it easier now, since
807 the scope is smaller.
809 As you break down further, you'll notice simple little things that
810 need to get done.  These are your tasks.  Every plan is a
811 succession of tasks.  The difference from reactivity is that each
812 task is part of the larger plan. This is what it means to be
813 systematic: that everything you do helps further your plan.  If you
814 have tasks in your day that contribute to no plan, they are
815 reactive.  Of course, life is full of these, but don't let them
816 take up more than 20% of your day.  If you allow yourself to be
817 dominated by reactive tasks, you'll regret it at the end of your
818 life.  I don't know this personally, but I do know that striving
819 for one's dreams -- and seeing them come to fruition -- is the
820 greatest joy a man can possess.  It is the essence of freedom, of
821 living, of creation.  Reactivity is the opposite of this, and
822 serves only to drain our energy and slacken our spirits.
824 Now that you've thought of a simple task, type @kbd{C-c C-t}. This
825 will ask for a brief description of the task, and when you plan to do
826 it. If you hit @key{RETURN} at the question @samp{When}, it assumes
827 you mean today. It will also pop up a three-month calendar at this
828 question, so you can see where your free days are. Make sure you set
829 the variable @code{mark-diary-entries-in-calendar} to @samp{t} in your
830 @file{.emacs} (or @file{_emacs}) file. This way, you can see which
831 days your appointments fall on. (Read about the Emacs Calendar and
832 Diary in @ref{Calendar/Diary, , , Emacs, GNU Emacs Manual}.)
834 @example
835 (setq mark-diary-entries-in-calendar t)
836 @end example
838 Once your task is in there, go back to your plan and keep
839 generating more tasks.  Generate them all!  Fully describe---as
840 tasks---everything necessary to bring your sub-plan to completion.
841 Don't create tasks for the other sub-plans.  You may have good idea
842 of what they'll look like, but don't bother rendering them into
843 tasks just yet.  Things will change too much between now and then,
844 for that to be a good use of your time.
846 Is your sub-plan now rendered into all of the tasks necessary to
847 reach your first milestone?  Great!  That is the purpose of
848 planner.el.  The rest is really up to you.  If you find that you
849 keep putting things off, and never do them, that's the surest sign
850 you're planning for someone else's dream, and not your own.
852 Here are some of the things planner.el can do, to help you manage
853 and track your tasks:
855 At the beginning of every day, type @kbd{M-x plan}.  This will jump
856 you to the top of the most recent task list before today.  If you
857 skipped a bunch of days, you'll have to open up those files on your
858 own.
860 Probably some of the tasks that day won't be finished -- that's OK.
861 Learning to properly estimate time is a magical, mystical art that few
862 have mastered.  Put your cursor on those undone tasks, and type
863 @kbd{C-c C-c}.  This will move them into today's task page.  You can
864 jump to today's task page at any time by typing @kbd{C-c C-n} (from a
865 Wiki or planning page).  I heartily recommend binding @kbd{C-c n}, to
866 jump you to this page from anywhere:
868 @example
869 (define-key mode-specific-map [?n] 'planner-goto-today)
870 @end example
872 As you look at your task sheet each day, the first thing to do is to
873 ``clock in'' to one of them.  This isn't necessary, and is only
874 helpful if you're around your computer a lot.  But by typing @kbd{C-c
875 C-i} (assuming you have my @file{timeclock.el} on your load-path), it
876 will log the time you spend working on your sub-plan (@pxref{Time
877 Intervals, , , Emacs, GNU Emacs Manual}).  This is helpful for viewing
878 your progress.  Type @kbd{C-c C-o} to clock out.
880 @kbd{C-M-p} and @kbd{C-M-n} will move a task up and down in priority.
881 Priority is represented by a letter A through C.  'A' tasks mean they
882 must be done that day, or else your plan is compromised and you will
883 have to replan.  'B' means they should be done that day, to further the
884 plan, otherwise things will be delayed.  'C' means you can put off the
885 task if you need to, although ultimately it will have to be done.
887 For reactive tasks, the letters mean something different: 'A' means
888 you must do it today, or somebody will roast your chestnuts over an
889 open fire.  'B' means you should do it today, or else someone will
890 be practicing patience at the day's end.  'C' means no one will
891 notice if you don't do it.
893 Again, reactive tasks are ENEMIES OF PLANNING.  Really, until you
894 see them that way, circumstances will push you around and steal
895 your life away.  We have only so many years to use, and everyone is
896 greedy to take them.  It's insidious, almost invisible.  A healthy
897 dislike of reactivity will do wonders for organizing your affairs
898 according to their true priority.
900 The last word that needs to be said concerns ``roles''.  Every person
901 stands in several positions in his life: husband, employee, manager,
902 etc.  These roles will tend to generate tasks not associated with any
903 immediate plan, but necessary to maintain the health and functioning
904 of the role.  My suggestion is to keep this the smallest possible
905 number, and fulfill those that remain well.  How you decide to
906 apportion your time between pursuing grand designs, and fostering deep
907 relationships, is a personal matter.  If you choose well, each will
908 feed the other.
910 I mention this to point that reactivity is something not
911 exclusively associated with tasks that have no master plan, because
912 being a father, for example, is something that rarely proceeds
913 according to orderly plans.  But the role of father itself is its
914 own plan, whose goal is ``to be the best one can'', and whose
915 component tasks are spending time on whatever comes up.  It is, in
916 a sense, an implicit plan.  But reactive tasks follow no plan at
917 all; they are parasites of time that suck the spirit away, whereas
918 properly chose roles actually help fulfill one's own inner needs.
919 At least, this is what I believe.
921 @defun plan force-days
922 Start your planning for the day, beginning with the last day's tasks.
924 If @code{planner-carry-tasks-forward} is non-nil, find the most recent
925 daily page with unfinished tasks and reschedule those tasks to
926 the current day.  If @var{force} is non-nil, examine all past daily
927 pages for unfinished tasks.
929 If @code{planner-carry-tasks-forward} is nil, visit the most recent
930 daily page.  If a daily page for today exists, visit that instead.
932 If @var{force-days} is a positive integer, scan that number of days.
933 If @var{force-days} is @samp{t}, scan all days.
935 @end defun
937 @node Why Use Planner,  , Planning based on the Franklin-Covey Approach, Overview
938 @comment  node-name,  next,  previous,  up
939 @section Why Use Planner?
940 @cindex Planner, why use
942 You can skip this essay if you just want to get started, or read it
943 for some insights into why the previous maintainer is crazy about it.
945 Why I Use Planner, by Sacha Chua
947 I thought about why I liked Planner. Planner as a TODO manager
948 isn't particularly special. Although I can assign tasks to categories
949 and see a breakdown of what projects are taking up my time, Evolution
950 and Microsoft Outlook provide more powerful task support. In other
951 task managers, you can e-mail tasks, assign multiple categories and
952 fill in all sorts of metadata. You can even synchronize your tasks
953 with devices like a phone or PDA. So why use Planner?
955 I realized that integration into my way of life and automatic context
956 clues are what really make planner tasks worth it for me. I don't have
957 to switch to another application to create a task. I can just hit a
958 keyboard shortcut. Planner uses a minibuffer to get the task
959 description. My windows are not rearranged in any way, and I can look
960 at the data that's relevant to a task. Not only that, tasks
961 automatically pick up context clues, like whom I'm talking to on IRC
962 or the file I'm editing at the moment. This cuts down on the explicit
963 context I need to include and makes it easier for me to bring up the
964 task again.
966 As a scheduler, Planner is also not particularly distinguished.
967 Sure, it can display my @file{~/diary}, but for that matter so can
968 @kbd{M-x diary}. Evolution and Outlook can give me a more graphical
969 view of my time, sync with my PDA, and coordinate my schedule with
970 other people. Those applications support detailed schedule entries
971 with powerful cyclic options. On the other hand, Planner gives me
972 a personal, plain text view and (at least the way I use it) requires
973 me to edit a separate file to add new appointments. (I've defined a
974 few shortcut keys to deal with this.) However, it does have one
975 advantage---my schedule is always loaded. I used to use Outlook on
976 Windows, but having my schedule in a separate application meant that I
977 actually looked at it very rarely, as I had turned off reminders
978 because they got annoying.
980 Planner's notes, however, are what really convinced me. I can hit
981 a keyboard shortcut from anywhere and type my notes into a buffer
982 which automatically keeps context information. After typing the note,
983 I can then categorize it. I think that the critical thing here is that
984 interruptions---fleeting thoughts---don't break my flow. I can just
985 pop up a remember buffer, stow that thought away somewhere, and go
986 back to it whenever I want. In contrast, creating a note in Outlook
987 means switching out of my application, making a couple of keystrokes,
988 typing the note in, and then switching back. The context switches make
989 it hard to keep track of where I am and what I'm supposed to remember.
990 Not only that, I need to enter context by hand. Even though I can
991 color my notes and reorganize them in Outlook, I find the context
992 switch too expensive. I used to keep notes in other knowledge
993 management tools as well. Some applications allowed me to
994 drag-and-drop links into the current note, and that was cool. But that
995 required a manual action, and those applications didn't feel
996 integrated into my way of working. (Note: You'll need remember.el for
997 this.)
999 I guess that's why I like Planner. Unlike other organizers which
1000 don't know anything about the applications I use, Planner tries
1001 its best to integrate into the way I work, and it's easy to extend.
1002 Fortunately I do almost all my work in Emacs, so I can think of my
1003 organizer as integrated into my e-mail client, Internet Relay Chat
1004 client, web browser, file editor and even games. It automatically
1005 picks up context clues from these applications and allows me to easily
1006 jump back to relevant files. It doesn't distract me. It allows me to
1007 key in data and then it gets out of my way.
1009 (That said, it's perfectly okay to use Planner even if you don't live
1010 in Emacs.)
1012 The processing that happens in the background is a bonus, and
1013 publishing my task list and notes online has greatly helped me. It
1014 gives other people a way to see what I'm working on and what I've
1015 planned for the future. Occasionally people write in with additional
1016 resources and helpful tips. (Again, this is purely optional. Many
1017 people don't publish their planner pages. Other people use really
1018 fine-grained access control.)
1020 I think the greatest feature of Planner, though, is its user
1021 community. Because Planner can be easily modified, we can experiment
1022 with a lot of new ideas quickly, and we can tailor Planner to fit our
1023 needs. I love checking my @samp{planner-el-discuss} mail and finding
1024 out how people have tweaked Planner or would like to tweak Planner,
1025 and I've learned a lot by exchanging reflections on organizing one's
1026 life.
1028 I really wasn't an organization freak before I started using Planner.
1029 I often forgot to do my homework or answer important mail. I still
1030 procrastinate now, but at least it's all being kept track of
1031 somewhere! I also really like how Planner lets me to gradually improve
1032 how I'm doing things, and I feel I've come a long way.
1034 Please try it out! We'd love to hear how Planner can become
1035 @emph{your} personal information manager.
1037 @node Getting Started, More about Planner, Overview, Top
1038 @comment  node-name,  next,  previous,  up
1039 @chapter Getting Started
1041 At the end of this tutorial, you will be able to use Planner and
1042 related modules to keep track of your tasks, schedules and notes, all
1043 within the convenience of Emacs.
1045 There are two kinds of pages in a Planner wiki. Day pages show tasks,
1046 schedule, and notes for the day, while plan pages organize related tasks
1047 and notes into a single page.
1049 If you have not yet added planner to your @file{~/.emacs}, add the
1050 following lines:
1052 @example
1053 (add-to-list 'load-path "/path/to/muse/lisp")
1054 (add-to-list 'load-path "/path/to/planner")
1055 (add-to-list 'load-path "/path/to/remember")
1056 (require 'planner)
1057 @end example
1059 This will bring up the most recent day page with unfinished tasks or
1060 create a new day page if necessary. By default, planner pages are
1061 stored in @samp{~/Plans} (@code{planner-directory}).
1063 @menu
1064 * Tasks::                       
1065 * Schedule::                    
1066 * Notes::                       
1067 * Hyperlinks::                  
1068 * Example Page::                
1069 * Review::                      
1070 @end menu
1072 @node Tasks, Schedule, Getting Started, Getting Started
1073 @section Tasks
1075 Let us start by creating a task labelled
1077 @example
1078 Join http://mail.gna.org/listinfo/planner-el-discuss/
1079 @end example
1081 From anywhere (even this info buffer!), call @kbd{M-x
1082 planner-create-task-from-buffer} to create a new task. Fill in the
1083 description and choose a date by:
1085 @itemize
1086 @item typing 1 - 31 to put the task on that day of the month,
1087 @item accepting the default (today) by pressing RET,
1088 @item selecting the date with mouse-1,
1089 @item
1090 typing +n (where in is an integer) to schedule the task in n days time,
1092 @item typing nil to make an undated task.
1093 @end itemize
1095 For now, accept the default (@samp{today}) by pressing @key{RET}.
1097 You will then be prompted for a plan page. Plan pages gather related
1098 tasks and notes, giving you an overview of what you've done so far.
1099 You can accept the default TaskPool, create your own plan page, or
1100 specify nil to make a task that is not associated with a plan page.
1101 For now, accept the default (@samp{TaskPool}) by pressing RET.
1103 You have created your first task. View today's page with
1104 @kbd{M-x planner-goto-today}. You will see a line of the form
1106 @example
1107 #B  _ Join http://mail.gna.org/listinfo/planner-el-discuss/ (TaskPool)
1108 @end example
1110 If you created the task from this page, then there will be an additional
1111 annotation:
1113 @example
1114 #B  _ Join http://mail.gna.org/listinfo/planner-el-discuss/ : Tasks (TaskPool)
1115 @end example
1117 The URL, @samp{TaskPool} and @samp{Getting Started} are
1118 hyperlinks. You can use TAB and S-TAB to navigate between them and RET
1119 to follow the link.
1121 Create more tasks using @kbd{M-x planner-create-task-from-buffer}.
1122 This is bound to @kbd{C-c C-t} in @code{planner-mode} pages
1123 for your convenience. For example, create the following tasks:
1125 @itemize
1126 @item
1127 @samp{Describe my current way of working and how I would like to work},
1128 for three days from now (@samp{+3}),
1129 @item
1130 @samp{Learn how to schedule a task}, an undated task (@kbd{nil}) on the
1131 TaskPool page,
1132 @item
1133 @samp{Browse through the Planner info manual} for today (@kbd{.} or
1134 accept the defaults), and
1135 @item
1136 @samp{Add (plan) to the end of my [[~/.emacs]]} for today, but without a
1137 plan page (specify @kbd{nil} at the plan page prompt)
1138 @end itemize
1140 Tip: I bind planner-create-task-from-buffer to "F9 t" so that I can
1141 easily call it from anywhere. You can do that with this elisp fragment:
1142 @code{(global-set-key (kbd "<f9> t") 'planner-create-task-from-buffer)}
1144 Next, visit the TaskPool by:
1146 @itemize
1147 @item
1148 @key{TAB}-bing or using the cursor and typing @key{RET} to follow the
1149 link,
1150 @item @kbd{C-x C-f TaskPool RET} to use @code{find-file}, or
1151 @item @kbd{C-c C-f TaskPool RET} to use @code{muse-project-find-file}
1152 @end itemize
1154 You can see an overview of the tasks as scheduled on different days.
1155 Unlike many personal information managers that store all of your data
1156 in one file and then perform magic in order to present different
1157 views, Planner uses plain text files. The data is duplicated and kept
1158 updated by functions. This makes it simpler and easier to modify,
1159 because what you see is (almost) what you get. On the other hand,
1160 you'll need to get used to either editing both files, or using the
1161 built-in functions for editing and updating files. If you prefer not
1162 to work with linked tasks, you can configure Planner to use only plan
1163 pages or use only day pages.
1165 The TaskPool page should list the tasks you created earlier. Go to the
1166 one named Learn how to schedule a task . Type @kbd{C-c C-c}
1167 (@code{planner-copy-or-move-task}) to schedule the task. Type RET to
1168 accept the default (today). Go to the day page by following the link
1169 or calling @kbd{M-x planner-goto} (@kbd{C-c C-j C-d} or the menu bar);
1170 you will see the newly-created task there. You can also use @kbd{C-c
1171 C-c} (@kbd{planner-copy-or-move-task}) to reschedule a task to an
1172 earlier or later date.
1174 Well, that task is done. To mark the task as completed, type @kbd{C-c
1175 C-x} (@code{planner-task-done}). You can also edit the status manually
1176 (change _ to X) as long as you remember to call @kbd{M-x
1177 planner-update-task} to update the link page as well. Updating relies on
1178 the task description being the same, so do not edit this manually.
1180 Quick summary of commands:
1182 @itemize
1183 @item
1184 Go to today's page: @kbd{M-x plan} to carry unfinished tasks forward, or
1185 @kbd{M-x planner-goto-today} to just go to today's page.
1186 @item
1187 Create a task: @kbd{C-c C-t} (@code{planner-create-task-from-buffer}),
1188 or type a task manually (call M-x planner-update-task if the task is
1189 linked)
1190 @item
1191 Mark a task as done: @kbd{C-c C-x} (@code{planner-task-done}), or edit
1192 the task and call @kbd{M-x planner-update-task}
1193 @item Edit a task description: @kbd{M-x planner-edit-task-description}
1194 @item Reschedule a task: @kbd{C-c C-c} (@code{planner-copy-or-move-task})
1195 @item
1196 Reschedule many tasks: Mark a region and use @kbd{M-x
1197 planner-copy-or-move-region}
1198 @item
1199 Change the plan of a task: @kbd{M-x planner-replan-task}, or @kbd{C-c
1200 C-c} (@code{planner-copy-or-move-task}) with a plan page
1201 @item Delete a task: @kbd{M-x planner-delete-task}
1202 @item
1203 Reorder tasks: @key{M-p} (@code{planner-raise-task}) and @key{M-n}
1204 (@code{planner-lower-task}), or normal editing commands like kill and
1205 yank
1206 @item Change task priorities (@samp{#A} > @samp{#B} > @samp{#C}):
1207       @key{C-M-p} (@code{planner-raise-task-priority}) and
1208       @key{C-M-n} (@code{planner-lower-task-priority}),
1209       or edit the task and call @kbd{M-x planner-update-task}.
1210 @end itemize
1212 You can save your tasks with @kbd{C-x C-s} the same way you save any
1213 other file, or Emacs will prompt you to save it when you exit.
1215 @node Schedule, Notes, Tasks, Getting Started
1216 @comment  node-name,  next,  previous,  up
1217 @section Schedule
1219 This is free-form. You can put anything you want into this, or remove
1220 it from @code{planner-day-page-template} entirely. Some people use it
1221 to keep track of their plans for the day with tables like this:
1223 @example
1224 hh:mm | hh:mm | activity
1225 hh:mm | hh:mm | activity
1226 hh:mm | hh:mm | activity
1227 @end example
1229 Remember, Planner files are just plain text. You can add new sections
1230 or remove old ones, or use the suggested sections for entirely
1231 different activities.
1233 @node Notes, Hyperlinks, Schedule, Getting Started
1234 @comment  node-name,  next,  previous,  up
1235 @section Notes
1236 @cindex @file{remember.el}
1237 @cindex @file{remember-planner.el}
1238 @cindex notes
1240 By default, your Planner pages will have a Notes section. You can put
1241 anything you want in this section, or remove it from your
1242 @code{planner-day-page-template} entirely.
1244 You may be interested in @file{remember-planner.el}, part of the
1245 Remember package (see @inforef{Top, remember-el, remember-el}). You
1246 can download Remember at @uref{http://gna.org/projects/remember-el/}).
1248 @code{remember-planner.el} makes it easy to create notes from anywhere
1249 in Emacs, and it uses the same context-sensing code that Planner uses.
1250 Notes added by @code{remember-planner.el} look like this:
1252 @example
1253 .#1 Headline 00:00
1254 Body
1256 [[context hyperlink]]
1257 @end example
1259 and are outlined at the H2 level in published HTML.
1261 You can easily create context-aware notes if you include the following
1262 in your @file{~/.emacs}:
1264 @example
1265 (require 'remember-planner)
1266 (setq remember-handler-functions '(remember-planner-append))
1267 (setq remember-annotation-functions planner-annotation-functions)
1268 @end example
1270 Then @kbd{M-x remember} will open a dedicated buffer for you to write
1271 your note. If Planner recognizes your current buffer as one with
1272 context then it will include a hyperlink at the bottom of the note.
1273 The first line of the note is used as a title, so make it short and
1274 meaningful. The rest of the text will be used as the body. Try it now
1275 by creating a note, perhaps about things you'd like to remember from
1276 this tutorial.
1278 Typing @kbd{C-c C-c} after composing will prompt for a plan page to
1279 put the note on, with auto-completion. If you don't enter a page, the
1280 note will just be saved on today's page. If you do specify a plan
1281 page, the note will go on both today's page and on the specified page.
1282 Let's try specifying @samp{TaskPool} for the note.
1284 If you look at today's page, you'll find a timestamped note that links
1285 to @samp{TaskPool}. Likewise, @samp{TaskPool} contains a note that
1286 links to today's page. To change the plan page of a note, use
1287 @kbd{planner-replan-note}.
1289 If you decide to edit the note on one of these pages after it has been
1290 saved, be aware that your changes will not be automatically reflected
1291 on the linked page. To update the linked page after editing a note,
1292 use @kbd{M-x planner-update-note}.
1294 @node Hyperlinks, Example Page, Notes, Getting Started
1295 @section Hyperlinks
1296 @cindex hyperlinks
1298 Planner automatically creates context-sensitive hyperlinks for your
1299 tasks and notes when you use @code{planner-create-task-from-buffer}
1300 and @code{remember}.
1302 Blue links indicate URLs and Planner pages that already exist. Red links
1303 indicate Planner pages that have not yet been created.
1305 Middle-click or type @key{RET} on any link to view the link in the
1306 current window. Shift-middle-click or type @key{S-RET} to view the
1307 link in another window. @key{TAB} goes to the next link, while
1308 @key{S-TAB} goes to the previous one.
1310 You can pick up hyperlinks using the @code{planner-annotation-as-kill}
1311 function.
1313 @defun planner-annotation-as-kill
1314 Create a context-sensitive hyperlink for the current buffer and copy
1315 it to the kill ring. When called with a prefix argument, prompt for
1316 the link display name.
1317 @end defun
1319 You can then paste it into any Planner buffer by using @kbd{M-x yank}
1320 or the keyboard shortcut.
1322 Hyperlinks are a powerful feature of Planner. You can use them to
1323 hyperlink to mail, news, Web pages, and even IRC connections. See the
1324 section on @ref{Managing Your Information} to find out how to enable
1325 support for various parts of Emacs. Want to add a new hyperlink
1326 scheme? Check out the source code for examples or ask on the mailing
1327 list for help.
1329 @node Example Page, Review, Hyperlinks, Getting Started
1330 @comment  node-name,  next,  previous,  up
1331 @section Example Page
1332 @cindex example page
1333 @cindex planning page, example
1335 An example planner file is given below. You'll notice that Planner
1336 does not have a well-defined user interface. Rather, it's free-form
1337 and open, allowing you to adapt it to your preferences.
1339 @example
1340 ----------------------------------------------------------------------
1341 * Tasks
1343 #B  _ Join http://mail.gna.org/listinfo/planner-el-discuss/ (TaskPool)
1344 #B  _ Browse through the Planner info manual (TaskPool)
1345 #B  _ Add (plan) to the end of my ~/.emacs
1346 #B  X Learn how to schedule a task (TaskPool)
1348 * Schedule
1350 18:00 | 19:00 | Learn how to use Planner
1352 * Notes
1354 Notes are free-form. You can put anything you want into this.
1356 .#1 This is note number one
1358 Notes on note number one!
1360 .#2 This weird ".#2" syntax is used for allout.el enumerated lists
1362 It makes using allout-mode very handy.
1364 @end example
1366 @node Review,  , Example Page, Getting Started
1367 @comment  node-name,  next,  previous,  up
1368 @section Review
1370 @itemize
1372 @item @emph{Ideas for using planner more effectively:}
1374 @itemize
1375 @item
1376 Add @code{(plan)} to the end of your @file{~/.emacs} so that you are
1377 reminded about your tasks every day.
1379 @item
1380 Bind useful functions to shortcut keys and get used to creating tasks
1381 and notes from anywhere.
1383 @item
1384 Think about how you plan your day and look for ways to improve it. Ask
1385 the mailing list (@pxref{Getting Help}) for tips.
1387 @item
1388 Browse the rest of this manual, the source code, and other resources on
1389 the Net for tidbits you can use.
1391 @item Have fun!
1392 @end itemize
1394 @item @emph{Useful functions outside planner buffers:}
1396 @itemize
1397 @item @code{planner-create-task-from-buffer}
1398 @item @code{remember}
1399 @item @code{planner-goto-today}
1400 @item @code{planner-goto}
1401 @item @code{plan}
1402 @end itemize
1404 @item @emph{Useful functions inside planner buffers:}
1406 @itemize
1407 @item @kbd{C-c C-t} (@code{planner-create-task-from-buffer})
1408 @item @kbd{C-c C-x} (@code{planner-task-done})
1409 @item @kbd{M-x planner-edit-task-description}
1411 @item
1412 @kbd{C-c C-c} (@code{planner-copy-or-move-task}), @kbd{M-x
1413 planner-copy-or-move-region}
1415 @item @kbd{M-x planner-replan-task}
1416 @item @kbd{M-x planner-delete-task}
1418 @item
1419 @key{M-p} (@code{planner-raise-task}) and @key{M-n}
1420 (@code{planner-lower-task})
1422 @item @key{C-M-p} (@code{planner-raise-task-priority}) and
1423       @key{C-M-n} (@code{planner-lower-task-priority}),
1424 @item @code{planner-replan-note}
1425 @item @code{planner-update-note}
1426 @end itemize
1428 @end itemize
1430 That's all you need to know in order to use Planner as a basic TODO and
1431 notes manager, but there's a whole lot more. Read through this manual
1432 and our mailing list archives (@pxref{Getting Help}) for lots of
1433 wonderful ideas about planning in Emacs!
1435 @node More about Planner, Managing Your Information, Getting Started, Top
1436 @comment  node-name,  next,  previous,  up
1437 @chapter More about Planner
1439 @menu
1440 * Navigation::                  
1441 * More about Tasks::            
1442 * More about Notes::            
1443 * Making Files Pretty::         
1444 * Annotations::                 
1445 * Interactive Lisp::            planner-lisp.el
1446 * Publishing::                  planner-publish.el
1447 * Experimental Functions::      planner-experimental.el
1448 @end menu
1450 @node Navigation, More about Tasks, More about Planner, More about Planner
1451 @comment  node-name,  next,  previous,  up
1452 @section Starting with Day Pages
1454 @command{planner-goto-today} opens today's page.  Day pages are named
1455 @samp{YYYY.MM.DD} and contain your notes for the day.
1457 You should see a file that looks like this:
1459 @example
1460 * Tasks
1463 * Schedule
1465 * Notes
1466 @end example
1468 You can type anything you want into this file.  You can add or delete
1469 sections.  When you save, Emacs stores your information in
1470 @code{planner-directory}.
1472 Use the following commands to navigate through day pages:
1474 @defun plan
1475 Start planning the day.  If @code{planner-carry-tasks-forward} is
1476 non-nil, copy the most recent unfinished tasks to today's page, else
1477 open the most recent page.
1478 @end defun
1480 @defun planner-goto (@kbd{C-c C-j C-d})
1481 Prompt for a date using a calendar pop-up and display the
1482 corresponding day page.  You can specify dates partially.  The current
1483 year and month are used if omitted from the input.  For example, if
1484 today is 2004.05.05, then
1486 @itemize
1487 @item @kbd{+1} is one day from now, or @samp{2004.05.06}
1488 @item @kbd{-1} is one day before now, or @samp{2004.05.04}
1489 @item @kbd{12} is equivalent to @samp{2004.05.12}
1490 @item @kbd{8.12} is equivalent to @samp{2004.08.12}
1491 @item @kbd{2005.08.12} is a full date specification
1492 @end itemize
1494 In the calendar buffer, you can also left-click or press @key{RET} on
1495 a date to select it.
1496 @end defun
1498 @defun planner-goto-today (@kbd{C-c C-j C-j})
1499 Display today's page. Create the page if it does not yet exist.
1500 @end defun
1502 @defun planner-goto-tomorrow (@kbd{C-c C-j C-t})
1503 Goto the planner page days @var{after} the currently displayed date.
1504 If @var{days} is nil, go to the day immediately after the currently
1505 displayed date.  If the current buffer is not a daily planner page,
1506 calculate date based on today.
1507 @end defun
1509 @defun planner-goto-yesterday (@kbd{C-c C-j C-y})
1510 Goto the planner page @var{days} before the currently displayed date.
1511 If @var{days} is nil, go to the day immediately before the currently
1512 displayed date.  If the current buffer is not a daily planner page,
1513 calculate date based on today.
1514 @end defun
1516 @defun planner-goto-most-recent
1517 Go to the most recent day with planning info.
1518 @end defun
1520 @defun planner-goto-previous-daily-page
1521 Goto the last plan page before the current date.
1522 The current date is taken from the day page in the current
1523 buffer, or today if the current buffer is not a planner page.
1524 Do not create pages if they do not yet exist.
1525 @end defun
1527 @defun planner-goto-next-daily-page
1528 Goto the first plan page after the current date.
1529 The current date is taken from the day page in the current
1530 buffer, or today if the current buffer is not a planner page.
1531 Do not create pages if they do not yet exist.
1532 @end defun
1534 @defun planner-goto-plan-page page
1535 Opens @var{page} in the the @code{planner-project} Wiki.  Use
1536 @code{planner-goto} if you want fancy calendar completion.
1537 @end defun
1539 @defun planner-show date
1540 Show the plan page for @var{date} in another window, but don't select
1541 it.  If no page for @var{date} exists, return nil.
1542 @end defun
1545 @node More about Tasks, More about Notes, Navigation, More about Planner
1546 @comment  node-name,  next,  previous,  up
1547 @section More about Tasks
1548 @cindex tasks, more about
1550 This section is divided into three parts. In the first part, you can
1551 read about all the options, strategies and commands to help you
1552 efficiently add new tasks to your planner. In the second part, we'll go
1553 over all of the aspects of Planner that relate to organizing, editing,
1554 rescheduling and viewing the tasks you've already created. Finally,
1555 we'll cover some ways to step back and look at various reports and
1556 overviews that can be generated from your planner pages.
1558 You may also be interested in tracking time spent on tasks with
1559 @ref{Timeclock} and estimating project completion time with
1560 @ref{Schedule} (also see @pxref{schedule.el}).
1562 @menu
1563 * Creating New Tasks::          
1564 * Organizing Your Tasks::       
1565 * Task Reports and Overviews::  
1566 @end menu
1568 @node Creating New Tasks, Organizing Your Tasks, More about Tasks, More about Tasks
1569 @comment  node-name,  next,  previous,  up
1570 @subsection Creating New Tasks
1571 @cindex tasks, creating
1573 Planner makes it very easy to quickly add something to your list of
1574 tasks. Once you get used to the basics of
1575 @command{planner-create-task-from-buffer}, you might want to take a
1576 closer look at some things in Planner that can help you create new tasks
1577 in a way that fits with your system.
1579 @menu
1580 * Creating a Task::             
1581 * Task Priorities::             
1582 * Task IDs::                    planner-id.el
1583 * Cyclic Tasks::                planner-cyclic.el
1584 * Task Detail::                 
1585 * Deadlines::                   planner-deadline.el
1586 @end menu
1588 @node Creating a Task, Task Priorities, Creating New Tasks, Creating New Tasks
1589 @comment  node-name,  next,  previous,  up
1590 @subsubsection Creating a Task
1591 @cindex tasks, creating
1593 You can create a task from any buffer in Emacs by invoking
1594 @command{M-x planner-create-task-from-buffer}.
1596 This command does more than just add an item to your list of tasks. It
1597 also connects that item to some useful context information.
1599 If you create a task while viewing any buffer other than a Planner
1600 day page, Planner will associate the task with a hyperlink to that
1601 buffer. Try it now by creating a task from this Info buffer.
1603 @enumerate
1604 @item @kbd{M-x planner-create-task-from-buffer}
1605 @item
1606 When prompted for the task name, enter @kbd{Learn how to change a task's
1607 status} and press @key{RET}.
1609 @item
1610 When prompted for the date, press @key{RET} to schedule the task for
1611 today.
1613 @item
1614 When prompted for the project page, press @key{RET} to accept the
1615 default page of @samp{TaskPool}. This is a page for tasks not connected
1616 to a larger plan.
1618 @end enumerate
1620 Planner prompts you for two pieces of information when you ask it
1621 to create a task. First, it asks you when you would like to have the
1622 task show up in your planner. If you would like it to be scheduled for
1623 today, you can just hit @key{RET}. If you would like it to be
1624 scheduled for some day during the current month, you can just enter
1625 the date, without the month, like @samp{16}. If you would like it to
1626 be scheduled for some day in a future month of the current year, you
1627 can enter just the month and date, like @samp{06.16}. If you would
1628 like to schedule something for next year, then enter the full date,
1629 like @samp{06.16.2005}. If you do not want this task to appear on a
1630 day page at all, you can enter @samp{nil}.
1632 The second piece of information Planner asks for is the name of
1633 the project to associate the task with. In the above example, you
1634 associated the task with the project ``TaskPool'', which means that
1635 you did not want to associate the task with a particular project or
1636 goal in your life. Another way to do this is to answer the project
1637 prompt by entering @samp{nil}. But instead, you might enter
1638 @samp{LearnPlanner} as the project. This creates a new page called
1639 ``LearnPlanner'' in your planner directory and places an entry for the
1640 task on that page.
1642 The task then exists in two places: once on your day page, to show how
1643 it fits into your daily work; and once on a project page, to show how
1644 it fits into your larger projects and goals. In the future you might
1645 add related tasks like, ``Memorize Planner keybindings''. These
1646 tasks might be scattered over weeks or months worth of day pages, but
1647 as long as you enter the same project name for each, you will have a
1648 way to look at them all together on a single project page.
1650 Planner also creates hyperlinks to enable you to easily move back
1651 and forth between the day page system and the project page
1652 system. Each task on a day page will have a hyperlink to its project
1653 page. Each task on a project page will have a hyperlink to its day
1654 page.
1656 After using Planner for a while, you may find yourself with quite
1657 a few project pages. Keep in mind that completion is enabled at the
1658 project prompt when you create a task, so hitting @kbd{SPC} or
1659 @kbd{TAB} at the prompt will show you a list of your current project
1660 pages.
1662 Once the task is created, you are returned to the buffer you were
1663 working in again, Planner gets out of your way, and you can go on
1664 about your business. Later on, when you decide to actually work on
1665 that ``Memorize Planner keybindings'' task, you will be able to
1666 follow the hyperlink from that task on your day or project page
1667 directly to the relevant node in the Planner info file!
1669 By default, @command{M-x planner-create-task-from-buffer} creates
1670 medium-priority tasks, marked with the letter @samp{B}.  But you can
1671 specify a particular priority or change the default (@pxref{Task
1672 Priorities}).
1674 You don't have to use @command{planner-create-task-from-buffer} to
1675 create tasks. You can also create new tasks manually by typing them
1676 directly on your day or project page in the format Planner expects. You
1677 can even still create hyperlinks by using Muse formatting as you
1678 manually type the new task. Keep in mind also that tasks do not have to
1679 be linked to any other page.
1681 For convenience, @command{planner-create-task-from-buffer} is bound to
1682 @kbd{C-c C-t} in Planner buffers.  You can bind
1683 @command{planner-create-task-buffer} to a shortcut key.  See the
1684 manual for your Emacs distribution to find out more about keybinding.
1686 @defun planner-create-task-from-buffer title date plan-page
1687 Create a new task named @var{title} on @var{date} based on the current
1688 buffer.
1690 With a prefix, associate the task with the current planner page.  If
1691 you create a task on a date page, you will be prompted for a plan
1692 page.  If you create a task on a plan page, you will be prompted for a
1693 day page.  If nil is specified, the task is created only on the
1694 current page.
1696 See @code{planner-create-task} for more information.
1698 The new task is created at the top or bottom of the first block of
1699 tasks on the scheduled day page (if any), depending on the value of
1700 @code{planner-add-task-at-end-flag}.
1701 @end defun
1703 @defun planner-create-task title date annotation plan-page
1704 Create a new task named @var{title} based on the current Wiki page.
1705 If @var{date} is non-nil, makes a daily entry on @var{date}, else
1706 makes an entry in today's planner page. It's assumed that the current
1707 Wiki page is the page you're using to plan an activity. Any time
1708 accrued to this task will be applied to that page's name in the
1709 timelog file, assuming you use timeclock (@pxref{Time Intervals, , ,
1710 Emacs, GNU Emacs Manual}). If @var{annotation} is non-nil, it will be
1711 used for the page annotation. If @var{plan-page} is non-nil, the task
1712 is associated with the given page.
1714 With a prefix, associate the task with the current planner page.  If
1715 you create a task on a date page, you will be prompted for a plan
1716 page.  If you create a task on a plan page, you will be prompted for a
1717 day page.  If nil is specified, the task is created only on the
1718 current page.
1720 You probably want to call @code{planner-create-task-from-buffer}
1721 instead.
1723 The new task is created at the top or bottom of the first block of
1724 tasks on the scheduled day page (if any), depending on the value of
1725 @code{planner-add-task-at-end-flag}.
1726 @end defun
1728 @node Task Priorities, Task IDs, Creating a Task, Creating New Tasks
1729 @comment  node-name,  next,  previous,  up
1730 @subsubsection Task Priorities
1732 You can set the priority of a task when you create it, rather than
1733 waiting to adjust it after the fact. In order to do this, call the
1734 function corresponding to the priority you want. You probably want to
1735 bind these functions to some keys if you intend to use them much.
1737 @itemize
1738 @item @code{planner-create-high-priority-task-from-buffer}
1739 creates a task with priority @samp{A}.
1741 @item @code{planner-create-medium-priority-task-from-buffer}
1742 creates a task with priority @samp{B}.
1744 @item @code{planner-create-low-priority-task-from-buffer}
1745 creates a task with priority @samp{C}.
1746 @end itemize
1748 Or, you can change the default priority of
1749 @command{planner-create-task-from-buffer} by customizing
1750 @var{planner-default-task-priority}.
1752 You can actually use just one general priority, but using more than
1753 one color-codes your tasks and gives you a better overview of your
1754 day.
1757 @node Task IDs, Cyclic Tasks, Task Priorities, Creating New Tasks
1758 @comment  node-name,  next,  previous,  up
1759 @subsubsection Task IDs
1760 @cindex @file{planner-id.el}, using
1761 @cindex tasks, IDs
1763 After loading @file{planner.el}, make sure that @file{planner-id.el} is
1764 in your load path and add this to your @file{.emacs} (or @file{_emacs}):
1766 @example
1767 (require 'planner-id)
1768 @end example
1770 This module modifies the behavior of @file{planner.el}, adding global
1771 task IDs so that tasks can be edited and updated. Planner IDs are of
1772 the form @samp{@{@{Identifier:Number@}@}}.
1774 @subheading Options
1776 @defopt planner-id-add-task-id-flag
1777 Non-nil means automatically add global task IDs to newly-created
1778 tasks. If nil, use @command{planner-id-add-task-id} to add IDs to
1779 existing tasks, or @command{planner-id-add-task-id-to-all} to add to
1780 all tasks on the current page.
1781 @end defopt
1783 @defopt planner-id-update-automatically
1784 Non-nil means automatically update linked tasks whenever a page is
1785 saved. If nil, use @command{planner-update-task} to update the linked
1786 task. By default, linked tasks are automatically updated.
1787 @end defopt
1789 @defopt planner-id-tracking-file
1790 File that contains ID tracking data. This file is automatically
1791 overwritten.
1792 @end defopt
1794 @subheading Functions
1796 The following interactive functions are defined in @file{planner-id.el}:
1798 @defun planner-id-jump-to-linked-task &optional info
1799 Display the linked task page. If @var{info} is specified, follow that
1800 task instead.
1801 @end defun
1803 @defun planner-id-add-task
1804 Add a task ID for the current task if it does not have one
1805 yet. Update the linked task page, if any.
1806 @end defun
1808 @defun planner-id-update-tasks-on-page &optional force
1809 Update all tasks on this page. Completed or cancelled tasks are not
1810 updated. This can be added to @code{write-file-functions}. If
1811 @var{force} is non-nil, completed and cancelled tasks are also
1812 updated.
1813 @end defun
1815 @defun planner-id-add-task-id-to-all
1816 Add a task ID for all the tasks on the page. Update the linked page,
1817 if any.
1818 @end defun
1820 @defun planner-id-search-id id
1821 Search for all occurrences of @var{id}.
1822 @end defun
1824 @defun planner-id-follow-id-at-point
1825 Display a list of all pages containing the ID at point.
1826 @end defun
1828 @defun planner-id-follow-id-at-mouse event
1829 Display a list of all pages containing the ID at mouse. @var{event} is
1830 the mouse event.
1831 @end defun
1833 @node Cyclic Tasks, Task Detail, Task IDs, Creating New Tasks
1834 @comment  node-name,  next,  previous,  up
1835 @subsubsection Cyclic Tasks
1836 @cindex @file{planner-cyclic.el}, using
1837 @cindex tasks, cyclic
1838 @cindex cyclic tasks
1839 @cindex recurring tasks
1841 If there are tasks that you have to do regularly, you can have Planner
1842 schedule those tasks automatically.
1844 Make sure that @file{planner-cyclic.el} is in your load path and add
1845 this to your @file{.emacs} (or @file{_emacs}):
1847 @example
1848 (require 'planner-cyclic)
1849 @end example
1851 Create a diary file named @file{~/.diary.cyclic-tasks}
1852 (or the value of @code{planner-cyclic-diary-file}). Here is an example:
1854 @example
1855 Tuesday #B0 _ Study Japanese
1856 Friday #B0 _ Study Japanese (JapaneseStudies)
1857 @end example
1859 The first will be a plain task, the second will be linked.  The first
1860 line will automatically create its task every Tuesday, while the
1861 second will create it every Friday.
1863 You can schedule tasks in a variety of ways. This module uses the same
1864 syntax for specifying when tasks will be scheduled as the Emacs diary
1865 uses for appointments and events. See @ref{Date Formats, the GNU Emacs
1866 Manual, Date Formats,emacs, the GNU Emacs Manual}, and @ref{Sexp Diary
1867 Entries, the GNU Emacs Lisp Reference Manual, Sexp Diary
1868 Entries,elisp, the GNU Emacs Lisp Reference Manual}, for a full
1869 description of the possibilities.
1871 By default, planner-cyclic creates multiple tasks if you let tasks build
1872 up (that is, the next Tuesday rolls around and you @emph{still} haven't
1873 marked the task as done.) To turn off this behavior:
1875 @example
1876 (setq planner-cyclic-diary-nag nil)
1877 @end example
1879 @subheading Functions
1881 @file{planner-cyclic-diary} includes the following interactive
1882 functions:
1884 @defun planner-cyclic-create-tasks-maybe
1885 Maybe create cyclic tasks. This will only create tasks for future
1886 dates or today.
1887 @end defun
1889 @node Task Detail, Deadlines, Cyclic Tasks, Creating New Tasks
1890 @comment  node-name,  next,  previous,  up
1891 @subsubsection Task Detail
1892 @cindex tasks
1894 You may find your planner pages getting very full, so that you want to
1895 have one broad task entry be linked to a more specific list of
1896 sub-tasks. Or, maybe you want to have a number of notes linked to a
1897 particular task.
1898 @cindex tasks, sub-
1899 @cindex tasks, meta-
1900 @cindex meta-tasks
1901 @cindex sub-tasks
1903 This can be done with targets.  You can have a task that is really a
1904 meta-task:
1906 @example
1907 #A1  _ Do things in RevelleLog#13 @{@{Tasks:101@}@} (RevelleLog)
1908 @end example
1910 @samp{RevelleLog#13} could then be a list of sub-tasks in the form of
1911 a note, or any kind of note.
1913 Or, instead of pointing to a particular note on @samp{RevelleLog}, you
1914 could have the whole page be tasks that you enter in manually, without
1915 linking them to another page. You can just type them in like this:
1917 @example
1918 #A1  _ First specific thing to do
1919 @end example
1921 This way, the tasks will only appear on this specific project page,
1922 and not on any daily page, so you only see them when you want to look
1923 up all of the specific tasks associated with @samp{#A1  _ Do things in
1924 RevelleLog @{@{Tasks:101@}@} (RevelleLog)}.
1926 As you can see, the ability to manually enter tasks is one of
1927 Planner's nicest features. It allows you to create tasks that are
1928 not assigned to a specific date (by manually entering them on a
1929 project page with no date) or to a specific project (by manually
1930 entering them on a day page with no project). Yet as long as you enter
1931 them using the syntax it understands, Planner will continue to
1932 recognize them as tasks.
1934 Another way to have a task not be connected to a particular date is to
1935 do @kbd{C-c C-c} (@code{planner-copy-or-move-task}) and specify
1936 @samp{nil} when asked for the date.
1938 If you would like to see a list of all of your unfinished tasks, do
1939 @kbd{M-x planner-list-unfinished-tasks}. This function only checks
1940 day plan pages, not project pages.
1942 @node Deadlines,  , Task Detail, Creating New Tasks
1943 @comment  node-name,  next,  previous,  up
1944 @subsubsection Deadlines
1945 @cindex tasks, deadlines for
1946 @cindex deadlines, task
1947 @cindex @file{planner-deadline.el}, using
1949 You can use @file{planner-deadline.el} to automatically recalculate
1950 days to a deadline by adding @code{(require 'planner-deadline)} to
1951 your @file{~/.emacs}. With the default setup, make your tasks of the
1952 form
1954 @example
1955 #A0 _ Some task @{@{Deadline: 2004.09.12@}@}
1956 @end example
1958 (Note: There must be at least one space after the colon.)
1960 After you run @code{planner-deadline-update} to update task descriptions,
1961 the task will be of the form
1963 @example
1964 #A0 _ Some task @{@{Deadline: 2004.09.12 - 2 days@}@}
1965 @end example
1967 @subheading Options
1969 @defopt planner-deadline-regexp
1970 Regular expression for deadline data.
1971 The special deadline string should be regexp group 1. The
1972 date (YYYY.MM.DD) should be regexp group 2.
1973 @end defopt
1975 @subheading Functions
1977 @defun planner-deadline-update
1978 Replace the text for all tasks with deadlines. Deadlines are of the
1979 form @samp{@{@{Deadline: YYYY.MM.DD@}@}} by default.
1980 @end defun
1982 @defun planner-deadline-change &optional date
1983 Change the deadline of current task to @var{date}. If @var{date} is nil,
1984 remove deadline.
1985 @end defun
1987 @node Organizing Your Tasks, Task Reports and Overviews, Creating New Tasks, More about Tasks
1988 @comment  node-name,  next,  previous,  up
1989 @subsection Organizing Your Tasks
1990 @cindex tasks, organizing
1991 @cindex tasks, old
1993 Okay, now that you've gotten the hang of creating tasks, you're probably
1994 facing a really long list of things to do. How can you organize them so
1995 that they don't overwhelm you? Planner gives you a number of strategies
1996 for dealing with large numbers of tasks.
1998 @enumerate
1999 @item Arrange your tasks in the rough order you're going to do them.
2000 @item Use #A, #B and #C task priorities to differentiate between
2001       high-priority, normal and low-priority tasks.
2002 @item Schedule your tasks onto different days.
2003 @item Group your tasks into plan pages.
2004 @item Don't schedule all your tasks.
2005 @end enumerate
2007 @enumerate
2009 @item @emph{Task order}
2011 To remind yourself to do tasks in a certain order, simply edit the
2012 lines so that they're in the order you want. You can use normal
2013 editing commands like kill, yank and transpose-line to reorder the
2014 tasks, or use @key{M-p} (@code{planner-raise-task}) and @key{M-n}
2015 (@code{planner-lower-task}) to rearrange the tasks.
2017 @item @emph{Task priorities}
2019 By default, tasks are created with medium priority (@samp{#B}). You
2020 can make a task high-priority (@samp{#A}) or low-priority (@samp{#C})
2021 by manually editing the task and calling M-x planner-update-task to
2022 update the linked page. Alternatively, you can use @key{C-M-p}
2023 (@code{planner-raise-task-priority}) and @key{C-M-n}
2024 (@code{planner-lower-task-priority}) to modify the task and update the
2025 linked page.
2027 You can edit the priority of a task using @kbd{M-x
2028 planner-edit-task-priority}, or manually edit it and call @kbd{M-x
2029 planner-update-task} to update tasks on the linked page.
2031 @item @emph{Schedule your tasks on different days}
2033 You don't have to do everything today. Is this a task you would rather
2034 do tomorrow? Schedule it for then instead. You can specify @samp{+n}
2035 or @samp{-n} whenever you are asked for a date, where @var{n} is the
2036 number of days before or after the current file's date or today.
2037 Don't over-procrastinate things, though!
2039 @item @emph{Plan pages}
2041 Plan pages let you group related tasks and notes together for easy
2042 reference. For example, you could have a plan page for each major
2043 project or goal in your life, like @samp{GoodHealth} or
2044 @samp{FurtherStudies}.
2046 Although plan pages start by grouping everything under a @samp{*
2047 Tasks} header, you can organize your plan pages in different ways. For
2048 example, you can separate groups of tasks with blank lines, and
2049 Planner will sort tasks within each group.
2051 @item @emph{Tasks without dates}
2053 Plan pages also allow you to have undated tasks or tasks with no
2054 particular deadlines. This keeps your daily task list small and
2055 manageable while making it easier for you to find things to do if you
2056 have free time. Make sure you check your plan pages regularly so that
2057 you don't completely forget about them.
2059 For automated scheduling of the next task on a plan page after you
2060 complete a task, see the section in
2061 @uref{http://sacha.free.net.ph/notebook/emacs/planner-config.el} named
2062 ``Schedule next undated task from same project''.
2064 @end enumerate
2067 @menu
2068 * Multiple Projects::           
2069 * Viewing Tasks::               
2070 * Modifying Tasks::             
2071 * Carrying Over Unfinished Tasks::  
2072 * Task Numbering::              
2073 * Task Ranks::                  planner-rank.el
2074 * Grouping Tasks::              planner-trunk.el
2075 @end menu
2077 @node Multiple Projects, Viewing Tasks, Organizing Your Tasks, Organizing Your Tasks
2078 @comment  node-name,  next,  previous,  up
2079 @subsubsection Associating Tasks with Multiple Projects
2080 @cindex multiple projects
2081 @cindex @file{planner-multi.el}, using
2083 You can use @file{planner-multi.el} to associate a task with more than
2084 one project. That way, you can easily keep GTD-style context lists as
2085 well as project-related lists.
2087 To use multiple projects, add the following to your @samp{~/.emacs}:
2089 @example
2090 (require 'planner-multi)
2091 @end example
2093 Under GNU Emacs, you can specify multiple projects by separating them
2094 with a single space. For example, you can specify @kbd{planner doc}
2095 when creating a task to associate the task with those two projects.
2097 Under XEmacs, you can specify multiple projects by typing @kbd{RET}
2098 after each entry and terminating the list with another @kbd{RET}. For
2099 example, to specify @kbd{planner} and @kbd{doc}, you would type
2100 @kbd{planner RET doc RET RET} at the prompt.
2102 If you want to see an overview of all of your tasks as well as
2103 project- or context-specific lists, you can set
2104 @code{planner-multi-copy-tasks-to-page} to your overview page(s). For
2105 example, set it to @samp{TaskPool} to be able to see an overview of
2106 all of your unfinished tasks. You can also set this to multiple pages
2107 such as @samp{[[TasksByProject][p]] [[TasksByContext][c]]} and use
2108 @file{planner-trunk.el} to sort and organize tasks for easy reference.
2109 (@pxref{Grouping Tasks})
2111 @subheading Options
2113 @defopt planner-multi-copy-tasks-to-page
2114 Automatically copy newly-created tasks to the specified page.
2115 @end defopt
2117 By default, tasks are removed from
2118 @code{planner-multi-copy-tasks-to-page} when you call
2119 @code{planner-task-done} or @code{planner-task-cancelled}. If you
2120 prefer to keep a copy of the task, remove
2121 @code{planner-multi-remove-task-from-pool} from
2122 @code{planner-mark-task-hook}.
2124 If you want to use a different separator instead of spaces, customize
2125 the @code{planner-multi-separator} variable.
2127 @defopt planner-multi-separator
2128 String that separates multiple page references.
2130 For best results, this should be something recognized by
2131 @code{muse-link-at-point} so that links are highlighted
2132 separately.
2133 @end defopt
2135 @node Viewing Tasks, Modifying Tasks, Multiple Projects, Organizing Your Tasks
2136 @comment  node-name,  next,  previous,  up
2137 @subsubsection Viewing tasks
2138 @cindex tasks, viewing
2140 Review the tasks scheduled for today by typing @kbd{M-x
2141 planner-goto-today}.  If you created the task from the previous
2142 section in this tutorial, you should see a line that looks like
2144 @example
2145 #A _ Learn how to change a task's status from Tasks (TaskPool)
2146 @end example
2148 If you have @code{planner-use-task-numbers} set to non-nil, you will see
2149 something like the following instead.
2151 @example
2152 #A0 _ Learn how to change a task's status from Tasks (TaskPool)
2153 @end example
2155 From left to right, these are what the symbols mean:
2157 @itemize
2158 @item @samp{A} - Priority.  A (high)
2159 @item
2160 @samp{0} - Priority number.  It is calculated whenever you save the file
2161 or call @command{planner-renumber-tasks}, provided that
2162 @code{planner-use-task-numbers} is non-nil.  Tasks are numbered in
2163 ascending order according to priorities.
2164 @item @samp{_} - Status.  _ (unfinished)
2165 @end itemize
2167 If you click on @samp{Tasks} or press @key{RET} while your cursor is
2168 in the link, Emacs will display the previous info page.
2170 If you select @samp{TaskPool}, Emacs will display the @samp{TaskPool}
2171 plan page.  Plan pages organize your tasks and notes about a project
2172 in one file.
2174 @subheading Functions
2176 You can use @command{planner-seek-next-unfinished-task} to move to the
2177 next unfinished task on the current page.
2179 @defun planner-list-tasks-with-status status &optional pages
2180 Display all tasks that match the STATUS regular expression on all day
2181 pages.  The PAGES argument limits the pages to be checked in this
2182 manner:
2184 @itemize
2185 @item @code{t}: check all pages
2186 @item regexp: search all pages whose filenames match the regexp
2187 @item list of page names: limit to those pages
2188 @item alist of page/filenames: limit to those pages
2189 @end itemize
2191 Called interactively, this function will search day pages by
2192 default. You can specify the start and end dates or leave them as
2193 nil to search all days. Calling this function with an interactive
2194 prefix will prompt for a regular expression to limit pages.
2195 Specify @samp{.} or leave this blank to include all pages.
2197 This function could take a long time.
2198 @end defun
2200 @defun planner-list-unfinished-tasks &optional pages
2201 Display all unfinished tasks. @var{pages} follows
2202 planner-list-tasks-with-status.
2203 @end defun
2205 @defun planner-jump-to-linked-task task-info
2206 Display the task page linked to by the current task or
2207 @var{task-info}.
2208 @end defun
2210 @node Modifying Tasks, Carrying Over Unfinished Tasks, Viewing Tasks, Organizing Your Tasks
2211 @comment  node-name,  next,  previous,  up
2212 @subsubsection Modifying Tasks
2213 @cindex tasks, modifying
2214 @cindex tasks, editing
2216 To select a task, move your cursor to the line containing the task.
2218 Change a task's priority (@samp{A}, @samp{B} or @samp{C}) by editing
2219 the line. @samp{#A} tasks are important. @samp{#B} are medium
2220 priority. @samp{#C} are low priority. Whenever you save the file or
2221 call @kbd{M-x planner-fix-tasks}, tasks are sorted and numbered
2222 according to priority and status.
2224 Change a task's status by calling one of the following functions:
2226 @itemize
2227 @item planner-task-in-progress @samp{o} (@kbd{C-c C-z})
2228 @item planner-task-done @samp{X} (@kbd{C-c C-x})
2229 @item planner-task-cancelled @samp{C} (@kbd{C-c C-S-x})
2230 @item planner-task-delegated @samp{D}
2231 @item planner-task-pending @samp{P}
2232 @item planner-task-open @samp{_}
2233 @end itemize
2235 After changing the status using a function, look at the
2236 @samp{TaskPool} plan page.  The task is also updated on the linked
2237 page.  If you changed the task status manually by replacing the status
2238 with another character, you will need to call
2239 @command{planner-update-task} to update the linked page.
2241 To reschedule a task, call @command{planner-copy-or-move-task} (@kbd{C-c
2242 C-c}) and choose a new date.  You can mark a region and type @kbd{M-x
2243 planner-copy-or-move-region} to reschedule all the contained tasks to a
2244 different date.  Enter @samp{nil} for the date if you don't want the
2245 task or group of tasks to appear on any date page at all anymore. This
2246 is a good way to ``de-schedule'' a task for the time being, but still
2247 keep it linked to a plan page for possible future scheduling.
2249 To change the plan page associated with a task, call
2250 @command{planner-replan-task}.  Enter @samp{nil} for the plan page if
2251 you don't want the task to appear on any plan page anymore. If you
2252 precede the command with a prefix argument, the text of the original
2253 plan page will appear in the prompt for easy editing.
2255 Since the same task may exist on two or more pages, such as a date page
2256 and a plan page, it is dangerous to edit the description of the task by
2257 hand. You should not do it unless you want to make the exact same
2258 changes on all its linked pages.
2260 Instead of doing this by hand, you should use
2261 @command{planner-edit-task-description}. This will prompt you for the
2262 changes to the task description and then update all the other pages to
2263 which the task is linked.  Or, you can just use
2264 @command{planner-delete-task} to remove the task from both pages, and
2265 then create it again with the new desired description.
2267 To remind yourself to do tasks in a certain order, simply edit the
2268 lines so that they're in the order you want.
2269 @command{planner-raise-task} and @command{planner-lower-task} update
2270 the priorities on linked pages automatically. You can organize tasks
2271 into groups by putting a blank line between groups of tasks.
2272 Planner will maintain the groupings and only sort the tasks within
2273 that group.
2275 @subheading Functions
2277 @defun planner-replan-task page-name
2278 Change or assign the plan page for the current task.  @var{page-name}
2279 is the new plan page for the task. Use
2280 @code{planner-copy-or-move-task} if you want to change the date. With a
2281 prefix, provide the current link text for editing.
2282 @end defun
2284 @defun planner-raise-task-priority
2285 Change a low-priority task to a medium-priority task and a
2286 medium-priority task to a high-priority task (C to B to A).
2287 @end defun
2289 @defun planner-lower-task-priority
2290 Change a high-priority task to a medium-priority task and a
2291 medium-priority task to a low-priority task (A to B to C).
2292 @end defun
2294 @defun planner-raise-task arg
2295 Move a task up @var{arg} steps.  By default, @var{arg} is 1.
2296 @end defun
2298 @defun planner-lower-task  arg
2299 Move a task down @var{arg} steps.  By default, @var{arg} is 1.
2300 @end defun
2302 @defun planner-edit-task-description description
2303 Change the description of the current task, updating the linked page
2304 if any.
2305 @end defun
2307 @defun planner-delete-task
2308 Delete this task from the current page and the linked page.
2309 @end defun
2311 @defun planner-update-task
2312 Update the current task's priority and status on the linked page.
2313 Tasks are considered the same if they have the same description.
2314 This function allows you to force a task to be recreated if it
2315 disappeared from the associated page.
2316   
2317 Note that the text of the task must not change. If you want to be able
2318 to update the task description, see @code{planner-edit-task-description}
2319 or @file{planner-id.el}.
2320 @end defun
2322 See @command{planner-install-extra-task-keybindings} for additional
2323 task-related shortcuts.
2325 @node Carrying Over Unfinished Tasks, Task Numbering, Modifying Tasks, Organizing Your Tasks
2326 @comment  node-name,  next,  previous,  up
2327 @subsubsection Carrying Over Unfinished Tasks
2328 @cindex tasks, carrying over
2330 Sometimes you won't be able to cross off all the tasks on your list.
2331 Planner makes it easy for you to keep track of things you still have
2332 to do by automatically rescheduling unfinished tasks from the past few
2333 days. By default, the @command{plan} command searches for unfinished
2334 tasks from the last three days and reschedules them onto today. If you
2335 open Planner every day, this should cover weekends easily.
2337 It's a good idea to start Planner whenever you start Emacs. That way,
2338 Planner can help remind you about today's tasks, appointments, and other
2339 things. To automatically start Planner whenever you start up Emacs, add
2340 the following code to the end of your @file{~/.emacs}:
2342 @example
2343 (plan)
2344 @end example
2346 Now, every time you start Emacs (which should be more or less once a
2347 day), you'll see today's page. If you don't finish all the tasks today,
2348 you'll see them again tomorrow.
2350 It's a good idea to start Planner every time you start Emacs so that
2351 you get reminded about your task list. If you prefer to start Planner
2352 manually, remember to call @kbd{M-x plan} every so often to make sure
2353 that you don't forget any unfinished tasks. Safe in the knowledge that
2354 Planner tasks won't slip through the cracks (unlike little slips of
2355 paper that will invariably get mislaid), you can then get on with the
2356 rest of your life.
2358 If your increased productivity with Planner leads to a well-deserved
2359 two-week vacation, then you'll need to tell Planner to search more days
2360 for unfinished tasks. By using @kbd{M-x plan}, you can automatically
2361 bring forward tasks over a given number of days or even scan all the
2362 days since time immemorial. @kbd{C-u 15 M-x plan} reschedules all
2363 unfinished tasks from the last 15 days. @kbd{C-u -1 M-x plan} checks all
2364 of your past day pages for unfinished tasks.
2366 Like everything else in Planner, you can adapt @kbd{M-x plan} to your
2367 particular way of life. For example, if you find yourself starting up
2368 Emacs and Planner every day--including weekends--because it's just so
2369 much fun, you can set the @code{planner-carry-tasks-forward} to 1.
2370 This can make your Emacs startup marginally faster. On the other hand,
2371 if you normally start Emacs once a week, you can set it to 7 or 8. If
2372 you're worried about tasks dropping off your radar, you can set it to
2373 0. You can set the value of @var{planner-carry-tasks-forward} either
2374 with @key{M-x customize-variable RET planner-carry-tasks-forward RET},
2375 or by putting @code{(setq planner-carry-tasks-forward 3)} (replacing
2376 @code{3} with the value appropriate for what you want) in your
2377 @file{~/.emacs} file.
2379 On the other hand, you might prefer to reschedule tasks yourself. If
2380 you set @code{planner-carry-tasks-forward} to @code{nil}, then
2381 @command{M-x plan} and @code{(plan)} will bring you to the most recent
2382 page with unfinished tasks if there is no page for today. You can then
2383 use @command{planner-copy-or-move-task} and
2384 @command{planner-copy-or-move-region} to reschedule tasks. This is
2385 probably more hassle than it's worth, though, so let Planner take care
2386 of this for you.
2388 @subheading Options
2390 @defopt planner-carry-tasks-forward
2391 If non-nil, carry unfinished tasks forward automatically.
2392 If a positive integer, scan that number of days in the past.
2393 If 0, scan all days for unfinished tasks.
2394 If t, scan one day in the past (old behavior).
2395 If nil, do not carry unfinished tasks forward.
2396 @end defopt
2398 @subheading Functions
2400 @defun plan &optional force-days
2401 Start your planning for the day, carrying unfinished tasks forward.
2403 If @var{force-days} is a positive integer, search that many days in the
2404 past for unfinished tasks.
2405 If @var{force-days} is @code{0} or @code{t}, scan all days.
2406 If @var{force-days} is @code{nil}, use the value of
2407 @code{planner-carry-tasks-forward} instead, except t means scan only
2408 yesterday
2410 @end defun
2412 @defun planner-copy-or-move-task date force
2413 Reschedule the task for @var{date}. If @var{force} is non-nil, the
2414 task is moved regardless of status. It also works for creating tasks
2415 from a Note. Use @code{planner-replan-task} if you want to change the
2416 plan page in order to get better completion.
2417 @end defun
2419 @defun planner-copy-or-move-region beg end date muffle-errors
2420 Move all tasks from @var{beg} to @var{end} to @var{date}.
2421 @code{planner-copy-or-move-region} will copy or move all tasks from
2422 the line containing @var{beg} to the line just before @var{end}. If
2423 @var{muffle-errors} is non-nil, no errors will be reported.
2424 @end defun
2426 @node Task Numbering, Task Ranks, Carrying Over Unfinished Tasks, Organizing Your Tasks
2427 @comment  node-name,  next,  previous,  up
2428 @subsubsection Task Numbering
2430 By default, tasks are numbered according to their position on the
2431 page.  Task numbers allow you to refer to tasks using Muse links.
2432 For example, the @samp{#A1} task in @file{2004.08.16} can be referred to
2433 as @samp{2004.08.16#A1}.
2435 Note that task numbers change every time you re-sort and re-number tasks
2436 with @code{planner-fix-tasks}.  As a result, they are only reliable for
2437 references to past tasks.
2439 If you find yourself not using this functionality, you can turn off task
2440 numbers by using the following option.
2442 @subheading Options
2444 @defopt planner-use-task-numbers
2445 Non-nil means use task numbers when creating tasks.  This allows you
2446 to refer to past tasks if your tasks are numbered appropriately.
2447 If you set this to nil, you can save space in your plan files.
2448 @end defopt
2450 @node Task Ranks, Grouping Tasks, Task Numbering, Organizing Your Tasks
2451 @comment  node-name,  next,  previous,  up
2452 @subsubsection Task Ranks
2453 @cindex ranking tasks
2454 @cindex tasks, ranking
2455 @cindex @file{planner-rank.el}, using
2457 @file{planner-rank.el} models Franklin Covey's Urgency and Importance
2458 principle. When you think about a task, there are two aspects in
2459 consideration: Urgency and Importance. You may want to do the most
2460 urgent things first, like answering an email, or you may want to do
2461 the most important things first, like reading this manual. Or much
2462 better, balance Urgency and Importance and decide what to do.
2464 @file{planner-rank.el} can help you balance.
2466 Urgency and Importance are both measured by scores from 0-9. The
2467 higher the score, the more you want to do it first. 9 stands for ``I
2468 should have done this'' and 0 stands for ``I can forget this''.
2470 If you are using the planner @ref{Deadlines} feature, the Urgency
2471 score is automatically calculated from how many days are left to meet
2472 the deadline. By default, it will score 9 if the task is overdue and 0
2473 if the deadline is years away. Please refer to the docstring of
2474 @code{planner-rank-deadline-urgency-map-list} for detail.
2476 The task rank is calculated from Urgency and Importance scores. As
2477 different people balance urgency and importance differently, a number
2478 of @code{planner-rank-calculate-rank-*} functions are provided. The
2479 algorithms vary from a simple average to something like a weighted
2480 root mean square deviation.
2482 The aggressive versions of these functions
2483 (@code{planner-rank-calculate-rank-*-aggressive}) will make sure if
2484 one of Urgency and Importance is high, the resulting rank will be high
2485 as well. @code{planner-rank-calculate-rank-weighted-*} functions weigh
2486 the Urgency and Important scores depending on
2487 @code{planner-rank-importance-vs-urgency-factor}.
2489 Call @code{planner-rank-test-algorithm} on each of the functions and
2490 check the result tables to see which one you like most, and set it to
2491 @code{planner-rank-rank-calculate-function}. Alternatively, accept the
2492 defaults and tweak them when you get a better feel for ranking.
2494 Once the Rank is calculated, the @ref{Task Priorities} will be
2495 automatically reset. If the Rank is greater than or equal to
2496 @code{planner-rank-priority-A-valve}, the task priority will be
2497 @samp{A}, if the Rank is between @code{planner-rank-priority-A-valve}
2498 and @code{planner-rank-priority-B-valve}, the priority will be @samp{B},
2499 else it will be @samp{C}.
2501 After setting the task importance and deadline, you can leave it as
2502 is. As the deadline approaches, the task priority will automatically
2503 be raised and the task re-colored to catch your eyes.
2505 If you are using @code{planner-sort-tasks} (see @pxref{Making Files
2506 Pretty}), you can set @code{planner-sort-tasks-key-function} to one of
2507 @code{planner-sort-tasks-by-rank},
2508 @code{planner-sort-tasks-by-importance}, and
2509 @code{planner-sort-tasks-by-urgency}.
2511 @subheading Options
2513 @defopt planner-rank-change-hook
2514 Functions to run after @code{planner-rank-change}.
2515 @end defopt
2517 @defopt planner-rank-priority-A-valve
2518 Tasks with rank greater than or equal to this value will be set to
2519 priority @samp{A}.
2520 @end defopt
2522 @defopt planner-rank-priority-B-valve
2523 Tasks with rank greater than or equal to this value and less than
2524 @code{planner-rank-priority-A-valve} will be set to priority
2525 @samp{B}. Tasks with rank less than this value will be set to priority
2526 @samp{C}.
2527 @end defopt
2529 @defopt planner-rank-deadline-urgency-map-list
2530 Defines how to calculate the Urgency score according to how many days
2531 are left to meet the deadline.
2532 @end defopt
2534 @defopt planner-rank-default-importance
2535 Default importance value for newly added rank.
2536 @end defopt
2538 @defopt planner-rank-default-urgency
2539 Default urgency value for newly added rank.
2540 @end defopt
2542 @defopt planner-rank-importance-vs-urgency-factor
2543 How much do you think importance is more ``important'' than urgency.
2544 This will be used in @code{planner-rank-calculate-rank-weighted-*}
2545 functions.
2546 @end defopt
2548 @defopt planner-rank-rank-calculate-function
2549 Define the function called to calculate rank.
2550 @end defopt
2552 @subheading Functions
2554 @defun planner-rank-change &optional importance urgency
2555 Set the Importance and Urgency of the current task.
2556 @end defun
2558 @defun planner-rank-update-current-task
2559 Recalculate rank for the current task.
2560 @end defun
2562 @defun planner-rank-update-all
2563 Recalculate rank for all tasks in the current page
2564 @end defun
2566 @defun planner-rank-update-all
2567 Recalculate rank for all tasks in the current page
2568 @end defun
2570 @node Grouping Tasks,  , Task Ranks, Organizing Your Tasks
2571 @comment  node-name,  next,  previous,  up
2572 @subsubsection Grouping Tasks with planner-trunk.el
2573 @cindex grouping tasks
2574 @cindex tasks, grouping
2575 @cindex @file{planner-trunk.el}, using
2577 @file{planner-trunk.el} helps you automatically group tasks according
2578 to a set of rules. It sorts and splits your tasks, adding a blank line
2579 between groups of tasks. For example, if today's page looks like this:
2581 @example
2582 * Tasks
2584 #B   _ Buy milk (GroceryShopping)
2585 #B   _ Learn how to use planner-trunk (PlannerMode)
2586 #B   _ Buy a notebook (Bookstore)
2587 #B   _ Buy cereal (GroceryShopping)
2588 #B   _ Set up my own planner-trunk rules (PlannerMode)
2589 #B   _ Customize my stylesheet (MuseMode)
2590 #B   _ Go for a health checkup (BetterHealth)
2591 @end example
2593 @noindent
2594 then you might want to group the tasks into: planner and muse,
2595 shopping list, and other items. If you set up the appropriate rules by
2596 customizing @code{planner-trunk-rule-list}, @file{planner-trunk.el}
2597 can automatically rewrite that section line this:
2599 @example
2600 * Tasks
2602 #B   _ Learn how to use planner-trunk (PlannerMode)
2603 #B   _ Set up my own planner-trunk rules (PlannerMode)
2604 #B   _ Customize my stylesheet (MuseMode)
2606 #B   _ Buy milk (GroceryShopping)
2607 #B   _ Buy a notebook (BookstoreShopping)
2608 #B   _ Buy cereal (GroceryShopping)
2610 #B   _ Go for a health checkup
2611 @end example
2613 @noindent
2614 In this case, you would set @code{planner-trunk-rule-list}
2615 to @code{(("." nil ("PlannerMode\\|MuseMode" "Shopping")))}.
2617 You can load @file{planner-trunk} with @kbd{M-x load-library RET
2618 planner-trunk RET} or add @code{(require 'planner-trunk)}. If you're
2619 not yet comfortable with Emacs Lisp, you can use @kbd{M-x
2620 customize-variable RET planner-trunk-rule-list RET} to edit this rule
2621 using an easy-to-use interface.
2623 WARNING: Do not keep non-task information in the Tasks section.
2624 planner-trunk will delete @strong{all} non-task lines from the Tasks
2625 section of your plan page in the process of grouping the tasks.
2627 After you set up @code{planner-trunk-rule-list}, use @command{M-x
2628 planner-trunk-tasks} to try out your rules until you're satistfied.
2630 If you want to do this automatically, you can use @code{(add-hook
2631 'planner-mode-hook 'planner-trunk-tasks)} to trigger it automatically
2632 whenever you open a Planner page.
2634 @node Task Reports and Overviews,  , Organizing Your Tasks, More about Tasks
2635 @subsection Task Reports and Overviews
2636 @cindex task reports
2637 @cindex task overviews
2638 @cindex reports, task
2639 @cindex overviews, task
2640 @cindex reports, accomplishment
2641 @cindex tasks, overview of
2643 Planner provides a number of different ways to generate different
2644 presentations of your tasks.
2646 @menu
2647 * Accomplishments::             planner-accomplishments.el
2648 * Status Reports::              planner-report.el
2649 * Task Overviews::              planner-tasks-overview.el
2650 * <tasks> tag::             
2651 * planner-registry::            Keep track of annotations
2652 * planner-zoom::                View and navigate tasks by time period
2653 @end menu
2655 @node Accomplishments, Status Reports, Task Reports and Overviews, Task Reports and Overviews
2656 @comment  node-name,  next,  previous,  up
2657 @subsubsection Generating Daily Accomplishment Reports
2658 @cindex reports, accomplishment
2659 @cindex @file{planner-accomplishments.el}, using
2660 @cindex tasks, overview of
2661 @cindex task reports
2662 @cindex reports, task
2663 @cindex overviews, task
2664 @cindex task overviews
2666 You can use @file{planner-accomplishments.el} to get a summary of your
2667 task activity for a particular day. The report is grouped by status
2668 and plan (on day pages) or date (on plan pages). An example report
2669 follows:
2671 @example
2672 Link        | Unfinished | In progress | Delegated | Completed | Total
2673 nil         | 1          | 0           | 0         | 6         | 7
2674 TaskPool    | 1          | 1           | 0         | 3         | 5
2675 Planner     | 0          | 0           | 1         | 1         | 2
2676 SchoolWork  | 0          | 0           | 0         | 1         | 1
2677 Total       | 2          | 1           | 1         | 11        | 15
2678 @end example
2680 This lets you see how you balance your time between your projects.
2682 @itemize
2684 There are currently two ways to use @file{planner-accomplishments.el}.
2686 @item Displaying a temporary buffer
2688 You can call @code{planner-accomplishments-show} to display a buffer
2689 containing the current page's accomplishment report.
2691 @item Rewriting sections of your planner
2693 Choose this approach if you want accomplishment reports to be in
2694 their own section and you would like them to be readable in your
2695 plain text files even outside Emacs. Caveat: The accomplishment
2696 section should already exist in your template and will be rewritten
2697 when updated.
2699 To use, set @code{planner-accomplishments-section} to the name of the
2700 section to rewrite (default: @samp{Accomplishments}). If you want
2701 rewriting to be automatically performed, call
2702 @code{planner-accomplishments-insinuate}. The accomplishments will be
2703 rewritten whenever you save a planner page. If you want rewriting to
2704 be manual, call @code{planner-accomplishments-update}.
2706 @end itemize
2708 @subheading Options
2710 @defopt planner-accomplishments-section
2711 Header for the accomplishments section in a plan page.
2712 Used by @code{planner-accomplishments-update}.
2713 @end defopt
2715 @defopt planner-accomplishments-status-display
2716 Alist of status-label maps also defining the order of display.
2717 Used by @code{planner-accomplishments-format-table}.
2718 @end defopt
2720 @subheading Functions
2722 @defun planner-accomplishments-insinuate ()
2723 Automatically call @code{planner-accomplishments-update} when saving
2724 tasks in @code{planner-mode} buffers.
2725 @end defun
2727 @defun planner-accomplishments-update ()
2728 Rewrite @code{planner-accomplishments-section} with a summary of tasks
2729 on this page.
2730 @end defun
2732 @defun planner-accomplishments-show ()
2733 Display a buffer with the current page's accomplishment report.
2734 @end defun
2736 @node Status Reports, Task Overviews, Accomplishments, Task Reports and Overviews
2737 @comment  node-name,  next,  previous,  up
2738 @subsubsection Status Reports
2739 @cindex status reports
2740 @cindex reports, status
2741 @cindex @file{planner-report.el}, using
2743 @file{planner-report.el} creates a status report for a given timespan.
2744 The report itself is just another Planner page in your planner
2745 directory.  Once generated, it contains tasks and notes culled from
2746 active project pages.  Tasks are only shown if they are incomplete or
2747 were completed within the timespan.  Notes are shown if they were
2748 created during the timespan.  Tasks and notes are grouped together under
2749 a heading for their corresponding project.
2751 The idea is you have one of these status reports generated periodically
2752 (say, every couple of weeks).  Perhaps you use cron to run them
2753 automatically and then mail you a reminder that they've been done.  Then
2754 you can edit the page, adding verbiage where it is needed and removing
2755 irrelevant items.  This editing process is as easy as editing any other
2756 Planner page.  Finally, you can publish the page along with the rest of
2757 your planner using @kbd{M-x muse-project-publish}.
2759 If you use planner-authz.el, you can tell planner-report.el only to
2760 consult project pages that a given list of users
2761 (@var{planner-report-authz}) can access when generating the report.  For
2762 example, if you're preparing a status report for your boss, add yourself
2763 and him to @var{planner-report-authz}.  The resulting status report will
2764 only contain information the two of you are supposed to have access to,
2765 and the report itself will be similarly restricted.
2767 @subheading Getting started
2769 Add the following to your .emacs file:
2771 @example
2772 (require 'planner-report)
2773 @end example
2775 Then you can use the following command to generate a status report:
2777 @example
2778 M-x planner-report-generate
2779 @end example
2781 You will be prompted for a beginning and ending date, and then the
2782 status report will be generated.  You can then edit it to your liking
2783 and publish it just like you would the rest of your planner.
2785 @subheading Options
2787 @defopt planner-report-authz
2788 List of users a status report should be restricted to.
2789 When status reports are generated, only planner pages accessible
2790 by these users will be consulted, and the resulting status report
2791 will be similarly restricted.
2792 @end defopt
2794 @defopt planner-report-pretty-print-plan-pages
2795 If non-nil, pretty print plan pages.
2796 If nil, leave page names as-is.
2797 This requires that @file{muse-wiki.el} be loaded to work properly.
2798 @end defopt
2800 @defopt planner-report-remove-task-numbers
2801 Remove task numbers when generating status reports.
2802 @end defopt
2804 @defopt planner-report-replace-note-numbers
2805 If non-nil, a string with which to replace note numbers when
2806 generating status reports.
2807 @end defopt
2809 @defopt planner-report-unfinished-offset
2810 If non-nil, the offset in days from the current date of
2811 unfinished tasks to include in the status report.  If nil,
2812 include all unfinished tasks.
2813 @end defopt
2815 @subheading Functions
2817 @defun planner-report-generate begin end
2818 Generate a status report spanning a period from @var{begin} to @var{end}.
2819 @var{begin} and @var{end} are in the format YYYY.MM.DD.
2820 @end defun
2822 @node Task Overviews, <tasks> tag, Status Reports, Task Reports and Overviews
2823 @comment  node-name,  next,  previous,  up
2824 @subsubsection Seeing an Overview of Tasks
2825 @cindex tasks, overview of
2826 @cindex task reports
2827 @cindex reports, task
2828 @cindex overviews, task
2829 @cindex task overviews
2830 @cindex @file{planner-tasks-overview.el}, using
2832 You can see a list of tasks with @file{planner-tasks-overview.el}.
2833 Seeing how you've scheduled tasks over the next few days can help you
2834 decide when to schedule another task. Table entries will be of the form
2836 @var{date} | @var{link} | @var{priority} @var{status} | @var{task-description}
2838 @subheading Functions
2840 To display the tasks between a set of day pages, use
2842 @defun planner-tasks-overview start end
2843 Display an overview of your tasks from @var{start} to @var{end}. If
2844 @var{start} is nil, start from the very first day page. If @var{end}
2845 is nil, include the very last day page. You can use
2846 @code{planner-expand-name} shortcuts here, like @kbd{+1} or @kbd{-1}.
2847 Pressing @key{RET} at the prompt will use today.
2849 Once in a @code{planner-tasks-overview} buffer, you can use
2850 the keyboard shortcut @key{o} to change the overview period.
2851 @end defun
2853 You can sort the task display with the following functions:
2855 @defun planner-tasks-overview-sort-by-date
2856 Sort the tasks by date. Keyboard shortcut: @key{1}
2857 @end defun
2859 @defun planner-tasks-overview-sort-by-plan
2860 Sort the tasks by associated plan page. Keyboard shortcut: @key{2}
2861 @end defun
2863 @defun planner-tasks-overview-sort-by-priority
2864 Sort the tasks by priority. Keyboard shortcut: @key{3}
2865 @end defun
2867 @defun planner-tasks-overview-sort-by-status
2868 Sort the tasks by status. Keyboard shortcut: @key{4}
2869 @end defun
2871 You can jump to linked tasks with
2873 @defun planner-tasks-overview-jump other-window
2874 Display the current task. If a prefix argument is supplied, show the
2875 task in another window. Keyboard shortcut: @key{j}
2876 @end defun
2878 @defun planner-tasks-overview-jump-other-window
2879 Display the current task in another window. Keyboard shortcut: @kbd{C-u j}
2880 @end defun
2882 You can view a summary of the tasks in your plan pages with
2884 @defun planner-tasks-overview-show-summary &optional file-list
2885 Count unscheduled, scheduled, and completed tasks for FILE-LIST. If
2886 called with an interactive prefix, prompt for the plan page(s) to
2887 display. Load @file{planner-multi.el} to be able to specify multiple
2888 pages.
2889 @end defun
2891 @subheading Keys
2893 @key{TAB}, @kbd{SHIFT-TAB} and @key{RET} navigate links in the usual
2894 fashion.
2896 @node <tasks> tag, planner-registry, Task Overviews, Task Reports and Overviews
2897 @subsubsection <tasks> tag
2898 @cindex <tasks> tag
2899 @cindex task reports
2900 @cindex reports, task
2901 @cindex overviews, task
2902 @cindex task overviews
2903 @cindex tasks, overview of
2905 @samp{<tasks>} is replaced by a report of tasks over all day pages in
2906 published pages (@pxref{Publishing}).
2908 @example
2909 All incomplete tasks
2911 <tasks status="^X">
2913 All completed tasks
2915 <tasks status="X">
2917 All tasks
2919 <tasks>
2920 @end example
2922 Warning: this function can be slow, as it checks all the day pages!
2924 @node planner-registry, planner-zoom ,<tasks> tag, Task Reports and Overviews
2925 @comment  node-name,  next,  previous,  up
2926 @section planner-registry
2927 @cindex @file{planner-registry.el}, using
2929 The @file{planner-registry} module provides a way to keep track of all
2930 the URLs in your projects, and to list them depending on the current
2931 buffer.  The URLs are defined in @code{muse-url-protocols} module from
2932 Muse.
2934 If a URL has been created by @code{planner-create-task-from-buffer},
2935 going to that buffer and calling @code{planner-registry-show} will show
2936 you where Planner put the URL.
2938 @subheading Getting started
2940 To begin using @file{planner-registry}, add the following to your
2941 Planner configuration file.
2943 @example
2944 (require 'planner-registry)
2945 (planner-registry-initialize)
2946 @end example
2948 You must put it after the place where Planner has been loaded in your
2949 configuration file.
2951 If you want the registry to be updated each time you save a Planner
2952 file, add the following to your Planner configuration.
2954 @example
2955 (planner-registry-insinuate)
2956 @end example
2958 If you don't want to update the registry each time a file is written,
2959 you can do it manually with @code{planner-registry-update}: it will
2960 update the registry for saved Planner/Muse buffers only.
2962 @file{planner-registry} does not define any keybindings by default.  Its
2963 most useful interactive function is @code{planner-registry-show}.
2965 @subheading Example usage
2967 Say for example that you created a task from an e-mail.  Go to that
2968 e-mail and call @code{planner-registry-show}: it will open a new buffer
2969 displaying the files (in a muse links format) where a link to this
2970 e-mail has been added.
2972 @subheading Options
2974 @file{planner-registry} defines the following options.
2976 @defopt planner-registry-file
2977 The file where @file{planner-registry} stores its URL registry.
2978 @end defopt
2980 @defopt planner-registry-min-keyword-size
2981 The minimum size for keywords.
2982 @end defopt
2984 @defopt planner-registry-max-keyword-size
2985 The maximum size for keywords.
2986 @end defopt
2988 @defopt planner-registry-max-number-of-keywords
2989 The maximum number of keywords.
2990 @end defopt
2992 @defopt planner-registry-ignore-keywords
2993 A list of keywords to ignore.
2994 @end defopt
2996 @defopt planner-registry-show-level
2997 Level used by the @code{planner-registry-show} function.
2998 0 means that this function shows only exact matches.
2999 1 means that this function also shows descriptive matches.
3000 2 (or more) means that this function also shows fuzzy matches.
3001 @end defopt
3003 @node planner-zoom, , planner-registry, Task Reports and Overviews
3004 @comment  node-name,  next,  previous,  up
3005 @section planner-zoom
3006 @cindex @file{planner-zoom.el}, using
3007 @cindex view, weekly
3008 @cindex view, quarterly
3009 @cindex view, monthly
3010 @cindex view, yearly
3012 When assessing where you stand in relation to the tasks you have set
3013 out for yourself, you might want a way to survey those tasks in groups
3014 divided by time periods, like by the week or by the month. You could
3015 create all of these overview pages by hand, but if you like to have
3016 this kind of overview frequently, you might find manually creating
3017 such pages to be tedious and time consuming.
3019 @file{planner-zoom} is an optional module designed to make it easy to
3020 view your task information grouped by year, quarter, month, week or
3021 day.
3023 To install this module, just load it in your @file{.emacs} (or
3024 @file{_emacs}):
3026 @example
3027 (require 'planner-zoom)
3028 @end example
3030 This module will recognize planner pages named according to the
3031 following scheme:
3033 @table @asis
3035 @item year view
3036 @file{2006.Year}
3038 @item quarter view
3039 @file{2006.Quarter2}
3041 @item month view
3042 @file{2006.January}
3044 @item week view
3045 @file{2006.January.Week3}
3047 @item day view
3048 @file{2006.01.02}
3050 @end table
3052 @subheading Keybindings
3054 This module also adds key bindings that you can use when looking at a
3055 Planner page to easily jump between the different time-period views.
3057 @table @kbd
3059 @item S-up
3060 Move to the view corresponding to the time period one step larger than
3061 the current one. For example, it moves from the weekly view to the
3062 monthly view. It calls @code{planner-zoom-iup}.
3064 @item S-down 
3065 Move to the view corresponding to the time period one step smaller
3066 than the current one. For example, it moves from the weekly view to
3067 the daily view. It calls @code{planner-zoom-idown}.
3069 @item S-left
3070 Stay in the same time-period view as the current one, but move one
3071 interval earlier. For example, it moves from @file{2006.January.Week3}
3072 to @file{2006.January.Week2}. It calls @code{planner-zoom-iprev}.
3074 @item S-right
3075 Stay in the same time-period view as the current one, but move one
3076 interval later. For example, it moves from @file{2006.January.Week3}
3077 to @file{2006.January.Week4}. It calls @code{planner-zoom-inext}.
3079 @end table
3081 @subheading Example usage
3083 Look at the page named @file{2006.January} and then hit @kbd{S-down}
3084 which will show @file{2006.January.Week1}. Then hit @kbd{S-left} and
3085 @kbd{S-right} to look at @file{2006.January.Week2},
3086 @file{2006.January.Week3}, etc.
3088 @subheading Advanced tips and options
3090 You can use any prefix argument with @code{planner-zoom-iup} and
3091 @code{planner-zoom-idown} to have the new view display in a window
3092 other than the current one. This also works with a nonnumeric prefix
3093 argument and @code{planner-zoom-inext} or @code{planner-zoom-iprev}.
3094 For these two functions, a numeric prefix will specify the number of
3095 intervals to move.
3097 If you don't like the default patterns for naming the time-period view
3098 pages, you can change them by customizing @code{planner-zoom-regexps}.
3100 Some people believe weeks start with Sunday, and some believe they
3101 start with Monday. To accommodate both of these colliding worldviews,
3102 @code{planner-zoom-first-day-of-week} can be customized. Its default
3103 value is @samp{1}, which is Monday. If you would prefer Sunday, change
3104 it to @samp{0}. The month to which a week belongs is the month in
3105 which the first day of the week falls.
3107 @subheading Command reference
3109 @defun planner-zoom-iup name other-window
3110 Move to the next higher level in the hierarchy. With a prefix
3111 argument, show the desired page in the other window.
3112 @end defun
3114 @defun planner-zoom-idown name other-window
3115 Move to the next lower level in the hierarchy. If the current date is
3116 within the higher-level time range, zoom to the lower level time range
3117 that also contains today. Otherwise, just go to the first lower-level
3118 time range. With a prefix argument, show the desired page in the other
3119 window.
3120 @end defun
3122 @defun panner-zoom-inext name num other-window
3123 Move to the next time range at the same level in the hierarchy. With a
3124 numeric prefix argument, move by that number of time ranges. With a
3125 non-numeric prefix argument, show the desired page in the other window.
3126 @end defun
3128 @defun planner-zoom-iprev name num other-window
3129 Move to the previous time range at the same level in the hierarchy.
3130 With a numeric prefix argument, move by that number of time ranges.
3131 With a non-numeric prefix argument, show the desired page in the other
3132 window.
3133 @end defun
3135 @node More about Notes, Making Files Pretty, More about Tasks, More about Planner
3136 @section More about Notes
3137 @cindex notes, more about
3139 Planner by default organizes the notes on a planner page so that
3140 the most recent note is first. Each note is numbered, with the oldest
3141 note labeled @samp{.#1}. If you would like to reverse this behavior,
3142 look at @kbd{C-h v planner-reverse-chronological-notes}.
3144 Notes are associated with day pages, but can also be associated with
3145 plan pages when they are created.  A linked note looks like this:
3147 @example
3148 .#1 Headline (LinkedNote#1)
3149 Text
3150 @end example
3152 You can jump to the linked note with
3153 @command{planner-jump-to-linked-note}.
3155 Deleting a note can be dangerous, as the notes are automatically
3156 numbered.  Removing a note could break links in other pages.
3158 @subheading Functions
3160 @defun planner-create-note page
3161 Create a note to be remembered in @var{page} (today if @var{page} is
3162 nil).  If @code{planner-reverse-chronological-notes} is non-nil, create
3163 the note at the beginning of the notes section; otherwise, add it to
3164 the end.  Position point after the anchor.
3165 @end defun
3167 @defun planner-create-note-from-task
3168 Create a note based on the current task and update the current task to
3169 link to the note.
3170 @end defun
3172 @defun planner-renumber-notes
3173 Update note numbering.
3174 @end defun
3176 @defun planner-jump-to-linked-note note-info
3177 Display the note linked to by the current note or @var{note-info} if
3178 non-nil.
3179 @end defun
3181 @defun planner-search-notes regexp limit
3182 Return a buffer with all the notes returned by the query for
3183 @var{regexp}.  If called with a prefix argument, prompt for
3184 @var{limit} and search days on or after @var{limit}.
3185 @end defun
3187 The following sections include instructions for displaying,
3188 manipulating, and navigating your notes efficiently.
3190 @menu
3191 * Using Allout Mode::           Quickly navigating your notes
3192 * <notes>::                     Note headlines
3193 * <past-notes>::                Index of past notes
3194 * Note Indices::                planner-notes-index.el
3195 @end menu
3197 @node Using Allout Mode, <notes>, More about Notes, More about Notes
3198 @subsection Using Allout Mode
3199 @cindex Allout mode
3200 @cindex notes, navigating
3201 @cindex notes, formatting
3202 @cindex notes, displaying
3204 The format of the notes in Planner works well with Allout mode, which
3205 provides helpful commands for navigating and formatting outlines. You
3206 can, for example, hide the bodies of all the notes on a page so you can
3207 see just their headlines. You can also jump easily from headline to
3208 headline, skipping over the bodies in between.
3210 The commands for using Allout mode vary depending on which Emacs version
3211 you are using. In either case, type @kbd{M-x load-library @key{RET}
3212 allout @key{RET}} to start. If you are using CVS Emacs, type @kbd{M-x
3213 allout-mode @key{RET}}. If you are using an earlier version of Emacs,
3214 type @kbd{M-x outline-mode @key{RET}}.
3216 The exact commands then available to you differ depending on your Emacs
3217 version, but you can view the commands and their keybindings by typing
3218 @kbd{C-h m}. In CVS Emacs, they will start with @command{allout-}, while
3219 in previous versions, they will start with @command{outline-}.
3221 @node <notes>, <past-notes>, Using Allout Mode, More about Notes
3222 @subsection <notes>
3224 @samp{<notes>} is replaced by a list of note headlines when the page
3225 is published. For example, the notes tag in the following example will
3226 be replaced by the two headlines when published. (@pxref{Publishing})
3228 @example
3229 <notes>
3231 * Notes
3233 .#1 This is a headline
3235 and this is body text
3237 .#2 This is another headline
3239 and this is more body text
3240 @end example
3242 @samp{<notes>} is useful if you want to provide a quick summary of
3243 blog entries at the top of your page. Just add it to your
3244 @code{planner-day-page-template}.
3246 @node <past-notes>, Note Indices, <notes>, More about Notes
3247 @subsection <past-notes>
3249 @samp{<past-notes>} is replaced by an index of note headlines.
3250 If @var{start} is specified, it lists notes starting from that date.
3251 If @var{directory} is specified, you can index notes in another
3252 planner directory.
3254 @example
3255 All the notes I've taken in 2004:
3257 <past-notes start="2004.01.01" end="2004.12.31">
3258 @end example
3260 @node Note Indices,  , <past-notes>, More about Notes
3261 @comment  node-name,  next,  previous,  up
3262 @subsection Note Indices
3263 @cindex @file{planner-notes-index.el}, using
3264 @cindex notes, indexing
3266 Make sure that @file{planner-notes-index.el} is in your load path and
3267 add this to your @file{.emacs} (or @file{_emacs}):
3269 @example
3270 (require 'planner-notes-index)
3271 @end example
3273 Then you can use tags of the form:
3275 @example
3276 <planner-notes-index page="2004.03.02">
3277 <planner-notes-index from="2004.03.01" to="2004.03.31">
3278 <planner-notes-index limit="10">
3279 <planner-notes-index page="PlanPage">
3280 <planner-notes-index-month-table month="2004.03" limit="5">
3281 <planner-notes-index-month-table month="2004.03">
3282 @end example
3284 You can also use the following interactive functions:
3286 @code{planner-notes-index}
3287 @code{planner-notes-index-days}
3288 @code{planner-notes-index-weeks}
3289 @code{planner-notes-index-months}
3290 @code{planner-notes-index-years}    (wow!)
3292 These work based on the current date (date of current buffer, or today).
3294 If a single page is specified, this page is scanned for headlines
3295 of the form:
3297 @example
3298  .#1 Headline
3299 @end example
3301 The results are presented as a bulleted list.
3303 If @var{from} and @var{to} are specified, all date pages between them
3304 (inclusive) are scanned. If @var{from} is omitted, it is assumed to be
3305 the earliest entry.  If @var{to} is omitted, it is assumed to be the
3306 latest entry.
3308 If @var{recent} is specified, the list includes only that many recent
3309 headlines.  and the results are presented as a bulleted list.
3311 To customize presentation, you can write a function that generates
3312 the appropriate @code{<planner-notes-index>} tags. You can also use
3313 @code{planner-extract-note-headlines} in your own functions.
3315 @subheading Functions
3317 The following interactive functions are defined in
3318 @file{planner-notes-index.el}:
3320 @defun planner-notes-index &optional from to limit
3321 Display a clickable notes index. If called from a Lisp program,
3322 display only dates between @var{from} and @var{to}. With a prefix arg
3323 @var{limit}, display only that number of entries.
3324 @end defun
3326 @defun planner-notes-index-days days
3327 Display an index of notes posted over the past few @var{days}. The
3328 list ends with the day of the current buffer or @code{planner-today}.
3329 @end defun
3331 @defun planner-notes-index-weeks weeks
3332 Display an index of notes posted over the past few @var{weeks}. The
3333 list ends with the week of the current buffer or
3334 @code{planner-today}. Weeks start from Sunday.
3335 @end defun
3337 @defun planner-notes-index-months months
3338 Display an index of notes posted over the past few @var{months}. The
3339 list ends with the month of the current buffer or @code{planner-today}.
3340 @end defun
3342 @defun planner-notes-index-years years
3343 Display an index of notes posted over the past few @var{years}. The
3344 current year is included.
3345 @end defun
3347 @file{planner-notes-index.el} does not define any keybindings.
3350 @node Making Files Pretty, Annotations, More about Notes, More about Planner
3351 @section Making Files Pretty
3353 By default, planner does a little bit of fancy reformatting when you
3354 save a file. Tasks are sorted by priority (ABC) and status (_oP>XC) on
3355 day pages. On plan pages, tasks are sorted by priority (ABC), status
3356 (XC), and date. Undated tasks are sorted after dated tasks.
3358 @subheading Options
3360 @defopt planner-sort-tasks-key-function
3361 Control task sorting. Some options include
3362 @code{planner-sort-tasks-default-key},
3363 @code{planner-sort-tasks-basic}, @code{planner-sort-tasks-by-date}, and
3364 @code{planner-sort-tasks-by-link}.
3365 @end defopt
3367 @defopt planner-sort-undated-tasks-equivalent
3368 This option controls the behavior of task sorting on plan pages.  By
3369 default, the value @samp{9999.99.99} causes dated tasks to be listed
3370 before undated tasks.  To sort undated tasks before dated tasks,
3371 set this to a blank string.
3372 @end defopt
3374 @defopt planner-sort-tasks-automatically
3375 Non-nil means sort tasks whenever a planner file is saved.  On day
3376 pages, tasks are sorted by status.  On plan pages, they are sorted by
3377 status and date.  Sorting can take a while.
3378 @end defopt
3380 @defopt planner-renumber-tasks-automatically
3381 Non-nil means renumber tasks from 1 to N whenever a planner file is
3382 saved. This allows you to refer to tasks in previous day pages using
3383 anchors like @samp{2003.08.12#A1}. If you use this function, make sure
3384 @code{planner-use-task-numbers} is non-nil so that new tasks are created
3385 with task numbers.
3386 @end defopt
3388 @defopt planner-align-tasks-automatically
3389 Non-nil means align tasks whenever a planner file is saved.  This
3390 causes the status to line up in a neat column if you have less than
3391 100 tasks.
3392 @end defopt
3394 @defopt planner-renumber-notes-automatically
3395 Non-nil means renumber the notes. If most of your notes are only on
3396 one page, you might like seeing the notes renumbered if you delete a
3397 note in the middle. However, if you use a lot of cross-referencing,
3398 note renumbering will break those links.
3399 @end defopt
3401 @subheading Functions
3403 @defun planner-sort-tasks
3404 Sort tasks according to planner-sort-tasks-key-function. By default,
3405 sort tasks according to priority and position on day pages, and
3406 according to status, priority, date, and position on plan pages.
3407 @end defun
3409 @defun planner-renumber-tasks
3410 Update task numbering.
3411 @end defun
3413 @defun planner-align-tasks
3414 Align tasks neatly. You can add this to @code{write-file-functions} to
3415 have the tasks automatically lined up whenever you save.  For best
3416 results, ensure @code{planner-align-tasks} is run after
3417 @code{planner-renumber-tasks}.
3418 @end defun
3420 @defun planner-fix-tasks
3421 Sort, renumber and align tasks.
3422 @end defun
3424 @node Annotations, Interactive Lisp, Making Files Pretty, More about Planner
3425 @comment  node-name,  next,  previous,  up
3426 @section Annotations
3428 The context included when you create a task and the context included
3429 when you create a note are gained the same way. It sounds like black
3430 magic, but it turns out not to be.
3432 All that happens is, Planner has a list of functions,
3433 @code{planner-annotation-functions}. When you create a task from a
3434 buffer, or remember a note from a buffer, Planner goes through
3435 this list from top to bottom. The first one that returns true is the
3436 one it uses.
3438 For example, if you're in Wanderlust, and you hit the key you've bound
3439 to @code{planner-create-task-from-buffer}, it looks at this list and
3440 does something like this.  Is it an ERC buffer? No. Is it a BBDB
3441 buffer? No. Are we in w3m? No. Are we in Wanderlust? Yes. So this
3442 function succeeds. It stops searching and runs the annotation function
3443 for Wanderlust, which in this case finds out who the message is from
3444 and what the message ID of the message is. It then takes those and
3445 constructs a link back to that message, with a link title something
3446 like @samp{Email from Joe Blogs}.
3448 So, you've read the email from Joe Blogs. He's asked you to do
3449 something and you've hit your key to add that task to your list of
3450 things to do. So what you end up with is a description of the task,
3451 and a link back to what made you create the task in the first place.
3453 The same happens with remembering notes, except that it ends up in the
3454 @samp{* Notes} section of your page instead.
3456 By default, @file{planner.el} can annotate tasks and notes based on
3457 the current filename.
3459 @subheading Options
3461 To change the behavior of annotations, customize the following options:
3463 @defopt planner-annotation-functions
3464 A list of functions tried in order by
3465 @command{planner-create-task-from-buffer} and other functions that
3466 pick up context.  The first non-nil value returned is used as the
3467 annotation.  To cause an item to @strong{not} be annotated, return the
3468 empty string @samp{""}.
3469 @end defopt
3471 @defopt planner-annotation-strip-directory
3472 File links are usually generated with the full path to the file so
3473 that you can easily tell apart files with the same base name.  If
3474 @code{planner-annotation-strip-directory} is non-nil, though, only the
3475 base name of the file will be displayed.  For example, a link to
3476 @samp{/foo/bar/baz} will be displayed as @samp{baz} and hyperlinked to
3477 the file.
3478 @end defopt
3480 @defopt planner-annotation-use-relative-file
3481 If t, always use relative filenames.
3482 @code{planner-annotation-use-relative-file} can also be a function that
3483 takes the filename and returns non-nil if the link should be relative.
3484 Filenames are resolved relative to the first directory of your Planner
3485 project in @code{muse-project-alist}.  That is, the created link will be
3486 of the form @samp{../../somefile} instead of
3487 @samp{/absolute/path/to/file}.  This can be helpful if you publish your
3488 planner files to the Net and your directory structure ensures that
3489 relative links resolve the same from your Plan pages and their
3490 respective publishing directory.
3491 @end defopt
3493 @node Interactive Lisp, Publishing, Annotations, More about Planner
3494 @comment  node-name,  next,  previous,  up
3495 @section Interactive Lisp with planner-lisp.el
3496 @cindex Lisp functions, using with Planner
3497 @cindex interactive Lisp fuctions, using with Planner
3498 @cindex @file{planner-lisp.el}, using
3500 You can include interactive Lisp functions in your planner pages.
3502 First, you need @file{planner-lisp.el}. Put this in your @file{.emacs}
3503 (or @file{_emacs}):
3505 @example
3506 (require 'planner-lisp)
3507 @end example
3509 Then, add a link to the Lisp function to your page, like:
3511 @example
3513 [[lisp:/plan][Plan]]
3515 @end example
3517 This will be rendered as @samp{Plan}. Selecting the link will run the
3518 @code{plan} function interactively.
3520 You can also execute other Lisp expressions. For example:
3522 @example
3523 [[lisp:/(planner-goto (planner-expand-name "+7"))][Next week]]
3524 @end example
3526 @file{planner-lisp.el} does not provide any interactive functions or
3527 keybindings.
3529 @node Publishing, Experimental Functions, Interactive Lisp, More about Planner
3530 @section Publishing
3531 @cindex publishing
3533 You can publish your planner files to a variety of different formats.
3534 For example, you can publish your planner in HTML and put it on a
3535 normal web server. No special server support is required. This gives
3536 you an easy way to keep other people up to date on your tasks, keep a
3537 web log, or simply organize information.
3539 Published files are stored in the path specified by
3540 @code{muse-project-alist} for your Planner project. Just copy the
3541 contents of this directory to your web server, and you're all set! Of
3542 course, publishing is completely optional.
3544 Here are some more features related to publishing:
3546 @menu
3547 * Publishing Planner pages::    planner-publish.el
3548 * Publishing Calendars::        planner-calendar.el
3549 * Authz Access Restriction::    planner-authz.el
3550 * RSS Publication::             Sharing notes with planner-rss.el
3551 * iCal Task Publication::       Sharing tasks with planner-ical.el
3552 * RDF Publication::             planner-rdf.el
3553 @end menu
3555 @node Publishing Planner pages, Publishing Calendars, Publishing, Publishing
3556 @comment  node-name,  next,  previous,  up
3557 @subsection Publishing Planner pages
3558 @cindex publishing
3559 @cindex @file{planner-publish.el}, using
3561 Publishing works by providing Muse with the settings and environment for
3562 Planner publishing.
3564 First, make sure that you have set up a proper
3565 @code{muse-project-alist} (@pxref{Creating Your Planner}).
3567 Second, add:
3569 @example
3570 (require 'planner-publish)
3571 @end example
3573 to your @file{.emacs} (or @file{_emacs}).
3575 To publish your entire Planner project, hit @kbd{C-c C-p}
3576 (@code{muse-project-publish}). To publish just the current buffer, hit
3577 @kbd{C-c C-t} (@code{muse-publish-this-file}).
3579 To automatically publish files when you save them, add the following
3580 code to your @file{~/.emacs} (or @file{_emacs}):
3582 @example
3583 (eval-after-load "muse-mode"
3584   (add-hook 'after-save-hook
3585             #'(lambda ()
3586                 (when (planner-derived-mode-p 'muse-mode)
3587                   (muse-project-publish nil)))
3588             nil t))
3589 @end example
3591 @subheading Styles provided
3593 The following publishing styles are available.
3595 @table @code
3597 @cindex publishing styles, planner-html
3598 @item planner-html
3599 Publish Planner pages to HTML.
3601 @cindex publishing styles, planner-xhtml
3602 @item planner-xhtml
3603 Publish Planner pages to XHTML.
3605 @cindex publishing styles, planner-xml
3606 @item planner-xml
3607 Publish Planner pages to XML.
3609 @end table
3611 @subheading Options provided
3613 The following options may be customized to enhance your publishing
3614 experience.
3616 @table @code
3618 @item planner-publish-markup-regexps
3619 List of markup rules for publishing Planner pages.
3621 @item planner-publish-markup-functions
3622 Specify which function to use for publishing different kinds of markup.
3624 @item planner-publish-markup-tags
3625 A list of custom HTML-like tags to recognize when publishing.
3627 @item planner-xml-markup-strings
3628 Strings that are inserted to publish XML markup.
3630 @item planner-xml-header
3631 Header used when publishing Planner XML files.
3632 This may be text or a filename.
3634 @item planner-xml-footer
3635 Footer used when publishing Planner XML files.
3636 This may be text or a filename.
3638 @item planner-html-markup-strings
3639 Strings that are inserted to publish HTML markup.
3641 @item planner-html-style-sheet
3642 CSS stylesheet elements used in Planner HTML and XHTML files.
3643 This can also be one or more @samp{<link>} tags.
3645 @item planner-html-header
3646 Header used when publishing Planner HTML files.
3647 This may be text or a filename.
3649 @item planner-html-footer
3650 Footer used when publishing Planner HTML files.
3651 This may be text or a filename.
3653 @item planner-xhtml-header
3654 Header used when publishing Planner XHTML files.
3655 This may be text or a filename.
3657 @item planner-xhtml-footer
3658 Footer used when publishing Planner XHTML files.
3659 This may be text or a filename.
3661 @item planner-html-inner-header
3662 Extra header section that can be embedded within
3663 @code{planner-html-header} and @code{planner-xhtml-header}.
3665 @item planner-html-inner-footer
3666 Extra header section that can be embedded within
3667 @code{planner-html-footer} and @code{planner-xhtml-footer}.
3669 @item planner-publish-prepare-regexps
3670 List of markup rules to apply before publishing a page with Planner.
3672 @item planner-publish-finalize-regexps
3673 List of markup rules to apply after publishing a page with Planner.
3675 @end table
3677 @node Publishing Calendars, Authz Access Restriction, Publishing Planner pages, Publishing
3678 @comment  node-name,  next,  previous,  up
3679 @subsection Publishing Calendars
3680 @cindex calendar, publishing
3681 @cindex @file{planner-calendar.el}, using
3683 To publish calendars in your day pages, it is necessary to do two steps.
3685 @itemize
3686 @item Add @code{(require 'planner-calendar)} to your configuration.
3687 @item Add a @samp{<calendar>} tag to either your header, footer, or
3688 @var{planner-day-page-template}, depending on where you want it to
3689 appear.
3690 @end itemize
3692 To display a calendar based on a different day (given here as DAYPAGE),
3693 use @code{<calendar page="DAYPAGE">}.
3695 To get arrows to previous and next months to show up, use
3696 @code{<calendar arrows="t">}.  The text in
3697 @var{planner-calendar-prev-month-button} and
3698 @var{planner-calendar-next-month-button} will be used for the arrows to
3699 the previous and next months, respectively.
3701 By default, Muse will not display the arrows properly, due to
3702 limitations in the special-escaping algorithm.  To work around this,
3703 remove the @samp{&} rule from @var{muse-xml-markup-specials}, or from
3704 @var{muse-html-markup-specials} if you are using the 3.02.6 version of
3705 Muse.
3707 It is also possible to create a symlink from the current day page to the
3708 page name specified by @var{planner-calendar-today-page-name}.  To
3709 accomplish this, add the following to your configuration.
3711 @example
3712 (eval-after-load "muse-publish"
3713   '(add-hook 'muse-after-publish-hook
3714              'planner-calendar-create-today-link))
3715 @end example
3717 @subheading Options
3719 @defopt planner-calendar-prev-month-button
3720 HTML text used for previous month buttons.
3721 @end defopt
3723 @defopt planner-calendar-next-month-button
3724 HTML text used for next month buttons.
3725 @end defopt
3727 @defopt planner-calendar-day-header-chars
3728 Number of characters to use for day column header names.
3729 @end defopt
3731 @defopt planner-calendar-today-page-name
3732 Default name for published today page link.
3733 @end defopt
3735 @subheading Functions
3737 @defun planner-calendar-create-today-link
3738 Add this function to @code{muse-after-publish-hook} to
3739 create a ``today'' soft-link to the newest published planner day page,
3740 on operating systems that support POSIX @command{ln}.
3741 @end defun
3743 @node Authz Access Restriction, RSS Publication, Publishing Calendars, Publishing
3744 @comment  node-name,  next,  previous,  up
3745 @subsection Authz Access Restriction
3746 @cindex @file{planner-authz.el}, using
3747 @cindex Mason, restricting portions with
3748 @cindex access, restricting
3750 @file{planner-authz.el} was written by Andrew J. Korty in order to
3751 allow the easy restriction of portions of published pages.  It uses
3752 the HTML::Mason module available on CPAN
3753 (@url{http://www.cpan.org}).  Setting up HTML::Mason is
3754 outside the scope of this document.  Make sure that it works before
3755 trying out @file{planner-authz.el}.
3757 @file{planner-authz.el} modifies the behavior of
3758 @command{muse-project-publish} so that published pages follow access
3759 modifiers.
3761 This library lets you publish your planner pages while controlling
3762 access to certain portions of them to users you specify.  When you
3763 load this library, you gain access to two additional markup directives
3764 to use in your planner pages.  The @samp{<authz>} tag lets you
3765 restrict access to arbitrary content as follows:
3767 @example
3768 Here is a sentence everyone should see.  This sentence also
3769 contains no sensitive data whatsoever.  <authz users="ajk">This
3770 sentence, however, talks about my predilection for that French
3771 vanilla instant coffee that comes in the little tin, and I'm
3772 embarrassed for anyone else to know about that.</authz> And
3773 here's some more perfectly innocuous content.
3774 @end example
3776 You can use @samp{<authz>} tags to mark up entire paragraphs, tasks,
3777 notes, and anything else.  The tags are replaced with Mason code in
3778 the published pages.
3780 The @samp{#authz} directive restricts access to an entire page.  A Mason
3781 call is added to this page to generate a 403 error when someone not
3782 listed tries to access it.  Any notes or tasks on a
3783 @samp{#authz}-protected page are also wrapped in Mason code on linked
3784 pages. To add a @samp{#authz} directive to a Muse page, place
3785 @samp{#authz} followed by a space-delimited list of users on one
3786 line. For example:
3788 @example
3789 #authz ajk sacha
3790 @end example
3792 @subheading Getting started
3794 Add the following to your .emacs file to cause @kbd{M-x
3795 muse-project-publish} to automatically use planner-authz features.
3797 @example
3798 (require 'planner-authz)
3799 @end example
3801 @subheading Diary markup
3803 If your pages have a section with diary entries maintained by
3804 planner-appt.el (or by any other means), you can control access to these
3805 entries.  First, customize @code{planner-section-tagnames} to map your
3806 diary section ("* Schedule", in this example) to a tag called
3807 "diary-section".  An example follows.
3809 @example
3810 (add-to-list 'planner-section-tagnames '("Schedule" . "diary-section"))
3811 @end example
3813 If the name of your diary section is "* Diary", you will not need to
3814 customize @code{planner-section-tagnames} by default.
3816 Then make sure the diary entries you want restricted contain a
3817 corresponding plan page name in parentheses, as in the following
3818 example.
3820 @example
3821 10:00 10:30 Meeting with boss (WorkStuff)
3822 @end example
3824 @subheading Options
3826 @defopt planner-authz-project-default
3827 Default access list for project pages (not day pages).  If a given
3828 project page doesn't contain a @samp{#authz} tag, it will receive the
3829 access list defined here.  If this variable is nil, all users will be
3830 allowed to view the page.  No corresponding variable is provided for
3831 day pages because it doesn't seem like you'd ever want to control
3832 access based on what day it was.  (But I will accept patches. :) Notes
3833 and tasks referencing pages without @samp{#authz} tags will also be
3834 restricted to the users listed here.
3835 @end defopt
3837 @defopt planner-authz-day-note-default
3838 Default access list for notes on day pages not associated with
3839 any project.  There is way to set a default for notes on project
3840 pages for the reason above; they would only be associated with
3841 date pages anyway.
3842 @end defopt
3844 @defopt planner-authz-day-task-default
3845 Same as @kbd{planner-authz-day-note-default}, but for tasks.
3846 @end defopt
3848 @subheading Functions
3850 @defun planner-authz-publish-index
3851 Publish an index for the planner marked up with Mason code.
3852 Only those links to pages which the remote user is authorized to
3853 access will be shown.
3854 @end defun
3856 @node RSS Publication, iCal Task Publication, Authz Access Restriction, Publishing
3857 @comment  node-name,  next,  previous,  up
3858 @subsection RSS Publication
3859 @cindex @file{planner-rss.el}, using
3860 @cindex notes, RSS
3861 @cindex RSS
3863 @file{planner-rss.el} allows you to publish your notes in the RSS 2.0
3864 XML format for blog syndication. You will also want to customize the
3865 following variables:
3867 To manually add the current note to all the matching RSS feeds, invoke
3868 @command{planner-rss-add-note}. You can specify a filename with the
3869 universal prefix, like this: @kbd{C-u M-x planner-rss-add-note}.
3871 If you use the @file{remember-planner.el} module to create notes, you
3872 can automatically publish new notes to RSS feeds by adding the
3873 following code to your @file{.emacs} (or @file{_emacs}).
3875 @example
3876 (add-to-list 'remember-planner-append-hook 'planner-rss-add-note t)
3877 @end example
3879 @subheading Options
3881 @defopt planner-rss-base-url
3882 Base absolute URL for published blog entries. Should include trailing
3883 @samp{/}.
3884 @end defopt
3886 @defopt planner-rss-category-feeds
3887 Rules for automatic categorization of posts and publishing to RSS
3888 files. A blog entry is matched against each condition. If it matches
3889 the regular expression or the function returns a non-nil value, the
3890 blog entry is copied into the specified file.
3891 @end defopt
3893 @defopt planner-rss-feed-limits
3894 A list of regular expressions that match feed filenames and the size
3895 and item limits for feeds that match. For example, you can use
3896 @samp{(("." nil 10))} to ensure that all feeds are limited to the 10
3897 most recent items.
3898 @end defopt
3900 @subheading Functions
3902 @file{planner-rss.el} defines the following interactive functions:
3904 @defun planner-rss-add-note @var{feed}
3905 Export the current note using @code{planner-add-item}. If @var{feed}
3906 is specified, add the entry to the specified file. Else, add the entry
3907 to all matching RSS feeds specified by
3908 @code{planner-rss-category-feeds}.
3909 @end defun
3911 @node iCal Task Publication, RDF Publication, RSS Publication, Publishing
3912 @comment  node-name,  next,  previous,  up
3913 @cindex @file{planner-ical.el}, using
3914 @subsection iCal Publication
3916 iCal is an Internet Engineering Task Force (IETF) standard for
3917 calendaring and scheduling. @uref{http://www.ietf.org/rfc/rfc2445.txt}
3919 You can export your tasks to the iCal format using
3920 @file{planner-ical}. Add @code{(require 'planner-ical)} to your
3921 @file{~/.emacs}. Then you can use @kbd{M-x planner-ical-export-page}
3922 to display the iCal equivalent of tasks on a page, which you can then
3923 save to a file.
3925 To export today's tasks to a file in your publishing directory, add
3926 the following to your @file{~/.emacs}.
3928 @example
3929 (planner-ical-export-file
3930  (planner-today)
3931  (expand-file-name
3932    "tasks.ics"
3933    (muse-style-element :path (car (cddr (muse-project planner-project))))))
3934 @end example
3936 @subheading Functions
3938 @defun planner-ical-export-page page &optional file
3939 Export PAGE's tasks in the iCal format.
3940 If FILE is non-nil, results are saved to that file.
3941 If FILE is nil, results are displayed in a `planner-ical-export-buffer'.
3942 @end defun
3944 @defun planner-ical-export-this-page
3945 Display the tasks on the current page in iCal format.
3946 @end defun
3948 @node RDF Publication,  , iCal Task Publication, Publishing
3949 @comment  node-name,  next,  previous,  up
3950 @subsection RDF Publication
3951 @cindex @file{planner-rdf.el}, using
3952 @cindex RDF, publishing to
3954 Put planner-rdf.el in a directory that is in your Emacs load-path and
3955 the following into your ~/.emacs file:
3957 @example
3958 (require 'planner-rdf)
3959 (eval-after-load "muse-publish"
3960   '(progn
3961      (add-hook 'muse-after-publish-hook
3962                'planner-rdf-publish-file)
3963      (add-hook 'muse-after-publish-hook
3964                'planner-rdf-publish-index)))
3965 @end example
3967 @menu
3968 * Publishing with planner-rdf::  
3969 * planner-rdf Tags::            
3970 * planner-rdf Usage Examples::  
3971 @end menu
3973 @node Publishing with planner-rdf, planner-rdf Tags, RDF Publication, RDF Publication
3974 @subsubsection Publishing with planner-rdf
3976 Planner-rdf is now included in the normal Planner publishing process.
3977 Pressing @key{C-p} will create a .owl and a .rdf file for every planner
3978 file. Additionally it creates an index, @file{index.rdf}.
3980 By default all generated files will be stored in the normal Planner
3981 publishing directory, where the HTML files end up. If you would ike to
3982 change that, set the variable @code{planner-rdf-directory} to the desired
3983 location.
3985 The generated files:
3987 @itemize
3988 @item
3989 @file{index.rdf} - a collection with pointers to the
3990 @file{<plan-page>.rdf} files.
3991 @item
3992 @file{<plan-page>.rdf} - contains Dublin Core metadata about the files
3993 related to the current Planner page. Currently it contains metadata
3994 about the source file, the Emacs plan page, the generated HTML page, and
3995 the generated OWL file.
3996 @item
3997 @file{<plan-page>.owl} - contains task and note data from the Planner
3998 file. Task information is stored completely. For notes, the note
3999 headline is stored.
4000 @end itemize
4002 @node planner-rdf Tags, planner-rdf Usage Examples, Publishing with planner-rdf, RDF Publication
4003 @subsubsection planner-rdf Tags
4005 Besides the factual information, e.g. the task status or description,
4006 planner-rdf extracts links (in the format @samp{[[...][...]]} or
4007 @samp{[[...]]}) and tags (@samp{@{@{...:...}@}@}) from tasks and notes
4008 (including the notes text). Links and tags provide context for the plan
4009 elements and so are stored and linked with the containing elements.
4011 Links point to locations that can be used to enrich the information in
4012 the Planner pages (e.g, by retrieving data from them and adding it),
4013 tags -- like the one for the task ids @samp{@{@{Tasks:198@}@}} -- can be
4014 used to express abstract qualities. Some examples:
4016 @itemize
4017 @item
4018 an @samp{@{@{audience:myteam@}@}} tag, can be used to restrict
4019 publishing of items to a certain user group;
4020 @item a @samp{@{@{lang:de@}@}} tag, signifying the language of the text;
4021 @item
4022 a @samp{@{@{location:Hamburg@}@}} tag, can be used to make geographic
4023 reference to an entity that is not stored in your address book, bbdb.
4024 @end itemize
4026 What tags to use is up to the user. Planner-rdf makes no assumptions
4027 about them, it just extracts and stores them. Only the applications
4028 using the data know what to do with them.
4030 @node planner-rdf Usage Examples,  , planner-rdf Tags, RDF Publication
4031 @subsubsection Usage Examples
4033 Report generation with OpenOffice
4035 The Perl file @file{this-week.pl}
4036 (@url{http://www.rainervolz.de/planner-rdf/this-week.pl}) creates a
4037 simple report for the current week. The script extracts task and note
4038 information from the generated OWL files and inserts it into a simple
4039 OpenOffice Writer document. Nothing fancy, just a proof of concept, to
4040 show how planner-rdf can be used to integrate Planner Mode with other
4041 applications.
4043 Besides Perl and OpenOffice you'll need the Redland RDF Application
4044 Framework (@url{http://www.redland.opensource.ac.uk/}). It is used to
4045 process the RDF data. Redland is small, but powerful, and available
4046 for many platforms and languages.
4048 As an example the application loads the RDF data each time it is run.
4049 In the real world you probably would use Redland to store the Planner
4050 data in a database, to save the loading step each time you access the
4051 data.
4053 Importing Planner data into Protege
4055 Protege is a popular ontology editor and knowledge management
4056 application. A simple way to import data into it, is to provide a OWL
4057 file that contains the data as well as the schema. To do this:
4059 @itemize
4060 @item
4061 Use @file{planner2protege.pl}
4062 (@url{http://www.rainervolz.de/planner-rdf/planner2protege.pl}) to
4063 combine all OWL files into a single one.
4064 @item
4065 Use CWM (@url{http://www.w3.org/2000/10/swap/doc/cwm.html}) to combine
4066 schema and data, with @code{python cmw --rdf planner-rdf.owl
4067 planner-data.owl --think --rdf >planner2.owl}
4068 @end itemize
4070 Not the most straightforward process, but it works. The resulting file,
4071 here planner2.owl, can then be loaded into Protege.
4073 @node Experimental Functions,  , Publishing, More about Planner
4074 @comment  node-name,  next,  previous,  up
4075 @section Experimental Functions
4076 @cindex @file{planner-experimental.el}, using
4077 @cindex experimental functions, Planner
4079 These functions are experimental. This means that they may not do
4080 exactly what you expect them to do, so keep backups, be careful, and
4081 don't blame us.
4083 To use these functions, make sure that @file{planner-experimental.el} is
4084 in your load path, and add this to your @file{.emacs} (or
4085 @file{_emacs}):
4087 @example
4088 (require 'planner-experimental)
4089 @end example
4091 @subheading Functions
4093 @file{planner-experimental.el} defines the following interactive
4094 functions:
4096 @defun planner-search-notes-next-match
4097 Jump to the next matching entry.  Call after
4098 @code{planner-search-notes}.
4099 @end defun
4101 @defun planner-search-notes-previous-match
4102 Jump to the previous matching entry.  Call after
4103 @code{planner-search-notes}.
4104 @end defun
4106 @defun planner-remove-duplicates
4107 Remove duplicate tasks.
4108 @end defun
4110 @file{planner-experimental.el} does not define any keybindings.
4112 @node Managing Your Information, Advanced Configuration, More about Planner, Top
4113 @comment  node-name,  next,  previous,  up
4114 @chapter Managing Your Information
4116 Planner can be integrated with other Emacs and even some non-Emacs
4117 programs by loading additional modules. You can pick and choose from
4118 these modules, choosing those that work with programs you use and that
4119 produce information you want to have included in your Planner pages.
4121 @menu
4122 * E-mail::                      Linking notes and tasks to messages
4123 * Scheduling and Time::         Tracking appointments and where your time goes
4124 * Finances::                    Display your account balances and more
4125 * Contacts and Conversations::  BBDB and ERC
4126 * Tracking Research and Resources::  The Web, bibliographies, and bookmarks
4127 * Tracking Development::        
4128 @end menu
4130 @node E-mail, Scheduling and Time, Managing Your Information, Managing Your Information
4131 @comment  node-name,  next,  previous,  up
4132 @section E-mail
4134 Planner can work together with several different Emacs e-mail
4135 clients. If you load the appropriate module for the e-mail client you
4136 use, then your notes and tasks can be annotated with information
4137 pointing to the specific e-mail message you were reading when you
4138 created that note or task. When you are looking at the note or task, you
4139 will be able to jump straight to that message.
4141 @menu
4142 * Unix mail::                   Unix mailboxes: planner-unix-mail.el              
4143 * Gnus::                        Gnus mail and news reader: planner-gnus.el
4144 * VM::                          VM mail reader: planner-vm.el
4145 * Wanderlust::                  Wanderlust mail reader: planner-wl.el
4146 * MH-E::                        MH-E mail reader: planner-mhe.el
4147 * Rmail::                       Rmail: planner-rmail.el
4148 @end menu
4151 @node Unix mail, Gnus, E-mail, E-mail
4152 @comment  node-name,  next,  previous,  up
4153 @subsection Unix mail
4154 @cindex @file{planner-unix-mail.el}, using
4155 @cindex mbox, using Planner with
4156 @cindex Unix mail, using Planner with
4157 @cindex mail client, using Planner with
4159 This module supports links from any kind of Unix mailbox (mbox). To
4160 use this module, make sure that @file{planner-unix-mail.el} is in your
4161 load path and add this to your @file{.emacs} (or @file{_emacs}):
4163 @example
4164 (require 'planner-unix-mail)
4165 @end example
4167 Unix mail URLs are of the form:
4169 @example
4170 ;; mail://PATH/TO/INBOX/message-id
4171 @end example
4173 Annotations will be of the form:
4175 @smallexample
4176 [[mail://PATH/TO/INBOX/E1AyTpt-0000JR-LU%40sacha.ateneo.edu][E-mail from Sacha Chua]]
4177 @end smallexample
4179 @file{planner-unix-mail.el} does not define any interactive functions or
4180 create any new keybindings.
4182 @node Gnus, VM, Unix mail, E-mail
4183 @comment  node-name,  next,  previous,  up
4184 @subsection Gnus
4185 @cindex Gnus, using Planner with
4186 @cindex mail client, using Planner with, Gnus
4187 @cindex @file{planner-gnus.el}, using
4189 To use this module, make sure that it is in your load path and put
4190 this in your @file{.emacs} (or @file{_emacs}):
4192 @example
4193 (require 'planner-gnus)
4194 (planner-gnus-insinuate)
4195 @end example
4197 With this module loaded, when you create tasks from Gnus summary or
4198 message buffers, the tasks will be annotated with information from the
4199 message you were looking at when you created each task. A link will also
4200 be created on your planner page that you can select in order to return
4201 to the message.
4203 So, the created task will look something like this:
4205 @smallexample
4206 #A34 _ Send writing to publishme.com from
4207 [[gnus://alt.books.beatgeneration/<Ifo5c.24632$F9.9567@@nwrddc01.gnilink.net>][E-Mail
4208 from editor@@verizon.net]] @{@{Tasks:71@}@} ([[Writing]])
4209 @end smallexample
4211 This module also binds @kbd{C-c C-t} in the Gnus summary and article
4212 views to the command to create a new task.
4214 @file{planner-gnus.el} does not define any interactive functions.
4216 For more information about Gnus, see @inforef{Top, The Gnus Newsreader,
4217 gnus}.
4219 @node VM, Wanderlust, Gnus, E-mail
4220 @comment  node-name,  next,  previous,  up
4221 @subsection VM
4222 @cindex VM, using Planner with
4223 @cindex mail client, using Planner with, VM
4224 @cindex @file{planner-vm.el}, using
4226 To use this module, make sure that @file{planner-vm.el} is in your load
4227 path and add this to your @file{.emacs} (or @file{_emacs}):
4229 @example
4230 (require 'planner-vm)
4231 @end example
4233 VM URLs are of the form:
4235 @example
4236 vm://path/to/inbox/message-id
4237 @end example
4239 Annotations will be of the form:
4241 @smallexample
4242 [[vm://home/test/INBOX/<E1AyTpt-0000JR-LU@@sacha.ateneo.edu>][E-mail from Sacha Chua]]
4243 @end smallexample
4245 @file{planner-vm.el} does not define any interactive functions or
4246 keybindings.
4249 @node Wanderlust, MH-E, VM, E-mail
4250 @comment  node-name,  next,  previous,  up
4251 @subsection Wanderlust
4252 @cindex Wanderlust, using Planner with
4253 @cindex mail client, using Planner with, Wanderlust
4254 @cindex @file{planner-wl.el}, using
4256 To use this module, make sure that @file{planner-wl.el} is in your
4257 load path and add this to your @file{.emacs} (or @file{_emacs}):
4259 @example
4260 (require 'planner-wl)
4261 @end example
4263 Then, when you call @kbd{M-x planner-create-task-from-buffer} from
4264 Wanderlust summary or message buffers, the task will be created with
4265 the correct annotation.
4267 @file{planner-wl} does not define any interactive functions.
4269 @subheading Keys
4271 To add keybindings to Wanderlust, call:
4273 @example
4274 (planner-wl-insinuate)
4275 @end example
4277 This binds @kbd{F} to @command{planner-create-task-from-buffer}.
4279 @node MH-E, Rmail, Wanderlust, E-mail
4280 @comment  node-name,  next,  previous,  up
4281 @subsection MH-E
4282 @cindex MH-E, using Planner with
4283 @cindex mail client, using Planner with, MH-E
4284 @cindex @file{planner-mhe.el}, using
4286 To use this module, make sure that @file{planner-mhe.el} is in your
4287 load path and add this to your @file{.emacs} (or @file{_emacs}):
4289 @example
4290 (require 'planner-mhe)
4291 @end example
4293 Then, when you call @kbd{M-x planner-create-task-from-buffer} from
4294 MH-E summary or message buffers, the task will be created with
4295 the correct annotation.
4297 @file{planner-mhe} does not define any interactive functions.
4299 @node Rmail,  , MH-E, E-mail
4300 @comment  node-name,  next,  previous,  up
4301 @subsection Rmail
4302 @cindex Rmail, using Planner with
4303 @cindex mail client, using Planner with, Rmail
4304 @cindex @file{planner-rmail.el}, using
4306 To use this module, make sure that @file{planner-rmail.el} is in your
4307 load path and add this to your @file{.emacs} (or @file{_emacs}):
4309 @example
4310 (require 'planner-rmail)
4311 @end example
4313 Rmail URLs are of the form:
4315 @example
4316 rmail://message-id
4317 @end example
4319 Annotations will be of the form:
4321 @smallexample
4322 [[rmail://<E1AyTpt-0000JR-LU@@sacha.ateneo.edu>][E-mail from Sacha Chua]]
4323 @end smallexample
4325 @file{planner-rmail.el} does not define any interactive functions or
4326 create any new keybindings.
4328 For more information about Rmail, see @inforef{Rmail, Reading Mail With
4329 Rmail, Emacs}.
4331 @node Scheduling and Time, Finances, E-mail, Managing Your Information
4332 @comment  node-name,  next,  previous,  up
4333 @section Scheduling and Time
4335 @menu
4336 * Diary::                       Using the Emacs diary: planner-diary.el
4337 * Appointments::                Appointments in plan pages: planner-appt.el
4338 * Timeclock::                   Time tracking: planner-timeclock.el
4339 * schedule.el::                 Project completion: planner-schedule.el
4340 @end menu
4343 @node Diary, Appointments, Scheduling and Time, Scheduling and Time
4344 @comment  node-name,  next,  previous,  up
4345 @subsection Diary
4346 @cindex diary, using Planner with
4347 @cindex @file{planner-diary.el}, using
4349 If you use Emacs's diary feature, Planner-Diary could be helpful for
4350 you. It puts all diary entries for the current day in the @samp{*
4351 Diary} section of your day plan page. This section is updated every
4352 time you display the file in Emacs. By default the diary section of
4353 past pages is not updated; it's pretty unlikely that you want to add
4354 new diary entries for the past. (@pxref{Diary, , , Emacs, GNU Emacs
4355 Manual})
4357 If you want to use @file{planner-diary.el}, make sure the file is in
4358 your load path and add this to your @file{.emacs} (or @file{_emacs}):
4360 @example
4361 (require 'planner-diary)
4362 @end example
4364 @file{planner-diary.el} needs @command{fancy-diary-display}.  To use
4365 @command{fancy-diary-display}, add this to your @file{.emacs} (or
4366 @file{_emacs}):
4368 @example
4369 (add-hook 'diary-display-hook 'fancy-diary-display)
4370 @end example
4372 You can use Planner-Diary in two different ways:
4374 @enumerate
4376 @item
4377 If you want the saved files to contain your entries and not just a line
4378 of Lisp, add the following lines to your @file{.emacs} (or @file{_emacs}):
4380 @example
4381 (setq planner-diary-use-diary t)
4382 (planner-diary-insinuate)
4383 @end example
4385 You should also customize or set @code{planner-day-page-template} to
4386 include a @samp{* Diary}:
4388 @example
4389 (setq planner-day-page-template
4390  "* Tasks\n\n\n* Schedule\n\n\n* Diary\n\n\n* Notes")
4391 @end example
4393 @item
4394 (GNU EMACS ONLY) You can put the following line of Lisp code in your
4395 day plan pages to display your diary entries:
4397 @example
4398 <lisp>(planner-diary-entries-here)</lisp>
4399 @end example
4401 You can do this automatically for all day plan pages:
4403 @smallexample
4404 (setq planner-day-page-template
4405   "* Tasks\n\n\n* Diary\n\n<lisp>(planner-diary-entries-here)</lisp>
4406 \n* Notes")
4407 @end smallexample
4409 When you open a day plan page outside Emacs, you will see the line of
4410 Lisp code and not your diary entries.
4412 @end enumerate
4414 If you want to see your diary entries for more than just one day, set
4415 @code{planner-diary-number-of-days} accordingly.  This works for either
4416 of the two approaches.
4418 @kbd{C-c C-e} updates the diary sections.  @kbd{C-u C-c C-e} forces an
4419 update---it inserts the diary section for the day, even if the day is in
4420 the past or if there is no @samp{Diary} section in the buffer.
4422 If you want to use the Cal-Desk package, simply follow the instructions
4423 in @file{cal-desk.el}.  If you get the Cal-Desk layout from the Calendar
4424 buffer, you get it in the day plan buffer, too.
4426 If you use Planner-Diary, you might consider using the Calendar support
4427 of Planner. (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}) To get
4428 Calendar integration, add this to your @file{.emacs} (or @file{_emacs}):
4430 @example
4431 (planner-insinuate-calendar)
4432 @end example
4434 If @code{planner-diary-create-section-flag} is non-nil, sections are
4435 always inserted if necessary.
4437 @cindex planner2diary.py, using
4438 If you want to import Planner entries into your Diary file, the
4439 @file{planner2diary.py} script will accomplish this for you.  To use it,
4440 execute @code{planner2diary.py} on the command line, specifying your
4441 planner directory as the first and only argument.
4443 @subheading Options
4445 @defopt planner-diary-create-section-flag
4446 Non-nil means create the requested diary sections if they do not
4447 exist. By default, planner-diary tries to create the section. If you
4448 want more control over your pages, you can set this to nil. Trying to
4449 write a diary section to a page that does not have it yet will then
4450 result in an error.
4451 @end defopt
4453 By default, planner-diary lists only the appointments you have on that
4454 day. If you want the date headers included even when showing the diary
4455 entries for a single day, set planner-diary-include-all-output to
4456 non-nil.
4458 @defopt planner-diary-include-all-output-flag
4459 Non-nil means don't omit any data when copying diary entries into day
4460 pages.
4461 @end defopt
4463 @subheading Functions
4465 @file{planner-diary.el} defines the following interactive functions:
4467 @defun planner-diary-add-entry date time text
4468 Prompt for a diary entry to add to @code{diary-file} on @var{date}.
4469 Uses @code{planner-annotation-functions} to make hyperlinks.
4470 @var{time} and @var{text} are used in the description."
4471 @end defun
4473 @defun planner-diary-insert-diary force
4474 Insert the fancy diary for the day into the day plan file. If
4475 @var{force} is non-nil, insert a diary section even if there is no
4476 @var{planner-diary-string} in the buffer.
4477 @end defun
4479 @defun planner-diary-insert-diary-maybe force
4480 Maybe insert the fancy diary for the day into the day plan file. If the
4481 current day is in the past and @var{force} is nil, don't do anything. If
4482 @var{force} is non-nil, insert a diary section even if there is no
4483 @code{planner-diary-string} in the buffer.
4484 @end defun
4486 @defun planner-diary-insert-appts force
4487 Insert the diary appointments for the day into the day plan file.  If
4488 @var{force} is non-nil, insert a diary appointments section even if
4489 there is no @code{planner-diary-appts-string} in the buffer.
4490 @end defun
4492 @defun planner-diary-insert-appts-maybe force
4493 Maybe insert the diary appointments for the day into the day plan file.
4494 If the current day is in the past and @var{force} is nil, don't do
4495 anything.  If @var{force} is non-nil, insert a diary appointments
4496 section even if there is no @code{planner-diary-appts-string} in the
4497 buffer.
4498 @end defun
4500 @defun planner-diary-insert-cal-desk force
4501 Insert the cal-desk diary for the day into the day plan file.  If
4502 @var{force} is non-nil, insert a cal-desk diary section even if there is
4503 no @code{planner-diary-cal-desk-string} in the buffer.
4504 @end defun
4506 @defun planner-diary-insert-cal-desk-maybe force
4507 Maybe insert the cal-desk diary for the day into the day plan file.  If
4508 the current day is in the past and @var{force} is nil, don't do
4509 anything.  If @var{force} is non-nil, insert a cal-desk appointments
4510 section even if there is no @code{planner-diary-cal-desk-string} in the
4511 buffer.
4512 @end defun
4514 @defun planner-diary-insert-public force
4515 Insert the public diary for the day into the day plan file.  If
4516 @var{force} is non-nil, insert a public diary section even if there is
4517 no @code{planner-diary-public-string} in the buffer.
4518 @end defun
4520 @defun planner-diary-insert-public-maybe force
4521 Maybe insert the public diary for the day into the day plan file.  If
4522 the current day is in the past and @var{force} is nil, don't do
4523 anything.  If @var{force} is non-nil, insert a public appointments
4524 section even if there is no @code{planner-diary-public-string} in the
4525 buffer.
4526 @end defun
4528 @defun planner-diary-insert-private force
4529 Insert the private diary for the day into the day plan file.  If
4530 @var{force} is non-nil, insert a private diary section even if there is
4531 no @code{planner-diary-private-string} in the buffer.
4532 @end defun
4534 @defun planner-diary-insert-private-maybe force
4535 Maybe insert the private diary for the day into the day plan file.  If
4536 the current day is in the past and @var{force} is nil, don't do
4537 anything.  If @var{force} is non-nil, insert a private appointments
4538 section even if there is no @code{planner-diary-private-string} in the
4539 buffer.
4540 @end defun
4542 @defun planner-diary-insert-all-diaries force
4543 Update all diary sections in a day plan file.  If @var{force} is
4544 non-nil, insert a diary section even if there is no section header.  It
4545 only inserts diaries if the corresponding @code{planner-diary-use-}*
4546 variable is @samp{t}.
4547 @end defun
4549 @defun planner-diary-insert-all-diaries-maybe force
4550 Update all diary sections in a day plan file.  If the current day is in
4551 the past and @var{force} is nil, don't do anything.  If @var{force} is
4552 non-nil, insert a diary section even if there is no section header.  It
4553 only inserts diaries if the corresponding @code{planner-diary-use-}*
4554 variable is @samp{t}.
4555 @end defun
4557 @defun planner-diary-show-day-plan-or-diary
4558 Show the day plan or diary entries for the date under point in calendar.
4559 Add this to @code{calendar-move-hook} if you want to use it.  In that
4560 case, you should also @command{remove-hook} @samp{planner-calendar-show}
4561 from @code{calendar-move-hook}.
4562 @end defun
4564 @subheading Keys
4566 @file{planner-diary.el} adds the following keybinding to Planner, if
4567 @command{planner-diary-insinuate} is in your @file{.emacs} (or
4568 @file{_emacs}):
4570 @itemize
4572 @item
4573 @kbd{C-c C-e} updates the diary sections.
4575 @end itemize
4577 @menu
4578 * Planner-Diary Advanced Features::  
4579 @end menu
4581 @node Planner-Diary Advanced Features,  , Diary, Diary
4582 @comment  node-name,  next,  previous,  up
4583 @subsubsection Planner-Diary Advanced Features
4584 @cindex diary, using Planner with
4585 @cindex @file{planner-diary.el}, advanced features
4587 The features described here are part of the development version.  They
4588 are subject to change without notice.  They may be buggy.  The
4589 documentation may be inaccurate.  Use at your own risk.
4591 There is a lot of code redundancy in the development version.  This is
4592 intentional and makes it easier to change the code for one type of diary
4593 section without breaking others.
4595 @subheading Diary views
4597 @cindex @file{planner-diary.el}, views
4598 Currently Planner-Diary supports six different views of your diary
4599 entries:
4601 @enumerate
4602 @item
4603 Ordinary fancy diary display (what you get by pressing @kbd{d} in the
4604 calendar buffer with @code{fancy-diary-display} switched on)
4606 @item
4607 Schedule/Appointments (all entries from 1 that have a time assigned to
4608 them
4610 @item
4611 Diary without appts (1 without 2)
4613 @item
4614 cal-desk display (appts on top, non appts entries at bottom)
4616 @item
4617 A private diary (same as 1, but uses a different diary-file)
4619 @item
4620 A public diary (same as 1, but uses a different diary-file)
4621 @end enumerate
4623 Put the following line of Lisp code in your day plan pages to display
4624 your diary entries:
4626 @example
4627 <lisp>(planner-diary-entries-here)</lisp>
4628 @end example
4630 The function @code{planner-diary-entries-here} takes two optional
4631 arguments---the diary file you want to use and the number of days you
4632 want to display.
4634 @subheading Exporting Planner-specific Diary files
4636 @cindex @file{planner-diary.el}, exporting entries
4637 If you would like to export diary entries from your Planner pages to
4638 separate Diary files, add @code{(require 'planner-export-diary)} to your
4639 config.  The following steps describe the usage of the functions and
4640 options contained in this file.
4642 @enumerate
4644 @item
4645 Customize @code{planner-export-diary-file}.  The default value is
4646 ``~/diary.planner''.
4648 @item
4649 Add the following line to your main Diary file (default: ``~/diary'').
4651 @example
4652 #include ~/diary.planner
4653 @end example
4655 @item
4656 Then, call @command{M-x planner-export-diary-future} whenever you want
4657 future diary entries published. You can automatically publish entries by
4658 adding either of the following to your .emacs.
4660 @itemize
4662 @item (planner-export-diary-future)
4663 Publish future entries on startup.
4665 @item (add-hook 'planner-mode-hook 'planner-export-diary-setup)
4666 Publish future entries whenever you save a Planner file.
4668 @end itemize
4670 @end enumerate
4672 @node Appointments, Timeclock, Diary, Scheduling and Time
4673 @comment  node-name,  next,  previous,  up
4674 @subsection Appointments
4675 @cindex appointments
4676 @cindex @file{planner-appt.el}, using
4678 If you would like to use planner for your appointment alerts
4679 instead of using the diary system, you might like to try
4680 @file{planner-appt}.
4682 According to your preferences, you may choose from two different
4683 approaches. Appointments in task descriptions on today's plan
4684 page are like this:
4686 @example
4687 #A   _ @@12:45 Do something (TaskPool)
4688 @end example
4690 @noindent
4691 and appointments in today's schedule section are like this:
4693 @example
4694 * Schedule
4696   9:00 | 12:00 | Read Simmel's Philosophy of Money
4697 @@12:45 |       | Do Something Else
4698 @@13:00 | 14:00 | lunch
4699 @end example
4701 @noindent
4702 You can even use both at the same time if you like.
4704 @c Jim Ottaway <j.ottaway@lse.ac.uk>: Changed these kinds of heading
4705 @c back to @unnumberedsec, but left the originals commented out in
4706 @c case there was a good reason for the @strong formatting.
4708 @c @noindent
4709 @c @strong{Usage}
4710 @unnumberedsubsubsec Usage
4712 In the file where you configure Planner, add one of the following.
4714 @itemize
4715 @item
4716 For task-based appointments: @code{(planner-appt-use-tasks)}
4717 @item
4718 For schedule-based appointments: @code{(planner-appt-use-schedule)}
4719 @item
4720 For both task- and schedule-based appointments:
4721 @code{(planner-appt-use-tasks-and-schedule)}
4722 @end itemize
4724 @noindent
4725 And finally if you want everything to be updated automatically add:
4727 @example
4728 (planner-appt-insinuate)
4729 @end example
4731 If you don't want to do the insinuation then you can call:
4733 @example
4734 M-x planner-appt-update
4735 @end example
4737 @noindent
4738 after editing appointments on the page (note that this is not
4739 necessary if you use tasks for the appointments and you don't edit
4740 the task descriptions outside of @code{planner-edit-task-description}).
4742 Try both methods; if you find that you prefer one over the
4743 other, use one of the specific @code{planner-appt-use-} functions, as
4744 there are some performance gains when using one method exclusively.
4746 @menu
4747 * Task-based Appointments::     
4748 * Schedule-based Appointments::  
4749 * Viewing Appointments::        
4750 * Appointment Updating on Save::  
4751 * Appointment and Calendar Integration::  
4752 * Appointment Hooks::           
4753 @end menu
4756 @node Task-based Appointments, Schedule-based Appointments, Appointments, Appointments
4757 @comment  node-name,  next,  previous,  up
4758 @subsubsection Task-based Appointments
4759 @cindex appointments, task-based
4760 @cindex task-based appointments
4762 A task has an appointment if it looks like this:
4764 @example
4765 #A   _ @@12:45 Do something (TaskPool)
4766 @end example
4768 @noindent
4769 i.e., if it has @@ followed by a time at the beginning.  This means
4770 the task is a regular appointment, and will not be carried forward
4771 at the start of a new day.
4773 Alternatively, it may have a !, like this:
4775 @example
4776 #A   _ !12:45 Do something else (TaskPool)
4777 @end example
4779 @noindent
4780 This makes it a "nagging" appointment, which @emph{will} be carried
4781 forward.  It will, however, lose the appointment time in the
4782 process.
4784 This may seem like a strange feature, but here is Henrik's
4785 reasoning:
4787 @quotation
4788 Sometimes I have a task that I want to do at a certain time, so I
4789 make it an appointment.  If I don't get around to doing it anyway,
4790 I want it to be carried forward.  Basically, I sometimes use
4791 appointments on tasks to annoy me until I get them done. :)
4792 @end quotation
4794 You can edit, move and delete tasks with the usual functions, and
4795 appointments will be updated automatically.
4797 You can update all task appointments on your page with
4799 @example
4800 M-x planner-appt-update
4801 @end example
4803 @c @noindent
4804 @c @strong{Cyclic Entries}
4806 @unnumberedsubsubsec Cyclic Entries
4807 @cindex appointments, cyclic task entries
4809 If you have @file{planner-cyclic} (@pxref{Cyclic Tasks}) loaded, entries
4810 in your cyclical tasks file such as
4812 @example
4813 Friday #A _ @@12:45 staff meeting
4814 @end example
4816 @noindent
4817 will appear every Friday and there will be an appointment alert set
4820 @c @noindent
4821 @c @strong{Appointments Section}
4822 @unnumberedsubsubsec Appointments Section
4823 @cindex appointments, appointments section
4825 You can have all task-based appointments copied to a separate section,
4826 providing an overview of your appointments.
4828 To do this, add
4830 @example
4831 (setq planner-appt-task-use-appointments-section-flag t)
4832 @end example
4834 @noindent to your configuration, or use @kbd{M-x customize-variable}.
4836 The variable @code{planner-appt-task-appointments-section} is the name
4837 of the section where the appointments will be copied.  By default, it is
4838 set to @code{"Schedule"}, which means that task appointments will be
4839 intermingled with schedule entries.
4841 It is also a good idea to add the section you wish to use to
4842 @code{planner-day-page-template} in order to control where that section
4843 will appear on the page (otherwise it will appear at the top).
4845 The format of the appointments follows that of a schedule; if you
4846 don't like the way it looks, you can write something different and set
4847 @code{planner-appt-format-appt-section-line-function} appropriately.
4848 See the documentation for
4849 @code{planner-appt-format-appt-section-line-function} for details.  It
4850 should be fairly easy to see what needs to be done if you look at the
4851 source for the default function (which is
4852 @code{planner-appt-format-appt-section-line}).
4854 If the section specified in
4855 @code{planner-appt-task-appointments-section} is the same as the
4856 schedule section specified in @code{planner-appt-schedule-section} (by
4857 default @code{"Schedule"}), the default formatting function adds a
4858 @samp{#} to the description so that one can visually distinguish
4859 appointments from the task list from those that have been added to the
4860 schedule.
4862 @node Schedule-based Appointments, Viewing Appointments, Task-based Appointments, Appointments
4863 @comment node-name,  next,  previous,  up
4864 @subsubsection Schedule-Based Appointments
4865 @cindex appointments, schedule-based
4866 @cindex schedule-based appointments
4868 Some scheduled tasks require reminders, others don't.  In this
4869 schedule:
4871 @example
4872 * Schedule
4874 9:00   | 12:00 | Read Simmel's Philosophy of Money
4875 @@12:45          Do Something Else
4876 @@13:00 | 14:00 | lunch
4877 @@14:30 |       | Meet jrs to discuss his dissertation
4878 @@16:00           Test Society seminar
4879 18:00            go home
4880 @end example
4882 @noindent
4883 those that have an @@ prefix will be added to the appointment
4884 reminder list; the others will not.  The formats that are
4885 recognized are fairly flexible, as you can see from the example.
4887 If you change your schedule, you can update the appointment list
4888 with
4890 @example
4891 M-x planner-appt-update
4892 @end example
4894 @noindent You can also have the schedule sorted as part of the update,
4895 if you have this in your configuration:
4897 @example
4898 (setq planner-appt-sort-schedule-on-update-flag t)
4899 @end example
4901 @c @noindent 
4902 @c @strong{Cyclical Entries}
4903 @unnumberedsubsubsec Cyclical Entries
4904 @cindex appointments, cyclic schedule entries
4906 You can also have cyclical schedule entries(@pxref{Cyclic Tasks}) if you
4909 @example
4910 (planner-appt-schedule-cyclic-insinuate)
4911 @end example
4913 @noindent to your configuration.
4915 If you put an entry in your cyclical task file like this
4917 @example
4918 Friday @@12:45 | 13:45 | Staff Meeting
4919 @end example
4921 @noindent
4922 then it will appear in your schedule every Friday, and an
4923 appointment alert will be set up.
4925 @node Viewing Appointments, Appointment Updating on Save, Schedule-based Appointments, Appointments
4926 @comment  node-name,  next,  previous,  up
4927 @subsubsection Viewing Appointments
4928 @cindex appointments, viewing
4930 The command @command{planner-appt-show-alerts} will show all appointment
4931 alerts currently scheduled.
4933 @subheading Functions
4935 There are two commands that show appointments in the future; the one
4936 displays them in a pop-up buffer, the other puts the information into
4937 the current day page.
4939 @deffn {Command} planner-appt-forthcoming-display &optional days
4940 Display a buffer of appointments for today and the next
4941 @var{days}. Optional prefix argument @var{days} is the number of days
4942 ahead to look. Its default value is defined by
4943 @code{planner-appt-forthcoming-days}.
4944 @end deffn
4946 @deffn {Command} planner-appt-forthcoming-update-section &optional days
4947 In today's plan page, add or update a list of forthcoming
4948 appointments. Optional prefix argument @var{days} is the number of
4949 days ahead to look. Its default value is defined by
4950 @code{planner-appt-forthcoming-days}.  The section heading to use is
4951 defined by @code{planner-appt-forthcoming-appt-section}.
4952 @end deffn
4954 @subheading Options
4956 @defopt planner-appt-forthcoming-days
4957 The number of days to look ahead for forthcoming appointments.  The
4958 default value is seven days.
4959 @end defopt
4961 @defopt planner-appt-forthcoming-appt-section
4962 The name of the section to use for inserting a list of forthcoming
4963 appts.  The default value is @code{"Forthcoming Appointments"}.
4964 @end defopt
4966 @defopt planner-appt-forthcoming-show-day-names-flag
4967 When non-nil (the default), day names will be shown in forthcoming
4968 appointments.
4969 @end defopt
4971 @defopt planner-appt-forthcoming-repeat-date-string
4972 String to insert for repeated dates.
4974 When there are multiple appointments for a date, the date is inserted
4975 in the first appointment and the others have this string in their date
4976 cell.
4978 If the string consists of anything other than whitespace, then a link
4979 to the day page for the appoinment is created.
4980 @end defopt
4982 @defopt planner-appt-forthcoming-look-at-cyclic-flag
4983 When non-nil, find forthcoming appointments in the cyclic diary file
4984 (@pxref{Cyclic Tasks}) as well as in plan pages. Default is @samp{t}.
4985 @end defopt
4987 @node Appointment Updating on Save, Appointment and Calendar Integration, Viewing Appointments, Appointments
4988 @comment  node-name,  next,  previous,  up
4989 @subsubsection Appointment Updating on Save
4990 @cindex appointments, updating on save
4992 @subheading Options
4994 @defopt planner-appt-update-appts-on-save-flag
4995 When non-nil, update appointment reminders whenever today's plan page is
4996 saved. Default value is @samp{nil}.
4997 @end defopt
4999 @node Appointment and Calendar Integration, Appointment Hooks, Appointment Updating on Save, Appointments
5000 @comment  node-name,  next,  previous,  up
5001 @subsubsection Appointment and Calendar Integration
5003 Not strictly part of appointment handling, but if one isn't using
5004 the diary, marking dates with plan pages seems to make sense.
5006 @subheading Functions
5008 @defun planner-appt-calendar-insinuate
5009 Add a hook to diary display so that dates in the calendar that have day
5010 pages are highlighted
5011 @end defun
5013 @node Appointment Hooks,  , Appointment and Calendar Integration, Appointments
5014 @comment  node-name,  next,  previous,  up
5015 @subsubsection Appointment Hooks
5017 @subheading Options
5019 @defvr {Hook} planner-appt-update-hook
5020 Hook run after @code{planner-appt-update} has updated the appointment
5021 list.
5022 @end defvr
5024 @node Timeclock, schedule.el, Appointments, Scheduling and Time
5025 @comment  node-name,  next,  previous,  up
5026 @subsection Timeclock
5027 @cindex @file{planner-timeclock.el}, using
5028 @cindex @file{planner-timeclock-summary.el}, using
5029 @cindex @file{planner-timeclock-summary-proj.el}, using
5030 @cindex timeclock, using Planner with
5032 This module allows you to clock in and clock out of your projects
5033 (@pxref{Time Intervals, , , Emacs, GNU Emacs Manual}). You can also
5034 generate reports with the @code{<timeclock-report>} tag. You may want
5035 to read the @ref{Keeping Track of Time} page to see how you can use
5036 planner-timeclock to produce detailed reports.
5038 @file{timeclock.el} is part of GNU Emacs.  If you are using XEmacs,
5039 please use the version of @file{timeclock.el} the comes with Planner in
5040 the @file{contrib} directory.
5042 With @file{planner-timeclock.el} loaded,
5043 @command{planner-task-in-progress} clocks in a task.  To clock out,
5044 use @command{planner-task-done} or @command{timeclock-out}.
5046 @file{planner-timeclock.el} defines the following keybindings:
5048 @itemize
5049 @item @kbd{C-c C-i}: @code{planner-task-in-progress}.
5050 @item @kbd{C-c C-o}: @code{timeclock-out}.
5051 @item @kbd{C-c C-T C-i}: @code{planner-timeclock-in}. (XEmacs)
5052 @item @kbd{C-c C-T C-o}: @code{timeclock-out}. (XEmacs)
5053 @item @kbd{C-c C-S-t C-i}: @code{planner-timeclock-in}. (GNU Emacs)
5054 @item @kbd{C-c C-S-t C-o}: @code{timeclock-out}. (GNU Emacs)
5055 @end itemize
5057 If you use @code{timeclock} a lot, you may also be interested in
5058 Dryice Liu's @file{planner-timeclock-summary.el}, which produces
5059 timeclock reports for planner files.
5061 Here is a sample report:
5063 @example
5064 Project               |     Time| Ratio| Task
5065 PlannerMaintenance    |  0:03:58|  1.1%| Merge doc patch
5066                       |  0:17:09|  5.0%| Track down subdirectories
5067                       |  0:18:11|  5.3%| Merge planner-timeclock-summary-proj.el
5068                Total: |  0:39:18| 11.4%|
5069 JapanCaseStudy        |  2:37:56| 45.6%| Prototype search result page
5070                       |  0:31:50|  9.2%| Update design documents
5071                Total: |  3:09:46| 54.8%|
5072 ChristmasLetter       |  1:46:37| 30.8%| Write and send my Christmas letters
5073                Total: |  1:46:37| 30.8%|
5074 LinuxPeople           |  0:10:29|  3.0%| Send questions for Linux in Education
5075                Total: |  0:10:29|  3.0%|
5076 @end example
5078 If you add @code{(require 'planner-timeclock-summary)} to your
5079 @file{~/.emacs}, you can then use it in two ways.
5081 @itemize
5083 @item Display a temporary buffer
5085 Call @code{planner-timeclock-summary-show} and Emacs will ask you which
5086 day's summary do you want. Choose the date as anywhere else of
5087 Emacs planner, and a tempory buffer will be displayed with the
5088 timeclock summary of that day.
5090 To review tasks over a date range, use
5091 @code{planner-timeclock-summary-show-range}. You can use a regexp or a
5092 function to filter tasks by calling
5093 @code{planner-timeclock-summary-show-range-filter}.
5095 @item Rewrite sections of your planner
5097 Choose this approach if you want timeclock summary to be in their
5098 own section and you would like them to be readable in your plain
5099 text files even outside Emacs. Caveat: The timeclock summary
5100 section should already exist in your template and will be rewritten
5101 when updated. Tip: Add @code{planner-timeclock-summary-section}
5102 (default: @samp{"Timeclock"}) to your @code{planner-day-page-template}.
5104 To use, call @code{planner-timeclock-summary-update} in the planner
5105 day page to update the section. If you want rewriting to be
5106 automatically performed, call
5107 @code{planner-timeclock-summary-insinuate} in your @file{.emacs} file.
5108 @end itemize
5110 @file{planner-timeclock-summary-proj.el} produces task / time
5111 breakdowns on plan pages. Reports are of the form:
5113 @example
5114 TASK 0 | duration
5115 TASK 1 | duration
5116  TOTAL | duration.
5117 @end example
5119 To use, add @code{(require 'planner-timeclock-summary)} to your
5120 @file{~/.emacs}. Call @code{planner-timeclock-summary-proj-current}
5121 from a project page. The report is inserted at the current position in
5122 the buffer. The function @code{planner-timeclock-summary-proj-section}
5123 does the same but the report is inserted inside a section called
5124 @samp{* Report}.
5126 @node schedule.el,  , Timeclock, Scheduling and Time
5127 @comment  node-name,  next,  previous,  up
5128 @subsection @file{schedule.el}
5129 @cindex @file{planner-schedule.el}, using
5130 @cindex @file{schedule.el}, using Planner with
5132 @file{planner-schedule.el} allows you to project task completion time.
5133 Tasks should be of the form:
5135 @example
5136 #A0 _ 2h Do something
5137 #B0 _ 1h30m Do something
5138 #B0 _ 2d Do something
5139 #B0 _ 2w Do something
5140 #B0 _ 10s Do something
5142 s: seconds, m: minutes, h: hours, d: days, w: weeks
5143 @end example
5145 @file{schedule.el} is included with Planner in the @file{contrib}
5146 directory, but you can alternatively get it from
5147 @url{http://www.newartisans.com/johnw/Emacs/schedule.el} if desired.
5149 @file{schedule.el} provides a single Lisp function,
5150 @code{schedule-completion-time}. It takes an Emacs time object and a
5151 quantity of seconds. It returns an Emacs time object that represents
5152 when the given number of seconds will be completed, assuming that work
5153 can only be done during work hours.
5155 The available work hours are affected by several factors:
5157 @enumerate
5159 @item
5160 If @file{timeclock.el} is being used, the amount of time left in the
5161 current work day (@code{timeclock-workday-remaining})
5162 (@pxref{Time Intervals, , , Emacs, GNU Emacs Manual})
5164 @item
5165 The amount of time in each work day (@code{schedule-workday})
5167 @item
5168 The definition of a work week (@code{schedule-week})
5170 @item
5171 Any holidays defined in the Emacs calendar
5172 (@pxref{Holidays, , , Emacs, GNU Emacs Manual})
5174 @item
5175 Any appointments in the Emacs diary
5176 (@pxref{Appointments, , , Emacs, GNU Emacs Manual})
5178 @end enumerate
5180 Taking all of the ``block out'' periods into account,
5181 @code{schedule-completion-time} will compute when the given number of
5182 seconds will be done, based on your current definitions of time
5183 available.
5185 As an example, here's a function which, given a list of durations
5186 in seconds, will return a list of completion times starting from
5187 the current moment:
5189 @example
5191   (defun compute-completion-times (&rest durations)
5192     ``Compute completion times for a list of DURATIONS (in seconds).''
5193     (let ((now (current-time)))
5194       (mapcar
5195        (function
5196         (lambda (dura)
5197           (setq now (schedule-completion-time now dura))))
5198        durations)))
5200 @end example
5202 To call this function, do:
5204 @example
5206 (compute-completion-times 3600 7200 3600)
5208 @end example
5210 @subheading Keys
5212 @file{planner-schedule.el} defines the following keybindings:
5214 @kbd{C-c RET} is bound to @command{planner-schedule-show-end-project}.
5215 @kbd{C-c C-m} is also bound to
5216 @command{planner-schedule-show-end-project}.
5218 In XEmacs, @command{planner-schedule-show-end-project} is bound to
5219 @kbd{C-c C-T c-e} and @kbd{C-c C-S-t C-e}.
5221 @subheading Functions
5223 @file{planner-schedule.el} defines the following interactive
5224 functions:
5226 @defun planner-schedule-show-end-project
5227 Display the estimated project completion time.
5228 @end defun
5230 @file{schedule.el} does not define any interactive functions, or
5231 keybindings.
5233 @node Finances, Contacts and Conversations, Scheduling and Time, Managing Your Information
5234 @comment  node-name,  next,  previous,  up
5235 @section Finances
5236 @cindex finances
5238 Currently, Planner provides one module dedicated to tracking your
5239 finances. This module works with a program called Ledger.
5241 @menu
5242 * Ledger::                      Personal finances: planner-ledger.el
5243 @end menu
5245 @node Ledger,  , Finances, Finances
5246 @comment  node-name,  next,  previous,  up
5247 @subsection Ledger
5248 @cindex finances
5249 @cindex @file{planner-ledger.el}, using
5250 @cindex @file{ledger}, using Planner with
5252 @file{planner-ledger.el} provides integration between planner and John
5253 Wiegley's ledger accounting program, which can be found at
5254 @url{http://newartisans.com/johnw/ledger.tar.gz}.
5256 To use planner-ledger to insert a ledger balance overview and a list
5257 of pending transactions into planner day pages, make sure that your
5258 day page includes sections that match
5259 @code{planner-ledger-balance-regexp} and
5260 @code{planner-ledger-pending-regexp}. Example:
5262 @example
5263 * Tasks
5265 * Ledger
5267 ** Pending transactions
5269 * Notes
5271 @end example
5273 You can manually update ledger sections with the
5274 @command{planner-ledger-insert-maybe} command.
5276 You can also automatically update ledger sections with the following
5277 hook:
5279 @example
5280 (add-hook 'planner-goto-hook 'planner-ledger-insert-maybe)
5281 @end example
5283 You can create ledger entries from specially-formatted tasks using
5284 @command{planner-ledger-add-entry-from-task}.  Tasks should be of the
5285 form @samp{payment due: payee, amount [comment]}.  Example:
5287 @example
5288 #A1 _ payment due: foobar, $1000.00 some comment here
5289 #A2 _ payment due: baz, 1000.00
5290 @end example
5292 @subheading Options
5294 @defopt planner-ledger-balance-accounts
5295 List of accounts to be included or excluded from the balance overview.
5296 @samp{+} includes all matching accounts, and @samp{-} excludes
5297 matching accounts.  See the documentation for
5298 @command{ledger-run-ledger} for more details.
5299 @end defopt
5301 @defopt planner-ledger-balance-regexp
5302 Regular expression matching section for ledger balance.  Do not store
5303 other data in this section, as it will be overwritten.
5304 @end defopt
5306 @defopt planner-ledger-pending-regexp
5307 Regular expression matching section for ledger balance.  Do not store
5308 other data in this section, as it will be overwritten.
5309 @end defopt
5311 @defopt planner-ledger-payment-task-regexp
5312 Regular expression matching special ledger tasks.
5313 @end defopt
5315 @subheading Functions
5317 @defun planner-ledger-insert-maybe
5318 Update any ledger sections on the current page.
5319 @end defun
5321 @defun planner-ledger-add-entry-from-task
5322 Create a ledger entry based on the task at point.  Task should match
5323 @code{planner-ledger-payment-task-regexp}.
5324 @end defun
5326 @node Contacts and Conversations, Tracking Research and Resources, Finances, Managing Your Information
5327 @comment  node-name,  next,  previous,  up
5328 @section Contacts and Conversations
5329 @cindex contacts
5330 @cindex conversations
5332 Planner has two modules available for keeping track of contact and
5333 conversation information. The first uses the Big Brother Database
5334 (BBDB), and the second uses Emacs Relay Chat (ERC). BBDB is a full
5335 contact database. ERC is a client for chatting online on Internet Relay
5336 Chat (IRC) networks. The ERC module for Planner will help you keep
5337 track of online conversations you have if you use ERC for those
5338 conversations, but does not by itself store contact information other
5339 than the time you had the conversation, the network and channel you were
5340 on when you had it, and maybe who you had it with. If you are looking
5341 for a way to manage your full address book, then @file{planner-bbdb.el}
5342 in combination with BBDB is what you are looking for.
5344 @menu
5345 * BBDB::                        Contacts: planner-bbdb.el
5346 * Emacs Relay Chat::            Internet Relay Chat: planner-erc.el
5347 @end menu
5349 @node BBDB, Emacs Relay Chat, Contacts and Conversations, Contacts and Conversations
5350 @comment  node-name,  next,  previous,  up
5351 @subsection BBDB
5352 @cindex @file{planner-bbdb.el}, using
5353 @cindex BBDB, using Planner with
5355 @file{planner-bbdb.el} allows you to refer to your contacts easily
5356 from within a planner page. @inforef{Top, the BBDB Manual, bbdb}.
5358 @samp{[[bbdb://Sacha.*Chua][Sacha]]}, for example, will be linked to
5359 the blog, web or net fields of the first matching BBDB record.
5361 @file{planner-bbdb.el} does not define any interactive functions, or
5362 keybindings.
5364 @node Emacs Relay Chat,  , BBDB, Contacts and Conversations
5365 @comment  node-name,  next,  previous,  up
5366 @subsection Emacs Relay Chat
5367 @cindex @file{planner-erc.el}, using
5368 @cindex ERC, using Planner with
5369 @cindex Emacs Relay Chat, using Planner with
5370 @cindex IRC, using Planner with
5371 @cindex Internet Relay Chat, using Planner with
5373 To use planner-erc, place @file{planner-erc.el} in your load path
5374 and add this to your @file{.emacs} (or @file{_emacs}):
5376 @example
5378 (require 'planner-erc)
5380 @end example
5382 IRC URLs may be of the following forms.
5384 @example
5385 irc://server/nick,isnick
5386 irc://server/#channel
5387 irc://server
5388 @end example
5390 Annotations will be in the following forms.
5392 @example
5393 [[irc://server/nick,isnick][Chat with nick on server#channel]]
5394 [[irc://server/nick,isnick][Chat with nick on server]]
5395 [[irc://server/#channel][Chat on server#channel]]
5396 [[irc://server][Chat on server]]
5397 @end example
5399 @file{planner-erc.el} does not define any interactive functions, or
5400 keybindings.
5402 @node Tracking Research and Resources, Tracking Development, Contacts and Conversations, Managing Your Information
5403 @comment  node-name,  next,  previous,  up
5404 @section Tracking Research and Resources
5406 Planner provides three modules for keeping track of information
5407 involving three specific tools: w3m, BibTeX, and @file{bookmark.el}.
5409 @menu
5410 * W3m::                         Web browser: planner-w3m.el
5411 * BibTeX::                      Bibliographies: planner-bibtex.el
5412 * Bookmark::                    Bookmarks: planner-bookmark.el
5413 @end menu
5415 @node W3m, BibTeX, Tracking Research and Resources, Tracking Research and Resources
5416 @comment node-name,  next,  previous,  up
5417 @subsection W3m
5418 @cindex @file{planner-w3m.el}, using
5419 @cindex w3m, using Planner with
5421 This module allows you to create tasks from a w3m buffer.
5423 @file{planner-w3m.el} does not define any interactive functions, or
5424 keybindings.
5426 @node BibTeX, Bookmark, W3m, Tracking Research and Resources
5427 @comment node-name,  next,  previous,  up
5428 @subsection BibTeX
5429 @cindex @file{planner-bibtex.el}, using
5431 BibTeX URLs are of the form @samp{bibtex:file/name:key}.
5433 @file{planner-bibtex.el} does not define any interactive functions.
5435 @node Bookmark,  , BibTeX, Tracking Research and Resources
5436 @comment  node-name,  next,  previous,  up
5437 @subsection Bookmark
5438 @cindex bookmarks
5439 @cindex @file{bookmark.el}, using Planner with
5440 @cindex @file{planner-bookmark.el}, using
5442 @file{planner-bookmark.el} uses the @file{remember} package to create a
5443 note whenever you create a bookmark (see @inforef{Bookmarks, Bookmarks,
5444 Emacs}). For more information about @file{remember}, please check out
5446 @itemize
5447 @item
5448 @uref{http://www.emacswiki.org/cgi-bin/wiki/RememberMode} -
5449 EmacsWiki.org page
5450 @item
5451 @uref{http://sacha.free.net.ph/notebook/doc/dev/remember/remember.html}
5452 - Online info documentation
5453 @end itemize
5455 Configure remember according to the instructions in
5456 @file{remember-planner.el} so that notes are saved to your planner
5457 pages.
5459 @defopt planner-bookmark-take-note-after-set-bookmark-flag
5460 Non-nil means show a @code{remember} buffer after setting a new
5461 bookmark.
5462 @end defopt
5464 When you create a bookmark, Emacs will open a buffer for your notes.
5465 @kbd{C-c C-c} saves the buffer to today's page. If you don't want to
5466 save a note, you can kill the buffer.
5468 Bookmark URLs are of the form @samp{bookmark://bookmark-name}.
5470 @file{planner-bookmark.el} does not define any interactive functions.
5472 @node Tracking Development,  , Tracking Research and Resources, Managing Your Information
5473 @comment  node-name,  next,  previous,  up
5474 @section Tracking Development
5475 @cindex version control, using Planner with
5477 Planner has three modules geared toward programmers. Two modules deal
5478 with version control and integrating information from those projects
5479 into the planner page. One module deals with the Gnats bug-tracking
5480 system.
5482 @menu
5483 * Log Edit::                    Changelogs: planner-log-edit.el
5484 * PSVN::                        svn changesets: planner-psvn.el
5485 * XTLA::                        TLA changesets: planner-xtla.el
5486 * Gnats::                       Gnats: The GNU bug reporting system
5487 @end menu
5489 @node Log Edit, PSVN, Tracking Development, Tracking Development
5490 @comment  node-name,  next,  previous,  up
5491 @subsection Log Edit
5492 @cindex cvs, using Planner with
5493 @cindex @file{planner-log-edit.el}, using
5494 @cindex version control, using Planner with
5496 This module allows you to automatically record CVS (and VC) commits
5497 in today's page.
5499 You can load the module with @code{(require 'planner-log-edit)}. When
5500 you load the module, @code{planner-log-edit-add-note} will be added to
5501 @code{log-edit-done-hook}.  A note containing the text of the commit
5502 and optionally a list of modified files will be added to today's page
5503 if you use the the Emacs version control interface. (@pxref{Version
5504 Control, , , Emacs, GNU Emacs Manual})
5506 @subheading Options
5508 @defopt planner-log-edit-include-files-flag
5509 Non-nil means include a list of committed files in the note.
5510 @end defopt
5512 @defopt planner-log-edit-notice-commit-function
5513 Non-nil means include a list of committed files in the note. If you
5514 want to enable this feature for some projects but not for others, set
5515 this to a function that returns t only for the commits you want to
5516 note.
5517 @end defopt
5519 @file{planner-log-edit.el} does not define any interactive functions.
5521 @node PSVN, XTLA, Log Edit, Tracking Development
5522 @comment  node-name,  next,  previous,  up
5523 @subsection PSVN
5524 @cindex PSVN
5525 @cindex @file{planner-psvn.el}, using
5527 This file allows you to refer to your svn changesets easily from within
5528 a Planner page.  You can load the module with @code{(require
5529 'planner-psvn)}.
5531 PSVN URLs are of the form
5532 @samp{psvn://http://my.svn-repos.at/svn/project1/trunk@@39}
5534 Additionally there is functionality to generate a note for your commits
5535 via subversion: just set
5536 @var{planner-psvn-log-edit-notice-commit-function} to t.
5538 @file{planner-psvn.el} does not define any interactive functions.
5540 @node XTLA, Gnats, PSVN, Tracking Development
5541 @comment  node-name,  next,  previous,  up
5542 @subsection XTLA
5543 @cindex XTLA
5544 @cindex @file{planner-xtla.el}, using
5546 This module allows you to refer to changesets in Tom Lord's Arch (tla)
5547 version control system. You can load the module with @code{(require
5548 'planner-xtla)}. When you load the module, you can create tasks from
5549 XTLA windows by positioning point on a revision.
5551 XTLA URLs are of the form
5552 @samp{xtla://miles@@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-19}
5554 @file{planner-xtla.el} does not define any interactive functions.
5556 @node Gnats,  , XTLA, Tracking Development
5557 @comment  node-name,  next,  previous,  up
5558 @subsection Gnats
5560 @cindex Gnats
5561 @cindex @file{planner-gnats.el}, using
5562 @cindex bug reports, tracking
5564 @file{planner-gnats.el} provides support for the GNU problem report
5565 management system Gnats. This module allows you to refer to problem
5566 reports using hyperlinks.
5568 Configure your Emacs for Gnats access, then add @samp{(require
5569 'planner-gnats)} to your @file{.emacs}. You can then create tasks from
5570 Gnats edit or view buffers.
5572 To add keybindings to Gnats, use @samp{(planner-gnats-insinuate)}.
5574 Gnats URLs are of the form @samp{gnats:pr-number}.
5576 @file{planner-gnats.el} does not define any interactive functions.
5578 @node Advanced Configuration, Reference Material, Managing Your Information, Top
5579 @comment  node-name,  next,  previous,  up
5580 @chapter Advanced Configuration
5581 @cindex configuration, advanced
5583 @menu
5584 * Customizing Your Day Pages::  Change your templates
5585 * Variables to Customize::      Change various aspects of Planner behavior
5586 * Ideas for Other Keybindings::  Add to and change the default keybindings
5587 @end menu
5589 @node Customizing Your Day Pages, Variables to Customize, Advanced Configuration, Advanced Configuration
5590 @comment  node-name,  next,  previous,  up
5591 @section Customizing Your Day Pages
5593 With the variable @code{planner-day-page-template}, you can define how
5594 you want any newly created day planner pages to look.
5596 You might want to include a section for your diary entries. For how to
5597 do this, see @ref{Diary}.
5599 You can add interactive Lisp buttons with the @file{planner-lisp.el}
5600 module. (@pxref{Interactive Lisp})
5602 Your @code{planner-day-page-template} can also include @samp{|<lisp>|}
5603 tags.
5605 For more complex day pages, you can set
5606 @code{planner-day-page-template} to a function that will be called
5607 from an empty day page buffer. The function should initialize the
5608 contents of the day page.
5610 @node Variables to Customize, Ideas for Other Keybindings, Customizing Your Day Pages, Advanced Configuration
5611 @comment  node-name,  next,  previous,  up
5612 @section Variables to Customize
5613 @cindex customize, variables to
5614 @cindex variables, customization of
5615 @cindex configuration, advanced, variables
5617 If you want to change @code{planner-directory} and some other
5618 variables, either use Customize (@kbd{M-x customize-group RET planner
5619 RET}) or use @code{setq}.  An example of the latter follows.
5621 @example
5622 (setq planner-directory "~/Plans")
5623 @end example
5625 Other user options are:
5627 @vindex planner-use-day-pages
5628 @defopt planner-use-day-pages
5629 If you really don't like day pages, you can set this variable to nil
5630 and you won't be prompted for dates for tasks (and notes, if using
5631 @file{remember-planner}).
5632 @end defopt
5634 @vindex planner-use-plan-pages
5635 @defopt planner-use-plan-pages
5636 If you really don't like plan pages, you can set this variable to nil
5637 and you won't be prompted for plan pages for tasks (and notes, if
5638 using @file{remember-planner}).
5639 @end defopt
5641 @vindex planner-mode-hook
5642 @defopt planner-mode-hook
5643 List of functions to run after @code{planner-mode} is initialized.
5644 @end defopt
5646 @vindex planner-tasks-file-behavior
5647 @defopt planner-tasks-file-behavior
5648 This variable controls what happens to files Planner opens by itself.
5649 If your tasks are associated with plan pages, the plan pages are
5650 updated whenever a task is rescheduled.  This could lead to a lot of
5651 open buffers as Planner applies updates to all linked files.
5652 By default, Planner is configured to do nothing.
5653 A value of @samp{save} means save but do not close buffers, and a
5654 value of @samp{nil} means do not save any of the buffers.
5655 @end defopt
5657 @vindex planner-add-task-at-end-flag
5658 @defopt planner-add-task-at-end-flag
5659 This variable controls where new tasks are created.  Non-nil means
5660 create tasks at the bottom of the first task block.  If you set this
5661 to non-nil, new tasks will be listed in order of creation (oldest).
5662 Tasks carried over from previous days will appear at the bottom of the
5663 list.
5665 Nil means create tasks at the top of the first task block.
5666 Carried-over tasks and newly created tasks are prominently placed on
5667 top of the list of tasks for the day.
5668 @end defopt
5670 @vindex planner-default-page
5671 @defopt planner-default-page
5672 Default page for created tasks.  This is used as the initial value for
5673 tasks.  After you create a task, it will be set to the previous page
5674 used.
5675 @end defopt
5677 @vindex planner-hide-task-status-when-highlighting
5678 @defopt planner-hide-task-status-when-highlighting
5679 Font-locking for tasks may be enough for you to determine status and
5680 priority.  Set this to non-nil if you want to hide the status marker
5681 and rely on font-locking instead.
5682 @end defopt
5684 @vindex planner-create-task-hook
5685 @defopt planner-create-task-hook
5686 Functions run after creating a task. @code{planner-id} hooks into
5687 this.
5688 @end defopt
5690 @vindex planner-expand-name-favor-future-p
5691 @defopt planner-expand-name-favor-future-p
5692 If non-nil, partial dates (ex: @kbd{2} or @kbd{5.2}) are completed to
5693 dates in the future instead of using the current year and month.
5694 @end defopt
5696 @vindex planner-task-dates-favor-future-p
5697 @defopt planner-task-dates-favor-future-p
5698 Like @code{planner-expand-name-favor-future-p}, but only for tasks.
5699 @end defopt
5701 @vindex planner-publish-dates-first-p
5702 @defopt planner-publish-dates-first-p
5703 Non-nil means list day pages first in the planner index.
5704 @end defopt
5706 @node Ideas for Other Keybindings,  , Variables to Customize, Advanced Configuration
5707 @comment  node-name,  next,  previous,  up
5708 @section Ideas for Other Keybindings
5709 @cindex keybindings, customization of
5710 @cindex configuration, advanced, keybindings
5711 @cindex customize, keybindings to
5713 By default and for backward compatibility, the following operations
5714 do not have keybindings, and are only accessible from the Planner
5715 menu:
5717 @itemize @bullet
5719 @item
5720 @code{planner-copy-or-move-region}
5722 @item
5723 @code{planner-delete-task}
5725 @item
5726 @code{planner-task-delegated}
5728 @item
5729 @code{planner-task-pending}
5731 @item
5732 @code{planner-task-open}
5734 @item
5735 @code{planner-renumber-tasks}
5737 @end itemize
5739 You may find it easier to install keybindings for those operations by
5740 inserting the following in your @file{.emacs} (or @file{_emacs}).
5741 Note: This changes some of the default keybindings for Planner.
5743 @example
5744 (planner-install-extra-task-keybindings)
5745 @end example
5747 If you install the extra task keybindings, your keybindings will
5748 include:
5750 @itemize @bullet
5752 @item
5753 @kbd{C-c C-t} will be unbound from the default and will serve as the
5754 prefix for the other task keybindings.
5756 @item
5757 @kbd{C-c C-t C-t}: @code{planner-create-task-from-buffer}.
5759 @item
5760 @kbd{C-c C-t C-k}: @code{planner-delete-task}.
5762 @item
5763 @kbd{C-c C-t C-u}: @code{planner-update-task}.
5765 @item
5766 @kbd{C-c C-t C-c}: @code{planner-copy-or-move-task}.
5768 @item
5769 @kbd{C-c C-t C-S-c}: @code{planner-copy-or-move-region}.
5771 @item
5772 @kbd{C-c C-t C-x}: @code{planner-task-done}.
5774 @item
5775 @kbd{C-c C-t C-S-x}: @code{planner-task-cancelled}.
5777 @item
5778 @kbd{C-c C-t C-d}: @code{planner-task-delegated}.
5780 @item
5781 @kbd{C-c C-t C-p}: @code{planner-task-pending}.
5783 @item
5784 @kbd{C-c C-t C-o}: @code{planner-task-in-progress}.
5786 @item
5787 @kbd{C-c C-t C-r}: @code{planner-raise-task}.
5789 @item
5790 @kbd{C-c C-t C-l}: @code{planner-lower-task}.
5792 @item
5793 @kbd{C-c C-t C-n}: @code{planner-renumber-tasks}.
5795 @end itemize
5797 Other keybindings can be configured by adding this to your
5798 @file{.emacs} (or @file{_emacs}):
5800 @example
5801 (planner-install-extra-context-keybindings)
5802 @end example
5804 This will set up the following keybindings:
5806 @itemize @bullet
5808 @item
5809 @kbd{shift up} @code{planner-move-up}
5811 @item
5812 @kbd{shift down} @code{planner-move-down}
5814 @item
5815 @kbd{shift right} @code{planner-jump-to-link}
5817 @end itemize
5819 @node Reference Material, Getting Help, Advanced Configuration, Top
5820 @comment  node-name,  next,  previous,  up
5821 @chapter Reference Material
5823 @menu
5824 * Keeping Track of Time::       
5825 * Other Interactive Functions::  
5826 * Planner Keybindings::         Default keybindings for Planner
5827 * Sample Configuration Files::  
5828 @end menu
5830 @node Keeping Track of Time, Other Interactive Functions, Reference Material, Reference Material
5831 @section Keeping Track of Time
5833 One of the coolest things you can do with Planner is keep track of how
5834 much time you spend not only on projects but even on particular tasks.
5835 @file{planner-timeclock.el} makes it as easy and natural as marking a
5836 task as in progress, postponed, or done. This can help you determine
5837 just how much time you spend working each day. If you add estimates to
5838 your task descriptions, you'll also be able to use this information to
5839 improve your time estimation skills.
5841 Here's how you can keep track of the time you
5844 Then the fun began. I wanted to see if I could match my estimates.
5845 Before I started working on a task, I used @kbd{C-c TAB} to mark it
5846 @code{in progress} and start the clock. If I decided to work on
5847 something else, I used @kbd{C-c TAB} to clock out of the previous task
5848 and clock into the new one.
5850 When I finished it, I used @kbd{C-c C-x} (@code{planner-task-done}) to
5851 mark it completed and automatically clock out. This is not yet done
5852 for cancelled tasks, so I clocked out of those manually with @kbd{C-c
5853 C-o} (@code{timeclock-out}). I also clocked out whenever I caught
5854 myself being distracted so that the totals wouldn't include the time I
5855 spent chatting on #emacs or checking out del.icio.us links. =) At the
5856 end of the day, I used
5857 @code{planner-timeclock-summary-show-range-filter} to show me the time
5858 elapsed for all of the tasks I'd worked on over the past two days.
5859 Here's the report for that project, edited to reflect how it looks on
5860 my screen and annotated with comments:
5862 @example
5863 Timeclock summary report for 2004.12.28 - 2004.12.29
5865 Project     |     Time| Ratio| Task
5866 JapanProject|  0:23:17|  3.6%| Translate javadoc comment for Messages.java
5867             |  0:33:48|  5.3%| Translate javadoc comment for LoginAction.java
5868             |  1:54:07| 17.8%| Study Struts in Japanese
5869             |  0:46:08|  7.2%| Add javadoc tags for input, output and forwards
5870             |  1:03:48|  9.9%| Help review code
5871             |  0:04:14|  0.7%| Import todo list
5872             |  0:00:37|  0.1%| 2min       Fix Menu Action's unnecessary code - delegated
5873             |  0:01:01|  0.2%| 2min       Remove unnecessary list in UserRemoveSetupAction - cancelled
5874             |  0:02:10|  0.3%| 2min       Remove hard-coded database path from MenuAction
5875             |  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. ...
5876             |  0:07:32|  1.2%| 5min       Add a method that returns the validity of a user in MUserPeer.
5877             |  0:08:28|  1.3%| 5min       Fix indentation
5878             |  0:03:52|  0.6%| 10min      Fix UserPeer so that it doesn't get null pointer exceptions
5879             |  0:04:34|  0.7%| 5min       Add current password field in user_modify page
5880             |  0:21:56|  3.4%| 15min      Make a super class for our service classes that will receive the database connection. (cancelled)
5881             |  0:06:05|  0.9%| 10min      Remove hard-coded constants from the Logic classes
5882             |  0:10:55|  1.7%| 10min      Move logic from UserBean.checkPassword to UserListLogic
5883             |  0:01:20|  0.2%| 20min      Guard against null pointer exceptions in peer classes
5884             |  0:04:57|  0.8%| 10min      Instead of displaying uneditable data with bean:write, just disable the html:text element
5885             |  0:25:03|  3.9%| 10min      Deploy 10:00 version
5886             |  0:04:46|  0.7%| 5min       Separate the configuration file of database and system into another uninternationalized property file.
5887             |  2:09:48| 20.2%| 1h         Decide on a naming convention for localized messages and update files
5888             |  0:00:07|  0.0%| 20min      Explain what is happening in UserModifyAction's nested ifs - pending
5889             |  1:50:23| 17.2%| 2h         Write Javadoc comments in English and Japanese to explain bean structure
5890             |  0:04:19|  0.7%| 2h         Write Javadoc comments in English and Japanese to explain peer operations (pending)
5891             |  0:05:40|  0.9%| 20min      Make a factory class for the database - pending
5892      Total: | 10:41:41|100.0%|      
5894 Day began: 13:03:58, Day ended: 20:51:46
5895 Time elapsed: 31:47:48, Time clocked: 10:41:41
5896 Time clocked ratio: 33.6%
5897 @end example
5899 The time record isn't perfect. I cancelled some tasks after thinking
5900 about them a little and did some tasks simultaneously. Sometimes I
5901 didn't notice that I was getting distracted, too. Still, having all of
5902 that time information neatly summarized made me realize a number of
5903 things.
5905 First, I goof off much less when I have a nice, broken-down task list
5906 in front of me. There's just something about knowing there's a five-
5907 or ten-minute hack you can get out of the way. I found myself looking
5908 forward to getting to the next task just to see if I could make my
5909 estimate. That said, seeing a five-minute task stretch and stretch due
5910 to unforeseen problems did make me a little nervous. I should probably
5911 just make generous estimates so that I don't end up with bugs because
5912 of haste.
5914 Second, I don't goof off as much as I thought I did, although there's
5915 still room for improvement. Yesterday's workday was 9:00 - 12:00, 1:00
5916 - 5:30--7.5 hours. Today was the last day of work, so cleaning and
5917 celebration interrupted my hacking at around 3:00--5 hours of work.
5918 According to my task list, 10:41/12:30 was productive work. Hmm. 1:49
5919 hours unclocked time when I was thinking or goofing off.
5920 planner-timeclock-summary-show for today reveals that I actually
5921 clocked 5:30 today, which means the goofing off happened yesterday.
5922 That makes sense; I remember a pretty long unclocked segment
5923 recuperating from Japanese overload. (This was before we came up with
5924 the task list.)
5926 Third, keeping track of time is way, way cool even if you don't bill
5927 anyone for your time.
5929 Like the idea? It's easy to try out. Just add
5931 @example
5932 (require 'planner-timeclock)
5933 (require 'planner-timeclock-summary)
5934 @end example
5936 to your ~/.emacs. If you want to try it out now, eval those statements
5937 in your Emacs session. After that, simply use @kbd{C-c TAB} to ``clock
5938 in'' a task before you start working on it and @kbd{C-c C-x}
5939 (@code{planner-task-done}) to mark it completed. @kbd{M-x
5940 planner-task-pending} also clocks out the current task if it was
5941 clocked in. To see a summary of how you spent your day, check out the
5942 different functions in @file{planner-timeclock-summary}.
5944 See @ref{Timeclock} for more details.
5946 Happy hacking!
5948 @node Other Interactive Functions, Planner Keybindings, Keeping Track of Time, Reference Material
5949 @comment  node-name,  next,  previous,  up
5950 @section Other Interactive Functions
5952 With @file{planner.el} loaded, you can use any of the functions in this
5953 section by typing @kbd{M-x} followed by the name of the function. Many
5954 of these functions are also bound to keys.
5956 For a list of Planner keybindings, see @ref{Planner Keybindings}.
5958 They are listed in no particular order.
5960 @file{planner.el} defines the following interactive functions:
5963 @defun planner-create-high-priority-task-from-buffer
5964 Create a high priority task based on this buffer.  Do not use this in
5965 LISP programs. Instead, set the value of
5966 @var{planner-default-task-priority} and call @code{planner-create-task}
5967 or @code{planner-create-task-from-buffer}.
5968 @end defun
5970 @defun defun planner-create-medium-priority-task-from-buffer
5971 Create a medium-priority task based on this buffer.  Do not use this in
5972 LISP programs. Instead, set the value of
5973 @var{planner-default-task-priority} and call @code{planner-create-task}
5974 or @code{planner-create-task-from-buffer}.
5975 @end defun
5977 @defun planner-create-low-priority-task-from-buffer
5978 Create a high-priority task based on this buffer.
5979 Do not use this in LISP programs. Instead, set the value of
5980 @var{planner-default-task-priority} and call @code{planner-create-task} or
5981 @code{planner-create-task-from-buffer}.
5982 @end defun
5984 @defun planner-install-extra-context-keybindings
5985 Install extra context-sensitive keybindings. These keybindings
5986 conflict with @file{windmove.el}, but might be useful.
5987 @end defun
5989 @defun planner-narrow-to-section section &optional create
5990 Widen to the whole page and narrow to the section labelled
5991 @var{section}.  If @var{create} is non-nil and the section is not found,
5992 the section is created.  Return non-nil if @var{section} was found or
5993 created.
5994 @end defun
5996 @defun planner-save-buffers
5997 Save all planner-mode buffers.
5998 @end defun
6000 @defun planner-seek-to-first section
6001 Positions the point at the specified @var{section}, or @samp{Tasks} if
6002 not specified.
6003 @end defun
6005 @defun planner-save-buffers
6006 Save all planner buffers.
6007 @end defun
6009 @defun planner-calendar-insinuate
6010 This hooks Planner into  Emacs Calendar (@pxref{Calendar/Diary, ,
6011 , Emacs, GNU Emacs Manual}).
6013 It adds special planner key bindings to @code{calendar-mode-map}.
6014 After this function is evaluated, you can use the following
6015 planner-related keybindings in @code{calendar-mode-map}:
6017 @table @kbd
6019 @item  n
6020 Jump to the planner page for the current day.
6022 @item  N
6023 Display the planner page for the current day.
6024 @end table
6026 @end defun
6028 @defun planner-kill-calendar-files
6029 Remove planner files shown from Calendar (@pxref{Calendar/Diary, , ,
6030 Emacs, GNU Emacs Manual}).
6032 @end defun
6034 @defun planner-calendar-goto
6035 Goto the plan page corresponding to the calendar date
6036 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
6037 @end defun
6039 @defun planner-calendar-show
6040 Show the plan page for the calendar date under point in another window
6041 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
6042 @end defun
6044 @defun planner-calendar-select
6045 Return to @code{planner-read-date} with the date currently selected
6046 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
6047 @end defun
6049 @defun planner-jump-to-link
6050 Jump to the item linked to by the current item.
6051 @end defun
6053 @defun planner-move-up
6054 Move a task up. You can use this to indicate that you will do a task
6055 before another one. On a note, go to the previous note. On a headline,
6056 go to the previous headline of the same depth.
6057 @end defun
6059 @defun planner-move-down 
6060 Move down. You can use this to indicate that you will do a task after
6061 another one. On a note, go to the next note. On a headline, go to the
6062 next headline of the same depth.
6063 @end defun
6065 @node Planner Keybindings, Sample Configuration Files, Other Interactive Functions, Reference Material
6066 @comment  node-name,  next,  previous,  up
6067 @section Planner Keybindings
6068 @cindex keybindings, list
6070 In order to refresh and renumber all of your tasks according to their
6071 actual order in the buffer, simply save the file or call
6072 @kbd{M-x planner-renumber-tasks}.
6074 Here is a summary of the keystrokes available:
6076 @table @kbd
6078 @item M-x plan
6079 Begin your planning session.  This goes to the last day for which
6080 there is any planning info (or today if none), allowing you to review,
6081 and create/move tasks from that day.
6083 @item C-c C-u
6084 Move a task up.
6086 @item C-c C-d
6087 Move a task down.
6089 @item C-c C-s
6090 Mark the task as in progress or delegated.
6092 @item C-c C-x
6093 Mark the task as finished.
6095 @item C-c C-t
6096 Create a task associated with the current Wiki page. If you are on the
6097 opening line of a Note entry, it is assumed that the note itself is the
6098 origin of the task.
6100 @item C-c C-c
6101 Move or copy the current task to another date. If the current task is
6102 an original (meaning you are in the buffer where's defined, hopefully
6103 a planning page) then it will be copied, and the original task will
6104 also now point to the copy.  If the current task is a copy, it will
6105 just be moved to the new day, and the original task's link will be
6106 updated.
6108 @item C-c C-n
6109 Jump to today's task page.  If you call
6110 @code{(planner-calendar-insinuate)}, typing @kbd{n} in the Emacs
6111 calendar (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}) will jump
6112 to today's task page.
6114 @item C-c C-x
6115 @code{planner-task-done}
6117 @item C-c C-z
6118 @code{planner-task-in-progress}
6120 @item C-c C-d
6121 @code{planner-lower-task}
6123 @item C-c C-u
6124 @code{planner-raise-task}
6126 @item C-c C-c
6127 @code{planner-copy-or-move-task}
6129 @item C-c C-t
6130 @code{planner-create-task-from-buffer}
6132 @item C-c C-j
6133 This is a prefix command.
6135 @item C-c C-n
6136 @code{planner-goto-today}
6138 @item C-c C-j C-r
6139 @code{planner-goto-most-recent}
6141 @item C-c C-j C-t
6142 @code{planner-goto-tomorrow}
6144 @item C-c C-j C-y
6145 @code{planner-goto-yesterday}
6147 @item C-c C-j C-j
6148 @code{planner-goto-today}
6150 @item C-c C-j C-n
6151 @code{planner-goto-next-daily-page}
6153 @item C-c C-j C-p
6154 @code{planner-goto-previous-daily-page}
6156 @item C-c C-j C-d
6157 @code{planner-goto}
6159 @end table
6161 @node Sample Configuration Files,  , Planner Keybindings, Reference Material
6162 @comment  node-name,  next,  previous,  up
6163 @section Sample Configuration Files
6164 @cindex configuration, sample
6166 This section includes some sample configuration files. This way, once
6167 you've got the hang of the basics, you can see some different, more
6168 advanced, setups.
6170 There is no One True Way to plan. Every person is different. We hope
6171 you'll find a good starting point among the example configurations
6172 below. If what you want to do does not perfectly fit under one of these
6173 examples, please post a description of the way you plan to our mailing
6174 list (@pxref{Getting Help}).  We look forward to helping you customizing
6175 planner to fit your needs.
6177 @menu
6178 * File Organization::           
6179 * Bare-Bones Planning::         
6180 * Bare-Bones Planning with Plan Pages::  
6181 * Tasks on Plan Pages with Some Day Pages::  
6182 * Hierarchical Tasks::          
6183 @end menu
6185 @node File Organization, Bare-Bones Planning, Sample Configuration Files, Sample Configuration Files
6186 @subsection File Organization
6188 @itemize
6189 @item @strong{Tasks, schedule and notes on day pages.}
6191 By default, tasks, schedule entries and notes are filed on day pages.
6192 This makes it easy for you to see all the entries relevant to a single
6193 day without becoming overwhelmed with information. Unfinished tasks
6194 are carried over to the next day when you use @kbd{M-x plan}, so it's
6195 always kept up to date. Completed tasks are left on the day page you
6196 finished them on, which helps when reviewing one's progress and writing
6197 accomplishment reports.
6199 @item @strong{Cross-referenced with plan pages.}
6201 You can associate your tasks with projects either when you create the
6202 task or later, with @kbd{M-x planner-replan-task}. This makes it easy
6203 for you to see all the information associated with a particular
6204 project. If you use RememberMode to create notes, you will also be
6205 able to associate notes with a plan page.
6207 @item @strong{Just plan pages.}
6209 If your tasks don't usually have dates, you can turn day pages off by
6210 customizing @code{planner-use-day-pages}. If so, then all of your
6211 tasks and notes will be stored on the WelcomePage and/or a plan page.
6213 @end itemize
6215 @node Bare-Bones Planning, Bare-Bones Planning with Plan Pages, File Organization, Sample Configuration Files
6216 @subsection Bare-Bones Planning
6218 You can keep all of your tasks, notes and schedules in a single file:
6219 WelcomePage.  This is good for people who are used to storing all of
6220 their information in a flat text file.  By storing your information in
6221 planner, you'll be able to take advantage of automatic hyperlinking to
6222 files and other resources.  You can also sort your tasks by priority
6223 and status.
6225 To set your system up for bare-bones planning, set the
6226 @code{planner-use-day-pages} variable to nil before loading planner.
6227 For example, you can put this in your @file{~/.emacs} (or @file{_emacs}):
6229 @example
6230 (setq planner-use-day-pages nil)
6231 (setq planner-default-page nil)
6232 (require 'planner)
6233 @end example
6235 When you create a task or note, planner will not prompt you for a
6236 date.  If you press @key{RET} when prompted for a plan page, it will
6237 accept the default of nil, so no other plan pages will be used.  All
6238 of your data will be kept in one file, which can then be easily backed
6241 You can use commands like @command{planner-create-task-from-buffer} to
6242 create tasks, or you can type tasks in manually.  You can edit or
6243 delete anything in the page without having to update other files.
6245 @node Bare-Bones Planning with Plan Pages, Tasks on Plan Pages with Some Day Pages, Bare-Bones Planning, Sample Configuration Files
6246 @subsection Bare-Bones Planning with Plan Pages
6248 When you create a task or note, Planner.el can copy this to a plan
6249 page. Plan pages allow you to see an overview of all the data for a
6250 project.
6252 For convenience, the @command{planner-create-task-from-buffer} command
6253 prompts you for a plan page when you create a task.
6257 @node Tasks on Plan Pages with Some Day Pages, Hierarchical Tasks, Bare-Bones Planning with Plan Pages, Sample Configuration Files
6258 @subsection Tasks on Plan Pages with Some Day Pages
6260 If most of your tasks are associated with plan pages but you want to
6261 schedule some tasks on day pages, you can leave day pages on (default)
6262 and then write a function that turns off day pages. For example, the
6263 following code snippet turns off day pages for task creation from
6264 buffers.
6266 @example
6267 (require 'planner)
6269 (defun my-planner-create-task-from-buffer ()
6270   "Call `planner-create-task-from-buffer', but without dates."
6271   (interactive)
6272   (let ((planner-use-day-pages nil))
6273     (call-interactively 'planner-create-task-from-buffer)))
6274 @end example
6276 @node Hierarchical Tasks,  , Tasks on Plan Pages with Some Day Pages, Sample Configuration Files
6277 @subsection Hierarchical Tasks
6278 @cindex hierarchical tasks
6279 @cindex tasks, hierarchy of
6281 You can use @file{allout.el} or other modes for outlining to support
6282 hierarchical tasks in plan pages. No special support is needed.
6284 Tasks created by @command{planner-create-task-from-buffer} and
6285 @code{planner-create-task} are created in the @samp{* Tasks} section.
6286 If @code{planner-add-task-at-end-flag} is non-nil, tasks are added to
6287 the end of the first task block, else they are added to the beginning.
6288 You can then copy and paste tasks into your preferred hierarchy.
6289 Blank lines delimit blocks of tasks upon which automatic sorting is
6290 performed.
6292 You can also type in tasks manually. You may find this approach faster
6293 when you are comfortable with planner.
6295 For example, a @file{LearnPlanner} plan page might contain the
6296 following lines:
6298 @example
6299 * Learn how to use planner.el
6301 ** Installation
6303 #C0 _ Decide where to put Planner
6304 #C0 _ Download the archives
6306 ** Configuration
6308 *** Load path
6310 #C0 _ Figure out how to add things to my load path
6311 #C0 _ Actually add it to my load path
6314 @end example
6316 If you create tasks for the finest level of detail available at the
6317 moment, you can schedule them onto day pages with @kbd{C-c C-c}
6318 (@command{planner-copy-or-move-task}). Then you can use
6319 @command{planner-jump-to-link} to switch between the day page and the
6320 plan page link.
6323 @node Getting Help, Acknowledgements, Reference Material, Top
6324 @comment  node-name,  next,  previous,  up
6325 @chapter Getting Help
6326 @cindex help, getting
6327 @cindex bugs, reporting
6329 After you have read this guide, if you still have questions about
6330 Planner, or if you have bugs to report, there are several places
6331 you can go.
6333 Planner has an official website at @url{http://www.plannerlove.com/}.
6334 It is a collaborative wiki.
6336 Bugs may be reported using the Planner Bug-Tracker at
6337 @url{http://gna.org/bugs/?group=planner-el}.
6339 Planner has three mailing lists.
6341 @table @samp
6343 @item planner-el-announce
6344 Low-traffic list for planner-related announcements.
6346 You can join this mailing list (@email{planner-el-announce@@gna.org})
6347 using the subscription form at
6348 @url{http://mail.gna.org/listinfo/planner-el-announce/}.  This
6349 mailing list is also available via Gmane (@url{http://gmane.org/}). The
6350 group is called @samp{gmane.emacs.planner.announce}.
6352 @item planner-el-discuss
6353 Discussion, bugfixes, suggestions, tips, and the like for Planner.
6354 This mailing list also includes the content of planner-el-announce.
6356 You can join this mailing list (@email{planner-el-discuss@@gna.org})
6357 using the subscription form at
6358 @url{http://mail.gna.org/listinfo/planner-el-discuss/}.  This mailing
6359 list is also available via Gmane with the identifier
6360 @samp{gmane.emacs.planner.general}.
6362 @item planner-el-cvs
6363 Log messages for changes committed to Planner.
6365 You can join this mailing list (@email{planner-el-cvs@@gna.org}) using
6366 the subscription form at
6367 @url{http://mail.gna.org/listinfo/planner-el-cvs/}.  This mailing list
6368 is also available via Gmane with the identifier
6369 @samp{gmane.emacs.planner.cvs}.
6371 @end table
6373 You can also contact the maintainer of Planner, John Sullivan, at
6374 @email{john@@wjsullivan.net}, but it is better to use the other options.
6376 You can explore the relevant sections of the EmacsWiki.org:
6378 @itemize @bullet
6380 @item
6381 @url{http://www.emacswiki.org/cgi-bin/wiki/PlannerMode}
6383 @item
6384 @url{http://www.emacswiki.org/cgi-bin/wiki/MuseMode}
6386 @item
6387 @url{http://www.emacswiki.org/cgi-bin/wiki/RememberMode}
6389 @end itemize
6391 You can visit the IRC Freenode channel @samp{#emacs}. Many of the
6392 contributors are frequently around and willing to answer your
6393 questions.
6395 There is an Orkut community called PlannerMode.
6397 For issues relating to this documentation, please contact John
6398 Sullivan at @email{john@@wjsullivan.net}.
6400 @node Acknowledgements, GNU General Public License, Getting Help, Top
6401 @comment  node-name,  next,  previous,  up
6402 @chapter Acknowledgements
6403 @itemize
6404 @item Maintainers
6406 @cindex maintainers
6408 @itemize
6409 @item 2006
6411 John Sullivan volunteered to maintain Planner, and Michael Olson passed
6412 the maintainership on to him with the release of Planner 3.41.
6414 @item 2005
6416 Michael Olson, Sacha Chua, and several others from the Planner community
6417 ported Planner to use Muse instead of emacs-wiki.  Michael Olson became
6418 the maintainer of Planner.
6420 @item 2004
6422 Damien Elmes handed EmacsWikiMode to Mark Triggs for a short period of
6423 time.  Mark Triggs deferred to Sacha Chua as official maintainer of
6424 Planner.  Sacha Chua volunteered to maintain RememberMode.
6425 Michael Olson became the maintainer of both emacs-wiki and Muse.
6427 @item 2003
6429 Sacha Chua volunteered to maintain Planner.  Damien Elmes
6430 volunteered to maintain EmacsWikiMode.
6432 @item 2001
6434 John Wiegley wrote EmacsWikiMode and Planner.
6435 @end itemize
6437 @item Contributors
6438 @cindex contributors
6440 For a complete list of people who have helped out with Planner, please
6441 check out the @file{AUTHORS} file that is included with Planner.
6443 @end itemize
6445 @node GNU General Public License, Concept Index, Acknowledgements, Top
6446 @comment  node-name,  next,  previous,  up
6447 @appendix GNU GENERAL PUBLIC LICENSE
6448 @center Version 2, June 1991
6449 @cindex GPL
6450 @cindex GNU General Public License
6452 @c This file is intended to be included in another file.
6454 @display
6455 Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
6456 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
6458 Everyone is permitted to copy and distribute verbatim copies
6459 of this license document, but changing it is not allowed.
6460 @end display
6462 @appendixsec Preamble
6464   The licenses for most software are designed to take away your
6465 freedom to share and change it.  By contrast, the GNU General Public
6466 License is intended to guarantee your freedom to share and change free
6467 software---to make sure the software is free for all its users.  This
6468 General Public License applies to most of the Free Software
6469 Foundation's software and to any other program whose authors commit to
6470 using it.  (Some other Free Software Foundation software is covered by
6471 the GNU Library General Public License instead.)  You can apply it to
6472 your programs, too.
6474   When we speak of free software, we are referring to freedom, not
6475 price.  Our General Public Licenses are designed to make sure that you
6476 have the freedom to distribute copies of free software (and charge for
6477 this service if you wish), that you receive source code or can get it
6478 if you want it, that you can change the software or use pieces of it
6479 in new free programs; and that you know you can do these things.
6481   To protect your rights, we need to make restrictions that forbid
6482 anyone to deny you these rights or to ask you to surrender the rights.
6483 These restrictions translate to certain responsibilities for you if you
6484 distribute copies of the software, or if you modify it.
6486   For example, if you distribute copies of such a program, whether
6487 gratis or for a fee, you must give the recipients all the rights that
6488 you have.  You must make sure that they, too, receive or can get the
6489 source code.  And you must show them these terms so they know their
6490 rights.
6492   We protect your rights with two steps: (1) copyright the software, and
6493 (2) offer you this license which gives you legal permission to copy,
6494 distribute and/or modify the software.
6496   Also, for each author's protection and ours, we want to make certain
6497 that everyone understands that there is no warranty for this free
6498 software.  If the software is modified by someone else and passed on, we
6499 want its recipients to know that what they have is not the original, so
6500 that any problems introduced by others will not reflect on the original
6501 authors' reputations.
6503   Finally, any free program is threatened constantly by software
6504 patents.  We wish to avoid the danger that redistributors of a free
6505 program will individually obtain patent licenses, in effect making the
6506 program proprietary.  To prevent this, we have made it clear that any
6507 patent must be licensed for everyone's free use or not licensed at all.
6509   The precise terms and conditions for copying, distribution and
6510 modification follow.
6512 @iftex
6513 @appendixsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
6514 @end iftex
6515 @ifinfo
6516 @center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
6517 @end ifinfo
6519 @enumerate 0
6520 @item
6521 This License applies to any program or other work which contains
6522 a notice placed by the copyright holder saying it may be distributed
6523 under the terms of this General Public License.  The ``Program'', below,
6524 refers to any such program or work, and a ``work based on the Program''
6525 means either the Program or any derivative work under copyright law:
6526 that is to say, a work containing the Program or a portion of it,
6527 either verbatim or with modifications and/or translated into another
6528 language.  (Hereinafter, translation is included without limitation in
6529 the term ``modification''.)  Each licensee is addressed as ``you''.
6531 Activities other than copying, distribution and modification are not
6532 covered by this License; they are outside its scope.  The act of
6533 running the Program is not restricted, and the output from the Program
6534 is covered only if its contents constitute a work based on the
6535 Program (independent of having been made by running the Program).
6536 Whether that is true depends on what the Program does.
6538 @item
6539 You may copy and distribute verbatim copies of the Program's
6540 source code as you receive it, in any medium, provided that you
6541 conspicuously and appropriately publish on each copy an appropriate
6542 copyright notice and disclaimer of warranty; keep intact all the
6543 notices that refer to this License and to the absence of any warranty;
6544 and give any other recipients of the Program a copy of this License
6545 along with the Program.
6547 You may charge a fee for the physical act of transferring a copy, and
6548 you may at your option offer warranty protection in exchange for a fee.
6550 @item
6551 You may modify your copy or copies of the Program or any portion
6552 of it, thus forming a work based on the Program, and copy and
6553 distribute such modifications or work under the terms of Section 1
6554 above, provided that you also meet all of these conditions:
6556 @enumerate a
6557 @item
6558 You must cause the modified files to carry prominent notices
6559 stating that you changed the files and the date of any change.
6561 @item
6562 You must cause any work that you distribute or publish, that in
6563 whole or in part contains or is derived from the Program or any
6564 part thereof, to be licensed as a whole at no charge to all third
6565 parties under the terms of this License.
6567 @item
6568 If the modified program normally reads commands interactively
6569 when run, you must cause it, when started running for such
6570 interactive use in the most ordinary way, to print or display an
6571 announcement including an appropriate copyright notice and a
6572 notice that there is no warranty (or else, saying that you provide
6573 a warranty) and that users may redistribute the program under
6574 these conditions, and telling the user how to view a copy of this
6575 License.  (Exception: if the Program itself is interactive but
6576 does not normally print such an announcement, your work based on
6577 the Program is not required to print an announcement.)
6578 @end enumerate
6580 These requirements apply to the modified work as a whole.  If
6581 identifiable sections of that work are not derived from the Program,
6582 and can be reasonably considered independent and separate works in
6583 themselves, then this License, and its terms, do not apply to those
6584 sections when you distribute them as separate works.  But when you
6585 distribute the same sections as part of a whole which is a work based
6586 on the Program, the distribution of the whole must be on the terms of
6587 this License, whose permissions for other licensees extend to the
6588 entire whole, and thus to each and every part regardless of who wrote it.
6590 Thus, it is not the intent of this section to claim rights or contest
6591 your rights to work written entirely by you; rather, the intent is to
6592 exercise the right to control the distribution of derivative or
6593 collective works based on the Program.
6595 In addition, mere aggregation of another work not based on the Program
6596 with the Program (or with a work based on the Program) on a volume of
6597 a storage or distribution medium does not bring the other work under
6598 the scope of this License.
6600 @item
6601 You may copy and distribute the Program (or a work based on it,
6602 under Section 2) in object code or executable form under the terms of
6603 Sections 1 and 2 above provided that you also do one of the following:
6605 @enumerate a
6606 @item
6607 Accompany it with the complete corresponding machine-readable
6608 source code, which must be distributed under the terms of Sections
6609 1 and 2 above on a medium customarily used for software interchange; or,
6611 @item
6612 Accompany it with a written offer, valid for at least three
6613 years, to give any third party, for a charge no more than your
6614 cost of physically performing source distribution, a complete
6615 machine-readable copy of the corresponding source code, to be
6616 distributed under the terms of Sections 1 and 2 above on a medium
6617 customarily used for software interchange; or,
6619 @item
6620 Accompany it with the information you received as to the offer
6621 to distribute corresponding source code.  (This alternative is
6622 allowed only for noncommercial distribution and only if you
6623 received the program in object code or executable form with such
6624 an offer, in accord with Subsection b above.)
6625 @end enumerate
6627 The source code for a work means the preferred form of the work for
6628 making modifications to it.  For an executable work, complete source
6629 code means all the source code for all modules it contains, plus any
6630 associated interface definition files, plus the scripts used to
6631 control compilation and installation of the executable.  However, as a
6632 special exception, the source code distributed need not include
6633 anything that is normally distributed (in either source or binary
6634 form) with the major components (compiler, kernel, and so on) of the
6635 operating system on which the executable runs, unless that component
6636 itself accompanies the executable.
6638 If distribution of executable or object code is made by offering
6639 access to copy from a designated place, then offering equivalent
6640 access to copy the source code from the same place counts as
6641 distribution of the source code, even though third parties are not
6642 compelled to copy the source along with the object code.
6644 @item
6645 You may not copy, modify, sublicense, or distribute the Program
6646 except as expressly provided under this License.  Any attempt
6647 otherwise to copy, modify, sublicense or distribute the Program is
6648 void, and will automatically terminate your rights under this License.
6649 However, parties who have received copies, or rights, from you under
6650 this License will not have their licenses terminated so long as such
6651 parties remain in full compliance.
6653 @item
6654 You are not required to accept this License, since you have not
6655 signed it.  However, nothing else grants you permission to modify or
6656 distribute the Program or its derivative works.  These actions are
6657 prohibited by law if you do not accept this License.  Therefore, by
6658 modifying or distributing the Program (or any work based on the
6659 Program), you indicate your acceptance of this License to do so, and
6660 all its terms and conditions for copying, distributing or modifying
6661 the Program or works based on it.
6663 @item
6664 Each time you redistribute the Program (or any work based on the
6665 Program), the recipient automatically receives a license from the
6666 original licensor to copy, distribute or modify the Program subject to
6667 these terms and conditions.  You may not impose any further
6668 restrictions on the recipients' exercise of the rights granted herein.
6669 You are not responsible for enforcing compliance by third parties to
6670 this License.
6672 @item
6673 If, as a consequence of a court judgment or allegation of patent
6674 infringement or for any other reason (not limited to patent issues),
6675 conditions are imposed on you (whether by court order, agreement or
6676 otherwise) that contradict the conditions of this License, they do not
6677 excuse you from the conditions of this License.  If you cannot
6678 distribute so as to satisfy simultaneously your obligations under this
6679 License and any other pertinent obligations, then as a consequence you
6680 may not distribute the Program at all.  For example, if a patent
6681 license would not permit royalty-free redistribution of the Program by
6682 all those who receive copies directly or indirectly through you, then
6683 the only way you could satisfy both it and this License would be to
6684 refrain entirely from distribution of the Program.
6686 If any portion of this section is held invalid or unenforceable under
6687 any particular circumstance, the balance of the section is intended to
6688 apply and the section as a whole is intended to apply in other
6689 circumstances.
6691 It is not the purpose of this section to induce you to infringe any
6692 patents or other property right claims or to contest validity of any
6693 such claims; this section has the sole purpose of protecting the
6694 integrity of the free software distribution system, which is
6695 implemented by public license practices.  Many people have made
6696 generous contributions to the wide range of software distributed
6697 through that system in reliance on consistent application of that
6698 system; it is up to the author/donor to decide if he or she is willing
6699 to distribute software through any other system and a licensee cannot
6700 impose that choice.
6702 This section is intended to make thoroughly clear what is believed to
6703 be a consequence of the rest of this License.
6705 @item
6706 If the distribution and/or use of the Program is restricted in
6707 certain countries either by patents or by copyrighted interfaces, the
6708 original copyright holder who places the Program under this License
6709 may add an explicit geographical distribution limitation excluding
6710 those countries, so that distribution is permitted only in or among
6711 countries not thus excluded.  In such case, this License incorporates
6712 the limitation as if written in the body of this License.
6714 @item
6715 The Free Software Foundation may publish revised and/or new versions
6716 of the General Public License from time to time.  Such new versions will
6717 be similar in spirit to the present version, but may differ in detail to
6718 address new problems or concerns.
6720 Each version is given a distinguishing version number.  If the Program
6721 specifies a version number of this License which applies to it and ``any
6722 later version'', you have the option of following the terms and conditions
6723 either of that version or of any later version published by the Free
6724 Software Foundation.  If the Program does not specify a version number of
6725 this License, you may choose any version ever published by the Free Software
6726 Foundation.
6728 @item
6729 If you wish to incorporate parts of the Program into other free
6730 programs whose distribution conditions are different, write to the author
6731 to ask for permission.  For software which is copyrighted by the Free
6732 Software Foundation, write to the Free Software Foundation; we sometimes
6733 make exceptions for this.  Our decision will be guided by the two goals
6734 of preserving the free status of all derivatives of our free software and
6735 of promoting the sharing and reuse of software generally.
6737 @iftex
6738 @heading NO WARRANTY
6739 @end iftex
6740 @ifinfo
6741 @center NO WARRANTY
6742 @end ifinfo
6744 @item
6745 BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
6746 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
6747 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
6748 PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
6749 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
6750 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
6751 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
6752 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
6753 REPAIR OR CORRECTION.
6755 @item
6756 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
6757 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
6758 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
6759 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
6760 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
6761 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
6762 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
6763 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
6764 POSSIBILITY OF SUCH DAMAGES.
6765 @end enumerate
6767 @iftex
6768 @heading END OF TERMS AND CONDITIONS
6769 @end iftex
6770 @ifinfo
6771 @center END OF TERMS AND CONDITIONS
6772 @end ifinfo
6774 @page
6775 @appendixsec Appendix: How to Apply These Terms to Your New Programs
6777   If you develop a new program, and you want it to be of the greatest
6778 possible use to the public, the best way to achieve this is to make it
6779 free software which everyone can redistribute and change under these terms.
6781   To do so, attach the following notices to the program.  It is safest
6782 to attach them to the start of each source file to most effectively
6783 convey the exclusion of warranty; and each file should have at least
6784 the ``copyright'' line and a pointer to where the full notice is found.
6786 @smallexample
6787 @var{one line to give the program's name and a brief idea of what it does.}
6788 Copyright (C) @var{yyyy}  @var{name of author}
6790 This program is free software; you can redistribute it and/or modify
6791 it under the terms of the GNU General Public License as published by
6792 the Free Software Foundation; either version 2 of the License, or
6793 (at your option) any later version.
6795 This program is distributed in the hope that it will be useful,
6796 but WITHOUT ANY WARRANTY; without even the implied warranty of
6797 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6798 GNU General Public License for more details.
6800 You should have received a copy of the GNU General Public License
6801 along with this program; if not, write to the Free Software
6802 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
6803 @end smallexample
6805 Also add information on how to contact you by electronic and paper mail.
6807 If the program is interactive, make it output a short notice like this
6808 when it starts in an interactive mode:
6810 @smallexample
6811 Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
6812 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
6813 This is free software, and you are welcome to redistribute it
6814 under certain conditions; type `show c' for details.
6815 @end smallexample
6817 The hypothetical commands @samp{show w} and @samp{show c} should show
6818 the appropriate parts of the General Public License.  Of course, the
6819 commands you use may be called something other than @samp{show w} and
6820 @samp{show c}; they could even be mouse-clicks or menu items---whatever
6821 suits your program.
6823 You should also get your employer (if you work as a programmer) or your
6824 school, if any, to sign a ``copyright disclaimer'' for the program, if
6825 necessary.  Here is a sample; alter the names:
6827 @example
6828 Yoyodyne, Inc., hereby disclaims all copyright interest in the program
6829 `Gnomovision' (which makes passes at compilers) written by James Hacker.
6831 @var{signature of Ty Coon}, 1 April 1989
6832 Ty Coon, President of Vice
6833 @end example
6835 This General Public License does not permit incorporating your program into
6836 proprietary programs.  If your program is a subroutine library, you may
6837 consider it more useful to permit linking proprietary applications with the
6838 library.  If this is what you want to do, use the GNU Library General
6839 Public License instead of this License.
6841 @node Concept Index,  , GNU General Public License, Top
6842 @comment  node-name,  next,  previous,  up
6843 @unnumbered Index
6845 @printindex cp
6847 @bye