branch: externals/org
commit e816ae1ff59a41c079be42a78883d29245876585
Author: TEC <[email protected]>
Commit: TEC <[email protected]>
org: Display proportional image widths
* lisp/org.el (org-display-inline-images): When the image width is given
as a float less than 2, interpret the value as that portion of the text
area width. This works well with cases such as "#+attr_latex: :width
0.6\linewidth" as this will now be interpreted as 60% of the text area
width. The upper bound is set to 2 not 1, as more than 100% of the text
width can be realistic, e.g. "1.2\linewidth" in LaTeX, but more than
200% seems unrealistic.
---
lisp/org.el | 46 ++++++++++++++++++++++++++++++----------------
1 file changed, 30 insertions(+), 16 deletions(-)
diff --git a/lisp/org.el b/lisp/org.el
index 8ae80e6..5a9f8a0 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -16617,22 +16617,36 @@ buffer boundaries with possible narrowing."
(cond
((eq org-image-actual-width t) nil)
((listp org-image-actual-width)
- (or
- ;; First try to find a width among
- ;; attributes associated to the paragraph
- ;; containing link.
- (pcase (org-element-lineage link '(paragraph))
- (`nil nil)
- (p
- (let* ((case-fold-search t)
- (end (org-element-property
:post-affiliated p))
- (re "^[ \t]*#\\+attr_.*?: +.*?:width
+\\(\\S-+\\)"))
- (when (org-with-point-at
- (org-element-property :begin p)
- (re-search-forward re end t))
- (string-to-number (match-string 1))))))
- ;; Otherwise, fall-back to provided number.
- (car 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)))