ดังนั้น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-bufferwith-current-buffer