Browse Source

unified stripping of protective commas -- idempotent org-edit-src-code

* lisp/ob.el (org-babel-strip-protective-commas): Use
  `org-strip-protective-commas'.
* lisp/org-exp.el (org-export-select-backend-specific-text): Use
  `org-strip-protective-commas'.
* lisp/org-src.el (org-edit-src-code): Use
  `org-strip-protective-commas'.
* lisp/org.el (org-strip-protective-commas): Single definition for
  this functionality.
Eric Schulte 6 years ago
parent
commit
19f1bf6bce
4 changed files with 28 additions and 18 deletions
  1. 4 2
      lisp/ob.el
  2. 1 11
      lisp/org-exp.el
  3. 7 5
      lisp/org-src.el
  4. 16 0
      lisp/org.el

+ 4 - 2
lisp/ob.el

@@ -2236,8 +2236,10 @@ block but are passed literally to the \"example-block\"."
 
 (defun org-babel-strip-protective-commas (body)
   "Strip protective commas from bodies of source blocks."
-  (when body
-    (replace-regexp-in-string "^,#" "#" body)))
+  (with-temp-buffer
+    (insert body)
+    (org-strip-protective-commas (point-min) (point-max))
+    (buffer-string)))
 
 (defun org-babel-script-escape (str &optional force)
   "Safely convert tables into elisp lists."

+ 1 - 11
lisp/org-exp.el

@@ -1761,17 +1761,7 @@ from the buffer."
 		 beg-content end-content
 		 `(org-protected t original-indentation ,ind org-native-text t))
 		;; strip protective commas
-		(save-excursion
-		  (save-match-data
-		    (goto-char beg-content)
-		    (let ((front-line (save-excursion
-					(re-search-forward
-					 "[^[:space:]]" end-content t)
-					(goto-char (match-beginning 0))
-					(current-column))))
-		      (while (re-search-forward "^[ \t]*\\(,\\)" end-content t)
-			(when (= (current-column) front-line)
-			  (replace-match "" nil nil nil 1))))))
+		(org-strip-protective-commas beg-content end-content)
 		(delete-region (match-beginning 0) (match-end 0))
 		(save-excursion
 		  (goto-char beg)

+ 7 - 5
lisp/org-src.el

@@ -307,11 +307,13 @@ buffer."
 	     (error "Language mode `%s' fails with: %S" lang-f (nth 1 e)))))
 	(dolist (pair transmitted-variables)
 	  (org-set-local (car pair) (cadr pair)))
-	(when (eq major-mode 'org-mode)
-	  (goto-char (point-min))
-	  (while (re-search-forward "^," nil t)
-	    (if (eq (org-current-line) line) (setq total-nindent (1+ total-nindent)))
-	    (replace-match "")))
+	(if (eq major-mode 'org-mode)
+	    (progn
+	      (goto-char (point-min))
+	      (while (re-search-forward "^," nil t)
+		(if (eq (org-current-line) line) (setq total-nindent (1+ total-nindent)))
+		(replace-match "")))
+	  (org-strip-protective-commas (point-min) (point-max)))
 	(when markline
 	  (org-goto-line (1+ (- markline begline)))
 	  (org-move-to-column

+ 16 - 0
lisp/org.el

@@ -5460,6 +5460,22 @@ will be prompted for."
 	     '(font-lock-fontified t face font-lock-comment-face)))
 	   (t nil))))))
 
+(defun org-strip-protective-commas (beg end)
+  "Strip protective commas between BEG and END in the current buffer."
+  (interactive "r")
+  (save-excursion
+    (save-match-data
+      (goto-char beg)
+      (let ((front-line (save-excursion
+			  (re-search-forward
+			   "[^[:space:]]" end t)
+			  (goto-char (match-beginning 0))
+			  (current-column))))
+	(while (re-search-forward "^[ \t]*\\(,\\)\\([*]\\|#\\+\\)" end t)
+	  (goto-char (match-beginning 1))
+	  (when (= (current-column) front-line)
+	    (replace-match "" nil nil nil 1)))))))
+
 (defun org-activate-angle-links (limit)
   "Run through the buffer and add overlays to links."
   (if (re-search-forward org-angle-link-re limit t)