Я использую 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 они организованы так, чтобы избежать путаницы с существующими последовательностями управления, например, путем добавления параметров в местах, где упрощенные программы их игнорируют.
Дальнейшее чтение:
- ECMA-48: Функции управления для кодированных наборов символов
- Вставить/удалить символ(страница руководства terminfo)