From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ippei FURUHASHI Subject: Re: [PATCH] Was: How to apply multiple TBLFM rules? Date: Sat, 06 Apr 2013 22:07:10 +0900 Message-ID: <801uanbyf5.fsf@gmail.com> References: <1336428054.18057.YahooMailNeo@web161903.mail.bf1.yahoo.com> <4FA8705A.4060907@verizon.net> <87d36fytvf.fsf@gnu.org> <1336508514.23203.YahooMailNeo@web161906.mail.bf1.yahoo.com> <80wqslys48.fsf_-_@gmail.com> <878v4y1lyw.fsf@bzg.ath.cx> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([208.118.235.92]:35710) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UOSq5-0005NA-Qj for emacs-orgmode@gnu.org; Sat, 06 Apr 2013 09:07:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UOSq0-0005eP-U5 for emacs-orgmode@gnu.org; Sat, 06 Apr 2013 09:07:25 -0400 Received: from mail-pb0-f41.google.com ([209.85.160.41]:36468) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UOSq0-0005dJ-Np for emacs-orgmode@gnu.org; Sat, 06 Apr 2013 09:07:20 -0400 Received: by mail-pb0-f41.google.com with SMTP id mc17so2471381pbc.28 for ; Sat, 06 Apr 2013 06:07:19 -0700 (PDT) In-Reply-To: <878v4y1lyw.fsf@bzg.ath.cx> (Bastien's message of "Thu, 04 Apr 2013 15:09:27 +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: Bastien Cc: "emacs-orgmode@gnu.org" --=-=-= Hi Bastien, Thanks for looking at these patch. I found a bug introduced at http://orgmode.org/cgit.cgi/org-mode.git/commit/?id=bd8ff1aade6c46f701f466035ef75ab8ee82c8fe which I made. Could you apply this (attached) patch for them please? Thanks in advance, IP --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-org-table.el-Fix-a-bug-of-leaving-the-inserted-TBLFM.patch >From 24a18f1ffdc38dfd297960d9b06a12f35a256e82 Mon Sep 17 00:00:00 2001 From: Ippei FURUHASHI Date: Fri, 5 Apr 2013 16:07:00 +0900 Subject: [PATCH] org-table.el: Fix a bug of leaving the inserted TBLFM line * org-table.el (org-calc-current-TBLFM): Ensure to remove the currently inserted TBLFM line, when calling `org-table-recalculate' returns an error and the processing stops. * testing/lisp/test-org-table.el: Add test. When you hit =C-c C-c= at the line of "#+TBLFM: $2=$1*2::$2=$1**2" in | 1 | | | 2 | | #+TBLFM: $2=$1*1 #+TBLFM: $2=$1*2::$2=$1**2 you got: | 1 | | | 2 | | #+TBLFM: $2=$1*2::$2=$1**2 #+TBLFM: $2=$1*1 #+TBLFM: $2=$1*2::$2=$1**2 with the error message of: user-error: Double definition `$2=' in TBLFM line, please fix by hand In this case, you expected: | 1 | | | 2 | | #+TBLFM: $2=$1*1 #+TBLFM: $2=$1*2::$2=$1**2 --- lisp/org-table.el | 7 ++++--- testing/lisp/test-org-table.el | 25 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/lisp/org-table.el b/lisp/org-table.el index ccd1735..460d249 100644 --- a/lisp/org-table.el +++ b/lisp/org-table.el @@ -3190,10 +3190,11 @@ (defun org-calc-current-TBLFM (&optional arg) (beginning-of-line 0) ; move to the inserted line (skip-chars-backward " \r\n\t") (if (org-at-table-p) - (org-call-with-arg 'org-table-recalculate (or arg t))) + (unwind-protect + (org-call-with-arg 'org-table-recalculate (or arg t)) - ;; Delete the formula inserted temporarily - (delete-region s e)))) + ;; delete the formula inserted temporarily + (delete-region s e)))))) (defun org-TBLFM-begin () "Find the beginning of the TBLFM lines and return its position. diff --git a/testing/lisp/test-org-table.el b/testing/lisp/test-org-table.el index dda8561..01adf52 100644 --- a/testing/lisp/test-org-table.el +++ b/testing/lisp/test-org-table.el @@ -929,6 +929,31 @@ (defconst references/target-special " (should (string= got expect))))) +(ert-deftest test-org-table/org-calc-current-TBLFM-when-stop-because-of-error () + "org-calc-current-TBLFM should preserve the input as it was." + (org-test-with-temp-text-in-file + " +| 1 | 1 | +| 2 | 2 | +#+TBLFM: $2=$1*1 +#+TBLFM: $2=$1*2::$2=$1*2 +#+TBLFM: $2=$1*3 +" + (let ((expect " +| 1 | 1 | +| 2 | 2 | +#+TBLFM: $2=$1*1 +#+TBLFM: $2=$1*2::$2=$1*2 +#+TBLFM: $2=$1*3 +")) + (goto-char (point-min)) + (forward-line 4) + (should-error (org-calc-current-TBLFM)) + (setq got (buffer-string)) + (message "%s" got) + (should (string= got + expect))))) + (provide 'test-org-table) ;;; test-org-table.el ends here -- 1.7.9.msysgit.0 --=-=-= Bastien writes: >> This patch enables user to applies a temporal TBLFM line where you are in. >> It is useful when you switch a formula to another. >> I hope you liked this. > > I do! I've applied the patches (with some minor changes) on my local > branch, it will be available when I push it later today. --=-=-=--