2013-06-29 12 views
8

muszę append string S (należącego do żadnego bufora) do specjalnego pliku F, ale ponieważ mam nadzieję, że ta operacja zajmuje tak mało czasu jak to możliwe, nie chcę F otwarty jako bufor.W Emacs LISP w jaki sposób mogę dodać ciąg do pliku, którego nie lubię otwierać?

AFAIK, istnieje funkcja wbudowana w emacs zwanych write-region, ale wymaga to zawartość być napisane w F wewnątrz jednego z buforów (aw moim przypadku nie ma gwarancji, że S powinien być taki ciąg znaków) . Jak mogę to zrobić?

Odpowiedz

13

(write-region <STRING> nil <FILENAME> 'append)

4

Dlaczego nie spróbować czegoś takiego:

(defun my-append-string-to-file (s filename) 
    (with-temp-buffer 
    (insert s) 
    (write-region (point-min) (point-max) filename t))) 

EDIT: Podobno, jak odpowiedział @Stefan, write-region jest zdolny do dołączania ciąg do pliku, więc polecam używając jego odpowiedź zamiast .

+0

Wydaje rozwiązanie. Ale czy w ogóle nie można utworzyć bufora temp? –

+0

Nie jestem tego świadomy. Emacs nie zapewnia czystego interfejsu plików (otwórz, przeczytaj itp.). Jednak Emacs jest naprawdę skuteczny w pracy z buforami, więc powinno to być naprawdę szybkie. – Lindydancer

+0

Dzięki za życzliwość! –

1

Nie jestem pewien, co chcesz osiągnąć, ale coś takiego może załatwić sprawę ... możesz po prostu umieścić ścieżkę do pliku, który chcesz dodać, zamiast/path/to/F.

(defun interactive-append (something) 
    (interactive "sAppend S to F:") 
    (shell-command (format "echo '%s' >> /path/to/F" something))) 
+2

'shell-command' zajmuje dużo czasu, ponieważ musi wywołać zewnętrzną powłokę, prawda? –

Powiązane problemy