问题
If I place
(insert-image (create-image "/tmp/test.png"))
in a buffer, place the cursor after the last parenthesis and evaluate it with C-x C-e
, then the image /tmp/test.png
is displayed in the buffer:

Pretty neat. But,
- I had to put the final parenthesis on a separate line, so the image
is close to the left-hand side of the buffer. Is there a way to hide
the
(insert-image ...)
text altogether? - The text file contains the
(insert-image ...)
text only, not the image. I'm happy with that, but is there a way to tell emacs to automatically replace all the(insert-image ...)
expressions by their corresponding images (after the file is opened) without me having to typeC-x C-e
after each one?
回答1:
Take a look at iimage-mode, the inline image minor mode. It's included since Emacs-23, IIRC.
M-xiimage-mode
回答2:
Depending on exactly what you want to achieve, you might try one the the following ideas:
1. use org-mode
as your buffer's major mode. You then have access to all the power of org-mode
formatting, which includes linking to image files and displaying them:
an image without description
[[file:/tmp/image.png]]
an image with description
[[file:/tmp/image.png][my description]]
then you can call org-toggle-inline-images
(C-c C-x C-v) to display images in the buffer (without a prefix argument, it will display only images without description; if you give a prefix argument, it will display all images)
2. write your own elisp code to insert images where you want them, and put it in an eval
local pseudo-variable so that it is called when opening the file. For example:
foo
<HERE>
bar
# Local Variables:
# eval: (progn (beginning-of-buffer)(search-forward "<HERE>")(insert-image (create-image "/tmp/image.png")))
# End:
You can of course wrap the elisp code into a neat function and simply call it from the eval
local variable (which is cleaner, but forces you to have the function definition somewhere else, away from your file)
回答3:
If you don't want the text (actually lisp code) in the buffer, don't type it into the buffer in the first place. Try M-x eval-expression
and enter your lisp code after the Eval prompt:
(insert-image (create-image "/tmp/test.png"))
Then the image is inserted at point in the buffer. You can define a function like this:
(defun my-insert-image () (interactive) (insert-image (create-image "/tmp/test.png")))
Either type M-x eval-expression
and the above defun or type it into a buffer and C-x C-e
after it. Then you can insert the image using M-x my-insert-image
.
来源:https://stackoverflow.com/questions/9780124/insert-image-into-text-buffer