2011-12-04 25 views
12

tôi có chức năng sau đây để in các dòng nơi Vấn đề là đến * cào * buffer,chỉ in các thuộc tính văn bản text ném bỏ

(defun print-line() 
    (print (thing-at-point 'line) (get-buffer "*scratch*"))) 

nhưng nó in ngay cả những thông tin fontified như thế này

#(" OFFICE 
" 0 2 (fontified t org ... 

Làm cách nào để loại bỏ việc in thông tin đã được phân loại.

Trả lời

8

Tôi cần một cái gì đó tương tự cho eredis khi thao tác chuỗi từ một bảng org. Bạn có thể sử dụng `set-text-properties' để loại bỏ chúng khi hiển thị chuỗi.

(defun strip-text-properties(txt) 
    (set-text-properties 0 (length txt) nil txt) 
     txt) 

(defun print-line() 
(print (strip-text-properties 
     (thing-at-point 'line)) 
    (get-buffer "*scratch*"))) 
1

Tôi đã thử một số thứ nhưng thật lạ, tôi không thực sự hiểu cách hoạt động của thuộc tính văn bản.

Ví dụ:

(type-of (thing-at-point 'line)) => string 

Như bạn đã biết nếu một cố gắng để in nó, các thuộc tính được in là tốt, nhưng nếu người ta cố gắng để chèn nó:

(insert (format "%s" (thing-at-point 'line))) 

Chỉ chuỗi được in, không phải thuộc tính.

Vì vậy, có vẻ như với tôi rằng những thuộc tính chỉ là ràng buộc với chuỗi nhưng bạn có thể thao tác chuỗi như thường lệ:

(lenght (thing-at-point 'line)) 
(substring (thing-at-point 'line) 0 2) 

Tuy nhiên, nếu tất cả các bạn muốn là dòng, và dòng duy nhất bạn có thể sử dụng buffer-substring-no-properties:

(defun print-line()  
    (print (buffer-substring-no-properties (point-at-bol) (point-at-eol)))) 
+1

Thậm chí chuỗi bộ đệm cũng in các thư được phông chữ, các thuộc tính đệm-chuỗi con không in mà không có thư được phân loại. –

+0

@Talespin_Kit: Oh bạn hoàn toàn đúng. – Daimrod

16

mở rộng trên đề cập đến buffer-substring-no-properties Daimrod của ...

MxaproposRETno-propertiesRET

buffer-substring-no-properties 
    Function: Return the characters of part of the buffer, without the 
      text properties. 
field-string-no-properties 
    Function: Return the contents of the field around POS, without text 
      properties. 
insert-buffer-substring-no-properties 
    Function: Insert before point a substring of BUFFER, without text 
      properties. 
match-string-no-properties 
    Function: Return string of text matched by last search, without text 
      properties. 
minibuffer-contents-no-properties 
    Function: Return the user input in a minibuffer as a string, without 
      text-properties. 
substring-no-properties 
    Function: Return a substring of STRING, without text properties. 

Bạn có thể đọc về các thuộc tính văn bản trong cuốn hướng dẫn:

M: (info "(elisp) Text Properties") RET

+1

Woa Tôi đã không nhận thấy 'chuỗi con không có thuộc tính', nhưng với nó người ta chỉ có thể làm' (defun print-line() (let ((dòng (điều-điểm-điểm 'dòng))) (chuỗi con-no - dòng sản phẩm 0 (dòng chiều dài)))) '. – Daimrod

+0

@Daimrod Các đối số của 'chuỗi con không có thuộc tính' là tùy chọn. – ceving

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