Я использую Linux Mint на MacBook, и на его клавиатуре эквивалентом клавиши INSERT является комбинация Fn + RETURN
.
На данный момент я могу видеть только предполагаемое поведение этой комбинации в GNU-Emacs: там режим перезаписи привязан к
и
.
Например, в веб-браузере это не действует. Внутри терминала linux, а также внутри любого из эмуляторов терминала, которые я пробовал (например, konsole, xterm), вместо переключения в режим вставки на экран выводится escape-последовательность [2 ~
.
Поскольку я считаю, что это полезная вещь, я хочу, чтобы она работала. Кто-нибудь знает, где это исправить?
Кстати: Fn + Backspace
, представляющий «УДАЛИТЬ»
отлично работает в упомянутых приложениях.
Между прочим, нет. 2: Я использую рыбий панцирь. В оболочке bash escape-последовательность не печатается, но комбинация клавиш также не действует.
Эмуляторы терминалов не могут редактировать текст самостоятельно, и поэтому концепция режима вставки и режима перезаписи не существует на этом уровне.
Они просто посылают нажатия клавиш запущенному приложению (через драйвер tty ядра), получают (опять же, через драйвер tty ядра) и интерпретируют данные от приложения и соответствующим образом обновляют экран.
Для клавиши Insert правильным действием будет послать \e[2~
.
Приложения (fish/bash/etc. shell, emacs/etc. текстовый редактор и т.д.) должны интерпретировать ее и переключаться между режимами вставки и перезаписи (если они реализуют последний).
Эмуляторы терминала имеют управляющие последовательности для вставки и удаления символов (и строк) на экране. Но когда вы запускаете приложение (будь то оболочка или текстовый редактор ), управляющие последовательности, которые вы можете ввести, как правило, не выводятся на терминал. . Приложение считывает эти специальные ключи и решает, какие управляющие последовательности отправлять на терминал. Эффект (вставка, удаление - и переопределение) - это просто картина того, что делает приложение. Реальные данные находятся в памяти приложения (или в файлах данных).
У большинства терминалов есть специальные ключи (например, Insert ), которые по соглашению отправляют символы, которые соответствуют одноименной управляющей последовательности (которая будет отправлена с на терминал). Это потому, что изначально люди использовали локальный режим .
Любой ANSI-совместимый терминал может работать в локальном режиме (не считая некоторых несущественных, в которых эта функция нарушена). В стандарте это называется режимом отправки / получения ( SRM
). В старых терминалах вам, возможно, придется принять во внимание другой режим для вставки . На странице руководства terminfo (5) упоминается:
move_insert_mode mir mi safe to move while
in insert mode
За исключением соглашения, не все терминалы заставляют свои специальные ключи соответствовать управляющим последовательностям.Например,
rxvt
, клавиша вставки может отправлять escape [ 2 ~
], а вставка -символ управляющая последовательность - это escape [ @ и (для нескольких символов) режим вставки - escape [ 4 m Дополнительная литература: