emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: James TD Smith <ahktenzero@mohorovi.cc>
To: emacs-orgmode@gnu.org
Subject: [misc-new-features 2/5] Bugfixes, documentation and custom options for org-checklist.
Date: Mon, 13 Jul 2009 09:27:59 +0100	[thread overview]
Message-ID: <1247473682-23338-3-git-send-email-ahktenzero@mohorovi.cc> (raw)
In-Reply-To: <1247473682-23338-2-git-send-email-ahktenzero@mohorovi.cc>

* contrib/lisp/org-checklist.el
  - Fix some problems with the print/export feature in org-checklist.
  - Add custom options for this module
  - Fix some interaction with a2ps
  - Only reset checkboxes if TODO state is done.

* doc/org.texi
  - Add documentation for org-checklist

* lisp/org.el
  - Add org-checklist to org-modules
---
 contrib/ChangeLog             |   16 ++++++++++
 contrib/lisp/org-checklist.el |   67 +++++++++++++++++++++++++++++++---------
 lisp/org.el                   |    1 +
 3 files changed, 69 insertions(+), 15 deletions(-)

diff --git a/contrib/ChangeLog b/contrib/ChangeLog
index 7e62df0..6a5c2a2 100644
--- a/contrib/ChangeLog
+++ b/contrib/ChangeLog
@@ -1,3 +1,19 @@
+2009-07-12  James TD Smith  <ahktenzero@mohorovi.cc>
+
+	* lisp/org-checklist.el (org-checklist): Add a custom group for
+	org-checklist. The options are all for the unchecked items export
+	function.
+	(org-checklist-export-time-format): Allow customising the
+	timestamp appended to the saved unchecked items list
+	(org-checklist-export-function): Allow customising the output
+	format for the unchecked items list.
+	(org-checklist-export-params): Options for the exporter.
+	(org-checklist-a2ps-params): Printing options.
+	(org-make-checklist-export): Use values from custom vars. Printing
+	is now controlled by the PRINT_EXPORT property in the entry, and
+	the user is only asked if it is missing. Pass the switches to
+	a2ps-buffer properly.
+
 2009-06-20  Carsten Dominik  <carsten.dominik@gmail.com>
 
 	* README: List new file org-export-generic.el
diff --git a/contrib/lisp/org-checklist.el b/contrib/lisp/org-checklist.el
index 26d228f..4ebf91b 100644
--- a/contrib/lisp/org-checklist.el
+++ b/contrib/lisp/org-checklist.el
@@ -42,11 +42,37 @@
 ;;
 ;;; Code:
 (require 'org)
+(load "a2ps-print")
 
-(defvar export-time-format "%Y%m%d%H%M"
-  "format of timestamp appended to export file")
-(defvar export-function 'org-export-as-ascii
-  "function used to prepare the export file for printing")
+(defgroup org-checklist nil
+  "Extended checklist handling for org"
+  :tag "Org-checklist"
+  :group 'org)
+
+(defcustom org-checklist-export-time-format "%Y%m%d%H%M"
+  "The format of timestamp appended to LIST_EXPORT_BASENAME to
+  make the name of the export file."
+  :link '(function-link format-time-string)
+  :group 'org-checklist
+  :type 'string)
+
+(defcustom org-checklist-export-function 'org-export-as-ascii
+  "function used to prepare the export file for printing"
+  :group 'org-checklist
+  :type '(radio (function-item :tag "ascii text" org-export-as-ascii)
+		(function-item :tag "HTML"  org-export-as-html)
+		(function-item :tag "LaTeX" :value org-export-as-latex)
+		(function-item :tag "XOXO" :value org-export-as-xoxo)))
+
+(defcustom org-checklist-export-params nil
+  "options for the export function file for printing"
+  :group 'org-checklist
+  :type '(repeat string))
+
+(defcustom org-checklist-a2ps-params nil
+  "options for a2ps for printing"
+  :group 'org-checklist
+  :type '(repeat string))
 
 (defun org-reset-checkbox-state-maybe ()
   "Reset all checkboxes in an entry if the `RESET_CHECK_BOXES' property is set"
@@ -54,23 +80,30 @@
   (if (org-entry-get (point) "RESET_CHECK_BOXES")
       (org-reset-checkbox-state-subtree)))
 
+
 (defun org-make-checklist-export ()
   "Produce a checklist containing all unchecked items from a list
 of checkbox items"
   (interactive "*")
   (if (org-entry-get (point) "LIST_EXPORT_BASENAME")
-      (let* ((export-file (concat (org-entry-get (point) "LIST_EXPORT_BASENAME")
-				  "-" (format-time-string export-time-format)
+      (let* ((export-file (concat (org-entry-get (point) "LIST_EXPORT_BASENAME" nil)
+				  "-" (format-time-string
+				       org-checklist-export-time-format)
 				  ".org"))
+	     (print (case (org-entry-get (point) "PRINT_EXPORT" nil)
+		      (("" "nil" nil) nil)
+		      (t t)
+		      (nil (y-or-n-p "Print list? "))))
 	     exported-lines
-	     title)
+	     title "Checklist export")
 	(save-restriction
 	  (save-excursion
 	    (org-narrow-to-subtree)
+	    (org-update-checkbox-count-maybe)
 	    (org-show-subtree)
 	    (goto-char (point-min))
-	    (if (looking-at org-complex-heading-regexp)
-		(setq title (match-string 4)))
+	    (when (looking-at org-complex-heading-regexp)
+	      (setq title (match-string 4)))
 	    (goto-char (point-min))
 	    (let ((end (point-max)))
 	      (while (< (point) end)
@@ -85,14 +118,18 @@ of checkbox items"
 	    (dolist (entry exported-lines) (insert entry))
 	    (org-update-checkbox-count-maybe)
 	    (write-file export-file)
-	    (if (y-or-n-p "Print list? ")
-		((funcall export-function)
-		 (a2ps-buffer))))))))
+	    (if (print)
+		(progn (funcall org-checklist-export-function
+				org-checklist-export-params)
+		       (let* ((current-a2ps-switches a2ps-switches)
+			      (a2ps-switches (append current-a2ps-switches
+						     org-checklist-a2ps-params)))
+			 (a2ps-buffer)))))))))
 
 (defun org-checklist ()
-  (if (member state org-done-keywords)
-      (org-make-checklist-export))
-  (org-reset-checkbox-state-maybe))
+  (when (member state org-done-keywords)
+    (org-make-checklist-export)
+    (org-reset-checkbox-state-maybe)))
 
 (add-hook 'org-after-todo-state-change-hook 'org-checklist)
 
diff --git a/lisp/org.el b/lisp/org.el
index 8843486..d08155a 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -184,6 +184,7 @@ to add the symbol `xyz', and the package must have a call to
 	(const :tag "C  annotation-helper: Call Remember directly from Browser (OBSOLETE, use org-protocol)" org-annotation-helper)
 	(const :tag "C  bookmark:          Org links to bookmarks" org-bookmark)
 	(const :tag "C  browser-url:       Store link, directly from Browser (OBSOLETE, use org-protocol)" org-browser-url)
+	(const :tag "C  checklist:         Extra functions for checklists in repeated tasks" org-checklist)
 	(const :tag "C  choose:            Use TODO keywords to mark decisions states" org-choose)
 	(const :tag "C  collector:         Collect properties into tables" org-collector)
 	(const :tag "C  depend:            TODO dependencies for Org-mode (PARTIALLY OBSOLETE, see built-in dependency support))" org-depend)
-- 
1.6.3.3

  reply	other threads:[~2009-07-13  9:12 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-13  8:27 Working on org again James TD Smith
2009-07-13  8:27 ` [misc-new-features 1/5] Add two new special properties, SINCE and SINCE_IA James TD Smith
2009-07-13  8:27   ` James TD Smith [this message]
2009-07-13  8:28     ` [misc-new-features 3/5] Add an option to sort tags automatically James TD Smith
2009-07-13  8:28       ` [misc-new-features 4/5] Allow org-insert-link to check the X clipboard and the Emacs kill-ring for links, as well as the stored links. This makes getting URLs into org from a browser much easier, as you don't have to paste the URL into the minibuffer to insert a link James TD Smith
2009-07-13  8:28         ` [misc-new-features 5/5] Fix a problem I was having with plots using a script. Org-plot was deleting the data file before gnuplot read it in. I've moved the deletion of the temporary data file to an idle timer, which has fixed the problem James TD Smith
2009-07-13 11:56           ` Bernt Hansen
2009-07-14 11:57           ` Bastien
2009-07-17 17:03           ` Bastien
2009-07-13 11:55         ` [misc-new-features 4/5] Allow org-insert-link to check the X clipboard and the Emacs kill-ring for links, as well as the stored links. This makes getting URLs into org from a browser much easier, as you don't have to paste the URL into the minibuffer to insert a link Bernt Hansen
2009-07-13 12:13           ` [misc-new-features 4/5] extra long subject lines James TD Smith
2009-07-13 15:35             ` Bernt Hansen
2009-07-14 12:07         ` [misc-new-features 4/5] Allow org-insert-link to check the X clipboard and the Emacs kill-ring for links, as well as the stored links. This makes getting URLs into org from a browser much easier, as you don't have to paste the URL into the minibuffer to insert a link Bastien
2009-07-17 17:20         ` Bastien
2009-07-14 11:59       ` [misc-new-features 3/5] Add an option to sort tags automatically Bastien
2009-07-14 16:01         ` James TD Smith
2009-07-17 17:04           ` Bastien
2009-07-17 16:38       ` Bastien
2009-07-14 12:09     ` [misc-new-features 2/5] Bugfixes, documentation and custom options for org-checklist Bastien
2009-07-14  8:52       ` James TD Smith
2009-08-03 14:47     ` Carsten Dominik
2009-08-03 21:17       ` James TD Smith
2009-07-14 11:48   ` [misc-new-features 1/5] Add two new special properties, SINCE and SINCE_IA Bastien
2009-07-14 17:44     ` James TD Smith
2009-07-17 16:55   ` Bastien
2009-07-17 18:22     ` James TD Smith
2009-07-18  9:35       ` Bastien
2009-08-27 15:50         ` Manish
2009-08-28 17:59           ` James TD Smith

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1247473682-23338-3-git-send-email-ahktenzero@mohorovi.cc \
    --to=ahktenzero@mohorovi.cc \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).