Подтвердить что ты не робот

Распечатать только текст, отбрасывающий свойства текста

У меня есть следующая функция, чтобы напечатать строку, в которой точка находится в буфере * scratch *,

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

но он печатает даже измененную информацию, подобную этой

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

Как отменить печать информации о шрифтах.

4b9b3361

Ответ 1

Мне нужно что-то подобное для eredis при манипулировании строками из org-таблицы. Вы можете использовать ` set-text-properties ', чтобы избавиться от них при отображении строки.

(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*")))

Ответ 2

Чтобы развернуть упоминание Daimrod о buffer-substring-no-properties...

M-x apropos RET no-properties RET

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.

Вы можете прочитать о свойствах текста в руководстве:

M-: (информация "(elisp) Свойства текста" ) RET

Ответ 3

Я пробовал некоторые вещи, но это странно, я действительно не понимаю, как работают свойства текста.

Например:

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

Как вы сказали, если кто-то пытается его распечатать, свойства также печатаются, но если вы попытаетесь вставить его:

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

Распечатывается только строка, а не свойства.

Итак, мне кажется, что эти свойства просто привязаны к строке, но вы можете управлять строкой, как обычно:

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

Однако, если все, что вам нужно, это строка, а только строка, вы можете использовать buffer-substring-no-properties:

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