From d6e20dbcff3c9fd0870d5550fb8c06750b95c4c3 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Tue, 27 Nov 2018 21:46:18 +0100 Subject: [PATCH 1/4] ox-latex: Gracefully handle export of source blocks without lang * lisp/ox-latex.el (org-latex-src-block): Handle export of source blocks without language. Reported-by: John Ciolfi --- lisp/ox-latex.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el index ebb2b6e11..d4ceac925 100644 --- a/lisp/ox-latex.el +++ b/lisp/ox-latex.el @@ -2892,7 +2892,7 @@ contextual information." (listings (plist-get info :latex-listings))) (cond ;; Case 1. No source fontification. - ((not listings) + ((or (not lang) (not listings)) (let* ((caption-str (org-latex--caption/label-string src-block info)) (float-env (cond ((string= "multicolumn" float) From b16feed40c7f519ada0cd9315251dcc257be31d2 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Tue, 27 Nov 2018 23:21:06 +0100 Subject: [PATCH 2/4] Normalize blank lines with * lisp/org.el (org-insert-heading): Make C-RET more predictable. In particular, it should not eat all the blank lines at the end of the tree. Reported-by: David Masterson --- lisp/org.el | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/lisp/org.el b/lisp/org.el index 0da000738..3d239c808 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -7640,22 +7640,25 @@ unconditionally." (member arg '((4) (16))) (and (not invisible-ok) (invisible-p (max (1- (point)) (point-min))))) - ;; Position point at the location of insertion. - (if (not level) ;before first headline - (org-with-limited-levels (outline-next-heading)) - ;; Make sure we end up on a visible headline if INVISIBLE-OK - ;; is nil. - (org-with-limited-levels (org-back-to-heading invisible-ok)) - (cond ((equal arg '(16)) - (org-up-heading-safe) - (org-end-of-subtree t t)) - (t - (org-end-of-subtree t t)))) - (unless (bolp) (insert "\n")) ;ensure final newline + ;; Position point at the location of insertion. Make sure we + ;; end up on a visible headline if INVISIBLE-OK is nil. + (org-with-limited-levels + (if (not level) (outline-next-heading) ;before first headline + (org-back-to-heading invisible-ok) + (when (equal arg '(16)) (org-up-heading-safe)) + (org-end-of-subtree))) + (unless (bolp) (insert "\n")) (unless (and blank? (org-previous-line-empty-p)) (org-N-empty-lines-before-current (if blank? 1 0))) - (insert stars " \n") - (forward-char -1)) + (insert stars " ") + (when (eobp) (save-excursion (insert "\n"))) + ;; When INVISIBLE-OK is non-nil, ensure newly created headline + ;; is visible. + (unless invisible-ok + (pcase (get-char-property-and-overlay (point) 'invisible) + (`(outline . ,o) + (move-overlay o (overlay-start o) (line-end-position 0))) + (_ nil)))) ;; At a headline... ((org-at-heading-p) (cond ((bolp) From 3216cbe776900135c7ab5e1bbe4fc7cab921e9d5 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Tue, 27 Nov 2018 23:42:16 +0100 Subject: [PATCH 3/4] ox: Preserve properties when duplicating buffer before exporting * lisp/ox.el (org-export--generate-copy-script): Preserve properties when duplicating buffer before exporting. Reported-by: John Kitchin --- lisp/ox.el | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lisp/ox.el b/lisp/ox.el index 743fcd772..ad4942be0 100644 --- a/lisp/ox.el +++ b/lisp/ox.el @@ -2673,10 +2673,7 @@ The function assumes BUFFER's major mode is `org-mode'." (quote ,val)) vars)))))) ;; Whole buffer contents. - (insert - ,(org-with-wide-buffer - (buffer-substring-no-properties - (point-min) (point-max)))) + (insert ,(org-with-wide-buffer (buffer-string))) ;; Narrowing. ,(if (org-region-active-p) `(narrow-to-region ,(region-beginning) ,(region-end)) From e3fdef74b9092f7c8fc49013bfc7bb8d1ef5f72a Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Wed, 28 Nov 2018 00:26:24 +0100 Subject: [PATCH 4/4] Improve docstrings * lisp/org.el (org-latex-default-packages-alist): (org-latex-packages-alist): Improve docstring. * lisp/ox-latex.el (org-latex--remove-packages): Small refactoring. --- lisp/org.el | 15 +++++++++++---- lisp/ox-latex.el | 31 +++++++++++++------------------ 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/lisp/org.el b/lisp/org.el index 3d239c808..8dddf0295 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -4138,10 +4138,12 @@ A cell is of the format If SNIPPET-FLAG is non-nil, the package also needs to be included when compiling LaTeX snippets into images for inclusion into -non-LaTeX output. COMPILERS is a list of compilers that should -include the package, see `org-latex-compiler'. If the document -compiler is not in the list, and the list is non-nil, the package -will not be inserted in the final document. +non-LaTeX output. + +COMPILERS is a list of compilers that should include the package, +see `org-latex-compiler'. If the document compiler is not in the +list, and the list is non-nil, the package will not be inserted +in the final document. A string will be inserted as-is in the header of the document." :group 'org-latex @@ -4175,6 +4177,11 @@ SNIPPET-FLAG, when non-nil, indicates that this package is also needed when turning LaTeX snippets into images for inclusion into non-LaTeX output. +COMPILERS is a list of compilers that should include the package, +see `org-latex-compiler'. If the document compiler is not in the +list, and the list is non-nil, the package will not be inserted +in the final document. + A string will be inserted as-is in the header of the document. Make sure that you only list packages here which: diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el index d4ceac925..2d771671a 100644 --- a/lisp/ox-latex.el +++ b/lisp/ox-latex.el @@ -1440,26 +1440,21 @@ Return the new header." (defun org-latex--remove-packages (pkg-alist info) "Remove packages based on the current LaTeX compiler. -If the fourth argument of an element is set in pkg-alist, and it -is not a member of the LaTeX compiler of the document, the packages -is removed. See also `org-latex-compiler'. +PKG-ALIST is a list of packages, as in `org-latex-packages-alist' +and `org-latex-default-packages-alist'. If the fourth argument +of a package is neither nil nor a member of the LaTeX compiler +associated to the document, the package is removed. -Return modified pkg-alist." +Return new list of packages." (let ((compiler (or (plist-get info :latex-compiler) ""))) - (if (member-ignore-case compiler org-latex-compilers) - (delq nil - (mapcar - (lambda (pkg) - (unless (and - (listp pkg) - (let ((third (nth 3 pkg))) - (and third - (not (member-ignore-case - compiler - (if (listp third) third (list third))))))) - pkg)) - pkg-alist)) - pkg-alist))) + (if (not (member-ignore-case compiler org-latex-compilers)) pkg-alist + (cl-remove-if-not + (lambda (package) + (pcase package + (`(,_ ,_ ,_ nil) t) + (`(,_ ,_ ,_ ,compilers) (member-ignore-case compiler compilers)) + (_ t))) + pkg-alist)))) (defun org-latex--find-verb-separator (s) "Return a character not used in string S.