Nhận nội dung của bộ đệm


15

Vì vậy, buffer-stringcó được nội dung của bộ đệm hiện tại. Nhưng nó không cho phép chỉ định các bộ đệm khác.

Làm thế nào tôi có thể nhận được xung quanh đó? Tôi có cần một cái gì đó như save-window-excursionđể làm cho nó hoạt động?


Nếu bạn không phiền tôi hỏi, bạn đang cố gắng làm gì?
Lu-ca

@King Tôi đang tạo một quy trình không đồng bộ và tôi muốn gửi nội dung của bộ đệm dưới dạng đầu vào tiêu chuẩn. Tôi hình dung tôi có thể sử dụng process-send-stringvà tôi bị mắc kẹt.
Maciej Goszczycki

Câu trả lời:


25

Rất nhiều thứ trong Emacs hoạt động trên bộ đệm hiện tại. Bạn cần thay đổi bộ đệm hiện tại và khôi phục nó khi bạn hoàn thành. Sử dụng with-current-buffercho các trường hợp đơn giản trong đó bạn chỉ cần làm một cái gì đó trong bộ đệm khác và save-current-buffercho các trường hợp phức tạp hơn mà bạn cần điều hướng giữa một số bộ đệm.

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

Nếu bạn muốn nội dung văn bản của bộ đệm không có thuộc tính, hãy gọi buffer-substring-no-properties.

buffer-stringchỉ trả về phần bị thu hẹp của bộ đệm. Nếu bạn cần toàn bộ nội dung, hãy mở rộng nó sau khi lưu thu hẹp.

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

Nếu bạn cũng cần lưu điểm, hãy gọi save-excursionlà tốt. Lưu ý rằng chỉ save-excursionkhôi phục điểm trong bộ đệm hiện tại, vì vậy nếu bạn cần chuyển sang bộ đệm khác và di chuyển xung quanh đó, hãy gọi save-excursionbên trong save-current-bufferhoặc with-current-buffer.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.