2009-03-03 45 views

Trả lời

49

buffer-substring cùng với region-beginningregion-end thể làm điều đó.

+0

Thật tuyệt vời, cảm ơn bạn. Tôi chắc chắn sẽ không tìm thấy điều đó một mình. – Singletoned

59

Như starblue nói, (buffer-substring (mark) (point)) trả lại nội dung của khu vực, nếu nhãn hiệu được đặt. Nếu bạn không muốn string properties, bạn có thể sử dụng biến thể 'buffer-substring-no-properties.

Tuy nhiên, nếu bạn đang viết lệnh tương tác, có cách tốt hơn để có được điểm cuối của khu vực, sử dụng biểu mẫu (interactive "r"). Dưới đây là một ví dụ từ simple.el:

 
(defun count-lines-region (start end) 
    "Print number of lines and characters in the region." 
    (interactive "r") 
    (message "Region has %d lines, %d characters" 
     (count-lines start end) (- end start))) 

Khi gọi từ mã Lisp, hình thức (interactive ...) bị lờ đi, vì vậy bạn có thể sử dụng chức năng này để đếm các dòng trong bất kỳ phần của bộ đệm, không chỉ các khu vực, bằng cách chuyển các đối số thích hợp: ví dụ: (count-lines-region (point-min) (point-max)) để đếm các dòng trong phần thu hẹp của bộ đệm. Nhưng khi được gọi tương tác, biểu mẫu (interactive ...) được đánh giá và mã "r" cung cấp điểm và dấu, dưới dạng hai đối số dạng số, nhỏ nhất trước tiên.

Xem hướng dẫn sử dụng Emacs Lisp, các phần 21.2.1 Using Interactive21.2.2 Code Characters for interactive.

4

Nếu bạn muốn sao chép nội dung vùng trong mã Lisp sang cấu trúc dữ liệu người dùng có thể truy cập như kill-ring, X clipboard hoặc đăng ký, hướng dẫn sử dụng Emacs Lisp khuyến cáo sử dụng filter-buffer-substring thay vì chỉ đơn giản là buffer-substring. Trước khi sao chép, hàm này áp dụng các hàm bộ lọc từ một biến danh sách có tên là filter-buffer-substring-functions. Chức năng là added in version 22.3.

Các vấn đề liên quan