summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Dominik <carsten.dominik@gmail.com>2010-05-12 15:04:20 +0200
committerCarsten Dominik <carsten.dominik@gmail.com>2010-05-12 15:06:27 +0200
commit336456d0c3684e26374c778748a8d7f44e08f1bc (patch)
treec919c7ebeb5e3685386c7d84ef615fb8b4c117e3
parent33fba09ddbcdb3e03a45576eb007bcd29536b502 (diff)
downloadorg-mode-336456d0c3684e26374c778748a8d7f44e08f1bc.tar.gz
Make sure remote references will not switch the selected buffer
Karl Eichwalder writes: > Consider the following two files: > > * 2009 > #+TBLNAME: 2009 > :PROPERTIES: > :ID: ea32e5b5-31ba-468e-8e31-3e0d09696bb0 > :END: > |-----+-------| > | mm | km | > |-----+-------| > | all | 946.8 | > |-----+-------| > > * 2010 > #+TBLNAME: 2010 > :PROPERTIES: > :ID: e0df84c4-8abc-458f-a1ee-eb53eb71b4f0 > :END: > |-----+-------+-------+-------| > | mm | km | B km | G km | > |-----+-------+-------+-------| > | all | 249.4 | 429.2 | 678.6 | > |-----+-------+-------+-------| > > * all > :PROPERTIES: > :ID: 44751a7f-73a4-4c07-b3c2-e3edb9042acd > :END: > #+TBLNAME: all > |------+--------| > | yyyy | km | > |------+--------| > | 2009 | | > | 2010 | 678.6 | > |------+--------| > | all | 1625.4 | > |------+--------| > #+TBLFM: @2$2=remote(ea32e5b5-31ba-468e-8e31-3e0d09696bb0,$LR2);%.1f::@3$2=remote(2010,$LR4);%.1f::$LR2=vsum(@2$2..@-1);%.1f > > Then, in the 2010 file, eval the formula of the "all" table by pressing > C-c C-c. > ==> > > It takes the km value from the 2009 file, but also puts the cursor > (point) into the 2009 file in front of the ID: > > * 2009 > #+TBLNAME: 2009 > :PROPERTIES: > :ID: -!-ea32e5b5-31ba-468e-8e31-3e0d09696bb0 > :END: > |-----+-------| > | mm | km | > |-----+-------| > | all | 946.8 | > |-----+-------| > > -=-=-=-=-=-=-=-=-=-=-=-=-=- cut here -=-=-=-=-=-=-=-=-=-=-=-=-=- > > I'd prefer if the point would stay in the 2010 file.
-rw-r--r--lisp/ChangeLog3
-rw-r--r--lisp/org-table.el34
2 files changed, 20 insertions, 17 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 26b4c84..548a43a 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,8 @@
2010-05-12 Carsten Dominik <carsten.dominik@gmail.com>
+ * org-table.el (org-table-get-remote-range): Return to
+ original buffer when retrieving remote reference.
+
* org.el (org-display-inline-images): Do the entire buffer,
not just the narrowed region. Clear the cache.
(org-display-inline-images): Match mode file paths.
diff --git a/lisp/org-table.el b/lisp/org-table.el
index 9f276c4..89c6538 100644
--- a/lisp/org-table.el
+++ b/lisp/org-table.el
@@ -4343,23 +4343,23 @@ list of the fields in the rectangle ."
(setq buffer (marker-buffer id-loc)
loc (marker-position id-loc))
(move-marker id-loc nil)))
- (switch-to-buffer buffer)
- (save-excursion
- (save-restriction
- (widen)
- (goto-char loc)
- (forward-char 1)
- (unless (and (re-search-forward "^\\(\\*+ \\)\\|[ \t]*|" nil t)
- (not (match-beginning 1)))
- (error "Cannot find a table at NAME or ID %s" name-or-id))
- (setq tbeg (point-at-bol))
- (org-table-get-specials)
- (setq form (org-table-formula-substitute-names form))
- (if (and (string-match org-table-range-regexp form)
- (> (length (match-string 0 form)) 1))
- (save-match-data
- (org-table-get-range (match-string 0 form) tbeg 1))
- form))))))))
+ (with-current-buffer buffer
+ (save-excursion
+ (save-restriction
+ (widen)
+ (goto-char loc)
+ (forward-char 1)
+ (unless (and (re-search-forward "^\\(\\*+ \\)\\|[ \t]*|" nil t)
+ (not (match-beginning 1)))
+ (error "Cannot find a table at NAME or ID %s" name-or-id))
+ (setq tbeg (point-at-bol))
+ (org-table-get-specials)
+ (setq form (org-table-formula-substitute-names form))
+ (if (and (string-match org-table-range-regexp form)
+ (> (length (match-string 0 form)) 1))
+ (save-match-data
+ (org-table-get-range (match-string 0 form) tbeg 1))
+ form)))))))))
(provide 'org-table)