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

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

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

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

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

Кстати: Fn + Backspace , представляющий «УДАЛИТЬ» отлично работает в упомянутых приложениях.

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

0
23.05.2016, 01:07
2 ответа

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

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

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

Приложения (fish/bash/etc. shell, emacs/etc. текстовый редактор и т.д.) должны интерпретировать ее и переключаться между режимами вставки и перезаписи (если они реализуют последний).

1
28.01.2020, 02:48

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

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

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

   move_insert_mode          mir    mi   safe to move while
                                         in insert mode

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

  • с rxvt , клавиша вставки может отправлять escape [ 2 ~ ], а вставка -символ управляющая последовательность - это escape [ @ и (для нескольких символов) режим вставки - escape [ 4 m
  • модифицированные специальные клавиши (такие как control Insert ) не могут отправлять символы, соответствующие любому последовательность управления. В xterm они организованы таким образом, чтобы избежать путаницы с существующими управляющими последовательностями, например, путем добавления параметров в тех местах, где упрощенные программы их игнорируют.

Дополнительная литература:

0
28.01.2020, 02:48

Теги

Похожие вопросы