emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/org 89c68683f9: org-babel-import-elisp-from-file: Fix d


From: ELPA Syncer
Subject: [elpa] externals/org 89c68683f9: org-babel-import-elisp-from-file: Fix detecting delimiter in single-line data
Date: Mon, 29 Apr 2024 09:58:40 -0400 (EDT)

branch: externals/org
commit 89c68683f9dae12c65680b0451d9bc74abac178a
Author: Ihor Radchenko <yantar92@posteo.net>
Commit: Ihor Radchenko <yantar92@posteo.net>

    org-babel-import-elisp-from-file: Fix detecting delimiter in single-line 
data
    
    * lisp/org-table.el (org-table-convert-region): When detecting
    delimiter in, do not unconditionally fall back to CSV parser.  Only do
    it when the line contains commas and use a simple single tab/space
    split otherwise.  Add new special delimeter-detection strategy when
    SEPARATOR is 'babel-auto - convert to | full line | table instead of
    falling back to tab/space split when the region contains a single
    line.
    * lisp/ob-core.el (org-babel-import-elisp-from-file): Force special
    strategy when converting data to lisp.
    
    The commit fixes the problem with first `re-search-forward' in the
    `cond' moving point to end of the region, making the third `cond'
    branch never match.
    
    A special strategy specific to babel is necessary to preserve the
    historic behavior with lines like
    : single line with spaces
    being converted to a single table cell
    : | single line with space |
    
    Reported-by: Matt <matt@excalamus.com>
    Link: 
https://orgmode.org/list/18f24d87b62.d55e94e24743657.3252620114689708448@excalamus.com
---
 lisp/ob-core.el   |  4 +++-
 lisp/org-table.el | 14 ++++++++++----
 2 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/lisp/ob-core.el b/lisp/ob-core.el
index 8dfc07a4e2..73fb70c26a 100644
--- a/lisp/ob-core.el
+++ b/lisp/ob-core.el
@@ -3389,7 +3389,9 @@ SEPARATOR is passed to `org-table-convert-region', which 
see."
                   ;; If the file was empty, don't bother trying to
                   ;; convert the table.
                   (when (> pmax 1)
-                    (org-table-convert-region (point-min) pmax separator)
+                    (org-table-convert-region
+                      (point-min) pmax
+                      (or separator 'babel-auto))
                     (delq nil
                           (mapcar (lambda (row)
                                     (and (not (eq row 'hline))
diff --git a/lisp/org-table.el b/lisp/org-table.el
index b5387e418e..0c2dc27ed6 100644
--- a/lisp/org-table.el
+++ b/lisp/org-table.el
@@ -892,7 +892,10 @@ nil      When nil, the command tries to be smart and 
figure out the
          separator in the following way:
          - when each line contains a TAB, assume TAB-separated material
          - when each line contains a comma, assume CSV material
-         - else, assume one or more SPACE characters as separator."
+         - else, assume one or more SPACE characters as separator.
+`babel-auto'
+       Use the same rules as nil, but do not try any separator when
+       the region contains a single line and has no commas or tabs."
   (interactive "r\nP")
   (let* ((beg (min beg0 end0))
         (end (max beg0 end0))
@@ -909,12 +912,15 @@ nil      When nil, the command tries to be smart and 
figure out the
     (if (bolp) (backward-char 1) (end-of-line 1))
     (setq end (point-marker))
     ;; Get the right field separator
-    (unless separator
+    (when (or (not separator) (eq separator 'babel-auto))
       (goto-char beg)
       (setq separator
            (cond
-            ((not (re-search-forward "^[^\n\t]+$" end t)) '(16))
-            ((not (re-search-forward "^[^\n,]+$" end t)) '(4))
+            ((not (save-excursion (re-search-forward "^[^\n\t]+$" end t))) 
'(16))
+            ((not (save-excursion (re-search-forward "^[^\n,]+$" end t))) '(4))
+             ((and (eq separator 'babel-auto)
+                   (= 1 (count-lines beg end)))
+              (rx unmatchable))
             (t 1))))
     (goto-char beg)
     (if (equal separator '(4))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]