Вставка в скобках

Особенность некоторых эмуляторов терминала

Вставка со скобками (иногда называемая вставкой со скобками [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 ~чтобы обозначить конец.

Ссылки

  1. Нахман, Джордж (15 апреля 2018 г.). «Вставить скобки». iTerm2 wiki . Получено 13.02.2022 .
  2. ^ Moy, Edward; Gildea, Stephen; Dickey, Thomas (2005). "Xterm Control Sequences". Проект XFree86 . Получено 13 февраля 2022 г.
  3. ^ Дики, Томас Э. (2022). "XTerm – bracketed-paste". invisible-island.net . Получено 13 марта 2022 г. .
  4. ^ Moy, Edward; Gildea, Stephen; Dickey, Thomas (2022). "XTerm Control Sequences". invisible-island.net . Режим вставки в квадратных скобках . Получено 13 марта 2022 г. .
  5. ^ "Проприетарные Escape-коды - Документация - iTerm2 - Замена терминала macOS". iterm2.com . Получено 2022-02-13 .
Взято с "https://en.wikipedia.org/w/index.php?title=Bracketed-paste&oldid=1238052419"