Dapatkan konten buffer

15

Jadi buffer-stringdapatkan konten dari buffer saat ini. Tapi itu tidak memungkinkan menentukan buffer lain.

Bagaimana saya bisa mengatasi itu? Apakah saya perlu sesuatu save-window-excursionuntuk membuatnya berfungsi?

Maciej Goszczycki
sumber
Jika Anda tidak keberatan saya bertanya, apa yang Anda coba lakukan?
Luke Shimkus
@ Raja Saya membuat proses asinkron dan saya ingin mengirim konten buffer sebagai input standar. Saya pikir saya bisa menggunakan process-send-stringdan saya terjebak.
Maciej Goszczycki

Jawaban:

25

Banyak hal di Emacs yang beroperasi pada buffer saat ini. Anda perlu mengubah buffer saat ini dan mengembalikannya setelah selesai. Gunakan with-current-bufferuntuk kasus-kasus sederhana di mana Anda hanya perlu melakukan sesuatu di buffer lain, dan save-current-bufferuntuk kasus-kasus yang lebih kompleks di mana Anda perlu menavigasi antara beberapa buffer.

(defun buffer-string* (buffer)
  (with-current-buffer buffer
    (buffer-string)))

Jika Anda ingin konten teks dari buffer tanpa properti, panggil buffer-substring-no-properties.

buffer-stringmengembalikan hanya bagian penyempitan penyempitan . Jika Anda membutuhkan seluruh konten, perluas itu setelah menyimpan penyempitan.

(defun buffer-whole-string (buffer)
  (with-current-buffer buffer
    (save-restriction
      (widen)
      (buffer-substring-no-properties (point-min) (point-max)))))

Jika Anda juga perlu menyimpan poinnya, hubungi save-excursionjuga. Perhatikan bahwa save-excursionpulihkan titik hanya di buffer saat ini, jadi jika Anda perlu beralih ke buffer lain dan bergerak di sana, panggil ke save-excursiondalam save-current-bufferatau with-current-buffer.

Gilles 'SO- berhenti menjadi jahat'
sumber