вставить изображение в текстовый буфер - PullRequest
18 голосов
/ 20 марта 2012

Если я ставлю

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

Ответы [ 3 ]

28 голосов
/ 20 марта 2012

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

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

26 голосов
/ 20 марта 2012

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

Mx iimage-mode

1 голос
/ 20 марта 2012

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

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