From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jonathan Leech-Pepin Subject: Re: using a simple numerical variable in an org text ocument Date: Thu, 25 Jul 2013 21:16:26 -0400 Message-ID: <87wqoeglxx.fsf@leechpepin.com> References: <87mwpacipf.fsf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:42635) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V2Wdz-0005py-70 for emacs-orgmode@gnu.org; Thu, 25 Jul 2013 21:16:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V2Wdx-00041r-KX for emacs-orgmode@gnu.org; Thu, 25 Jul 2013 21:16:31 -0400 Received: from mail-gg0-x22f.google.com ([2607:f8b0:4002:c02::22f]:47131) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V2Wdx-00041c-Fh for emacs-orgmode@gnu.org; Thu, 25 Jul 2013 21:16:29 -0400 Received: by mail-gg0-f175.google.com with SMTP id q1so625619ggm.34 for ; Thu, 25 Jul 2013 18:16:28 -0700 (PDT) In-reply-to: <87mwpacipf.fsf@gmail.com> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Thorsten Jolitz Cc: emacs-orgmode@gnu.org Hi, Thorsten Jolitz writes: > Matt Price writes: > >> Hi, >> >> I'm making a very simple org-document -- a packing list for a trip. >> It has entries like >> >> - 4 mugs >> - for sleeping bags >> - 4 thermarest pads >> >> >> I'd like to replace the numbers there by a variable -- so if I make a >> list for 4 people, the number displayed will be '4'; but if the list >> is for 2 people, the number displayed will be 2. Better would be if I >> could also do simple arithmetic manipulations (x * 6 dinners for a >> week...). I there a really simple way to do this? if it's not really >> easy, it won't really seem worth it, but if it is really easy, I will >> use it a lot... > > Or, if you insist on checkboxes (private conversation), you might put this > function in your .emacs and run it to replace all numbers (that are either > factors or totals) with num * people (when people >= 0) or with num / people > (when people > 0). > If you want to use checkboxes, couldn't you use a babel code block and then =call= it on each entry? #+begin_src org ,#+MACRO: count call_Sample(x=$1)[:results raw] ,* Test :PROPERTIES: :var: people=5 :END: - [ ] call_Sample(x=2)[:results raw] socks - [ ] call_Sample(x=1)[:results raw] toothbrushes - [ ] {{{count(3)}}} shoes ,#+name: Sample ,#+header: :var x=1 :results raw ,#+begin_src emacs-lisp (* x people) ,#+end_src ,#+RESULTS: Sample 5 #+end_src You can then wrap it in a macro to avoid having to write out quite as much per line (as the last entry demonstrates. Then just adjust the value of the =:var:= property to match how many people, and your export will provide the correct values > #+begin_src emacs-lisp > (defun tj/calc-total-items (people) > "Replace factor cookies with factor * people totals." > (interactive "NPeople: ") > (save-excursion > (save-restriction > (save-match-data > (goto-char (point-min)) > (widen) > (while (not (eobp)) > (and (org-at-item-checkbox-p) > (looking-at > (concat > "\\(^[[:space:]]*-[[:space:]]" > "\\[[-X\s]\\][[:space:]]\\)" > "\\([[:digit:]]+\\)\\([[:space:]]+\\)")) > (let* ((num > (string-to-number > (match-string-no-properties 2))) > (total > (if (>= people 0) > (* num people) > (/ num (abs people))))) > (replace-match > (format "%s" total) nil nil nil 2))) > (forward-line)))))) > #+end_src > > #+results: > : tj/calc-total-items > > > Use either as > > ,---------------------------------- > | M-x tj/calc-total-items RET 7 RET > `---------------------------------- > > or > > ,---------------------------------- > | C-7 M-x tj/calc-total-items RET > `---------------------------------- > > in your org-buffer. > > When there are e.g. 7 people, this checkbox list > > - [ ] 1 toothbrushes > - [ ] 4 socks > > turns into > > - [ ] 7 toothbrushes > - [ ] 28 socks > > after applying the above command in this buffer, and the change is > reversed when applying > > ,---------------------------------- > | M-x tj/calc-total-items RET -7 RET > `---------------------------------- > > or > > ,---------------------------------- > | C--7 M-x tj/calc-total-items RET > `---------------------------------- > > afterwards. Note that you must stick to the format > > ,-------------------------- > | - [ ] <> text .... > `-------------------------- > > for this to work. Regards, -- Jonathan