[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/org c76a7ee 76/85: org: Refactor width in `org-display-
From: |
ELPA Syncer |
Subject: |
[elpa] externals/org c76a7ee 76/85: org: Refactor width in `org-display-inline-images' |
Date: |
Mon, 27 Sep 2021 15:57:54 -0400 (EDT) |
branch: externals/org
commit c76a7eed23f09f2d0894c3a66f26e0af6ec24396
Author: TEC <tec@tecosaur.com>
Commit: TEC <tec@tecosaur.com>
org: Refactor width in `org-display-inline-images'
* lisp/org.el (org-display-inline-images,
org-display-inline-image--width): Extract the width determination in
`org-display-inline-images' into a new function
`org-display-inline-image--width' where I have taken the opportunity to
refactor the width-determination code.
---
lisp/org.el | 85 ++++++++++++++++++++++++++++++++++---------------------------
1 file changed, 47 insertions(+), 38 deletions(-)
diff --git a/lisp/org.el b/lisp/org.el
index 5a9f8a0..8e4826a 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -16612,44 +16612,7 @@ buffer boundaries with possible narrowing."
(ignore-errors (org-attach-expand path)))
(expand-file-name path))))
(when (and file (file-exists-p file))
- (let ((width
- ;; Apply `org-image-actual-width' specifications.
- (cond
- ((eq org-image-actual-width t) nil)
- ((listp org-image-actual-width)
- (let ((width
- (or
- ;; First try to find a width among
- ;; attributes associated to the paragraph
- ;; containing link.
- (pcase (org-element-lineage link
'(paragraph))
- (`nil nil)
- (par (let* ((case-fold-search t)
- (end (org-element-property
:post-affiliated par))
- (re "^[ \t]*#\\+attr_.*?:
+.*?:width +\\(\\S-+\\)"))
- (when (org-with-point-at
- (org-element-property
:begin par)
- (re-search-forward re
end t))
- (string-to-number
(match-string 1)))))))
- ;; Otherwise, fall-back to provided number.
- (car org-image-actual-width))))
- (if (and (floatp width) (<= 0 width 2.0))
- ;; A float in [0,2] should be interpereted as
this portion of
- ;; the text width in the window. This works
well with cases like
- ;; #+attr_latex: :width
0.X\{line,page,column,etc.}width,
- ;; as the "0.X" is pulled out as a float. We
use 2 as the upper
- ;; bound as cases such as 1.2\linewidth are
feasible.
- (round (* width
- (window-pixel-width)
- (/ (or (and (bound-and-true-p
visual-fill-column-mode)
- (or
visual-fill-column-width auto-fill-function))
- (when auto-fill-function
fill-column)
- (window-text-width))
- (float (window-total-width)))))
- width))
- ((numberp org-image-actual-width)
- org-image-actual-width)
- (t nil)))
+ (let ((width (org-display-inline-image--width link))
(old (get-char-property-and-overlay
(org-element-property :begin link)
'org-image-overlay)))
@@ -16674,6 +16637,52 @@ buffer boundaries with possible narrowing."
(overlay-put ov 'keymap image-map))
(push ov org-inline-image-overlays))))))))))))))))
+(defun org-display-inline-image--width (link)
+ "Determine the display width of the image LINK, in pixels.
+- When `org-image-actual-width' is t, the image's pixel width is used.
+- When `org-image-actual-width' is a number, that value will is used.
+- When `org-image-actual-width' is nil or a list, the first :width attribute
+ set (if it exists) is used to set the image width.
+ If no :width attribute is given and `org-image-actual-width' is a list with
+ a number as the car, then that number is used as the default value.
+ If the value is a float between 0 and 2, it interpreted as that proportion
+ of the text width in the buffer."
+ ;; Apply `org-image-actual-width' specifications.
+ (cond
+ ((eq org-image-actual-width t) nil)
+ ((listp org-image-actual-width)
+ (let* ((case-fold-search t)
+ (par (org-element-lineage link '(paragraph)))
+ (attr-re "^[ \t]*#\\+attr_.*?: +.*?:width +\\(\\S-+\\)")
+ (par-end (org-element-property :post-affiliated par))
+ ;; Try to find an attribute providing a :width.
+ (attr-width
+ (when (and par (org-with-point-at
+ (org-element-property :begin par)
+ (re-search-forward attr-re par-end t)))
+ (match-string 1)))
+ (attr-width-val
+ (when attr-width (string-to-number attr-width)))
+ ;; Fallback to `org-image-actual-width' if no explicit width is
given.
+ (width (or attr-width-val (car org-image-actual-width))))
+ (if (and (floatp width) (<= 0.0 width 2.0))
+ ;; A float in [0,2] should be interpereted as this portion of
+ ;; the text width in the window. This works well with cases like
+ ;; #+attr_latex: :width 0.X\{line,page,column,etc.}width,
+ ;; as the "0.X" is pulled out as a float. We use 2 as the upper
+ ;; bound as cases such as 1.2\linewidth are feasible.
+ (round (* width
+ (window-pixel-width)
+ (/ (or (and (bound-and-true-p visual-fill-column-mode)
+ (or visual-fill-column-width
auto-fill-function))
+ (when auto-fill-function fill-column)
+ (window-text-width))
+ (float (window-total-width)))))
+ width)))
+ ((numberp org-image-actual-width)
+ org-image-actual-width)
+ (t nil)))
+
(defun org-display-inline-remove-overlay (ov after _beg _end &optional _len)
"Remove inline-display overlay if a corresponding region is modified."
(let ((inhibit-modification-hooks t))
- [elpa] externals/org 5e58af5 52/85: oc-csl: Use citeproc-el to create CSL processor itemgetters, (continued)
- [elpa] externals/org 5e58af5 52/85: oc-csl: Use citeproc-el to create CSL processor itemgetters, ELPA Syncer, 2021/09/27
- [elpa] externals/org be0cdd1 40/85: org-mouse: Support intermediate-state checkboxes, ELPA Syncer, 2021/09/27
- [elpa] externals/org db67c7e 55/85: Move some ob-*el files to the new org-contrib repo, ELPA Syncer, 2021/09/27
- [elpa] externals/org 2aa2615 59/85: Document new agenda faces in the ORG-NEWS, ELPA Syncer, 2021/09/27
- [elpa] externals/org b80b0a5 51/85: org-clock.el: Make org-notify support macOS notification, ELPA Syncer, 2021/09/27
- [elpa] externals/org 78783f4 48/85: ob-core.el: Add ability to use closures as default header arguments, ELPA Syncer, 2021/09/27
- [elpa] externals/org b2da9ea 64/85: Backport commit 0da8118dc from Emacs, ELPA Syncer, 2021/09/27
- [elpa] externals/org 7d67719 68/85: org-manual: comment about latex code-block export, ELPA Syncer, 2021/09/27
- [elpa] externals/org 80798fc 72/85: oc.el (org-cite-register-processor): Silence a compiler warning, ELPA Syncer, 2021/09/27
- [elpa] externals/org 593740c 74/85: etc/ORG-NEWS: Mention the citation engine and reorder items, ELPA Syncer, 2021/09/27
- [elpa] externals/org c76a7ee 76/85: org: Refactor width in `org-display-inline-images',
ELPA Syncer <=
- [elpa] externals/org e816ae1 75/85: org: Display proportional image widths, ELPA Syncer, 2021/09/27
- [elpa] externals/org 981bcbf 80/85: Merge branch 'bugfix', ELPA Syncer, 2021/09/27
- [elpa] externals/org c90f96c 77/85: org: Support displaying X% width images, ELPA Syncer, 2021/09/27
- [elpa] externals/org 4594423 79/85: doc/org-manual.org: Fix typo, ELPA Syncer, 2021/09/27
- [elpa] externals/org 09dc3fa 83/85: org-protocol.el: decode "+" in query part as space, ELPA Syncer, 2021/09/27
- [elpa] externals/org 663255e 85/85: org: Remove obsolete default LaTeX packages, ELPA Syncer, 2021/09/27
- [elpa] externals/org 3d35718 44/85: Merge branch 'bugfix', ELPA Syncer, 2021/09/27
- [elpa] externals/org 69850c1 58/85: ob-core.el (org-babel--file-desc): Remove unused condition, ELPA Syncer, 2021/09/27
- [elpa] externals/org ee0fd1e 37/85: Revert "org-src.el (org-src--contents-for-write-back): Do not indent blank lines", ELPA Syncer, 2021/09/27
- [elpa] externals/org 70e65a2 38/85: org-src.el: Do not indent blank lines, except current one, ELPA Syncer, 2021/09/27