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