Вставить изображение в текстовый буфер - программирование
Подтвердить что ты не робот

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

Если я поставлю

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

в буфере, поместите курсор после последней скобки и оцените его с помощью C-x C-e, тогда в буфере отображается изображение /tmp/test.png:

enter image description here

Довольно аккуратный. Но,

  • Мне пришлось поставить финальную скобку на отдельной строке, поэтому изображение близко к левой стороне буфера. Есть ли способ скрыть текст (insert-image ...) в целом?
  • Текстовый файл содержит только текст (insert-image ...), а не образ. Я доволен этим, но есть ли способ сказать emacs автоматически замените все выражения (insert-image ...) на их соответствующие образы (после открытия файла), без необходимости вводить C-x C-e после каждый из них?
4b9b3361

Ответ 1

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

M-x iimage-mode

Ответ 2

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

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

Ответ 3

Если вы не хотите, чтобы текст (фактически 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.