Распечатать только текст, отбрасывающий свойства текста
У меня есть следующая функция, чтобы напечатать строку, в которой точка находится в буфере * scratch *,
(defun print-line ()
(print (thing-at-point 'line) (get-buffer "*scratch*")))
но он печатает даже измененную информацию, подобную этой
#(" OFFICE
" 0 2 (fontified t org ...
Как отменить печать информации о шрифтах.
Ответы
Ответ 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))))