[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [O] using a simple numerical variable in an org text ocument
From: |
Thorsten Jolitz |
Subject: |
Re: [O] using a simple numerical variable in an org text ocument |
Date: |
Fri, 26 Jul 2013 01:39:56 +0200 |
User-agent: |
Gnus/5.130002 (Ma Gnus v0.2) Emacs/24.3 (gnu/linux) |
Matt Price <address@hidden> 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