Вставить изображение в текстовый буфер
Если я размещу
(insert-image (create-image "/tmp/test.png"))
в буфере поместите курсор после последней круглой скобки и оцените его C-x C-e
тогда изображение /tmp/test.png
отображается в буфере:
Довольно аккуратно. Но,
- Мне пришлось поместить заключительную скобку в отдельную строку, чтобы изображение было близко к левой стороне буфера. Есть ли способ скрыть
(insert-image ...)
текст вообще? - Текстовый файл содержит
(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
,