Spec-Zone.ru › Tcl/Tk

текст

ИМЯ
текст, tk_textCopy, tk_textCut, tk_textPaste — Создание и управление виджетами гипертекстового редактирования 'текст'
СИНТАКСИС
СТАНДАРТНЫЕ НАСТРОЙКИ
-background или -bg, background, Фон
-borderwidth или -bd, borderWidth, Ширина границы
-cursor, cursor, Указатель
-exportselection, exportSelection, Экспорт выделения
-font, font, Шрифт
-foreground или -fg, foreground, Цвет переднего плана
-highlightbackground, highlightBackground, Цвет подсветки фона
-highlightcolor, highlightColor, Цвет подсветки
-highlightthickness, highlightThickness, Толщина подсветки
-insertbackground, insertBackground, Цвет вставки
-insertborderwidth, insertBorderWidth, Ширина границы вставки
-insertofftime, insertOffTime, Время выключения
-insertontime, insertOnTime, Время включения
-insertwidth, insertWidth, Ширина вставки
-padx, padX, Отступ
-pady, padY, Отступ
-relief, relief, Вид
-selectbackground, selectBackground, Цвет выделения
-selectborderwidth, selectBorderWidth, Ширина границы выделения
-selectforeground, selectForeground, Цвет фона выделения
-setgrid, setGrid, Установка сетки
-takefocus, takeFocus, Получение фокуса
-xscrollcommand, xScrollCommand, Команда прокрутки по горизонтали
-yscrollcommand, yScrollCommand, Команда прокрутки по вертикали
НАСТРОЙКИ, СПЕЦИФИЧНЫЕ ДЛЯ ВИДЖЕТА
-autoseparators, autoSeparators, Авторазделители
-blockcursor, blockCursor, Маркер блока
-endline, endLine, Конец строки
-height, height, Высота
-inactiveselectbackground, inactiveSelectBackground, Цвет фона
-insertunfocussed, insertUnfocussed, Вставка без фокуса
-maxundo, maxUndo, Макс. отмены
-spacing1, spacing1, Отступ 1
-spacing2, spacing2, Отступ 2
-spacing3, spacing3, Отступ 3
-startline, startLine, Начальная строка
-state, state, Состояние
-tabs, tabs, Табуляции
-tabstyle, tabStyle, Стиль табуляции
-undo, undo, Отмена
-width, width, Ширина
-wrap, wrap, Перенос
ОПИСАНИЕ
ИНДЕКСЫ
строка.символ
@x,y
конец
метка
тег.первый
тег.последний
имя_пути
имя_изображения
+ количество ?подмодификатор? символы
- количество ?подмодификатор? символы
+ количество ?подмодификатор? индексы
- количество ?подмодификатор? индексы
+ количество ?подмодификатор? строки
- количество ?подмодификатор? строки
?подмодификатор? начало_строки
?подмодификатор? конец_строки
?подмодификатор? начало_слова
?подмодификатор? конец_слова
ТЕГИ
-background цвет
-bgstipple растровое_изображение
-borderwidth пиксели
-elide булево
-fgstipple растровое_изображение
-font имя_шрифта
-foreground цвет
-justify выравнивание
-lmargin1 пиксели
-lmargin2 пиксели
-lmargincolor цвет
-offset пиксели
-overstrike булево
-overstrikefg цвет
-relief вид
-rmargin пиксели
-rmargincolor цвет
-selectbackground цвет
-selectforeground цвет
-spacing1 пиксели
-spacing2 пиксели
-spacing3 пиксели
-tabs список_табуляций
-tabstyle стиль
-underline булево
-underlinefg цвет
-wrap режим
МЕТКИ
ВЛОЖЕННЫЕ ОКНА
-align куда
-create скрипт
-padx пиксели
-pady пиксели
-stretch булево
-window имя_пути
ВЛОЖЕННЫЕ ИЗОБРАЖЕНИЯ
-align куда
-image изображение
-name имя_изображения
-padx пиксели
-pady пиксели
ВЫДЕЛЕНИЕ
УКАЗАТЕЛЬ ВСТАВКИ
ФЛАГ ИЗМЕНЕНИЙ
МЕХАНИЗМ ОТМЕНЫ
ЭЛЕМЕНТЫ-ПАРТНЕРЫ
АСИНХРОННОЕ ОБНОВЛЕНИЕ ВЫСОТ СТРОК
КОМАНДА ЭЛЕМЕНТА
pathName bbox index
pathName cget option
pathName compare index1 op index2
pathName configure ?option? ?value option value ...?
pathName count ?options? index1 index2
-chars
-displaychars
-displayindices
-displaylines
-indices
-lines
-xpixels
-ypixels
pathName debug ?boolean?
pathName delete index1 ?index2 ...?
pathName dlineinfo index
pathName dump ?switches? index1 ?index2?
-all
-command command
-image
-mark
-tag
-text
-window
pathName edit option ?arg arg ...?
pathName edit canredo
pathName edit canundo
pathName edit modified ?boolean?
pathName edit redo
pathName edit reset
pathName edit separator
pathName edit undo
pathName get ?-displaychars? ?--? index1 ?index2 ...?
pathName image option ?arg arg ...?
pathName image cget index option
pathName image configure index ?option value ...?
pathName image create index ?option value ...?
pathName image names
pathName index index
pathName insert index chars ?tagList chars tagList ...?
pathName mark option ?arg arg ...?
pathName mark gravity markName ?direction?
pathName mark names
pathName mark next index
pathName mark previous index
pathName mark set markName index
pathName mark unset markName ?markName markName ...?
pathName peer option args
pathName peer create newPathName ?options?
pathName peer names
pathName pendingsync
pathName replace index1 index2 chars ?tagList chars tagList ...?
pathName scan option args
pathName scan mark x y
pathName scan dragto x y
pathName search ?switches? pattern index ?stopIndex?
-forwards
-backwards
-exact
-regexp
-nolinestop
-nocase
-count varName
-all
-overlap
-strictlimits
-elide
--
pathName see index
pathName sync ?-command command?
pathName sync
pathName sync -command command
pathName tag option ?arg arg ...?
pathName tag add tagName index1 ?index2 index1 index2 ...?
pathName tag bind tagName ?sequence? ?script?
pathName tag cget tagName option
pathName tag configure tagName ?option? ?value? ?option value ...?
pathName tag delete tagName ?tagName ...?
pathName tag lower tagName ?belowThis?
pathName tag names ?index?
pathName tag nextrange tagName index1 ?index2?
pathName tag prevrange tagName index1 ?index2?
pathName tag raise tagName ?aboveThis?
pathName tag ranges tagName
pathName tag remove tagName index1 ?index2 index1 index2 ...?
pathName window option ?arg arg ...?
pathName window cget index option
pathName window configure index ?option value ...?
pathName window create index ?option value ...?
pathName window names
pathName xview option args
pathName xview
pathName xview moveto fraction
pathName xview scroll number what
pathName yview ?args?
pathName yview
pathName yview moveto fraction
pathName yview scroll number what
pathName yview ?-pickplace? index
pathName yview number
Связывания
Известные проблемы
Проблемы, связанные с символами и индексами
Проблемы производительности
Известные ошибки
См. также
Ключевые слова

Имя

text, tk_textCopy, tk_textCut, tk_textPaste — Создание и управление виджетами гипертекстового редактирования 'text'

Синопсис

textимя_пути ?параметры?
tk_textCopyимя_пути
tk_textCutимя_пути
tk_textPasteимя_пути

Стандартные параметры

-background или -bg, фон, Цвет фона
-borderwidth или -bd, ширина_рамки, Ширина рамки
-cursor, курсор, Курсор
-exportselection, экспорт_выделения, Экспорт выделения
-font, шрифт, Шрифт
-foreground или -fg, цвет_переднего_плана, Цвет переднего плана
-highlightbackground, выделение_фон, Цвет фона выделения
-highlightcolor, цвет_выделения, Цвет выделения
-highlightthickness, толщина_выделения, Толщина выделения
-insertbackground, вставка_фон, Цвет переднего плана
-insertborderwidth, ширина_вставки_рамки, Ширина рамки вставки
-insertofftime, время_выключения_вставки, Время выключения вставки
-insertontime, время_включения_вставки, Время включения вставки
-insertwidth, ширина_вставки, Ширина вставки
-padx, отступX, Отступ
-pady, отступY, Отступ
-relief, рельеф, Рельеф
-selectbackground, фон_выд_текста, Цвет фона выделенного текста
-selectborderwidth, ширина_рамки_выд_текста, Ширина рамки выделенного текста
-selectforeground, цвет_перед_выд_текста, Цвет переднего плана выделенного текста
-setgrid, сетка, Сетка
-takefocus, фокус, Получение фокуса
-xscrollcommand, команда_гориз_скрол, Команда горизонтальной прокрутки
-yscrollcommand, команда_верт_скрол, Команда вертикальной прокрутки

Параметры, специфичные для виджета

Имя в командной строке: -autoseparators
Имя базы данных: autoSeparators
Класс базы данных: AutoSeparators
Указывает булево значение, определяющее, вставляются ли разделители автоматически в стеке отмены. Имеет смысл только при -undo option=true.
Имя в командной строке: -blockcursor
Имя базы данных: blockCursor
Класс базы данных: BlockCursor
Указывает булево значение, определяющее, отображается ли мигающий курсор вставки как прямоугольный блок размером с символ. Если false (по умолчанию), используется тонкая вертикальная линия для курсора вставки.
Имя в командной строке: -endline
Имя базы данных: endLine
Класс базы данных: EndLine
Указывает целочисленный индекс строки, представляющий строку в базовом хранилище текстовых данных, которая должна следовать сразу после последней строки, содержащейся в виджете. Это позволяет виджету текста отображать только часть большего текста. Вместо целого числа для этого параметра конфигурации можно указать пустую строку, что настроит виджет на окончание последней строки в хранилище текстовых данных.
Имя в командной строке: -height
Имя базы данных: height
Класс базы данных: Height
Указывает желаемую высоту окна в единицах символов шрифта, заданного параметром -font. Должно быть не меньше одного.
Имя в командной строке: -inactiveselectbackground
Имя базы данных: inactiveSelectBackground
Класс базы данных: Foreground
Указывает цвет, который следует использовать для выделения (тег sel), когда окно не имеет фокуса ввода. Если пусто, то {}, выделение не отображается, когда окно не имеет фокуса.
Имя в командной строке: -insertunfocussed
Имя базы данных: insertUnfocussed
Класс базы данных: InsertUnfocussed
Указывает, как отобразить курсор вставки, когда виджет не имеет фокуса. Должно быть none (по умолчанию), что означает не отображать курсор, hollow, что означает отобразить пустую рамку, или solid, что означает отобразить заполненную рамку. Обратите внимание, что hollow и solid будут выглядеть очень похоже, когда параметр -blockcursor имеет значение false.
Имя в командной строке: -maxundo
Имя базы данных: maxUndo
Класс базы данных: MaxUndo
Указывает максимальное количество составных действий отмены в стеке отмены. Значение 0 или отрицательное значение подразумевают неограниченный стек отмены.
Имя в командной строке: -spacing1
Имя базы данных: spacing1
Класс базы данных: Spacing1
Запрашивает дополнительное пространство над каждой строкой текста в виджете, используя стандартные формы экранных расстояний. Если строка переносится, этот параметр применяется только к первой строке на экране. Этот параметр можно переопределить параметрами -spacing1 в тегах.
Имя в командной строке: -spacing2
Имя базы данных: spacing2
Класс базы данных: Spacing2
Для строк, которые переносятся (так что они занимают более одной строки на экране), этот параметр определяет дополнительное пространство для размещения между строками отображения, представляющими одну строку текста. Значение может иметь любую из стандартных форм экранных расстояний. Этот параметр можно переопределить параметрами -spacing2 в тегах.
Имя в командной строке: -spacing3
Имя базы данных: spacing3
Класс базы данных: Spacing3
Запрашивает дополнительное пространство под каждой строкой текста в виджете, используя стандартные формы экранных расстояний. Если строка переносится, этот параметр применяется только к последней строке на экране. Этот параметр можно переопределить параметрами -spacing3 в тегах.
Имя в командной строке: -startline
Имя базы данных: startLine
Класс базы данных: StartLine
Указывает целочисленный индекс строки, представляющий первую строку базового хранилища текстовых данных, которая должна содержаться в виджете. Это позволяет виджету текста отображать только часть большего текста. Вместо целого числа для этого параметра конфигурации можно указать пустую строку, что настроит виджет на начало с первой строки в хранилище текстовых данных.
Имя в командной строке: -state
Имя базы данных: state
Класс базы данных: State
Указывает одно из двух состояний текста: normal или disabled. Если текст отключен, то символы не могут быть вставлены или удалены, и курсор вставки не будет отображаться, даже если фокус ввода находится в виджете.
Имя в командной строке: -tabs
Имя базы данных: tabs
Класс базы данных: Tabs
Указывает набор отступов для окна. Значение параметра состоит из списка экранных расстояний, задающих позиции отступов, каждый из которых представляет расстояние относительно левого края виджета (исключая границы, отступы и т. д.). Каждая позиция может быть дополнена одним из ключевых слов left, right, center или numeric, которое определяет, как выровнять текст относительно отступа. Left является по умолчанию; это приводит к тому, что текст, следующий за символом табуляции, располагается так, что его левый край находится в позиции табуляции. Right означает, что правый край текста, следующего за символом табуляции, размещается в позиции табуляции, а center означает, что текст центрируется в позиции табуляции. Numeric означает, что десятичная точка в тексте размещается в позиции табуляции; если десятичной точки нет, то наименее значащая цифра числа размещается сразу слева от позиции табуляции; если в тексте нет числа, то текст выравнивается по правому краю в позиции табуляции. Например, «-tabs {2c left 4c 6c center}» создаёт три отступа с интервалами в два сантиметра; первые два используют выравнивание по левому краю, а третий — по центру.

Если в списке отступов недостаточно элементов для покрытия всех табуляций в строке, Tk экстраполирует новые отступы, используя отступ и выравнивание из последнего отступа в списке. Расстояния до отступов должны быть строго положительными и должны всегда увеличиваться от одного отступа к другому (иначе произойдет ошибка). Значение параметра -tabs может быть переопределено параметрами -tabs в тегах.

Если параметр -tabs не указан или указан как пустой список, Tk использует стандартные отступы, размещенные через каждые восемь (среднего размера) символов. Чтобы добиться другого стандартного интервала, например, каждые 4 символа, просто настройте виджет с помощью «-tabs "[expr {4 * [font measure $font 0]}] left" -tabstyle wordprocessor».

Имя в командной строке: -tabstyle
Имя базы данных: tabStyle
Класс базы данных: TabStyle
Указывает, как интерпретировать взаимосвязь между отступами в строке и табуляциями в тексте этой строки. Значение должно быть tabular (по умолчанию) или wordprocessor. Обратите внимание, что табуляции интерпретируются по мере их обнаружения в тексте. Если стиль табуляции tabular, то n-й символ табуляции в тексте строки будет ассоциирован с n-м отступом, определенным для этой строки. Если координата символа табуляции оказывается справа от n-го отступа, то в качестве резервного варианта вставляется пробел. Если стиль табуляции wordprocessor, то любая табуляция, которая будет выстраиваться, будет использовать (и определятся) первым отступом справа от уже размещенных символов в этой строке. Значение параметра -tabstyle может быть переопределено параметрами -tabstyle в тегах.
Имя в командной строке: -undo
Имя базы данных: undo
Класс базы данных: Undo
Указывает булево значение, определяющее, активен ли механизм отмены.
Имя в командной строке: -width
Имя базы данных: width
Класс базы данных: Width
Указывает желаемую ширину окна в единицах символов шрифта, заданного параметром -font. Если шрифт имеет неравномерную ширину, то для перевода из единиц символов в экранные единицы используется ширина символа “0”.
Имя в командной строке: -wrap
Имя базы данных: wrap
Класс базы данных: Wrap
Указывает, как обрабатывать строки текста, которые слишком длинные для отображения в одной строке окна текста. Значение должно быть none или char или word. Режим обрезки none означает, что каждая строка текста отображается ровно в одной строке на экране; дополнительные символы, которые не помещаются на экран, не отображаются. В других режимах каждая строка текста будет разбита на несколько строк экрана, если это необходимо, чтобы все символы были видны. В режиме char разрыв строки на экране может происходить после любого символа; в режиме word разрыв строки будет происходить только на границах слов.

Описание

Команда text создаёт новое окно (указанное аргументом pathName) и преобразует его в виджет текста. Дополнительные параметры, описанные выше, можно указать в командной строке или в базе данных параметров для настройки аспектов текста, таких как цвет фона и рельеф по умолчанию. Команда text возвращает имя пути нового окна.

Виджет текста отображает одну или несколько строк текста и позволяет редактировать этот текст. Виджеты текста поддерживают четыре разных типа аннотаций текста, называемые тегами, метками, встроенными окнами или встроенными изображениями. Теги позволяют отображать разные части текста с разными шрифтами и цветами. Кроме того, команды Tcl можно ассоциировать с тегами, чтобы вызывать скрипты при выполнении определённых действий, таких как нажатие клавиш и кнопок мыши в определённых участках текста. Подробнее см. ТЕГИ ниже.

Второй тип аннотации состоит из плавающих маркеров в тексте, называемых «метками». Метки используются для отслеживания различных интересных позиций в тексте по мере его редактирования. Подробнее см. МЕТКИ ниже.

Третий тип аннотации позволяет встраивать произвольные окна в виджет текста. Подробнее см. ВСТРОЕННЫЕ ОКНА ниже.

Четвёртый тип аннотации позволяет встраивать изображения Tk в виджет текста. Подробнее см. ВСТРОЕННЫЕ ИЗОБРАЖЕНИЯ ниже.

Виджет текста также имеет встроенный механизм отмены/повтора. Подробнее см. МЕХАНИЗМ ОТМЕНЫ ниже.

Виджет текста позволяет создавать виджеты-партнёры. Это другие виджеты текста, которые используют одни и те же базовые данные (текст, метки, теги, изображения и т. д.). Подробнее см. ВИДЖЕТЫ-ПАРТНЁРЫ ниже.

Индексы

Многие команды виджетов для текстов принимают один или несколько индексов в качестве аргументов. Индекс — это строка, используемая для указания определённого места в тексте, например, места для вставки символов или одного из концов диапазона символов для удаления. Индексы имеют синтаксис
base modifier modifier modifier ...
Где base задаёт начальную точку, а modifierы корректируют индекс от начальной точки (например, передвигают вперёд или назад на один символ). Каждый индекс должен содержать base, но modifierы являются необязательными. Большинство модификаторов (как описано ниже) допускают необязательный подмодификатор. Действительными подмодификаторами являются any и отображение. Если подмодификатор сокращён, то за ним должен следовать пробел, но в противном случае пробела между подмодификатором и последующим модификатором быть не должно. Как правило, подмодификатор отображение изменяет значение последующего модификатора, чтобы он ссылался на визуальные или несокращённые единицы, а не на логические, но это объясняется для каждого соответствующего случая ниже. Наконец, там, где количество используется в качестве части модификатора, оно может быть положительным или отрицательным, поэтому «основание - -3 строки» вполне допустимо (и эквивалентно «основание +3 строки»).

Для индекса основание должно иметь одну из следующих форм:

строка.символ
Указывает символ-ый символ в строке строка. Строки нумеруются с 1 для согласованности с другими программами UNIX, которые используют эту систему нумерации. Внутри строки символы нумеруются с 0. Если символ равен конец, то он относится к символу новой строки, который заканчивает строку.
@x,y
Указывает символ, который покрывает пиксель с координатами x и y по оси x и y внутри окна текста.
конец
Указывает конец текста (символ сразу после последней новой строки).
метка
Указывает символ, расположенный сразу после метки с именем метка.
тег.первый
Указывает первый символ в тексте, помеченный тегом тег. Эта форма генерирует ошибку, если в настоящее время никакие символы не помечены тегом тег.
тег.последний
Указывает символ, расположенный сразу после последнего символа в тексте, помеченного тегом тег. Эта форма генерирует ошибку, если в настоящее время никакие символы не помечены тегом тег.
имяПути
Указывает позицию вложенного окна с именем имяПути. Эта форма генерирует ошибку, если нет вложенного окна с указанным именем.
имяИзображения
Указывает позицию вложенного изображения с именем имяИзображения. Эта форма генерирует ошибку, если нет вложенного изображения с указанным именем.

Если основание может соответствовать более чем одной из вышеперечисленных форм, например, метке и имениИзображения, имеющим одинаковое значение, то приоритет отдается форме, расположенной выше в списке. Если за индексом основания следуют модификаторы, каждый из них должен иметь одну из форм, перечисленных ниже. Ключевые слова, такие как символы и конецСлова, могут быть сокращены, если сокращение однозначно.

+ количество ?подмодификатор? символы
Смещает индекс вперёд на количество символов, переходя к последующим строкам текста при необходимости. Если после текущего индекса в тексте меньше количества символов, то индекс устанавливается на последний индекс в тексте. Пробелы по обеим сторонам от количества необязательны. Если задан подмодификатор отображение, то пропускаются сокращённые символы, не учитывая их при подсчёте. Если задан любой, то учитываются все символы. По историческим причинам, если ни один модификатор не задан, то счёт происходит в единицах позиций индекса (см. ИНДЕКСЫ для получения подробной информации). Это поведение может быть изменено в будущей крупной версии, поэтому, если вам нужен подсчёт индексов, рекомендуется использовать индексы там, где это возможно.
- количество ?подмодификатор? символы
Смещает индекс назад на количество символов, переходя к предыдущим строкам текста при необходимости. Если перед текущим индексом в тексте меньше количества символов, то индекс устанавливается на первый индекс в тексте (1.0). Пробелы по обеим сторонам от количества необязательны. Если задан подмодификатор отображение, то пропускаются сокращённые символы, не учитывая их при подсчёте. Если задан любой, то учитываются все символы. По историческим причинам, если ни один модификатор не задан, то счёт происходит в единицах позиций индекса (см. ИНДЕКСЫ для получения подробной информации). Это поведение может быть изменено в будущей крупной версии, поэтому, если вам нужен подсчёт индексов, рекомендуется использовать индексы там, где это возможно.
+ количество ?подмодификатор? индексы
Смещает индекс вперёд на количество позиций индекса, переходя к последующим строкам текста при необходимости. Если после текущего индекса в тексте меньше количества позиций индекса, то индекс устанавливается на последнюю позицию индекса в тексте. Пробелы по обеим сторонам от количества необязательны. Обратите внимание, что позиция индекса — это либо один символ, либо одно вложенное изображение, либо одно вложенное окно. Если задан подмодификатор отображение, то пропускаются сокращённые индексы, не учитывая их при подсчёте. Если задан любой, то учитываются все индексы; это также является стандартным поведением, если ни один модификатор не задан.
- количество ?подмодификатор? индексы
Смещает индекс назад на количество позиций индекса, переходя к предыдущим строкам текста при необходимости. Если перед текущим индексом в тексте меньше количества позиций индекса, то индекс устанавливается на первую позицию индекса (1.0) в тексте. Пробелы по обеим сторонам от количества необязательны. Если задан подмодификатор отображение, то пропускаются сокращённые индексы, не учитывая их при подсчёте. Если задан любой, то учитываются все индексы; это также является стандартным поведением, если ни один модификатор не задан.
+ количество ?подмодификатор? строки
Смещает индекс вперёд на количество строк, сохраняя ту же позицию символа внутри строки. Если после строки, содержащей текущий индекс, меньше количества строк, то индекс устанавливается на ту же позицию символа в последней строке текста. Затем, если строка недостаточно длинна, чтобы содержать символ в указанной позиции символа, позиция символа корректируется, чтобы указывать на последний символ строки (символ новой строки). Пробелы по обеим сторонам от количества необязательны. Если задан подмодификатор отображение, то каждая визуальная строка отображения подсчитывается отдельно. В противном случае, если задан любой (или нет модификатора), то каждая логическая строка (независимо от того, сколько раз она визуально обрезается) учитывается только один раз. Если соответствующие строки не обрезаны, то эти два способа подсчёта эквивалентны.
- количество ?подмодификатор? строки
Смещает индекс назад на количество логических строк, сохраняя ту же позицию символа внутри строки. Если перед строкой, содержащей текущий индекс, меньше количества строк, то индекс устанавливается на ту же позицию символа в первой строке текста. Затем, если строка недостаточно длинна, чтобы содержать символ в указанной позиции символа, позиция символа корректируется, чтобы указывать на последний символ строки (символ новой строки). Пробелы по обеим сторонам от количества необязательны. Если задан подмодификатор отображение, то каждая визуальная строка отображения подсчитывается отдельно. В противном случае, если задан любой (или нет модификатора), то каждая логическая строка (независимо от того, сколько раз она визуально обрезается) учитывается только один раз. Если соответствующие строки не обрезаны, то эти два способа подсчёта эквивалентны.
?подмодификатор? началоСтроки
Смещает индекс, чтобы он ссылался на первый индекс в строке. Если задан подмодификатор отображение, это первый индекс в строке отображения, в противном случае — в логической строке.
?подмодификатор? конецСтроки
Смещает индекс, чтобы он ссылался на последний индекс в строке (символ новой строки). Если задан подмодификатор отображение, это последний индекс в строке отображения, в противном случае — в логической строке.
?подмодификатор? началоСлова
Смещает индекс, чтобы он ссылался на первый символ слова, содержащего текущий индекс. Слово состоит из любого количества смежных символов, которые являются буквами, цифрами или символами подчёркивания, или одного символа, который не является одним из них. Если задан подмодификатор отображение, рассматриваются только несокращённые символы, в противном случае рассматриваются все символы (сокращённые или нет).
?подмодификатор? конецСлова
Смещает индекс, чтобы он ссылался на символ, расположенный сразу после последнего символа слова, содержащего текущий индекс. Если текущий индекс ссылается на последний символ текста, то он не изменяется. Если задан подмодификатор отображение, рассматриваются только несокращённые символы, в противном случае рассматриваются все символы (сокращённые или нет).

Если присутствует более одного модификатора, то они применяются в порядке слева направо. Например, индекс «конец - 1 символ» относится к предпоследнему символу в тексте, а «вставка началоСлова - 1 с» относится к символу, расположенному непосредственно перед первым символом в слове, содержащем курсор вставки. Модификаторы применяются один за другим в этом порядке слева направо, и после каждого шага результирующий индекс ограничен тем, чтобы быть допустимым индексом в виджете текста. Например, индекс «1.0 -1с +1с» относится к индексу «2.0».

Если модификаторы приводят к изменению индекса с помощью строк отображения, символов отображения или индексов отображения, а основание относится к индексу внутри сокращённого тега, то это основание индекса считается эквивалентным первому последующему несокращённому индексу.

Теги

Первая форма аннотации в виджетах текста — тег. Тег — это текстовая строка, которая связана с некоторыми символами в тексте. Теги могут содержать произвольные символы, но лучше избегать использования символов « » (пробел), + или -: эти символы имеют специальное значение в индексах, поэтому теги, содержащие их, не могут использоваться как индексы. Может быть любое количество тегов, связанных с символами в тексте. Каждый тег может ссылаться на один символ, диапазон символов или несколько диапазонов символов. Отдельный символ может иметь любое количество связанных с ним тегов.

Определён порядок приоритетов среди тегов, и этот порядок используется при реализации некоторых функций, связанных с тегами, описанных ниже. Когда тег определяется (путем связывания его с символами или установления параметров отображения или привязки команд к нему), ему присваивается более высокий приоритет, чем любому существующему тегу. Порядок приоритетов тегов может быть переопределён с помощью команд виджета «имяПути тег повысить» и «имяПути тег понизить».

Теги служат трём целям в виджетах текста. Во-первых, они управляют способом отображения информации на экране. По умолчанию символы отображаются в соответствии с параметрами -background, -font и -foreground для виджета текста. Однако параметры отображения могут быть связаны с отдельными тегами с помощью команды виджета «имяПути тег настроить». Если символ помечен тегом, то параметры отображения, связанные с тегом, переопределяют стандартный стиль отображения. В настоящее время поддерживаются следующие параметры для тегов:

-background цвет
Цвет задаёт цвет фона для символов, связанных с тегом. Он может иметь любой из форматов, принятых Tk_GetColor.
-bgstipple растровый рисунок
Растровый рисунок задаёт растровый рисунок, используемый в качестве узора фона. Он может иметь любой из форматов, принятых Tk_GetBitmap. Если растровый рисунок не указан или задан как пустая строка, для фона будет использоваться сплошная заливка.
-borderwidth пиксели
Пиксели задают ширину рамки, которая рисуется вокруг тега, используя любой из форматов, принятых Tk_GetPixels. Этот параметр следует использовать совместно с параметром -relief для получения желаемого вида рамки.
-elide логическое значение
Логическое значение указывает, нужно ли обрезать данные. Обрезанные данные (символы, изображения, вставленные окна и т.д.) не отображаются и не занимают места на экране, но в дальнейшем ведут себя как обычные данные.
-fgstipple растровый рисунок
Растровый рисунок задаёт растровый рисунок, используемый в качестве узора при рисовании текста и другой информации переднего плана, такой как подчеркивание. Он может иметь любой из форматов, принятых Tk_GetBitmap. Если растровый рисунок не указан или задан как пустая строка, используется сплошная заливка.
-font имя шрифта
Имя шрифта — имя шрифта, используемого для отображения символов. Он может иметь любой из форматов, принятых Tk_GetFont.
-foreground цвет
Цвет задаёт цвет, используемый для рисования текста и другой информации переднего плана, такой как подчеркивание. Он может иметь любой из форматов, принятых Tk_GetColor.
-justify выравнивание
Если первый не обрезанный символ строки отображения имеет тег, для которого указан этот параметр, то выравнивание определяет способ выравнивания строки. Он должен быть равен left, right или center. Если строка переносится на новую строку, то выравнивание каждой строки на экране определяется первым не обрезанным символом этой строки отображения.
-lmargin1 пиксели
Если первый не обрезанный символ строки текста имеет тег, для которого задан этот параметр, то пиксели задают величину отступа строки от левого края окна. Пиксели могут иметь любой из стандартных форматов для экранных расстояний. Если строка текста переносится на новую строку, этот параметр применяется только к первой строке на экране; параметр -lmargin2 управляет отступом для последующих строк.
-lmargin2 пиксели
Если первый не обрезанный символ строки отображения имеет тег, для которого задан этот параметр, и если строка отображения не является первой для своей строки текста (т.е., строка текста перенесена на новую строку), то пиксели задают величину отступа строки от левого края окна. Пиксели могут иметь любой из стандартных форматов для экранных расстояний. Этот параметр используется только при включённом переносе и применяется только ко второй и последующим строкам отображения для строки текста.
-lmargincolor цвет
Цвет задаёт цвет фона в областях, не содержащих символов, потому что они отступлены параметрами -lmargin1 или -lmargin2. Он может иметь любой из форматов, принятых Tk_GetColor. Если цвет не указан или указан как пустая строка, используется цвет, заданный параметром виджета -background.
-offset пиксели
Пиксели задают величину вертикального смещения базовой линии текста от базовой линии всей строки в пикселях. Например, положительный отступ может использоваться для надстрочных индексов, а отрицательный — для подстрочных индексов. Пиксели могут иметь любой из стандартных форматов для экранных расстояний.
-overstrike логическое значение
Указывает, нужно ли рисовать горизонтальную линию посередине символов. Логическое значение может иметь любой из форматов, принятых Tcl_GetBoolean.
-overstrikefg цвет
Цвет задаёт цвет, используемый для отображения перечёркивания. Он может иметь любой из форматов, принятых Tk_GetColor. Если цвет не указан или указан как пустая строка, используется цвет, заданный параметром тега -foreground.
-relief рельеф
Рельеф задаёт стиль рельефа для рисования рамки в любом из форматов, принятых Tk_GetRelief. Этот параметр используется совместно с параметром -borderwidth для задания желаемого вида рамки.
-rmargin пиксели
Если первый не обрезанный символ строки отображения имеет тег, для которого указан этот параметр, то пиксели задают ширину отступа между концом строки и правым краем окна. Пиксели могут иметь любой из стандартных форматов для экранных расстояний. Этот параметр используется только при включённом переносе. Если строка текста переносится на новую строку, правое поле для каждой строки отображения определяется первым не обрезанным символом этой строки отображения.
-rmargincolor цвет
Цвет задаёт цвет фона в областях, не содержащих символов, потому что они отступлены параметром -rmargin1. Он может иметь любой из форматов, принятых Tk_GetColor. Если цвет не указан или указан как пустая строка, используется цвет, заданный параметром виджета -background.
-selectbackground цвет
Цвет задаёт цвет фона при отображении выделенных элементов. Он может иметь любой из форматов, принятых Tk_GetColor. Если цвет не указан или указан как пустая строка, используется цвет, заданный параметром тега -background.
-selectforeground цвет
Цвет задаёт цвет переднего плана при отображении выделенных элементов. Он может иметь любой из форматов, принятых Tk_GetColor. Если цвет не указан или указан как пустая строка, используется цвет, заданный параметром тега -foreground.
-spacing1 пиксели
Пиксели задают дополнительное пространство, которое должно оставаться над каждой строкой текста, используя любой из стандартных форматов экранных расстояний. Если строка переносится на новую строку, этот параметр применяется только к первой строке на экране.
-spacing2 пиксели
Для строк, которые переходят на новую строку, этот параметр задаёт дополнительное пространство между строками отображения для одной строки текста. Пиксели могут иметь любой из стандартных форматов для экранных расстояний.
-spacing3 пиксели
Пиксели задают дополнительное пространство, которое должно оставаться под каждой строкой текста, используя любой из стандартных форматов экранных расстояний. Если строка переносится на новую строку, этот параметр применяется только к последней строке на экране.
-tabs список_табуляций
Список_табуляций задаёт набор остановок табуляции в том же формате, что и параметр -tabs для виджета текста. Этот параметр применяется только к строке отображения, если он применяется к первому не обрезанному символу этой строки отображения. Если этот параметр задан как пустая строка, он отменяет параметр, оставляя его неопределённым для тега (по умолчанию). Если параметр задан как непустая строка, которая является пустым списком, например -tags { }, он запрашивает стандартные табуляции через 8 символов, как описано для параметра виджета -tags.
-tabstyle стиль
Стиль задаёт либо табличный, либо текстовый стиль табуляции для использования виджета текста. Этот параметр применяется только к строке отображения, если он применяется к первому не обрезанному символу этой строки отображения. Если этот параметр задан как пустая строка, он отменяет параметр, оставляя его неопределённым для тега (по умолчанию).
-underline логическое значение
Логическое значение указывает, нужно ли рисовать черту под символами. Он может иметь любой из форматов, принятых Tcl_GetBoolean.
-underlinefg цвет
Цвет задаёт цвет, используемый для отображения подчеркивания. Он может иметь любой из форматов, принятых Tk_GetColor. Если цвет не указан или указан как пустая строка, используется цвет, заданный параметром тега -foreground.
-wrap режим
Режим задаёт способ обработки строк, которые шире, чем окно текста. Он имеет те же допустимые значения, что и параметр -wrap для виджета текста: none, char или word. Если этот параметр тега задан, он переопределяет параметр -wrap для виджета текста.

Если символ имеет несколько связанных с ним тегов и их параметры отображения конфликтуют, используются параметры тега с наивысшим приоритетом. Если какой-либо параметр отображения не задан для конкретного тега или задан как пустая строка, он никогда не будет использоваться; вместо него будет использоваться параметр тега с более высоким приоритетом. Если ни один тег не указывает определённый параметр отображения, будет использован стандартный стиль виджета.

Вторая функция тегов — привязка событий. Вы можете связать привязки с тегом так же, как и с классом виджета: при возникновении определённых событий X на символах с заданным тегом будет выполняться определённая команда Tcl. Привязки тегов можно использовать для задания поведения диапазонов символов; среди прочего, это позволяет реализовать функции типа гипертекста. Подробнее см. описание команды виджета «имя_пути tag bind» ниже. Привязки тегов разделяются между всеми связанными виджетами (включая любые привязки для специального тега sel).

Третье назначение тегов — управление выделением. См. ВЫДЕЛЕНИЕ ниже. За исключением специального тега sel, все теги разделяются между связанными виджетами текста и могут быть изменены из любого такого виджета на равных основаниях. Тег sel существует отдельно и независимо в каждом связанном виджете текста (но любые привязки тегов к sel разделяются).

Отметки

Второй способ аннотации в текстовых виджетах — метка. Метки используются для запоминания определённых мест в тексте. Они похожи на теги, так как имеют имена и ссылаются на места в файле, но метка не связана с конкретными символами. Вместо этого метка связана с промежутком между двумя символами. В любой момент времени с меткой может быть связана только одна позиция. Если символы вокруг метки удаляются, метка останется; у неё появятся новые соседние символы. Напротив, если удаляются символы, содержащие тег, то тег больше не будет связан с символами в файле. Метки можно манипулировать с помощью команды виджета «имяПути метка», а их текущие местоположения можно определить, используя имя метки в качестве индекса в командах виджета.

Каждая метка также имеет «тяготение», которое может быть слева или справа. Тяготение метки определяет, что происходит с меткой при вставке текста в точку метки. Если у метки тяготение влево, то метка обрабатывается как прикреплённая к символу слева, поэтому метка останется слева от любого вставленного текста в позиции метки. Если у метки тяготение вправо, новый вставленный текст появится слева от метки (так что метка остаётся справа). Тяготение метки по умолчанию — справа.

Пространство имён для меток отличается от пространства имён для тегов: одно и то же имя может использоваться как для метки, так и для тега, но они будут ссылаться на разные вещи.

Две метки имеют особое значение. Во-первых, метка insert связана с курсором вставки, как описано ниже в разделе КУРСОР ВСТАВКИ. Во-вторых, метка current связана с символом, ближайшим к мыши, и автоматически корректируется, отслеживая позицию мыши и любые изменения в тексте виджета (исключение: current не обновляется при перемещении мыши, если нажата кнопка мыши; обновление отложится до тех пор, пока все кнопки мыши не будут отпущены). Ни одну из этих специальных меток нельзя удалить. За исключением этих двух специальных меток, все метки общие для сопоставимых текстовых виджетов и могут быть изменены на равных условиях из любого сопоставимого виджета.

Встроенные окна

Третий тип аннотации в текстовых виджетах — встроенное окно. Каждая аннотация встроенного окна вызывает отображение окна в определённой точке текста. В текстовом виджете может быть любое количество встроенных окон, и любой виджет может использоваться как встроенное окно (подчиняясь обычным правилам управления геометрией, которые требуют, чтобы текстовое окно было родительским для встроенного окна или потомком его родителя).

Положение встроенного окна на экране будет обновляться при изменении или прокрутке текста, и оно будет отображаться и скрываться, когда оно входит в и выходит из видимой области текстового виджета. Каждое встроенное окно занимает одну единицу индексного пространства в текстовом виджете, и к нему можно обратиться либо по имени встроенного окна, либо по его позиции в индексном пространстве виджета. Если удаляется диапазон текста, содержащего встроенное окно, то окно уничтожается. Точно так же, если сам текстовый виджет удаляется, то окно уничтожается.

Игнорирование встроенного окна сразу после его планирования для создания с помощью имяПути создание окна индекс -создание предотвратит его фактическое создание. Отмена игнорирования встроенного окна, запланированного для создания с помощью имяПути создание окна индекс -создание, автоматически запустит связанный скрипт создания. После уничтожения игнорируемого встроенного окна последнее не будет автоматически пересоздано.

При добавлении встроенного окна в текстовый виджет с помощью команды виджета имяПути создание окна, с ним могут быть связаны несколько параметров конфигурации. Эти параметры можно изменить позже с помощью команды виджета имяПути настройка окна. В настоящее время поддерживаются следующие параметры:

-выравнивание где
Если окно не такое высокое, как строка, в которой оно отображается, этот параметр определяет, где отображается окно в строке. Где должно иметь одно из значений верх (выровнять верхнюю часть окна с верхней частью строки), центр (выровнять окно по центру в пределах строки), низ (выровнять нижнюю часть окна с нижней частью области строки) или основание (выровнять нижнюю часть окна с основанием строки).
-создание скрипт
Указывает скрипт Tcl, который можно оценить для создания окна для аннотации. Если для аннотации не указан параметр -окно, этот скрипт будет оценен, когда аннотация будет отображаться на экране. Скрипт должен создать окно для аннотации и вернуть имя этого окна в качестве результата. В скрипте будут выполнены две замены до оценки. %W будет заменён именем родительского текстового виджета, а %% будет заменён на один %. Если окно аннотации когда-либо будет удалено, скрипт будет повторно оценён при следующем отображении аннотации.
-отступX пиксели
Пиксели задают количество дополнительного места, которое нужно оставить с каждой стороны встроенного окна. Оно может иметь любой из обычных форматов, определённых для экранного расстояния.
-отступY пиксели
Пиксели задают количество дополнительного места, которое нужно оставить сверху и снизу встроенного окна. Оно может иметь любой из обычных форматов, определённых для экранного расстояния.
-растянуть логическое значение
Если требуемая высота встроенного окна меньше высоты строки, в которой оно отображается, этот параметр можно использовать, чтобы указать, следует ли растянуть окно по вертикали, чтобы заполнить строку. Если параметр -отступY также указан, то требуемый отступ будет сохранён, даже если окно растянуто.
-окно имяПути
Указывает имя окна для отображения в аннотации. Обратите внимание, что если для имяПути установлено значение, то последующая настройка окна на пустую строку не удалит виджет, соответствующий старому имяПути. Вместо этого он удалит связь между старым имяПути и текстовым виджетом. Если используются несколько сопоставимых виджетов, обычно проще использовать параметр -создание, если желаемы встроенные окна в каждом сопоставимом виджете.

Встроенные изображения

Конечный тип аннотации в текстовых виджетах — встроенное изображение. Каждая аннотация встроенного изображения вызывает отображение изображения в определённой точке текста. В текстовом виджете может быть любое количество встроенных изображений, и определённое изображение может быть встроено в несколько мест в одном и том же текстовом виджете.

Положение встроенного изображения на экране будет обновляться при изменении или прокрутке текста. Каждое встроенное изображение занимает одну единицу индексного пространства в текстовом виджете, и к нему можно обратиться либо по его позиции в индексном пространстве виджета, либо по имени, присвоенному ему при вставке изображения в текстовый виджет с помощью имяПути создание изображения. Если удаляется диапазон текста, содержащего встроенное изображение, то эта копия изображения удаляется с экрана.

Игнорирование встроенного изображения сразу после его планирования для создания с помощью имяПути создание изображения индекс -создание предотвратит его фактическое создание. Отмена игнорирования встроенного изображения, запланированного для создания с помощью имяПути создание изображения индекс -создание, автоматически запустит связанный скрипт создания. После уничтожения игнорируемого встроенного изображения последнее не будет автоматически пересоздано.

При добавлении встроенного изображения в текстовый виджет с помощью команды виджета имяПути создание изображения возвращается уникальное имя для этого экземпляра изображения. Это имя можно использовать для ссылки на этот экземпляр изображения. Имя берётся из значения параметра -имя (описано ниже). Если параметр -имя не указан, используется имя -изображение. Если имяИзображения уже используется в текстовом виджете, к концу имяИзображения добавляется #nn, где nn — произвольное целое число. Это гарантирует уникальность имяИзображения. После присвоения имени этому экземпляру изображения оно не меняется, даже если значения -изображение или -имя можно изменить с помощью имяПути настройка изображения.

При добавлении встроенного изображения в текстовый виджет с помощью команды виджета имяПути создание изображения, могут быть связаны несколько параметров конфигурации. Эти параметры можно изменить позже с помощью команды виджета имяПути настройка изображения. В настоящее время поддерживаются следующие параметры:

-выравнивание где
Если изображение не такое высокое, как строка, в которой оно отображается, этот параметр определяет, где отображается изображение в строке. Где должно иметь одно из значений верх (выровнять верхнюю часть изображения с верхней частью строки), центр (выровнять изображение по центру в пределах строки), низ (выровнять нижнюю часть изображения с нижней частью области строки) или основание (выровнять нижнюю часть изображения с основанием строки).
-изображение изображение
Указывает имя изображения Tk для отображения в аннотации. Если изображение не является допустимым изображением Tk, возвращается ошибка.
-имя ИмяИзображения
Указывает имя, по которому этот экземпляр изображения можно ссылаться в текстовом виджете. Если ИмяИзображения не указано, используется имя изображения Tk. Если имяИзображения уже используется, к концу имени добавляется #nn, как описано выше.
-отступX пиксели
Пиксели задают количество дополнительного места, которое нужно оставить с каждой стороны встроенного изображения. Оно может иметь любой из обычных форматов, определённых для экранного расстояния.
-отступY пиксели
Пиксели задают количество дополнительного места, которое нужно оставить сверху и снизу встроенного изображения. Оно может иметь любой из обычных форматов, определённых для экранного расстояния.

Выбор

Поддержка выбора реализована через теги. Если параметр -exportselection для текстового виджета имеет значение true, то тег sel будет связан с выбором:
  1. Всякий раз, когда символы маркируются тегом sel, текстовый виджет заявляет о владении выбором.
  2. Попытки получить выбор будут обслуживаться текстовым виджетом, возвращая все символы с тегом sel.
  3. Если выбор затребован другой программой или другим окном в этой программе, то тег sel будет удалён из всех символов.
  4. Всякий раз, когда изменяется диапазон тега sel, генерируется виртуальное событие <<Выбор>>.

Тег sel автоматически определяется при создании текстового виджета и не может быть удален командой виджета «имяПути удалитьТег». Кроме того, опции -selectbackground, -selectborderwidth и -selectforeground для текстового виджета связаны с опциями -background, -borderwidth и -foreground для тега sel: изменения в любом из них автоматически будут отражены в другом. Также опция -inactiveselectbackground для текстового виджета используется вместо -selectbackground, когда текстовый виджет не имеет фокуса. Это позволяет программно управлять визуализацией тега sel для окон переднего и заднего плана или сделать так, чтобы sel вообще не отображался (когда -inactiveselectbackground пусто) для окон заднего плана. Каждый текстовый виджет-партнёр имеет свой собственный тег sel, который можно отдельно настроить и установить.

Курсор вставки

Маркер, названный insert, имеет особое значение в текстовых виджетах. Он автоматически определяется при создании текстового виджета и не может быть сброшен командой виджета «имяПути сброситьМаркер». Маркер insert представляет позицию курсора вставки, и курсор вставки будет автоматически отображаться в этой точке всякий раз, когда текстовый виджет имеет фокус ввода.

Флаг модификации

Текстовый виджет может отслеживать изменения в содержании виджета с помощью флага модификации. Вставка или удаление текста установят этот флаг. Флаг также можно запросить, установить и сбросить программно. Всякий раз, когда состояние флага меняется, генерируется виртуальное событие <<Modified>>. Дополнительные сведения см. в команде виджета имяПути изменить модифицировать.

Механизм отмены

Текстовый виджет имеет неограниченный механизм отмены и повтора (если опция виджета -undo истинна), который записывает каждое действие вставки и удаления на стеке.

Границы (называемые «разделителями») вставляются между действиями редактирования. Цель этих разделителей — сгруппировать вставки, удаления и замены в одно составное действие редактирования. При отмене изменения все между двумя разделителями будет отменено. Отменённые изменения затем перемещаются в стек повтора, так что отменённое редактирование можно повторить снова. Стек повтора очищается всякий раз, когда новые действия редактирования записываются в стек отмены.

Разделители вставляются автоматически, если опция виджета -autoseparators имеет значение true. Вы также можете вставить разделители программно. Если разделитель уже присутствует в верхней части стека отмены, другой не будет вставлен. Это означает, что два разделителя в стеке отмены всегда разделены по крайней мере одним действием вставки или удаления.

Виртуальное событие <<UndoStack>> генерируется всякий раз, когда стек отмены или стек повтора становится пустым или заполненным.

Механизм отмены также связан с флагом модификации. Это означает, что отмена или повторение изменений может вернуть модифицированный текстовый виджет в исходное состояние или наоборот. Флаг модификации будет автоматически установлен в соответствующее состояние. Эта автоматическая связь не работает, когда флаг модификации был установлен пользователем, до тех пор, пока флаг не будет сброшен.

См. ниже команду виджета имяПути редактировать, которая управляет механизмом отмены.

Виджеты-партнёры

Текстовый виджет имеет отдельный хранилище всех данных, относящихся к текстовому содержанию каждой строки, меткам, тегам, изображениям и окнам, а также к стеку отмены.

Хотя к этому хранилищу данных нельзя получить прямой доступ (то есть без текстового виджета как посредника), можно создать несколько текстовых виджетов, каждый из которых представляет разные представления одних и тех же базовых данных. Такие текстовые виджеты известны как текстовые виджеты-партнёры.

При добавлении, удалении, редактировании и форматировании текста в любом из виджетов, а также при изменении изображений, меток, тегов, все эти изменения будут отражены во всех виджетах-партнёрах.

Все данные и разметка объединены, за исключением нескольких небольших деталей. Во-первых, тег sel может быть установлен и настроен (в его стиле отображения) по-разному для каждого виджета-партнёра. Во-вторых, каждый виджет-партнёр имеет свои собственные позиции маркеров insert и current (но все остальные маркеры объединены). В-третьих, встраиваемые окна, которые являются произвольными другими виджетами, не могут быть совместно использованы между виджетами-партнёрами. Это означает, что опция -window встраиваемых окон независимо устанавливается для каждого виджета-партнёра (рекомендуется использовать возможности скрипта -create, чтобы позволить каждому виджету-партнёру создавать свои собственные встраиваемые окна по мере необходимости). В-четвёртых, все параметры конфигурации каждого виджета-партнёра (например, -font и т. д.) могут быть установлены независимо, за исключением -undo, -maxundo, -autoseparators (т.е. все вопросы отмены, повтора и состояния модификации совместно используются).

Наконец, любой отдельный виджет-партнёр не обязан содержать все строки из основного хранилища данных. При создании виджета-партнёра можно указать непрерывный диапазон строк (например, только строки с 52 по 125). Это позволяет виджету-партнёру содержать только небольшую часть всего текста. Диапазон строк будет расширяться и сжиматься по мере вставки или удаления текста. Виджет-партнёр будет отображать только целые строки текста (нельзя разделить только часть строки). Если содержимое виджета-партнёра сокращается до нуля (т. е. все целые строки в виджете-партнёре были удалены из другого виджета), то вставить новые строки невозможно. Виджет-партнёр просто станет пустой оболочкой, на которой можно настроить фон, но которая никогда не будет отображать никакого содержимого (без ручного переконфигурирования начальной и конечной строк). Обратите внимание, что виджет-партнёр, который не содержит все данные основного хранилища, всё равно имеет индексы, пронумерованные от «1.0» до «end». Просто эти индексы отражают подмножество общих данных, а данные за пределами содержащегося диапазона недоступны для виджета-партнёра. Это означает, что команда имяВиджета индекс конец может возвращать разные значения в разных виджетах-партнёрах. Аналогично, команды, такие как имяВиджета диапазоны тегов, не будут возвращать диапазоны индексов, выходящие за рамки тех, которые значимы для виджета-партнёра. Параметры конфигурации -startline и -endline могут использоваться для управления тем, сколько данных основного хранилища содержится в каждом текстовом виджете.

Обратите внимание, что виджеты-партнёры действительно являются партнёрами. Удаление «оригинального» текстового виджета не приведёт к удалению других виджетов-партнёров или их влиянию каким-либо другим образом.

См. ниже команду виджета имяПути партнёр, которая управляет созданием виджетов-партнёров.

Асинхронное обновление высоты строк

Для поддержания отзывчивого пользовательского интерфейса текстовый виджет асинхронно вычисляет метрики строк (высота строк в пикселях). Из-за этого некоторые команды текстового виджета могут возвращать неправильные результаты, если асинхронные вычисления не завершены к моменту вызова. Это относится к командам имяПути количество -ypixels и имяПути yview.

Опять же, по соображениям производительности, нецелесообразно заставлять эти команды всегда ждать завершения вычисления обновления каждый раз при их вызове. В большинстве случаев использования этих команд более или менее неточное значение не имеет большого значения по сравнению со скоростью выполнения.

В случае необходимости точного результата (и если текстовый виджет управляется менеджером геометрии), можно обратиться к командам имяПути синхронизировать и имяПути ожидающаяСинхронизация для управления синхронизацией представления текстовых виджетов.

Виртуальное событие <<WidgetViewSync>> срабатывает, когда высоты строк текстового виджета устаревают (из-за какой-либо команды редактирования или изменения конфигурации), и снова, когда внутренние данные текстового виджета снова синхронизированы с представлением виджета. Поле детали (%d замена) либо истинно (когда виджет синхронизирован), либо ложно (когда он не синхронизирован).

Команды имяПути синхронизировать, имяПути ожидающаяСинхронизация и <<WidgetViewSync>> применяются к каждому текстовому виджету независимо от его виджетов-партнёров.

Примеры использования:

## Example 1:
# immediately complete line metrics at any cost (GUI unresponsive)
$w sync
$w yview moveto $fraction

## Example 2:
# synchronously wait for up-to-date line metrics (GUI responsive)
# before executing the scheduled command, but don't block execution flow
$w sync -command [list $w yview moveto $fraction]

## Example 3:
# init
set yud($w) 0
proc updateaction w {
	set ::yud($w) 1
	# any other update action here...
}
# runtime, synchronously wait for up-to-date line metrics (GUI responsive)
$w sync -command [list updateaction $w]
vwait yud($w)
$w yview moveto $fraction

## Example 4:
# init
set todo($w) {}
proc updateaction w {
	foreach cmd $::todo($w) {uplevel #0 $cmd}
	set todo($w) {}
}
# runtime
lappend todo($w) [list $w yview moveto $fraction]
$w sync -command [list updateaction $w]

## Example 5:
# init
set todo($w) {}
bind $w <<WidgetViewSync>> {
	if {%d} {
		foreach cmd $todo(%W) {eval $cmd}
		set todo(%W) {}
	}
}
# runtime
if {![$w pendingsync]} {
	$w yview moveto $fraction
} else {
	lappend todo($w) [list $w yview moveto $fraction]
}

Команда виджета

Команда text создаёт новую команду Tcl, имя которой совпадает с именем пути окна текста. Эта команда может использоваться для вызова различных операций над виджетом. Она имеет следующий общий вид:
pathName option ?arg arg ...?
ИмяПути — имя команды, которое совпадает с именем пути текстового виджета. Опция и аргументы определяют точное поведение команды. Для текстовых виджетов возможны следующие команды:
pathName bbox index
Возвращает список из четырёх элементов, описывающих область на экране символа, заданного значением index. Два первых элемента списка содержат координаты x и y верхнего левого угла области, занимаемой символом, а два последних — ширину и высоту области. Если символ отображается частично, возвращаемое значение отражает только видимую часть. Если символ не отображается на экране, возвращаемое значение — пустой список.
pathName cget option
Возвращает текущее значение параметра конфигурации, заданного значением option. Option может принимать любые значения, которые принимает команда text.
pathName compare index1 op index2
Сравнивает индексы, заданные значениями index1 и index2, в соответствии с оператором отношения, заданным значением op, и возвращает 1, если отношение выполняется, и 0, если нет. Op должен быть одним из операторов <, <=, ==, >=, > или !=. Если op равен ==, то 1 возвращается, если оба индекса ссылаются на один и тот же символ; если op равен <, то 1 возвращается, если index1 ссылается на символ, расположенный раньше в тексте, чем index2, и так далее.
pathName configure ?option? ?value option value ...?
Запрос или изменение параметров конфигурации виджета. Если option не указан, возвращается список, описывающий все доступные параметры для pathName (см. Tk_ConfigureInfo для получения информации о формате этого списка). Если option указан без value, то команда возвращает список, описывающий указанный параметр (этот список будет идентичен соответствующему подсписку значения, возвращаемого при отсутствии option). Если указана одна или несколько пар option-value, то команда изменяет указанные параметры виджета на заданные значения; в этом случае команда возвращает пустую строку. Option может принимать любые значения, которые принимает команда text.
pathName count ?options? index1 index2
Подсчитывает количество соответствующих элементов между двумя индексами. Если index1 следует за index2, результат будет отрицательным числом (и это справедливо для каждого из возможных вариантов). Фактические элементы, которые подсчитываются, зависят от указанных параметров. Результат — список целых чисел, по одному для каждого подсчитанного варианта. Допустимые параметры подсчёта — -chars, -displaychars, -displayindices, -displaylines, -indices, -lines, -xpixels и -ypixels. Значение по умолчанию, если параметр не указан, — -indices. Существует дополнительный возможный параметр -update, который является модификатором. Если он указан (и если виджет текста управляется менеджером геометрии), все последующие параметры гарантируют, что любая возможная устаревшая информация будет пересчитана. В настоящее время это имеет какое-либо влияние только для подсчёта -ypixels (который, если -update не указан, будет использовать текущее кэшированное значение виджета текста для каждой строки). Этот параметр -update устарел из-за pathName sync, pathName pendingsync и <<WidgetViewSync>>. Параметры подсчёта интерпретируются следующим образом:
-chars
подсчитывает все символы, эллиптированные или нет. Не учитываются встроенные окна или изображения.
-displaychars
подсчитывает все не эллиптированные символы.
-displayindices
подсчитывает все не эллиптированные символы, окна и изображения.
-displaylines
подсчитывает все строки отображения (то есть, учитывает каждое выполнение перехода строки) от строки первого индекса до, но не включая, строки отображения второго индекса. Таким образом, если они оба находятся на одной строке отображения, будет возвращено ноль. По определению, строки отображения видимы, и поэтому это учитывает только части фактически видимых строк.
-indices
подсчитывает все символы и встроенные окна или изображения (то есть, всё, что учитывается в пространстве индексов виджета текста), эллиптированные или нет.
-lines
подсчитывает все логические строки (независимо от перехода строки) от строки первого индекса до, но не включая, строки второго индекса. Таким образом, если они оба находятся на одной строке, будет возвращено ноль. Логические строки подсчитываются, независимо от того, видимы ли они в данный момент (не эллиптированы) или нет.
-xpixels
подсчитывает количество горизонтальных пикселей от первого пикселя первого индекса до (но не включая) первого пикселя второго индекса. Чтобы подсчитать общую желаемую ширину виджета текста (предполагая, что перенос строки не включен), сначала найдите самую длинную строку, а затем используйте «.text count -xpixels "${line}.0" "${line}.0 lineend"».
-ypixels
подсчитывает количество вертикальных пикселей от первого пикселя первого индекса до (но не включая) первого пикселя второго индекса. Если оба индекса находятся на одной строке отображения, будет возвращено ноль. Чтобы подсчитать общее количество вертикальных пикселей в виджете текста, используйте «.text count -ypixels 1.0 end», а чтобы убедиться, что это значение обновлено, используйте «.text count -update -ypixels 1.0 end».
Команда возвращает положительное или отрицательное целое число, соответствующее количеству элементов, подсчитанных между двумя индексами. Возвращается одно такое целое число для каждого варианта подсчёта, поэтому возвращается список, если было указано более одного параметра. Например, «.text count -xpixels -ypixels 1.3 4.5» вполне допустимо и вернёт список из двух элементов.
pathName debug ?boolean?
Если boolean указан, он должен иметь одно из значений true или false, принимаемых Tcl_GetBoolean. Если значение — true, внутренние проверки согласованности будут включены в код B-дерева, связанного с виджетами текста. Если boolean имеет значение false, проверки отладки будут выключены. В любом случае команда возвращает пустую строку. Если boolean не указан, команда возвращает on или off, чтобы указать, включена ли отладка. Существует один переключатель отладки, общий для всех виджетов текста: включение или выключение отладки в любом виджете включает или выключает её для всех виджетов. Для виджетов с большим количеством текста проверки согласованности могут привести к заметному замедлению.

При включенной отладке процедуры рисования виджета текста устанавливают глобальные переменные tk_textRedraw и tk_textRelayout в списки индексов, которые перерисовываются. Значения этих переменных проверяются набором тестов Tk.

pathName delete index1 ?index2 ...?
Удаляет диапазон символов из текста. Если указаны index1 и index2, то удаляются все символы, начиная с index1 и заканчивая символом перед index2 (то есть символ в index2 не удаляется). Если index2 не указывает позицию, следующую в тексте за index1, символы не удаляются. Если index2 не указан, удаляется единственный символ в index1. Попытки удалить символы таким образом, чтобы в тексте не осталось символа новой строки в качестве последнего, будут скорректированы виджетом текста, чтобы избежать этого. В частности, удаление целых строк текста до конца текста также удалит символ новой строки непосредственно перед удалённым блоком, чтобы он был заменён новой конечной новой строкой виджета текста. Команда возвращает пустую строку. Если указано больше индексов, будут удалены несколько диапазонов текста. Все индексы сначала проверяются на корректность, а затем сортируются. Текст удаляется от последнего диапазона к первому диапазону, так что удалённый текст не вызывает нежелательных побочных эффектов смещения индекса. Если указано несколько диапазонов с одинаковым начальным индексом, используется самый длинный диапазон. Если указаны перекрывающиеся диапазоны, они будут объединены в участки, которые не приведут к удалению текста за пределами заданных диапазонов из-за смещения текста при удалении.
pathName dlineinfo index
Возвращает список из пяти элементов, описывающих область, занимаемую строкой отображения, содержащей index. Два первых элемента списка содержат координаты x и y верхнего левого угла области, занимаемой строкой, третий и четвёртый — ширину и высоту области, а пятый — положение базовой линии строки, измеренное вниз от верхней части области. Все эти данные измеряются в пикселях. Если текущий режим переноса строк — none и строка выходит за пределы окна, возвращаемая область отражает всю область строки, включая части, находящиеся за пределами окна. Если строка короче полной ширины окна, возвращаемая область отражает только часть строки, занимаемую символами и встроенными окнами. Если строка отображения, содержащая index, не видна на экране, возвращаемое значение — пустой список.
pathName dump ?switches? index1 ?index2?
Возвращает содержимое текстового виджета от index1 до, но не включая index2, включая текст и информацию о метках, тегах и вставленных окнах. Если index2 не указан, он по умолчанию устанавливается в один символ после index1. Информация возвращается в следующем формате:

ключ1 значение1 индекс1 ключ2 значение2 индекс2 ...

Возможные значения ключ — text, mark, tagon, tagoff, image и window. Соответствующее значение значение — текст, имя метки, имя тега, имя изображения или имя окна. Информация об индексе — индекс начала текста, метки, перехода тега, изображения или окна. Можно указать один или несколько следующих переключателей (или их сокращения) для управления выводом:

-all
Возвращает информацию обо всех элементах: тексте, метках, тегах, изображениях и окнах. Это значение по умолчанию.
-command command
Вместо возвращения информации в результате операции вывода, вызывает command для каждого элемента текстового виджета в заданном диапазоне. Команда получает три аргумента перед ее выполнением: ключ, значение и индекс.
-image
Включает информацию об изображениях в результаты вывода.
-mark
Включает информацию о метках в результаты вывода.
-tag
Включает информацию о переходах тегов в результаты вывода. Информация о тегах возвращается как элементы tagon и tagoff, которые обозначают начало и конец каждого диапазона каждого тега соответственно.
-text
Включает информацию о тексте в результаты вывода. Значение — текст до следующего элемента или конца диапазона, указанного index2. Элемент текста не охватывает переводы строк. Многострочный блок текста, не содержащий меток или переходов тегов, по-прежнему будет выведен как набор текстовых фрагментов, каждый из которых заканчивается переводом строки. Перевод строки является частью значения.
-window
Включает информацию о вставленных окнах в результаты вывода. Значение окна — его путь в Tk, если окно еще не создано. (Оно должно иметь скрипт создания.) В этом случае возвращается пустая строка, и вам необходимо запросить окно по его индексному положению, чтобы получить дополнительную информацию.
pathName edit option ?arg arg ...?
Этот команд управляет механизмом отмены и флагом изменения. Точное поведение команды зависит от аргумента option, следующего за аргументом edit. В настоящее время поддерживаются следующие формы команды:
pathName edit canredo
Возвращает логическое значение true, если можно выполнить повтор, т.е. когда стек повтора не пуст. В противном случае возвращает false.
pathName edit canundo
Возвращает логическое значение true, если можно выполнить отмену, т.е. когда стек отмены не пуст. В противном случае возвращает false.
pathName edit modified ?boolean?
Если boolean не указан, возвращает флаг изменения виджета. Команды вставки, удаления, отмены редактирования и повтора редактирования или пользователь могут установить или сбросить флаг изменения. Если boolean указан, устанавливает флаг изменения виджета на boolean.
pathName edit redo
При -undo option true, повторно применяет последние отмененные правки, если с тех пор не были сделаны другие правки. Возвращает ошибку, когда стек повтора пуст. Ничего не делает, когда -undo option false.
pathName edit reset
Очищает стеки отмены и повтора.
pathName edit separator
Вставляет разделитель (границу) в стек отмены. Ничего не делает, когда -undo option false.
pathName edit undo
Отменяет последнее действие редактирования, когда -undo option true. Действие редактирования определяется как все команды вставки и удаления, которые записываются в стек отмены между двумя разделителями. Возвращает ошибку, когда стек отмены пуст. Ничего не делает, когда -undo option false.
pathName get ?-displaychars? ?--? index1 ?index2 ...?
Возвращает диапазон символов из текста. Возвращаемое значение будет содержать все символы в тексте, начиная с символа с индексом index1 и заканчивая символом перед символом с индексом index2 (символ с индексом index2 не возвращается). Если index2 опущен, возвращается единственный символ с индексом index1. Если в указанном диапазоне нет символов (например, index1 находится за концом файла или index2 меньше или равен index1), то возвращается пустая строка. Если указанный диапазон содержит вставленные окна, никакая информация о них не включается в возвращаемую строку. Если задано несколько пар индексов, несколько диапазонов текста будут возвращены в списке. Недействительные диапазоны не будут представлены пустыми строками в списке. Диапазоны возвращаются в порядке, в котором они были переданы в pathName get. Если задан параметр -displaychars, то в каждом диапазоне возвращаются только те символы, которые не элидированы. Это может привести к тому, что некоторые из возвращенных диапазонов будут пустыми строками.
pathName image option ?arg arg ...?
Эта команда используется для управления вставленными изображениями. Поведение команды зависит от аргумента option, который следует за аргументом tag. В настоящее время поддерживаются следующие формы команды:
pathName image cget index option
Возвращает значение параметра конфигурации для вставленного изображения. Index определяет вставленное изображение, а option — определенный параметр конфигурации, который должен быть одним из перечисленных в разделе ВСТАВЛЕННЫЕ ИЗОБРАЖЕНИЯ.
pathName image configure index ?option value ...?
Запрос или изменение параметров конфигурации вставленного изображения. Если option не указан, возвращает список, описывающий все доступные параметры для вставленного изображения в index (см. Tk_ConfigureInfo для получения информации о формате этого списка). Если option указан без value, то команда возвращает список, описывающий один указанный параметр (этот список будет идентичен соответствующему подсписку значения, возвращенного при отсутствии option). Если указаны одна или несколько пар option-value, то команда изменяет указанные параметры на указанные значения; в этом случае команда возвращает пустую строку. См. ВСТАВЛЕННЫЕ ИЗОБРАЖЕНИЯ для получения информации об поддерживаемых параметрах.
pathName image create index ?option value ...?
Эта команда создает новую аннотацию изображения, которая будет отображаться в тексте в позиции, заданной index. Можно указать любое количество пар option-value для конфигурации аннотации. Возвращает уникальный идентификатор, который может использоваться в качестве индекса для ссылки на это изображение. См. ВСТАВЛЕННЫЕ ИЗОБРАЖЕНИЯ для получения информации о поддерживаемых параметрах и описании возвращаемого идентификатора.
pathName image names
Возвращает список, элементами которого являются имена всех экземпляров изображений, в настоящее время вставленных в window.
pathName index index
Возвращает позицию, соответствующую index, в формате строка.символ, где строка — номер строки, а символ — номер символа. Index может иметь любой из форматов, описанных в разделе ИНДЕКСЫ выше.
pathName insert index chars ?tagList chars tagList ...?
Вставляет все аргументы chars непосредственно перед символом с индексом index. Если index ссылается на конец текста (символ после последнего переноса строки), новый текст вставляется непосредственно перед последним переносом строки. Если есть один аргумент chars и нет tagList, новый текст получит любые теги, которые присутствуют как в символе перед, так и в символе после точки вставки; если тег присутствует только в одном из этих символов, он не будет применен к новому тексту. Если указан tagList, он состоит из списка имен тегов; новые символы получат все теги в этом списке и не получат других, независимо от тегов, присутствующих вокруг точки вставки. Если присутствуют несколько пар chars-tagList, они действуют так, как будто для каждой пары была выполнена отдельная команда виджета pathName insert, в порядке следования. Последний аргумент tagList может быть опущен.
pathName mark option ?arg arg ...?
Эта команда используется для управления метками. Точное поведение команды зависит от аргумента option, который следует за аргументом mark. В настоящее время поддерживаются следующие формы команды:
pathName mark gravity markName ?direction?
Если direction не указан, возвращаются left или right, чтобы указать, к какому из соседних символов прикреплена метка markName. Если direction указан, он должен быть left или right; сила тяжести markName устанавливается в заданное значение.
pathName mark names
Возвращает список, элементами которого являются имена всех текущих меток.
pathName mark next index
Возвращает имя следующей метки в или после index. Если index задан в числовой форме, то поиск следующей метки начинается с этого индекса. Если index является именем метки, то поиск следующей метки начинается сразу после этой метки. Это все еще может вернуть метку в том же положении, если несколько меток находятся в одном и том же индексе. Эти семантики означают, что операция mark next может использоваться для перехода через все метки в текстовом виджете в том же порядке, что и информация о метках, возвращаемая операцией pathName dump. Если метка установлена ​​на специальный индекс end, то она, кажется, находится после end с точки зрения операции pathName mark next. Если меток после index нет, возвращается пустая строка.
pathName mark previous index
Возвращает имя метки в или до index. Если index задан в числовой форме, поиск предыдущей метки начинается с символа перед этим индексом. Если index является именем метки, то поиск следующей метки начинается непосредственно перед этой меткой. Это все еще может вернуть метку в том же положении, если несколько меток находятся в одном и том же индексе. Эти семантики означают, что операция pathName mark previous может использоваться для перехода через все метки в текстовом виджете в обратном порядке по сравнению с информацией о метках, возвращаемой операцией pathName dump. Если меток перед index нет, возвращается пустая строка.
pathName mark set markName index
Устанавливает метку с именем markName в позицию перед символом в index. Если markName уже существует, она перемещается из старой позиции; если она не существует, создается новая метка. Эта команда возвращает пустую строку.
pathName mark unset markName ?markName markName ...?
Удалить метку, соответствующую каждому из аргументов markName. Удаленные метки не будут доступны в индексах и не будут возвращены последующими вызовами «pathName mark names». Эта команда возвращает пустую строку.
pathName peer option args
Эта команда используется для создания и запроса виджетов-виртуальных коллег. У нее есть две формы, в зависимости от option:
pathName peer create newPathName ?options?
Создает текстовый виджет-коллегу с заданным newPathName и любыми необязательными стандартными параметрами конфигурации (как для команды text). По умолчанию виртуальный коллега будет иметь те же начальную и конечную строки, что и родительский виджет, но эти значения могут быть изменены с помощью стандартных параметров конфигурации.
pathName peer names
Возвращает список виртуальных коллег этого виджета (сам виджет в этот список не включён). Порядок в этом списке не определён.
pathName pendingsync
Возвращает 1, если расчеты высот строк не актуальны, 0 в противном случае.
pathName replace index1 index2 chars ?tagList chars tagList ...?
Заменяет диапазон символов между index1 и index2 заданными символами и тегами. См. раздел по pathName insert для объяснения обработки аргументов tagList... и раздел по pathName delete для объяснения обработки индексов. Если index2 соответствует индексу раньше в тексте, чем index1, будет сгенерирована ошибка.

Удаление и вставка организованы таким образом, чтобы не происходило ненужного прокручивания окна или перемещения курсора вставки. Кроме того, стек отмены/повторной операции корректируется должным образом, если в текстовом виджете включены операции отмены.

Команда возвращает пустую строку.
pathName scan option args
Эта команда используется для реализации сканирования текста. У неё есть две формы, в зависимости от option:
pathName scan mark x y
Записывает x и y и текущий вид в окне текста для использования совместно с последующими командами pathName scan dragto. Обычно эта команда связана с нажатием кнопки мыши в виджете. Возвращает пустую строку.
pathName scan dragto x y
Эта команда вычисляет разницу между аргументами x и y и аргументами x и y последней команды pathName scan mark для виджета. Затем она корректирует представление на 10 раз разницу координат. Эта команда обычно связана с событиями перемещения мыши в виджете, чтобы обеспечить эффект быстрого перемещения текста по окну. Значение возврата — пустая строка.
pathName search ?switches? pattern index ?stopIndex?
Ищет в тексте в pathName, начиная с позиции index, диапазон символов, соответствующий шаблону pattern. Если совпадение найдено, возвращается индекс первого символа совпадения; в противном случае возвращается пустая строка. Можно указать один или несколько следующих переключателей (или их сокращения) для управления поиском:
-forwards
Поиск будет проходить вперёд по тексту, находя первый соответствующий диапазон, начиная с позиции, заданной index. Это значение по умолчанию.
-backwards
Поиск будет проходить назад по тексту, находя соответствующий диапазон, ближайший к index, первый символ которого расположен перед index (он не может быть в позиции index). Обратите внимание, что по разным причинам обратные поиски могут быть значительно медленнее прямых поисков (особенно при использовании -regexp), поэтому для критичных к производительности задач рекомендуется использовать прямые поиски.
-exact
Использовать точное соответствие: символы в сопоставляемом диапазоне должны быть идентичны символам в pattern. Это значение по умолчанию.
-regexp
Рассматривать pattern как регулярное выражение и сопоставлять его с текстом по правилам регулярных выражений (см. команду regexp и страницу re_syntax для получения подробностей). По умолчанию сопоставление автоматически передает опции -lineanchor и -linestop в движок регулярных выражений (если не используется -nolinestop), чтобы ^$ соответствовали началу и концу строки, а ., [^ последовательности никогда не соответствовали символу новой строки \n.
-nolinestop
Это позволяет последовательностям . и [^ соответствовать символу новой строки \n, чего они в противном случае не делают (см. команду regexp для получения подробностей). Эта опция имеет смысл только при использовании -regexp, в противном случае будет выброшено исключение. Например, чтобы сопоставить весь текст, используйте «pathName search -nolinestop -regexp ".*" 1.0».
-nocase
Игнорировать различия в регистре между шаблоном и текстом.
-count varName
Аргумент после -count указывает имя переменной; если совпадение найдено, количество позиций индекса между началом и концом сопоставляемого диапазона будет сохранено в переменной. Если в сопоставляемом диапазоне нет вложенных изображений или окон (и нет пропущенных символов, если не указан -elide), это эквивалентно количеству сопоставленных символов. В любом случае, диапазон matchIdx до matchIdx + $count chars вернёт весь сопоставленный текст.
-all
Найти все совпадения в заданном диапазоне и вернуть список индексов первого символа каждого совпадения. Если задан переключатель -count varName, то varName также устанавливается в список, содержащий по одному элементу для каждого успешного совпадения. Обратите внимание, что даже для точных поисков элементы этого списка могут отличаться, если есть вложенные изображения, окна или скрытый текст. Поиски с -all ведут себя очень похоже на команду Tcl regexp -all, в том смысле, что перекрывающиеся совпадения обычно не возвращаются. Например, применение поиска -all с шаблоном «\w+» к «hello there» даст только два совпадения, по одному для каждого слова, а совпадение «Z[a-z]+Z» к «ZooZooZoo» даст только одно совпадение.
-overlap
При выполнении поисков -all нормальным поведением является то, что совпадения, которые перекрывают уже найденное совпадение, не возвращаются. Этот переключатель изменяет это поведение, чтобы возвращались все совпадения, которые не полностью заключены внутри другого совпадения. Например, применение поиска -overlap с шаблоном «\w+» к «hello there» даст только два совпадения (т.е. ничем не отличается от просто -all), но совпадение «Z[a-z]+Z» к «ZooZooZoo» теперь даст два совпадения. Если этот переключатель используется без -all, будет выброшено исключение.
-strictlimits
При выполнении любого поиска нормальным поведением является проверка начальных и конечных пределов относительно начала сопоставляемого текста. Флаг -strictlimits требует, чтобы весь сопоставляемый диапазон находился внутри начальных и конечных пределов, заданных для поиска, чтобы совпадение считалось действительным.
-elide
Найти также скрытый (засоленный) текст. По умолчанию ищется только отображаемый текст.
--
Этот переключатель не оказывает никакого влияния, кроме завершения списка переключателей: следующий аргумент будет обрабатываться как pattern, даже если он начинается с -.

Сопоставляемый диапазон может находиться в одной строке текста или охватывать несколько строк (если части шаблона могут соответствовать новой строке). При поиске по регулярному выражению можно использовать различные функции обработки новых строк, такие как $ для соответствия концу строки, ^ для соответствия началу строки и для управления тем, может ли . соответствовать новой строке. Если stopIndex указан, поиск прекращается на этом индексе: для прямых поисков, совпадение на или после stopIndex не рассматривается; для обратных поисков, совпадение раньше, чем stopIndex в тексте не рассматривается. Если stopIndex опущен, будет проведен поиск по всему тексту: когда достигается начало или конец текста, поиск продолжается с другого конца, пока исходная позиция не будет достигнута снова; если stopIndex указан, обхода не будет. Это означает, что, например, если поиск -forwards, но stopIndex раньше в тексте, чем startIndex, ничего не будет найдено. См. ИЗВЕСТНЫЕ ОШИБКИ ниже для ряда незначительных ограничений команды pathName search.

pathName see index
Изменяет отображение в окне таким образом, что символ, заданный index, полностью виден. Если index уже виден, команда ничего не делает. Если index немного не виден, команда корректирует отображение только настолько, чтобы index стал виден на краю окна. Если index сильно не виден, то команда центрирует index в окне.
pathName sync ?-command command?
Управляет синхронизацией отображения текстового виджета.
pathName sync
Немедленно обновляет метрики строк, принудительно вычисляя любые устаревшие высоты строк. Команда возвращается немедленно, если таких устаревших высот строк нет, в противном случае она возвращается только по завершении вычислений. Команда возвращает пустую строку.
pathName sync -command command
Распределяет выполнение command (в цикле событий) ровно один раз, как только все высоты строк будут обновлены. Если нет запланированных вычислений высот строк, распределение происходит немедленно. Команда возвращает пустую строку. bgerror вызывается при ошибке в command.
pathName tag option ?arg arg ...?
Эта команда используется для управления тегами. Точное поведение команды зависит от аргумента option, который следует за аргументом tag. В настоящее время поддерживаются следующие формы команды:
pathName tag add tagName index1 ?index2 index1 index2 ...?
Связать тег tagName со всеми символами, начиная с index1 и заканчивая символом, предшествующим index2 (символ с индексом index2 не помечается). Одна команда может содержать любое количество пар index1-index2. Если последний index2 опущен, то тег применяется к одиночному символу с индексом index1. Если в указанном диапазоне нет символов (например, index1 выходит за пределы файла или index2 меньше или равно index1), то команда не оказывает никакого влияния.
pathName tag bind tagName ?sequence? ?script?
Эта команда связывает script с тегом, заданным tagName. Всякий раз, когда для символа, помеченного тегом tagName, происходит последовательность событий, заданная sequence, будет вызван скрипт. Эта команда виджета похожа на команду bind за исключением того, что она работает с символами в тексте, а не с целыми виджетами. Обратитесь к справочной записи команды bind для получения подробной информации о синтаксисе sequence и подстановках, выполняемых в script перед его вызовом. Если все аргументы указаны, то создается новая привязка, замещающая любую существующую привязку для той же sequence и tagName (если первый символ в script — «+», то script дополняет существующую привязку, а не заменяет её). В этом случае возвращаемое значение — пустая строка. Если script опущен, то команда возвращает script, связанный с tagName и sequence (возникает ошибка, если такой привязки нет). Если оба аргумента script и sequence опущены, то команда возвращает список всех последовательностей, для которых определены привязки к tagName.

Привязки могут быть заданы только для событий, связанных с мышью и клавиатурой (таких как Enter, Leave, ButtonPress, Motion и KeyPress), или для виртуальных событий. Привязки событий для виджета текста используют метку current, описанную выше в разделе МЕТКИ. Событие Enter срабатывает для тега, когда тег впервые появляется на текущем символе, а событие Leave срабатывает для тега, когда он перестаёт присутствовать на текущем символе. События Enter и Leave могут произойти как из-за перемещения метки current, так и из-за изменения символа в этой позиции. Обратите внимание, что эти события отличаются от событий Enter и Leave для окон. События мыши и клавиатуры направляются на текущий символ. Если в привязке используется виртуальное событие, эта привязка может сработать только в том случае, если виртуальное событие определено подлежащим событием, связанным с мышью или клавиатурой.

Возможна ситуация, когда текущий символ имеет несколько тегов, и каждый из них имеет привязку к определённой последовательности событий. В этом случае вызывается одна привязка для каждого тега в порядке от низшего к высшему приоритету. Если существует несколько соответствующих привязок для одного тега, выбирается наиболее конкретная привязка (см. справочную запись команды bind для подробностей). Команды continue и break внутри скриптов привязки обрабатываются так же, как и привязки, созданные с помощью команды bind.

Если привязки создаются для всего виджета с помощью команды bind, то эти привязки дополнят привязки тегов. Сначала будут вызваны привязки тегов, а затем — привязки для всего окна.

pathName tag cget tagName option
Эта команда возвращает текущее значение опции с именем option, связанной с тегом, заданным tagName. Option может иметь любое значение, принимаемое командой виджета pathName tag configure.
pathName tag configure tagName ?option? ?value? ?option value ...?
Эта команда похожа на команду виджета pathName configure, за исключением того, что она изменяет опции, связанные с тегом tagName, а не опции для всего виджета текста. Если option не указан, команда возвращает список, описывающий все доступные опции для tagName (см. Tk_ConfigureInfo для информации о формате этого списка). Если option указан без value, то команда возвращает список, описывающий одну указанную опцию (этот список будет идентичен соответствующему подсписку возвращаемого значения, если option не указан). Если указана одна или несколько пар option-value, то команда изменяет заданную опцию(и) на заданное(ые) значение(я) в tagName; в этом случае команда возвращает пустую строку. См. ТЕГИ выше для получения подробной информации об доступных опциях для тегов.
pathName tag delete tagName ?tagName ...?
Удаляет всю информацию о каждом из аргументов tagName. Команда удаляет теги со всех символов в файле и также удаляет любую другую информацию, связанную с тегами, такую как привязки и информация для отображения. Команда возвращает пустую строку.
pathName tag lower tagName ?belowThis?
Изменяет приоритет тега tagName так, чтобы он был непосредственно ниже приоритета тега с именем belowThis. Если belowThis опущен, то приоритет tagName устанавливается как самый низкий среди всех тегов.
pathName tag names ?index?
Возвращает список, элементами которого являются имена всех активных тегов в позиции символа, заданной index. Если index опущен, возвращаемое значение будет описывать все существующие теги для текста (включая все теги, которые были названы в команде виджета “pathName tag”, но не были удалены командой виджета “pathName tag delete”, даже если в данный момент ни один символ не помечен этим тегом). Список будет отсортирован в порядке от низшего к высшему приоритету.
pathName tag nextrange tagName index1 ?index2?
Эта команда ищет диапазон символов, помеченных тегом tagName, где первый символ диапазона не раньше символа с индексом index1 и не позже символа, предшествующего index2 (диапазон, начинающийся с index2, не рассматривается). Если существует несколько совпадающих диапазонов, выбирается первый. Возвращаемое значение команды — список, содержащий два элемента: индекс первого символа диапазона и индекс символа, следующего сразу после последнего в диапазоне. Если соответствующий диапазон не найден, то возвращаемое значение — пустая строка. Если index2 не указан, то он по умолчанию равен концу текста.
pathName tag prevrange tagName index1 ?index2?
Эта команда ищет диапазон символов, помеченных тегом tagName, где первый символ диапазона находится перед символом с индексом index1 и не раньше символа с индексом index2 (диапазон, начинающийся с index2, рассматривается). Если существует несколько совпадающих диапазонов, выбирается тот, который ближе всего к index1. Возвращаемое значение команды — список, содержащий два элемента: индекс первого символа диапазона и индекс символа, следующего сразу после последнего в диапазоне. Если соответствующий диапазон не найден, то возвращаемое значение — пустая строка. Если index2 не указан, он по умолчанию равен началу текста.
pathName tag raise tagName ?aboveThis?
Изменяет приоритет тега tagName так, чтобы он был непосредственно выше приоритета тега с именем aboveThis. Если aboveThis опущен, то приоритет tagName устанавливается как самый высокий среди всех тегов.
pathName tag ranges tagName
Возвращает список, описывающий все диапазоны текста, помеченные тегом tagName. Первые два элемента списка описывают первый помеченный диапазон в тексте, следующие два — второй диапазон и так далее. Первый элемент каждой пары содержит индекс первого символа диапазона, а второй — индекс символа, следующего сразу после последнего в диапазоне. Если символов, помеченных тегом tag, нет, то возвращается пустая строка.
pathName tag remove tagName index1 ?index2 index1 index2 ...?
Удаляет тег tagName со всех символов, начиная с index1 и заканчивая символом, предшествующим index2 (символ с индексом index2 не затронут). Одна команда может содержать любое количество пар index1-index2. Если последний index2 опущен, то тег удаляется из одиночного символа с индексом index1. Если в указанном диапазоне нет символов (например, index1 выходит за пределы файла или index2 меньше или равно index1), то команда не оказывает никакого влияния. Эта команда возвращает пустую строку.
pathName window option ?arg arg ...?
Эта команда используется для управления встроенными окнами. Поведение команды зависит от аргумента option, следующего за аргументом window. В настоящее время поддерживаются следующие формы команды:
pathName window cget index option
Возвращает значение параметра конфигурации для встроенного окна. Index идентифицирует встроенное окно, а option указывает конкретный параметр конфигурации, который должен быть одним из перечисленных в разделе ВСТРОЕННЫЕ ОКНА.
pathName window configure index ?option value ...?
Запрос или изменение параметров конфигурации встроенного окна. Если option не указан, возвращает список, описывающий все доступные параметры для встроенного окна по index (см. Tk_ConfigureInfo для информации о формате этого списка). Если option указан без value, то команда возвращает список, описывающий указанный параметр (этот список будет идентичен соответствующему подсписку возвращаемого значения, если option не указан). Если указана одна или несколько пар option-value, то команда изменяет указанный(ые) параметр(ы) на указанное(ые) значение(я); в этом случае команда возвращает пустую строку. См. ВСТРОЕННЫЕ ОКНА для информации о поддерживаемых параметрах.
pathName window create index ?option value ...?
Эта команда создает новую аннотацию окна, которая будет отображаться в тексте в позиции, заданной index. Можно указать любое количество пар option-value для настройки аннотации. См. ВСТРОЕННЫЕ ОКНА для информации о поддерживаемых параметрах. Возвращает пустую строку.
pathName window names
Возвращает список, элементы которого являются именами всех окон, в настоящее время встроенных в window.
pathName xview option args
Эта команда используется для запроса и изменения горизонтального положения текста в окне виджета. Она может принимать любую из следующих форм:
pathName xview
Возвращает список, содержащий два элемента. Каждый элемент — действительная дробь от 0 до 1; вместе они описывают часть горизонтального охвата документа, видимую в окне. Например, если первый элемент равен 0,2, а второй — 0,6, 20% текста находится слева вне экрана, средние 40% видны в окне, а 40% текста находятся справа вне экрана. Дроби относятся только к строкам, которые фактически видны в окне: если строки в окне очень короткие, так что они полностью видны, возвращаемые дроби будут 0 и 1, даже если в тексте есть другие строки, намного шире окна. Это те же значения, передаваемые полосам прокрутки через параметр -xscrollcommand.
pathName xview moveto fraction
Настраивает просмотр в окне так, что fraction горизонтального охвата текста находится слева вне экрана. Fraction — дробь от 0 до 1.
pathName xview scroll number what
Эта команда сдвигает просмотр в окне влево или вправо в соответствии с number и what. What должно быть units, pages или pixels. Если what равно units или pages, то number должно быть целым числом, в противном случае число может быть указано в любом формате, приемлемом для Tk_GetPixels, например, «2.0c» или «1i» (результат округляется до ближайшего целого значения. Если единицы не указаны, предполагаются пиксели). Если what равно units, просмотр смещается влево или вправо на number символов средней ширины на экране; если это pages, то просмотр смещается на number экранов; если это pixels, то просмотр смещается на number пикселей. Если number отрицательное, то более левые символы становятся видимыми; если положительное, то более правые символы становятся видимыми.
pathName yview ?args?
Эта команда используется для запроса и изменения вертикального положения текста в окне виджета. Она может принимать любую из следующих форм:
pathName yview
Возвращает список, содержащий два элемента, оба из которых являются действительными дробями от 0 до 1. Первый элемент задаёт положение первого видимого пикселя первого символа (или изображения и т. д.) в верхней строке в окне относительно всего текста (0,5 означает, что он находится посередине текста, например). Второй элемент задаёт положение первого пикселя сразу после последнего видимого пикселя в нижней строке окна относительно всего текста. Эти значения передаются полосам прокрутки через параметр -yscrollcommand.
pathName yview moveto fraction
Настраивает просмотр в окне так, что пиксель, заданный fraction, появляется вверху первой строки окна. Fraction — дробь от 0 до 1; 0 означает первый пиксель первого символа в тексте, 0,33 означает пиксель, находящийся на одной трети пути по тексту; и так далее. Значения, близкие к 1, будут указывать значения, близкие к последнему пикселю в тексте (1 фактически относится к пикселю за последним пикселем), но в таких случаях виджет никогда не будет прокручиваться за последний пиксель, поэтому значение 1 фактически будет округлено обратно до дробной части, которая гарантирует, что последний пиксель находится внизу окна, а какой-то другой пиксель — вверху.
pathName yview scroll number what
Эта команда сдвигает просмотр в окне вверх или вниз в соответствии с number и what. What должно быть units, pages или pixels. Если what равно units или pages, то number должно быть целым числом, в противном случае число может быть указано в любом формате, приемлемом для Tk_GetPixels, например, «2.0c» или «1i» (результат округляется до ближайшего целого значения. Если единицы не указаны, предполагаются пиксели). Если what равно units, просмотр смещается вверх или вниз на number строк на экране; если это pages, то просмотр смещается на number экранов; если это pixels, то просмотр смещается на number пикселей. Если number отрицательное, то более ранние позиции в тексте становятся видимыми; если положительное, то более поздние позиции в тексте становятся видимыми.
pathName yview ?-pickplace? index
Изменяет просмотр в окне виджета, чтобы сделать index видимым. Если параметр -pickplace не указан, то index появится вверху окна. Если -pickplace указан, виджет выбирает, где index появится в окне:
  1. Если index уже где-то виден в окне, то команда ничего не делает.
  2. Если index находится всего на несколько строк выше окна, он будет расположен вверху окна.
  3. Если index находится всего на несколько строк ниже окна, он будет расположен внизу окна.
  4. В противном случае index будет выровнен по центру окна.

Параметр -pickplace устарел, заменён командой виджета pathName see (pathName see обрабатывает движение как по оси x, так и по оси y, чтобы сделать местоположение видимым, в то время как режим -pickplace обрабатывает движение только по оси y).

pathName yview number
Эта команда делает первый символ в строке после заданного number видимым вверху окна. Number должно быть целым числом. Эта команда использовалась для прокрутки, но теперь устарела.

Связывания

Tk автоматически создаёт связывания классов для текстов, которые обеспечивают им следующее поведение по умолчанию. В описаниях ниже, «слово» зависит от значения переменной tcl_wordchars. См. tclvars(n).
  1. Нажатие левой кнопки мыши помещает курсор вставки непосредственно перед символом под курсором мыши, устанавливает фокус ввода на этот виджет и очищает любой выделенный текст в виджете. Перетаскивание с нажатой левой кнопкой мыши выделяет область между курсором вставки и символом под курсором.
  2. Двойной щелчок левой кнопкой мыши выделяет слово под курсором и помещает курсор вставки в начало этого слова. Перетаскивание после двойного щелчка выделит область, состоящую из целых слов.
  3. Тройной щелчок левой кнопкой мыши выделяет строку под курсором и помещает курсор вставки в начало этой строки. Перетаскивание после тройного щелчка выделит область, состоящую из целых строк.
  4. Границы выделенной области можно изменить, перетаскивая с нажатой левой кнопкой мыши и удерживая клавишу Shift; это позволит изменить границу выделения, которая была ближе к курсору мыши, когда была нажата кнопка 1. Если кнопка была нажата дважды перед перетаскиванием, то выделение будет изменяться с шагом в целые слова; если она была нажата трижды, то выделение будет изменяться с шагом в целые строки.
  5. Нажатие левой кнопки мыши с нажатой клавишей Control переместит курсор вставки без изменения выделения.
  6. При вводе обычных печатных символов они вставляются в позицию курсора вставки.
  7. Представление в виджете можно изменить, перетаскивая с нажатой правой кнопкой мыши. Если правая кнопка мыши нажата без перемещения мыши, выделенный текст копируется в текст в позиции курсора мыши. Клавиша Insert также вставляет выделенный текст, но в позицию курсора вставки.
  8. Если мышь выводится за пределы виджета при нажатой левой кнопке, то запись автоматически прокручивается, чтобы показать больше текста (если вне экрана есть больше текста со стороны, откуда ушла мышь).
  9. Клавиши влево и вправо перемещают курсор вставки на один символ влево или вправо; они также очищают любое выделение в тексте. Если клавиши влево или вправо нажаты с нажатой клавишей Shift, то курсор вставки перемещается и выделение расширяется, включая новый символ. Клавиши Control-влево и Control-вправо перемещают курсор вставки на слова, а клавиши Control-Shift-влево и Control-Shift-вправо перемещают курсор вставки на слова и также расширяют выделение. Клавиши Control-b и Control-f ведут себя так же, как клавиши влево и вправо соответственно. Клавиши Meta-b и Meta-f ведут себя так же, как Control-влево и Control-вправо соответственно.
  10. Клавиши вверх и вниз перемещают курсор вставки на одну строку вверх или вниз и очищают любое выделение в тексте. Если клавиши вверх или вниз нажаты с нажатой клавишей Shift, то курсор вставки перемещается и выделение расширяется, включая новый символ. Клавиши Control-вверх и Control-вниз перемещают курсор вставки на абзацы (группы строк, разделенных пустыми строками), а клавиши Control-Shift-вверх и Control-Shift-вниз перемещают курсор вставки на абзацы и также расширяют выделение. Клавиши Control-p и Control-n ведут себя так же, как клавиши вверх и вниз соответственно.
  11. Клавиши «Следующая» и «Предыдущая» перемещают курсор вставки вперед или назад на одну страницу и очищают любое выделение в тексте. Если клавиша Shift удерживается при нажатии клавиш «Следующая» или «Предыдущая», то выделение расширяется, включая новый символ.
  12. Клавиши Control-Следующая и Control-Предыдущая прокручивают представление вправо или влево на одну страницу, не перемещая курсор вставки и не влияя на выделение.
  13. Клавиши Home и Control-a перемещают курсор вставки в начало текущей строки отображения и очищают любое выделение в виджете. Клавиша Shift-Home перемещает курсор вставки в начало строки отображения и также расширяет выделение до этой точки.
  14. Клавиши End и Control-e перемещают курсор вставки в конец текущей строки отображения и очищают любое выделение в виджете. Клавиша Shift-End перемещает курсор в конец строки отображения и расширяет выделение до этой точки.
  15. Клавиши Control-Home и Meta-< перемещают курсор вставки в начало текста и очищают любое выделение в виджете. Клавиша Control-Shift-Home перемещает курсор вставки в начало текста и также расширяет выделение до этой точки.
  16. Клавиши Control-End и Meta-> перемещают курсор вставки в конец текста и очищают любое выделение в виджете. Клавиша Control-Shift-End перемещает курсор в конец текста и расширяет выделение до этой точки.
  17. Клавиша Select и Control-Space устанавливают якорь выделения в позицию курсора вставки. Они не влияют на текущее выделение. Клавиши Shift-Select и Control-Shift-Space изменяют выделение до текущего положения курсора вставки, выделяя область от якоря до курсора вставки, если ранее не было выделения.
  18. Клавиши Control-/ выделяют все содержимое виджета.
  19. Клавиши Control-\ очищают любое выделение в виджете.
  20. Клавиша F16 (на многих рабочих станциях Sun она обозначена как «Копировать») или Meta-w копирует выделение в виджете в буфер обмена, если выделение есть. Данное действие выполняется командой tk_textCopy.
  21. Клавиша F20 (на многих рабочих станциях Sun она обозначена как «Вырезать») или Control-w копирует выделение в виджете в буфер обмена и удаляет выделение. Это действие выполняется командой tk_textCut. Если в виджете нет выделения, эти клавиши не имеют эффекта.
  22. Клавиша F18 (на многих рабочих станциях Sun она обозначена как «Вставить») или Control-y вставляет содержимое буфера обмена в позицию курсора вставки. Данное действие выполняется командой tk_textPaste.
  23. Клавиша Delete удаляет выделение, если оно есть в виджете. Если выделения нет, удаляется символ справа от курсора вставки.
  24. Клавиши Backspace и Control-h удаляют выделение, если оно есть в виджете. Если выделения нет, удаляется символ слева от курсора вставки.
  25. Клавиши Control-d удаляют символ справа от курсора вставки.
  26. Клавиши Meta-d удаляют слово справа от курсора вставки.
  27. Клавиши Control-k удаляют от курсора вставки до конца строки; если курсор вставки уже находится в конце строки, тогда Control-k удаляет символ новой строки.
  28. Клавиши Control-o открывают новую строку, вставляя символ новой строки перед курсором вставки без перемещения курсора вставки.
  29. Клавиши Meta-backspace и Meta-Delete удаляют слово слева от курсора вставки.
  30. Клавиши Control-x удаляют выделенный в виджете текст после копирования его в буфер обмена.
  31. Клавиши Control-t меняют местами два символа справа от курсора вставки.
  32. Клавиши Control-z отменяют последнее действие редактирования, если опция -undo установлена в true. В противном случае ничего не происходит.
  33. Клавиши Control-Z (или Control-y в Windows) повторно применяют последнее отмененное действие редактирования, если опция -undo установлена в true. В противном случае ничего не происходит.

Если виджет отключен с помощью опции -state, то его представление всё ещё можно настроить и текст всё ещё можно выделить, но курсор вставки не будет отображаться и никакие изменения текста не будут производиться.

Поведение текста можно изменить, определив новые привязки для отдельных виджетов или переопределив привязки класса.

Известные проблемы

Проблемы, связанные с символами и индексами

Перед Tk 8.5 виджет использовал строку «chars» для ссылки на позиции индексов (которые включали символы, вложенные окна и вложенные изображения). Начиная с Tk 8.5, виджет текста обрабатывает «chars» и «indices» отдельно и правильно. Для обратной совместимости модификаторы индекса «+N chars» и «-N chars» по-прежнему ссылаются на индексы. Следует использовать полную форму «+N any chars» или «-N any chars» и т. д., чтобы ссылаться на фактические индексы символов. Эта путаница может быть исправлена в будущей версии, заставив виджет правильно интерпретировать «+N chars» как синоним «+N any chars».

Проблемы с производительностью

Виджеты текста должны работать эффективно при различных условиях. Виджет текста использует около 2-3 байтов основной памяти на каждый байт текста, поэтому тексты, содержащие мегабайт или больше, должны быть практичными на большинстве рабочих станций. Текст представлен внутри с помощью модифицированной структуры B-дерева, что делает операции относительно эффективными даже с большими текстами. Теги включены в структуру B-дерева таким образом, что теги могут охватывать большие диапазоны или иметь много разрозненных небольших диапазонов без потери эффективности. Отметки также реализованы таким образом, что позволяют большое количество отметок. В большинстве случаев разрешается иметь большое количество уникальных тегов или тег, имеющий много отдельных диапазонов.

Одна проблема с производительностью может возникнуть, если у вас сотни или тысячи различных тегов, которые все имеют следующие характеристики: первый и последний диапазоны каждого тега находятся около начала и конца текста соответственно, или один диапазон тега охватывает большую часть виджета текста. Стоимость добавления и удаления таких тегов пропорциональна количеству других тегов с теми же свойствами. В отличие от этого, нет проблем с наличием тысяч различных тегов, если их общие диапазоны локализованы и равномерно распределены по всему тексту.

Очень длинные строки текста могут быть дорогими, особенно если в них много отметок и тегов.

Строка отображения с курсором вставки перерисовывается каждый раз, когда мигает курсор, что вызывает постоянный поток графической информации. Установите атрибут -insertofftime в 0, чтобы этого избежать.

Известные ошибки

Подкоманда pathName search -regexp пытается выполнить сложные сопоставления regexp по нескольким строкам эффективным способом (с Tk 8.5), исследуя каждую строку по отдельности, а затем небольшими группами строк, как при поиске вперед, так и назад. В определенных условиях результат поиска может отличаться от результата, полученного путем применения того же regexp ко всему тексту из виджета за один раз. Например, при поиске с жадным regexp виджет будет продолжать пытаться добавить дополнительные строки в соответствие до тех пор, пока истинны одно из двух условий: либо библиотека regexp Tcl возвращает код, указывающий на возможность более длинного соответствия (но есть известные ошибки в Tcl, которые означают, что этот код не всегда возвращается правильно); либо добавление каждой дополнительной строки приводит по крайней мере к частичному соответствию с шаблоном. Это означает, что в случае, когда добавление первой дополнительной строки не приводит к совпадению, и система regexp Tcl возвращает неправильный код, а добавление второй дополнительной строки фактически приведет к совпадению, виджет текста вернет неправильный результат. На практике эта проблема встречается редко, но она может возникнуть, например:
pack [text .t]
	.t insert 1.0 "aaaa\nbbbb\ncccc\nbbbb\naaaa\n"
	.t search -regexp -- {(a+|b+\nc+\nb+)+\na+} 1.0
не найдет соответствия, когда существует соответствие из 19 символов, начинающееся с первого «b».

Всякий раз, когда одно возможное соответствие полностью заключено в другое, команда поиска будет пытаться гарантировать, что возвращается только более широкое соответствие. При выполнении обратных поисков regexp возможно, что Tcl не всегда добьется этого, в случае, когда соответствие предшествует одной или нескольким коротким, неперекрывающимся соответствиям, все из которых предшествуют большому соответствию, которое фактически охватывает все их. Алгоритм поиска, используемый виджетом, не ищет произвольно далеко возможное соответствие, которое может охватывать большие части виджета. Например:

pack [text .t]
	.t insert 1.0 "aaaa\nbbbb\nbbbb\nbbbb\nbbbb\n"
	.t search -regexp -backward -- {b+\n|a+\n(b+\n)+} end
соответствует «5.0», когда истинный жадный поиск соответствовал бы «1.0». Аналогично, если мы добавим -all к этому случаю, он соответствует всем «5.0», «4.0», «3.0» и «1.0», когда на самом деле он должен соответствовать только «1.0», так как это соответствие охватывает все остальные.

См. также

запись, полоса прокрутки

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/text.htm

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/text.htm

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API