emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Jonathan Leech-Pepin <jonathan.leechpepin@gmail.com>
To: Thorsten Jolitz <tjolitz@gmail.com>
Cc: emacs-orgmode@gnu.org
Subject: Re: using a simple numerical variable in an org text ocument
Date: Thu, 25 Jul 2013 21:16:26 -0400	[thread overview]
Message-ID: <87wqoeglxx.fsf@leechpepin.com> (raw)
In-Reply-To: <87mwpacipf.fsf@gmail.com>

Hi,

Thorsten Jolitz writes:

> Matt Price <moptop99@gmail.com> 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 
>
> ,--------------------------
> | - [ ] <<digit>> text ....
> `--------------------------
>
> for this to work.

Regards,

--
Jonathan

  reply	other threads:[~2013-07-26  1:16 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-25 21:36 using a simple numerical variable in an org text ocument Matt Price
2013-07-25 21:55 ` Thorsten Jolitz
2013-07-25 23:39 ` Thorsten Jolitz
2013-07-26  1:16   ` Jonathan Leech-Pepin [this message]
2013-07-26  7:43 ` Sebastien Vauban
2013-07-27 18:19   ` Dieter Wilhelm
2013-08-14  5:54     ` Sebastien Vauban

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=87wqoeglxx.fsf@leechpepin.com \
    --to=jonathan.leechpepin@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    --cc=tjolitz@gmail.com \
    /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).