From mboxrd@z Thu Jan 1 00:00:00 1970 From: Carsten Dominik Subject: Re: Re: Updating CONSTANTS in LaTeX mode Date: Sun, 12 Dec 2010 13:26:10 +0100 Message-ID: References: <7A1269C4-244F-4C24-815F-EB9EEB8B0C30@gmail.com> Mime-Version: 1.0 (Apple Message framework v936) Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Return-path: Received: from [140.186.70.92] (port=36971 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PRl0N-0008Fe-8F for emacs-orgmode@gnu.org; Sun, 12 Dec 2010 07:26:20 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PRl0M-0006bt-1Y for emacs-orgmode@gnu.org; Sun, 12 Dec 2010 07:26:19 -0500 Received: from mail-ey0-f177.google.com ([209.85.215.177]:50345) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PRl0L-0006bl-SF for emacs-orgmode@gnu.org; Sun, 12 Dec 2010 07:26:18 -0500 Received: by eyd9 with SMTP id 9so4499414eyd.36 for ; Sun, 12 Dec 2010 04:26:13 -0800 (PST) In-Reply-To: List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Seweryn Cc: emacs-orgmode@gnu.org Hi Seweryn, nice patch, thanks, I have included it with very minor modifications (mainly anchoring the match to the left margin with spaces). Thanks! - Carsten On Dec 11, 2010, at 11:06 PM, Seweryn wrote: > Carsten Dominik gmail.com> writes: > >> >> >> On Dec 11, 2010, at 6:03 PM, Carsten Dominik wrote: >> >>> >>> On Dec 11, 2010, at 4:05 PM, Seweryn wrote: >>> >>>> Hello, >>>> >>>> Is it possible to have locally defined CONSTANTS in .tex buffer? >>>> What is the >>>> command to update the list of known CONSTANTS since $pi works but I >>>> cannot >>>> insert $x to the list of CONSTANTS. See example below >>>> >>>> \begin{comment} >>>> #+CONSTANTS: x=458.0 >>>> #+ORGTBL: SEND test1 orgtbl-to-latex :splice t :lend "" >>>> | 3.1415927 | #ERROR | >>>> #+TBLFM: @1$1=$pi::@1$2=$x >>>> % $ >>>> \end{comment} >>>> >>>> I would appreciate a hint. >>> >>> This works for me. Put you must do `C-c C-c' in the CONSTANTS line >>> to make changes known to Org-mode. Or kill the buffer and revisit >>> the file, >>> that will also make CONSTANTS known. >>> >> >> I am sorry, I did not read this carefully. No, this is currently >> not possible in tex and other non-org-mode files. >> > > For sure, there is a better way to implement it, but for now I > modified orgtbl- > ctrl-c-ctrl-c function to update org-table-formula-constants-local. > This > variable is updated when hitting C-c C-c when being on #+TBLFM line. > > (defun orgtbl-ctrl-c-ctrl-c (arg) > "If the cursor is inside a table, realign the table. > If it is a table to be sent away to a receiver, do it. > With prefix arg, also recompute table." > (interactive "P") > (let ((pos (point)) action consts-str consts cst) > (save-excursion > (beginning-of-line 1) > (setq action (cond ((looking-at "[ \t]*#\\+ORGTBL:.*\n[ \t]*|") > (match- > end 0)) > ((looking-at "[ \t]*|") pos) > ((looking-at "[ \t]*#\\+TBLFM:") 'recalc)))) > (cond > ((integerp action) > (goto-char action) > (org-table-maybe-eval-formula) > (if arg > (call-interactively 'org-table-recalculate) > (org-table-maybe-recalculate-line)) > (call-interactively 'org-table-align) > (when (orgtbl-send-table 'maybe) > (run-hooks 'orgtbl-after-send-table-hook))) > ((eq action 'recalc) > (save-excursion > (goto-char (point-min)) > (while (re-search-forward "#\\+CONSTANTS: \\(.*\\)" nil t) > (setq const-str (substring-no-properties (match-string 1))) > (setq consts (append consts (org-split-string const-str "[ \t]+"))) > (when consts > (let (e) > (while (setq e (pop consts)) > (if (string-match "^\\([a-zA-Z0][_a-zA-Z0-9]*\\)=\\(.*\\)" e) > (push (cons (match-string 1 e) (match-string 2 e)) cst))) > (setq org-table-formula-constants-local cst))))) > (save-excursion > (beginning-of-line 1) > (skip-chars-backward " \r\n\t") > (if (org-at-table-p) > (org-call-with-arg 'org-table-recalculate t)))) > (t (let (orgtbl-mode) > (call-interactively (key-binding "\C-c\C-c"))))))) > > Cheers, > Seweryn > > > > > _______________________________________________ > Emacs-orgmode mailing list > Please use `Reply All' to send replies to the list. > Emacs-orgmode@gnu.org > http://lists.gnu.org/mailman/listinfo/emacs-orgmode