23

如果我放置

(insert-image (create-image "/tmp/test.png"))

在缓冲区中,将光标放在最后一个括号之后并用 评估它C-x C-e,然后图像/tmp/test.png将显示在缓冲区中:

在此处输入图像描述

挺整洁的。但,

  1. 我不得不将最后的括号放在单独的行上,因此图像靠近缓冲区的左侧。有没有办法(insert-image ...)完全隐藏文字?
  2. 文本文件仅包含(insert-image ...)文本,不包含图像。我对此很满意,但是有没有办法告诉 emacs 用(insert-image ...)相应的图像(打开文件后)自动替换所有表达式,而我不必C-x C-e在每个表达式之后输入?
4

3 回答 3

32

根据您想要实现的具体目标,您可以尝试以下想法之一:

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局部变量中调用它(这更简洁,但会迫使您将函数定义放在其他地方,远离您的文件)

于 2012-03-20T07:54:13.310 回答
30

看一下iimage-mode,内联图像次要模式。它自 Emacs-23, IIRC 起就包含在内。

M-xiimage-mode

于 2012-03-20T08:21:15.663 回答
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.

于 2012-03-20T01:54:16.850 回答