Вставить изображение в текстовый буфер

Если я размещу

(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 после каждого?

3 ответа

Решение

Взгляни на iimage-mode встроенное изображение второстепенного режима. Это включено с Emacs-23, IIRC.

Mx iimage-mode

В зависимости от того, чего именно вы хотите достичь, вы можете попробовать одну из следующих идей:

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 (Cc Cx Cv) для отображения изображений в буфере (без аргумента префикса, он будет отображать только изображения без описания; если вы задаете аргумент префикса, он будет отображать все изображения)

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 локальная переменная (которая чище, но заставляет вас иметь определение функции где-то еще, вне вашего файла)

Если вам не нужен текст (на самом деле код lisp) в буфере, не вводите его в буфер в первую очередь. Пытаться M-x eval-expression и введите свой код lisp после приглашения Eval:

(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,

Другие вопросы по тегам