From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thorsten Jolitz Subject: Re: using a simple numerical variable in an org text ocument Date: Fri, 26 Jul 2013 01:39:56 +0200 Message-ID: <87mwpacipf.fsf@gmail.com> References: Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:53798) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V2V8l-00080X-GD for emacs-orgmode@gnu.org; Thu, 25 Jul 2013 19:40:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V2V8k-0002ix-EH for emacs-orgmode@gnu.org; Thu, 25 Jul 2013 19:40:11 -0400 Received: from plane.gmane.org ([80.91.229.3]:33894) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V2V8k-0002ip-7W for emacs-orgmode@gnu.org; Thu, 25 Jul 2013 19:40:10 -0400 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1V2V8i-0005kB-Jf for emacs-orgmode@gnu.org; Fri, 26 Jul 2013 01:40:08 +0200 Received: from g231225006.adsl.alicedsl.de ([92.231.225.6]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Fri, 26 Jul 2013 01:40:08 +0200 Received: from tjolitz by g231225006.adsl.alicedsl.de with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Fri, 26 Jul 2013 01:40:08 +0200 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: emacs-orgmode@gnu.org 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). #+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. -- cheers, Thorsten