ดังนั้นbuffer-string
ได้รับเนื้อหาของบัฟเฟอร์ปัจจุบัน แต่ไม่อนุญาตให้ระบุบัฟเฟอร์อื่น
ฉันจะหลีกเลี่ยงสิ่งนั้นได้อย่างไร ฉันต้องการบางสิ่งบางอย่างsave-window-excursion
เพื่อให้มันทำงานได้หรือไม่
process-send-string
และฉันติด
ดังนั้นbuffer-string
ได้รับเนื้อหาของบัฟเฟอร์ปัจจุบัน แต่ไม่อนุญาตให้ระบุบัฟเฟอร์อื่น
ฉันจะหลีกเลี่ยงสิ่งนั้นได้อย่างไร ฉันต้องการบางสิ่งบางอย่างsave-window-excursion
เพื่อให้มันทำงานได้หรือไม่
process-send-string
และฉันติด
คำตอบ:
หลายสิ่งใน 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-buffer
with-current-buffer