В этой статье есть несколько проблем. Помогите улучшить ее или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти сообщения ) |
Вставка со скобками (иногда называемая вставкой со скобками [1] ) — это режим некоторых эмуляторов терминала , который позволяет программам, работающим в терминале, обрабатывать вставленный текст иначе, чем текст, набранный обычным способом.
Функция вставки в скобках была введена xterm в 2002 году как пользовательское изменение для улучшения взаимодействия с Emacs . Позже, в 2005 году, другой пользователь задокументировал это как часть другой функции выбора/вставки для редактора JOE . [2] В течение нескольких лет другие разработчики адаптировали эту функцию для эмуляторов терминала и редакторов, которые работают с этой функцией. [3]
Вставка в скобках используется для решения следующей проблемы, часто встречающейся при редактировании кода в терминальном текстовом редакторе (например, Vim или Emacs ). Эти текстовые редакторы часто включают функцию автоотступа , которая автоматически добавляет отступ, когда пользователь нажимает клавишу Enter в конце строки. Например, предположим, что мы редактируем следующий блок кода в текстовом редакторе, при этом позиция курсора отмечена символом |
.
def f (): печать ( 'foo' ) |
Если пользователь нажимает клавишу Enter, текстовые редакторы часто перемещают курсор в место, отмеченное в следующем блоке кода.
def f (): печать ( 'foo' ) |
Это может иметь непредвиденные последствия при вставке кода, который уже отформатирован. Например, предположим, что пользователь намерен скопировать следующий блок кода в файл.
def g (): печать ( 'привет' ) печать ( 'мир' )
В типичном рабочем процессе пользователь начинает с выбора блока кода и копирования его в системный буфер обмена . Затем он выбирает целевое местоположение в своем файле и вводит команду вставки. Затем эмулятор терминала отправляет символы из буфера обмена в текстовый редактор, и текстовый редактор может не отличить, например, символ, d
поступивший из буфера обмена, от символа, поступившего от нажатия пользователем клавиши D на клавиатуре. Новые строки в блоке кода обрабатываются так же, как и нажатия клавиши Enter пользователем. Таким образом, когда новая строка в конце первой строки отправляется в текстовый редактор, если включена функция автоотступа, текстовый редактор вставит отступ (несколько пробелов или символ табуляции ) . Затем эмулятор терминала передаст пробелы, соответствующие пробелам в начале второй строки блока кода в буфере обмена, что приведет к двойному отступу. Более того, в этом контексте типичное поведение автоотступа будет соответствовать уровню отступа второй строки при начале третьей, что приведет к тому, что третья строка будет иметь тройной отступ. Окончательный результат может выглядеть примерно так:
def g (): печать ( 'привет' ) печать ( 'мир' )
Эмуляторы терминала (такие как xterm [4] и iTerm2 [5] ) позволяют программам настраивать поведение эмуляторов терминала с помощью escape-кодов или управляющих последовательностей .
Обычный способ сделать это заключается в том, что пользовательская программа печатает управляющую последовательность в стандартный вывод , а эмулятор терминала считывает стандартный вывод, замечает управляющую последовательность и реагирует соответствующим образом. В частности, эмуляторы терминала могут предоставлять управляющие последовательности, которые включают и выключают вставку в скобках. Текстовый редактор может отправить управляющую последовательность для включения вставки в скобках при запуске или в ответ на команду пользователя.
После этого символы, набранные пользователем, будут пересылаться в текстовый редактор эмулятором терминала обычным образом. Однако, если пользователь выдает команду вставки в эмуляторе терминала, эмулятор терминала вставит специальные управляющие последовательности в начале и конце вставленного текста — он заключит в скобки вставленное содержимое — что позволит текстовому редактору обрабатывать этот ввод по-другому (например, временно отключить автоотступ).
Каждая реализация использует управляющие последовательности, описанные в управляющих последовательностях xterm:
ESC [ 200 ~
для обозначения начала вставленного текста иESC [ 201 ~
чтобы обозначить конец.