将图像插入文本缓冲区

24

如果我将代码放置在<head>标签内,而不是放置在<body>标签内,会发生什么?

(insert-image (create-image "/tmp/test.png"))
在一个缓冲区中,将光标放在最后一个括号后面,然后使用C-x C-e进行评估,然后图像/tmp/test.png会显示在缓冲区中:

enter image description here

很不错。但是,
  1. 我必须将最终的括号放在单独的一行,这样图像就靠近缓冲区的左侧。有没有办法完全隐藏(insert-image ...)文本?
  2. 文本文件仅包含(insert-image ...)文本,而不包含图像。我对此感到满意,但是否有办法告诉emacs自动替换所有(insert-image ...)表达式为相应的图像(在打开文件后)而无需每次输入C-x C-e

1
"insert-image" 实际上并不会将任何图像插入到缓冲区中以便保存到磁盘,它只是提供了一种可视化的表示方式。您没有提到它的目的。在 org-mode 中,您可以在缓冲区中链接图片,并在需要时显示和导出它们。这是您要寻找的内容吗? - kindahero
我正在寻找真正的内联图像 - 图像数据存在于emacs缓冲区中,可能是uu编码,而不是指向包含图像数据的文件的指针。 管理单独的文件很麻烦。 - Krazy Glew
3个回答

34

根据你想要实现的具体目标,你可以尝试以下其中一个想法:

1.org-mode 用作缓冲区的主要模式。这样你就可以使用 org-mode 的所有功能,包括链接到图像文件并显示它们:

an image without description
[[file:/tmp/image.png]]

an image with description
[[file:/tmp/image.png][my description]]

然后你可以调用org-toggle-inline-images(C-c C-x C-v)在缓冲区中显示图像(不带前缀参数时,它将仅显示没有描述的图像;如果给出前缀参数,则会显示所有图像)。

2.编写自己的Elisp代码,在eval本地伪变量中插入所需的图像,这样在打开文件时就会调用它。例如:

foo
<HERE>
bar

# Local Variables:
#   eval: (progn (beginning-of-buffer)(search-forward "<HERE>")(insert-image (create-image "/tmp/image.png")))
# End:

当然,你可以将elisp代码封装成一个整洁的函数,然后从eval本地变量中简单地调用它(这样更加清晰,但是需要将函数定义放在离文件中其他地方)


30
请看一下内嵌图片小模式iimage-mode(inline image minor mode)的Github地址,它从Emacs-23开始就已经包含了。要使用该模式,请输入M-xiimage-mode

6
我不知道这种模式,但这绝对是正确的方式:标准而不是过于复杂。 - François Févotte
2
这是原始链接的Wayback Machine链接:https://web.archive.org/web/20120424055608/http://www.netlaputa.ne.jp/~kose/Emacs/iimage.html - SCFrench

1
如果您不想在缓冲区中看到文本(实际上是Lisp代码),那么首先不要将其输入到缓冲区中。尝试使用M-x eval-expression,并在Eval提示后输入您的Lisp代码:
(insert-image (create-image "/tmp/test.png"))

然后将图像插入到缓冲区中的某个位置。您可以定义一个类似这样的函数:
(defun my-insert-image () (interactive) (insert-image (create-image "/tmp/test.png")))

要么键入M-x eval-expression和上面的defun,要么将其键入缓冲区并在其后键入C-x C-e。然后,您可以使用M-x my-insert-image插入图像。


1
最好使用(defun my-insert-image (image-file) (interactive "fImage File: ") (insert-image (create-image image-file))) - Inaimathi
或者如手册所述 (http://www.gnu.org/software/emacs/manual/html_node/elisp/Defining-Images.html)(defimage test-image ((:type xpm :file "/test1.xpm") (:type xbm :file "/test1.xbm")))(insert-image test-image) - yPhil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接