Hi,

Thanks for the comments!

Nicolas Goaziou <m...@nicolasgoaziou.fr> writes:

> I don't see how it is desirable. The logical behaviour is to split the
> line, unless, of course, docstring clearly specifies this.

I don't feel strongly about it.  Anyway, I like this better.  Cdlatex is,
um, "opinionated" about is insertion of newlines.

>> +  ;; TODO: Cleanup if quit.  Unfortunately `cdlatex-environment'
>> +  ;; always return nil.
>
> What do you want to clean up? In what situations? Can't `unwind-protect'
> help you?

cdlatex-environment always return nil.  I would have to analyze if
something got inserted "manually".  IOW, I don't have the name of the
environment, and cdlatex-environment returns nil if I press C-g and if I
select and environment.  I don't know how to distinguish the cases.

> Anyway, why bother?

Newlines is very hard to get right with cdlatex.  Unintended newlines is a
bug.

The attached patch works "as expected" at all locations marked with "|",
but not the one marked with "/" and "\", which lead to the next question.
| - i1 | i2 |
/ - i3 |
\

I expect indentation at all points not at bol.

At "\" (org-get-indentation) returns 2 even though I'm at bol.  Why?

Regarding "/".  In the following i2 is indented meaning that
(org-get-indentation) becomes 2.  Is that a feature?

(with-temp-buffer
  (org-mode)
  (insert "\n- i1\n- i2")
  (beginning-of-line)
  (org-return-indent)
  (buffer-string))

—Rasmus

-- 
to err is human. To screw up 10⁶ times per second, you need a computer
>From c43d7bb49a047b91a88327ce016b17383697376d Mon Sep 17 00:00:00 2001
From: rasmus <ras...@gmx.us>
Date: Tue, 10 Feb 2015 12:02:59 +0100
Subject: [PATCH] org.el: Change indention for cdlatex environments

* org.el (org-cdlatex-environment-indent): Use different indent
  algorithm based on content above the new latex-environment.
---
 lisp/org.el | 38 ++++++++++++++++++++++++++++++++++----
 1 file changed, 34 insertions(+), 4 deletions(-)

diff --git a/lisp/org.el b/lisp/org.el
index 64b546f..682d27a 100755
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -18647,10 +18647,40 @@ Revert to the normal definition outside of these fragments."
 (defun org-cdlatex-environment-indent (&optional environment item)
   "Execute `cdlatex-environment' and indent the inserted environment."
   (interactive)
-  (cdlatex-environment environment item)
-  (let ((element (org-element-at-point)))
-    (org-indent-region (org-element-property :begin element)
-		       (org-element-property :end element))))
+  (let ((non-blank-eolp
+	 (save-excursion
+	   (and (not (save-excursion
+		       (skip-chars-backward " \t")
+		       (bolp)))
+		(progn (skip-chars-forward " \t") (eolp)))))
+	(ind (save-excursion
+	       (unless (and (bolp)
+			    (save-excursion
+			      (skip-chars-forward " \t")
+			      (eolp)))
+		 (org-return-indent))
+	       (org-get-indentation))))
+    ;; Skip forward to next bol to avoid extra newline from
+    ;; cdlatex-environment.
+    (when non-blank-eolp (forward-line 1) (beginning-of-line))
+    (cdlatex-environment environment item)
+    ;; Indent new latex-environment.
+    (unless (zerop ind)
+      (let* ((element (org-element-at-point))
+	     (beg (org-element-property :begin element))
+	     (end (copy-marker
+		   (save-excursion
+		     (goto-char (org-element-property :end element))
+		     (skip-chars-backward " \t\n\r")
+		     (point)))))
+	(save-excursion
+	  (goto-char beg)
+	  (beginning-of-line)
+	  (while (<= (point) end)
+	    (org-indent-to-column ind)
+	    (forward-line 1)))
+	(set-marker end nil))
+      (forward-char ind))))
 
 
 ;;;; LaTeX fragments
-- 
2.3.0

Reply via email to