From: Kyle Meyer <kyle@kyleam.com>
To: Org-mode <emacs-orgmode@gnu.org>
Subject: Re: [PATCH] org-clone-subtree-with-time-shift: Accept 0 clones
Date: Mon, 22 Jun 2015 12:50:11 -0400 [thread overview]
Message-ID: <87616fbscc.fsf@kyleam.com> (raw)
In-Reply-To: <87mvzstb3o.fsf@nicolasgoaziou.fr> (Nicolas Goaziou's message of "Mon, 22 Jun 2015 10:12:59 +0200")
[-- Attachment #1: Type: text/plain, Size: 268 bytes --]
Nicolas Goaziou <mail@nicolasgoaziou.fr> wrote:
>> - (if (not (and (integerp n) (> n 0)))
>> + (if (not (and (integerp n) (>= n 0)))
>> (user-error "Invalid number of replications %s" n))
>
> Nitpick: (unless (wholenump n) (user-error ...))
Thanks. Updated.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-org-clone-subtree-with-time-shift-Accept-0-clones.patch --]
[-- Type: text/x-diff, Size: 4390 bytes --]
From fe596d7d9a2687f8f553997e2a75fe40f1424ef3 Mon Sep 17 00:00:00 2001
From: Kyle Meyer <kyle@kyleam.com>
Date: Sun, 21 Jun 2015 21:46:54 -0400
Subject: [PATCH] org-clone-subtree-with-time-shift: Accept 0 clones
* lisp/org.el (org-clone-subtree-with-time-shift): Allow argument
specifying number of clones to be 0.
* testing/lisp/test-org.el (test-org/clone-with-time-shift): Add
tests.
This makes it possible to clone a subtree with a repeating timestamp
so that the repeater is removed from the original subtree and a single
shifted, repeating clone is created. If the original subtree does not
have a repeating timestamp, no clones will be made.
---
etc/ORG-NEWS | 4 ++++
lisp/org.el | 11 ++++++++---
testing/lisp/test-org.el | 38 ++++++++++++++++++++++++++++++++++++++
3 files changed, 50 insertions(+), 3 deletions(-)
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 92be86b..bcbd068 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -392,6 +392,10 @@ of tables and lists of listings can be inserted in the document with
*** Countdown timer support hh:mm:ss format
In addition to setting countdown timers in minutes, they can also be
set using the hh:mm:ss format.
+*** Extend ~org-clone-subtree-with-time-shift~
+~org-clone-subtree-with-time-shift~ now accepts 0 as an argument for
+the number of clones, which removes the repeater from the original
+subtree and creates one shifted, repeating clone.
** Miscellaneous
*** Strip all meta data from ITEM special property
ITEM special property does not contain TODO, priority or tags anymore.
diff --git a/lisp/org.el b/lisp/org.el
index 8eaaa3e..02f5c22 100755
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -8739,7 +8739,12 @@ (defun org-clone-subtree-with-time-shift (n &optional shift)
- the start days in the repeater in the original entry will be shifted
to past the last clone.
In this way you can spell out a number of instances of a repeating task,
-and still retain the repeater to cover future instances of the task."
+and still retain the repeater to cover future instances of the task.
+
+As described above, N+1 clones are produced when the original
+subtree has a repeater. Setting N to 0, then, can be used to
+remove the repeater from a subtree and create a shifted clone
+with the original repeater."
(interactive "nNumber of clones to produce: ")
(let ((shift
(or shift
@@ -8757,8 +8762,8 @@ (defun org-clone-subtree-with-time-shift (n &optional shift)
(org-clock-re (format "^[ \t]*%s.*$" org-clock-string))
beg end template task idprop
shift-n shift-what doshift nmin nmax)
- (if (not (and (integerp n) (> n 0)))
- (user-error "Invalid number of replications %s" n))
+ (unless (wholenump n)
+ (user-error "Invalid number of replications %s" n))
(if (and (setq doshift (and (stringp shift) (string-match "\\S-" shift)))
(not (string-match "\\`[ \t]*\\+?\\([0-9]+\\)\\([hdwmy]\\)[ \t]*\\'"
shift)))
diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el
index 11004f0..55dbd49 100644
--- a/testing/lisp/test-org.el
+++ b/testing/lisp/test-org.el
@@ -1067,6 +1067,44 @@ (ert-deftest test-org/insert-todo-heading-respect-content ()
(org-insert-todo-heading-respect-content)
(and (eobp) (org-at-heading-p)))))
+(ert-deftest test-org/clone-with-time-shift ()
+ "Test `org-clone-subtree-with-time-shift'."
+ ;; Clone non-repeating once.
+ (should
+ (equal "\
+* H1\n<2015-06-21 Sun>
+* H1\n<2015-06-23 Tue>
+"
+ (org-test-with-temp-text "* H1\n<2015-06-21 Sun>"
+ (org-clone-subtree-with-time-shift 1 "+2d")
+ (buffer-string))))
+ ;; Clone repeating once.
+ (should
+ (equal "\
+* H1\n<2015-06-21 Sun>
+* H1\n<2015-06-23 Tue>
+* H1\n<2015-06-25 Thu +1w>
+"
+ (org-test-with-temp-text "* H1\n<2015-06-21 Sun +1w>"
+ (org-clone-subtree-with-time-shift 1 "+2d")
+ (buffer-string))))
+ ;; Clone non-repeating zero times.
+ (should
+ (equal "\
+* H1\n<2015-06-21 Sun>
+"
+ (org-test-with-temp-text "* H1\n<2015-06-21 Sun>"
+ (org-clone-subtree-with-time-shift 0 "+2d")
+ (buffer-string))))
+ ;; Clone repeating "zero" times.
+ (should
+ (equal "\
+* H1\n<2015-06-21 Sun>
+* H1\n<2015-06-23 Tue +1w>
+"
+ (org-test-with-temp-text "* H1\n<2015-06-21 Sun +1w>"
+ (org-clone-subtree-with-time-shift 0 "+2d")
+ (buffer-string)))))
\f
;;; Fixed-Width Areas
--
2.4.4
[-- Attachment #3: Type: text/plain, Size: 9 bytes --]
--
Kyle
next prev parent reply other threads:[~2015-06-22 16:50 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-22 2:02 [PATCH] org-clone-subtree-with-time-shift: Accept 0 clones Kyle Meyer
2015-06-22 8:12 ` Nicolas Goaziou
2015-06-22 16:50 ` Kyle Meyer [this message]
2015-06-22 19:51 ` Nicolas Goaziou
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87616fbscc.fsf@kyleam.com \
--to=kyle@kyleam.com \
--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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.