2012-03-20 10 views
16

Gdybym umieścićwstawić obraz do bufora tekstowego

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

w buforze, należy umieścić kursor po ostatnim nawiasie i ocenić je z C-x C-e, wówczas obraz /tmp/test.png jest wyświetlany w buforze:

enter image description here

Całkiem schludnie. Ale

  1. musiałem postawić ostateczną nawias w osobnej linii, więc obraz znajduje się blisko lewej strony zderzaka. Czy istnieje sposób, aby całkowicie ukryć tekst w formacie (insert-image ...)?
  2. Plik tekstowy zawiera tylko tekst, a nie . Cieszę się z tego, ale czy istnieje sposób, aby powiedzieć emacsowi, aby automatycznie zastąpił wszystkie wyrażenia (insert-image ...) przez ich odpowiadające obrazy (po otworzeniu pliku) bez konieczności wpisywania po jednym C-x C-e po ?
+0

insert-image faktycznie nie wstawić dowolny obraz w buforze, aby zapisać go na dysku, a nie tylko jego reprezentacji wizualnej. nie wspomniałeś o celu. W trybie org możesz łączyć obrazy w buforze i wyświetlać je, jeśli chcesz, i eksportować je. czy tego właśnie szukasz? – kindahero

+0

Jestem lookimg dla prawdziwych obrazów śródliniowych - gdzie dane obrazu istnieją w buforze emacs, prawdopodobnie uuencoded, zamiast wskaźnika do pliku zawierającego dane obrazu. Badzo sobie poradzic z oddzielnymi plikami. –

Odpowiedz

23

Spójrz na iimage-mode, tryb podrzędny obrazu drugorzędnego. Jest zawarty od czasów Emacs-23, IIRC.

M-xiimage-mode

+4

+1: Nie wiedziałem o tym trybie, ale to jest zdecydowanie droga do wyjścia: standardowa i niezredukowana. – Francesco

+1

Link jest uszkodzony. –

+0

Oto link do maszyny prowadzącej do oryginalnego linku: https://web.archive.org/web/20120424055608/http://www.netlaputa.ne.jp/~kose/Emacs/iimage.html – SCFrench

1

Jeśli nie chcesz, aby tekst (w rzeczywistości kod LISP) w buforze, nie wpisuj go w buforze w pierwszej kolejności. Spróbuj M-x eval-expression i podaj lisp kod po wierszu Eval:

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

Następnie obraz zostanie wstawiony w miejscu w buforze. Można zdefiniować funkcję tak:

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

obu typów M-x eval-expression i powyższy defun lub wpisać go do bufora i C-x C-e po nim. Następnie możesz wstawić obraz za pomocą M-x my-insert-image.

+1

Prawdopodobnie lepiej użyć '(defun my-insert-image (image-file) (interaktywny" plik obrazu ") (insert-image (create image))))'. – Inaimathi

+0

Lub zgodnie z instrukcją (http://www.gnu.org/software/emacs/manual/html_node/elisp/Defining-Images.html) (obraz testowy defimage ((: wpisz xpm: plik "~ /test1.xpm ") (: typ xbm: plik" ~/test1.xbm "))) (wstaw obraz testowy) – yPhil

24

W zależności od tego, co dokładnie chcesz osiągnąć, można spróbować jednego z następujących pomysłów:

1. korzystanie org-mode jako głównego trybu edycji swojego bufora. Umożliwi to dostęp do wszystkich mocy org-mode formatowania, który zawiera linków do plików graficznych i ich wyświetlanie:

an image without description 
[[file:/tmp/image.png]] 

an image with description 
[[file:/tmp/image.png][my description]] 

następnie możesz zadzwonić org-toggle-inline-images (Cc Cx Cv) do wyświetlania obrazów w buforze (bez Argument prefiks, wyświetli tylko obrazy bez opisu, jeśli podasz argument przedrostka, wyświetli wszystkie obrazy)

2. wpisz swój własny kod, aby wstawić obrazy tam, gdzie chcesz i umieść je w eval lokalna pseudo-zmienna, która zostanie wywołana podczas otwierania plik.Na przykład:

foo 
<HERE> 
bar 

# Local Variables: 
# eval: (progn (beginning-of-buffer)(search-forward "<HERE>")(insert-image (create-image "/tmp/image.png"))) 
# End: 

Można oczywiście zawinąć kod Elisp w zadbanej funkcji i po prostu nazwać to od zmiennej lokalnej na eval (co jest czystsze, ale siły, aby mieć definicję funkcji gdzieś indziej, z dala od plik)

Powiązane problemy