From 67a55acb39a863e5522220a72b467d70fd8bb80f 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 ccd173526..460d24953 100644 --- a/lisp/org-table.el +++ b/lisp/org-table.el @@ -3190,10 +3190,11 @@ with the prefix 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 dda85611c..01adf52c0 100644 --- a/testing/lisp/test-org-table.el +++ b/testing/lisp/test-org-table.el @@ -929,6 +929,31 @@ reference (with row). Format specifier N." (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 -- 2.11.4.GIT