У меня есть текущая LTS Ubuntu и еще раз я заметил что-то не так. Прямо сейчас при установке по умолчанию CTRL+[влево / вправо] не прыгает по слову. Что-то странное, если я не ошибаюсь, я думаю, что он работал правильно в дефолтном freebsd, как 10 лет назад. В любом случае, кажется, что даже по умолчанию левый и правый не работают должным образом по умолчанию! Если я наберу:

pxd[LEFT][LEFT][DEL]w[ENTER]

тогда я получаю pwd , очевидно (надеюсь?) Что я заметил сейчас, так это то, что в обычном приложении c++ cmd line это не работает. Вот пример кода:

#include <iostream>
#include <string>
using namespace std;
int main()
{
        string s;
        getline(cin, s);
        cout << "\n\n{\n" << s << "\n}" << endl;
}

Теперь скомпилируйте и запустите его: g++ test.cpp -o test && ./test и введите ту же последовательность клавиш, которая привела к pwd в bash. Вдруг это не сработает. Я получаю этот беспорядок: p[3~w

Что не так с терминалом во всех * никсах?

1 ответ1

1

Простые функции, такие как метод getline() используют готовый режим ядра tty драйвера, который имеет только некоторые действительно базовые возможности редактирования строки (backspace, ^W чтобы удалить слово и т.д.), Но не поддерживает стрелки или тому подобное.

Чтобы получить возможности редактирования всей строки, вы должны использовать библиотеку readline вместо getline() .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .