# text

Создание текстового примитива и управление им.

## СИНТАКСИС

          text имяПути параметры

## СТАНДАРТНЫЕ ПАРАМЕТРЫ

- -background
- -borderwidth
- -cursor
- -exportselection
- -font
- -foreground
- -highlightbackground
- -highlightcolor
- -highlightthickness
- -insertbackground
- -insertborderwidth
- -insertofftime
- -insertontime
- -insertwidth
- -padx
- -pady
- -relief
- -selectbackground
- -selectborderwidth
- -selectforeground
- -setgrid
- -takefocus
- -xscrollcommand
- -yscrollcommand

Подробное описание этих параметров приведено в разделе options.

## ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ ПРИМИТИВА

Имя параметра: | -height
Имя в Базе: | height
Класс в Базе: | Height

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

Имя параметра: | -spacing1
Имя в Базе: | spacing1
Класс в Базе: | Spacing1

Запрашивает дополнительный промежуток перед каждой строкой текста в примитиве (в любой из разрешенных форм для расстояний на экране). При переносе строки заданное значение относится только к первой строчке на экране. Параметр -spacing1 в тегах подавляет данный.

Имя параметра: | -spacing2
Имя в Базе: | spacing2
Класс в Базе: | Spacing2

Задает величину дополнительного промежутка между двумя последовательными строчками на экране, полученными в результате переноса одной строки текста (в любой из разрешенных форм для расстояний на экране). Параметр spacing2 в тегах подавляет данный.

Имя параметра: | -spacing3
Имя в Базе: | spacing3
Класс в Базе: | Spacing3

Запрашивает дополнительный промежуток после каждой строкой текста в примитиве (в любой из разрешенных форм для расстояний на экране). При переносе строки заданное значение относится только к последней строчке на экране. Параметр -spacing3 в тегах подавляет данный.

Имя параметра: | -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 не задан или его значением является пустая строка, то Tk использует табуляцию по умолчанию с шагом, равным восьми символам среднего размера.

Имя параметра: | -width
Имя в Базе: | width
Класс в Базе: | Width

Задает желаемую ширину окна в символах; размер символа определяется шрифтом, который задан параметром -font. Если ширина символа в шрифте непостоянна, то для перевода числа символов в единицы экрана используется ширина символа "0".

Имя параметра: | -wrap
Имя в Базе: | wrap
Класс в Базе: | Wrap

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

## ОПИСАНИЕ

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

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

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

Третий способ обеспечивает возможность вставки в текст произвольных окон. Подробно эти возможности описаны ниже (см. "Вставленные окна").

Четвертый способ обеспечивает возможность вставки в текст изображений Tk. Подробно эти возможности описаны ниже (см. "Вставленные изображения".)

## ИНДЕКСЫ

Аргументами многих команд примитива являются один или несколько индексов. Индекс представляет собой строку, указывающую конкретное место в тексте например, место вставки текста или один из граничных символов удаляемого участка текста. Индексы имеют следующий синтаксис:

          база модификатор модификатор модификатор ...

База это указатель начальной точки, а модификаторы указывают сдвиг от начальной точки (например, на один символ влево или вправо от базы). База является обязательной частью индекса, а модификаторы необязательной.

База индекса должна быть представлена в одном из следующих видов:

строка.сим
  Указывает на символ с номером сим в строке с номером строка . Для совместимости с другими программами ОС UNIX, использующими тот же подход к нумерации, строки нумеруются, начиная с "1". Нумерация символов в строке начинается с "0". Если значением сим является end, то база ссылается на символ перевода строки, завершающий строку.
@x,y
  Указывает на символ, в котором находится точка с координатами в окне текста равными x и y.
end
  Указывает на конец текста (на символ, следующий непосредственно за последним символом перехода на новую строку).
метка
  Указывает на символ, следующий непосредственно за меткой с именем метка.
тег.first
  Указывает на первый символ в тексте, помеченный тегом с именем тег. Если в тексте нет символов, помеченных тегом, то возникает ошибка.
тег.last
  Указывает на символ, непосредственно следующий за последним символом, помеченным тегом с именем тег. Если в тексте нет символов, помеченных тегом, то возникает ошибка.
имяПути
  Указывает положение вставленного окна с именем имяПути. Если вставленное окно с заданным именем отсутствует, то возникает ошибка.
имяИзобр
  Указывает положение вставленного изображения с именем имяИзобр. Если вставленное изображение с заданным именем отсутствует, то возникает ошибка.

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

+ счет chars
  Увеличивает индекс на счет символов, при необходимости переходя на следующую строку. Если за символом с текущим индексом следует меньше символов, чем счет, то индекс устанавливается на последний символ в тексте. Пробелы по обе стороны от значения счет необязательны.
- счет chars
  Уменьшает индекс на счет символов, при необходимости переходя на предыдущую строку. Если перед символом с текущим индексом идет меньше символов, чем счет, то индекс устанавливается на первый символ в тексте. Пробелы по обе стороны от значения счет необязательны.
+ счет lines
  Увеличивает индекс на счет строк, сохраняя номер символа в строке. Если за строкой с текущим индексом следует меньше строк, чем счет, то индекс устанавливается на символ с тем же номером в последней строчке текста. Если длина строки с новым положением индекса меньше номера символа, то индекс указывает на последний символ в этой строке (символ перевода строки). Пробелы по обе стороны от значения счет необязательны.
- счет lines
  Уменьшает индекс на счет строк, сохраняя номер символа в строке. Если перед строкой с текущим индексом идет меньше строк, чем счет, то индекс устанавливается на символ с тем же номером в первой строчке текста. Если длина строки с новым положением индекса меньше номера символа, то индекс указывает на последний символ в этой строке (символ перевода строки). Пробелы по обе стороны от значения счет необязательны.
linestart
  Устанавливает индекс на первый символ в строке.
lineend
  Устанавливает индекс на последний символ в строке (символ перевода строки).
wordstart
  Устанавливает индекс на первый символ в слове, содержащем символ с текущим значением индекса. Слово представляет собой последовательность букв, цифр или символов подчеркивания (состоящую, быть может, из одного символа).
wordend
  Устанавливает индекс на первый символ в слове, содержащем символ с текущим значением индекса. Если текущее значение индекса и без того указывает на последний символ в слове, то оно не изменяется.

Если в команде задано несколько модификаторов, то они применяются слева направо. Так, например, индекс "end-1 chars" указывает на предпоследний символ в тексте, а индекс "insert wordstart-1 c" указывает на символ, непосредственно предшествующий первому символу в слове, содержащем символ с текущим значением индекса.

## ТЕГИ

Участки текста можно помечать с помощью тегов. Тег представляет собой символьную строку, которая привязана к некоторым символам текста. В принципе теги могут содержать любые символы, однако использования символов " " (пробел), "+" и "-" лучше избегать: это специальные символы индексов и использование тега, в котором присутствуют такие символы, в качестве индекса невозможно. С символами данного текста можно связать произвольное количество тегов. Каждый тег может относиться к одному символу, последовательности символов или к нескольким последовательностям символов. С отдельным символом может быть связано произвольное количество тегов.

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

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

-background цвет
  Параметр цвет задает цвет фона для изображения символов, связанных с данным тегом. Его значение может быть представлено в любом виде, приемлемом для Tk_GetColor.
-bgstipple двуцвет
  Параметр двуцвет задает двуцветное изображение, предназначенное для вывода в качестве фона для текста. Его значение может быть представлено в любом виде, приемлемом для Tk_GetBitmap. Если параметр двуцвет не задан или его значением является пустая строка, то используется равномерное заполнение фона.
-borderwidth пиксели
  Параметр пиксели задает ширину трехмерного бордюра, окружающего фон. Его значение может быть представлено в любом виде, приемлемом для Tk_GetPixels. Этот параметр используется в сочетании с параметром -relief для описания трехмерного представления фона для символов; если параметр -background для тега не задан, то параметр -borderwidth игнорируется.
-fgstipple двуцвет
  Параметр двуцвет задает двуцветное изображение, предназначенное для вывода в качестве фона для рисования текста и другой информации переднего плана (например, подчеркивания). Его значение может быть представлено в любом виде, приемлемом для Tk_GetBitmap. Если параметр двуцвет не задан или его значением является пустая строка, то используется равномерное заполнение фона.
-font имяШрифта
  Параметр имяШрифта задает имя шрифта для изображения символов. Его значение может быть представлено в любом виде, которы описан в команде font.
-foreground цвет
  Параметр цвет задает цвет символов текста и другой информации переднего плана, например, подчеркивания. Его значение может быть представлено в любом виде, приемлемом для Tk_GetColor.
-justify вырав
  Если первый символ строчки на экране связан с тегом, для которого задан такой параметр, то значение параметра определяет способ выравнивания текста в строчке. Параметр вырав может принимать значения left, right и center. При переносе строки выравнивание каждой из получившихся строчек на экране определяется первым символом этой строчки.
-lmargin1 пиксели
  Если первый символ строчки на экране связан с тегом, для которого задан такой параметр, то значение параметра пиксели задает величину отступа от левого края окна. Значение параметра пиксели представляет собой расстояние на экране в любом допустимом виде. При переносе строки этот параметр применяется только к первой строчке на экране; отступом остальных строк управляет параметр -lmargin2.
-lmargin2 пиксели
  Если первый символ строчки на экране связан с тегом, для которого задан такой параметр, и если строчка на экране не является первой строчкой строки текста (т.е. она представляет собой часть перенесенной строки текста), то значение параметра пиксели задает величину отступа данной строчки от левого края окна. Значение параметра пиксели представляет собой расстояние на экране в любом допустимом виде. Этот параметр используется только если допускается перенос строки; он применяется только ко второй и последующим перенесенным строчкам.
-offset пиксели
  Параметр пиксели задает величину сдвига (в пикселях) по вертикали базиса строки текста от базиса основной строки. Например, для верхних индексов базисная строка сдвигается вверх, а для нижних вниз. Значение параметра пиксели представляет собой расстояние на экране в любом допустимом виде.
-overstrike булевское
  Указывает, следует ли проводить горизонтальную прямую посередине символов. Значение параметра булевское может быть представлено в любом виде, приемлемом для Tk_GetBoolean.
-relief обвид
  Значение параметра обвид задает объемный вид фона в любом виде, приемлемом для Tk_GetRelief. Этот параметр используется в сочетании с параметром -borderwidth для установления трехмерного вида фона для символов; если параметр -background для данного тега не установлен, то параметр -relief игнорируется.
-rmargin пиксели
  Если первый символ строчки на экране связан с тегом, для которого задан такой параметр, то значение параметра пиксели задает величину отступа между последним символом строчки и правым краем окна. Значение параметра пиксели представляет собой расстояние на экране в любом допустимом виде. Этот параметр используется только, если перенос строки допустим. При переносе строки этот параметр применяется только ко всем перенесенным строчкам.
-spacing1 пиксели
  Параметр пиксели задает размер дополнительного пространства над каждой строкой текста. Значение параметра пиксели представляет собой расстояние на экране в любом допустимом виде. При переносе строки этот параметр применяется только к первой строчке на экране.
-spacing2 пиксели
  Параметр пиксели задает размер дополнительного пространства над каждой перенесенной строчкой из строчек, составляющих одну строку текста. Значение параметра пиксели представляет собой расстояние на экране в любом допустимом виде.
-spacing3 пиксели
  Параметр пиксели задает размер дополнительного пространства под каждой строкой текста. Значение параметра пиксели представляет собой расстояние на экране в любом допустимом виде. При переносе строки этот параметр применяется только к последней строчке на экране.
-tabs списТаб
  Параметр списТаб задает набор положений табулятора в том же виде, что и параметр -tabs для текстового примитива. Этот параметр относится к строке текста только в том случае, если он связан с первым символом строки. Если значением параметра является пустая строка, то параметр считается не заданным для данного тега (по умолчанию). Если значением параметра является не пустая строка, а пустой список (например, установка параметра имеет вид -tags { }), то его значением считается стандартный набор 8-символьных позиций табулятора (см. описание параметра -tags для примитива).
-underline булевское
  Параметр булевское указывает, следует ли подчеркивать символы. Значение параметра булевское может быть представлено в любом виде, приемлемом для Tk_GetBoolean.
-wrap режим
  Параметр режим задает способ обработки строк, длина которых превышает ширину текстового окна. Допустимые значения параметра те же, что и у параметра -wrap текстового примитива: none, char и word. Если этот параметр задан, то он подавляет параметр -wrap текстового примитива.

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

Во-вторых, теги служат для привязки событий. Привязки к тегу осуществляются практически таким же образом, как и привязки к классу примитива: заданная команда Tcl исполняется всякий раз, когда на символе с данным тегом происходит указанное событие. С помощью привязок к тегам можно задать поведение групп символов; помимо прочего таким образом можно реализовать некоторые свойства гипертекста. Подробное описание этих возможностей см. ниже в описании команды примитива tag bind.

Третья задача тегов обеспечивать управление выделениями (См. "Выделение" ).

## МЕТКИ

Метки представляют собой другой способ отмечать части текста. Они служат для запоминания фиксированных мест в тексте. Метки похожи на теги в том, что они поименованы и ссылаются на определенные места в тексте, однако они не связаны ни с какими конкретными символами. Напротив, метка указывает на промежуток между двумя символами. В каждый момент времени метка указывает в точности на одно положение. При удалении символов, окружающих положение метки, сама метка сохраняется, меняются лишь ее соседи. Теги же теряют привязку к символам при удалении этих символов. Для работы с метками предназначена команда примитива "имяПути mark"; имя метки можно использовать в качестве индекса в командах примитива этот индекс указывает на текущее положение метки.

Каждой метке приписывается притяжение, которое может принимать значения left и right. Притяжение определяет поведение метка при вводе текста в положении метки. При левом притяжении метка ведет себя, как если бы она была приписана к символу слева от нее; такая метка будет оставаться слева от вновь вводимого текста. Для метки с правым притяжением вновь вводимый текст окажется слева от нее. По умолчанию притяжение имеет значение right.

Пространства имен меток и тегов различны: одинаковые имена могут использоваться для метки и тега; при этом они будут ссылаться на различные объекты.

У двух меток есть особый смысл. Метка insert связана с курсором ввода; см. описание ниже (см. "Курсор ввода"). Метка current связана с символом, ближайшим к курсору "Мыши", ее положение меняется автоматически при изменении позиции курсора и любых изменениях текста в примитиве (с одним исключением: метка current не обновляется в ответ на изменение положения курсора при нажатой клавише "Мыши"; обновление откладывается до момента, когда все клавиши "Мыши" будут отпущены). Ни одну из этих двух специальных меток нельзя удалить.

## ВСТАВЛЕННЫЕ ОКНА

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

При добавлении в текстовый примитив вставленного окна с помощью команды примитива window create с ним можно связать несколько параметров конфигурации. Значения этих параметров можно впоследствии изменить командой примитива window configure. В настоящее время поддерживаются следующие параметры:

-align где
  Если высота вставленного окна отличается от высоты строчки, в которой оно выводится, то этот параметр определяет место, где выводится окно. Параметр где может принимать следующие значения: top (верхушка окна совпадает с верхней частью строчки), center (окно центрируется в области строчки), bottom (нижняя часть окна совпадает с нижней частью строчки) и baseline (нижняя часть окна совпадает с базой строчки).
-create скрипт
  Задает скрипт Tcl, выполняемый для создания вставленного окна. Этот скрипт выполняется при выводе окна, если для окна не был указан параметр -window.Скрипт создает окно и возвращает в качестве результата имя этого окна. Если окно удаляется, то при его повторном выводе снова исполняется тот же скрипт.
-padx пиксели
  Параметр пиксели задает размер дополнительного пространства, которое следует оставить по обе стороны вставленного окна. Его значение представляет собой расстояние на экране в любом допустимом виде.
-pady пиксели
  Параметр пиксели задает размер дополнительного пространства, которое следует оставить сверху и снизу от вставленного окна. Его значение представляет собой расстояние на экране в любом допустимом виде.
-stretch булевское
  Параметр указывает, следует ли вытягивать вставленное окно до высоты строчки, если запрошенная для него высота меньше высоты строчки, на которой это окно выводится. Если для окна задан также параметр -pady, то запрошенное этим параметром обрамление сохраняется и при вытягивании окна.
-window имяПути
  Задает имя выводимого окна.

## ВСТАВЛЕННЫЕ ИЗОБРАЖЕНИЯ

Последним видом пометок в текстовых примитивах являются вставленные изображения. Такая пометка приводит к выводу изображения в заданном месте текста. В текстовом примитиве может присутствовать произвольное количество вставленных изображений, а одно и то же изображение может вставляться в произвольном количестве мест в тексте. Положение вставленного изображения меняется при редактировании или прокрутке текста. Вставленное изображение считается одним символом в индексном пространстве текстового примитива; на него можно сослаться либо по значению индекса в индексном пространстве, либо по имени, которое оно получает при создании командой image create. При удалении области текста, содержащей вставленное изображение, данная его копия стирается с экрана.

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

При добавлении в текстовый примитив вставленного изображения с помощью команды примитива image create с ним можно связать несколько параметров конфигурации. Значения этих параметров можно впоследствии изменить командой примитива image configure. В настоящее время поддерживаются следующие параметры:

-align где
  Если высота вставленного изображения отличается от высоты строчки, в которой оно выводится, то этот параметр определяет место, где выводится изображение. Параметр где может принимать следующие значения: top (верхушка изображения совпадает с верхней частью строчки), center (изображение центрируется в области строчки), bottom (нижняя часть изображения совпадает с нижней частью строчки) и baseline (нижняя часть изображения совпадает с базой строчки).
-image изобр
  Задает имя выводимого изображения Tk. Если значение параметра не является допустимым именем изображения, то возвращается сообщение об ошибке.
-name ИмяИзобр
  Задает имя ссылки на данное вхождение изображения. Если параметр ИмяИзобр не задан, то именем служит имя изображения Tk. Если значение параметра ИмяИзобр уже использовалось, то к нему приписываются символы #nn, как описано выше.
-padx пиксели
  Параметр пиксели задает размер дополнительного пространства, которое следует оставить по обе стороны вставленного изображения. Его значение представляет собой расстояние на экране в любом допустимом виде.
-pady пиксели
  Параметр пиксели задает размер дополнительного пространства, которое следует оставить сверху и снизу от вставленного изображения. Его значение представляет собой расстояние на экране в любом допустимом виде.

## ВЫДЕЛЕНИЕ

Выделение реализуется с помощью тегов. Если параметр exportSelection текстового примитива имеет значение истина, то с выделением ассоциируется тег sel:

1. Если некоторые символы помечены тегом sel, то текстовый примитив притязает на владение выделением.
2. Результатом поиска выделения будут служить все символы, помеченные тегом sel.
3. Если выделение запрашивается другим приложением или другим окном данного приложения, то тег sel снимается со всех символов текста.

Тег sel определяется автоматически при создании текстового примитива; его нельзя удалить командой примитива "имяПути tag delete". Кроме того параметры selectBackground, selectBorderWidth и selectForeground текстового примитива связаны с параметрами -background, -borderwidth и -foreground тега sel: изменение одного из этих параметров примитива автоматически вызывает изменение соответствующего параметра тега и наоборот.

## КУРСОР ВВОДА

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

## КОМАНДА ПРИМИТИВА

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

          имяПути параметр ?арг арг ...?

имяПути является именем команды; оно совпадает с именем пути текстового примитива. Параметр и аргументы уточняют поведение команды. Текстовые примитивы допускают следующие формы команды:

имяПути bbox индекс
  Возвращает список из четырех элементов, описывающий область экрана, занимаемую символом с индексом индекс. Первые два элемента списка представляют собой координаты x и y верхнего левого угла этой области; последние два это ее ширина и высота. Если символ виден на экране лишь частично, то возвращаемые значения описывают видимую часть области. Если символ на экране не виден, то возвращаемое значение является пустым списком.
имяПути cget параметр
  Возвращает текущее значение параметра конфигурации с именем параметр. Параметр может быть любым из параметров команды text.
имяПути compare индекс1 оп индекс2
  Сравнивает индексы, задаваемые параметрами индекс1 и индекс2, в соответствии с оператором отношения, задаваемым параметром оп; команда возвращает "1", если указанное отношение выполняется, и "0" в противном случае. Параметр оп может принимать одно из значений "<", "<=", "=", ">=", ">" или "!=". Если значением оператора является "=", то команда возвращает "1", если оба индекса ссылаются на один и тот же символ; при операторе "<" команда возвращает "1", если индекс1 ссылается на символ, предшествующий символу с индексом индекс2, и т.д.
имяПути configure ?параметр? ?значение параметр значение ...?
  Запрашивает значения параметров конфигурации примитива или изменяет их. Если параметр не указан, то возвращает список, содержащий значения всех допустимых в имениПути параметров (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его новое значение нет, то команда возвращает часть полного списка, относящуюся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то указанным параметрам примитива присваиваются новые значения, а команда возвращает пустую строку. Параметр может быть любым из параметров команды text.
имяПути debug ?булевское?
  Если задан параметр булевское, то он может иметь значение истина или ложь в виде, приемлемом для Tcl_GetBoolean. Если значение параметра истина, то в B-дереве, связанном с текстовыми примитивами, будет выполняться внутренняя проверка согласованности. В противном случае эта проверка будет отключена. Независимо от полученного значения команда возвращает пустую строку. Если параметр булевское не задан, то команда возвращает on или off в зависимости от того, подключена или нет в момент выполнения команды система отладки. Переключатель отладки один на все текстовые примитивы: изменение его значения в одном примитиве приводит к изменению этого значения для всех примитивов. Проверка согласованности для примитивов с длинными текстами может привести к существенному замедлению работы.
имяПути delete индекс1 ?индекс2?
  Удаляет последовательность символов в тексте. Если заданы оба параметра индекс1 и индекс2, то удаляются все символы, начиная с символа с индексом индекс1, и кончая символом, непосредственно предшествующим символу с индексом индекс2 (т.е. символ с индексом индекс2 не удаляется). Если параметр индекс2 не задан, то удаляется только символ с индексом индекс1. Невозможно такое удаление, при котором последний символ оставшегося текста не будет символом перевода строки. Команда возвращает пустую строку.
имяПути dlineinfo индекс
  Возвращает список из пяти элементов, описывающий область экрана, занимаемую строчкой, содержащей символ с индексом индекс. Первые два элемента списка представляют собой координаты x и y верхнего левого угла этой области; следующие два это ее ширина и высота; пятый элемент это расстояние от верхней границы области вниз до базы строчки. Все значения измеряются в пикселях. Если текущий режим переноса строки имеет значение none и строка видна на экране лишь частично, то возвращаемые значения описывают всю область строки, включая и ее невидимые части. Если строчка короче полной ширины экрана, то возвращаемые значения описывают только ту ее часть, которая занята символами и вставленными окнами. Если строчка, содержащая символ с индексом индекс, на экране не видна, то возвращаемое значение является пустым списком.
имяПути dump ?переключатели? индекс1 ?индекс2?

  Возвращает содержимое текстового примитива от символа с индексом индекс1 до символа с индексом индекс2 (не включая последний), включая сам текст, а также информацию о метках, тегах и вставленных окнах. Если параметр индекс2 не задан, то по умолчанию описывается символ с индексом индекс1. Возвращаемая информация имеет следующий формат:

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

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

  -all
    Возвращается информация обо всех элементах тексте, метках, тегах и окнах. Это значение принято по умолчанию.
  -command команда
    В этом случае вместо возвращения информации об элементах текстового примитива на каждом из этих элементов в указанной области текста выполняется команда. Аргументами команды служат ключ, значение и индекс соответствующего элемента.
  -mark
    Включить в результат информацию о метках.
  -tag
    Включить в результат информацию о теговых переходах. Информация о тегах возвращается в виде элементов tagon и tagoff, указывающих соответственно начало и конец каждой области тега.
  -text
    Включить в результат информацию о тексте. Значением служит текст до следующего элемента или до конца области, указанного параметром индекс2. Текстовый элемент не захватывает новых строк. Часть текста, содержащая несколько строк и не включающая меток и теговых переходов, будет выводиться в виде набора отрезков текста, каждый из которых кончается символом перевода строки. Эти символы являются частью результата.
  -window
    Включить в результат информацию о вставленных окнах. Значением является имя Tk пути вставленного окна, за исключением случая, когда окно еще не создано. (Окно должно содержать создающий скрипт.) В последнем случае результатом служит пустая строка, а дополнительную информацию об окне можно получить, задав значение его индекса.
имяПути get индекс1 ?индекс2?
  Возвращает последовательность символов в тексте. В последовательность включаются все символы текста, начиная с символа с индексом индекс1 и кончая символом, непосредственно предшествующим символу с индексом индекс2 (символ с индексом индекс2 в эту последовательность не входит). Если параметр индекс2 опущен, то команда возвращает единственный символ с индексом индекс1. Если в указанном интервале нет символов (например, если индекс1 указывает за конец файла или значение индекс2 меньше, чем индекс1), то команда возвращает пустую строку. Если в указанном интервале есть вставленные окна, то информация о них в возвращаемую строку не входит.
имяПути image ?параметр? ?арг арг ...?

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

  имяПути image cget индекс параметр
    Возвращает значение параметра конфигурации вставленного изображения. Аргумент индекс указывает вставленное изображение, а параметр задает имя требуемого параметра конфигурации; это имя должно быть элементом списка, приведенного (см. "Вставленные изображения").
  имяПути image configure индекс ?параметр значение ...?
    Запрашивает значение параметров вставленного изображения или изменяет эти значения. Если ни один аргумент параметр не задан, то возвращает список, содержащий значения всех наличных параметров вставленного изображения с индексом индекс (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его значение нет, то команда возвращает часть списка, относящуюся к данному параметру. Если задано несколько пар параметр-значение, то команда придает указанным параметрам новые значения; в этом случае команда возвращает пустую строку. Описание поддерживаемых параметров (см. "Вставленные изображения").
  имяПути image create индекс ?параметр значение ...?
    Команда создает новую ссылку на изображение, которое появляется в тексте в положении, указанном аргументом индекс. Для установки параметров конфигурации изображения можно указать произвольное число пар параметр-значение. Команда возвращает уникальный идентификатор, который можно использовать в качестве индекса при ссылке на данное изображение. Описания поддерживаемых параметров и возвращаемого идентификатора (см. "Вставленные изображения").
  имяПути image names
    Возвращает список, элементами которого служат имена всех вхождений изображений, вставленных в данное окно.
имяПути index индекс
  Возвращает положение символа с индексом индекс; положение выдается в виде строч.симв, где строч это номер строчки, а симв номер символа в этой строчке. Аргумент индекс может иметь любую из форм, описанных выше (см. "Индексы").
имяПути insert индекс символы ?списТегов символы списТегов...?
  Вставляет значения всех аргументов символы непосредственно перед символом с индексом индекс. Если индекс ссылается на конец текста (т.е. на символ, следующий за последним символом перевода строки), то новый текст вставляется непосредственно перед последним символом перевода строки. Если у команды один аргумент символы, а аргументы списТегов отсутствуют, то ко вновь введенному тексту будут приписаны все теги, присутствующие у обоих символов слева и справа от нового текста; если тег приписан лишь к одному из соседних символов, то на вновь введенный текст он не распространяется. Аргументы списТегов представляют собой списки имен тегов; новым символам будут приписаны только эти теги, независимо от состояния тегов по обе стороны от точки ввода. Если в аргументах команды присутствует несколько пар символы -списТегов, то результат ее выполнения совпадает с результатом выполнения нескольких таких же команд примитива, по одной на каждую пару. Последний аргумент списТегов может быть опущен.
имяПути mark параметр ?арг арг ...?

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

  имяПути mark gravity имяМетки ?направление?
    Если аргумент направление не задан, то команда возвращает значение left или right, указывающее, притягивается ли метка к символу слева или справа от нее. Если направление задано, то оно должно иметь значение left или right, и притяжению метки с именем имяМетки присваивается указанное значение.
  имяПути mark names
    Возвращает список, элементами которого являются имена всех уже установленных меток.
  имяПути mark next индекс
    Возвращает имя первой метки, идущей за символом с индексом индекс (или притягивающейся к этому символу). Если аргумент индекс задан в числовом виде, то поиск метки начинается с указанного символа. Если значением аргумента индекс является имя метки, то поиск очередной метки начинается непосредственно после заданной метки. При этом возвращаемым значением может оказаться имя метки с тем же самым положением, если в этом положении находится несколько меток. Смысл этого действия состоит в том, что команда mark next позволяет последовательно перебрать все метки в текстовом примитиве в том же порядке, в котором информация о метках выводится командой dump. Если метка установлена в положении, указанном специальным индексом end, то для операции mark next эта метка находится после индекса end. Если после символа с индексом индекс меток нет, то команда возвращает пустую строку.
  имяПути mark previous индекс
    Возвращает имя первой метки, идущей перед символом с индексом индекс (или притягивающейся к этому символу). Если аргумент индекс задан в числовом виде, то поиск метки начинается с символа, непосредственно предшествующего указанному. Если значением аргумента индекс является имя метки, то поиск очередной метки начинается непосредственно перед заданной меткой. При этом возвращаемым значением может оказаться имя метки с тем же самым положением, если в этом положении находится несколько меток. Смысл этого действия состоит в том, что команда mark previous позволяет последовательно перебрать все метки в текстовом примитиве в порядке, обратном тому, в котором информация о метках выводится командой dump. Если перед символом с индексом индекс меток нет, то команда возвращает пустую строку.
  имяПути mark set имяМетки индекс
    Устанавливает метку с именем имяМетки непосредственно перед символом с индексом индекс. Если метка с именем имяМетки уже существует, то она перемещается из своего старого положения в новое; если такой метки нет, то создается новая метка. Команда возвращает пустую строку.
  имяПути mark unset имяМетки ?имяМетки имяМетки...?
    Удаляет все метки с именами имяМетки. Удаленные метки нельзя использовать в качестве индексов; команда "имяПути mark names" так же не возвращает их в списке меток. Команда возвращает пустую строку.
имяПути scan параметр арг

  Команда используется для сканирования текстов. Она может иметь один из двух видов в зависимости от значения параметра:

  имяПути scan mark x y
    Записывает координаты x и y и текущий вид текстового окна для последующего использования командами scan dragto. Обычно эта команда связана с нажатием клавиши "Мыши" в примитиве. Возвращает пустую строку.
  имяПути scan dragto x y
    Команда вычисляет разность значений аргументов x и y и значений аргументов x и y последней выполненной на примитиве команды scan mark. Затем команда переносит сохраненный вид окна на расстояние, в 10 раз пресыщающее вычисленную разность. Обычно эта команда связывается с событиями движения курсора "Мыши" в примитиве и предназначена для перетаскивания текста по окну с высокой скоростью. Возвращает пустую строку.
имяПути search ?переключатели? образец индекс индексСтоп?

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

  -forwards
    Поиск осуществляется в направлении "вперед", подходящая последовательность символов ищется в положении, указанном аргументом индекс, и дальше по тексту. Это значение принято по умолчанию.
  -backwards
    Поиск осуществляется в направлении "назад", подходящая последовательность символов ищется перед положением, указанным аргументом индекс, и ближе всего к нему.
  -exact
    Требует точного соответствия образцу: символы в подходящей последовательности должны в точности совпадать с символами образца. Это значение принято по умолчанию.
  -regexp
    Указывает на необходимость считать образец регулярным выражением и устанавливать соответствие согласно правилам, принятым для регулярных выражений (подробности см. в описании команды regexp).
  -nocase
    Игнорировать различие регистров в образце и тексте.
  -count имяПерем
    Аргумент имяПерем представляет собой имя переменной; если подходящая последовательность найдена, то в эту переменную заносится число символов в ней.
  --
    Единственная задача этого переключателя завершение списка переключателей; следующий за ним аргумент будет интерпретирован как образец, даже если он и начинается с "-"

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

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

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

  имяПути tag add имяТега индекс1 ?индекс2 индекс1 индекс2 ...?
    Приписывает тег имяТега ко всем символам, начиная с индекса1 и кончая непосредственно перед символа с индексом индекс2 (к самому этому символу данный тег не приписывается). В одной команде может присутствовать произвольное число пар индекс1-индекс2. Если последний аргумент индекс2 опущен, то тег приписывается к единственному символу с индексом индекс1. Если в указанном промежутке нет символов (например, индекс1 указывает за конец файла или индекс2 оказывается не больше индекса1), то команда не совершает никаких действий.
  имяПути tag bind имяТега ?послед? ?скрипт

    Эта команда приписывает скрипт к тегу с именем имяТега. При наступлении последовательности событий, заданной аргументом послед, на символе, к которому приписан тег с именем имяТега , выполняется указанный скрипт. Эта команда примитива похожа на команду bind; единственное ее отличие состоит в том, что она действует на символах, а не на всем примитиве. Полное описание синтаксиса последовательности и подстановок, производимых в скрипте перед его выполнением, см. в п. 1.3. Если указаны все аргументы, то создается новая привязка, заменяющая все предыдущие привязки данной последовательности к тегу имяТега (если первым символом аргумента скрипт является "+", то скрипт присоединяется к текущей привязке, а не замещает ее). В этом случае команда возвращает пустую строку. Если аргумент скрипт опущен, то команда возвращает скрипт, привязанный к тегу имяТега (при отсутствии такого скрипта возникает ошибка). Если опущены и аргумент скрипт, и аргумент послед, то команда возвращает список всех последовательностей, привязки к которым определены для тега с именем имяТега.

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

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

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

  имяПути tag cget имяТега параметр
    Команда возвращает текущее значение параметра с именем параметр, ассоциированного с тегом имяТега. Параметр может иметь любое значение, воспринимаемое командой примитива tag configure.
  имяПути tag configure имяТега ?параметр? ?значение? ?параметр значение ...?
    Эта команда похожа на команду примитива configure; ее отличие состоит в том, что она модифицирует параметры, связанные с тегом имяТега, а не со всем текстовым примитивом. Если аргумент параметр не задан, то команда возвращает список значений всех параметров тега имяТега (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его значение нет, то возвращается часть списка, относящаяся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то команда присваивает указанным параметрам тега имяТега новые значения; в этом случае она возвращает пустую строку. Подробно параметры тегов описаны выше (см. "Теги").
  имяПути tag delete имяТега ?имяТега ...?
    Стирает всю информацию о тегах для каждого из аргументов имяТега. Команда снимает теги с символов и удаляет всю остальную информацию о них например, привязки и характеристики вывода на экран. Возвращает пустую строку.
  имяПути tag lower имяТегаНижеЭтого
    Изменяет приоритет тега с именем имяТега , устанавливая его непосредственно перед тегом с именем нижеЭтого. Если аргумент нижеЭтого опущен, то тег имяТега получается самый нижний приоритет среди всех тегов.
  имяПути tag names ?индекс?
    Возвращает список имен всех тегов, активных в позиции, указанной аргументом индекс. Если аргумент индекс опущен, то команда возвращает список всех существующих тегов в тексте (это все теги, установленные командой примитива "имяПути tag" и не удаленные командой примитива "имяПути tag delete", в том числе и те из них, которые в текущий момент не относятся ни к какому символу). Выводимый список отсортирован в порядке приоритетов тегов (от тега с наименьшим приоритетом к тегу с наибольшим).
  имяПути tag nextrange имяТега индекс1 ?индекс2?
    Команда ищет последовательность символов, помеченных тегом имяТега, первый символ которой стоит после символа с индексом индекс1, а последний символ предшествует символу с индексом индекс2. В случае, если таких последовательностей несколько, выбирается первая из них. Команда возвращает список из двух элементов, первый из которых индекс первого символа последовательности: а второй индекс символа, непосредственно следующего за последним символом последовательности. Если подходящей последовательности нет, то команда возвращает пустую строку. Если аргумент индекс2 не задан, то его значением по умолчанию считается конец текста.
  имяПути tag prevrange имяТега индекс1 ?индекс2?
    Команда ищет последовательность символов, помеченных тегом имяТега, первый символ которой стоит перед символом с индексом индекс1, но не раньше, чем символ с индексом индекс2 (символ с этим индексом допускается). В случае, если таких последовательностей несколько, выбирается ближайшая к символу с индексом индекс1. Команда возвращает список из двух элементов, первый из которых индекс первого символа последовательности: а второй индекс символа, непосредственно следующего за последним символом последовательности. Если подходящей последовательности нет, то команда возвращает пустую строку. Если аргумент индекс2 не задан, то его значением по умолчанию считается начало текста.
  имяПути tag raise имяТега ?ВышеЭтого?
    Изменяет приоритет тега с именем имяТега , устанавливая его непосредственно после тега с именем вышеЭтого. Если аргумент вышеЭтого опущен, то тег имяТега получается самый большой приоритет среди всех тегов.
  имяПути tag ranges имяТега
    Возвращает список всех участков текста, помеченных тегом с именем имяТега. Первые два элемента списка описывают первый участок, следующие два второй и т.д. Первый элемент каждой пары представляет собой индекс первого символа на соответствующем участке, второй элемент пары индекс символа, непосредственно следующего за последним символом участка. Если тегом имяТега не помечен ни один символ, то команда возвращает пустую строку.
  имяПути tag remove имяТега индекс1 ?индекс2 индекс1 индекс2 ...?
    Снимает пометку тегом имяТега со всех символов в промежутках, указанных индексами индекс1 и индекс2 (на символ с индексом индекс2 команда не действует). Если в указанном промежутке нет символов (например, если индекс1 указывает за конец текста или индекс2 оказывается не меньше индекса1), то команда не совершает никаких действий. Возвращает пустую строку.
имяПути window параметр ?арг арг ...?

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

  имяПути window cget индекс параметр
    Возвращает значение параметра конфигурации вставленного окна. Окно задается аргументом индекс, а аргумент параметр указывает имя конкретного параметра конфигурации; это имя должно быть одним из тех, которые описаны во фрагменте "Вставленные окна".
  имяПути window configure индекс ?параметр значение ...?
    Запрашивает или модифицирует значения параметров конфигурации вставленного окна. Если параметр не указан, то возвращает список, содержащий значения всех допустимых параметров вставленного окна (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его новое значение нет, то команда возвращает часть полного списка, относящуюся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то указанным параметрам присваиваются новые значения, а команда возвращает пустую строку. Список возможных параметров приведен в фрагменте "Вставленные окна".
  имяПути window create индекс ?параметр значение ...?
    Команда создает ссылку на новое окно, положение которого в тексте определяется аргументом индекс. Конфигурация окна задается произвольным числом пар параметр-значение. Список возможных параметров см. в "ВСТАВЛЕННЫЕ ОКНА". Команда возвращает пустую строку.
  имяПути window names
    Возвращает список имен всех вставленных в настоящий момент в окно окон.
имяПути xview параметр арг

  Команда используется для запроса горизонтального положения текста в окне примитива и изменения этого положения. Она может принимать одну из следующих форм:

  имяПути xview
    Возвращает список из двух элементов, каждый из которых представляет собой вещественное число в промежутке между "0" и "1". В совокупности эти два числа описывают, какая часть документа по горизонтали видна в окне. Если, например, значение первого числа равно ".2", а второго ".6", то слева от экрана не видно 20% текста, 40% видимы на экране и еще 40% не видимы справа от экрана. Числа относятся только к строчкам, которые действительно попадают на экран. Если все строчки в окне короткие и полностью умещаются на экране, то команда возвращает значения "0" и "1", даже если в тексте фактически присутствуют строчки, длина которых намного превышает ширину окна. Те же самые значения передаются полосам прокрутки через параметр -xscrollcommand.
  имяПути xview moveto число
    Сдвигает содержимое окна таким образом, чтобы часть текста по горизонтали, описываемая аргументом число, находилась слева от экрана. Число должно быть вещественным числом в промежутке между "0" и "1".
  имяПути xview scroll число что
    Команда сдвигает содержимое окна влево или вправо в соответствии со значениями аргументов число и что. Число должно быть целым. Аргумент что может принимать значения units и pages, а также их аббревиатуры. Если аргумент что имеет значение units, то сдвиг происходит на числосимволов средней ширины; в случае значения pages сдвиг выполняется на число страниц (размер страницы равен размеру экрана). Если число отрицательно, то сдвиг происходит вправо, в противном случае влево.
имяПути yview параметр арг

  Команда используется для запроса вертикального положения текста в окне примитива и изменения этого положения. Она может принимать одну из следующих форм:

  имяПути yview
    Возвращает список из двух элементов, каждый из которых представляет собой вещественное число в промежутке между "0" и "1". Первый элемент списка указывает положение в тексте первого символа верхней строчки на экране (например, значение "0.5" означает, что этот символ находится в середине текста). Второй элемент списка указывает положение символа, следующего непосредственно за последним символом нижней строчки экрана. Те же самые значения передаются полосам прокрутки через параметр -yscrollcommand.
  имяПути yview moveto число
    Сдвигает содержимое окна таким образом, чтобы символ, положение которого задано аргументом число, оказался в верхней строчке экрана. Число должно быть вещественным числом в промежутке между "0" и "1"; значение "0" указывает на первый символ в тексте, значение "0.33" на символ, отстоящий от начала текста на "1/3" и т.д.
  имяПути yview scroll число что
    Команда сдвигает содержимое окна вверх или вниз в соответствии со значениями аргументов число и что. Число должно быть целым. Аргумент что может принимать значения units и pages, а также их аббревиатуры. Если аргумент что имеет значение units, то сдвиг происходит на число строчек; в случае значения pages сдвиг выполняется на число страниц (размер страницы равен размеру экрана). Если число отрицательно, то сдвиг происходит вверх, в противном случае вниз.
  имяПути yview ?-pickplace? индекс

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

    1. Если символ с индексом индекс уже виден на экране, то ничего не изменяется.
    2. Если этот символ находится лишь незначительно выше экрана, то он оказывается в верхней строчке экрана.
    3. Если этот символ находится лишь незначительно ниже экрана, то он оказывается в нижней строчке экрана.
    4. В остальных случаях указанный символ оказывается в центре экрана.

    Параметр -pickplace устарел после введения команды примитива see, которая управляет движениями как в горизонтальном, так и в вертикальном направлении, в то время, как -pickplace влияет только на движение по вертикали.

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

## ПРИВЯЗКИ

Tk автоматически создает привязки класса, которые определяют следующее поведение текстовых примитивов по умолчанию. В приводимом ниже описании "слово" это непрерывная последовательность символов, состоящая из букв, цифр и символов подчеркивания "_", либо из любого другого одиночного символа.

1. Щелчок клавишей 1 "Мыши" устанавливает курсор ввода непосредственно перед символом, на котором расположен курсор "Мыши".
2. Движение "Мыши" с нажатой клавишей 1 растягивает выделение от курсора ввода то символа под курсором "Мыши".
3. Двойной щелчок по клавише 1 "Мыши" выделяет слово, на котором находится курсор "Мыши", и устанавливает курсор ввода на начало этого слова. Если тащить "Мышь" после двойного щелчка, то выделение растягивается на полные слова.
4. Тройной щелчок по клавише 1 "Мыши" выделяет строку, на которой находится курсор "Мыши", и устанавливает курсор ввода на начало этой строки. Если тащить "Мышь" после тройного щелчка, то выделение растягивается на полные строки.
5. Край выделения можно переместить, таща "Мышь" с нажатой клавишей 1 при нажатой клавише Shift: при этом движется край выделения, ближайший к курсору "Мыши" в момент нажатия клавиши 1. Если перед началом движения по клавише "Мыши" был сделан двойной щелчок, то выделение будет растягиваться на полные слова; если тройной щелчок то на полные строки.
6. Щелчок по клавише 1 "Мыши" при нажатой клавише Control перемещает курсор ввода, не изменяя выделения.
7. При нажатии на клавиши обычных символов эти символы вводятся на месте курсора ввода.
8. Содержимое окна примитива можно сдвинуть с помощью движения "Мыши" при нажатой клавише 2. Если щелкнуть по клавише 2 "Мыши", не перемещая "Мышь", то выделение в тексте копируется в место курсора "Мыши". Нажатие на клавишу Insert также приводит к копированию выделения, но в место курсора ввода, а не курсора "Мыши".
9. При движении "Мыши" вне экрана с нажатой клавишей 1 содержимое примитива автоматически прокручивается и на экране появляется дополнительная порция текста (если вне экрана в направлении движения "Мыши" есть еще текст).
10. Нажатие на клавиши Left или Right приводит к сдвигу курсора ввода на один символ влево или вправо соответственно; при этом всякое выделение в тексте отменяется. Нажатие на клавиши Left или Right при нажатой клавише Shift приводит к сдвигу курсора ввода и расширению выделения на один символ.
11. Нажатие на клавиши Control-Left или Control-Right сдвигает курсор ввода на целое слово, а нажатие на клавиши Control-Shift-Left и Control-Shift-Right приводит к сдвигу курсора ввода и расширению выделения на одно слово.
12. Нажатие на клавиши Control-b и Control-f приводит к такому же результату, что и нажатие на Left и Right соответственно. Комбинации клавиш Meta-b и Meta-f дают тот же эффект, что и Control-Left и Control-Right соответственно.
13. Нажатие на клавиши Up и Down переводит курсор ввода на одну строчку вверх или вниз, отменяя при этом любое выделение в тексте. Нажатие на клавиши Up и Down при нажатой клавише Shift приводит к сдвигу курсора ввода и растягиванию выделения до нового положения курсора. Комбинации Control-Up и Control-Down сдвигают курсор ввода на один абзац (группу строчек, отделенную от соседней группы пустой строчкой), а комбинации Control-Shift-Up и Control-Shift-Down приводят к тому же к растягиванию выделения до нового положения курсора ввода. Комбинации Control-p и Control-n дают тот же результат, что и Up и Down соответственно.
14. Клавиши Next и Prior сдвигают курсор ввода вперед или назад на одну страницу; при этом выделения в тексте отменяются. Нажатие на клавиши Next и Prior при нажатой клавише Shift приводит к сдвигу курсора ввода и растягиванию выделения до нового положения курсора. Control-v сдвигает видимую часть текста на одну страницу вперед, причем курсор ввода не меняет своего положения и выделение также остается неизменным.
15. Комбинации Control-Next и Control-Prior сдвигают видимую часть текста на одну страницу вправо или влево, причем курсор ввода не меняет своего положения, и выделение также остается неизменным.
16. Нажатие на клавиши Home и Control-a помещает курсор ввода в начало текущей строчки, причем все выделения в примитиве отменяются. Shift-Home помещает курсор ввода в начало текущей строчки и растягивает выделение до нового положения курсора. Нажатие на клавиши End и Control-e помещает курсор ввода в конец текущей строчки, причем все выделения в примитиве отменяются. Shift-End помещает курсор ввода в конец текущей строчки и растягивает выделение до нового положения курсора.
17. Комбинации Control-Home и Meta-< устанавливают курсор ввода в начало текста, причем все выделения в примитиве отменяются. Control-Shift-Home устанавливает курсор ввода в начало текста и растягивает выделение до нового положения курсора.
18. Комбинации Control-End и Meta-> устанавливают курсор ввода в конец текста, причем все выделения в примитиве отменяются. Control-Shift-End устанавливает курсор ввода в конец текста и растягивает выделение до нового положения курсора.
19. Клавиша Select и комбинация Control-Space устанавливают опорную точку выделения в текущее положение курсора ввода. Текущее выделение при этом не изменяется. Комбинации Shift-Select и Control-Shift-Space растягивают выделение до текущего положения курсора ввода; если в тексте не было выделения, то выделяются символы между опорной точкой выделения и курсором ввода.
20. Нажатие на клавиши Control-/ приводит к выделению всего содержимого примитива.
21. Control-\\ отменяет выделение в примитиве.
22. Клавиша F16 (на многих станциях Sun обозначенная Copy) или Meta-w копируют выделение в примитиве (если оно есть) в буфер обмена.
23. Клавиша F20 (на многих станциях Sun обозначенная Cut) или Control-w копируют выделение в примитиве в буфер обмена и удаляют выделение. Если выделения нет, то нажатие на эти клавиши не приводит ни к каким действиям.
24. Клавиша F18 (на многих станциях Sun обозначенная Paste) или Control-y вставляет содержимое буфера обмена в положении курсора ввода.
25. Нажатие на клавишу Delete приводит к удалению выделения (если оно есть в примитиве). Если выделения нет, то нажатие на эту клавишу приводит к удалению символа справа от курсора ввода.
26. Backspace и Control-h удаляют выделение (если оно есть в примитиве). Если выделения нет, то нажатие на эти клавиши приводит к удалению символа слева от курсора ввода.
27. Control-d удаляет символ справа от курсора ввода.
28. Meta-d удаляет слово справа от курсора ввода.
29. Нажатие на клавиши Control-k приводит к удалению символов справа от курсора ввода до конца строки. Если курсор ввода находится в конце строки, то удаляется символ перевода строки.
30. Control-o открывает новую строку, вставляя символ перевода строки перед курсором ввода; положение курсора ввода при этом не изменяется.
31. Meta-backspace и Meta-Delete удаляют слово слева от курсора ввода.
32. Control-x удаляет выделение в текстовом примитиве.
33. Control-t меняет местами два символа справа от курсора ввода.
34. Если примитив сделан недоступным с помощью параметра -state, то текст можно двигать по экрану и выделять, однако курсор ввода не будет отображаться в примитиве и никакие модификации текста невозможны.
35. Определяя новые привязки к отдельным примитивам или переопределяя привязки класса, поведение текстовых примитивов можно изменить.

## ВОПРОСЫ ПРОИЗВОДИТЕЛЬНОСТИ

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

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

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

При каждом мигании курсора ввода строчка экрана, на которой он находится, перерисовывается целиком, что приводит к постоянному потоку графической информации. Для устранения этого эффекта установите атрибут insertOffTime в "0".