Режим вставки/перезаписи в fish

Режим вставки/перезаписи в fish

Я использую Linux Mint на MacBook, и на его клавиатуре эквивалентом клавиши INSERT является комбинация Fn + RETURN.

На данный момент я могу видеть предполагаемое поведение этой комбинации только в GNU-Emacs: там режим перезаписи привязан к <insertchar>и <insert>.

Например, в веб-браузере это не имеет никакого эффекта. Внутри терминала Linux, а также внутри любого из эмуляторов терминала, которые я пробовал (например, konsole, xterm), вместо переключения в режим вставки, последовательность escape [2~выводится на экран.

Поскольку я считаю, что это полезная вещь, я хочу, чтобы она работала. Кто-нибудь знает, где это исправить?

Кстати: Fn + Backspaceпредставление "DELETE"прекрасно работает в указанных приложениях.

Кстати номер 2: Я использую оболочку fish. В оболочке bash последовательность escape не выводится, но и комбинация клавиш тоже не имеет никакого эффекта.

решение1

Эмуляторы терминала не могут редактировать текст самостоятельно, и поэтому на этом уровне не существует концепции режима вставки и режима перезаписи.

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

Для клавиши Insert правильным действием действительно будет отправка \e[2~escape-последовательности.

Интерпретация и переключение между режимами вставки и перезаписи (если они реализуют последний) зависят от приложений (оболочки fish/bash и т. д., текстового редактора emacs и т. д.).

решение2

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

Большинство терминалов имеют специальные клавиши (например Insert, ), которыесоглашениеотправить символы, которые соответствуют одноименной управляющей последовательности (которая будет отправленактерминал). Это потому, что изначально,локальный режимбыло чем-то, чем люди пользовались.

Любой ANSI-совместимый терминал может быть запущен вместныйрежим (не принимая во внимание как несущественные некоторые, которые сломали эту функцию). Это называетсярежим отправки/получения( SRM) в стандарте. В старых терминалах вам, возможно, придется учитывать другой режим длявставка. Втермино(5)Упомянутая страница руководства:

   move_insert_mode          mir    mi   safe to move while
                                         in insert mode

Отбросив условности, не все терминалы делают так, чтобы их специальные клавиши соответствовали управляющим последовательностям. Например,

  • сrxvt, клавиша вставки может отправить escape[2~, в то время как вставка символапоследовательность управленияесть escape[@и (для нескольких символов), режим вставки естьescape[4m
  • измененныйспециальные клавиши (например controlInsert, ) не могут отправлять символы, соответствующиелюбойПоследовательность управления. С помощью xterm они организованы так, чтобы избежать путаницы с существующими последовательностями управления, например, путем добавления параметров в местах, где упрощенные программы их игнорируют.

Дальнейшее чтение:

Связанный контент