2009-11-24 5 views
1

Я хочу скопировать текст из одного буфера в другой с помощью текстовых свойств. Итак, у меня естьset text properties

(with-current-buffer from-buffer 
    (setq text-to-copy (buffer-substring beg end))) 

Как вставить текст в копию в другой буфер со всеми свойствами текста? Меня особенно интересуют свойства лица.

Функция буфер подстрока возвращает список, например ("substring" 42 51 (face font-lock-keyword-face) 52 59 (face font-lock-function-name-face))

Если я прохожу этот список (insert text-to-copy), кажется, что он игнорирует свойство текста

ответ

2

Если font-lock-mode включен в целевом буфере вставки, свойство face будет сброшено после того, как будет произведена отрисовка. Думаю, вам нужно либо отключить font-lock-mode, либо изменить свойства текста, чтобы заменить «face» на «font-lock-face» перед вставкой.

+0

да, это был режим блокировки шрифта. Большое спасибо! –

0

«insert» функции должна обрабатывать строки, которые включают Шрифтом- свойства, как есть. Начиная с buffer-substring по умолчанию будет возвращена строка с текстовыми свойствами, если она присутствует, '(insert text-to-copy)' должно быть все, что вам нужно сделать.

Если с другой стороны, вы хотите, чтобы извлечь строку без в текстовые свойства, вы хотите использовать buffer-substring-no-properties вместо

+0

Спасибо за ваш ответ. Кажется, что (insert) не учитывает свойства текста. Они говорят это также в документации для (insert) –

+0

Я только что проверил, и вы правы ... но то, что я основывал на моем ответе, был этот комментарий из справочника elisp по текстовым свойствам (который я помню после прочитав его только вчера, чтобы иметь дело с текстовыми свойствами в чем-то, что я делал): «Копирование текста между строками и буферами сохраняет свойства вместе с символами, включая такие разнообразные функции, как подстрока, вставка и буферная подстрока. " Итак, нечетная, противоречивая информация ... Я полагаю, что единственная опция - перебрать результаты с помощью 'get-text-property' и' set-text-property' - не кажется элегантным, хотя – NikkiA

0

Это должно работать. Это из Emacs 23.1.1:

buffer-substring is a built-in function in `C source code'. 

(buffer-substring start end) 

Return the contents of part of the current buffer as a string. 
The two arguments start and end are character positions; 
they can be in either order. 
The string returned is multibyte if the buffer is multibyte. 

This function copies the text properties of that part of the buffer 
into the result string; if you don't want the text properties, 
use `buffer-substring-no-properties' instead. 

Вы можете использовать команду describe-text-properties в интерактивном режиме, чтобы увидеть, что это вы на самом деле есть:

describe-text-properties is an interactive compiled Lisp function in 
`descr-text.el'. 

It is bound to <C-down-mouse-2> <dp>, <menu-bar> <edit> <props> <dp>. 
(describe-text-properties pos &optional output-buffer) 

Describe widgets, buttons, overlays and text properties at pos. 
Interactively, describe them for the character after point. 
If optional second argument output-buffer is non-nil, 
insert the output into that buffer, and don't initialize or clear it 
otherwise. 
+0

Мне нужно для применения свойств текста, возвращаемых из (буфер-подстрока), в вставленный текст –