รับเนื้อหาของบัฟเฟอร์


15

ดังนั้นbuffer-stringได้รับเนื้อหาของบัฟเฟอร์ปัจจุบัน แต่ไม่อนุญาตให้ระบุบัฟเฟอร์อื่น

ฉันจะหลีกเลี่ยงสิ่งนั้นได้อย่างไร ฉันต้องการบางสิ่งบางอย่างsave-window-excursionเพื่อให้มันทำงานได้หรือไม่


หากคุณไม่รังเกียจที่จะถามฉันคุณกำลังพยายามทำอะไร
Luke Shimkus

@King ฉันกำลังสร้างกระบวนการอะซิงโครนัสและฉันต้องการส่งเนื้อหาของบัฟเฟอร์เนื่องจากเป็นอินพุตมาตรฐาน ฉันคิดว่าฉันสามารถใช้process-send-stringและฉันติด
Maciej Goszczycki

คำตอบ:


25

หลายสิ่งใน Emacs ทำงานกับบัฟเฟอร์ปัจจุบัน คุณต้องเปลี่ยนบัฟเฟอร์ปัจจุบันและกู้คืนเมื่อเสร็จแล้ว ใช้with-current-bufferสำหรับกรณีง่าย ๆ ที่คุณต้องทำอะไรบางอย่างในบัฟเฟอร์อื่นและsave-current-bufferสำหรับกรณีที่ซับซ้อนมากขึ้นที่คุณต้องการนำทางระหว่างบัฟเฟอร์หลาย ๆ

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

buffer-substring-no-propertiesหากคุณต้องการเนื้อหาข้อความของบัฟเฟอร์โดยไม่ต้องคุณสมบัติโทร

buffer-stringส่งคืนเฉพาะส่วนที่แคบของบัฟเฟอร์ หากคุณต้องการเนื้อหาทั้งหมดให้กว้างขึ้นหลังจากบันทึกการลดขนาด

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

หากคุณต้องการบันทึกจุดนั้นให้โทรsave-excursionด้วย โปรดทราบว่าsave-excursionคืนจุดเพียงในบัฟเฟอร์ปัจจุบันดังนั้นหากคุณจำเป็นต้องสลับไปบัฟเฟอร์อื่นและย้ายไปรอบ ๆ มีโทรsave-excursionภายในหรือsave-current-bufferwith-current-buffer

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.