Browse Source

Release 4.40

Carsten Dominik 13 years ago
parent
commit
8fd900c684
11 changed files with 4304 additions and 1506 deletions
  1. 9 2
      README
  2. 816 537
      org
  3. 83 71
      org-publish.el
  4. 1448 477
      org.el
  5. BIN
      org.pdf
  6. 566 338
      org.texi
  7. BIN
      orgcard.pdf
  8. 97 81
      orgcard.tex
  9. 9 0
      xemacs/README
  10. 1051 0
      xemacs/noutline.el
  11. 225 0
      xemacs/ps-print-invisible.el

+ 9 - 2
README

@@ -1,4 +1,11 @@
-The is a distribution of org-mode
+The is a distribution of Org-mode, a plain text notes and project planning
+tool for Emacs.
 
-The homepage of org-mode is at http://www.astro.uva.nl/~domnik/Tools/org/
+The homepage of Org-mode is at http://www.astro.uva.nl/~domnik/Tools/org/
 
+The manual is in the file org.pdf, it includes a section about installation.
+
+The xemacs directory contains special code for XEmacs users, in particular
+a port of the GNU Emacs outline.el to XEmacs.  Org-mode does not work
+under XEmacs without this file installed.  It did until version 4.37,
+but no longer.

File diff suppressed because it is too large
+ 816 - 537
org


+ 83 - 71
org-publish.el

@@ -1,12 +1,12 @@
 ;;; org-publish.el --- publish related org-mode files as a website
 
-;; Copyright (C) 2006  David O'Toole
+;; Copyright (C) 2006  Free Software Foundation, Inc.
 
 ;; Author: David O'Toole <dto@gnu.org>
 ;; Keywords: hypermedia, outlines
-;; Version: 
+;; Version:
 
-;; $Id: org-publish.el,v 1.67 2006/05/30 10:44:31 dto Exp dto $
+;; $Id: org-publish.el,v 1.73 2006/06/15 12:43:48 dto Exp $
 
 ;; This file is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
@@ -23,8 +23,6 @@
 ;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 ;; Boston, MA 02110-1301, USA.
 
-;; This file is NOT part of GNU Emacs. 
-
 ;;; Commentary:
 
 ;; Requires at least version 4.27 of org.el
@@ -39,7 +37,7 @@
 ;; to allow configurable publishing of related sets of files as a
 ;; complete website.
 ;;
-;; org-publish.el can do the following: 
+;; org-publish.el can do the following:
 ;;
 ;; + Publish all one's org-files to html
 ;; + Upload html, images, attachments and other files to a web server
@@ -51,7 +49,7 @@
 ;; Special thanks to the org-mode maintainer Carsten Dominik for his
 ;; ideas, enthusiasm, and cooperation.
 
-;;; Installation: 
+;;; Installation:
 
 ;; Put org-publish.el in your load path, byte-compile it, and then add
 ;; the following lines to your emacs initialization file:
@@ -65,13 +63,13 @@
 ;; already in the file org-install.el, and hence don't need to be put
 ;; in your emacs initialization file in this case.
 
-;;; Usage: 
+;;; Usage:
 ;;
 ;; The program's main configuration variable is
 ;; `org-publish-project-alist'. See below for example configurations
 ;; with commentary.
 
-;; The main interactive functions are: 
+;; The main interactive functions are:
 ;;
 ;; M-x org-publish
 ;; M-x org-publish-all
@@ -81,7 +79,7 @@
 ;;;; Simple example configuration:
 
 ;; (setq org-publish-project-alist
-;;       (list 
+;;       (list
 ;;        '("org" . (:base-directory "~/org/"
 ;; 		     :base-extension "org"
 ;; 		     :publishing-directory "~/public_html"
@@ -103,10 +101,10 @@
 ;; following example configuration to your specific paths, run M-x
 ;; org-publish-all, and it should publish the files to the correct
 ;; directories on the web server, transforming the *.org files into
-;; HTML, and leaving other files alone.  
+;; HTML, and leaving other files alone.
 
 ;; (setq org-publish-project-alist
-;;       (list 
+;;       (list
 ;;        '("orgfiles" :base-directory "~/org/"
 ;; 		       :base-extension "org"
 ;; 		       :publishing-directory "/ssh:user@host:~/html/notebook/"
@@ -118,12 +116,12 @@
 ;; 		       :style "<link rel=stylesheet href=\"../other/mystyle.css\" type=\"text/css\">"
 ;; 		       :auto-preamble t
 ;; 		       :auto-postamble nil)
-;;      
+;;
 ;;         ("images" :base-directory "~/images/"
 ;; 	             :base-extension "jpg\\|gif\\|png"
 ;; 		     :publishing-directory "/ssh:user@host:~/html/images/"
 ;; 		     :publishing-function org-publish-attachment)
-;;  
+;;
 ;;         ("other"  :base-directory "~/other/"
 ;; 	   	     :base-extension "css"
 ;; 		     :publishing-directory "/ssh:user@host:~/html/other/"
@@ -140,13 +138,13 @@
 
 ;;; List of user-visible changes since version 1.27
 
-;; 1.65: Remove old "composite projects". They're redundant. 
+;; 1.65: Remove old "composite projects". They're redundant.
 ;; 1.64: Allow meta-projects with :components
 ;; 1.57: Timestamps flag is now called "org-publish-use-timestamps-flag"
 ;; 1.52: Properly set default for :index-filename
 ;; 1.48: Composite projects allowed.
 ;;       :include keyword allowed.
-;; 1.43: Index no longer includes itself in the index. 
+;; 1.43: Index no longer includes itself in the index.
 ;; 1.42: Fix "function definition is void" error
 ;;       when :publishing-function not set in org-publish-current-file.
 ;; 1.41: Fixed bug where index isn't published on first try.
@@ -158,7 +156,7 @@
 
 ;;; Code:
 
-(eval-when-compile 
+(eval-when-compile
   (require 'cl))
 
 (defgroup org-publish nil
@@ -167,16 +165,16 @@
    :group 'org)
 
 
-(defcustom org-publish-project-alist nil 
+(defcustom org-publish-project-alist nil
   "Association list to control publishing behavior.
 Each element of the alist is a publishing 'project.'  The CAR of
 each element is a string, uniquely identifying the project. The
-CDR of each element is in one of the following forms: 
+CDR of each element is in one of the following forms:
 
   (:property value :property value ... )
 
 OR,
-  
+
   (:components (\"project-1\" \"project-2\" ...))
 
 When the CDR of an element of org-publish-project-alist is in
@@ -191,7 +189,7 @@ setting overrides the value of the corresponding user variable
 override everything.
 
 Most properties are optional, but some should always be set:
-  
+
     :base-directory        Directory containing publishing source files
     :base-extension        Extension (without the dot!) of source files.
                              This can be a regular expression.
@@ -207,7 +205,7 @@ value may be a list of filenames to include. The filenames are
 considered relative to the publishing directory.
 
 When both :include and :exclude properties are given values, the
-exclusion step happens first. 
+exclusion step happens first.
 
 One special property controls which back-end function to use for
 publishing files in the project. This can be used to extend the
@@ -249,29 +247,29 @@ learn more about their use and default values.
 The following properties may be used to control publishing of an
 index of files or summary page for a given project.
 
-    :auto-index            Whether to publish an index during 
+    :auto-index            Whether to publish an index during
                            org-publish-current-project or org-publish-all.
     :index-filename        Filename for output of index. Defaults
                            to 'index.org' (which becomes 'index.html')
     :index-title           Title of index page. Defaults to name of file.
     :index-function        Plugin function to use for generation of index.
-                           Defaults to 'org-publish-org-index', which 
+                           Defaults to 'org-publish-org-index', which
                            generates a plain list of links to all files
-                           in the project. 
+                           in the project.
 "
   :group 'org-publish
   :type 'alist)
 
 
 (defcustom org-publish-use-timestamps-flag t
-  "When non-nil, use timestamp checking to publish only changed files. 
+  "When non-nil, use timestamp checking to publish only changed files.
 When nil, do no timestamp checking and always publish all
 files."
   :group 'org-publish
   :type 'boolean)
 
 
-(defcustom org-publish-timestamp-directory "~/.org-timestamps/" 
+(defcustom org-publish-timestamp-directory "~/.org-timestamps/"
   "Name of directory in which to store publishing timestamps."
   :group 'org-publish
   :type 'string)
@@ -287,8 +285,8 @@ files."
   (concat org-publish-timestamp-directory filename ".timestamp"))
 
 
-(defun org-publish-needed-p (filename) 
-  "Check whether file should be published. 
+(defun org-publish-needed-p (filename)
+  "Check whether file should be published.
 If org-publish-use-timestamps-flag is set to nil, this function always
 returns t. Otherwise, check the timestamps folder to determine
 whether file should be published."
@@ -304,7 +302,7 @@ whether file should be published."
 	;; check timestamp. ok if timestamp file doesn't exist
 	(let* ((timestamp (org-publish-timestamp-filename filename))
 	       (rtn (file-newer-than-file-p filename timestamp)))
-	  (if rtn 
+	  (if rtn
 	      ;; handle new timestamps
 	      (if (not (file-exists-p timestamp))
 		  ;; create file
@@ -321,11 +319,25 @@ whether file should be published."
     (set-file-times timestamp)))
 
 
+;;;; A hash mapping files to project names
+
+
+(defvar org-publish-files (make-hash-table :test 'equal) "Hash
+table mapping file names to project names.")
+
+
+;;;; Checking filenames against this hash
+
+
+(defun org-publish-validate-link (link)
+  (gethash (file-truename link) org-publish-files))
+
+
 ;;;; Getting project information out of org-publish-project-alist
 
 
 (defun org-publish-get-plists (&optional project-name)
-  "Return a list of property lists for project PROJECT-NAME. 
+  "Return a list of property lists for project PROJECT-NAME.
 When argument is not given, return all property lists for all projects."
   (let ((alist (if project-name
 		   (list (assoc project-name org-publish-project-alist))
@@ -333,19 +345,25 @@ When argument is not given, return all property lists for all projects."
 	(project nil)
 	(plists nil)
 	(components nil))
+
+    ;;
+    ;;
     (while (setq project (pop alist))
+      ;; what kind of project is it?
       (if (setq components (plist-get (cdr project) :components))
 	  ;; meta project. annotate each plist with name of enclosing project
-	  (setq plists 
-		(append plists 
-			(mapcar (lambda (p) 
-				  (plist-put p :project-name (car project)))
-				(mapcan 'org-publish-get-plists components))))
+	  (setq plists
+		(append plists
+			(apply 'append
+			       (mapcar 'org-publish-get-plists components))))
 	;; normal project
-	(let ((p (cdr project)))
-	  (setq p (plist-put p :project-name (car project)))
-	  (setq plists (append plists (list (cdr project)))))))
-    ;;
+	(setq plists (append plists (list (cdr project)))))
+      ;;
+      (dolist (p plists)
+	(let* ((exclude (plist-get p :exclude))
+	       (files (org-publish-get-base-files p exclude)))
+	  (dolist (f files)
+	    (puthash (file-truename f) (car project) org-publish-files)))))
     plists))
 
 
@@ -371,8 +389,8 @@ matching filenames."
     ;; include extra files
     (let ((inc nil))
       (while (setq inc (pop include-list))
-	(setq allfiles (cons (concat dir inc) allfiles))))
-    
+	(setq allfiles (cons (expand-file-name inc dir) allfiles))))
+
     allfiles))
 
 
@@ -380,14 +398,8 @@ matching filenames."
   "Figure out which project a given FILENAME belongs to, if any.
 Filename should contain full path. Returns name of project, or
 nil if not found."
-  (let ((found nil))
-    (mapcar 
-     (lambda (plist)
-       (let ((files (org-publish-get-base-files plist)))
-	 (if (member (expand-file-name filename) files)
-	     (setq found (plist-get plist :project-name)))))
-     (org-publish-get-plists))
-    found))
+  (org-publish-get-plists)
+  (gethash (file-truename filename) org-publish-files))
 
 
 (defun org-publish-get-plist-from-filename (filename)
@@ -396,18 +408,19 @@ nil if not found."
     (mapcar
      (lambda (plist)
        (let ((files (org-publish-get-base-files plist)))
-	 (if (member (expand-file-name filename) files)
-             (setq found plist))))
+ 	 (if (member (expand-file-name filename) files)
+	     (setq found plist))))
      (org-publish-get-plists))
     found))
 
 
+
 ;;;; Pluggable publishing back-end functions
 
 
 (defun org-publish-org-to-html (plist filename)
-  "Publish an org file to HTML.  
-PLIST is the property list for the given project. 
+  "Publish an org file to HTML.
+PLIST is the property list for the given project.
 FILENAME is the filename of the org file to be published."
   (require 'org)
   (let* ((arg (plist-get plist :headline-levels)))
@@ -416,14 +429,14 @@ FILENAME is the filename of the org file to be published."
       (org-export-as-html arg nil plist)
       ;; get rid of HTML buffer
       (kill-buffer (current-buffer)))))
-   
+
 
 (defun org-publish-attachment (plist filename)
   "Publish a file with no transformation of any kind.
-PLIST is the property list for the given project. 
+PLIST is the property list for the given project.
 FILENAME is the filename of the file to be published."
   ;; make sure eshell/cp code is loaded
-  (require 'eshell) 
+  (require 'eshell)
   (require 'esh-maint)
   (require 'em-unix)
   (let ((destination (file-name-as-directory (plist-get plist :publishing-directory))))
@@ -450,7 +463,6 @@ FILENAME is the filename of the file to be published."
  If :auto-index is set, publish the index too."
   (let* ((exclude-regexp (plist-get plist :exclude))
 	 (publishing-function (or (plist-get plist :publishing-function) 'org-publish-org-to-html))
-	 (buf (current-buffer))
 	 (index-p (plist-get plist :auto-index))
          (index-filename (or (plist-get plist :index-filename) "index.org"))
 	 (index-function (or (plist-get plist :index-function) 'org-publish-org-index))
@@ -463,14 +475,12 @@ FILENAME is the filename of the file to be published."
 	;; check timestamps
 	(when (org-publish-needed-p f)
 	  (funcall publishing-function plist f)
-	  (org-publish-update-timestamp f))))
-    ;; back to original buffer
-    (switch-to-buffer buf)))
+	  (org-publish-update-timestamp f))))))
 
 
 (defun org-publish-org-index (plist &optional index-filename)
-  "Create an index of pages in set defined by PLIST.  
-Optionally set the filename of the index with INDEX-FILENAME; 
+  "Create an index of pages in set defined by PLIST.
+Optionally set the filename of the index with INDEX-FILENAME;
 default is 'index.org'."
   (let* ((dir (file-name-as-directory (plist-get plist :base-directory)))
 	 (exclude-regexp (plist-get plist :exclude))
@@ -483,7 +493,7 @@ default is 'index.org'."
     ;; if buffer is already open, kill it to prevent error message
     (if index-buffer
 	(kill-buffer index-buffer))
-    (with-temp-buffer 
+    (with-temp-buffer
       (while (setq f (pop files))
 	(let ((fn (file-name-nondirectory f)))
 	  (unless (string= fn ifn) ;; index shouldn't index itself
@@ -497,19 +507,21 @@ default is 'index.org'."
 ;(defun org-publish-meta-index (meta-plist &optional index-filename)
 ;  "Create an index for a metaproject."
 ;  (let* ((plists (
-  
- 
+
+
 ;;;; Interactive publishing functions
 
 
 ;;;###autoload
 (defun org-publish (project-name &optional force)
   "Publish the project PROJECT-NAME."
-  (interactive "sProject name: \nP")
+  (interactive (list (completing-read "Project name: " org-publish-project-alist
+				      nil t)
+		     current-prefix-arg))
   (let ((org-publish-use-timestamps-flag (if force nil t))
 	(plists (org-publish-get-plists project-name)))
     (mapcar 'org-publish-plist plists)))
-       
+
 
 ;;;###autoload
 (defun org-publish-current-project (&optional force)
@@ -521,14 +533,14 @@ With prefix argument, force publishing all files in project."
     (if (not project-name)
 	(error (format "File %s is not part of any known project." (buffer-file-name))))
     (org-publish project-name)))
-	
 
-;;;###autoload		      
+
+;;;###autoload
 (defun org-publish-current-file (&optional force)
   "Publish the current file.
 With prefix argument, force publish the file."
   (interactive "P")
-  (let ((org-publish-use-timestamps-flag 
+  (let ((org-publish-use-timestamps-flag
 	 (if force nil t)))
     (org-publish-file (buffer-file-name))))
 

File diff suppressed because it is too large
+ 1448 - 477
org.el


BIN
org.pdf


File diff suppressed because it is too large
+ 566 - 338
org.texi


BIN
orgcard.pdf


+ 97 - 81
orgcard.tex

@@ -1,5 +1,5 @@
 % Reference Card for Org Mode
-\def\orgversionnumber{4.37}
+\def\orgversionnumber{4.40}
 \def\year{2006}
 %
 %**start of header
@@ -288,10 +288,8 @@ are preserved on all copies.
 
 \section{Motion}
 
-\key{next heading}{C-c C-n}
-\key{previous heading}{C-c C-p}
-\key{next heading, same level}{C-c C-f}
-\key{previous heading, same level}{C-c C-b}
+\key{next/previous heading}{C-c C-n/p}
+\key{next/previous heading, same level}{C-c C-f/b}
 \key{backward to higher level heading}{C-c C-u}
 \key{jump to another place in document}{C-c C-j}
 \key{previous/next plain list item}{S-UP/DOWN$^3$}
@@ -306,13 +304,18 @@ are preserved on all copies.
 \key{promote current subtree up one level}{M-S-LEFT}
 \key{demote current subtree down one level}{M-S-RIGHT}
 
-\key{move subtree/list item up}{M-S-UP}
-\key{move subtree/list item down}{M-S-DOWN}
+\key{move subtree/list item up/down}{M-S-UP/DOWN}
 \key{kill subtree}{C-c C-x C-w}
 \key{copy subtree}{C-c C-x M-w}
 \key{yank subtree}{C-c C-x C-y}
+\key{narrow buffer to current subtree}{C-x n s}
 
-\key{archive subtree}{C-c \$}
+\section{Archiving}
+
+\key{toggle ARCHIVE tag}{C-c C-x C-a}
+\metax{mark fully dine children}{C-u C-c C-x C-a}
+\key{move subtree to achive file}{C-c \$}
+\key{move all fully done children}{C-u C-c \$}
 To set archive location for current file, add a line like$^2$:
 \vskip -1mm
 \beginexample%
@@ -329,18 +332,8 @@ To set archive location for current file, add a line like$^2$:
 %\key{agenda for the week}{C-c a$^1$}
 %\key{agenda for date at cursor}{C-c C-o}
 
-\section{Tags}
-
-\key{set tags for current heading}{C-c C-c}
-\key{realign tags in all headings}{C-u C-c C-c}
-\key{create sparse tree with matching tags}{C-c \\}
-\key{globally (agenda) match tags at cursor}{C-c C-o}
-
 \section{Tables}
 
-%Org-mode has its own built-in intuitive table editor with unique
-%capabilities.
-
 {\bf Creating a table}
 
 %\metax{insert a new Org-mode table}{M-x org-table-create}
@@ -466,6 +459,39 @@ formula, \kbd{:=} a named-field formula.
 %\key{\kbd{vm://myself@some.where.org/folder\#id}}{\rm VM remote}
 
 
+\section{Remember-mode Integration}
+
+See the manual for how to make remember.el use Org-mode links and
+files.  The note-finishing command \kbd{C-c C-c} will first prompt for
+an org file. In the file, find a location with:
+
+\key{rotate subtree visibility}{TAB}
+\key{next heading}{DOWN}
+\key{previous heading}{UP}
+
+Insert the note with one of the following: 
+
+\key{as sublevel of heading at cursor}{RET}
+\key{right here (cursor not on heading)}{RET}
+\key{before current heading}{LEFT}
+\key{after current heading}{RIGHT}
+\key{shortcut to end of buffer (cursor at buf-start)}{RET}
+\key{Abort}{q}
+
+\section{Completion}
+
+In-buffer completion completes TODO keywords at headline start, TeX
+macros after ``{\tt \\}'', option keywords after ``{\tt \#-}'', TAGS
+after  ``{\tt :}'', and dictionary words elsewhere.
+
+\key{Complete word at point}{M-TAB}
+
+
+\newcolumn
+\title{Org-Mode Reference Card (2/2)}
+
+\centerline{(for version \orgversionnumber)}
+
 \section{TODO Items}
 
 \key{rotate the state of the current item}{C-c C-t}
@@ -480,6 +506,13 @@ formula, \kbd{:=} a named-field formula.
 \key{\kbd{\#+SEQ_TODO: TODO TRY BLUFF DONE}}{\rm todo workflow}
 \key{\kbd{\#+TYP_TODO: Phil home work DONE}}{\rm todo types}
 
+\section{Tags}
+
+\key{set tags for current heading}{C-c C-c}
+\key{realign tags in all headings}{C-u C-c C-c}
+\key{create sparse tree with matching tags}{C-c \\}
+\key{globally (agenda) match tags at cursor}{C-c C-o}
+
 \section{Timestamps}
 
 \key{prompt for date and insert timestamp}{C-c .}
@@ -502,18 +535,26 @@ formula, \kbd{:=} a named-field formula.
 %\key{... forward/backward one month}{M-S-LEFT/RIGT}
 
 
-\newcolumn
-\title{Org-Mode Reference Card (2/2)}
-
-\centerline{(for version \orgversionnumber)}
-
 \section{Clocking Time}
 
 \key{start clock on current item}{C-c C-x C-i}
 \key{stop clock on current item}{C-c C-x C-o}
 \key{cancel current clock}{C-c C-x C-x}
+
 \key{display total subtree times}{C-c C-x C-d}
 \key{remove displayed times}{C-c C-c}
+\key{insert/update table with clock report}{C-c C-x C-r}
+
+\section{Dynamic Blocks}
+
+\key{update dynamic block at point}{C-c C-x C-u}
+\metax{update all dynamic blocks}{C-u C-c C-x C-u}
+
+\section{LaTeX and cdlatex-mode}
+
+\key{preview LaTeX fragment}{C-c C-x C-l}
+\key{Expand abbreviation (cdlatex-mode)}{TAB}
+\key{Insert/modify math symbol (cdlatex-mode)}{` / '}
 
 \section{Agenda Views}
 
@@ -565,6 +606,7 @@ To set categories, add lines like$^2$:
 \key{change state of current TODO item}{t}
 \key{show tags of current headline}{T}
 \key{set tags for current headline}{:}
+\key{toggle ARCHIVE tag}{a}
 \key{set priority of current item}{p}
 \key{raise/lower priority of current item}{S-UP/DOWN$^3$}
 \key{display weighted priority of current item}{P}
@@ -577,7 +619,6 @@ To set categories, add lines like$^2$:
 \key{Stop the clock (clock-out)}{O}
 \key{Cancel current clock}{X}
 
-\newcolumn
 
 {\bf Calendar commands}
 
@@ -593,6 +634,13 @@ To set categories, add lines like$^2$:
 \key{quit agenda, remove agenda buffer}{q}
 \key{exit agenda, remove all agenda buffers}{x}
 
+\section{Calendar and Diary Integration}
+
+To include entries from the Emacs diary in your Org-mode agenda:
+\beginexample%
+(setq org-agenda-include-diary t)
+\endexample
+
 \section{Exporting and Publishing}
 
 Exporting creates files with extensions {\it .txt\/} and {\it .html\/}
@@ -629,18 +677,19 @@ keywords. {\tt M-TAB} again just after keyword is complete inserts examples.
 \key{language code for html}{\#+LANGUAGE:}
 \key{free text description of file}{\#+TEXT:}
 \key{... which can carry over multiple lines}{\#+TEXT:}
-\key{settings for the export process - see below}{\#+OPTIONS:}
-
-\key{set number of headline levels for export}{H:2}
-\key{turn on/off section numbers}{num:t}
-\key{turn on/off table of contents}{toc:t}
-\key{turn on/off linebreak preservation}{\\n:nil}
-\key{turn on/off quoted html tags}{@:t}
-\key{turn on/off fixed width sections}{::t}
-\key{turn on/off tables}{|:t}
-\key{turn on/off \TeX\ syntax for sub/super-scripts}{\^{}:t}
-\key{turn on/off emphasised text}{*:nil}
-\key{turn on/off \TeX\ macros}{TeX:t}
+%\key{settings for the export process - see below}{\#+OPTIONS:}
+\key{settings for the export process}{\#+OPTIONS:}
+
+%\key{set number of headline levels for export}{H:2}
+%\key{turn on/off section numbers}{num:t}
+%\key{turn on/off table of contents}{toc:t}
+%\key{turn on/off linebreak preservation}{\\n:nil}
+%\key{turn on/off quoted html tags}{@:t}
+%\key{turn on/off fixed width sections}{::t}
+%\key{turn on/off tables}{|:t}
+%\key{turn on/off \TeX\ syntax for sub/super-scripts}{\^{}:t}
+%\key{turn on/off emphasised text}{*:nil}
+%\key{turn on/off \TeX\ macros}{TeX:t}
 
 {\bf Comments: Text not being exported}
 
@@ -651,53 +700,20 @@ Subtrees whose header starts with COMMENT are never exported.
 
 \key{toggle COMMENT keyword on entry}{C-c ;}
 
-\section{Completion}
-
-In-buffer completion completes TODO keywords at headline start, TeX
-macros after ``{\tt \\}'', option keywords after ``{\tt \#-}'', TAGS
-after  ``{\tt :}'', and dictionary words elsewhere.
-
-\key{Complete word at point}{M-TAB}
-
-\section{Calendar and Diary Integration}
 
-To include entries from the Emacs diary in your Org-mode agenda:
-\beginexample%
-(setq org-agenda-include-diary t)
-\endexample
-
-\section{Remember-mode Integration}
+%\section{CUA and pc-select compatibility}%
 
-See the manual for how to make remember.el use Org-mode links and
-files.  The note-finishing command \kbd{C-c C-c} will first prompt for
-an org file. In the file, find a location with:
-
-\key{rotate subtree visibility}{TAB}
-\key{next heading}{DOWN}
-\key{previous heading}{UP}
-
-Insert the note with one of the following: 
-
-\key{as sublevel of heading at cursor}{RET}
-\key{right here (cursor not on heading)}{RET}
-\key{before current heading}{LEFT}
-\key{after current heading}{RIGHT}
-\key{shortcut to end of buffer (cursor at buf-start)}{RET}
-\key{Abort}{q}
-
-\section{CUA and pc-select compatibility}
-
-Configure the variable {\tt org-CUA-compatibility} to make Org-mode
-avoid the \kbd{S-<cursor>} bindings used by these modes.  When set,
-Org-mode will change the following keybindings (also in the agenda
-buffer, but not during date selection). See note mark four$^3$
-throughout the reference card.
-%\vskip-mm
-\beginexample
-S-UP    $\to$ M-p             S-DOWN  $\to$ M-n
-S-LEFT  $\to$ M--             S-RIGHT $\to$ M-+
-S-RET   $\to$ C-S-RET
-\endexample
+%Configure the variable {\tt org-CUA-compatibility} to make Org-mode
+%avoid the \kbd{S-<cursor>} bindings used by these modes.  When set,
+%Org-mode will change the following keybindings (also in the agenda
+%buffer, but not during date selection). See note mark four$^3$
+%throughout the reference card.
+%%\vskip-mm
+%\beginexample
+%S-UP    $\to$ M-p             S-DOWN  $\to$ M-n
+%S-LEFT  $\to$ M--             S-RIGHT $\to$ M-+
+%S-RET   $\to$ C-S-RET
+%\endexample
 
 \section{Notes}
 $^1$ This is only a suggestion for a binding of this command.  Choose

+ 9 - 0
xemacs/README

@@ -0,0 +1,9 @@
+This directory contains files that are necessary or at least useful
+companions for Org-mode:
+
+noutline.el   Greg Chernov's port of the overlay-based implementation of
+              outline-mode.  This is requires, and until XEmacs uses
+              this (or another port), you need to install it with Org-mode.
+
+ps-print-invisible.el   Greg Chernovs modification to ps-print, to
+                        honor invisible text properties during printing.

File diff suppressed because it is too large
+ 1051 - 0
xemacs/noutline.el


+ 225 - 0
xemacs/ps-print-invisible.el

@@ -0,0 +1,225 @@
+;;; ps-print-invisible.el - addon to ps-print package that deals
+;;  with invisible text printing in xemacs
+
+;; Author: Greg Chernov
+;;
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;; Commentary:
+;; 
+;; Put ps-print-invisible.el on your load path.
+;; (require 'ps-print-invisible)
+;; ps-print-buffer-with-faces will not print invisible parts of the buffer.
+;; Work with invisible extents/text properties only 
+;; (xemacs hideshow and noutline packages). 
+
+(defun ps-generate-postscript-with-faces (from to)
+  ;; Some initialization...
+  (setq ps-current-effect 0)
+
+  ;; Build the reference lists of faces if necessary.
+  (when (or ps-always-build-face-reference
+	    ps-build-face-reference)
+    (message "Collecting face information...")
+    (ps-build-reference-face-lists))
+
+  ;; Black/white printer.
+  (setq ps-black-white-faces-alist nil)
+  (and (eq ps-print-color-p 'black-white)
+       (ps-extend-face-list ps-black-white-faces nil
+			    'ps-black-white-faces-alist))
+
+  ;; Generate some PostScript.
+  (save-restriction
+    (narrow-to-region from to)
+    (ps-print-ensure-fontified from to)
+    (let ((face 'default)
+	  (position to))
+      (cond
+       ((memq ps-print-emacs-type '(xemacs lucid))
+       ;; Build the list of extents...
+       ;;(debug)
+	(let ((a (cons 'dummy nil))
+	      record type extent extent-list
+	      (list-invisible (ps-print-find-invisible-xmas from to)))
+	  (ps-x-map-extents 'ps-mapper nil from to a)
+	  (setq a (sort (cdr a) 'car-less-than-car)
+		extent-list nil)
+	  
+	  ;; Loop through the extents...
+	  (while a
+	    (setq record (car a)
+		  position (car record)
+		  
+		  record (cdr record)
+		  type (car record)
+		  
+		  record (cdr record)
+		  extent (car record))
+	    
+	    ;; Plot up to this record.
+	    ;; XEmacs 19.12: for some reason, we're getting into a
+	    ;; situation in which some of the records have
+	    ;; positions less than 'from'.  Since we've narrowed
+	    ;; the buffer, this'll generate errors.  This is a hack,
+	    ;; but don't call ps-plot-with-face unless from > point-min.
+	    (and (>= from (point-min))
+		 (ps-plot-with-face from (min position (point-max)) face))
+	    
+	    (cond
+	     ((eq type 'push)
+	      (and (or (ps-x-extent-face extent)
+		       (extent-property extent 'invisible))
+		   (setq extent-list (sort (cons extent extent-list)
+					   'ps-extent-sorter))))
+	     
+	     ((eq type 'pull)
+	      (setq extent-list (sort (delq extent extent-list)
+				      'ps-extent-sorter))))
+	    
+	    
+	    (setq face (if extent-list
+			   (let ((prop (extent-property (car extent-list) 'invisible)))
+			     (if (or (and (eq buffer-invisibility-spec t)
+					  (not (null prop)))
+				     (and (consp buffer-invisibility-spec)
+					  (or (memq prop buffer-invisibility-spec)
+					      (assq prop buffer-invisibility-spec))))
+				 'emacs--invisible--face
+			       (ps-x-extent-face (car extent-list))))
+			 'default)
+		  from position
+		  a (cdr a)))))
+
+       ((eq ps-print-emacs-type 'emacs)
+	(let ((property-change from)
+	      (overlay-change from)
+	      (save-buffer-invisibility-spec buffer-invisibility-spec)
+	      (buffer-invisibility-spec nil)
+	      before-string after-string)
+	  (while (< from to)
+	    (and (< property-change to)	; Don't search for property change
+					; unless previous search succeeded.
+		 (setq property-change (next-property-change from nil to)))
+	    (and (< overlay-change to)	; Don't search for overlay change
+					; unless previous search succeeded.
+		 (setq overlay-change (min (ps-e-next-overlay-change from)
+					   to)))
+	    (setq position (min property-change overlay-change)
+		  before-string nil
+		  after-string nil)
+	    ;; The code below is not quite correct,
+	    ;; because a non-nil overlay invisible property
+	    ;; which is inactive according to the current value
+	    ;; of buffer-invisibility-spec nonetheless overrides
+	    ;; a face text property.
+	    (setq face
+		  (cond ((let ((prop (get-text-property from 'invisible)))
+			   ;; Decide whether this invisible property
+			   ;; really makes the text invisible.
+			   (if (eq save-buffer-invisibility-spec t)
+			       (not (null prop))
+			     (or (memq prop save-buffer-invisibility-spec)
+				 (assq prop save-buffer-invisibility-spec))))
+			 'emacs--invisible--face)
+			((get-text-property from 'face))
+			(t 'default)))
+	    (let ((overlays (ps-e-overlays-at from))
+		  (face-priority -1))	; text-property
+	      (while (and overlays
+			  (not (eq face 'emacs--invisible--face)))
+		(let* ((overlay (car overlays))
+		       (overlay-invisible
+			(ps-e-overlay-get overlay 'invisible))
+		       (overlay-priority
+			(or (ps-e-overlay-get overlay 'priority) 0)))
+		  (and (> overlay-priority face-priority)
+		       (setq before-string
+			     (or (ps-e-overlay-get overlay 'before-string)
+				 before-string)
+			     after-string
+			     (or (and (<= (ps-e-overlay-end overlay) position)
+				      (ps-e-overlay-get overlay 'after-string))
+				 after-string)
+			     face-priority overlay-priority
+			     face
+			     (cond
+			      ((if (eq save-buffer-invisibility-spec t)
+				   (not (null overlay-invisible))
+				 (or (memq overlay-invisible
+					   save-buffer-invisibility-spec)
+				     (assq overlay-invisible
+					   save-buffer-invisibility-spec)))
+			       'emacs--invisible--face)
+			      ((ps-e-overlay-get overlay 'face))
+			      (t face)
+			      ))))
+		(setq overlays (cdr overlays))))
+	    ;; Plot up to this record.
+	    (and before-string
+		 (ps-plot-string before-string))
+	    (ps-plot-with-face from position face)
+	    (and after-string
+		 (ps-plot-string after-string))
+	    (setq from position)))))
+      (ps-plot-with-face from to face))))
+
+
+(defun ps-print-find-invisible-xmas (from to)
+  (let ((list nil))
+    (map-extents '(lambda (ex ignored)
+		    (let ((prop (extent-property ex 'invisible)))
+		      (if (or (and (eq buffer-invisibility-spec t)
+				   (not (null prop)))
+			      (or (memq prop buffer-invisibility-spec)
+				  (assq prop buffer-invisibility-spec)))
+			  (setq list (cons (list 
+					      (extent-start-position ex)
+					      (extent-end-position ex))
+					     list))))
+		    nil)
+		 (current-buffer)
+		 from to nil 'start-and-end-in-region 'invisible)
+    (reverse list)))
+
+
+(defun ps-mapper (extent list)
+  ;;(debug)
+  (let ((beg (ps-x-extent-start-position extent))
+	(end (ps-x-extent-end-position extent))
+	(inv-lst list-invisible)
+	(found nil))
+    (while (and inv-lst
+		(not found))
+      (let ((inv-beg (caar inv-lst))
+	    (inv-end (cadar inv-lst)))
+	(if (and (>= beg inv-beg)
+		 (<= end inv-end)
+		 (not (extent-property extent 'invisible)))
+	    (setq found t))
+	(setq inv-lst (cdr inv-lst))))
+    (if (not found) 
+	(nconc list
+	       (list (list beg 'push extent)
+		     (list end 'pull extent)))))
+      nil)
+
+
+(provide 'ps-print-invisible)
+
+
+;;; ps-print-invisible.el ends here