emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Thorsten Jolitz <tjolitz@gmail.com>
To: emacs-orgmode@gnu.org
Subject: Re: using a simple numerical variable in an org text ocument
Date: Fri, 26 Jul 2013 01:39:56 +0200	[thread overview]
Message-ID: <87mwpacipf.fsf@gmail.com> (raw)
In-Reply-To: CAN_Dec-gkQnop2+AnwM89XsfotJi-WhLshxomBw7QivyWtmSfg@mail.gmail.com

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).

#+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.

-- 
cheers,
Thorsten

  parent reply	other threads:[~2013-07-25 23:40 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 [this message]
2013-07-26  1:16   ` Jonathan Leech-Pepin
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=87mwpacipf.fsf@gmail.com \
    --to=tjolitz@gmail.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 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).