Document planner-report.el.
[planner-el.git] / planner-el.texi
blob0d06bc4c758053dd500f195db07fdf55dd4f705b
1 \input texinfo @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename planner-el.info
4 @settitle planner-el
5 @c %**end of header
7 @dircategory Emacs
8 @direntry
9 * planner-el: (planner-el). planner.el: Day planner/organizer for Emacs.
10 @end direntry
12 @syncodeindex fn cp
14 @copying
15 This manual is for Planner version 3.40.
17 Copyright @copyright{} 2001, 2004, 2005, 2006 Free Software Foundation, Inc.@*
18 Parts copyright @copyright{} 2005 Jim Ottaway@*
19 Parts copyright @copyright{} 2005 Dryice Dong Liu
21 @quotation
22 Permission is granted to copy, distribute and/or modify this document
23 under the terms of the GNU General Public License, Version 2.0
24 or any later version published by the Free Software Foundation.
25 A copy of the license is included in the section entitled ``GNU
26 General Public License.''
27 @end quotation
28 @end copying
30 @titlepage
31 @title Guide to Planner
32 @subtitle a day planner and organizer
33 @subtitle for GNU Emacs and XEmacs
35 @c The following two commands
36 @c start the copyright page.
37 @page
38 @vskip 0pt plus 1filll
39 @insertcopying
40 @end titlepage
42 @c So the toc is printed at the start
43 @contents
45 @ifnottex
46 @node Top, Preface, (dir), (dir)
47 @comment  node-name,  next,  previous,  up
48 @top Planner
50 @insertcopying
51 @end ifnottex
53 @menu
54 * Preface::                     
55 * Introduction::                
56 * Installation::                
57 * Overview::                    A discussion of different approaches to planning
58 * Getting Started::             
59 * More about Planner::          In-depth look at some core features
60 * Managing Your Information::   Integration with external programs
61 * Advanced Configuration::      
62 * Reference Material::          
63 * Getting Help::                
64 * Acknowledgements::            
65 * GNU General Public License::  
66 * Concept Index::               
68 @detailmenu
69  --- The Detailed Node Listing ---
71 Installation
73 * Getting the Files::           
74 * Creating Your Planner::       
75 * Components::                  
76 * Advanced Installation::       
78 Getting the Files
80 * Installing from a Source Archive::  
81 * Installing from Arch::        
82 * Installing from Debian::      
84 Overview
86 * Planning based on the Franklin-Covey Approach::  
87 * Why Use Planner::             
89 Getting Started
91 * Tasks::                       
92 * Schedule::                    
93 * Notes::                       
94 * Hyperlinks::                  
95 * Example Page::                
96 * Review::                      
98 More about Planner
100 * Navigation::                  
101 * More about Tasks::            
102 * More about Notes::            
103 * Making Files Pretty::         
104 * Annotations::                 
105 * Interactive Lisp::            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 Michael Olson (@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: John Sullivan @email{john@@wjsullivan.net}
266 Maintainer: Michael Olson @email{mwolson@@gnu.org}
269 John Sullivan (johnsu01)@*
270 April 25, 2004
272 @node Introduction, Installation, Preface, Top
273 @comment  node-name,  next,  previous,  up
274 @chapter Introduction
276 Planner is an organizer and day planner for Emacs.  It helps you keep
277 track of your pending and completed tasks, daily schedule, dates to
278 remember, notes and inspirations. It is a powerful tool not only for
279 managing your time and productivity, but also for keeping within easy
280 keystroke reach all of the information you need to be productive. It can
281 even publish reports charting your work for your personal web page, your
282 conscience, or your soon-to-be-impressed boss.
284 In fact, because it uses as its building blocks simple plain-text files,
285 it is an incredibly modular and flexible tool capable of shaping and
286 handling your personal information in ways whose variety is limited only
287 by your imagination. Because of this, Planner has a very active and
288 generous community who regularly share their innovations with each
289 other. Many of these modules and extensions are included in the archive
290 that you will download. Once you get the basics down, you'll probably
291 want to explore some of them. But as you read this manual and work with
292 Planner, keep in mind that the basic core is actually very simple, and
293 it might be worth spending time with just that before delving into the
294 customizations.
296 Because they are plain text with very few requirements, the organizer
297 pages kept by Planner can be as basic or as detailed as you
298 like. Your pages can be simple to-do lists with no more additional
299 information than what you would scrawl on a napkin, or they can be a
300 highly technical affair involving hyperlinks, embedded Lisp code,
301 appointment schedules and RSS feeds. As with so much in Emacs, it's
302 all up to you.
304 To get started with Planner, you first need to download it, and possibly
305 also the packages it depends on (@pxref{Installation}).
307 @node Installation, Overview, Introduction, Top
308 @comment  node-name,  next,  previous,  up
309 @chapter Installation
310 @cindex installation
312 Planner depends on Muse. Information for downloading and installing
313 Muse can be found at
314 @url{http://www.mwolson.org/static/doc/muse.html}.
316 Make sure that you use the latest Muse release.  Development code might
317 prove unstable.
319 @menu
320 * Getting the Files::           
321 * Creating Your Planner::       
322 * Components::                  
323 * Advanced Installation::       
324 @end menu
326 @node Getting the Files, Creating Your Planner, Installation, Installation
327 @comment node-name,  next,  previous,  up
328 @section Getting the Files
330 Currently, there are three ways to obtain and install Planner. You can
331 install it from a source archive, Arch repository, or Debian package.
333 @menu
334 * Installing from a Source Archive::  
335 * Installing from Arch::        
336 * Installing from Debian::      
337 @end menu
339 @node Installing from a Source Archive, Installing from Arch, Getting the Files, Getting the Files
340 @comment node-name,  next,  previous,  up
341 @subsection Installing from a Source Archive
342 @cindex source code archive, installing from
344 You can install Planner from the source archive packaged and
345 distributed directly by the maintainer. This archive is provided in
346 both @file{.tar.gz} and @file{.zip} format.
348 @enumerate
349 @item
350 Download and unpack either
351 @url{http://www.mwolson.org/static/dist/planner-latest.tar.gz} or
352 @url{http://www.mwolson.org/static/dist/planner-latest.zip}.
354 @item Edit your @file{~/.emacs} (@file{_emacs} on Microsoft Windows).
356 @example
357 ;; Add the directories to your load path
358 (add-to-list 'load-path "/path/to/muse/lisp")
359 (add-to-list 'load-path "/path/to/planner")
360 (add-to-list 'load-path "/path/to/remember")
362 ;; Load planner
363 (require 'planner)
364 @end example
365 @end enumerate
367 @subsubsection Updating Your Version
369 Download a new version and extract it over the old directory. Don't
370 forget to delete any byte-compiled files (@file{*.elc}) in the
371 directories so that the new code will be used.
373 @node Installing from Arch, Installing from Debian, Installing from a Source Archive, Getting the Files
374 @comment node-name,  next,  previous,  up
375 @subsection Installing from Arch
376 @cindex Arch repositories
377 @cindex Arch, installing from
379 Arch allows you to retrieve previous versions and select specific
380 features and bugfixes. Debian users can install Arch with @kbd{apt-get
381 install tla}. Users of other distributions should see
382 @url{http://regexps.srparish.net/www/}.
384 To get started with Planner using Arch, you'll need to run some initial
385 commands to register your local copy of the archive and retrieve the
386 files.
388 @example
389 # Register the Muse archive
390 tla register-archive http://www.mwolson.org/archives/2006
392 # Register the Planner archive
393 tla register-archive http://arch.gna.org/planner-el/archive-2006
395 # Get the Muse archive
396 tla get mwolson@@gnu.org--2006/muse--main--1.0 muse
398 # Download planner module into the planner/ subdirectory
399 tla get mwolson@@gnu.org--2006-planner-el/planner-el--devel--1.0 planner
400 @end example
402 Then add the following lines to your @code{~/.emacs}:
404 @example
405 ;; Add the directories to your load path
406 (add-to-list 'load-path "/path/to/muse/lisp")
407 (add-to-list 'load-path "/path/to/planner")
408 (add-to-list 'load-path "/path/to/remember")
410 ;; Load planner
411 (require 'planner)
412 @end example
414 You can also browse the Arch repository on the web at
415 @url{http://www.mwolson.org/cgi-bin/archzoom/archzoom.cgi/mwolson@@gnu.org--2006/planner}.
417 @subsubsection Updating Your Version
418 @cindex Arch, updating from
420 To stay up-to-date using Arch, here are some commands that might be
421 useful.
423 To list upstream changes not in local copy:
425 @example
426 # Change to the source directory you are interested in. Example:
427 cd muse/
429 # Display the summary of changes
430 tla missing --summary
431 @end example
433 To update to the latest version:
435 @example
436 cd muse; tla replay
437 cd ../planner; tla replay
438 cd ../remember; tla replay
439 @end example
441 Don't forget to delete any byte-compiled files (@file{*.elc}) in the
442 directories so that the new code will be used.
444 @node Installing from Debian, , Installing from Arch, Getting the Files
445 @comment node-name,  next,  previous,  up
446 @subsection Installing from Debian
447 @cindex Debian package
449 Debian packages for Planner, Muse, and Remember are available in Debian
450 proper as the @code{planner-el}, @code{muse-el}, and @code{remember-el}
451 packages, respectively.
453 If you wish to try experimental packages, add the following lines to
454 your @file{/etc/apt/sources.list}
456 @example
457 deb http://www.mwolson.org/debian/ ./
458 @end example
460 Then, do the following steps as root:
462 @example
463 apt-get update
464 apt-get install muse-el
465 apt-get install planner-el
466 @end example
468 @subsubsection Updating Your Version
469 @cindex Debian package, updating
471 If you installed Planner from Debian, do @kbd{apt-get update; apt-get
472 upgrade} to upgrade all packages that can be upgraded, or @kbd{apt-get
473 update; apt-get install planner-el} to upgrade just planner-el.
475 @node Creating Your Planner, Components, Getting the Files, Installation
476 @section Creating Your Planner
478 Now that you have installed the files for Planner and Muse, you need
479 to set some options to create your first planner.
481 Muse thinks in terms of projects. Each project consists of a group of
482 documents and certain information associated with these
483 documents. Planner is organized as a project within Muse. So, you need
484 to tell Muse a bit about it.
486 Add something like the following code to your @file{.emacs} file.
488 First, give your new Planner project a name. In this case, we use the
489 name, ``WikiPlanner''.
491 @example
492 (setq planner-project "WikiPlanner")
493 @end example
495 Next, add an entry for your project to Muse's master list of
496 projects. Don't forget to use your own name here in place of
497 ``WikiPlanner'' if you have chosen something different.
499 @example
500 (setq muse-project-alist
501       '(("WikiPlanner"
502          ("~/Plans"           ;; where your Planner pages are located
503           :default "TaskPool" ;; use value of `planner-default-page'
504           :major-mode planner-mode
505           :visit-link planner-visit-link)
507          ;; This next part is for specifying where Planner pages
508          ;; should be published and what Muse publishing style to
509          ;; use.  In this example, we will use the XHTML publishing
510          ;; style.
512          (:base "planner-xhtml"
513                 ;; where files are published to
514                 ;; (the value of `planner-publishing-directory', if
515                 ;;  you have a configuration for an older version
516                 ;;  of Planner)
517                 :path "~/public_html/Plans"))))
518 @end example
520 This code should work fine as-is for you as long as the directories
521 you see exist, and as long as you have no other Muse projects besides
522 your planner.
524 The first directory (@file{~/Plans}) is the directory where the
525 source files for your planner will reside. This is the directory where
526 you will actually visit files and edit them.  These files must have a
527 ``.muse'' extension.
529 The second directory (@file{~/public_html/Plans}) is the directory where
530 your planner files will be published by Muse as XHTML.
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
586 @cindex @file{remember.el}
587 @cindex @file{remember-planner.el}
588 @item You can install @file{remember.el} and @file{remember-planner.el}
589 so that you can create Planner notes from anywhere. See the
590 documentation at
591 @uref{http://sacha.free.net.ph/notebook/doc/dev/remember/} for more
592 information.
594 @cindex installing the info file
595 @cindex @file{planner-el.texi}, installing
596 @cindex @file{planner-el.info}, installing
597 @item You can make this document, the Planner info file, appear in
598 the index of info files you see when you type @command{M-x info} or
599 @kbd{C-h i} in Emacs. The instructions for doing this vary depending
600 on whether you have permission to edit certain files on your
601 system. Follow the instructions in @ref{Installing an Info File, ,
602 ,texinfo, Texinfo}, using something like:
604 @example
605 * Planner: (path/to/planner/Planner). Organizer/day planner
606 for Emacs.
607 @end example
609 for the new entry in the info @file{dir} file.
611 @cindex byte compiling
612 @item You can byte-compile @file{planner.el}, @file{Muse},
613 @file{remember.el}, or any of the optional modules you frequently use,
614 in order to improve the speed of their execution. Basically, all you
615 need to do is change to the directory of each project and run
616 @command{make} from the command line. To read more detail about byte
617 compilation, see @ref{Byte Compilation, , ,elisp, Emacs Lisp Reference
618 Manual}.
620 @end itemize
622 @node Overview, Getting Started, Installation, Top
623 @comment node-name,  next,  previous,  up
624 @chapter Overview
626 Planner is a plain-text hyperlinked personal information manager
627 for Emacs that helps you keep track of tasks, notes, and other
628 information. People use Planner to support different ways of planning
629 one's day, from Franklin-Covey and David Allen's Getting Things Done
630 to home-brew hacks. Planner is even used to manage information not
631 normally handled by a personal information manager, like bugtracking,
632 time tracking, and team data. If you start by using Planner as a basic
633 TODO and notes manager, you might find other ways it can help you
634 improve your process.
636 You can use Planner to keep track of your tasks, schedule, notes,
637 and other information you want to store in hyperlinkable text files.
638 You can get the most benefit out of a personal information manager if
639 you use it everyday. Most people add @code{(plan)} to the end of their
640 @file{~/.emacs} so that Planner shows today's schedule and
641 unfinished tasks whenever Emacs starts. If you leave your Emacs
642 running for more than 24 hours, try to get into the habit of running
643 @code{plan} at least once a day.
645 Because your time is important, Planner tries to minimize
646 distractions, making it easier for you to jot down tasks and notes
647 without being distracted from your work. People often make tasks based
648 on the current buffer, so Planner tries to create hyperlinks to
649 whatever you're looking at so that you can jump back to it easily. The
650 @ref{Getting Started} tutorial will show you how to set that up for
651 both tasks and notes.
653 The customizability of Planner means you can make your personal
654 information manager truly personal. Planner strives to be as flexible
655 as possible, and we would love to adapt Planner to fit your needs.
656 Browse through our mailing list (@pxref{Getting Help}) to
657 find out how other people are using Planner, and post your feature
658 requests and bug reports there!
660 Planner is just a tool. It does not dictate a particular way of
661 planning, although it supports some ways better than it supports
662 others. If you want to take some time thinking about planning, read
663 the following reflections for inspiration and ideas. On the other
664 hand, if you want to hit the ground running, see @ref{Getting
665 Started}. If you already have a specific way of planning in mind,
666 check out @ref{Sample Configuration Files}.
668 @menu
669 * Planning based on the Franklin-Covey Approach::  
670 * Why Use Planner::             
671 @end menu
673 @node Planning based on the Franklin-Covey Approach, Why Use Planner, Overview, Overview
674 @comment  node-name,  next,  previous,  up
675 @section Planning Based on the Franklin-Covey Approach
676 @cindex philosophy of planning
678 This is a slightly edited and updated version of an essay by John
679 Wiegley. Read it if you want to get some insights into one way of
680 planning. You can skip this if you want to go straight to planning
681 your day.
683 What is planning?  It can be a nebulous thing to define.  In its
684 essence, however, it is very simple: it's how we achieve our dreams.
686 Our days are filled with time, and hence with actions, whether they
687 be of a mental or physical sort.  But there are two kinds of
688 action: reactive and creative.  Reactive action is a response to
689 the environment, a reaction to stimulus.  Had we enough instincts
690 to ensure survival, we could live according to this kind of action
691 alone.  It is a mode of behavior we share with every living
692 species.
694 The opposite to reactivity is creativity, when we decide upon a
695 course of action that is a wholly a product of personal choice.  We
696 then make decisions as to the steps needed to make this wish a
697 reality.  This is planning.  Planning is essentially a creative
698 endeavor at every step.
700 First, create the idea, what you want to achieve.  Very short-term
701 ideas do not need much more than thinking about how to do it.  But
702 long-term ideas require planning, since the mind cannot contain all
703 of the details.
705 Second, decide how the idea maps into the circumstances you find
706 yourself in.  Some environments will assist your plan, others
707 hinder it.  But step by step, identify every barrier to the
708 realization of your idea, and devise a countermeasure to overcome
709 it.  Once you've mapped things out from beginning to end,
710 accounting for unknowables as best you can, you now have your plan.
712 Third is to break the stages of the plan into parts that are not
713 overwhelming in their complexity.  It is at during this phase that
714 a plan is turned into task items, each to be accomplished within
715 the span of one day's time.  If a task requires several days, break
716 it up further.  The smaller it is, the less your mind will recoil
717 from attempting it.
719 Fourth is to monitor your progress, identifying problems and
720 correcting for them as you go.  Some plans start out unachievable,
721 and remain that way indefinitely, due to a simple lack of
722 observation.  If nothing is working for you, change it.  Otherwise,
723 your plan is merely a well-crafted wish.
725 Fifth is just to do the work, and be patient.  All good plans take a
726 great deal of time, and *cannot* happen immediately.  The groundwork
727 must be laid for each step, or else it will rest on an unsecure
728 foundation.  If you follow your plan doggedly, applying some time to
729 it each day or week, it @emph{will} happen.  Remember the story of the
730 tortoise and the hare.  I've even written a short essay on the
731 necessity of gradual accomplishment, which can be found at
732 @url{http://emacswiki.org/johnw/essays/node2.html}.
734 How can this software help?  Computers are ideal for manipulating
735 information, since they allow you to change things without erasing
736 or rewriting.  And since all plans change quite a bit during their
737 implementation, a planning program can be very helpful.
739 Start by adding the following to your @file{.emacs} (or @file{_emacs}):
741 @example
742 (load "planner")
743 @end example
745 Now, conceive your idea.  I can't believe there's nothing you want
746 from life.  More peace, time to enjoy the world, an end to war?
747 Everyone wants something.  Search deeply, and you will find
748 countless unhoped wishes lurking therein.  Choose one for now, and
749 think on it for a while.
751 Then open a file (using @kbd{C-x C-f}) within the directory named by
752 @code{planner-directory}.  Emacs will automatically recognize this file
753 as a planner file.  Name the file after your plan, such as
754 @file{BetterHealth}.
756 Choose an idea you really want to accomplish.  Struggle to
757 differentiate between the things you want because others want them,
758 and the things you want for yourself.  It takes quite an effort, and
759 may require a long time before you notice the difference.  Many people
760 want to be more healthy to be more attractive, which is an externally
761 driven goal.  Unless @emph{you} really want to accomplish what you
762 envision, the odds are you will fail.  Only our own wishes and dreams
763 possess enough personal energy to see themselves to fruition.  What
764 happens to many of us is simply that we never become conscious of
765 these dreams: what we love, what we desire most.  When I talk to
766 friends, so much of what I hear is things they want because they feel
767 they should want them.  There's just not enough energy there to pursue
768 a good plan, because nearly all of it is negative energy.
770 Do you know what you really want?  Don't worry, many people don't.
771 It's not a question anyone really wants us to pursue, because often
772 we don't want what others do; it doesn't contribute to the social
773 welfare, and all that nonsense.  Somehow we always forget that
774 what's good for the social welfare now, was someone else's crazy
775 dream a hundred years ago.  The human aversion to fundamental
776 change is always one's greatest enemy, so don't waste any time
777 getting bitter about it.
779 For the sake of argument I assume you really do want to be
780 healthier, because you've fallen in love with the ideal of purity,
781 or you understand the connection between your physical self and the
782 world around you, and how this can open up your spirit to desiring
783 more.  I assume.  :)
785 So you're in a Wiki file called @file{BetterHealth}.  Start typing.
786 Type anything related to your idea: what you think about it, your
787 ideas on it, @emph{and especially what the end will look like}.  If
788 you can't visualize the end, you can't plan, since planning is about
789 drawing a line between now and then.
791 When you've typed enough to gain a vision of your goal, start
792 drafting what the possible intermediate steps might be.  Then stop,
793 get up, walk around, enjoy life, and come back to it.  Taking a
794 long time at the beginning is not a bad idea at all, as long as
795 it's not forever.
797 As you chew on your idea, it will begin to become more and more
798 concrete.  You'll have ideas about the smallest pieces, and ideas
799 about the biggest pieces.  Keep going until it starts to take shape
800 before you, and you can see yourself in your mind's eye moving from
801 the present into the future.  Write down this progression, and the
802 sorts of things you might encounter along the way.
804 As you continue, you'll naturally discover discrete phases, or
805 ``milestones'' as managers love to call them.  These are very
806 important, because they let you know you're making progress.  I
807 recommend having a big party with friends every time you achieve a
808 milestone.  A typical plan might have between three and ten.
810 Between the milestones are the bigger pieces of your plan.  Name
811 these pieces using MixedCase words, and you'll notice that Emacs
812 colors and underlines them for you.  Like, FindGoodGym.  Hit return
813 on this highlighted word, and you'll find yourself in another,
814 blank file.  In this file, start drafting your sub-plan, just as
815 you did with the larger plan.  You should find it easier now, since
816 the scope is smaller.
818 As you break down further, you'll notice simple little things that
819 need to get done.  These are your tasks.  Every plan is a
820 succession of tasks.  The difference from reactivity is that each
821 task is part of the larger plan. This is what it means to be
822 systematic: that everything you do helps further your plan.  If you
823 have tasks in your day that contribute to no plan, they are
824 reactive.  Of course, life is full of these, but don't let them
825 take up more than 20% of your day.  If you allow yourself to be
826 dominated by reactive tasks, you'll regret it at the end of your
827 life.  I don't know this personally, but I do know that striving
828 for one's dreams -- and seeing them come to fruition -- is the
829 greatest joy a man can possess.  It is the essence of freedom, of
830 living, of creation.  Reactivity is the opposite of this, and
831 serves only to drain our energy and slacken our spirits.
833 Now that you've thought of a simple task, type @kbd{C-c C-t}. This
834 will ask for a brief description of the task, and when you plan to do
835 it. If you hit @key{RETURN} at the question @samp{When}, it assumes
836 you mean today. It will also pop up a three-month calendar at this
837 question, so you can see where your free days are. Make sure you set
838 the variable @code{mark-diary-entries-in-calendar} to @samp{t} in your
839 @file{.emacs} (or @file{_emacs}) file. This way, you can see which
840 days your appointments fall on. (Read about the Emacs Calendar and
841 Diary in @ref{Calendar/Diary, , , Emacs, GNU Emacs Manual}.)
843 @example
844 (setq mark-diary-entries-in-calendar t)
845 @end example
847 Once your task is in there, go back to your plan and keep
848 generating more tasks.  Generate them all!  Fully describe---as
849 tasks---everything necessary to bring your sub-plan to completion.
850 Don't create tasks for the other sub-plans.  You may have good idea
851 of what they'll look like, but don't bother rendering them into
852 tasks just yet.  Things will change too much between now and then,
853 for that to be a good use of your time.
855 Is your sub-plan now rendered into all of the tasks necessary to
856 reach your first milestone?  Great!  That is the purpose of
857 planner.el.  The rest is really up to you.  If you find that you
858 keep putting things off, and never do them, that's the surest sign
859 you're planning for someone else's dream, and not your own.
861 Here are some of the things planner.el can do, to help you manage
862 and track your tasks:
864 At the beginning of every day, type @kbd{M-x plan}.  This will jump
865 you to the top of the most recent task list before today.  If you
866 skipped a bunch of days, you'll have to open up those files on your
867 own.
869 Probably some of the tasks that day won't be finished -- that's OK.
870 Learning to properly estimate time is a magical, mystical art that few
871 have mastered.  Put your cursor on those undone tasks, and type
872 @kbd{C-c C-c}.  This will move them into today's task page.  You can
873 jump to today's task page at any time by typing @kbd{C-c C-n} (from a
874 Wiki or planning page).  I heartily recommend binding @kbd{C-c n}, to
875 jump you to this page from anywhere:
877 @example
878 (define-key mode-specific-map [?n] 'planner-goto-today)
879 @end example
881 As you look at your task sheet each day, the first thing to do is to
882 ``clock in'' to one of them.  This isn't necessary, and is only
883 helpful if you're around your computer a lot.  But by typing @kbd{C-c
884 C-i} (assuming you have my @file{timeclock.el} on your load-path), it
885 will log the time you spend working on your sub-plan (@pxref{Time
886 Intervals, , , Emacs, GNU Emacs Manual}).  This is helpful for viewing
887 your progress.  Type @kbd{C-c C-o} to clock out.
889 @kbd{C-M-p} and @kbd{C-M-n} will move a task up and down in priority.
890 Priority is represented by a letter A through C.  'A' tasks mean they
891 must be done that day, or else your plan is compromised and you will
892 have to replan.  'B' means they should be done that day, to further the
893 plan, otherwise things will be delayed.  'C' means you can put off the
894 task if you need to, although ultimately it will have to be done.
896 For reactive tasks, the letters mean something different: 'A' means
897 you must do it today, or somebody will roast your chestnuts over an
898 open fire.  'B' means you should do it today, or else someone will
899 be practicing patience at the day's end.  'C' means no one will
900 notice if you don't do it.
902 Again, reactive tasks are ENEMIES OF PLANNING.  Really, until you
903 see them that way, circumstances will push you around and steal
904 your life away.  We have only so many years to use, and everyone is
905 greedy to take them.  It's insidious, almost invisible.  A healthy
906 dislike of reactivity will do wonders for organizing your affairs
907 according to their true priority.
909 The last word that needs to be said concerns ``roles''.  Every person
910 stands in several positions in his life: husband, employee, manager,
911 etc.  These roles will tend to generate tasks not associated with any
912 immediate plan, but necessary to maintain the health and functioning
913 of the role.  My suggestion is to keep this the smallest possible
914 number, and fulfill those that remain well.  How you decide to
915 apportion your time between pursuing grand designs, and fostering deep
916 relationships, is a personal matter.  If you choose well, each will
917 feed the other.
919 I mention this to point that reactivity is something not
920 exclusively associated with tasks that have no master plan, because
921 being a father, for example, is something that rarely proceeds
922 according to orderly plans.  But the role of father itself is its
923 own plan, whose goal is ``to be the best one can'', and whose
924 component tasks are spending time on whatever comes up.  It is, in
925 a sense, an implicit plan.  But reactive tasks follow no plan at
926 all; they are parasites of time that suck the spirit away, whereas
927 properly chose roles actually help fulfill one's own inner needs.
928 At least, this is what I believe.
930 @defun plan force-days
931 Start your planning for the day, beginning with the last day's tasks.
933 If @code{planner-carry-tasks-forward} is non-nil, find the most recent
934 daily page with unfinished tasks and reschedule those tasks to
935 the current day.  If @var{force} is non-nil, examine all past daily
936 pages for unfinished tasks.
938 If @code{planner-carry-tasks-forward} is nil, visit the most recent
939 daily page.  If a daily page for today exists, visit that instead.
941 If @var{force-days} is a positive integer, scan that number of days.
942 If @var{force-days} is @samp{t}, scan all days.
944 @end defun
946 @node Why Use Planner,  , Planning based on the Franklin-Covey Approach, Overview
947 @comment  node-name,  next,  previous,  up
948 @section Why Use Planner?
949 @cindex Planner, why use
951 You can skip this essay if you just want to get started, or read it
952 for some insights into why the previous maintainer is crazy about it.
954 Why I Use Planner, by Sacha Chua
956 I thought about why I liked Planner. Planner as a TODO manager
957 isn't particularly special. Although I can assign tasks to categories
958 and see a breakdown of what projects are taking up my time, Evolution
959 and Microsoft Outlook provide more powerful task support. In other
960 task managers, you can e-mail tasks, assign multiple categories and
961 fill in all sorts of metadata. You can even synchronize your tasks
962 with devices like a phone or PDA. So why use Planner?
964 I realized that integration into my way of life and automatic context
965 clues are what really make planner tasks worth it for me. I don't have
966 to switch to another application to create a task. I can just hit a
967 keyboard shortcut. Planner uses a minibuffer to get the task
968 description. My windows are not rearranged in any way, and I can look
969 at the data that's relevant to a task. Not only that, tasks
970 automatically pick up context clues, like whom I'm talking to on IRC
971 or the file I'm editing at the moment. This cuts down on the explicit
972 context I need to include and makes it easier for me to bring up the
973 task again.
975 As a scheduler, Planner is also not particularly distinguished.
976 Sure, it can display my @file{~/diary}, but for that matter so can
977 @kbd{M-x diary}. Evolution and Outlook can give me a more graphical
978 view of my time, sync with my PDA, and coordinate my schedule with
979 other people. Those applications support detailed schedule entries
980 with powerful cyclic options. On the other hand, Planner gives me
981 a personal, plain text view and (at least the way I use it) requires
982 me to edit a separate file to add new appointments. (I've defined a
983 few shortcut keys to deal with this.) However, it does have one
984 advantage---my schedule is always loaded. I used to use Outlook on
985 Windows, but having my schedule in a separate application meant that I
986 actually looked at it very rarely, as I had turned off reminders
987 because they got annoying.
989 Planner's notes, however, are what really convinced me. I can hit
990 a keyboard shortcut from anywhere and type my notes into a buffer
991 which automatically keeps context information. After typing the note,
992 I can then categorize it. I think that the critical thing here is that
993 interruptions---fleeting thoughts---don't break my flow. I can just
994 pop up a remember buffer, stow that thought away somewhere, and go
995 back to it whenever I want. In contrast, creating a note in Outlook
996 means switching out of my application, making a couple of keystrokes,
997 typing the note in, and then switching back. The context switches make
998 it hard to keep track of where I am and what I'm supposed to remember.
999 Not only that, I need to enter context by hand. Even though I can
1000 color my notes and reorganize them in Outlook, I find the context
1001 switch too expensive. I used to keep notes in other knowledge
1002 management tools as well. Some applications allowed me to
1003 drag-and-drop links into the current note, and that was cool. But that
1004 required a manual action, and those applications didn't feel
1005 integrated into my way of working. (Note: You'll need remember.el for
1006 this.)
1008 I guess that's why I like Planner. Unlike other organizers which
1009 don't know anything about the applications I use, Planner tries
1010 its best to integrate into the way I work, and it's easy to extend.
1011 Fortunately I do almost all my work in Emacs, so I can think of my
1012 organizer as integrated into my e-mail client, Internet Relay Chat
1013 client, web browser, file editor and even games. It automatically
1014 picks up context clues from these applications and allows me to easily
1015 jump back to relevant files. It doesn't distract me. It allows me to
1016 key in data and then it gets out of my way.
1018 (That said, it's perfectly okay to use Planner even if you don't live
1019 in Emacs.)
1021 The processing that happens in the background is a bonus, and
1022 publishing my task list and notes online has greatly helped me. It
1023 gives other people a way to see what I'm working on and what I've
1024 planned for the future. Occasionally people write in with additional
1025 resources and helpful tips. (Again, this is purely optional. Many
1026 people don't publish their planner pages. Other people use really
1027 fine-grained access control.)
1029 I think the greatest feature of Planner, though, is its user
1030 community. Because Planner can be easily modified, we can experiment
1031 with a lot of new ideas quickly, and we can tailor Planner to fit our
1032 needs. I love checking my @samp{emacs-wiki-discuss} mail and finding
1033 out how people have tweaked Planner or would like to tweak Planner,
1034 and I've learned a lot by exchanging reflections on organizing one's
1035 life.
1037 I really wasn't an organization freak before I started using Planner.
1038 I often forgot to do my homework or answer important mail. I still
1039 procrastinate now, but at least it's all being kept track of
1040 somewhere! I also really like how Planner lets me to gradually improve
1041 how I'm doing things, and I feel I've come a long way.
1043 Please try it out! We'd love to hear how Planner can become
1044 @emph{your} personal information manager.
1046 @node Getting Started, More about Planner, Overview, Top
1047 @comment  node-name,  next,  previous,  up
1048 @chapter Getting Started
1050 At the end of this tutorial, you will be able to use Planner and
1051 related modules to keep track of your tasks, schedules and notes, all
1052 within the convenience of Emacs.
1054 There are two kinds of pages in a Planner wiki. Day pages show tasks,
1055 schedule, and notes for the day, while plan pages organize related tasks
1056 and notes into a single page.
1058 If you have not yet added planner to your @file{~/.emacs}, add the
1059 following lines:
1061 @example
1062 (add-to-list 'load-path "/path/to/muse/lisp")
1063 (add-to-list 'load-path "/path/to/planner")
1064 (add-to-list 'load-path "/path/to/remember")
1065 (require 'planner)
1066 @end example
1068 This will bring up the most recent day page with unfinished tasks or
1069 create a new day page if necessary. By default, planner pages are
1070 stored in @samp{~/Plans} (@code{planner-directory}).
1072 @menu
1073 * Tasks::                       
1074 * Schedule::                    
1075 * Notes::                       
1076 * Hyperlinks::                  
1077 * Example Page::                
1078 * Review::                      
1079 @end menu
1081 @node Tasks, Schedule, Getting Started, Getting Started
1082 @section Tasks
1084 Let us start by creating a task labelled
1086 @example
1087 Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss
1088 @end example
1090 From anywhere (even this info buffer!), call @kbd{M-x
1091 planner-create-task-from-buffer} to create a new task. Fill in the
1092 description and choose a date by:
1094 @itemize
1095 @item typing 1 - 31 to put the task on that day of the month,
1096 @item accepting the default (today) by pressing RET,
1097 @item selecting the date with mouse-1,
1098 @item
1099 typing +n (where in is an integer) to schedule the task in n days time,
1101 @item typing nil to make an undated task.
1102 @end itemize
1104 For now, accept the default (@samp{today}) by pressing @key{RET}.
1106 You will then be prompted for a plan page. Plan pages gather related
1107 tasks and notes, giving you an overview of what you've done so far.
1108 You can accept the default TaskPool, create your own plan page, or
1109 specify nil to make a task that is not associated with a plan page.
1110 For now, accept the default (@samp{TaskPool}) by pressing RET.
1112 You have created your first task. View today's page with
1113 @kbd{M-x planner-goto-today}. You will see a line of the form
1115 @example
1116 #B  _ Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss (TaskPool)
1117 @end example
1119 If you created the task from this page, then there will be an additional
1120 annotation:
1122 @example
1123 #B  _ Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss : Tasks (TaskPool)
1124 @end example
1126 The URL, @samp{TaskPool} and @samp{Getting Started} are
1127 hyperlinks. You can use TAB and S-TAB to navigate between them and RET
1128 to follow the link.
1130 Create more tasks using @kbd{M-x planner-create-task-from-buffer}.
1131 This is bound to @kbd{C-c C-t} in @code{planner-mode} pages
1132 for your convenience. For example, create the following tasks:
1134 @itemize
1135 @item
1136 @samp{Describe my current way of working and how I would like to work},
1137 for three days from now (@samp{+3}),
1138 @item
1139 @samp{Learn how to schedule a task}, an undated task (@kbd{nil}) on the
1140 TaskPool page,
1141 @item
1142 @samp{Browse through the Planner info manual} for today (@kbd{.} or
1143 accept the defaults), and
1144 @item
1145 @samp{Add (plan) to the end of my [[~/.emacs]]} for today, but without a
1146 plan page (specify @kbd{nil} at the plan page prompt)
1147 @end itemize
1149 Tip: I bind planner-create-task-from-buffer to "F9 t" so that I can
1150 easily call it from anywhere. You can do that with this elisp fragment:
1151 @code{(global-set-key (kbd "<f9> t") 'planner-create-task-from-buffer)}
1153 Next, visit the TaskPool by:
1155 @itemize
1156 @item
1157 @key{TAB}-bing or using the cursor and typing @key{RET} to follow the
1158 link,
1159 @item @kbd{C-x C-f TaskPool RET} to use @code{find-file}, or
1160 @item @kbd{C-c C-f TaskPool RET} to use @code{muse-project-find-file}
1161 @end itemize
1163 You can see an overview of the tasks as scheduled on different days.
1164 Unlike many personal information managers that store all of your data
1165 in one file and then perform magic in order to present different
1166 views, Planner uses plain text files. The data is duplicated and kept
1167 updated by functions. This makes it simpler and easier to modify,
1168 because what you see is (almost) what you get. On the other hand,
1169 you'll need to get used to either editing both files, or using the
1170 built-in functions for editing and updating files. If you prefer not
1171 to work with linked tasks, you can configure Planner to use only plan
1172 pages or use only day pages.
1174 The TaskPool page should list the tasks you created earlier. Go to the
1175 one named Learn how to schedule a task . Type @kbd{C-c C-c}
1176 (@code{planner-copy-or-move-task}) to schedule the task. Type RET to
1177 accept the default (today). Go to the day page by following the link
1178 or calling @kbd{M-x planner-goto} (@kbd{C-c C-j C-d} or the menu bar);
1179 you will see the newly-created task there. You can also use @kbd{C-c
1180 C-c} (@kbd{planner-copy-or-move-task}) to reschedule a task to an
1181 earlier or later date.
1183 Well, that task is done. To mark the task as completed, type @kbd{C-c
1184 C-x} (@code{planner-task-done}). You can also edit the status manually
1185 (change _ to X) as long as you remember to call @kbd{M-x
1186 planner-update-task} to update the link page as well. Updating relies on
1187 the task description being the same, so do not edit this manually.
1189 Quick summary of commands:
1191 @itemize
1192 @item
1193 Go to today's page: @kbd{M-x plan} to carry unfinished tasks forward, or
1194 @kbd{M-x planner-goto-today} to just go to today's page.
1195 @item
1196 Create a task: @kbd{C-c C-t} (@code{planner-create-task-from-buffer}),
1197 or type a task manually (call M-x planner-update-task if the task is
1198 linked)
1199 @item
1200 Mark a task as done: @kbd{C-c C-x} (@code{planner-task-done}), or edit
1201 the task and call @kbd{M-x planner-update-task}
1202 @item Edit a task description: @kbd{M-x planner-edit-task-description}
1203 @item Reschedule a task: @kbd{C-c C-c} (@code{planner-copy-or-move-task})
1204 @item
1205 Reschedule many tasks: Mark a region and use @kbd{M-x
1206 planner-copy-or-move-region}
1207 @item
1208 Change the plan of a task: @kbd{M-x planner-replan-task}, or @kbd{C-c
1209 C-c} (@code{planner-copy-or-move-task}) with a plan page
1210 @item Delete a task: @kbd{M-x planner-delete-task}
1211 @item
1212 Reorder tasks: @key{M-p} (@code{planner-raise-task}) and @key{M-n}
1213 (@code{planner-lower-task}), or normal editing commands like kill and
1214 yank
1215 @item Change task priorities (@samp{#A} > @samp{#B} > @samp{#C}):
1216       @key{C-M-p} (@code{planner-raise-task-priority}) and
1217       @key{C-M-n} (@code{planner-lower-task-priority}),
1218       or edit the task and call @kbd{M-x planner-update-task}.
1219 @end itemize
1221 You can save your tasks with @kbd{C-x C-s} the same way you save any
1222 other file, or Emacs will prompt you to save it when you exit.
1224 @node Schedule, Notes, Tasks, Getting Started
1225 @comment  node-name,  next,  previous,  up
1226 @section Schedule
1228 This is free-form. You can put anything you want into this, or remove
1229 it from @code{planner-day-page-template} entirely. Some people use it
1230 to keep track of their plans for the day with tables like this:
1232 @example
1233 hh:mm | hh:mm | activity
1234 hh:mm | hh:mm | activity
1235 hh:mm | hh:mm | activity
1236 @end example
1238 Remember, Planner files are just plain text. You can add new sections
1239 or remove old ones, or use the suggested sections for entirely
1240 different activities.
1242 @node Notes, Hyperlinks, Schedule, Getting Started
1243 @comment  node-name,  next,  previous,  up
1244 @section Notes
1246 You can put anything you want in this section, or remove it from your
1247 @code{planner-day-page-template} entirely.
1249 You may be interested in @file{remember-planner.el}, part of the
1250 Remember package. @code{remember-planner.el} makes it easy to create
1251 notes from anywhere in Emacs, and it uses the same hyperlink-sensing
1252 code that Planner uses. Notes added by remember-planner.el look like
1253 this:
1255 @example
1256 .#1 Headline 00:00
1257 Body
1258 @end example
1260 and are outlined at the H2 level in published HTML.
1262 If you include the following 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 you can easily create context-aware notes. @kbd{M-x remember} will
1271 create a dedicated buffer for you to fill in your note. If Planner
1272 recognizes the buffer as one with context then it will include a
1273 hyperlink at the bottom. The first line is used as a title, so make it
1274 short and meaningful. The rest of the text will be used as the body of
1275 the note. Try it now by creating a note, perhaps about things you'd
1276 like to remember from this tutorial.
1278 Typing @kbd{C-c C-c} after composing will prompt for a plan page to
1279 put this on, with auto-completion. By default, notes will go on
1280 today's page only. If you specify a plan page, the note will go on
1281 today's page and on the plan page. Let's try specifying
1282 @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. Because the text is copied, changes in one will
1287 not be automatically reflected in the other. To update the linked page
1288 after editing a note, use @kbd{M-x planner-update-note}. To change the
1289 plan page of a note, use @kbd{planner-replan-note}.
1291 @node Hyperlinks, Example Page, Notes, Getting Started
1292 @section Hyperlinks
1293 @cindex hyperlinks
1295 Planner automatically creates context-sensitive hyperlinks for your
1296 tasks and notes when you use @code{planner-create-task-from-buffer}
1297 and @code{remember}.
1299 Blue links indicate URLs and Planner pages that already exist. Red links
1300 indicate Planner pages that have not yet been created.
1302 Middle-click or type @key{RET} on any link to view the link in the
1303 current window. Shift-middle-click or type @key{S-RET} to view the
1304 link in another window. @key{TAB} goes to the next link, while
1305 @key{S-TAB} goes to the previous one.
1307 You can pick up hyperlinks using the @code{planner-annotation-as-kill}
1308 function.
1310 @defun planner-annotation-as-kill
1311 Create a context-sensitive hyperlink for the current buffer and copy
1312 it to the kill ring. When called with a prefix argument, prompt for
1313 the link display name.
1314 @end defun
1316 You can then paste it into any Planner buffer by using @kbd{M-x yank}
1317 or the keyboard shortcut.
1319 Hyperlinks are a powerful feature of Planner. You can use them to
1320 hyperlink to mail, news, Web pages, and even IRC connections. See the
1321 section on @ref{Managing Your Information} to find out how to enable
1322 support for various parts of Emacs. Want to add a new hyperlink
1323 scheme? Check out the source code for examples or ask on the mailing
1324 list for help.
1326 @node Example Page, Review, Hyperlinks, Getting Started
1327 @comment  node-name,  next,  previous,  up
1328 @section Example Page
1329 @cindex example page
1330 @cindex planning page, example
1332 An example planner file is given below. You'll notice that Planner
1333 does not have a well-defined user interface. Rather, it's free-form
1334 and open, allowing you to adapt it to your preferences.
1336 @example
1337 ----------------------------------------------------------------------
1338 * Tasks
1340 #B  _ Join http://lists.nongnu.org/mailman/listinfo/emacs-wiki-discuss (TaskPool)
1341 #B  _ Browse through the Planner info manual (TaskPool)
1342 #B  _ Add (plan) to the end of my ~/.emacs
1343 #B  X Learn how to schedule a task (TaskPool)
1345 * Schedule
1347 18:00 | 19:00 | Learn how to use Planner
1349 * Notes
1351 Notes are free-form. You can put anything you want into this.
1353 .#1 This is note number one
1355 Notes on note number one!
1357 .#2 This weird ".#2" syntax is used for allout.el enumerated lists
1359 It makes using allout-mode very handy.
1361 @end example
1363 @node Review,  , Example Page, Getting Started
1364 @comment  node-name,  next,  previous,  up
1365 @section Review
1367 @itemize
1369 @item @emph{Ideas for using planner more effectively:}
1371 @itemize
1372 @item
1373 Add @code{(plan)} to the end of your @file{~/.emacs} so that you are
1374 reminded about your tasks every day.
1376 @item
1377 Bind useful functions to shortcut keys and get used to creating tasks
1378 and notes from anywhere.
1380 @item
1381 Think about how you plan your day and look for ways to improve it. Ask
1382 the mailing list (@pxref{Getting Help}) for tips.
1384 @item
1385 Browse the rest of this manual, the source code, and other resources on
1386 the Net for tidbits you can use.
1388 @item Have fun!
1389 @end itemize
1391 @item @emph{Useful functions outside planner buffers:}
1393 @itemize
1394 @item @code{planner-create-task-from-buffer}
1395 @item @code{remember}
1396 @item @code{planner-goto-today}
1397 @item @code{planner-goto}
1398 @item @code{plan}
1399 @end itemize
1401 @item @emph{Useful functions inside planner buffers:}
1403 @itemize
1404 @item @kbd{C-c C-t} (@code{planner-create-task-from-buffer})
1405 @item @kbd{C-c C-x} (@code{planner-task-done})
1406 @item @kbd{M-x planner-edit-task-description}
1408 @item
1409 @kbd{C-c C-c} (@code{planner-copy-or-move-task}), @kbd{M-x
1410 planner-copy-or-move-region}
1412 @item @kbd{M-x planner-replan-task}
1413 @item @kbd{M-x planner-delete-task}
1415 @item
1416 @key{M-p} (@code{planner-raise-task}) and @key{M-n}
1417 (@code{planner-lower-task})
1419 @item @key{C-M-p} (@code{planner-raise-task-priority}) and
1420       @key{C-M-n} (@code{planner-lower-task-priority}),
1421 @item @code{planner-replan-note}
1422 @item @code{planner-update-note}
1423 @end itemize
1425 @end itemize
1427 That's all you need to know in order to use Planner as a basic TODO and
1428 notes manager, but there's a whole lot more. Read through this manual
1429 and our mailing list archives (@pxref{Getting Help}) for lots of
1430 wonderful ideas about planning in Emacs!
1432 @node More about Planner, Managing Your Information, Getting Started, Top
1433 @comment  node-name,  next,  previous,  up
1434 @chapter More about Planner
1436 @menu
1437 * Navigation::                  
1438 * More about Tasks::            
1439 * More about Notes::            
1440 * Making Files Pretty::         
1441 * Annotations::                 
1442 * Interactive Lisp::            planner-lisp.el
1443 * Publishing::                  planner-publish.el
1444 * Experimental Functions::      planner-experimental.el
1445 @end menu
1447 @node Navigation, More about Tasks, More about Planner, More about Planner
1448 @comment  node-name,  next,  previous,  up
1449 @section Starting with Day Pages
1451 @command{planner-goto-today} opens today's page.  Day pages are named
1452 @samp{YYYY.MM.DD} and contain your notes for the day.
1454 You should see a file that looks like this:
1456 @example
1457 * Tasks
1460 * Schedule
1462 * Notes
1463 @end example
1465 You can type anything you want into this file.  You can add or delete
1466 sections.  When you save, Emacs stores your information in
1467 @code{planner-directory}.
1469 Use the following commands to navigate through day pages:
1471 @defun plan
1472 Start planning the day.  If @code{planner-carry-tasks-forward} is
1473 non-nil, copy the most recent unfinished tasks to today's page, else
1474 open the most recent page.
1475 @end defun
1477 @defun planner-goto (@kbd{C-c C-j C-d})
1478 Prompt for a date using a calendar pop-up and display the
1479 corresponding day page.  You can specify dates partially.  The current
1480 year and month are used if omitted from the input.  For example, if
1481 today is 2004.05.05, then
1483 @itemize
1484 @item @kbd{+1} is one day from now, or @samp{2004.05.06}
1485 @item @kbd{-1} is one day before now, or @samp{2004.05.04}
1486 @item @kbd{12} is equivalent to @samp{2004.05.12}
1487 @item @kbd{8.12} is equivalent to @samp{2004.08.12}
1488 @item @kbd{2005.08.12} is a full date specification
1489 @end itemize
1491 In the calendar buffer, you can also left-click or press @key{RET} on
1492 a date to select it.
1493 @end defun
1495 @defun planner-goto-today (@kbd{C-c C-j C-j})
1496 Display today's page. Create the page if it does not yet exist.
1497 @end defun
1499 @defun planner-goto-tomorrow (@kbd{C-c C-j C-t})
1500 Goto the planner page days @var{after} the currently displayed date.
1501 If @var{days} is nil, go to the day immediately after the currently
1502 displayed date.  If the current buffer is not a daily planner page,
1503 calculate date based on today.
1504 @end defun
1506 @defun planner-goto-yesterday (@kbd{C-c C-j C-y})
1507 Goto the planner page @var{days} before the currently displayed date.
1508 If @var{days} is nil, go to the day immediately before the currently
1509 displayed date.  If the current buffer is not a daily planner page,
1510 calculate date based on today.
1511 @end defun
1513 @defun planner-goto-most-recent
1514 Go to the most recent day with planning info.
1515 @end defun
1517 @defun planner-goto-previous-daily-page
1518 Goto the last plan page before the current date.
1519 The current date is taken from the day page in the current
1520 buffer, or today if the current buffer is not a planner page.
1521 Do not create pages if they do not yet exist.
1522 @end defun
1524 @defun planner-goto-next-daily-page
1525 Goto the first plan page after the current date.
1526 The current date is taken from the day page in the current
1527 buffer, or today if the current buffer is not a planner page.
1528 Do not create pages if they do not yet exist.
1529 @end defun
1531 @defun planner-goto-plan-page page
1532 Opens @var{page} in the the @code{planner-project} Wiki.  Use
1533 @code{planner-goto} if you want fancy calendar completion.
1534 @end defun
1536 @defun planner-show date
1537 Show the plan page for @var{date} in another window, but don't select
1538 it.  If no page for @var{date} exists, return nil.
1539 @end defun
1542 @node More about Tasks, More about Notes, Navigation, More about Planner
1543 @comment  node-name,  next,  previous,  up
1544 @section More about Tasks
1545 @cindex tasks, more about
1547 This section is divided into three parts. In the first part, you can
1548 read about all the options, strategies and commands to help you
1549 efficiently add new tasks to your planner. In the second part, we'll go
1550 over all of the aspects of Planner that relate to organizing, editing,
1551 rescheduling and viewing the tasks you've already created. Finally,
1552 we'll cover some ways to step back and look at various reports and
1553 overviews that can be generated from your planner pages.
1555 You may also be interested in tracking time spent on tasks with
1556 @ref{Timeclock} and estimating project completion time with
1557 @ref{Schedule} (also see @pxref{schedule.el}).
1559 @menu
1560 * Creating New Tasks::          
1561 * Organizing Your Tasks::       
1562 * Task Reports and Overviews::  
1563 @end menu
1565 @node Creating New Tasks, Organizing Your Tasks, More about Tasks, More about Tasks
1566 @comment  node-name,  next,  previous,  up
1567 @subsection Creating New Tasks
1568 @cindex tasks, creating
1570 Planner makes it very easy to quickly add something to your list of
1571 tasks. Once you get used to the basics of
1572 @command{planner-create-task-from-buffer}, you might want to take a
1573 closer look at some things in Planner that can help you create new tasks
1574 in a way that fits with your system.
1576 @menu
1577 * Creating a Task::             
1578 * Task Priorities::             
1579 * Task IDs::                    planner-id.el
1580 * Cyclic Tasks::                planner-cyclic.el
1581 * Task Detail::                 
1582 * Deadlines::                   planner-deadline.el
1583 @end menu
1585 @node Creating a Task, Task Priorities, Creating New Tasks, Creating New Tasks
1586 @comment  node-name,  next,  previous,  up
1587 @subsubsection Creating a Task
1588 @cindex tasks, creating
1590 You can create a task from any buffer in Emacs by invoking
1591 @command{M-x planner-create-task-from-buffer}.
1593 This command does more than just add an item to your list of tasks. It
1594 also connects that item to some useful context information.
1596 If you create a task while viewing any buffer other than a Planner
1597 day page, Planner will associate the task with a hyperlink to that
1598 buffer. Try it now by creating a task from this Info buffer.
1600 @enumerate
1601 @item @kbd{M-x planner-create-task-from-buffer}
1602 @item
1603 When prompted for the task name, enter @kbd{Learn how to change a task's
1604 status} and press @key{RET}.
1606 @item
1607 When prompted for the date, press @key{RET} to schedule the task for
1608 today.
1610 @item
1611 When prompted for the project page, press @key{RET} to accept the
1612 default page of @samp{TaskPool}. This is a page for tasks not connected
1613 to a larger plan.
1615 @end enumerate
1617 Planner prompts you for two pieces of information when you ask it
1618 to create a task. First, it asks you when you would like to have the
1619 task show up in your planner. If you would like it to be scheduled for
1620 today, you can just hit @key{RET}. If you would like it to be
1621 scheduled for some day during the current month, you can just enter
1622 the date, without the month, like @samp{16}. If you would like it to
1623 be scheduled for some day in a future month of the current year, you
1624 can enter just the month and date, like @samp{06.16}. If you would
1625 like to schedule something for next year, then enter the full date,
1626 like @samp{06.16.2005}. If you do not want this task to appear on a
1627 day page at all, you can enter @samp{nil}.
1629 The second piece of information Planner asks for is the name of
1630 the project to associate the task with. In the above example, you
1631 associated the task with the project ``TaskPool'', which means that
1632 you did not want to associate the task with a particular project or
1633 goal in your life. Another way to do this is to answer the project
1634 prompt by entering @samp{nil}. But instead, you might enter
1635 @samp{LearnPlanner} as the project. This creates a new page called
1636 ``LearnPlanner'' in your planner directory and places an entry for the
1637 task on that page.
1639 The task then exists in two places: once on your day page, to show how
1640 it fits into your daily work; and once on a project page, to show how
1641 it fits into your larger projects and goals. In the future you might
1642 add related tasks like, ``Memorize Planner keybindings''. These
1643 tasks might be scattered over weeks or months worth of day pages, but
1644 as long as you enter the same project name for each, you will have a
1645 way to look at them all together on a single project page.
1647 Planner also creates hyperlinks to enable you to easily move back
1648 and forth between the day page system and the project page
1649 system. Each task on a day page will have a hyperlink to its project
1650 page. Each task on a project page will have a hyperlink to its day
1651 page.
1653 After using Planner for a while, you may find yourself with quite
1654 a few project pages. Keep in mind that completion is enabled at the
1655 project prompt when you create a task, so hitting @kbd{SPC} or
1656 @kbd{TAB} at the prompt will show you a list of your current project
1657 pages.
1659 Once the task is created, you are returned to the buffer you were
1660 working in again, Planner gets out of your way, and you can go on
1661 about your business. Later on, when you decide to actually work on
1662 that ``Memorize Planner keybindings'' task, you will be able to
1663 follow the hyperlink from that task on your day or project page
1664 directly to the relevant node in the Planner info file!
1666 By default, @command{M-x planner-create-task-from-buffer} creates
1667 medium-priority tasks, marked with the letter @samp{B}.  But you can
1668 specify a particular priority or change the default (@pxref{Task
1669 Priorities}).
1671 You don't have to use @command{planner-create-task-from-buffer} to
1672 create tasks. You can also create new tasks manually by typing them
1673 directly on your day or project page in the format Planner expects. You
1674 can even still create hyperlinks by using Muse formatting as you
1675 manually type the new task. Keep in mind also that tasks do not have to
1676 be linked to any other page.
1678 For convenience, @command{planner-create-task-from-buffer} is bound to
1679 @kbd{C-c C-t} in Planner buffers.  You can bind
1680 @command{planner-create-task-buffer} to a shortcut key.  See the
1681 manual for your Emacs distribution to find out more about keybinding.
1683 @defun planner-create-task-from-buffer title date plan-page
1684 Create a new task named @var{title} on @var{date} based on the current
1685 buffer.
1687 With a prefix, associate the task with the current planner page.  If
1688 you create a task on a date page, you will be prompted for a plan
1689 page.  If you create a task on a plan page, you will be prompted for a
1690 day page.  If nil is specified, the task is created only on the
1691 current page.
1693 See @code{planner-create-task} for more information.
1695 The new task is created at the top or bottom of the first block of
1696 tasks on the scheduled day page (if any), depending on the value of
1697 @code{planner-add-task-at-end-flag}.
1698 @end defun
1700 @defun planner-create-task title date annotation plan-page
1701 Create a new task named @var{title} based on the current Wiki page.
1702 If @var{date} is non-nil, makes a daily entry on @var{date}, else
1703 makes an entry in today's planner page. It's assumed that the current
1704 Wiki page is the page you're using to plan an activity. Any time
1705 accrued to this task will be applied to that page's name in the
1706 timelog file, assuming you use timeclock (@pxref{Time Intervals, , ,
1707 Emacs, GNU Emacs Manual}). If @var{annotation} is non-nil, it will be
1708 used for the page annotation. If @var{plan-page} is non-nil, the task
1709 is associated with the given page.
1711 With a prefix, associate the task with the current planner page.  If
1712 you create a task on a date page, you will be prompted for a plan
1713 page.  If you create a task on a plan page, you will be prompted for a
1714 day page.  If nil is specified, the task is created only on the
1715 current page.
1717 You probably want to call @code{planner-create-task-from-buffer}
1718 instead.
1720 The new task is created at the top or bottom of the first block of
1721 tasks on the scheduled day page (if any), depending on the value of
1722 @code{planner-add-task-at-end-flag}.
1723 @end defun
1725 @node Task Priorities, Task IDs, Creating a Task, Creating New Tasks
1726 @comment  node-name,  next,  previous,  up
1727 @subsubsection Task Priorities
1729 You can set the priority of a task when you create it, rather than
1730 waiting to adjust it after the fact. In order to do this, call the
1731 function corresponding to the priority you want. You probably want to
1732 bind these functions to some keys if you intend to use them much.
1734 @itemize
1735 @item @code{planner-create-high-priority-task-from-buffer}
1736 creates a task with priority @samp{A}.
1738 @item @code{planner-create-medium-priority-task-from-buffer}
1739 creates a task with priority @samp{B}.
1741 @item @code{planner-create-low-priority-task-from-buffer}
1742 creates a task with priority @samp{C}.
1743 @end itemize
1745 Or, you can change the default priority of
1746 @command{planner-create-task-from-buffer} by customizing
1747 @var{planner-default-task-priority}.
1749 You can actually use just one general priority, but using more than
1750 one color-codes your tasks and gives you a better overview of your
1751 day.
1754 @node Task IDs, Cyclic Tasks, Task Priorities, Creating New Tasks
1755 @comment  node-name,  next,  previous,  up
1756 @subsubsection Task IDs
1757 @cindex @file{planner-id.el}, using
1758 @cindex tasks, IDs
1760 After loading @file{planner.el}, make sure that @file{planner-id.el} is
1761 in your load path and add this to your @file{.emacs} (or @file{_emacs}):
1763 @example
1764 (require 'planner-id)
1765 @end example
1767 This module modifies the behavior of @file{planner.el}, adding global
1768 task IDs so that tasks can be edited and updated. Planner IDs are of
1769 the form @samp{@{@{Identifier:Number@}@}}.
1771 @subheading Options
1773 @defopt planner-id-add-task-id-flag
1774 Non-nil means automatically add global task IDs to newly-created
1775 tasks. If nil, use @command{planner-id-add-task-id} to add IDs to
1776 existing tasks, or @command{planner-id-add-task-id-to-all} to add to
1777 all tasks on the current page.
1778 @end defopt
1780 @defopt planner-id-update-automatically
1781 Non-nil means automatically update linked tasks whenever a page is
1782 saved. If nil, use @command{planner-update-task} to update the linked
1783 task. By default, linked tasks are automatically updated.
1784 @end defopt
1786 @defopt planner-id-tracking-file
1787 File that contains ID tracking data. This file is automatically
1788 overwritten.
1789 @end defopt
1791 @subheading Functions
1793 The following interactive functions are defined in @file{planner-id.el}:
1795 @defun planner-id-jump-to-linked-task &optional info
1796 Display the linked task page. If @var{info} is specified, follow that
1797 task instead.
1798 @end defun
1800 @defun planner-id-add-task
1801 Add a task ID for the current task if it does not have one
1802 yet. Update the linked task page, if any.
1803 @end defun
1805 @defun planner-id-update-tasks-on-page &optional force
1806 Update all tasks on this page. Completed or cancelled tasks are not
1807 updated. This can be added to @code{write-file-functions}. If
1808 @var{force} is non-nil, completed and cancelled tasks are also
1809 updated.
1810 @end defun
1812 @defun planner-id-add-task-id-to-all
1813 Add a task ID for all the tasks on the page. Update the linked page,
1814 if any.
1815 @end defun
1817 @defun planner-id-search-id id
1818 Search for all occurrences of @var{id}.
1819 @end defun
1821 @defun planner-id-follow-id-at-point
1822 Display a list of all pages containing the ID at point.
1823 @end defun
1825 @defun planner-id-follow-id-at-mouse event
1826 Display a list of all pages containing the ID at mouse. @var{event} is
1827 the mouse event.
1828 @end defun
1830 @node Cyclic Tasks, Task Detail, Task IDs, Creating New Tasks
1831 @comment  node-name,  next,  previous,  up
1832 @subsubsection Cyclic Tasks
1833 @cindex @file{planner-cyclic.el}, using
1834 @cindex tasks, cyclic
1835 @cindex cyclic tasks
1836 @cindex recurring tasks
1838 If there are tasks that you have to do regularly, you can have Planner
1839 schedule those tasks automatically.
1841 Make sure that @file{planner-cyclic.el} is in your load path and add
1842 this to your @file{.emacs} (or @file{_emacs}):
1844 @example
1845 (require 'planner-cyclic)
1846 @end example
1848 Create a diary file named @file{~/.diary.cyclic-tasks}
1849 (or the value of @code{planner-cyclic-diary-file}). Here is an example:
1851 @example
1852 Tuesday #B0 _ Study Japanese
1853 Friday #B0 _ Study Japanese (JapaneseStudies)
1854 @end example
1856 The first will be a plain task, the second will be linked.  The first
1857 line will automatically create its task every Tuesday, while the
1858 second will create it every Friday.
1860 You can schedule tasks in a variety of ways. This module uses the same
1861 syntax for specifying when tasks will be scheduled as the Emacs diary
1862 uses for appointments and events. See @ref{Date Formats, the GNU Emacs
1863 Manual, Date Formats,emacs, the GNU Emacs Manual}, and @ref{Sexp Diary
1864 Entries, the GNU Emacs Lisp Reference Manual, Sexp Diary
1865 Entries,elisp, the GNU Emacs Lisp Reference Manual}, for a full
1866 description of the possibilities.
1868 By default, planner-cyclic creates multiple tasks if you let tasks build
1869 up (that is, the next Tuesday rolls around and you @emph{still} haven't
1870 marked the task as done.) To turn off this behavior:
1872 @example
1873 (setq planner-cyclic-diary-nag nil)
1874 @end example
1876 @subheading Functions
1878 @file{planner-cyclic-diary} includes the following interactive
1879 functions:
1881 @defun planner-cyclic-create-tasks-maybe
1882 Maybe create cyclic tasks. This will only create tasks for future
1883 dates or today.
1884 @end defun
1886 @node Task Detail, Deadlines, Cyclic Tasks, Creating New Tasks
1887 @comment  node-name,  next,  previous,  up
1888 @subsubsection Task Detail
1889 @cindex tasks
1891 You may find your planner pages getting very full, so that you want to
1892 have one broad task entry be linked to a more specific list of
1893 sub-tasks. Or, maybe you want to have a number of notes linked to a
1894 particular task.
1895 @cindex tasks, sub-
1896 @cindex tasks, meta-
1897 @cindex meta-tasks
1898 @cindex sub-tasks
1900 This can be done with targets.  You can have a task that is really a
1901 meta-task:
1903 @example
1904 #A1  _ Do things in RevelleLog#13 @{@{Tasks:101@}@} (RevelleLog)
1905 @end example
1907 @samp{RevelleLog#13} could then be a list of sub-tasks in the form of
1908 a note, or any kind of note.
1910 Or, instead of pointing to a particular note on @samp{RevelleLog}, you
1911 could have the whole page be tasks that you enter in manually, without
1912 linking them to another page. You can just type them in like this:
1914 @example
1915 #A1  _ First specific thing to do
1916 @end example
1918 This way, the tasks will only appear on this specific project page,
1919 and not on any daily page, so you only see them when you want to look
1920 up all of the specific tasks associated with @samp{#A1  _ Do things in
1921 RevelleLog @{@{Tasks:101@}@} (RevelleLog)}.
1923 As you can see, the ability to manually enter tasks is one of
1924 Planner's nicest features. It allows you to create tasks that are
1925 not assigned to a specific date (by manually entering them on a
1926 project page with no date) or to a specific project (by manually
1927 entering them on a day page with no project). Yet as long as you enter
1928 them using the syntax it understands, Planner will continue to
1929 recognize them as tasks.
1931 Another way to have a task not be connected to a particular date is to
1932 do @kbd{C-c C-c} (@code{planner-copy-or-move-task}) and specify
1933 @samp{nil} when asked for the date.
1935 If you would like to see a list of all of your unfinished tasks, do
1936 @kbd{M-x planner-list-unfinished-tasks}. This function only checks
1937 day plan pages, not project pages.
1939 @node Deadlines,  , Task Detail, Creating New Tasks
1940 @comment  node-name,  next,  previous,  up
1941 @subsubsection Deadlines
1942 @cindex tasks, deadlines for
1943 @cindex deadlines, task
1944 @cindex @file{planner-deadline.el}, using
1946 You can use @file{planner-deadline.el} to automatically recalculate
1947 days to a deadline by adding @code{(require 'planner-deadline)} to
1948 your @file{~/.emacs}. With the default setup, make your tasks of the
1949 form
1951 @example
1952 #A0 _ Some task @{@{Deadline: 2004.09.12@}@}
1953 @end example
1955 (Note: There must be at least one space after the colon.)
1957 After you run @code{planner-deadline-update} to update task descriptions,
1958 the task will be of the form
1960 @example
1961 #A0 _ Some task @{@{Deadline: 2004.09.12 - 2 days@}@}
1962 @end example
1964 @subheading Options
1966 @defopt planner-deadline-regexp
1967 Regular expression for deadline data.
1968 The special deadline string should be regexp group 1. The
1969 date (YYYY.MM.DD) should be regexp group 2.
1970 @end defopt
1972 @subheading Functions
1974 @defun planner-deadline-update
1975 Replace the text for all tasks with deadlines. Deadlines are of the
1976 form @samp{@{@{Deadline: YYYY.MM.DD@}@}} by default.
1977 @end defun
1979 @defun planner-deadline-change &optional date
1980 Change the deadline of current task to @var{date}. If @var{date} is nil,
1981 remove deadline.
1982 @end defun
1984 @node Organizing Your Tasks, Task Reports and Overviews, Creating New Tasks, More about Tasks
1985 @comment  node-name,  next,  previous,  up
1986 @subsection Organizing Your Tasks
1987 @cindex tasks, organizing
1988 @cindex tasks, old
1990 Okay, now that you've gotten the hang of creating tasks, you're probably
1991 facing a really long list of things to do. How can you organize them so
1992 that they don't overwhelm you? Planner gives you a number of strategies
1993 for dealing with large numbers of tasks.
1995 @enumerate
1996 @item Arrange your tasks in the rough order you're going to do them.
1997 @item Use #A, #B and #C task priorities to differentiate between
1998       high-priority, normal and low-priority tasks.
1999 @item Schedule your tasks onto different days.
2000 @item Group your tasks into plan pages.
2001 @item Don't schedule all your tasks.
2002 @end enumerate
2004 @enumerate
2006 @item @emph{Task order}
2008 To remind yourself to do tasks in a certain order, simply edit the
2009 lines so that they're in the order you want. You can use normal
2010 editing commands like kill, yank and transpose-line to reorder the
2011 tasks, or use @key{M-p} (@code{planner-raise-task}) and @key{M-n}
2012 (@code{planner-lower-task}) to rearrange the tasks.
2014 @item @emph{Task priorities}
2016 By default, tasks are created with medium priority (@samp{#B}). You
2017 can make a task high-priority (@samp{#A}) or low-priority (@samp{#C})
2018 by manually editing the task and calling M-x planner-update-task to
2019 update the linked page. Alternatively, you can use @key{C-M-p}
2020 (@code{planner-raise-task-priority}) and @key{C-M-n}
2021 (@code{planner-lower-task-priority}) to modify the task and update the
2022 linked page.
2024 You can edit the priority of a task using @kbd{M-x
2025 planner-edit-task-priority}, or manually edit it and call @kbd{M-x
2026 planner-update-task} to update tasks on the linked page.
2028 @item @emph{Schedule your tasks on different days}
2030 You don't have to do everything today. Is this a task you would rather
2031 do tomorrow? Schedule it for then instead. You can specify @samp{+n}
2032 or @samp{-n} whenever you are asked for a date, where @var{n} is the
2033 number of days before or after the current file's date or today.
2034 Don't over-procrastinate things, though!
2036 @item @emph{Plan pages}
2038 Plan pages let you group related tasks and notes together for easy
2039 reference. For example, you could have a plan page for each major
2040 project or goal in your life, like @samp{GoodHealth} or
2041 @samp{FurtherStudies}.
2043 Although plan pages start by grouping everything under a @samp{*
2044 Tasks} header, you can organize your plan pages in different ways. For
2045 example, you can separate groups of tasks with blank lines, and
2046 Planner will sort tasks within each group.
2048 @item @emph{Tasks without dates}
2050 Plan pages also allow you to have undated tasks or tasks with no
2051 particular deadlines. This keeps your daily task list small and
2052 manageable while making it easier for you to find things to do if you
2053 have free time. Make sure you check your plan pages regularly so that
2054 you don't completely forget about them.
2056 For automated scheduling of the next task on a plan page after you
2057 complete a task, see the section in
2058 @uref{http://sacha.free.net.ph/notebook/emacs/planner-config.el} named
2059 ``Schedule next undated task from same project''.
2061 @end enumerate
2064 @menu
2065 * Multiple Projects::           
2066 * Viewing Tasks::               
2067 * Modifying Tasks::             
2068 * Carrying Over Unfinished Tasks::  
2069 * Task Numbering::              
2070 * Task Ranks::                  planner-rank.el
2071 * Grouping Tasks::              planner-trunk.el
2072 @end menu
2074 @node Multiple Projects, Viewing Tasks, Organizing Your Tasks, Organizing Your Tasks
2075 @comment  node-name,  next,  previous,  up
2076 @subsubsection Associating Tasks with Multiple Projects
2077 @cindex multiple projects
2078 @cindex planner-multi.el, using
2080 You can use @file{planner-multi.el} to associate a task with more than
2081 one project. That way, you can easily keep GTD-style context lists as
2082 well as project-related lists.
2084 To use multiple projects, add the following to your @samp{~/.emacs}:
2086 @example
2087 (require 'planner-multi)
2088 @end example
2090 Under GNU Emacs, you can specify multiple projects by separating them
2091 with a single space. For example, you can specify @kbd{planner doc}
2092 when creating a task to associate the task with those two projects.
2094 Under XEmacs, you can specify multiple projects by typing @kbd{RET}
2095 after each entry and terminating the list with another @kbd{RET}. For
2096 example, to specify @kbd{planner} and @kbd{doc}, you would type
2097 @kbd{planner RET doc RET RET} at the prompt.
2099 If you want to see an overview of all of your tasks as well as
2100 project- or context-specific lists, you can set
2101 @code{planner-multi-copy-tasks-to-page} to your overview page(s). For
2102 example, set it to @samp{TaskPool} to be able to see an overview of
2103 all of your unfinished tasks. You can also set this to multiple pages
2104 such as @samp{[[TasksByProject][p]] [[TasksByContext][c]]} and use
2105 @file{planner-trunk.el} to sort and organize tasks for easy reference.
2106 (@pxref{Grouping Tasks})
2108 @subheading Options
2110 @defopt planner-multi-copy-tasks-to-page
2111 Automatically copy newly-created tasks to the specified page.
2112 @end defopt
2114 By default, tasks are removed from
2115 @code{planner-multi-copy-tasks-to-page} when you call
2116 @code{planner-task-done} or @code{planner-task-cancelled}. If you
2117 prefer to keep a copy of the task, remove
2118 @code{planner-multi-remove-task-from-pool} from
2119 @code{planner-mark-task-hook}.
2121 If you want to use a different separator instead of spaces, customize
2122 the @code{planner-multi-separator} variable.
2124 @defopt planner-multi-separator
2125 String that separates multiple page references.
2127 For best results, this should be something recognized by
2128 @code{muse-link-at-point} so that links are highlighted
2129 separately.
2130 @end defopt
2132 @node Viewing Tasks, Modifying Tasks, Multiple Projects, Organizing Your Tasks
2133 @comment  node-name,  next,  previous,  up
2134 @subsubsection Viewing tasks
2135 @cindex tasks, viewing
2137 Review the tasks scheduled for today by typing @kbd{M-x
2138 planner-goto-today}.  If you created the task from the previous
2139 section in this tutorial, you should see a line that looks like
2141 @example
2142 #A _ Learn how to change a task's status from Tasks (TaskPool)
2143 @end example
2145 If you have @code{planner-use-task-numbers} set to non-nil, you will see
2146 something like the following instead.
2148 @example
2149 #A0 _ Learn how to change a task's status from Tasks (TaskPool)
2150 @end example
2152 From left to right, these are what the symbols mean:
2154 @itemize
2155 @item @samp{A} - Priority.  A (high)
2156 @item
2157 @samp{0} - Priority number.  It is calculated whenever you save the file
2158 or call @command{planner-renumber-tasks}, provided that
2159 @code{planner-use-task-numbers} is non-nil.  Tasks are numbered in
2160 ascending order according to priorities.
2161 @item @samp{_} - Status.  _ (unfinished)
2162 @end itemize
2164 If you click on @samp{Tasks} or press @key{RET} while your cursor is
2165 in the link, Emacs will display the previous info page.
2167 If you select @samp{TaskPool}, Emacs will display the @samp{TaskPool}
2168 plan page.  Plan pages organize your tasks and notes about a project
2169 in one file.
2171 @subheading Functions
2173 You can use @command{planner-seek-next-unfinished-task} to move to the
2174 next unfinished task on the current page.
2176 @defun planner-list-tasks-with-status status &optional pages
2177 Display all tasks that match the STATUS regular expression on all day
2178 pages.  The PAGES argument limits the pages to be checked in this
2179 manner:
2181 @itemize
2182 @item @code{t}: check all pages
2183 @item regexp: search all pages whose filenames match the regexp
2184 @item list of page names: limit to those pages
2185 @item alist of page/filenames: limit to those pages
2186 @end itemize
2188 Called interactively, this function will search day pages by
2189 default. You can specify the start and end dates or leave them as
2190 nil to search all days. Calling this function with an interactive
2191 prefix will prompt for a regular expression to limit pages.
2192 Specify @samp{.} or leave this blank to include all pages.
2194 This function could take a long time.
2195 @end defun
2197 @defun planner-list-unfinished-tasks &optional pages
2198 Display all unfinished tasks. @var{pages} follows
2199 planner-list-tasks-with-status.
2200 @end defun
2202 @defun planner-jump-to-linked-task task-info
2203 Display the task page linked to by the current task or
2204 @var{task-info}.
2205 @end defun
2207 @node Modifying Tasks, Carrying Over Unfinished Tasks, Viewing Tasks, Organizing Your Tasks
2208 @comment  node-name,  next,  previous,  up
2209 @subsubsection Modifying Tasks
2210 @cindex tasks, modifying
2211 @cindex tasks, editing
2213 To select a task, move your cursor to the line containing the task.
2215 Change a task's priority (@samp{A}, @samp{B} or @samp{C}) by editing
2216 the line. @samp{#A} tasks are important. @samp{#B} are medium
2217 priority. @samp{#C} are low priority. Whenever you save the file or
2218 call @kbd{M-x planner-fix-tasks}, tasks are sorted and numbered
2219 according to priority and status.
2221 Change a task's status by calling one of the following functions:
2223 @itemize
2224 @item planner-task-in-progress @samp{o} (@kbd{C-c C-z})
2225 @item planner-task-done @samp{X} (@kbd{C-c C-x})
2226 @item planner-task-cancelled @samp{C} (@kbd{C-c C-S-x})
2227 @item planner-task-delegated @samp{D}
2228 @item planner-task-pending @samp{P}
2229 @item planner-task-open @samp{_}
2230 @end itemize
2232 After changing the status using a function, look at the
2233 @samp{TaskPool} plan page.  The task is also updated on the linked
2234 page.  If you changed the task status manually by replacing the status
2235 with another character, you will need to call
2236 @command{planner-update-task} to update the linked page.
2238 To reschedule a task, call @command{planner-copy-or-move-task} (@kbd{C-c
2239 C-c}) and choose a new date.  You can mark a region and type @kbd{M-x
2240 planner-copy-or-move-region} to reschedule all the contained tasks to a
2241 different date.  Enter @samp{nil} for the date if you don't want the
2242 task or group of tasks to appear on any date page at all anymore. This
2243 is a good way to ``de-schedule'' a task for the time being, but still
2244 keep it linked to a plan page for possible future scheduling.
2246 To change the plan page associated with a task, call
2247 @command{planner-replan-task}.  Enter @samp{nil} for the plan page if
2248 you don't want the task to appear on any plan page anymore. If you
2249 precede the command with a prefix argument, the text of the original
2250 plan page will appear in the prompt for easy editing.
2252 Since the same task may exist on two or more pages, such as a date page
2253 and a plan page, it is dangerous to edit the description of the task by
2254 hand. You should not do it unless you want to make the exact same
2255 changes on all its linked pages.
2257 Instead of doing this by hand, you should use
2258 @command{planner-edit-task-description}. This will prompt you for the
2259 changes to the task description and then update all the other pages to
2260 which the task is linked.  Or, you can just use
2261 @command{planner-delete-task} to remove the task from both pages, and
2262 then create it again with the new desired description.
2264 To remind yourself to do tasks in a certain order, simply edit the
2265 lines so that they're in the order you want.
2266 @command{planner-raise-task} and @command{planner-lower-task} update
2267 the priorities on linked pages automatically. You can organize tasks
2268 into groups by putting a blank line between groups of tasks.
2269 Planner will maintain the groupings and only sort the tasks within
2270 that group.
2272 @subheading Functions
2274 @defun planner-replan-task page-name
2275 Change or assign the plan page for the current task.  @var{page-name}
2276 is the new plan page for the task. Use
2277 @code{planner-copy-or-move-task} if you want to change the date. With a
2278 prefix, provide the current link text for editing.
2279 @end defun
2281 @defun planner-raise-task-priority
2282 Change a low-priority task to a medium-priority task and a
2283 medium-priority task to a high-priority task (C to B to A).
2284 @end defun
2286 @defun planner-lower-task-priority
2287 Change a high-priority task to a medium-priority task and a
2288 medium-priority task to a low-priority task (A to B to C).
2289 @end defun
2291 @defun planner-raise-task arg
2292 Move a task up @var{arg} steps.  By default, @var{arg} is 1.
2293 @end defun
2295 @defun planner-lower-task  arg
2296 Move a task down @var{arg} steps.  By default, @var{arg} is 1.
2297 @end defun
2299 @defun planner-edit-task-description description
2300 Change the description of the current task, updating the linked page
2301 if any.
2302 @end defun
2304 @defun planner-delete-task
2305 Delete this task from the current page and the linked page.
2306 @end defun
2308 @defun planner-update-task
2309 Update the current task's priority and status on the linked page.
2310 Tasks are considered the same if they have the same description.
2311 This function allows you to force a task to be recreated if it
2312 disappeared from the associated page.
2313   
2314 Note that the text of the task must not change. If you want to be able
2315 to update the task description, see @code{planner-edit-task-description}
2316 or @file{planner-id.el}.
2317 @end defun
2319 See @command{planner-install-extra-task-keybindings} for additional
2320 task-related shortcuts.
2322 @node Carrying Over Unfinished Tasks, Task Numbering, Modifying Tasks, Organizing Your Tasks
2323 @comment  node-name,  next,  previous,  up
2324 @subsubsection Carrying Over Unfinished Tasks
2325 @cindex tasks, carrying over
2327 Sometimes you won't be able to cross off all the tasks on your list.
2328 Planner makes it easy for you to keep track of things you still have
2329 to do by automatically rescheduling unfinished tasks from the past few
2330 days. By default, the @command{plan} command searches for unfinished
2331 tasks from the last three days and reschedules them onto today. If you
2332 open Planner every day, this should cover weekends easily.
2334 It's a good idea to start Planner whenever you start Emacs. That way,
2335 Planner can help remind you about today's tasks, appointments, and other
2336 things. To automatically start Planner whenever you start up Emacs, add
2337 the following code to the end of your @file{~/.emacs}:
2339 @example
2340 (plan)
2341 @end example
2343 Now, every time you start Emacs (which should be more or less once a
2344 day), you'll see today's page. If you don't finish all the tasks today,
2345 you'll see them again tomorrow.
2347 It's a good idea to start Planner every time you start Emacs so that
2348 you get reminded about your task list. If you prefer to start Planner
2349 manually, remember to call @kbd{M-x plan} every so often to make sure
2350 that you don't forget any unfinished tasks. Safe in the knowledge that
2351 Planner tasks won't slip through the cracks (unlike little slips of
2352 paper that will invariably get mislaid), you can then get on with the
2353 rest of your life.
2355 If your increased productivity with Planner leads to a well-deserved
2356 two-week vacation, then you'll need to tell Planner to search more days
2357 for unfinished tasks. By using @kbd{M-x plan}, you can automatically
2358 bring forward tasks over a given number of days or even scan all the
2359 days since time immemorial. @kbd{C-u 15 M-x plan} reschedules all
2360 unfinished tasks from the last 15 days. @kbd{C-u -1 M-x plan} checks all
2361 of your past day pages for unfinished tasks.
2363 Like everything else in Planner, you can adapt @kbd{M-x plan} to your
2364 particular way of life. For example, if you find yourself starting up
2365 Emacs and Planner every day--including weekends--because it's just so
2366 much fun, you can set the @code{planner-carry-tasks-forward} to 1.
2367 This can make your Emacs startup marginally faster. On the other hand,
2368 if you normally start Emacs once a week, you can set it to 7 or 8. If
2369 you're worried about tasks dropping off your radar, you can set it to
2370 0. You can set the value of @var{planner-carry-tasks-forward} either
2371 with @key{M-x customize-variable RET planner-carry-tasks-forward RET},
2372 or by putting @code{(setq planner-carry-tasks-forward 3)} (replacing
2373 @code{3} with the value appropriate for what you want) in your
2374 @file{~/.emacs} file.
2376 On the other hand, you might prefer to reschedule tasks yourself. If
2377 you set @code{planner-carry-tasks-forward} to @code{nil}, then
2378 @command{M-x plan} and @code{(plan)} will bring you to the most recent
2379 page with unfinished tasks if there is no page for today. You can then
2380 use @command{planner-copy-or-move-task} and
2381 @command{planner-copy-or-move-region} to reschedule tasks. This is
2382 probably more hassle than it's worth, though, so let Planner take care
2383 of this for you.
2385 @subheading Options
2387 @defopt planner-carry-tasks-forward
2388 If non-nil, carry unfinished tasks forward automatically.
2389 If a positive integer, scan that number of days in the past.
2390 If 0, scan all days for unfinished tasks.
2391 If t, scan one day in the past (old behavior).
2392 If nil, do not carry unfinished tasks forward.
2393 @end defopt
2395 @subheading Functions
2397 @defun plan &optional force-days
2398 Start your planning for the day, carrying unfinished tasks forward.
2400 If @var{force-days} is a positive integer, search that many days in the
2401 past for unfinished tasks.
2402 If @var{force-days} is @code{0} or @code{t}, scan all days.
2403 If @var{force-days} is @code{nil}, use the value of
2404 @code{planner-carry-tasks-forward} instead, except t means scan only
2405 yesterday
2407 @end defun
2409 @defun planner-copy-or-move-task date force
2410 Reschedule the task for @var{date}. If @var{force} is non-nil, the
2411 task is moved regardless of status. It also works for creating tasks
2412 from a Note. Use @code{planner-replan-task} if you want to change the
2413 plan page in order to get better completion.
2414 @end defun
2416 @defun planner-copy-or-move-region beg end date muffle-errors
2417 Move all tasks from @var{beg} to @var{end} to @var{date}.
2418 @code{planner-copy-or-move-region} will copy or move all tasks from
2419 the line containing @var{beg} to the line just before @var{end}. If
2420 @var{muffle-errors} is non-nil, no errors will be reported.
2421 @end defun
2423 @node Task Numbering, Task Ranks, Carrying Over Unfinished Tasks, Organizing Your Tasks
2424 @comment  node-name,  next,  previous,  up
2425 @subsubsection Task Numbering
2427 By default, tasks are numbered according to their position on the
2428 page.  Task numbers allow you to refer to tasks using Muse links.
2429 For example, the @samp{#A1} task in @file{2004.08.16} can be referred to
2430 as @samp{2004.08.16#A1}.
2432 Note that task numbers change every time you re-sort and re-number tasks
2433 with @code{planner-fix-tasks}.  As a result, they are only reliable for
2434 references to past tasks.
2436 If you find yourself not using this functionality, you can turn off task
2437 numbers by using the following option.
2439 @subheading Options
2441 @defopt planner-use-task-numbers
2442 Non-nil means use task numbers when creating tasks.  This allows you
2443 to refer to past tasks if your tasks are numbered appropriately.
2444 If you set this to nil, you can save space in your plan files.
2445 @end defopt
2447 @node Task Ranks, Grouping Tasks, Task Numbering, Organizing Your Tasks
2448 @comment  node-name,  next,  previous,  up
2449 @subsubsection Task Ranks
2450 @cindex ranking tasks
2451 @cindex tasks, ranking
2452 @cindex @file{planner-rank.el}, using
2454 @file{planner-rank.el} models Franklin Covey's Urgency and Importance
2455 principle. When you think about a task, there are two aspects in
2456 consideration: Urgency and Importance. You may want to do the most
2457 urgent things first, like answering an email, or you may want to do
2458 the most important things first, like reading this manual. Or much
2459 better, balance Urgency and Importance and decide what to do.
2461 @file{planner-rank.el} can help you balance.
2463 Urgency and Importance are both measured by scores from 0-9. The
2464 higher the score, the more you want to do it first. 9 stands for ``I
2465 should have done this'' and 0 stands for ``I can forget this''.
2467 If you are using the planner @ref{Deadlines} feature, the Urgency
2468 score is automatically calculated from how many days are left to meet
2469 the deadline. By default, it will score 9 if the task is overdue and 0
2470 if the deadline is years away. Please refer to the docstring of
2471 @code{planner-rank-deadline-urgency-map-list} for detail.
2473 The task rank is calculated from Urgency and Importance scores. As
2474 different people balance urgency and importance differently, a number
2475 of @code{planner-rank-calculate-rank-*} functions are provided. The
2476 algorithms vary from a simple average to something like a weighted
2477 root mean square deviation.
2479 The aggressive versions of these functions
2480 (@code{planner-rank-calculate-rank-*-aggressive}) will make sure if
2481 one of Urgency and Importance is high, the resulting rank will be high
2482 as well. @code{planner-rank-calculate-rank-weighted-*} functions weigh
2483 the Urgency and Important scores depending on
2484 @code{planner-rank-importance-vs-urgency-factor}.
2486 Call @code{planner-rank-test-algorithm} on each of the functions and
2487 check the result tables to see which one you like most, and set it to
2488 @code{planner-rank-rank-calculate-function}. Alternatively, accept the
2489 defaults and tweak them when you get a better feel for ranking.
2491 Once the Rank is calculated, the @ref{Task Priorities} will be
2492 automatically reset. If the Rank is greater than or equal to
2493 @code{planner-rank-priority-A-valve}, the task priority will be
2494 @samp{A}, if the Rank is between @code{planner-rank-priority-A-valve}
2495 and @code{planner-rank-priority-B-valve}, the priority will be @samp{B},
2496 else it will be @samp{C}.
2498 After setting the task importance and deadline, you can leave it as
2499 is. As the deadline approaches, the task priority will automatically
2500 be raised and the task re-colored to catch your eyes.
2502 If you are using @code{planner-sort-tasks} (see @pxref{Making Files
2503 Pretty}), you can set @code{planner-sort-tasks-key-function} to one of
2504 @code{planner-sort-tasks-by-rank},
2505 @code{planner-sort-tasks-by-importance}, and
2506 @code{planner-sort-tasks-by-urgency}.
2508 @subheading Options
2510 @defopt planner-rank-change-hook
2511 Functions to run after @code{planner-rank-change}.
2512 @end defopt
2514 @defopt planner-rank-priority-A-valve
2515 Tasks with rank greater than or equal to this value will be set to
2516 priority @samp{A}.
2517 @end defopt
2519 @defopt planner-rank-priority-B-valve
2520 Tasks with rank greater than or equal to this value and less than
2521 @code{planner-rank-priority-A-valve} will be set to priority
2522 @samp{B}. Tasks with rank less than this value will be set to priority
2523 @samp{C}.
2524 @end defopt
2526 @defopt planner-rank-deadline-urgency-map-list
2527 Defines how to calculate the Urgency score according to how many days
2528 are left to meet the deadline.
2529 @end defopt
2531 @defopt planner-rank-default-importance
2532 Default importance value for newly added rank.
2533 @end defopt
2535 @defopt planner-rank-default-urgency
2536 Default urgency value for newly added rank.
2537 @end defopt
2539 @defopt planner-rank-importance-vs-urgency-factor
2540 How much do you think importance is more ``important'' than urgency.
2541 This will be used in @code{planner-rank-calculate-rank-weighted-*}
2542 functions.
2543 @end defopt
2545 @defopt planner-rank-rank-calculate-function
2546 Define the function called to calculate rank.
2547 @end defopt
2549 @subheading Functions
2551 @defun planner-rank-change &optional importance urgency
2552 Set the Importance and Urgency of the current task.
2553 @end defun
2555 @defun planner-rank-update-current-task
2556 Recalculate rank for the current task.
2557 @end defun
2559 @defun planner-rank-update-all
2560 Recalculate rank for all tasks in the current page
2561 @end defun
2563 @defun planner-rank-update-all
2564 Recalculate rank for all tasks in the current page
2565 @end defun
2567 @node Grouping Tasks,  , Task Ranks, Organizing Your Tasks
2568 @comment  node-name,  next,  previous,  up
2569 @subsubsection Grouping Tasks with planner-trunk.el
2570 @cindex grouping tasks
2571 @cindex tasks, grouping
2572 @cindex @file{planner-trunk.el}, using
2574 @file{planner-trunk.el} helps you automatically group tasks according
2575 to a set of rules. It sorts and splits your tasks, adding a blank line
2576 between groups of tasks. For example, if today's page looks like this:
2578 @example
2579 * Tasks
2581 #B   _ Buy milk (GroceryShopping)
2582 #B   _ Learn how to use planner-trunk (PlannerMode)
2583 #B   _ Buy a notebook (Bookstore)
2584 #B   _ Buy cereal (GroceryShopping)
2585 #B   _ Set up my own planner-trunk rules (PlannerMode)
2586 #B   _ Customize my stylesheet (MuseMode)
2587 #B   _ Go for a health checkup (BetterHealth)
2588 @end example
2590 @noindent
2591 then you might want to group the tasks into: planner and muse,
2592 shopping list, and other items. If you set up the appropriate rules by
2593 customizing @code{planner-trunk-rule-list}, @file{planner-trunk.el}
2594 can automatically rewrite that section line this:
2596 @example
2597 * Tasks
2599 #B   _ Learn how to use planner-trunk (PlannerMode)
2600 #B   _ Set up my own planner-trunk rules (PlannerMode)
2601 #B   _ Customize my stylesheet (MuseMode)
2603 #B   _ Buy milk (GroceryShopping)
2604 #B   _ Buy a notebook (BookstoreShopping)
2605 #B   _ Buy cereal (GroceryShopping)
2607 #B   _ Go for a health checkup
2608 @end example
2610 @noindent
2611 In this case, you would set @code{planner-trunk-rule-list}
2612 to @code{(("." nil ("PlannerMode\\|MuseMode" "Shopping")))}.
2614 You can load @file{planner-trunk} with @kbd{M-x load-library RET
2615 planner-trunk RET} or add @code{(require 'planner-trunk)}. If you're
2616 not yet comfortable with Emacs Lisp, you can use @kbd{M-x
2617 customize-variable RET planner-trunk-rule-list RET} to edit this rule
2618 using an easy-to-use interface.
2620 WARNING: Do not keep non-task information in the Tasks section.
2621 planner-trunk will delete @strong{all} non-task lines from the Tasks
2622 section of your plan page in the process of grouping the tasks.
2624 After you set up @code{planner-trunk-rule-list}, use @command{M-x
2625 planner-trunk-tasks} to try out your rules until you're satistfied.
2627 If you want to do this automatically, you can use @code{(add-hook
2628 'planner-mode-hook 'planner-trunk-tasks)} to trigger it automatically
2629 whenever you open a Planner page.
2631 @node Task Reports and Overviews,  , Organizing Your Tasks, More about Tasks
2632 @subsection Task Reports and Overviews
2633 @cindex task reports
2634 @cindex task overviews
2635 @cindex reports, task
2636 @cindex overviews, task
2637 @cindex reports, accomplishment
2638 @cindex tasks, overview of
2640 Planner provides a number of different ways to generate different
2641 presentations of your tasks.
2643 @menu
2644 * Accomplishments::             planner-accomplishments.el
2645 * Status Reports::              planner-report.el
2646 * Task Overviews::              planner-tasks-overview.el
2647 * <tasks> tag::             
2648 * planner-registry::            Keep track of annotations
2649 * planner-zoom::                View and navigate tasks by time period
2650 @end menu
2652 @node Accomplishments, Status Reports, Task Reports and Overviews, Task Reports and Overviews
2653 @comment  node-name,  next,  previous,  up
2654 @subsubsection Generating Daily Accomplishment Reports
2655 @cindex reports, accomplishment
2656 @cindex @file{planner-accomplishments.el}, using
2657 @cindex tasks, overview of
2658 @cindex task reports
2659 @cindex reports, task
2660 @cindex overviews, task
2661 @cindex task overviews
2663 You can use @file{planner-accomplishments.el} to get a summary of your
2664 task activity for a particular day. The report is grouped by status
2665 and plan (on day pages) or date (on plan pages). An example report
2666 follows:
2668 @example
2669 Link        | Unfinished | In progress | Delegated | Completed | Total
2670 nil         | 1          | 0           | 0         | 6         | 7
2671 TaskPool    | 1          | 1           | 0         | 3         | 5
2672 Planner     | 0          | 0           | 1         | 1         | 2
2673 SchoolWork  | 0          | 0           | 0         | 1         | 1
2674 Total       | 2          | 1           | 1         | 11        | 15
2675 @end example
2677 This lets you see how you balance your time between your projects.
2679 @itemize
2681 There are currently two ways to use @file{planner-accomplishments.el}.
2683 @item Displaying a temporary buffer
2685 You can call @code{planner-accomplishments-show} to display a buffer
2686 containing the current page's accomplishment report.
2688 @item Rewriting sections of your planner
2690 Choose this approach if you want accomplishment reports to be in
2691 their own section and you would like them to be readable in your
2692 plain text files even outside Emacs. Caveat: The accomplishment
2693 section should already exist in your template and will be rewritten
2694 when updated.
2696 To use, set @code{planner-accomplishments-section} to the name of the
2697 section to rewrite (default: @samp{Accomplishments}). If you want
2698 rewriting to be automatically performed, call
2699 @code{planner-accomplishments-insinuate}. The accomplishments will be
2700 rewritten whenever you save a planner page. If you want rewriting to
2701 be manual, call @code{planner-accomplishments-update}.
2703 @end itemize
2705 @subheading Options
2707 @defopt planner-accomplishments-section
2708 Header for the accomplishments section in a plan page.
2709 Used by @code{planner-accomplishments-update}.
2710 @end defopt
2712 @defopt planner-accomplishments-status-display
2713 Alist of status-label maps also defining the order of display.
2714 Used by @code{planner-accomplishments-format-table}.
2715 @end defopt
2717 @subheading Functions
2719 @defun planner-accomplishments-insinuate ()
2720 Automatically call @code{planner-accomplishments-update} when saving
2721 tasks in @code{planner-mode} buffers.
2722 @end defun
2724 @defun planner-accomplishments-update ()
2725 Rewrite @code{planner-accomplishments-section} with a summary of tasks
2726 on this page.
2727 @end defun
2729 @defun planner-accomplishments-show ()
2730 Display a buffer with the current page's accomplishment report.
2731 @end defun
2733 @node Status Reports, Task Overviews, Accomplishments, Task Reports and Overviews
2734 @comment  node-name,  next,  previous,  up
2735 @subsubsection Status Reports
2736 @cindex status reports
2737 @cindex reports, status
2738 @cindex @file{planner-report.el}, using
2740 @file{planner-report.el} creates a status report for a given timespan.
2741 The report itself is just another Planner page in your planner
2742 directory.  Once generated, it contains tasks and notes culled from
2743 active project pages.  Tasks are only shown if they are incomplete or
2744 were completed within the timespan.  Notes are shown if they were
2745 created during the timespan.  Tasks and notes are grouped together under
2746 a heading for their corresponding project.
2748 The idea is you have one of these status reports generated periodically
2749 (say, every couple of weeks).  Perhaps you use cron to run them
2750 automatically and then mail you a reminder that they've been done.  Then
2751 you can edit the page, adding verbiage where it is needed and removing
2752 irrelevant items.  This editing process is as easy as editing any other
2753 Planner page.  Finally, you can publish the page along with the rest of
2754 your planner using @kbd{M-x muse-project-publish}.
2756 If you use planner-authz.el, you can tell planner-report.el only to
2757 consult project pages that a given list of users
2758 (@var{planner-report-authz}) can access when generating the report.  For
2759 example, if you're preparing a status report for your boss, add yourself
2760 and him to @var{planner-report-authz}.  The resulting status report will
2761 only contain information the two of you are supposed to have access to,
2762 and the report itself will be similarly restricted.
2764 @subheading Getting started
2766 Add the following to your .emacs file:
2768 @example
2769 (require 'planner-report)
2770 @end example
2772 Then you can use the following command to generate a status report:
2774 @example
2775 M-x planner-report-generate
2776 @end example
2778 You will be prompted for a beginning and ending date, and then the
2779 status report will be generated.  You can then edit it to your liking
2780 and publish it just like you would the rest of your planner.
2782 @subheading Options
2784 @defopt planner-report-authz
2785 List of users a status report should be restricted to.
2786 When status reports are generated, only planner pages accessible
2787 by these users will be consulted, and the resulting status report
2788 will be similarly restricted.
2789 @end defopt
2791 @defopt planner-report-pretty-print-plan-pages
2792 If non-nil, pretty print plan pages.
2793 If nil, leave page names as-is.
2794 This requires that @file{muse-wiki.el} be loaded to work properly.
2795 @end defopt
2797 @defopt planner-report-remove-task-numbers
2798 Remove task numbers when generating status reports.
2799 @end defopt
2801 @defopt planner-report-replace-note-numbers
2802 If non-nil, a string with which to replace note numbers when
2803 generating status reports.
2804 @end defopt
2806 @defopt planner-report-unfinished-offset
2807 If non-nil, the offset in days from the current date of
2808 unfinished tasks to include in the status report.  If nil,
2809 include all unfinished tasks.
2810 @end defopt
2812 @subheading Functions
2814 @defun planner-report-generate begin end
2815 Generate a status report spanning a period from @var{begin} to @var{end}.
2816 @var{begin} and @var{end} are in the format YYYY.MM.DD.
2817 @end defun
2819 @node Task Overviews, <tasks> tag, Status Reports, Task Reports and Overviews
2820 @comment  node-name,  next,  previous,  up
2821 @subsubsection Seeing an Overview of Tasks
2822 @cindex tasks, overview of
2823 @cindex task reports
2824 @cindex reports, task
2825 @cindex overviews, task
2826 @cindex task overviews
2827 @cindex @file{planner-tasks-overview.el}, using
2829 You can see a list of tasks with @file{planner-tasks-overview.el}.
2830 Seeing how you've scheduled tasks over the next few days can help you
2831 decide when to schedule another task. Table entries will be of the form
2833 @var{date} | @var{link} | @var{priority} @var{status} | @var{task-description}
2835 @subheading Functions
2837 To display the tasks between a set of day pages, use
2839 @defun planner-tasks-overview start end
2840 Display an overview of your tasks from @var{start} to @var{end}. If
2841 @var{start} is nil, start from the very first day page. If @var{end}
2842 is nil, include the very last day page. You can use
2843 @code{planner-expand-name} shortcuts here, like @kbd{+1} or @kbd{-1}.
2844 Pressing @key{RET} at the prompt will use today.
2846 Once in a @code{planner-tasks-overview} buffer, you can use
2847 the keyboard shortcut @key{o} to change the overview period.
2848 @end defun
2850 You can sort the task display with the following functions:
2852 @defun planner-tasks-overview-sort-by-date
2853 Sort the tasks by date. Keyboard shortcut: @key{1}
2854 @end defun
2856 @defun planner-tasks-overview-sort-by-plan
2857 Sort the tasks by associated plan page. Keyboard shortcut: @key{2}
2858 @end defun
2860 @defun planner-tasks-overview-sort-by-priority
2861 Sort the tasks by priority. Keyboard shortcut: @key{3}
2862 @end defun
2864 @defun planner-tasks-overview-sort-by-status
2865 Sort the tasks by status. Keyboard shortcut: @key{4}
2866 @end defun
2868 You can jump to linked tasks with
2870 @defun planner-tasks-overview-jump other-window
2871 Display the current task. If a prefix argument is supplied, show the
2872 task in another window. Keyboard shortcut: @key{j}
2873 @end defun
2875 @defun planner-tasks-overview-jump-other-window
2876 Display the current task in another window. Keyboard shortcut: @kbd{C-u j}
2877 @end defun
2879 You can view a summary of the tasks in your plan pages with
2881 @defun planner-tasks-overview-show-summary &optional file-list
2882 Count unscheduled, scheduled, and completed tasks for FILE-LIST. If
2883 called with an interactive prefix, prompt for the plan page(s) to
2884 display. Load @file{planner-multi.el} to be able to specify multiple
2885 pages.
2886 @end defun
2888 @subheading Keys
2890 @key{TAB}, @kbd{SHIFT-TAB} and @key{RET} navigate links in the usual
2891 fashion.
2893 @node <tasks> tag, planner-registry, Task Overviews, Task Reports and Overviews
2894 @subsubsection <tasks> tag
2895 @cindex <tasks> tag
2896 @cindex task reports
2897 @cindex reports, task
2898 @cindex overviews, task
2899 @cindex task overviews
2900 @cindex tasks, overview of
2902 @samp{<tasks>} is replaced by a report of tasks over all day pages in
2903 published pages (@pxref{Publishing}).
2905 @example
2906 All incomplete tasks
2908 <tasks status="^X">
2910 All completed tasks
2912 <tasks status="X">
2914 All tasks
2916 <tasks>
2917 @end example
2919 Warning: this function can be slow, as it checks all the day pages!
2921 @node planner-registry, planner-zoom ,<tasks> tag, Task Reports and Overviews
2922 @comment  node-name,  next,  previous,  up
2923 @section planner-registry
2924 @cindex planner-registry
2926 The @file{planner-registry} module provides a way to keep track of all
2927 the URLs in your projects, and to list them depending on the current
2928 buffer.  The URLs are defined in @code{muse-url-protocols} module from
2929 Muse.
2931 If a URL has been created by @code{planner-create-task-from-buffer},
2932 going to that buffer and calling @code{planner-registry-show} will show
2933 you where Planner put the URL.
2935 @subheading Getting started
2937 To begin using @file{planner-registry}, add the following to your
2938 Planner configuration file.
2940 @example
2941 (require 'planner-registry)
2942 (planner-registry-initialize)
2943 @end example
2945 You must put it after the place where Planner has been loaded in your
2946 configuration file.
2948 If you want the registry to be updated each time you save a Planner
2949 file, add the following to your Planner configuration.
2951 @example
2952 (planner-registry-insinuate)
2953 @end example
2955 If you don't want to update the registry each time a file is written,
2956 you can do it manually with @code{planner-registry-update}: it will
2957 update the registry for saved Planner/Muse buffers only.
2959 @file{planner-registry} does not define any keybindings by default.  Its
2960 most useful interactive function is @code{planner-registry-show}.
2962 @subheading Example usage
2964 Say for example that you created a task from an e-mail.  Go to that
2965 e-mail and call @code{planner-registry-show}: it will open a new buffer
2966 displaying the files (in a muse links format) where a link to this
2967 e-mail has been added.
2969 @subheading Options
2971 @file{planner-registry} defines the following options.
2973 @defopt planner-registry-file
2974 The file where @file{planner-registry} stores its URL registry.
2975 @end defopt
2977 @defopt planner-registry-min-keyword-size
2978 The minimum size for keywords.
2979 @end defopt
2981 @defopt planner-registry-max-keyword-size
2982 The maximum size for keywords.
2983 @end defopt
2985 @defopt planner-registry-max-number-of-keywords
2986 The maximum number of keywords.
2987 @end defopt
2989 @defopt planner-registry-ignore-keywords
2990 A list of keywords to ignore.
2991 @end defopt
2993 @defopt planner-registry-show-level
2994 Level used by the @code{planner-registry-show} function.
2995 0 means that this function shows only exact matches.
2996 1 means that this function also shows descriptive matches.
2997 2 (or more) means that this function also shows fuzzy matches.
2998 @end defopt
3000 @node planner-zoom, , planner-registry, Task Reports and Overviews
3001 @comment  node-name,  next,  previous,  up
3002 @section planner-zoom
3003 @cindex planner-zoom
3004 @cindex view, weekly
3005 @cindex view, quarterly
3006 @cindex view, monthly
3007 @cindex view, yearly
3009 When assessing where you stand in relation to the tasks you have set
3010 out for yourself, you might want a way to survey those tasks in groups
3011 divided by time periods, like by the week or by the month. You could
3012 create all of these overview pages by hand, but if you like to have
3013 this kind of overview frequently, you might find manually creating
3014 such pages to be tedious and time consuming.
3016 @file{planner-zoom} is an optional module designed to make it easy to
3017 view your task information grouped by year, quarter, month, week or
3018 day.
3020 To install this module, just load it in your @file{.emacs} (or
3021 @file{_emacs}):
3023 @example
3024 (require 'planner-zoom)
3025 @end example
3027 This module will recognize planner pages named according to the
3028 following scheme:
3030 @table @asis
3032 @item year view
3033 @file{2006.Year}
3035 @item quarter view
3036 @file{2006.Quarter2}
3038 @item month view
3039 @file{2006.January}
3041 @item week view
3042 @file{2006.January.Week3}
3044 @item day view
3045 @file{2006.01.02}
3047 @end table
3049 @subheading Keybindings
3051 This module also adds key bindings that you can use when looking at a
3052 Planner page to easily jump between the different time-period views.
3054 @table @kbd
3056 @item S-up
3057 Move to the view corresponding to the time period one step larger than
3058 the current one. For example, it moves from the weekly view to the
3059 monthly view. It calls @code{planner-zoom-iup}.
3061 @item S-down 
3062 Move to the view corresponding to the time period one step smaller
3063 than the current one. For example, it moves from the weekly view to
3064 the daily view. It calls @code{planner-zoom-idown}.
3066 @item S-left
3067 Stay in the same time-period view as the current one, but move one
3068 interval earlier. For example, it moves from @file{2006.January.Week3}
3069 to @file{2006.January.Week2}. It calls @code{planner-zoom-iprev}.
3071 @item S-right
3072 Stay in the same time-period view as the current one, but move one
3073 interval later. For example, it moves from @file{2006.January.Week3}
3074 to @file{2006.January.Week4}. It calls @code{planner-zoom-inext}.
3076 @end table
3078 @subheading Example usage
3080 Look at the page named @file{2006.January} and then hit @kbd{S-down}
3081 which will show @file{2006.January.Week1}. Then hit @kbd{S-left} and
3082 @kbd{S-right} to look at @file{2006.January.Week2},
3083 @file{2006.January.Week3}, etc.
3085 @subheading Advanced tips and options
3087 You can use any prefix argument with @code{planner-zoom-iup} and
3088 @code{planner-zoom-idown} to have the new view display in a window
3089 other than the current one. This also works with a nonnumeric prefix
3090 argument and @code{planner-zoom-inext} or @code{planner-zoom-iprev}.
3091 For these two functions, a numeric prefix will specify the number of
3092 intervals to move.
3094 If you don't like the default patterns for naming the time-period view
3095 pages, you can change them by customizing @code{planner-zoom-regexps}.
3097 Some people believe weeks start with Sunday, and some believe they
3098 start with Monday. To accommodate both of these colliding worldviews,
3099 @code{planner-zoom-first-day-of-week} can be customized. Its default
3100 value is @samp{1}, which is Monday. If you would prefer Sunday, change
3101 it to @samp{0}. The month to which a week belongs is the month in
3102 which the first day of the week falls.
3104 @subheading Command reference
3106 @defun planner-zoom-iup name other-window
3107 Move to the next higher level in the hierarchy. With a prefix
3108 argument, show the desired page in the other window.
3109 @end defun
3111 @defun planner-zoom-idown name other-window
3112 Move to the next lower level in the hierarchy. If the current date is
3113 within the higher-level time range, zoom to the lower level time range
3114 that also contains today. Otherwise, just go to the first lower-level
3115 time range. With a prefix argument, show the desired page in the other
3116 window.
3117 @end defun
3119 @defun panner-zoom-inext name num other-window
3120 Move to the next time range at the same level in the hierarchy. With a
3121 numeric prefix argument, move by that number of time ranges. With a
3122 non-numeric prefix argument, show the desired page in the other window.
3123 @end defun
3125 @defun planner-zoom-iprev name num other-window
3126 Move to the previous time range at the same level in the hierarchy.
3127 With a numeric prefix argument, move by that number of time ranges.
3128 With a non-numeric prefix argument, show the desired page in the other
3129 window.
3130 @end defun
3132 @node More about Notes, Making Files Pretty, More about Tasks, More about Planner
3133 @section More about Notes
3134 @cindex notes, more about
3135 You can put anything in this section. Notes added by
3136 @file{remember-planner.el} look like this:
3138 @example
3139 .#1 Headline
3140 Body
3141 @end example
3143 and are outlined at the @code{H3} level. If you want to take notes
3144 conveniently, check out @file{remember-planner.el}.
3146 Planner by default organizes the notes on a planner page so that
3147 the most recent note is first. Each note is numbered, with the oldest
3148 note labeled @samp{.#1}. If you would like to reverse this behavior,
3149 look at @kbd{C-h v planner-reverse-chronological-notes}.
3151 Notes are associated with day pages, but can also be associated with
3152 plan pages when they are created.  A linked note looks like this:
3154 @example
3155 .#1 Headline (LinkedNote#1)
3156 Text
3157 @end example
3159 You can jump to the linked note with
3160 @command{planner-jump-to-linked-note}.
3162 Deleting a note can be dangerous, as the notes are automatically
3163 numbered.  Removing a note could break links in other pages.
3165 @subheading Functions
3167 @defun planner-create-note page
3168 Create a note to be remembered in @var{page} (today if @var{page} is
3169 nil).  If @code{planner-reverse-chronological-notes} is non-nil, create
3170 the note at the beginning of the notes section; otherwise, add it to
3171 the end.  Position point after the anchor.
3172 @end defun
3174 @defun planner-create-note-from-task
3175 Create a note based on the current task and update the current task to
3176 link to the note.
3177 @end defun
3179 @defun planner-renumber-notes
3180 Update note numbering.
3181 @end defun
3183 @defun planner-jump-to-linked-note note-info
3184 Display the note linked to by the current note or @var{note-info} if
3185 non-nil.
3186 @end defun
3188 @defun planner-search-notes regexp limit
3189 Return a buffer with all the notes returned by the query for
3190 @var{regexp}.  If called with a prefix argument, prompt for
3191 @var{limit} and search days on or after @var{limit}.
3192 @end defun
3194 The following sections include instructions for displaying,
3195 manipulating, and navigating your notes efficiently.
3197 @menu
3198 * Using Allout Mode::           Quickly navigating your notes
3199 * <notes>::                     Note headlines
3200 * <past-notes>::                Index of past notes
3201 * Note Indices::                planner-notes-index.el
3202 @end menu
3204 @node Using Allout Mode, <notes>, More about Notes, More about Notes
3205 @subsection Using Allout Mode
3206 @cindex Allout mode
3207 @cindex notes, navigating
3208 @cindex notes, formatting
3209 @cindex notes, displaying
3211 The format of the notes in Planner works well with Allout mode, which
3212 provides helpful commands for navigating and formatting outlines. You
3213 can, for example, hide the bodies of all the notes on a page so you can
3214 see just their headlines. You can also jump easily from headline to
3215 headline, skipping over the bodies in between.
3217 The commands for using Allout mode vary depending on which Emacs version
3218 you are using. In either case, type @kbd{M-x load-library @key{RET}
3219 allout @key{RET}} to start. If you are using CVS Emacs, type @kbd{M-x
3220 allout-mode @key{RET}}. If you are using an earlier version of Emacs,
3221 type @kbd{M-x outline-mode @key{RET}}.
3223 The exact commands then available to you differ depending on your Emacs
3224 version, but you can view the commands and their keybindings by typing
3225 @kbd{C-h m}. In CVS Emacs, they will start with @command{allout-}, while
3226 in previous versions, they will start with @command{outline-}.
3228 @node <notes>, <past-notes>, Using Allout Mode, More about Notes
3229 @subsection <notes>
3231 @samp{<notes>} is replaced by a list of note headlines when the page
3232 is published. For example, the notes tag in the following example will
3233 be replaced by the two headlines when published. (@pxref{Publishing})
3235 @example
3236 <notes>
3238 * Notes
3240 .#1 This is a headline
3242 and this is body text
3244 .#2 This is another headline
3246 and this is more body text
3247 @end example
3249 @samp{<notes>} is useful if you want to provide a quick summary of
3250 blog entries at the top of your page. Just add it to your
3251 @code{planner-day-page-template}.
3253 @node <past-notes>, Note Indices, <notes>, More about Notes
3254 @subsection <past-notes>
3256 @samp{<past-notes>} is replaced by an index of note headlines.
3257 If @var{start} is specified, it lists notes starting from that date.
3258 If @var{directory} is specified, you can index notes in another
3259 planner directory.
3261 @example
3262 All the notes I've taken in 2004:
3264 <past-notes start="2004.01.01" end="2004.12.31">
3265 @end example
3267 @node Note Indices,  , <past-notes>, More about Notes
3268 @comment  node-name,  next,  previous,  up
3269 @subsection Note Indices
3270 @cindex @file{planner-notes-index.el}, using
3271 @cindex notes, indexing
3273 Make sure that @file{planner-notes-index.el} is in your load path and
3274 add this to your @file{.emacs} (or @file{_emacs}):
3276 @example
3277 (require 'planner-notes-index)
3278 @end example
3280 Then you can use tags of the form:
3282 @example
3283 <planner-notes-index page="2004.03.02">
3284 <planner-notes-index from="2004.03.01" to="2004.03.31">
3285 <planner-notes-index limit="10">
3286 <planner-notes-index page="PlanPage">
3287 <planner-notes-index-month-table month="2004.03" limit="5">
3288 <planner-notes-index-month-table month="2004.03">
3289 @end example
3291 You can also use the following interactive functions:
3293 @code{planner-notes-index}
3294 @code{planner-notes-index-days}
3295 @code{planner-notes-index-weeks}
3296 @code{planner-notes-index-months}
3297 @code{planner-notes-index-years}    (wow!)
3299 These work based on the current date (date of current buffer, or today).
3301 If a single page is specified, this page is scanned for headlines
3302 of the form:
3304 @example
3305  .#1 Headline
3306 @end example
3308 The results are presented as a bulleted list.
3310 If @var{from} and @var{to} are specified, all date pages between them
3311 (inclusive) are scanned. If @var{from} is omitted, it is assumed to be
3312 the earliest entry.  If @var{to} is omitted, it is assumed to be the
3313 latest entry.
3315 If @var{recent} is specified, the list includes only that many recent
3316 headlines.  and the results are presented as a bulleted list.
3318 To customize presentation, you can write a function that generates
3319 the appropriate @code{<planner-notes-index>} tags. You can also use
3320 @code{planner-extract-note-headlines} in your own functions.
3322 @subheading Functions
3324 The following interactive functions are defined in
3325 @file{planner-notes-index.el}:
3327 @defun planner-notes-index &optional from to limit
3328 Display a clickable notes index. If called from a Lisp program,
3329 display only dates between @var{from} and @var{to}. With a prefix arg
3330 @var{limit}, display only that number of entries.
3331 @end defun
3333 @defun planner-notes-index-days days
3334 Display an index of notes posted over the past few @var{days}. The
3335 list ends with the day of the current buffer or @code{planner-today}.
3336 @end defun
3338 @defun planner-notes-index-weeks weeks
3339 Display an index of notes posted over the past few @var{weeks}. The
3340 list ends with the week of the current buffer or
3341 @code{planner-today}. Weeks start from Sunday.
3342 @end defun
3344 @defun planner-notes-index-months months
3345 Display an index of notes posted over the past few @var{months}. The
3346 list ends with the month of the current buffer or @code{planner-today}.
3347 @end defun
3349 @defun planner-notes-index-years years
3350 Display an index of notes posted over the past few @var{years}. The
3351 current year is included.
3352 @end defun
3354 @file{planner-notes-index.el} does not define any keybindings.
3357 @node Making Files Pretty, Annotations, More about Notes, More about Planner
3358 @section Making Files Pretty
3360 By default, planner does a little bit of fancy reformatting when you
3361 save a file. Tasks are sorted by priority (ABC) and status (_oP>XC) on
3362 day pages. On plan pages, tasks are sorted by priority (ABC), status
3363 (XC), and date. Undated tasks are sorted after dated tasks.
3365 @subheading Options
3367 @defopt planner-sort-tasks-key-function
3368 Control task sorting. Some options include
3369 @code{planner-sort-tasks-default-key},
3370 @code{planner-sort-tasks-basic}, @code{planner-sort-tasks-by-date}, and
3371 @code{planner-sort-tasks-by-link}.
3372 @end defopt
3374 @defopt planner-sort-undated-tasks-equivalent
3375 This option controls the behavior of task sorting on plan pages.  By
3376 default, the value @samp{9999.99.99} causes dated tasks to be listed
3377 before undated tasks.  To sort undated tasks before dated tasks,
3378 set this to a blank string.
3379 @end defopt
3381 @defopt planner-sort-tasks-automatically
3382 Non-nil means sort tasks whenever a planner file is saved.  On day
3383 pages, tasks are sorted by status.  On plan pages, they are sorted by
3384 status and date.  Sorting can take a while.
3385 @end defopt
3387 @defopt planner-renumber-tasks-automatically
3388 Non-nil means renumber tasks from 1 to N whenever a planner file is
3389 saved. This allows you to refer to tasks in previous day pages using
3390 anchors like @samp{2003.08.12#A1}. If you use this function, make sure
3391 @code{planner-use-task-numbers} is non-nil so that new tasks are created
3392 with task numbers.
3393 @end defopt
3395 @defopt planner-align-tasks-automatically
3396 Non-nil means align tasks whenever a planner file is saved.  This
3397 causes the status to line up in a neat column if you have less than
3398 100 tasks.
3399 @end defopt
3401 @defopt planner-renumber-notes-automatically
3402 Non-nil means renumber the notes. If most of your notes are only on
3403 one page, you might like seeing the notes renumbered if you delete a
3404 note in the middle. However, if you use a lot of cross-referencing,
3405 note renumbering will break those links.
3406 @end defopt
3408 @subheading Functions
3410 @defun planner-sort-tasks
3411 Sort tasks according to planner-sort-tasks-key-function. By default,
3412 sort tasks according to priority and position on day pages, and
3413 according to status, priority, date, and position on plan pages.
3414 @end defun
3416 @defun planner-renumber-tasks
3417 Update task numbering.
3418 @end defun
3420 @defun planner-align-tasks
3421 Align tasks neatly. You can add this to @code{write-file-functions} to
3422 have the tasks automatically lined up whenever you save.  For best
3423 results, ensure @code{planner-align-tasks} is run after
3424 @code{planner-renumber-tasks}.
3425 @end defun
3427 @defun planner-fix-tasks
3428 Sort, renumber and align tasks.
3429 @end defun
3431 @node Annotations, Interactive Lisp, Making Files Pretty, More about Planner
3432 @comment  node-name,  next,  previous,  up
3433 @section Annotations
3435 The context included when you create a task and the context included
3436 when you create a note are gained the same way. It sounds like black
3437 magic, but it turns out not to be.
3439 All that happens is, Planner has a list of functions,
3440 @code{planner-annotation-functions}. When you create a task from a
3441 buffer, or remember a note from a buffer, Planner goes through
3442 this list from top to bottom. The first one that returns true is the
3443 one it uses.
3445 For example, if you're in Wanderlust, and you hit the key you've bound
3446 to @code{planner-create-task-from-buffer}, it looks at this list and
3447 does something like this.  Is it an ERC buffer? No. Is it a BBDB
3448 buffer? No. Are we in w3m? No. Are we in Wanderlust? Yes. So this
3449 function succeeds. It stops searching and runs the annotation function
3450 for Wanderlust, which in this case finds out who the message is from
3451 and what the message ID of the message is. It then takes those and
3452 constructs a link back to that message, with a link title something
3453 like @samp{Email from Joe Blogs}.
3455 So, you've read the email from Joe Blogs. He's asked you to do
3456 something and you've hit your key to add that task to your list of
3457 things to do. So what you end up with is a description of the task,
3458 and a link back to what made you create the task in the first place.
3460 The same happens with remembering notes, except that it ends up in the
3461 @samp{* Notes} section of your page instead.
3463 By default, @file{planner.el} can annotate tasks and notes based on
3464 the current filename.
3466 @subheading Options
3468 To change the behavior of annotations, customize the following options:
3470 @defopt planner-annotation-functions
3471 A list of functions tried in order by
3472 @command{planner-create-task-from-buffer} and other functions that
3473 pick up context.  The first non-nil value returned is used as the
3474 annotation.  To cause an item to @strong{not} be annotated, return the
3475 empty string @samp{""}.
3476 @end defopt
3478 @defopt planner-annotation-strip-directory
3479 File links are usually generated with the full path to the file so
3480 that you can easily tell apart files with the same base name.  If
3481 @code{planner-annotation-strip-directory} is non-nil, though, only the
3482 base name of the file will be displayed.  For example, a link to
3483 @samp{/foo/bar/baz} will be displayed as @samp{baz} and hyperlinked to
3484 the file.
3485 @end defopt
3487 @defopt planner-annotation-use-relative-file
3488 If t, always use relative filenames.
3489 @code{planner-annotation-use-relative-file} can also be a function that
3490 takes the filename and returns non-nil if the link should be relative.
3491 Filenames are resolved relative to the first directory of your Planner
3492 project in @code{muse-project-alist}.  That is, the created link will be
3493 of the form @samp{../../somefile} instead of
3494 @samp{/absolute/path/to/file}.  This can be helpful if you publish your
3495 planner files to the Net and your directory structure ensures that
3496 relative links resolve the same from your Plan pages and their
3497 respective publishing directory.
3498 @end defopt
3500 @node Interactive Lisp, Publishing, Annotations, More about Planner
3501 @comment  node-name,  next,  previous,  up
3502 @section Interactive Lisp with planner-lisp.el
3503 @cindex Lisp functions, using with Planner
3504 @cindex interactive Lisp fuctions, using with Planner
3505 @cindex @file{planner-lisp.el}, using
3507 You can include interactive Lisp functions in your planner pages.
3509 First, you need @file{planner-lisp.el}. Put this in your @file{.emacs}
3510 (or @file{_emacs}):
3512 @example
3513 (require 'planner-lisp)
3514 @end example
3516 Then, add a link to the Lisp function to your page, like:
3518 @example
3520 [[lisp:/plan][Plan]]
3522 @end example
3524 This will be rendered as @samp{Plan}. Selecting the link will run the
3525 @code{plan} function interactively.
3527 You can also execute other Lisp expressions. For example:
3529 @example
3530 [[lisp:/(planner-goto (planner-expand-name "+7"))][Next week]]
3531 @end example
3533 @file{planner-lisp.el} does not provide any interactive functions or
3534 keybindings.
3536 @node Publishing, Experimental Functions, Interactive Lisp, More about Planner
3537 @section Publishing
3539 You can publish your planner files to HTML and put them on a normal
3540 web server--no special server support required. This gives you an easy
3541 way to keep other people up to date on your tasks, keep a web log, or
3542 simply organize information.
3544 Publish your planner wiki with @kbd{C-c C-p}
3545 (@code{muse-project-publish}). You can publish individual files with
3546 @kbd{C-c C-t} (@code{muse-publish-this-file}). To automatically publish
3547 files when you save them, add the following code to your
3548 @file{~/.emacs}:
3550 @example
3551 (eval-after-load "muse-mode"
3552   (add-hook 'after-save-hook
3553             #'(lambda ()
3554                 (when (planner-derived-mode-p 'muse-mode)
3555                   (muse-project-publish nil)))
3556             nil t))
3557 @end example
3559 Published files are stored in the path specified by
3560 @code{muse-project-alist} for your Planner project.  Just copy the
3561 contents of this directory to your webserver, and you're all set! Of
3562 course, publishing is completely optional.
3564 Here are some more features related to publishing:
3566 @menu
3567 * Publishing Planner pages::    planner-publish.el
3568 * Publishing Calendars::        planner-calendar.el
3569 * Authz Access Restriction::    planner-authz.el
3570 * RSS Publication::             Sharing notes with planner-rss.el
3571 * iCal Task Publication::       Sharing tasks with planner-ical.el
3572 * RDF Publication::             planner-rdf.el
3573 @end menu
3576 @node Publishing Planner pages, Publishing Calendars, Publishing, Publishing
3577 @comment  node-name,  next,  previous,  up
3578 @subsection Publishing Planner pages
3579 @cindex publishing
3580 @cindex @file{planner-publish.el}, using
3582 The task of publishing Planner pages is handled by
3583 @file{planner-publish.el}.  It is loaded by default when Planner is
3584 loaded.  To publish an entire Planner project, set up
3585 @code{muse-project-alist} (@pxref{Creating Your Planner}) and hit
3586 @kbd{C-c C-p}.  To publish an individual page, hit @kbd{C-c C-t}.
3588 Publishing works by providing Muse with the settings and environment for
3589 Planner publishing.
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 Options
3794 @defopt planner-authz-project-default
3795 Default access list for project pages (not day pages).  If a given
3796 project page doesn't contain a @samp{#authz} tag, it will receive the
3797 access list defined here.  If this variable is nil, all users will be
3798 allowed to view the page.  No corresponding variable is provided for
3799 day pages because it doesn't seem like you'd ever want to control
3800 access based on what day it was.  (But I will accept patches. :) Notes
3801 and tasks referencing pages without @samp{#authz} tags will also be
3802 restricted to the users listed here.
3803 @end defopt
3805 @defopt planner-authz-day-note-default
3806 Default access list for notes on day pages not associated with
3807 any project.  There is way to set a default for notes on project
3808 pages for the reason above; they would only be associated with
3809 date pages anyway.
3810 @end defopt
3812 @defopt planner-authz-day-task-default
3813 Same as @kbd{planner-authz-day-note-default}, but for tasks.
3814 @end defopt
3816 @subheading Functions
3818 @defun planner-authz-publish-index
3819 Publish an index for the planner marked up with Mason code.
3820 Only those links to pages which the remote user is authorized to
3821 access will be shown.
3822 @end defun
3824 @node RSS Publication, iCal Task Publication, Authz Access Restriction, Publishing
3825 @comment  node-name,  next,  previous,  up
3826 @subsection RSS Publication
3827 @cindex @file{planner-rss.el}, using
3828 @cindex notes, RSS
3829 @cindex RSS
3831 @file{planner-rss.el} allows you to publish your notes in the RSS 2.0
3832 XML format for blog syndication. You will also want to customize the
3833 following variables:
3835 To manually add the current note to all the matching RSS feeds, invoke
3836 @command{planner-rss-add-note}. You can specify a filename with the
3837 universal prefix, like this: @kbd{C-u M-x planner-rss-add-note}.
3839 If you use the @file{remember-planner.el} module to create notes, you
3840 can automatically publish new notes to RSS feeds by adding the
3841 following code to your @file{.emacs} (or @file{_emacs}).
3843 @example
3844 (add-to-list 'remember-planner-append-hook 'planner-rss-add-note t)
3845 @end example
3847 @subheading Options
3849 @defopt planner-rss-base-url
3850 Base absolute URL for published blog entries. Should include trailing
3851 @samp{/}.
3852 @end defopt
3854 @defopt planner-rss-category-feeds
3855 Rules for automatic categorization of posts and publishing to RSS
3856 files. A blog entry is matched against each condition. If it matches
3857 the regular expression or the function returns a non-nil value, the
3858 blog entry is copied into the specified file.
3859 @end defopt
3861 @defopt planner-rss-feed-limits
3862 A list of regular expressions that match feed filenames and the size
3863 and item limits for feeds that match. For example, you can use
3864 @samp{(("." nil 10))} to ensure that all feeds are limited to the 10
3865 most recent items.
3866 @end defopt
3868 @subheading Functions
3870 @file{planner-rss.el} defines the following interactive functions:
3872 @defun planner-rss-add-note @var{feed}
3873 Export the current note using @code{planner-add-item}. If @var{feed}
3874 is specified, add the entry to the specified file. Else, add the entry
3875 to all matching RSS feeds specified by
3876 @code{planner-rss-category-feeds}.
3877 @end defun
3879 @node iCal Task Publication, RDF Publication, RSS Publication, Publishing
3880 @comment  node-name,  next,  previous,  up
3881 @subsection iCal Publication
3883 iCal is an Internet Engineering Task Force (IETF) standard for
3884 calendaring and scheduling. @uref{http://www.ietf.org/rfc/rfc2445.txt}
3886 You can export your tasks to the iCal format using
3887 @file{planner-ical}. Add @code{(require 'planner-ical)} to your
3888 @file{~/.emacs}. Then you can use @kbd{M-x planner-ical-export-page}
3889 to display the iCal equivalent of tasks on a page, which you can then
3890 save to a file.
3892 To export today's tasks to a file in your publishing directory, add
3893 the following to your @file{~/.emacs}.
3895 @example
3896 (planner-ical-export-file
3897  (planner-today)
3898  (expand-file-name
3899    "tasks.ics"
3900    (muse-style-element :path (car (cddr (muse-project planner-project))))))
3901 @end example
3903 @subheading Functions
3905 @defun planner-ical-export-page page &optional file
3906 Export PAGE's tasks in the iCal format.
3907 If FILE is non-nil, results are saved to that file.
3908 If FILE is nil, results are displayed in a `planner-ical-export-buffer'.
3909 @end defun
3911 @defun planner-ical-export-this-page
3912 Display the tasks on the current page in iCal format.
3913 @end defun
3915 @node RDF Publication,  , iCal Task Publication, Publishing
3916 @comment  node-name,  next,  previous,  up
3917 @subsection RDF Publication
3918 @cindex @file{planner-rdf.el}, using
3919 @cindex RDF, publishing to
3921 Put planner-rdf.el in a directory that is in your Emacs load-path and
3922 the following into your ~/.emacs file:
3924 @example
3925 (require 'planner-rdf)
3926 (eval-after-load "muse-publish"
3927   '(progn
3928      (add-hook 'muse-after-publish-hook
3929                'planner-rdf-publish-file)
3930      (add-hook 'muse-after-publish-hook
3931                'planner-rdf-publish-index)))
3932 @end example
3934 @menu
3935 * Publishing with planner-rdf::  
3936 * planner-rdf Tags::            
3937 * planner-rdf Usage Examples::  
3938 @end menu
3940 @node Publishing with planner-rdf, planner-rdf Tags, RDF Publication, RDF Publication
3941 @subsubsection Publishing with planner-rdf
3943 Planner-rdf is now included in the normal Planner publishing process.
3944 Pressing @key{C-p} will create a .owl and a .rdf file for every planner
3945 file. Additionally it creates an index, @file{index.rdf}.
3947 By default all generated files will be stored in the normal Planner
3948 publishing directory, where the HTML files end up. If you would ike to
3949 change that, set the variable @code{planner-rdf-directory} to the desired
3950 location.
3952 The generated files:
3954 @itemize
3955 @item
3956 @file{index.rdf} - a collection with pointers to the
3957 @file{<plan-page>.rdf} files.
3958 @item
3959 @file{<plan-page>.rdf} - contains Dublin Core metadata about the files
3960 related to the current Planner page. Currently it contains metadata
3961 about the source file, the Emacs plan page, the generated HTML page, and
3962 the generated OWL file.
3963 @item
3964 @file{<plan-page>.owl} - contains task and note data from the Planner
3965 file. Task information is stored completely. For notes, the note
3966 headline is stored.
3967 @end itemize
3969 @node planner-rdf Tags, planner-rdf Usage Examples, Publishing with planner-rdf, RDF Publication
3970 @subsubsection planner-rdf Tags
3972 Besides the factual information, e.g. the task status or description,
3973 planner-rdf extracts links (in the format @samp{[[...][...]]} or
3974 @samp{[[...]]}) and tags (@samp{@{@{...:...}@}@}) from tasks and notes
3975 (including the notes text). Links and tags provide context for the plan
3976 elements and so are stored and linked with the containing elements.
3978 Links point to locations that can be used to enrich the information in
3979 the Planner pages (e.g, by retrieving data from them and adding it),
3980 tags -- like the one for the task ids @samp{@{@{Tasks:198@}@}} -- can be
3981 used to express abstract qualities. Some examples:
3983 @itemize
3984 @item
3985 an @samp{@{@{audience:myteam@}@}} tag, can be used to restrict
3986 publishing of items to a certain user group;
3987 @item a @samp{@{@{lang:de@}@}} tag, signifying the language of the text;
3988 @item
3989 a @samp{@{@{location:Hamburg@}@}} tag, can be used to make geographic
3990 reference to an entity that is not stored in your address book, bbdb.
3991 @end itemize
3993 What tags to use is up to the user. Planner-rdf makes no assumptions
3994 about them, it just extracts and stores them. Only the applications
3995 using the data know what to do with them.
3997 @node planner-rdf Usage Examples,  , planner-rdf Tags, RDF Publication
3998 @subsubsection Usage Examples
4000 Report generation with OpenOffice
4002 The Perl file @file{this-week.pl}
4003 (@url{http://www.rainervolz.de/planner-rdf/this-week.pl}) creates a
4004 simple report for the current week. The script extracts task and note
4005 information from the generated OWL files and inserts it into a simple
4006 OpenOffice Writer document. Nothing fancy, just a proof of concept, to
4007 show how planner-rdf can be used to integrate Planner Mode with other
4008 applications.
4010 Besides Perl and OpenOffice you'll need the Redland RDF Application
4011 Framework (@url{http://www.redland.opensource.ac.uk/}). It is used to
4012 process the RDF data. Redland is small, but powerful, and available
4013 for many platforms and languages.
4015 As an example the application loads the RDF data each time it is run.
4016 In the real world you probably would use Redland to store the Planner
4017 data in a database, to save the loading step each time you access the
4018 data.
4020 Importing Planner data into Protege
4022 Protege is a popular ontology editor and knowledge management
4023 application. A simple way to import data into it, is to provide a OWL
4024 file that contains the data as well as the schema. To do this:
4026 @itemize
4027 @item
4028 Use @file{planner2protege.pl}
4029 (@url{http://www.rainervolz.de/planner-rdf/planner2protege.pl}) to
4030 combine all OWL files into a single one.
4031 @item
4032 Use CWM (@url{http://www.w3.org/2000/10/swap/doc/cwm.html}) to combine
4033 schema and data, with @code{python cmw --rdf planner-rdf.owl
4034 planner-data.owl --think --rdf >planner2.owl}
4035 @end itemize
4037 Not the most straightforward process, but it works. The resulting file,
4038 here planner2.owl, can then be loaded into Protege.
4040 @node Experimental Functions,  , Publishing, More about Planner
4041 @comment  node-name,  next,  previous,  up
4042 @section Experimental Functions
4043 @cindex @file{planner-experimental.el}, using
4044 @cindex experimental functions, Planner
4046 These functions are experimental. This means that they may not do
4047 exactly what you expect them to do, so keep backups, be careful, and
4048 don't blame us.
4050 To use these functions, make sure that @file{planner-experimental.el} is
4051 in your load path, and add this to your @file{.emacs} (or
4052 @file{_emacs}):
4054 @example
4055 (require 'planner-experimental)
4056 @end example
4058 @subheading Functions
4060 @file{planner-experimental.el} defines the following interactive
4061 functions:
4063 @defun planner-search-notes-next-match
4064 Jump to the next matching entry.  Call after
4065 @code{planner-search-notes}.
4066 @end defun
4068 @defun planner-search-notes-previous-match
4069 Jump to the previous matching entry.  Call after
4070 @code{planner-search-notes}.
4071 @end defun
4073 @defun planner-remove-duplicates
4074 Remove duplicate tasks.
4075 @end defun
4077 @file{planner-experimental.el} does not define any keybindings.
4079 @node Managing Your Information, Advanced Configuration, More about Planner, Top
4080 @comment  node-name,  next,  previous,  up
4081 @chapter Managing Your Information
4083 Planner can be integrated with other Emacs and even some non-Emacs
4084 programs by loading additional modules. You can pick and choose from
4085 these modules, choosing those that work with programs you use and that
4086 produce information you want to have included in your Planner pages.
4088 @menu
4089 * E-mail::                      Linking notes and tasks to messages
4090 * Scheduling and Time::         Tracking appointments and where your time goes
4091 * Finances::                    Display your account balances and more
4092 * Contacts and Conversations::  BBDB and ERC
4093 * Tracking Research and Resources::  The Web, bibliographies, and bookmarks
4094 * Tracking Development::        
4095 @end menu
4097 @node E-mail, Scheduling and Time, Managing Your Information, Managing Your Information
4098 @comment  node-name,  next,  previous,  up
4099 @section E-mail
4101 Planner can work together with several different Emacs e-mail
4102 clients. If you load the appropriate module for the e-mail client you
4103 use, then your notes and tasks can be annotated with information
4104 pointing to the specific e-mail message you were reading when you
4105 created that note or task. When you are looking at the note or task, you
4106 will be able to jump straight to that message.
4108 @menu
4109 * Unix mail::                   Unix mailboxes: planner-unix-mail.el              
4110 * Gnus::                        Gnus mail and news reader: planner-gnus.el
4111 * VM::                          VM mail reader: planner-vm.el
4112 * Wanderlust::                  Wanderlust mail reader: planner-wl.el
4113 * MH-E::                        MH-E mail reader: planner-mhe.el
4114 * Rmail::                       Rmail: planner-rmail.el
4115 @end menu
4118 @node Unix mail, Gnus, E-mail, E-mail
4119 @comment  node-name,  next,  previous,  up
4120 @subsection Unix mail
4121 @cindex mbox, using Planner with
4122 @cindex Unix mail, using Planner with
4123 @cindex mail client, using Planner with
4125 This module supports links from any kind of Unix mailbox (mbox). To
4126 use this module, make sure that @file{planner-unix-mail.el} is in your
4127 load path and add this to your @file{.emacs} (or @file{_emacs}):
4129 @example
4130 (require 'planner-unix-mail)
4131 @end example
4133 Unix mail URLs are of the form:
4135 @example
4136 ;; mail://PATH/TO/INBOX/message-id
4137 @end example
4139 Annotations will be of the form:
4141 @smallexample
4142 [[mail://PATH/TO/INBOX/E1AyTpt-0000JR-LU%40sacha.ateneo.edu][E-mail from Sacha Chua]]
4143 @end smallexample
4145 @file{planner-unix-mail.el} does not define any interactive functions or
4146 create any new keybindings.
4148 @node Gnus, VM, Unix mail, E-mail
4149 @comment  node-name,  next,  previous,  up
4150 @subsection Gnus
4151 @cindex Gnus, using Planner with
4152 @cindex mail client, using Planner with, Gnus
4154 To use this module, make sure that it is in your load path and put
4155 this in your @file{.emacs} (or @file{_emacs}):
4157 @example
4158 (require 'planner-gnus)
4159 (planner-gnus-insinuate)
4160 @end example
4162 With this module loaded, when you create tasks from Gnus summary or
4163 message buffers, the tasks will be annotated with information from the
4164 message you were looking at when you created each task. A link will also
4165 be created on your planner page that you can select in order to return
4166 to the message.
4168 So, the created task will look something like this:
4170 @smallexample
4171 #A34 _ Send writing to publishme.com from
4172 [[gnus://alt.books.beatgeneration/<Ifo5c.24632$F9.9567@@nwrddc01.gnilink.net>][E-Mail
4173 from editor@@verizon.net]] @{@{Tasks:71@}@} ([[Writing]])
4174 @end smallexample
4176 This module also binds @kbd{C-c C-t} in the Gnus summary and article
4177 views to the command to create a new task.
4179 @file{planner-gnus.el} does not define any interactive functions.
4181 For more information about Gnus, see @inforef{Top, The Gnus Newsreader,
4182 gnus}.
4184 @node VM, Wanderlust, Gnus, E-mail
4185 @comment  node-name,  next,  previous,  up
4186 @subsection VM
4187 @cindex VM, using Planner with
4188 @cindex mail client, using Planner with, VM
4190 To use this module, make sure that @file{planner-vm.el} is in your load
4191 path and add this to your @file{.emacs} (or @file{_emacs}):
4193 @example
4194 (require 'planner-vm)
4195 @end example
4197 VM URLs are of the form:
4199 @example
4200 vm://path/to/inbox/message-id
4201 @end example
4203 Annotations will be of the form:
4205 @smallexample
4206 [[vm://home/test/INBOX/<E1AyTpt-0000JR-LU@@sacha.ateneo.edu>][E-mail from Sacha Chua]]
4207 @end smallexample
4209 @file{planner-vm.el} does not define any interactive functions or
4210 keybindings.
4213 @node Wanderlust, MH-E, VM, E-mail
4214 @comment  node-name,  next,  previous,  up
4215 @subsection Wanderlust
4216 @cindex Wanderlust, using Planner with
4217 @cindex mail client, using Planner with, Wanderlust
4219 To use this module, make sure that @file{planner-wl.el} is in your
4220 load path and add this to your @file{.emacs} (or @file{_emacs}):
4222 @example
4223 (require 'planner-wl)
4224 @end example
4226 Then, when you call @kbd{M-x planner-create-task-from-buffer} from
4227 Wanderlust summary or message buffers, the task will be created with
4228 the correct annotation.
4230 @file{planner-wl} does not define any interactive functions.
4232 @subheading Keys
4234 To add keybindings to Wanderlust, call:
4236 @example
4237 (planner-wl-insinuate)
4238 @end example
4240 This binds @kbd{F} to @command{planner-create-task-from-buffer}.
4242 @node MH-E, Rmail, Wanderlust, E-mail
4243 @comment  node-name,  next,  previous,  up
4244 @subsection MH-E
4245 @cindex MH-E, using Planner with
4246 @cindex mail client, using Planner with, MH-E
4248 To use this module, make sure that @file{planner-mhe.el} is in your
4249 load path and add this to your @file{.emacs} (or @file{_emacs}):
4251 @example
4252 (require 'planner-mhe)
4253 @end example
4255 Then, when you call @kbd{M-x planner-create-task-from-buffer} from
4256 MH-E summary or message buffers, the task will be created with
4257 the correct annotation.
4259 @file{planner-mhe} does not define any interactive functions.
4261 @node Rmail,  , MH-E, E-mail
4262 @comment  node-name,  next,  previous,  up
4263 @subsection Rmail
4264 @cindex Rmail, using Planner with
4265 @cindex mail client, using Planner with, Rmail
4267 To use this module, make sure that @file{planner-rmail.el} is in your
4268 load path and add this to your @file{.emacs} (or @file{_emacs}):
4270 @example
4271 (require 'planner-rmail)
4272 @end example
4274 Rmail URLs are of the form:
4276 @example
4277 rmail://message-id
4278 @end example
4280 Annotations will be of the form:
4282 @smallexample
4283 [[rmail://<E1AyTpt-0000JR-LU@@sacha.ateneo.edu>][E-mail from Sacha Chua]]
4284 @end smallexample
4286 @file{planner-rmail.el} does not define any interactive functions or
4287 create any new keybindings.
4289 For more information about Rmail, see @inforef{Rmail, Reading Mail With
4290 Rmail, Emacs}.
4292 @node Scheduling and Time, Finances, E-mail, Managing Your Information
4293 @comment  node-name,  next,  previous,  up
4294 @section Scheduling and Time
4296 @menu
4297 * Diary::                       Using the Emacs diary: planner-diary.el
4298 * Appointments::                Appointments in plan pages: planner-appt.el
4299 * Timeclock::                   Time tracking: planner-timeclock.el
4300 * schedule.el::                 Project completion: planner-schedule.el
4301 @end menu
4304 @node Diary, Appointments, Scheduling and Time, Scheduling and Time
4305 @comment  node-name,  next,  previous,  up
4306 @subsection Diary
4307 @cindex diary, using Planner with
4308 @cindex @file{planner-diary.el}, using
4310 If you use Emacs's diary feature, Planner-Diary could be helpful for
4311 you. It puts all diary entries for the current day in the @samp{*
4312 Diary} section of your day plan page. This section is updated every
4313 time you display the file in Emacs. By default the diary section of
4314 past pages is not updated; it's pretty unlikely that you want to add
4315 new diary entries for the past. (@pxref{Diary, , , Emacs, GNU Emacs
4316 Manual})
4318 If you want to use @file{planner-diary.el}, make sure the file is in
4319 your load path and add this to your @file{.emacs} (or @file{_emacs}):
4321 @example
4322 (require 'planner-diary)
4323 @end example
4325 @file{planner-diary.el} needs @command{fancy-diary-display}.  To use
4326 @command{fancy-diary-display}, add this to your @file{.emacs} (or
4327 @file{_emacs}):
4329 @example
4330 (add-hook 'diary-display-hook 'fancy-diary-display)
4331 @end example
4333 You can use Planner-Diary in two different ways:
4335 @enumerate
4337 @item
4338 If you want the saved files to contain your entries and not just a line
4339 of Lisp, add the following lines to your @file{.emacs} (or @file{_emacs}):
4341 @example
4342 (setq planner-diary-use-diary t)
4343 (planner-diary-insinuate)
4344 @end example
4346 You should also customize or set @code{planner-day-page-template} to
4347 include a @samp{* Diary}:
4349 @example
4350 (setq planner-day-page-template
4351  "* Tasks\n\n\n* Schedule\n\n\n* Diary\n\n\n* Notes")
4352 @end example
4354 @item
4355 (GNU EMACS ONLY) You can put the following line of Lisp code in your
4356 day plan pages to display your diary entries:
4358 @example
4359 <lisp>(planner-diary-entries-here)</lisp>
4360 @end example
4362 You can do this automatically for all day plan pages:
4364 @smallexample
4365 (setq planner-day-page-template
4366   "* Tasks\n\n\n* Diary\n\n<lisp>(planner-diary-entries-here)</lisp>
4367 \n* Notes")
4368 @end smallexample
4370 When you open a day plan page outside Emacs, you will see the line of
4371 Lisp code and not your diary entries.
4373 @end enumerate
4375 If you want to see your diary entries for more than just one day, set
4376 @code{planner-diary-number-of-days} accordingly.  This works for either
4377 of the two approaches.
4379 @kbd{C-c C-e} updates the diary sections.  @kbd{C-u C-c C-e} forces an
4380 update---it inserts the diary section for the day, even if the day is in
4381 the past or if there is no @samp{Diary} section in the buffer.
4383 If you want to use the Cal-Desk package, simply follow the instructions
4384 in @file{cal-desk.el}.  If you get the Cal-Desk layout from the Calendar
4385 buffer, you get it in the day plan buffer, too.
4387 If you use Planner-Diary, you might consider using the Calendar support
4388 of Planner. (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}) To get
4389 Calendar integration, add this to your @file{.emacs} (or @file{_emacs}):
4391 @example
4392 (planner-insinuate-calendar)
4393 @end example
4395 If @code{planner-diary-create-section-flag} is non-nil, sections are
4396 always inserted if necessary.
4398 @subheading Options
4400 @defopt planner-diary-create-section-flag
4401 Non-nil means create the requested diary sections if they do not
4402 exist. By default, planner-diary tries to create the section. If you
4403 want more control over your pages, you can set this to nil. Trying to
4404 write a diary section to a page that does not have it yet will then
4405 result in an error.
4406 @end defopt
4408 By default, planner-diary lists only the appointments you have on that
4409 day. If you want the date headers included even when showing the diary
4410 entries for a single day, set planner-diary-include-all-output to
4411 non-nil.
4413 @defopt planner-diary-include-all-output-flag
4414 Non-nil means don't omit any data when copying diary entries into day
4415 pages.
4416 @end defopt
4418 @subheading Functions
4420 @file{planner-diary.el} defines the following interactive functions:
4422 @defun planner-diary-add-entry date time text
4423 Prompt for a diary entry to add to @code{diary-file} on @var{date}.
4424 Uses @code{planner-annotation-functions} to make hyperlinks.
4425 @var{time} and @var{text} are used in the description."
4426 @end defun
4428 @defun planner-diary-insert-diary force
4429 Insert the fancy diary for the day into the day plan file. If
4430 @var{force} is non-nil, insert a diary section even if there is no
4431 @var{planner-diary-string} in the buffer.
4432 @end defun
4434 @defun planner-diary-insert-diary-maybe force
4435 Maybe insert the fancy diary for the day into the day plan file. If the
4436 current day is in the past and @var{force} is nil, don't do anything. If
4437 @var{force} is non-nil, insert a diary section even if there is no
4438 @code{planner-diary-string} in the buffer.
4439 @end defun
4441 @defun planner-diary-insert-appts force
4442 Insert the diary appointments for the day into the day plan file.  If
4443 @var{force} is non-nil, insert a diary appointments section even if
4444 there is no @code{planner-diary-appts-string} in the buffer.
4445 @end defun
4447 @defun planner-diary-insert-appts-maybe force
4448 Maybe insert the diary appointments for the day into the day plan file.
4449 If the current day is in the past and @var{force} is nil, don't do
4450 anything.  If @var{force} is non-nil, insert a diary appointments
4451 section even if there is no @code{planner-diary-appts-string} in the
4452 buffer.
4453 @end defun
4455 @defun planner-diary-insert-cal-desk force
4456 Insert the cal-desk diary for the day into the day plan file.  If
4457 @var{force} is non-nil, insert a cal-desk diary section even if there is
4458 no @code{planner-diary-cal-desk-string} in the buffer.
4459 @end defun
4461 @defun planner-diary-insert-cal-desk-maybe force
4462 Maybe insert the cal-desk diary for the day into the day plan file.  If
4463 the current day is in the past and @var{force} is nil, don't do
4464 anything.  If @var{force} is non-nil, insert a cal-desk appointments
4465 section even if there is no @code{planner-diary-cal-desk-string} in the
4466 buffer.
4467 @end defun
4469 @defun planner-diary-insert-public force
4470 Insert the public diary for the day into the day plan file.  If
4471 @var{force} is non-nil, insert a public diary section even if there is
4472 no @code{planner-diary-public-string} in the buffer.
4473 @end defun
4475 @defun planner-diary-insert-public-maybe force
4476 Maybe insert the public diary for the day into the day plan file.  If
4477 the current day is in the past and @var{force} is nil, don't do
4478 anything.  If @var{force} is non-nil, insert a public appointments
4479 section even if there is no @code{planner-diary-public-string} in the
4480 buffer.
4481 @end defun
4483 @defun planner-diary-insert-private force
4484 Insert the private diary for the day into the day plan file.  If
4485 @var{force} is non-nil, insert a private diary section even if there is
4486 no @code{planner-diary-private-string} in the buffer.
4487 @end defun
4489 @defun planner-diary-insert-private-maybe force
4490 Maybe insert the private diary for the day into the day plan file.  If
4491 the current day is in the past and @var{force} is nil, don't do
4492 anything.  If @var{force} is non-nil, insert a private appointments
4493 section even if there is no @code{planner-diary-private-string} in the
4494 buffer.
4495 @end defun
4497 @defun planner-diary-insert-all-diaries force
4498 Update all diary sections in a day plan file.  If @var{force} is
4499 non-nil, insert a diary section even if there is no section header.  It
4500 only inserts diaries if the corresponding @code{planner-diary-use-}*
4501 variable is @samp{t}.
4502 @end defun
4504 @defun planner-diary-insert-all-diaries-maybe force
4505 Update all diary sections in a day plan file.  If the current day is in
4506 the past and @var{force} is nil, don't do anything.  If @var{force} is
4507 non-nil, insert a diary section even if there is no section header.  It
4508 only inserts diaries if the corresponding @code{planner-diary-use-}*
4509 variable is @samp{t}.
4510 @end defun
4512 @defun planner-diary-show-day-plan-or-diary
4513 Show the day plan or diary entries for the date under point in calendar.
4514 Add this to @code{calendar-move-hook} if you want to use it.  In that
4515 case, you should also @command{remove-hook} @samp{planner-calendar-show}
4516 from @code{calendar-move-hook}.
4517 @end defun
4519 @subheading Keys
4521 @file{planner-diary.el} adds the following keybinding to Planner, if
4522 @command{planner-diary-insinuate} is in your @file{.emacs} (or
4523 @file{_emacs}):
4525 @itemize
4527 @item
4528 @kbd{C-c C-e} updates the diary sections.
4530 @end itemize
4532 @menu
4533 * Planner-Diary Advanced Features::  
4534 @end menu
4536 @node Planner-Diary Advanced Features,  , Diary, Diary
4537 @comment  node-name,  next,  previous,  up
4538 @subsubsection Planner-Diary Advanced Features
4539 @cindex diary, using Planner with
4540 @cindex @file{planner-diary.el}, advanced features
4542 The features described here are part of the development version.  They
4543 are subject to change without notice.  They may be buggy.  The
4544 documentation may be inaccurate.  Use at your own risk.
4546 There is a lot of code redundancy in the development version.  This is
4547 intentional and makes it easier to change the code for one type of diary
4548 section without breaking others.
4550 @subheading Diary views
4552 @cindex @file{planner-diary.el}, views
4553 Currently Planner-Diary supports six different views of your diary
4554 entries:
4556 @enumerate
4557 @item
4558 Ordinary fancy diary display (what you get by pressing @kbd{d} in the
4559 calendar buffer with @code{fancy-diary-display} switched on)
4561 @item
4562 Schedule/Appointments (all entries from 1 that have a time assigned to
4563 them
4565 @item
4566 Diary without appts (1 without 2)
4568 @item
4569 cal-desk display (appts on top, non appts entries at bottom)
4571 @item
4572 A private diary (same as 1, but uses a different diary-file)
4574 @item
4575 A public diary (same as 1, but uses a different diary-file)
4576 @end enumerate
4578 Put the following line of Lisp code in your day plan pages to display
4579 your diary entries:
4581 @example
4582 <lisp>(planner-diary-entries-here)</lisp>
4583 @end example
4585 The function @code{planner-diary-entries-here} takes two optional
4586 arguments---the diary file you want to use and the number of days you
4587 want to display.
4589 @subheading Exporting Planner-specific Diary files
4591 @cindex @file{planner-diary.el}, exporting entries
4592 If you would like to export diary entries from your Planner pages to
4593 separate Diary files, add @code{(require 'planner-export-diary)} to your
4594 config.  The following steps describe the usage of the functions and
4595 options contained in this file.
4597 @enumerate
4599 @item
4600 Customize @code{planner-export-diary-file}.  The default value is
4601 ``~/diary.planner''.
4603 @item
4604 Add the following line to your main Diary file (default: ``~/diary'').
4606 @example
4607 #include ~/diary.planner
4608 @end example
4610 @item
4611 Then, call @command{M-x planner-export-diary-future} whenever you want
4612 future diary entries published. You can automatically publish entries by
4613 adding either of the following to your .emacs.
4615 @itemize
4617 @item (planner-export-diary-future)
4618 Publish future entries on startup.
4620 @item (add-hook 'planner-mode-hook 'planner-export-diary-setup)
4621 Publish future entries whenever you save a Planner file.
4623 @end itemize
4625 @end enumerate
4627 @node Appointments, Timeclock, Diary, Scheduling and Time
4628 @comment  node-name,  next,  previous,  up
4629 @subsection Appointments
4630 @cindex appointments
4631 @cindex @file{planner-appt.el}, using
4633 If you would like to use planner for your appointment alerts
4634 instead of using the diary system, you might like to try
4635 @file{planner-appt}.
4637 According to your preferences, you may choose from two different
4638 approaches. Appointments in task descriptions on today's plan
4639 page are like this:
4641 @example
4642 #A   _ @@12:45 Do something (TaskPool)
4643 @end example
4645 @noindent
4646 and appointments in today's schedule section are like this:
4648 @example
4649 * Schedule
4651   9:00 | 12:00 | Read Simmel's Philosophy of Money
4652 @@12:45 |       | Do Something Else
4653 @@13:00 | 14:00 | lunch
4654 @end example
4656 @noindent
4657 You can even use both at the same time if you like.
4659 @c Jim Ottaway <j.ottaway@lse.ac.uk>: Changed these kinds of heading
4660 @c back to @unnumberedsec, but left the originals commented out in
4661 @c case there was a good reason for the @strong formatting.
4663 @c @noindent
4664 @c @strong{Usage}
4665 @unnumberedsubsubsec Usage
4667 In the file where you configure Planner, add one of the following.
4669 @itemize
4670 @item
4671 For task-based appointments: @code{(planner-appt-use-tasks)}
4672 @item
4673 For schedule-based appointments: @code{(planner-appt-use-schedule)}
4674 @item
4675 For both task- and schedule-based appointments:
4676 @code{(planner-appt-use-tasks-and-schedule)}
4677 @end itemize
4679 @noindent
4680 And finally if you want everything to be updated automatically add:
4682 @example
4683 (planner-appt-insinuate)
4684 @end example
4686 If you don't want to do the insinuation then you can call:
4688 @example
4689 M-x planner-appt-update
4690 @end example
4692 @noindent
4693 after editing appointments on the page (note that this is not
4694 necessary if you use tasks for the appointments and you don't edit
4695 the task descriptions outside of @code{planner-edit-task-description}).
4697 Try both methods; if you find that you prefer one over the
4698 other, use one of the specific @code{planner-appt-use-} functions, as
4699 there are some performance gains when using one method exclusively.
4701 @menu
4702 * Task-based Appointments::     
4703 * Schedule-based Appointments::  
4704 * Viewing Appointments::        
4705 * Appointment Updating on Save::  
4706 * Appointment and Calendar Integration::  
4707 * Appointment Hooks::           
4708 @end menu
4711 @node Task-based Appointments, Schedule-based Appointments, Appointments, Appointments
4712 @comment  node-name,  next,  previous,  up
4713 @subsubsection Task-based Appointments
4714 @cindex appointments, task-based
4715 @cindex task-based appointments
4717 A task has an appointment if it looks like this:
4719 @example
4720 #A   _ @@12:45 Do something (TaskPool)
4721 @end example
4723 @noindent
4724 i.e., if it has @@ followed by a time at the beginning.  This means
4725 the task is a regular appointment, and will not be carried forward
4726 at the start of a new day.
4728 Alternatively, it may have a !, like this:
4730 @example
4731 #A   _ !12:45 Do something else (TaskPool)
4732 @end example
4734 @noindent
4735 This makes it a "nagging" appointment, which @emph{will} be carried
4736 forward.  It will, however, lose the appointment time in the
4737 process.
4739 This may seem like a strange feature, but here is Henrik's
4740 reasoning:
4742 @quotation
4743 Sometimes I have a task that I want to do at a certain time, so I
4744 make it an appointment.  If I don't get around to doing it anyway,
4745 I want it to be carried forward.  Basically, I sometimes use
4746 appointments on tasks to annoy me until I get them done. :)
4747 @end quotation
4749 You can edit, move and delete tasks with the usual functions, and
4750 appointments will be updated automatically.
4752 You can update all task appointments on your page with
4754 @example
4755 M-x planner-appt-update
4756 @end example
4758 @c @noindent
4759 @c @strong{Cyclic Entries}
4761 @unnumberedsubsubsec Cyclic Entries
4762 @cindex appointments, cyclic task entries
4764 If you have @file{planner-cyclic} (@pxref{Cyclic Tasks}) loaded, entries
4765 in your cyclical tasks file such as
4767 @example
4768 Friday #A _ @@12:45 staff meeting
4769 @end example
4771 @noindent
4772 will appear every Friday and there will be an appointment alert set
4775 @c @noindent
4776 @c @strong{Appointments Section}
4777 @unnumberedsubsubsec Appointments Section
4778 @cindex appointments, appointments section
4780 You can have all task-based appointments copied to a separate section,
4781 providing an overview of your appointments.
4783 To do this, add
4785 @example
4786 (setq planner-appt-task-use-appointments-section-flag t)
4787 @end example
4789 @noindent to your configuration, or use @kbd{M-x customize-variable}.
4791 The variable @code{planner-appt-task-appointments-section} is the name
4792 of the section where the appointments will be copied.  By default, it is
4793 set to @code{"Schedule"}, which means that task appointments will be
4794 intermingled with schedule entries.
4796 It is also a good idea to add the section you wish to use to
4797 @code{planner-day-page-template} in order to control where that section
4798 will appear on the page (otherwise it will appear at the top).
4800 The format of the appointments follows that of a schedule; if you
4801 don't like the way it looks, you can write something different and set
4802 @code{planner-appt-format-appt-section-line-function} appropriately.
4803 See the documentation for
4804 @code{planner-appt-format-appt-section-line-function} for details.  It
4805 should be fairly easy to see what needs to be done if you look at the
4806 source for the default function (which is
4807 @code{planner-appt-format-appt-section-line}).
4809 If the section specified in
4810 @code{planner-appt-task-appointments-section} is the same as the
4811 schedule section specified in @code{planner-appt-schedule-section} (by
4812 default @code{"Schedule"}), the default formatting function adds a
4813 @samp{#} to the description so that one can visually distinguish
4814 appointments from the task list from those that have been added to the
4815 schedule.
4817 @node Schedule-based Appointments, Viewing Appointments, Task-based Appointments, Appointments
4818 @comment node-name,  next,  previous,  up
4819 @subsubsection Schedule-Based Appointments
4820 @cindex appointments, schedule-based
4821 @cindex schedule-based appointments
4823 Some scheduled tasks require reminders, others don't.  In this
4824 schedule:
4826 @example
4827 * Schedule
4829 9:00   | 12:00 | Read Simmel's Philosophy of Money
4830 @@12:45          Do Something Else
4831 @@13:00 | 14:00 | lunch
4832 @@14:30 |       | Meet jrs to discuss his dissertation
4833 @@16:00           Test Society seminar
4834 18:00            go home
4835 @end example
4837 @noindent
4838 those that have an @@ prefix will be added to the appointment
4839 reminder list; the others will not.  The formats that are
4840 recognized are fairly flexible, as you can see from the example.
4842 If you change your schedule, you can update the appointment list
4843 with
4845 @example
4846 M-x planner-appt-update
4847 @end example
4849 @noindent You can also have the schedule sorted as part of the update,
4850 if you have this in your configuration:
4852 @example
4853 (setq planner-appt-sort-schedule-on-update-flag t)
4854 @end example
4856 @c @noindent 
4857 @c @strong{Cyclical Entries}
4858 @unnumberedsubsubsec Cyclical Entries
4859 @cindex appointments, cyclic schedule entries
4861 You can also have cyclical schedule entries(@pxref{Cyclic Tasks}) if you
4864 @example
4865 (planner-appt-schedule-cyclic-insinuate)
4866 @end example
4868 @noindent to your configuration.
4870 If you put an entry in your cyclical task file like this
4872 @example
4873 Friday @@12:45 | 13:45 | Staff Meeting
4874 @end example
4876 @noindent
4877 then it will appear in your schedule every Friday, and an
4878 appointment alert will be set up.
4880 @node Viewing Appointments, Appointment Updating on Save, Schedule-based Appointments, Appointments
4881 @comment  node-name,  next,  previous,  up
4882 @subsubsection Viewing Appointments
4883 @cindex appointments, viewing
4885 The command @command{planner-appt-show-alerts} will show all appointment
4886 alerts currently scheduled.
4888 @subheading Functions
4890 There are two commands that show appointments in the future; the one
4891 displays them in a pop-up buffer, the other puts the information into
4892 the current day page.
4894 @deffn {Command} planner-appt-forthcoming-display &optional days
4895 Display a buffer of appointments for today and the next
4896 @var{days}. Optional prefix argument @var{days} is the number of days
4897 ahead to look. Its default value is defined by
4898 @code{planner-appt-forthcoming-days}.
4899 @end deffn
4901 @deffn {Command} planner-appt-forthcoming-update-section &optional days
4902 In today's plan page, add or update a list of forthcoming
4903 appointments. Optional prefix argument @var{days} is the number of
4904 days ahead to look. Its default value is defined by
4905 @code{planner-appt-forthcoming-days}.  The section heading to use is
4906 defined by @code{planner-appt-forthcoming-appt-section}.
4907 @end deffn
4909 @subheading Options
4911 @defopt planner-appt-forthcoming-days
4912 The number of days to look ahead for forthcoming appointments.  The
4913 default value is seven days.
4914 @end defopt
4916 @defopt planner-appt-forthcoming-appt-section
4917 The name of the section to use for inserting a list of forthcoming
4918 appts.  The default value is @code{"Forthcoming Appointments"}.
4919 @end defopt
4921 @defopt planner-appt-forthcoming-show-day-names-flag
4922 When non-nil (the default), day names will be shown in forthcoming
4923 appointments.
4924 @end defopt
4926 @defopt planner-appt-forthcoming-repeat-date-string
4927 String to insert for repeated dates.
4929 When there are multiple appointments for a date, the date is inserted
4930 in the first appointment and the others have this string in their date
4931 cell.
4933 If the string consists of anything other than whitespace, then a link
4934 to the day page for the appoinment is created.
4935 @end defopt
4937 @defopt planner-appt-forthcoming-look-at-cyclic-flag
4938 When non-nil, find forthcoming appointments in the cyclic diary file
4939 (@pxref{Cyclic Tasks}) as well as in plan pages. Default is @samp{t}.
4940 @end defopt
4942 @node Appointment Updating on Save, Appointment and Calendar Integration, Viewing Appointments, Appointments
4943 @comment  node-name,  next,  previous,  up
4944 @subsubsection Appointment Updating on Save
4945 @cindex appointments, updating on save
4947 @subheading Options
4949 @defopt planner-appt-update-appts-on-save-flag
4950 When non-nil, update appointment reminders whenever today's plan page is
4951 saved. Default value is @samp{nil}.
4952 @end defopt
4954 @node Appointment and Calendar Integration, Appointment Hooks, Appointment Updating on Save, Appointments
4955 @comment  node-name,  next,  previous,  up
4956 @subsubsection Appointment and Calendar Integration
4958 Not strictly part of appointment handling, but if one isn't using
4959 the diary, marking dates with plan pages seems to make sense.
4961 @subheading Functions
4963 @defun planner-appt-calendar-insinuate
4964 Add a hook to diary display so that dates in the calendar that have day
4965 pages are highlighted
4966 @end defun
4968 @node Appointment Hooks,  , Appointment and Calendar Integration, Appointments
4969 @comment  node-name,  next,  previous,  up
4970 @subsubsection Appointment Hooks
4972 @subheading Options
4974 @defvr {Hook} planner-appt-update-hook
4975 Hook run after @code{planner-appt-update} has updated the appointment
4976 list.
4977 @end defvr
4979 @node Timeclock, schedule.el, Appointments, Scheduling and Time
4980 @comment  node-name,  next,  previous,  up
4981 @subsection Timeclock
4982 @cindex @file{planner-timeclock.el}, using
4983 @cindex @file{planner-timeclock-summary.el}, using
4984 @cindex @file{planner-timeclock-summary-proj.el}, using
4985 @cindex timeclock, using Planner with
4987 This module allows you to clock in and clock out of your projects
4988 (@pxref{Time Intervals, , , Emacs, GNU Emacs Manual}). You can also
4989 generate reports with the @code{<timeclock-report>} tag. You may want
4990 to read the @ref{Keeping Track of Time} page to see how you can use
4991 planner-timeclock to produce detailed reports.
4993 @file{timeclock.el} is part of GNU Emacs.  If you are using XEmacs,
4994 please use the version of @file{timeclock.el} the comes with Planner in
4995 the @file{contrib} directory.
4997 With @file{planner-timeclock.el} loaded,
4998 @command{planner-task-in-progress} clocks in a task.  To clock out,
4999 use @command{planner-task-done} or @command{timeclock-out}.
5001 @file{planner-timeclock.el} defines the following keybindings:
5003 @itemize
5004 @item @kbd{C-c C-i}: @code{planner-task-in-progress}.
5005 @item @kbd{C-c C-o}: @code{timeclock-out}.
5006 @item @kbd{C-c C-T C-i}: @code{planner-timeclock-in}. (XEmacs)
5007 @item @kbd{C-c C-T C-o}: @code{timeclock-out}. (XEmacs)
5008 @item @kbd{C-c C-S-t C-i}: @code{planner-timeclock-in}. (GNU Emacs)
5009 @item @kbd{C-c C-S-t C-o}: @code{timeclock-out}. (GNU Emacs)
5010 @end itemize
5012 If you use @code{timeclock} a lot, you may also be interested in
5013 Dryice Liu's @file{planner-timeclock-summary.el}, which produces
5014 timeclock reports for planner files.
5016 Here is a sample report:
5018 @example
5019 Project               |     Time| Ratio| Task
5020 PlannerMaintenance    |  0:03:58|  1.1%| Merge doc patch
5021                       |  0:17:09|  5.0%| Track down subdirectories
5022                       |  0:18:11|  5.3%| Merge planner-timeclock-summary-proj.el
5023                Total: |  0:39:18| 11.4%|
5024 JapanCaseStudy        |  2:37:56| 45.6%| Prototype search result page
5025                       |  0:31:50|  9.2%| Update design documents
5026                Total: |  3:09:46| 54.8%|
5027 ChristmasLetter       |  1:46:37| 30.8%| Write and send my Christmas letters
5028                Total: |  1:46:37| 30.8%|
5029 LinuxPeople           |  0:10:29|  3.0%| Send questions for Linux in Education
5030                Total: |  0:10:29|  3.0%|
5031 @end example
5033 If you add @code{(require 'planner-timeclock-summary)} to your
5034 @file{~/.emacs}, you can then use it in two ways.
5036 @itemize
5038 @item Display a temporary buffer
5040 Call @code{planner-timeclock-summary-show} and Emacs will ask you which
5041 day's summary do you want. Choose the date as anywhere else of
5042 Emacs planner, and a tempory buffer will be displayed with the
5043 timeclock summary of that day.
5045 To review tasks over a date range, use
5046 @code{planner-timeclock-summary-show-range}. You can use a regexp or a
5047 function to filter tasks by calling
5048 @code{planner-timeclock-summary-show-range-filter}.
5050 @item Rewrite sections of your planner
5052 Choose this approach if you want timeclock summary to be in their
5053 own section and you would like them to be readable in your plain
5054 text files even outside Emacs. Caveat: The timeclock summary
5055 section should already exist in your template and will be rewritten
5056 when updated. Tip: Add @code{planner-timeclock-summary-section}
5057 (default: @samp{"Timeclock"}) to your @code{planner-day-page-template}.
5059 To use, call @code{planner-timeclock-summary-update} in the planner
5060 day page to update the section. If you want rewriting to be
5061 automatically performed, call
5062 @code{planner-timeclock-summary-insinuate} in your @file{.emacs} file.
5063 @end itemize
5065 @file{planner-timeclock-summary-proj.el} produces task / time
5066 breakdowns on plan pages. Reports are of the form:
5068 @example
5069 TASK 0 | duration
5070 TASK 1 | duration
5071  TOTAL | duration.
5072 @end example
5074 To use, add @code{(require 'planner-timeclock-summary)} to your
5075 @file{~/.emacs}. Call @code{planner-timeclock-summary-proj-current}
5076 from a project page. The report is inserted at the current position in
5077 the buffer. The function @code{planner-timeclock-summary-proj-section}
5078 does the same but the report is inserted inside a section called
5079 @samp{* Report}.
5081 @node schedule.el,  , Timeclock, Scheduling and Time
5082 @comment  node-name,  next,  previous,  up
5083 @subsection @file{schedule.el}
5084 @cindex @file{planner-schedule.el}, using
5085 @cindex @file{schedule.el}, using Planner with
5087 @file{planner-schedule.el} allows you to project task completion time.
5088 Tasks should be of the form:
5090 @example
5091 #A0 _ 2h Do something
5092 #B0 _ 1h30m Do something
5093 #B0 _ 2d Do something
5094 #B0 _ 2w Do something
5095 #B0 _ 10s Do something
5097 s: seconds, m: minutes, h: hours, d: days, w: weeks
5098 @end example
5100 @file{schedule.el} is included with Planner in the @file{contrib}
5101 directory, but you can alternatively get it from
5102 @url{http://www.newartisans.com/johnw/Emacs/schedule.el} if desired.
5104 @file{schedule.el} provides a single Lisp function,
5105 @code{schedule-completion-time}. It takes an Emacs time object and a
5106 quantity of seconds. It returns an Emacs time object that represents
5107 when the given number of seconds will be completed, assuming that work
5108 can only be done during work hours.
5110 The available work hours are affected by several factors:
5112 @enumerate
5114 @item
5115 If @file{timeclock.el} is being used, the amount of time left in the
5116 current work day (@code{timeclock-workday-remaining})
5117 (@pxref{Time Intervals, , , Emacs, GNU Emacs Manual})
5119 @item
5120 The amount of time in each work day (@code{schedule-workday})
5122 @item
5123 The definition of a work week (@code{schedule-week})
5125 @item
5126 Any holidays defined in the Emacs calendar
5127 (@pxref{Holidays, , , Emacs, GNU Emacs Manual})
5129 @item
5130 Any appointments in the Emacs diary
5131 (@pxref{Appointments, , , Emacs, GNU Emacs Manual})
5133 @end enumerate
5135 Taking all of the ``block out'' periods into account,
5136 @code{schedule-completion-time} will compute when the given number of
5137 seconds will be done, based on your current definitions of time
5138 available.
5140 As an example, here's a function which, given a list of durations
5141 in seconds, will return a list of completion times starting from
5142 the current moment:
5144 @example
5146   (defun compute-completion-times (&rest durations)
5147     ``Compute completion times for a list of DURATIONS (in seconds).''
5148     (let ((now (current-time)))
5149       (mapcar
5150        (function
5151         (lambda (dura)
5152           (setq now (schedule-completion-time now dura))))
5153        durations)))
5155 @end example
5157 To call this function, do:
5159 @example
5161 (compute-completion-times 3600 7200 3600)
5163 @end example
5165 @subheading Keys
5167 @file{planner-schedule.el} defines the following keybindings:
5169 @kbd{C-c RET} is bound to @command{planner-schedule-show-end-project}.
5170 @kbd{C-c C-m} is also bound to
5171 @command{planner-schedule-show-end-project}.
5173 In XEmacs, @command{planner-schedule-show-end-project} is bound to
5174 @kbd{C-c C-T c-e} and @kbd{C-c C-S-t C-e}.
5176 @subheading Functions
5178 @file{planner-schedule.el} defines the following interactive
5179 functions:
5181 @defun planner-schedule-show-end-project
5182 Display the estimated project completion time.
5183 @end defun
5185 @file{schedule.el} does not define any interactive functions, or
5186 keybindings.
5188 @node Finances, Contacts and Conversations, Scheduling and Time, Managing Your Information
5189 @comment  node-name,  next,  previous,  up
5190 @section Finances
5191 @cindex finances
5193 Currently, Planner provides one module dedicated to tracking your
5194 finances. This module works with a program called Ledger.
5196 @menu
5197 * Ledger::                      Personal finances: planner-ledger.el
5198 @end menu
5200 @node Ledger,  , Finances, Finances
5201 @comment  node-name,  next,  previous,  up
5202 @subsection Ledger
5203 @cindex finances
5204 @cindex @file{planner-ledger.el}, using
5205 @cindex @file{ledger}, using Planner with
5207 @file{planner-ledger.el} provides integration between planner and John
5208 Wiegley's ledger accounting program, which can be found at
5209 @url{http://newartisans.com/johnw/ledger.tar.gz}.
5211 To use planner-ledger to insert a ledger balance overview and a list
5212 of pending transactions into planner day pages, make sure that your
5213 day page includes sections that match
5214 @code{planner-ledger-balance-regexp} and
5215 @code{planner-ledger-pending-regexp}. Example:
5217 @example
5218 * Tasks
5220 * Ledger
5222 ** Pending transactions
5224 * Notes
5226 @end example
5228 You can manually update ledger sections with the
5229 @command{planner-ledger-insert-maybe} command.
5231 You can also automatically update ledger sections with the following
5232 hook:
5234 @example
5235 (add-hook 'planner-goto-hook 'planner-ledger-insert-maybe)
5236 @end example
5238 You can create ledger entries from specially-formatted tasks using
5239 @command{planner-ledger-add-entry-from-task}.  Tasks should be of the
5240 form @samp{payment due: payee, amount [comment]}.  Example:
5242 @example
5243 #A1 _ payment due: foobar, $1000.00 some comment here
5244 #A2 _ payment due: baz, 1000.00
5245 @end example
5247 @subheading Options
5249 @defopt planner-ledger-balance-accounts
5250 List of accounts to be included or excluded from the balance overview.
5251 @samp{+} includes all matching accounts, and @samp{-} excludes
5252 matching accounts.  See the documentation for
5253 @command{ledger-run-ledger} for more details.
5254 @end defopt
5256 @defopt planner-ledger-balance-regexp
5257 Regular expression matching section for ledger balance.  Do not store
5258 other data in this section, as it will be overwritten.
5259 @end defopt
5261 @defopt planner-ledger-pending-regexp
5262 Regular expression matching section for ledger balance.  Do not store
5263 other data in this section, as it will be overwritten.
5264 @end defopt
5266 @defopt planner-ledger-payment-task-regexp
5267 Regular expression matching special ledger tasks.
5268 @end defopt
5270 @subheading Functions
5272 @defun planner-ledger-insert-maybe
5273 Update any ledger sections on the current page.
5274 @end defun
5276 @defun planner-ledger-add-entry-from-task
5277 Create a ledger entry based on the task at point.  Task should match
5278 @code{planner-ledger-payment-task-regexp}.
5279 @end defun
5281 @node Contacts and Conversations, Tracking Research and Resources, Finances, Managing Your Information
5282 @comment  node-name,  next,  previous,  up
5283 @section Contacts and Conversations
5284 @cindex contacts
5285 @cindex conversations
5287 Planner has two modules available for keeping track of contact and
5288 conversation information. The first uses the Big Brother Database
5289 (BBDB), and the second uses Emacs Relay Chat (ERC). BBDB is a full
5290 contact database. ERC is a client for chatting online on Internet Relay
5291 Chat (IRC) networks. The ERC module for Planner will help you keep
5292 track of online conversations you have if you use ERC for those
5293 conversations, but does not by itself store contact information other
5294 than the time you had the conversation, the network and channel you were
5295 on when you had it, and maybe who you had it with. If you are looking
5296 for a way to manage your full address book, then @file{planner-bbdb.el}
5297 in combination with BBDB is what you are looking for.
5299 @menu
5300 * BBDB::                        Contacts: planner-bbdb.el
5301 * Emacs Relay Chat::            Internet Relay Chat: planner-erc.el
5302 @end menu
5304 @node BBDB, Emacs Relay Chat, Contacts and Conversations, Contacts and Conversations
5305 @comment  node-name,  next,  previous,  up
5306 @subsection BBDB
5307 @cindex @file{planner-bbdb.el}, using
5308 @cindex BBDB, using Planner with
5310 @file{planner-bbdb.el} allows you to refer to your contacts easily
5311 from within a planner page. @inforef{Top, the BBDB Manual, bbdb}.
5313 @samp{[[bbdb://Sacha.*Chua][Sacha]]}, for example, will be linked to
5314 the blog, web or net fields of the first matching BBDB record.
5316 @file{planner-bbdb.el} does not define any interactive functions, or
5317 keybindings.
5319 @node Emacs Relay Chat,  , BBDB, Contacts and Conversations
5320 @comment  node-name,  next,  previous,  up
5321 @subsection Emacs Relay Chat
5322 @cindex @file{planner-erc.el}, using
5323 @cindex ERC, using Planner with
5324 @cindex Emacs Relay Chat, using Planner with
5325 @cindex IRC, using Planner with
5326 @cindex Internet Relay Chat, using Planner with
5328 To use planner-erc, place @file{planner-erc.el} in your load path
5329 and add this to your @file{.emacs} (or @file{_emacs}):
5331 @example
5333 (require 'planner-erc)
5335 @end example
5337 IRC URLs may be of the following forms.
5339 @example
5340 irc://server/nick,isnick
5341 irc://server/#channel
5342 irc://server
5343 @end example
5345 Annotations will be in the following forms.
5347 @example
5348 [[irc://server/nick,isnick][Chat with nick on server#channel]]
5349 [[irc://server/nick,isnick][Chat with nick on server]]
5350 [[irc://server/#channel][Chat on server#channel]]
5351 [[irc://server][Chat on server]]
5352 @end example
5354 @file{planner-erc.el} does not define any interactive functions, or
5355 keybindings.
5357 @node Tracking Research and Resources, Tracking Development, Contacts and Conversations, Managing Your Information
5358 @comment  node-name,  next,  previous,  up
5359 @section Tracking Research and Resources
5361 Planner provides three modules for keeping track of information
5362 involving three specific tools: w3m, BibTeX, and @file{bookmark.el}.
5364 @menu
5365 * W3m::                         Web browser: planner-w3m.el
5366 * BibTeX::                      Bibliographies: planner-bibtex.el
5367 * Bookmark::                    Bookmarks: planner-bookmark.el
5368 @end menu
5370 @node W3m, BibTeX, Tracking Research and Resources, Tracking Research and Resources
5371 @comment node-name,  next,  previous,  up
5372 @subsection W3m
5373 @cindex @file{planner-w3m.el}, using
5374 @cindex w3m, using Planner with
5376 This module allows you to create tasks from a w3m buffer.
5378 @file{planner-w3m.el} does not define any interactive functions, or
5379 keybindings.
5381 @node BibTeX, Bookmark, W3m, Tracking Research and Resources
5382 @comment node-name,  next,  previous,  up
5383 @subsection BibTeX
5384 @cindex @file{planner-bibtex.el}, using
5386 BibTeX URLs are of the form @samp{bibtex:file/name:key}.
5388 @file{planner-bibtex.el} does not define any interactive functions.
5390 @node Bookmark,  , BibTeX, Tracking Research and Resources
5391 @comment  node-name,  next,  previous,  up
5392 @subsection Bookmark
5393 @cindex bookmarks
5394 @cindex @file{bookmark.el}, using Planner with
5395 @cindex @file{planner-bookmark.el}, using
5397 @file{planner-bookmark.el} uses the @file{remember} package to create a
5398 note whenever you create a bookmark (see @inforef{Bookmarks, Bookmarks,
5399 Emacs}). For more information about @file{remember}, please check out
5401 @itemize
5402 @item
5403 @uref{http://www.emacswiki.org/cgi-bin/wiki/RememberMode} -
5404 EmacsWiki.org page
5405 @item
5406 @uref{http://sacha.free.net.ph/notebook/doc/dev/remember/remember.html}
5407 - Online info documentation
5408 @end itemize
5410 Configure remember according to the instructions in
5411 @file{remember-planner.el} so that notes are saved to your planner
5412 pages.
5414 @defopt planner-bookmark-take-note-after-set-bookmark-flag
5415 Non-nil means show a @code{remember} buffer after setting a new
5416 bookmark.
5417 @end defopt
5419 When you create a bookmark, Emacs will open a buffer for your notes.
5420 @kbd{C-c C-c} saves the buffer to today's page. If you don't want to
5421 save a note, you can kill the buffer.
5423 Bookmark URLs are of the form @samp{bookmark://bookmark-name}.
5425 @file{planner-bookmark.el} does not define any interactive functions.
5427 @node Tracking Development,  , Tracking Research and Resources, Managing Your Information
5428 @comment  node-name,  next,  previous,  up
5429 @section Tracking Development
5430 @cindex version control, using Planner with
5432 Planner has three modules geared toward programmers. Two modules deal
5433 with version control and integrating information from those projects
5434 into the planner page. One module deals with the Gnats bug-tracking
5435 system.
5437 @menu
5438 * Log Edit::                    Changelogs: planner-log-edit.el
5439 * PSVN::                        svn changesets: planner-psvn.el
5440 * XTLA::                        TLA changesets: planner-xtla.el
5441 * Gnats::                       Gnats: The GNU bug reporting system
5442 @end menu
5444 @node Log Edit, PSVN, Tracking Development, Tracking Development
5445 @comment  node-name,  next,  previous,  up
5446 @subsection Log Edit
5447 @cindex cvs, using Planner with
5448 @cindex @file{planner-log-edit}, using
5449 @cindex version control, using Planner with
5451 This module allows you to automatically record CVS (and VC) commits
5452 in today's page.
5454 You can load the module with @code{(require 'planner-log-edit)}. When
5455 you load the module, @code{planner-log-edit-add-note} will be added to
5456 @code{log-edit-done-hook}.  A note containing the text of the commit
5457 and optionally a list of modified files will be added to today's page
5458 if you use the the Emacs version control interface. (@pxref{Version
5459 Control, , , Emacs, GNU Emacs Manual})
5461 @subheading Options
5463 @defopt planner-log-edit-include-files-flag
5464 Non-nil means include a list of committed files in the note.
5465 @end defopt
5467 @defopt planner-log-edit-notice-commit-function
5468 Non-nil means include a list of committed files in the note. If you
5469 want to enable this feature for some projects but not for others, set
5470 this to a function that returns t only for the commits you want to
5471 note.
5472 @end defopt
5474 @file{planner-log-edit.el} does not define any interactive functions.
5476 @node PSVN, XTLA, Log Edit, Tracking Development
5477 @comment  node-name,  next,  previous,  up
5478 @subsection PSVN
5479 @cindex PSVN
5480 @cindex @file{planner-psvn.el}, using
5482 This file allows you to refer to your svn changesets easily from within
5483 a Planner page.  You can load the module with @code{(require
5484 'planner-psvn)}.
5486 PSVN URLs are of the form
5487 @samp{psvn://http://my.svn-repos.at/svn/project1/trunk@@39}
5489 Additionally there is functionality to generate a note for your commits
5490 via subversion: just set
5491 @var{planner-psvn-log-edit-notice-commit-function} to t.
5493 @file{planner-psvn.el} does not define any interactive functions.
5495 @node XTLA, Gnats, PSVN, Tracking Development
5496 @comment  node-name,  next,  previous,  up
5497 @subsection XTLA
5498 @cindex XTLA
5499 @cindex @file{planner-xtla.el}, using
5501 This module allows you to refer to changesets in Tom Lord's Arch (tla)
5502 version control system. You can load the module with @code{(require
5503 'planner-xtla)}. When you load the module, you can create tasks from
5504 XTLA windows by positioning point on a revision.
5506 XTLA URLs are of the form
5507 @samp{xtla://miles@@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-19}
5509 @file{planner-xtla.el} does not define any interactive functions.
5511 @node Gnats,  , XTLA, Tracking Development
5512 @comment  node-name,  next,  previous,  up
5513 @subsection Gnats
5515 @cindex Gnats
5516 @cindex @file{planner-gnats.el}, using
5517 @cindex bug reports, tracking
5519 @file{planner-gnats.el} provides support for the GNU problem report
5520 management system Gnats. This module allows you to refer to problem
5521 reports using hyperlinks.
5523 Configure your Emacs for Gnats access, then add @samp{(require
5524 'planner-gnats)} to your @file{.emacs}. You can then create tasks from
5525 Gnats edit or view buffers.
5527 To add keybindings to Gnats, use @samp{(planner-gnats-insinuate)}.
5529 Gnats URLs are of the form @samp{gnats:pr-number}.
5531 @file{planner-gnats.el} does not define any interactive functions.
5533 @node Advanced Configuration, Reference Material, Managing Your Information, Top
5534 @comment  node-name,  next,  previous,  up
5535 @chapter Advanced Configuration
5536 @cindex configuration, advanced
5538 @menu
5539 * Customizing Your Day Pages::  Change your templates
5540 * Variables to Customize::      Change various aspects of Planner behavior
5541 * Ideas for Other Keybindings::  Add to and change the default keybindings
5542 @end menu
5544 @node Customizing Your Day Pages, Variables to Customize, Advanced Configuration, Advanced Configuration
5545 @comment  node-name,  next,  previous,  up
5546 @section Customizing Your Day Pages
5548 With the variable @code{planner-day-page-template}, you can define how
5549 you want any newly created day planner pages to look.
5551 You might want to include a section for your diary entries. For how to
5552 do this, see @ref{Diary}.
5554 You can add interactive Lisp buttons with the @file{planner-lisp.el}
5555 module. (@pxref{Interactive Lisp})
5557 Your @code{planner-day-page-template} can also include @samp{|<lisp>|}
5558 tags.
5560 For more complex day pages, you can set
5561 @code{planner-day-page-template} to a function that will be called
5562 from an empty day page buffer. The function should initialize the
5563 contents of the day page.
5565 @node Variables to Customize, Ideas for Other Keybindings, Customizing Your Day Pages, Advanced Configuration
5566 @comment  node-name,  next,  previous,  up
5567 @section Variables to Customize
5568 @cindex customize, variables to
5569 @cindex variables, customization of
5570 @cindex configuration, advanced, variables
5572 If you want to change @code{planner-directory} and some other
5573 variables, either use Customize (@kbd{M-x customize-group RET planner
5574 RET}) or use @code{setq}.  An example of the latter follows.
5576 @example
5577 (setq planner-directory "~/Plans")
5578 @end example
5580 Other user options are:
5582 @vindex planner-use-day-pages
5583 @defopt planner-use-day-pages
5584 If you really don't like day pages, you can set this variable to nil
5585 and you won't be prompted for dates for tasks (and notes, if using
5586 @file{remember-planner}).
5587 @end defopt
5589 @vindex planner-use-plan-pages
5590 @defopt planner-use-plan-pages
5591 If you really don't like plan pages, you can set this variable to nil
5592 and you won't be prompted for plan pages for tasks (and notes, if
5593 using @file{remember-planner}).
5594 @end defopt
5596 @vindex planner-mode-hook
5597 @defopt planner-mode-hook
5598 List of functions to run after @code{planner-mode} is initialized.
5599 @end defopt
5601 @vindex planner-tasks-file-behavior
5602 @defopt planner-tasks-file-behavior
5603 This variable controls what happens to files Planner opens by itself.
5604 If your tasks are associated with plan pages, the plan pages are
5605 updated whenever a task is rescheduled.  This could lead to a lot of
5606 open buffers as Planner applies updates to all linked files.
5607 By default, Planner is configured to do nothing.
5608 A value of @samp{save} means save but do not close buffers, and a
5609 value of @samp{nil} means do not save any of the buffers.
5610 @end defopt
5612 @vindex planner-add-task-at-end-flag
5613 @defopt planner-add-task-at-end-flag
5614 This variable controls where new tasks are created.  Non-nil means
5615 create tasks at the bottom of the first task block.  If you set this
5616 to non-nil, new tasks will be listed in order of creation (oldest).
5617 Tasks carried over from previous days will appear at the bottom of the
5618 list.
5620 Nil means create tasks at the top of the first task block.
5621 Carried-over tasks and newly created tasks are prominently placed on
5622 top of the list of tasks for the day.
5623 @end defopt
5625 @vindex planner-default-page
5626 @defopt planner-default-page
5627 Default page for created tasks.  This is used as the initial value for
5628 tasks.  After you create a task, it will be set to the previous page
5629 used.
5630 @end defopt
5632 @vindex planner-hide-task-status-when-highlighting
5633 @defopt planner-hide-task-status-when-highlighting
5634 Font-locking for tasks may be enough for you to determine status and
5635 priority.  Set this to non-nil if you want to hide the status marker
5636 and rely on font-locking instead.
5637 @end defopt
5639 @vindex planner-create-task-hook
5640 @defopt planner-create-task-hook
5641 Functions run after creating a task. @code{planner-id} hooks into
5642 this.
5643 @end defopt
5645 @vindex planner-expand-name-favor-future-p
5646 @defopt planner-expand-name-favor-future-p
5647 If non-nil, partial dates (ex: @kbd{2} or @kbd{5.2}) are completed to
5648 dates in the future instead of using the current year and month.
5649 @end defopt
5651 @vindex planner-task-dates-favor-future-p
5652 @defopt planner-task-dates-favor-future-p
5653 Like @code{planner-expand-name-favor-future-p}, but only for tasks.
5654 @end defopt
5656 @vindex planner-publish-dates-first-p
5657 @defopt planner-publish-dates-first-p
5658 Non-nil means list day pages first in the planner index.
5659 @end defopt
5661 @node Ideas for Other Keybindings,  , Variables to Customize, Advanced Configuration
5662 @comment  node-name,  next,  previous,  up
5663 @section Ideas for Other Keybindings
5664 @cindex keybindings, customization of
5665 @cindex configuration, advanced, keybindings
5666 @cindex customize, keybindings to
5668 By default and for backward compatibility, the following operations
5669 do not have keybindings, and are only accessible from the Planner
5670 menu:
5672 @itemize @bullet
5674 @item
5675 @code{planner-copy-or-move-region}
5677 @item
5678 @code{planner-delete-task}
5680 @item
5681 @code{planner-task-delegated}
5683 @item
5684 @code{planner-task-pending}
5686 @item
5687 @code{planner-task-open}
5689 @item
5690 @code{planner-renumber-tasks}
5692 @end itemize
5694 You may find it easier to install keybindings for those operations by
5695 inserting the following in your @file{.emacs} (or @file{_emacs}).
5696 Note: This changes some of the default keybindings for Planner.
5698 @example
5699 (planner-install-extra-task-keybindings)
5700 @end example
5702 If you install the extra task keybindings, your keybindings will
5703 include:
5705 @itemize @bullet
5707 @item
5708 @kbd{C-c C-t} will be unbound from the default and will serve as the
5709 prefix for the other task keybindings.
5711 @item
5712 @kbd{C-c C-t C-t}: @code{planner-create-task-from-buffer}.
5714 @item
5715 @kbd{C-c C-t C-k}: @code{planner-delete-task}.
5717 @item
5718 @kbd{C-c C-t C-u}: @code{planner-update-task}.
5720 @item
5721 @kbd{C-c C-t C-c}: @code{planner-copy-or-move-task}.
5723 @item
5724 @kbd{C-c C-t C-S-c}: @code{planner-copy-or-move-region}.
5726 @item
5727 @kbd{C-c C-t C-x}: @code{planner-task-done}.
5729 @item
5730 @kbd{C-c C-t C-S-x}: @code{planner-task-cancelled}.
5732 @item
5733 @kbd{C-c C-t C-d}: @code{planner-task-delegated}.
5735 @item
5736 @kbd{C-c C-t C-p}: @code{planner-task-pending}.
5738 @item
5739 @kbd{C-c C-t C-o}: @code{planner-task-in-progress}.
5741 @item
5742 @kbd{C-c C-t C-r}: @code{planner-raise-task}.
5744 @item
5745 @kbd{C-c C-t C-l}: @code{planner-lower-task}.
5747 @item
5748 @kbd{C-c C-t C-n}: @code{planner-renumber-tasks}.
5750 @end itemize
5752 Other keybindings can be configured by adding this to your
5753 @file{.emacs} (or @file{_emacs}):
5755 @example
5756 (planner-install-extra-context-keybindings)
5757 @end example
5759 This will set up the following keybindings:
5761 @itemize @bullet
5763 @item
5764 @kbd{shift up} @code{planner-move-up}
5766 @item
5767 @kbd{shift down} @code{planner-move-down}
5769 @item
5770 @kbd{shift right} @code{planner-jump-to-link}
5772 @end itemize
5774 @node Reference Material, Getting Help, Advanced Configuration, Top
5775 @comment  node-name,  next,  previous,  up
5776 @chapter Reference Material
5778 @menu
5779 * Keeping Track of Time::       
5780 * Other Interactive Functions::  
5781 * Planner Keybindings::         Default keybindings for Planner
5782 * Sample Configuration Files::  
5783 @end menu
5785 @node Keeping Track of Time, Other Interactive Functions, Reference Material, Reference Material
5786 @section Keeping Track of Time
5788 One of the coolest things you can do with Planner is keep track of how
5789 much time you spend not only on projects but even on particular tasks.
5790 @file{planner-timeclock.el} makes it as easy and natural as marking a
5791 task as in progress, postponed, or done. This can help you determine
5792 just how much time you spend working each day. If you add estimates to
5793 your task descriptions, you'll also be able to use this information to
5794 improve your time estimation skills.
5796 Here's how you can keep track of the time you
5799 Then the fun began. I wanted to see if I could match my estimates.
5800 Before I started working on a task, I used @kbd{C-c TAB} to mark it
5801 @code{in progress} and start the clock. If I decided to work on
5802 something else, I used @kbd{C-c TAB} to clock out of the previous task
5803 and clock into the new one.
5805 When I finished it, I used @kbd{C-c C-x} (@code{planner-task-done}) to
5806 mark it completed and automatically clock out. This is not yet done
5807 for cancelled tasks, so I clocked out of those manually with @kbd{C-c
5808 C-o} (@code{timeclock-out}). I also clocked out whenever I caught
5809 myself being distracted so that the totals wouldn't include the time I
5810 spent chatting on #emacs or checking out del.icio.us links. =) At the
5811 end of the day, I used
5812 @code{planner-timeclock-summary-show-range-filter} to show me the time
5813 elapsed for all of the tasks I'd worked on over the past two days.
5814 Here's the report for that project, edited to reflect how it looks on
5815 my screen and annotated with comments:
5817 @example
5818 Timeclock summary report for 2004.12.28 - 2004.12.29
5820 Project     |     Time| Ratio| Task
5821 JapanProject|  0:23:17|  3.6%| Translate javadoc comment for Messages.java
5822             |  0:33:48|  5.3%| Translate javadoc comment for LoginAction.java
5823             |  1:54:07| 17.8%| Study Struts in Japanese
5824             |  0:46:08|  7.2%| Add javadoc tags for input, output and forwards
5825             |  1:03:48|  9.9%| Help review code
5826             |  0:04:14|  0.7%| Import todo list
5827             |  0:00:37|  0.1%| 2min       Fix Menu Action's unnecessary code - delegated
5828             |  0:01:01|  0.2%| 2min       Remove unnecessary list in UserRemoveSetupAction - cancelled
5829             |  0:02:10|  0.3%| 2min       Remove hard-coded database path from MenuAction
5830             |  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. ...
5831             |  0:07:32|  1.2%| 5min       Add a method that returns the validity of a user in MUserPeer.
5832             |  0:08:28|  1.3%| 5min       Fix indentation
5833             |  0:03:52|  0.6%| 10min      Fix UserPeer so that it doesn't get null pointer exceptions
5834             |  0:04:34|  0.7%| 5min       Add current password field in user_modify page
5835             |  0:21:56|  3.4%| 15min      Make a super class for our service classes that will receive the database connection. (cancelled)
5836             |  0:06:05|  0.9%| 10min      Remove hard-coded constants from the Logic classes
5837             |  0:10:55|  1.7%| 10min      Move logic from UserBean.checkPassword to UserListLogic
5838             |  0:01:20|  0.2%| 20min      Guard against null pointer exceptions in peer classes
5839             |  0:04:57|  0.8%| 10min      Instead of displaying uneditable data with bean:write, just disable the html:text element
5840             |  0:25:03|  3.9%| 10min      Deploy 10:00 version
5841             |  0:04:46|  0.7%| 5min       Separate the configuration file of database and system into another uninternationalized property file.
5842             |  2:09:48| 20.2%| 1h         Decide on a naming convention for localized messages and update files
5843             |  0:00:07|  0.0%| 20min      Explain what is happening in UserModifyAction's nested ifs - pending
5844             |  1:50:23| 17.2%| 2h         Write Javadoc comments in English and Japanese to explain bean structure
5845             |  0:04:19|  0.7%| 2h         Write Javadoc comments in English and Japanese to explain peer operations (pending)
5846             |  0:05:40|  0.9%| 20min      Make a factory class for the database - pending
5847      Total: | 10:41:41|100.0%|      
5849 Day began: 13:03:58, Day ended: 20:51:46
5850 Time elapsed: 31:47:48, Time clocked: 10:41:41
5851 Time clocked ratio: 33.6%
5852 @end example
5854 The time record isn't perfect. I cancelled some tasks after thinking
5855 about them a little and did some tasks simultaneously. Sometimes I
5856 didn't notice that I was getting distracted, too. Still, having all of
5857 that time information neatly summarized made me realize a number of
5858 things.
5860 First, I goof off much less when I have a nice, broken-down task list
5861 in front of me. There's just something about knowing there's a five-
5862 or ten-minute hack you can get out of the way. I found myself looking
5863 forward to getting to the next task just to see if I could make my
5864 estimate. That said, seeing a five-minute task stretch and stretch due
5865 to unforeseen problems did make me a little nervous. I should probably
5866 just make generous estimates so that I don't end up with bugs because
5867 of haste.
5869 Second, I don't goof off as much as I thought I did, although there's
5870 still room for improvement. Yesterday's workday was 9:00 - 12:00, 1:00
5871 - 5:30--7.5 hours. Today was the last day of work, so cleaning and
5872 celebration interrupted my hacking at around 3:00--5 hours of work.
5873 According to my task list, 10:41/12:30 was productive work. Hmm. 1:49
5874 hours unclocked time when I was thinking or goofing off.
5875 planner-timeclock-summary-show for today reveals that I actually
5876 clocked 5:30 today, which means the goofing off happened yesterday.
5877 That makes sense; I remember a pretty long unclocked segment
5878 recuperating from Japanese overload. (This was before we came up with
5879 the task list.)
5881 Third, keeping track of time is way, way cool even if you don't bill
5882 anyone for your time.
5884 Like the idea? It's easy to try out. Just add
5886 @example
5887 (require 'planner-timeclock)
5888 (require 'planner-timeclock-summary)
5889 @end example
5891 to your ~/.emacs. If you want to try it out now, eval those statements
5892 in your Emacs session. After that, simply use @kbd{C-c TAB} to ``clock
5893 in'' a task before you start working on it and @kbd{C-c C-x}
5894 (@code{planner-task-done}) to mark it completed. @kbd{M-x
5895 planner-task-pending} also clocks out the current task if it was
5896 clocked in. To see a summary of how you spent your day, check out the
5897 different functions in @file{planner-timeclock-summary}.
5899 See @ref{Timeclock} for more details.
5901 Happy hacking!
5903 @node Other Interactive Functions, Planner Keybindings, Keeping Track of Time, Reference Material
5904 @comment  node-name,  next,  previous,  up
5905 @section Other Interactive Functions
5907 With @file{planner.el} loaded, you can use any of the functions in this
5908 section by typing @kbd{M-x} followed by the name of the function. Many
5909 of these functions are also bound to keys.
5911 For a list of Planner keybindings, see @ref{Planner Keybindings}.
5913 They are listed in no particular order.
5915 @file{planner.el} defines the following interactive functions:
5918 @defun planner-create-high-priority-task-from-buffer
5919 Create a high priority task based on this buffer.  Do not use this in
5920 LISP programs. Instead, set the value of
5921 @var{planner-default-task-priority} and call @code{planner-create-task}
5922 or @code{planner-create-task-from-buffer}.
5923 @end defun
5925 @defun defun planner-create-medium-priority-task-from-buffer
5926 Create a medium-priority task based on this buffer.  Do not use this in
5927 LISP programs. Instead, set the value of
5928 @var{planner-default-task-priority} and call @code{planner-create-task}
5929 or @code{planner-create-task-from-buffer}.
5930 @end defun
5932 @defun planner-create-low-priority-task-from-buffer
5933 Create a high-priority task based on this buffer.
5934 Do not use this in LISP programs. Instead, set the value of
5935 @var{planner-default-task-priority} and call @code{planner-create-task} or
5936 @code{planner-create-task-from-buffer}.
5937 @end defun
5939 @defun planner-install-extra-context-keybindings
5940 Install extra context-sensitive keybindings. These keybindings
5941 conflict with @file{windmove.el}, but might be useful.
5942 @end defun
5944 @defun planner-narrow-to-section section &optional create
5945 Widen to the whole page and narrow to the section labelled
5946 @var{section}.  If @var{create} is non-nil and the section is not found,
5947 the section is created.  Return non-nil if @var{section} was found or
5948 created.
5949 @end defun
5951 @defun planner-save-buffers
5952 Save all planner-mode buffers.
5953 @end defun
5955 @defun planner-seek-to-first section
5956 Positions the point at the specified @var{section}, or @samp{Tasks} if
5957 not specified.
5958 @end defun
5960 @defun planner-save-buffers
5961 Save all planner buffers.
5962 @end defun
5964 @defun planner-calendar-insinuate
5965 This hooks Planner into  Emacs Calendar (@pxref{Calendar/Diary, ,
5966 , Emacs, GNU Emacs Manual}).
5968 It adds special planner key bindings to @code{calendar-mode-map}.
5969 After this function is evaluated, you can use the following
5970 planner-related keybindings in @code{calendar-mode-map}:
5972 @table @kbd
5974 @item  n
5975 Jump to the planner page for the current day.
5977 @item  N
5978 Display the planner page for the current day.
5979 @end table
5981 @end defun
5983 @defun planner-kill-calendar-files
5984 Remove planner files shown from Calendar (@pxref{Calendar/Diary, , ,
5985 Emacs, GNU Emacs Manual}).
5987 @end defun
5989 @defun planner-calendar-goto
5990 Goto the plan page corresponding to the calendar date
5991 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
5992 @end defun
5994 @defun planner-calendar-show
5995 Show the plan page for the calendar date under point in another window
5996 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
5997 @end defun
5999 @defun planner-calendar-select
6000 Return to @code{planner-read-date} with the date currently selected
6001 (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}).
6002 @end defun
6004 @defun planner-jump-to-link
6005 Jump to the item linked to by the current item.
6006 @end defun
6008 @defun planner-move-up
6009 Move a task up. You can use this to indicate that you will do a task
6010 before another one. On a note, go to the previous note. On a headline,
6011 go to the previous headline of the same depth.
6012 @end defun
6014 @defun planner-move-down 
6015 Move down. You can use this to indicate that you will do a task after
6016 another one. On a note, go to the next note. On a headline, go to the
6017 next headline of the same depth.
6018 @end defun
6020 @node Planner Keybindings, Sample Configuration Files, Other Interactive Functions, Reference Material
6021 @comment  node-name,  next,  previous,  up
6022 @section Planner Keybindings
6023 @cindex keybindings, list
6025 In order to refresh and renumber all of your tasks according to their
6026 actual order in the buffer, simply save the file or call
6027 @kbd{M-x planner-renumber-tasks}.
6029 Here is a summary of the keystrokes available:
6031 @table @kbd
6033 @item M-x plan
6034 Begin your planning session.  This goes to the last day for which
6035 there is any planning info (or today if none), allowing you to review,
6036 and create/move tasks from that day.
6038 @item C-c C-u
6039 Move a task up.
6041 @item C-c C-d
6042 Move a task down.
6044 @item C-c C-s
6045 Mark the task as in progress or delegated.
6047 @item C-c C-x
6048 Mark the task as finished.
6050 @item C-c C-t
6051 Create a task associated with the current Wiki page. If you are on the
6052 opening line of a Note entry, it is assumed that the note itself is the
6053 origin of the task.
6055 @item C-c C-c
6056 Move or copy the current task to another date. If the current task is
6057 an original (meaning you are in the buffer where's defined, hopefully
6058 a planning page) then it will be copied, and the original task will
6059 also now point to the copy.  If the current task is a copy, it will
6060 just be moved to the new day, and the original task's link will be
6061 updated.
6063 @item C-c C-n
6064 Jump to today's task page.  If you call
6065 @code{(planner-calendar-insinuate)}, typing @kbd{n} in the Emacs
6066 calendar (@pxref{Calendar/Diary, , , Emacs, GNU Emacs Manual}) will jump
6067 to today's task page.
6069 @item C-c C-x
6070 @code{planner-task-done}
6072 @item C-c C-z
6073 @code{planner-task-in-progress}
6075 @item C-c C-d
6076 @code{planner-lower-task}
6078 @item C-c C-u
6079 @code{planner-raise-task}
6081 @item C-c C-c
6082 @code{planner-copy-or-move-task}
6084 @item C-c C-t
6085 @code{planner-create-task-from-buffer}
6087 @item C-c C-j
6088 This is a prefix command.
6090 @item C-c C-n
6091 @code{planner-goto-today}
6093 @item C-c C-j C-r
6094 @code{planner-goto-most-recent}
6096 @item C-c C-j C-t
6097 @code{planner-goto-tomorrow}
6099 @item C-c C-j C-y
6100 @code{planner-goto-yesterday}
6102 @item C-c C-j C-j
6103 @code{planner-goto-today}
6105 @item C-c C-j C-n
6106 @code{planner-goto-next-daily-page}
6108 @item C-c C-j C-p
6109 @code{planner-goto-previous-daily-page}
6111 @item C-c C-j C-d
6112 @code{planner-goto}
6114 @end table
6116 @node Sample Configuration Files,  , Planner Keybindings, Reference Material
6117 @comment  node-name,  next,  previous,  up
6118 @section Sample Configuration Files
6119 @cindex configuration, sample
6121 This section includes some sample configuration files. This way, once
6122 you've got the hang of the basics, you can see some different, more
6123 advanced, setups.
6125 There is no One True Way to plan. Every person is different. We hope
6126 you'll find a good starting point among the example configurations
6127 below. If what you want to do does not perfectly fit under one of these
6128 examples, please post a description of the way you plan to our mailing
6129 list (@pxref{Getting Help}).  We look forward to helping you customizing
6130 planner to fit your needs.
6132 @menu
6133 * File Organization::           
6134 * Bare-Bones Planning::         
6135 * Bare-Bones Planning with Plan Pages::  
6136 * Tasks on Plan Pages with Some Day Pages::  
6137 * Hierarchical Tasks::          
6138 @end menu
6140 @node File Organization, Bare-Bones Planning, Sample Configuration Files, Sample Configuration Files
6141 @subsection File Organization
6143 @itemize
6144 @item @strong{Tasks, schedule and notes on day pages.}
6146 By default, tasks, schedule entries and notes are filed on day pages.
6147 This makes it easy for you to see all the entries relevant to a single
6148 day without becoming overwhelmed with information. Unfinished tasks
6149 are carried over to the next day when you use @kbd{M-x plan}, so it's
6150 always kept up to date. Completed tasks are left on the day page you
6151 finished them on, which helps when reviewing one's progress and writing
6152 accomplishment reports.
6154 @item @strong{Cross-referenced with plan pages.}
6156 You can associate your tasks with projects either when you create the
6157 task or later, with @kbd{M-x planner-replan-task}. This makes it easy
6158 for you to see all the information associated with a particular
6159 project. If you use RememberMode to create notes, you will also be
6160 able to associate notes with a plan page.
6162 @item @strong{Just plan pages.}
6164 If your tasks don't usually have dates, you can turn day pages off by
6165 customizing @code{planner-use-day-pages}. If so, then all of your
6166 tasks and notes will be stored on the WelcomePage and/or a plan page.
6168 @end itemize
6170 @node Bare-Bones Planning, Bare-Bones Planning with Plan Pages, File Organization, Sample Configuration Files
6171 @subsection Bare-Bones Planning
6173 You can keep all of your tasks, notes and schedules in a single file:
6174 WelcomePage.  This is good for people who are used to storing all of
6175 their information in a flat text file.  By storing your information in
6176 planner, you'll be able to take advantage of automatic hyperlinking to
6177 files and other resources.  You can also sort your tasks by priority
6178 and status.
6180 To set your system up for bare-bones planning, set the
6181 @code{planner-use-day-pages} variable to nil before loading planner.
6182 For example, you can put this in your @file{~/.emacs} (or @file{_emacs}):
6184 @example
6185 (setq planner-use-day-pages nil)
6186 (setq planner-default-page nil)
6187 (require 'planner)
6188 @end example
6190 When you create a task or note, planner will not prompt you for a
6191 date.  If you press @key{RET} when prompted for a plan page, it will
6192 accept the default of nil, so no other plan pages will be used.  All
6193 of your data will be kept in one file, which can then be easily backed
6196 You can use commands like @command{planner-create-task-from-buffer} to
6197 create tasks, or you can type tasks in manually.  You can edit or
6198 delete anything in the page without having to update other files.
6200 @node Bare-Bones Planning with Plan Pages, Tasks on Plan Pages with Some Day Pages, Bare-Bones Planning, Sample Configuration Files
6201 @subsection Bare-Bones Planning with Plan Pages
6203 When you create a task or note, Planner.el can copy this to a plan
6204 page. Plan pages allow you to see an overview of all the data for a
6205 project.
6207 For convenience, the @command{planner-create-task-from-buffer} command
6208 prompts you for a plan page when you create a task.
6212 @node Tasks on Plan Pages with Some Day Pages, Hierarchical Tasks, Bare-Bones Planning with Plan Pages, Sample Configuration Files
6213 @subsection Tasks on Plan Pages with Some Day Pages
6215 If most of your tasks are associated with plan pages but you want to
6216 schedule some tasks on day pages, you can leave day pages on (default)
6217 and then write a function that turns off day pages. For example, the
6218 following code snippet turns off day pages for task creation from
6219 buffers.
6221 @example
6222 (require 'planner)
6224 (defun my-planner-create-task-from-buffer ()
6225   "Call `planner-create-task-from-buffer', but without dates."
6226   (interactive)
6227   (let ((planner-use-day-pages nil))
6228     (call-interactively 'planner-create-task-from-buffer)))
6229 @end example
6231 @node Hierarchical Tasks,  , Tasks on Plan Pages with Some Day Pages, Sample Configuration Files
6232 @subsection Hierarchical Tasks
6233 @cindex hierarchical tasks
6234 @cindex tasks, hierarchy of
6236 You can use @file{allout.el} or other modes for outlining to support
6237 hierarchical tasks in plan pages. No special support is needed.
6239 Tasks created by @command{planner-create-task-from-buffer} and
6240 @code{planner-create-task} are created in the @samp{* Tasks} section.
6241 If @code{planner-add-task-at-end-flag} is non-nil, tasks are added to
6242 the end of the first task block, else they are added to the beginning.
6243 You can then copy and paste tasks into your preferred hierarchy.
6244 Blank lines delimit blocks of tasks upon which automatic sorting is
6245 performed.
6247 You can also type in tasks manually. You may find this approach faster
6248 when you are comfortable with planner.
6250 For example, a @file{LearnPlanner} plan page might contain the
6251 following lines:
6253 @example
6254 * Learn how to use planner.el
6256 ** Installation
6258 #C0 _ Decide where to put Planner
6259 #C0 _ Download the archives
6261 ** Configuration
6263 *** Load path
6265 #C0 _ Figure out how to add things to my load path
6266 #C0 _ Actually add it to my load path
6269 @end example
6271 If you create tasks for the finest level of detail available at the
6272 moment, you can schedule them onto day pages with @kbd{C-c C-c}
6273 (@command{planner-copy-or-move-task}). Then you can use
6274 @command{planner-jump-to-link} to switch between the day page and the
6275 plan page link.
6278 @node Getting Help, Acknowledgements, Reference Material, Top
6279 @comment  node-name,  next,  previous,  up
6280 @chapter Getting Help
6281 @cindex help, getting
6282 @cindex bugs, reporting
6284 After you have read this guide, if you still have questions about
6285 Planner, or if you have bugs to report, there are several places
6286 you can go.
6288 Planner has an official website at @url{http://www.plannerlove.com/}.
6289 It is a collaborative wiki.
6291 Bugs may be reported using the Planner Bug-Tracker at
6292 @url{http://gna.org/bugs/?group=planner-el}.
6294 Planner has three mailing lists.
6296 @table @samp
6298 @item planner-el-announce
6299 Low-traffic list for planner-related announcements.
6301 You can join this mailing list (@email{planner-el-announce@@gna.org})
6302 using the subscription form at
6303 @url{http://mail.gna.org/listinfo/planner-el-announce/}.  This
6304 mailing list is also available via Gmane (@url{http://gmane.org/}). The
6305 group is called @samp{gmane.emacs.planner.announce}.
6307 @item planner-el-discuss
6308 Discussion, bugfixes, suggestions, tips, and the like for Planner.
6309 This mailing list also includes the content of planner-el-announce.
6311 You can join this mailing list (@email{planner-el-discuss@@gna.org})
6312 using the subscription form at
6313 @url{http://mail.gna.org/listinfo/planner-el-discuss/}.  This mailing
6314 list is also available via Gmane with the identifier
6315 @samp{gmane.emacs.planner.general}.
6317 @item planner-el-cvs
6318 Log messages for changes committed to Planner.
6320 You can join this mailing list (@email{planner-el-cvs@@gna.org}) using
6321 the subscription form at
6322 @url{http://mail.gna.org/listinfo/planner-el-cvs/}.  This mailing list
6323 is also available via Gmane with the identifier
6324 @samp{gmane.emacs.planner.cvs}.
6326 @end table
6328 You can also contact the maintainer of Planner, Michael Olson, at
6329 @email{mwolson@@gnu.org}, but it is better to use the other options.
6331 You can explore the relevant sections of the EmacsWiki.org:
6333 @itemize @bullet
6335 @item
6336 @url{http://www.emacswiki.org/cgi-bin/wiki/PlannerMode}
6338 @item
6339 @url{http://www.emacswiki.org/cgi-bin/wiki/MuseMode}
6341 @item
6342 @url{http://www.emacswiki.org/cgi-bin/wiki/RememberMode}
6344 @end itemize
6346 You can visit the IRC Freenode channel @samp{#emacs}. Many of the
6347 contributors are frequently around and willing to answer your
6348 questions.
6350 There is an Orkut community called PlannerMode.
6352 For issues relating to this documentation, please contact John
6353 Sullivan at @email{johnsu01@@yahoo.com}.
6355 @node Acknowledgements, GNU General Public License, Getting Help, Top
6356 @comment  node-name,  next,  previous,  up
6357 @chapter Acknowledgements
6358 @itemize
6359 @item Maintainers
6361 @cindex maintainers
6363 @itemize
6364 @item 2005
6366 Michael Olson, Sacha Chua, and several others from the Planner community
6367 ported Planner to use Muse instead of emacs-wiki.  Michael Olson became
6368 the maintainer of Planner.
6370 @item 2004
6372 Damien Elmes handed EmacsWikiMode to Mark Triggs for a short period of
6373 time.  Mark Triggs deferred to Sacha Chua as official maintainer of
6374 Planner.  Sacha Chua volunteered to maintain RememberMode.
6375 Michael Olson became the maintainer of both emacs-wiki and Muse.
6377 @item 2003
6379 Sacha Chua volunteered to maintain Planner.  Damien Elmes
6380 volunteered to maintain EmacsWikiMode.
6382 @item 2001
6384 John Wiegley wrote EmacsWikiMode and Planner.
6385 @end itemize
6387 @item Contributors
6388 @cindex contributors
6390 For a complete list of people who have helped out with Planner, please
6391 check out the @file{AUTHORS} file that is included with Planner.
6393 @end itemize
6395 @node GNU General Public License, Concept Index, Acknowledgements, Top
6396 @comment  node-name,  next,  previous,  up
6397 @appendix GNU GENERAL PUBLIC LICENSE
6398 @center Version 2, June 1991
6399 @cindex GPL
6400 @cindex GNU General Public License
6402 @c This file is intended to be included in another file.
6404 @display
6405 Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
6406 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
6408 Everyone is permitted to copy and distribute verbatim copies
6409 of this license document, but changing it is not allowed.
6410 @end display
6412 @appendixsec Preamble
6414   The licenses for most software are designed to take away your
6415 freedom to share and change it.  By contrast, the GNU General Public
6416 License is intended to guarantee your freedom to share and change free
6417 software---to make sure the software is free for all its users.  This
6418 General Public License applies to most of the Free Software
6419 Foundation's software and to any other program whose authors commit to
6420 using it.  (Some other Free Software Foundation software is covered by
6421 the GNU Library General Public License instead.)  You can apply it to
6422 your programs, too.
6424   When we speak of free software, we are referring to freedom, not
6425 price.  Our General Public Licenses are designed to make sure that you
6426 have the freedom to distribute copies of free software (and charge for
6427 this service if you wish), that you receive source code or can get it
6428 if you want it, that you can change the software or use pieces of it
6429 in new free programs; and that you know you can do these things.
6431   To protect your rights, we need to make restrictions that forbid
6432 anyone to deny you these rights or to ask you to surrender the rights.
6433 These restrictions translate to certain responsibilities for you if you
6434 distribute copies of the software, or if you modify it.
6436   For example, if you distribute copies of such a program, whether
6437 gratis or for a fee, you must give the recipients all the rights that
6438 you have.  You must make sure that they, too, receive or can get the
6439 source code.  And you must show them these terms so they know their
6440 rights.
6442   We protect your rights with two steps: (1) copyright the software, and
6443 (2) offer you this license which gives you legal permission to copy,
6444 distribute and/or modify the software.
6446   Also, for each author's protection and ours, we want to make certain
6447 that everyone understands that there is no warranty for this free
6448 software.  If the software is modified by someone else and passed on, we
6449 want its recipients to know that what they have is not the original, so
6450 that any problems introduced by others will not reflect on the original
6451 authors' reputations.
6453   Finally, any free program is threatened constantly by software
6454 patents.  We wish to avoid the danger that redistributors of a free
6455 program will individually obtain patent licenses, in effect making the
6456 program proprietary.  To prevent this, we have made it clear that any
6457 patent must be licensed for everyone's free use or not licensed at all.
6459   The precise terms and conditions for copying, distribution and
6460 modification follow.
6462 @iftex
6463 @appendixsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
6464 @end iftex
6465 @ifinfo
6466 @center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
6467 @end ifinfo
6469 @enumerate 0
6470 @item
6471 This License applies to any program or other work which contains
6472 a notice placed by the copyright holder saying it may be distributed
6473 under the terms of this General Public License.  The ``Program'', below,
6474 refers to any such program or work, and a ``work based on the Program''
6475 means either the Program or any derivative work under copyright law:
6476 that is to say, a work containing the Program or a portion of it,
6477 either verbatim or with modifications and/or translated into another
6478 language.  (Hereinafter, translation is included without limitation in
6479 the term ``modification''.)  Each licensee is addressed as ``you''.
6481 Activities other than copying, distribution and modification are not
6482 covered by this License; they are outside its scope.  The act of
6483 running the Program is not restricted, and the output from the Program
6484 is covered only if its contents constitute a work based on the
6485 Program (independent of having been made by running the Program).
6486 Whether that is true depends on what the Program does.
6488 @item
6489 You may copy and distribute verbatim copies of the Program's
6490 source code as you receive it, in any medium, provided that you
6491 conspicuously and appropriately publish on each copy an appropriate
6492 copyright notice and disclaimer of warranty; keep intact all the
6493 notices that refer to this License and to the absence of any warranty;
6494 and give any other recipients of the Program a copy of this License
6495 along with the Program.
6497 You may charge a fee for the physical act of transferring a copy, and
6498 you may at your option offer warranty protection in exchange for a fee.
6500 @item
6501 You may modify your copy or copies of the Program or any portion
6502 of it, thus forming a work based on the Program, and copy and
6503 distribute such modifications or work under the terms of Section 1
6504 above, provided that you also meet all of these conditions:
6506 @enumerate a
6507 @item
6508 You must cause the modified files to carry prominent notices
6509 stating that you changed the files and the date of any change.
6511 @item
6512 You must cause any work that you distribute or publish, that in
6513 whole or in part contains or is derived from the Program or any
6514 part thereof, to be licensed as a whole at no charge to all third
6515 parties under the terms of this License.
6517 @item
6518 If the modified program normally reads commands interactively
6519 when run, you must cause it, when started running for such
6520 interactive use in the most ordinary way, to print or display an
6521 announcement including an appropriate copyright notice and a
6522 notice that there is no warranty (or else, saying that you provide
6523 a warranty) and that users may redistribute the program under
6524 these conditions, and telling the user how to view a copy of this
6525 License.  (Exception: if the Program itself is interactive but
6526 does not normally print such an announcement, your work based on
6527 the Program is not required to print an announcement.)
6528 @end enumerate
6530 These requirements apply to the modified work as a whole.  If
6531 identifiable sections of that work are not derived from the Program,
6532 and can be reasonably considered independent and separate works in
6533 themselves, then this License, and its terms, do not apply to those
6534 sections when you distribute them as separate works.  But when you
6535 distribute the same sections as part of a whole which is a work based
6536 on the Program, the distribution of the whole must be on the terms of
6537 this License, whose permissions for other licensees extend to the
6538 entire whole, and thus to each and every part regardless of who wrote it.
6540 Thus, it is not the intent of this section to claim rights or contest
6541 your rights to work written entirely by you; rather, the intent is to
6542 exercise the right to control the distribution of derivative or
6543 collective works based on the Program.
6545 In addition, mere aggregation of another work not based on the Program
6546 with the Program (or with a work based on the Program) on a volume of
6547 a storage or distribution medium does not bring the other work under
6548 the scope of this License.
6550 @item
6551 You may copy and distribute the Program (or a work based on it,
6552 under Section 2) in object code or executable form under the terms of
6553 Sections 1 and 2 above provided that you also do one of the following:
6555 @enumerate a
6556 @item
6557 Accompany it with the complete corresponding machine-readable
6558 source code, which must be distributed under the terms of Sections
6559 1 and 2 above on a medium customarily used for software interchange; or,
6561 @item
6562 Accompany it with a written offer, valid for at least three
6563 years, to give any third party, for a charge no more than your
6564 cost of physically performing source distribution, a complete
6565 machine-readable copy of the corresponding source code, to be
6566 distributed under the terms of Sections 1 and 2 above on a medium
6567 customarily used for software interchange; or,
6569 @item
6570 Accompany it with the information you received as to the offer
6571 to distribute corresponding source code.  (This alternative is
6572 allowed only for noncommercial distribution and only if you
6573 received the program in object code or executable form with such
6574 an offer, in accord with Subsection b above.)
6575 @end enumerate
6577 The source code for a work means the preferred form of the work for
6578 making modifications to it.  For an executable work, complete source
6579 code means all the source code for all modules it contains, plus any
6580 associated interface definition files, plus the scripts used to
6581 control compilation and installation of the executable.  However, as a
6582 special exception, the source code distributed need not include
6583 anything that is normally distributed (in either source or binary
6584 form) with the major components (compiler, kernel, and so on) of the
6585 operating system on which the executable runs, unless that component
6586 itself accompanies the executable.
6588 If distribution of executable or object code is made by offering
6589 access to copy from a designated place, then offering equivalent
6590 access to copy the source code from the same place counts as
6591 distribution of the source code, even though third parties are not
6592 compelled to copy the source along with the object code.
6594 @item
6595 You may not copy, modify, sublicense, or distribute the Program
6596 except as expressly provided under this License.  Any attempt
6597 otherwise to copy, modify, sublicense or distribute the Program is
6598 void, and will automatically terminate your rights under this License.
6599 However, parties who have received copies, or rights, from you under
6600 this License will not have their licenses terminated so long as such
6601 parties remain in full compliance.
6603 @item
6604 You are not required to accept this License, since you have not
6605 signed it.  However, nothing else grants you permission to modify or
6606 distribute the Program or its derivative works.  These actions are
6607 prohibited by law if you do not accept this License.  Therefore, by
6608 modifying or distributing the Program (or any work based on the
6609 Program), you indicate your acceptance of this License to do so, and
6610 all its terms and conditions for copying, distributing or modifying
6611 the Program or works based on it.
6613 @item
6614 Each time you redistribute the Program (or any work based on the
6615 Program), the recipient automatically receives a license from the
6616 original licensor to copy, distribute or modify the Program subject to
6617 these terms and conditions.  You may not impose any further
6618 restrictions on the recipients' exercise of the rights granted herein.
6619 You are not responsible for enforcing compliance by third parties to
6620 this License.
6622 @item
6623 If, as a consequence of a court judgment or allegation of patent
6624 infringement or for any other reason (not limited to patent issues),
6625 conditions are imposed on you (whether by court order, agreement or
6626 otherwise) that contradict the conditions of this License, they do not
6627 excuse you from the conditions of this License.  If you cannot
6628 distribute so as to satisfy simultaneously your obligations under this
6629 License and any other pertinent obligations, then as a consequence you
6630 may not distribute the Program at all.  For example, if a patent
6631 license would not permit royalty-free redistribution of the Program by
6632 all those who receive copies directly or indirectly through you, then
6633 the only way you could satisfy both it and this License would be to
6634 refrain entirely from distribution of the Program.
6636 If any portion of this section is held invalid or unenforceable under
6637 any particular circumstance, the balance of the section is intended to
6638 apply and the section as a whole is intended to apply in other
6639 circumstances.
6641 It is not the purpose of this section to induce you to infringe any
6642 patents or other property right claims or to contest validity of any
6643 such claims; this section has the sole purpose of protecting the
6644 integrity of the free software distribution system, which is
6645 implemented by public license practices.  Many people have made
6646 generous contributions to the wide range of software distributed
6647 through that system in reliance on consistent application of that
6648 system; it is up to the author/donor to decide if he or she is willing
6649 to distribute software through any other system and a licensee cannot
6650 impose that choice.
6652 This section is intended to make thoroughly clear what is believed to
6653 be a consequence of the rest of this License.
6655 @item
6656 If the distribution and/or use of the Program is restricted in
6657 certain countries either by patents or by copyrighted interfaces, the
6658 original copyright holder who places the Program under this License
6659 may add an explicit geographical distribution limitation excluding
6660 those countries, so that distribution is permitted only in or among
6661 countries not thus excluded.  In such case, this License incorporates
6662 the limitation as if written in the body of this License.
6664 @item
6665 The Free Software Foundation may publish revised and/or new versions
6666 of the General Public License from time to time.  Such new versions will
6667 be similar in spirit to the present version, but may differ in detail to
6668 address new problems or concerns.
6670 Each version is given a distinguishing version number.  If the Program
6671 specifies a version number of this License which applies to it and ``any
6672 later version'', you have the option of following the terms and conditions
6673 either of that version or of any later version published by the Free
6674 Software Foundation.  If the Program does not specify a version number of
6675 this License, you may choose any version ever published by the Free Software
6676 Foundation.
6678 @item
6679 If you wish to incorporate parts of the Program into other free
6680 programs whose distribution conditions are different, write to the author
6681 to ask for permission.  For software which is copyrighted by the Free
6682 Software Foundation, write to the Free Software Foundation; we sometimes
6683 make exceptions for this.  Our decision will be guided by the two goals
6684 of preserving the free status of all derivatives of our free software and
6685 of promoting the sharing and reuse of software generally.
6687 @iftex
6688 @heading NO WARRANTY
6689 @end iftex
6690 @ifinfo
6691 @center NO WARRANTY
6692 @end ifinfo
6694 @item
6695 BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
6696 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
6697 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
6698 PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
6699 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
6700 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
6701 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
6702 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
6703 REPAIR OR CORRECTION.
6705 @item
6706 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
6707 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
6708 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
6709 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
6710 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
6711 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
6712 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
6713 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
6714 POSSIBILITY OF SUCH DAMAGES.
6715 @end enumerate
6717 @iftex
6718 @heading END OF TERMS AND CONDITIONS
6719 @end iftex
6720 @ifinfo
6721 @center END OF TERMS AND CONDITIONS
6722 @end ifinfo
6724 @page
6725 @appendixsec Appendix: How to Apply These Terms to Your New Programs
6727   If you develop a new program, and you want it to be of the greatest
6728 possible use to the public, the best way to achieve this is to make it
6729 free software which everyone can redistribute and change under these terms.
6731   To do so, attach the following notices to the program.  It is safest
6732 to attach them to the start of each source file to most effectively
6733 convey the exclusion of warranty; and each file should have at least
6734 the ``copyright'' line and a pointer to where the full notice is found.
6736 @smallexample
6737 @var{one line to give the program's name and a brief idea of what it does.}
6738 Copyright (C) @var{yyyy}  @var{name of author}
6740 This program is free software; you can redistribute it and/or modify
6741 it under the terms of the GNU General Public License as published by
6742 the Free Software Foundation; either version 2 of the License, or
6743 (at your option) any later version.
6745 This program is distributed in the hope that it will be useful,
6746 but WITHOUT ANY WARRANTY; without even the implied warranty of
6747 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6748 GNU General Public License for more details.
6750 You should have received a copy of the GNU General Public License
6751 along with this program; if not, write to the Free Software
6752 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
6753 @end smallexample
6755 Also add information on how to contact you by electronic and paper mail.
6757 If the program is interactive, make it output a short notice like this
6758 when it starts in an interactive mode:
6760 @smallexample
6761 Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
6762 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
6763 This is free software, and you are welcome to redistribute it
6764 under certain conditions; type `show c' for details.
6765 @end smallexample
6767 The hypothetical commands @samp{show w} and @samp{show c} should show
6768 the appropriate parts of the General Public License.  Of course, the
6769 commands you use may be called something other than @samp{show w} and
6770 @samp{show c}; they could even be mouse-clicks or menu items---whatever
6771 suits your program.
6773 You should also get your employer (if you work as a programmer) or your
6774 school, if any, to sign a ``copyright disclaimer'' for the program, if
6775 necessary.  Here is a sample; alter the names:
6777 @example
6778 Yoyodyne, Inc., hereby disclaims all copyright interest in the program
6779 `Gnomovision' (which makes passes at compilers) written by James Hacker.
6781 @var{signature of Ty Coon}, 1 April 1989
6782 Ty Coon, President of Vice
6783 @end example
6785 This General Public License does not permit incorporating your program into
6786 proprietary programs.  If your program is a subroutine library, you may
6787 consider it more useful to permit linking proprietary applications with the
6788 library.  If this is what you want to do, use the GNU Library General
6789 Public License instead of this License.
6791 @node Concept Index,  , GNU General Public License, Top
6792 @comment  node-name,  next,  previous,  up
6793 @unnumbered Index
6795 @printindex cp
6797 @bye