-
-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Work/47display images #48
Changes from 1 commit
69cb4bb
7bdf4d9
8abe17c
5ea33a5
35f260d
acbe11e
e8e8629
ca7e637
950e78c
5c46396
71b9680
38486ab
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2913,15 +2913,6 @@ Is influenced by customization variables such as `adoc-title-style'.")))) | |
(defvar adoc-inline-image-overlays nil) | ||
(make-variable-buffer-local 'adoc-inline-image-overlays) | ||
|
||
(defun adoc-remove-images () | ||
"Remove inline image overlays from image links in the buffer. | ||
This can be toggled with `adoc-toggle-inline-images' | ||
or \\[adoc-toggle-inline-images]." | ||
(interactive) | ||
(save-restriction | ||
(widen) | ||
(remove-overlays nil nil 'adoc-image t))) | ||
|
||
(defcustom adoc-display-remote-images nil | ||
"If non-nil, download and display remote images. | ||
See also `adoc-inline-image-overlays'. | ||
|
@@ -3002,6 +2993,38 @@ or \\[adoc-toggle-inline-images]." | |
(adoc-create-image-overlay file start end) | ||
))))) | ||
|
||
(defun adoc-image-overlays (&optional begin end) | ||
"Return list of image overlays in region from BEGIN to END. | ||
BEGIN and END default to the buffer boundaries | ||
ignoring any restrictions." | ||
(save-restriction | ||
(widen) | ||
(unless begin (setq begin (point-min))) | ||
(unless end (setq end (point-max))) | ||
(let (image-overlays) | ||
(dolist (ov (overlays-in begin end)) | ||
(when (overlay-get ov 'adoc-image) | ||
(push ov image-overlays))) | ||
image-overlays))) | ||
|
||
(defun adoc-remove-images () | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Perhaps |
||
"Remove inline image overlays from image links in the buffer. | ||
This can be toggled with `adoc-toggle-images' | ||
or \\[adoc-toggle-images]." | ||
(interactive) | ||
(let ((image-list (adoc-image-overlays))) | ||
(when image-list | ||
(dolist (ov image-list) | ||
(delete-overlay ov)) | ||
t))) | ||
|
||
(defun adoc-toggle-images () | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think this can be There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This affects block images as well as inline images. Therefore I removed the "inline". There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What's a block image? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. See section Block Image Macro in the spec. And there is also the description of the Inline Image Macro. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ah, you mean the AsciiDoc spec - for me "inline" images are those that we display inline in Emacs. :-) Anyways, I guess we can avoid "inline" in the names, as long as they are consistent across all functions. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks for bringing up this topic. Otherwise clarification would be impossible. In the source code of |
||
"Toggle the display of images." | ||
(interactive) | ||
(unless (adoc-remove-images) | ||
(adoc-display-images) | ||
)) | ||
|
||
(defmacro adoc-with-point-at-event (location &rest body) | ||
"Execute BODY like `progn'. | ||
If LOCATION is an event run BODY in the event's buffer | ||
|
@@ -3674,7 +3697,9 @@ LOCAL-ATTRIBUTE-FACE-ALIST before it is looked up in | |
["$$text$$" tempo-template-pass-$$ | ||
:help ,adoc-help-pass-$$] | ||
["`text`" tempo-template-monospace-literal ; redundant to the one in the quotes section | ||
:help ,adoc-help-monospace-literal]))))) | ||
:help ,adoc-help-monospace-literal]))) | ||
"---" | ||
["Toggle display of images" adoc-toggle-images t])) | ||
map) | ||
"Keymap used in adoc mode.") | ||
|
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just use
let
binding here. The usage ofsetq
for introducing local bindings is mostly an antipatern in Elisp.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No, there is no local binding introduced through the
setq
. The local binding is already introduced through the function argumentbegin
. Thesetq
just modifies its value.What you get through the additional
let
-form is an superfluous local variablebegin
hiding the binding of the other localbegin
.This also is reflected by one more statement in the byte-code of the version with
let
:Version with
setq
:Generated Byte-Code of the version with
setq
:Version with
let
:Generated Byte-Code of the version with
let
:As you see it uses
varbind
instead ofvarset
and therefore needs an additionalunbind
. Even if it is not visible in the code it also has more stack usage through the additional local variable.So, now I really need to do my regular work ;-).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My bad - too much multitasking this morning. :D I'd still write something like
(setq begin (or begin (point-min)))
, asunless
feels like an overkill for this usecase, but I'm fine either way.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(setq begin (or begin (point-min)))
has the superfluous assignment(setq begin begin)
.(unless begin (setq begin (point-min)))
does not have that assignment.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reads better to me regardless, but it's not something I feel strongly about. Feel free to keep it as is.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Both variants have almost the same frequency in
/usr/share/emacs/29.1/lisp
. Since I am lazy, I do not change it. Furthermore, the statement(unless begin (setq begin ...))
is more straight-forward than(setq begin (or begin ...))
. The first version says explicitly what is done while the second version is more like a trick.