emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [O] [patch] better(?) indention for cdlatex-environment


From: Nicolas Goaziou
Subject: Re: [O] [patch] better(?) indention for cdlatex-environment
Date: Tue, 17 Feb 2015 09:51:08 +0100

Rasmus <address@hidden> writes:

> +  ;; cdlatex-environment always return nil.  Therefore, capture output
> +  ;; first and determine if an environment was selected.
> +  (let* ((beg (point-marker))
> +      (end (copy-marker (point) t))
> +      (env (org-trim
> +            (or (progn (ignore-errors (cdlatex-environment environment item))
> +                       (delete-and-extract-region beg end))
> +                ""))))

The `or' is not necessary: `delete-and-extract-region' already returns
the empty string when markers don't move.

  (env (progn (ignore-errors (cdlatex-environment environment item))
              (org-trim (delete-and-extract-region beg end)))

> +    (when (org-string-nw-p env)
> +      ;; Get indentation of next line unless at column 0.
> +      (let ((ind (if (bolp) 0
> +                (save-excursion
> +                  (org-return-indent)
> +                  (prog1 (org-get-indentation)
> +                    (when (and (skip-chars-forward " \t") (eolp))
> +                      (delete-region beg (point)))))))

Nitpick 

  (when (progn (skip-chars-forward " \") (eolp))
    ...)

since you're not really interested in the return value of
`skip-chars-forward' (which is always non-nil).

> +         (bol (and (skip-chars-backward " \t") (bolp))))

Ditto.

> +     ;; Insert a newline before environment unless at column zero
> +     ;; to "escape" the current line.  Insert a newline if
> +     ;; something is one the same line as \end{ENVIRONMENT}.
> +     (insert (concat (unless bol "\n")
> +                     env
> +                     (and (skip-chars-forward " \t") (not (eolp)) "\n")))

Ditto.

> +     (unless (zerop ind)
> +       (let* ((element (org-element-at-point))
> +              (elm-beg (org-element-property :begin element))
> +              (elm-end (copy-marker
> +                        (save-excursion
> +                          (goto-char (org-element-property :end element))
> +                          (skip-chars-backward " \t\n\r")
> +                          (point)))))
> +         (save-excursion
> +           (goto-char elm-beg)
> +           (beginning-of-line)
> +           (while (<= (point) elm-end)
> +             (org-indent-to-column ind)
> +             (forward-line)))
> +         (set-marker elm-end nil)))))

I don't think you need `org-element-at-point' at all. You already have
BEG and END markers available. I didn't test it, but this should be
enough to indent the environment.

Also you shouldn't apply `org-indent-to-column' when line is empty.


Regards,



reply via email to

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