Почему терминал показывает «^[[A» «^[[B» «^[[C» «^[[D» при нажатии клавиш со стрелками в MacOS Apple Silicon M1 для С++?

Я ссылался на предыдущие вопросы, но ни один из них не помог. Проблема аналогична упомянутой здесь: Почему терминал показывает ^[[A ^[[B ^[[C ^[[D при нажатии клавиш со стрелками в Ubuntu?

Выполнение g++(gcc11) и его запуск. Невозможно переместить курсор с помощью стрелок.

Интересно, что при вводе данных в python такой проблемы нет.

Возможность перемещения курсора в Python3 input()

Я пробовал разные вещи, включая использование оболочки bash (3.2), вместо этого использование iTerm2, запуск macos 11.4 в безопасном режиме. Привязки клавиш терминального приложения установлены по умолчанию. Ничего из перечисленного не помогло.

  • Как этого избежать?

Изменить: Код С++:

#include <iostream>
using namespace std;

int main() {
    string s;
    cin>>s;
    return 0;
}

person Magic105    schedule 11.07.2021    source источник
comment
Python и bash используют компоненты редактирования строк. Ваша программа на С++ этого не делает. Если вы хотите добавить в свою программу возможность редактирования строк, вам нужно добавить ее. Не ждите, что он появится из воздуха только потому, что он есть в некоторых других программах. К счастью, это не сложно. Найдите такие библиотеки, как GNU readline или editline.   -  person n. 1.8e9-where's-my-share m.    schedule 11.07.2021
comment
Этот комментарий должен быть ответом.   -  person John Bayko    schedule 11.07.2021
comment
хорошо, OP попробовал оболочку bash. поэтому OP не реализует ввод текста. И никакая библиотека не должна быть необходима.   -  person apple apple    schedule 11.07.2021
comment
@n.1.8e9-где-мой-шарем. Оболочка Bash не работала.   -  person Magic105    schedule 11.07.2021
comment
и @ Magic105, пожалуйста, покажите свой код c++ (чтобы мы могли убедиться, что ваш код не вызывает этого)   -  person apple apple    schedule 11.07.2021
comment
@appleapple Добавлен скриншот кода C++.   -  person Magic105    schedule 11.07.2021
comment
Оболочка Bash не работала. Не знаю, что это значит. Можете ли вы редактировать строку в командной строке bash? Если нет, у вас неправильно сконфигурирована установка.   -  person n. 1.8e9-where's-my-share m.    schedule 11.07.2021
comment
Добавлен скриншот кода C++ Пожалуйста, никогда не добавляйте сюда скриншоты кода. Код — это текст. Если вы хотите опубликовать код, скопируйте и вставьте его как текст. Убедитесь, что это минимально воспроизводимый пример, иначе за него проголосуют и закроют.   -  person n. 1.8e9-where's-my-share m.    schedule 11.07.2021
comment
@n.1.8e9-где-мой-шарем. Виноват. Добавлен код в виде рассматриваемого текста.   -  person Magic105    schedule 11.07.2021
comment
@ Magic105 Я бы посоветовал добавить консоль, которую вы используете, в качестве тега. поэтому проблема переместится с кода на конфигурацию консоли.   -  person apple apple    schedule 11.07.2021


Ответы (1)


Python и bash используют компоненты редактирования строк. Ваша программа на С++ этого не делает. Если вы хотите добавить в свою программу возможность редактирования строк, вам нужно добавить ее. Не ждите, что он появится из воздуха только потому, что он есть в некоторых других программах.

К счастью, это не сложно. Есть несколько библиотек, которые реализуют именно это. Одним из них является строка чтения GNU. Есть несколько других, которые по-разному называются editline или libedit. Вам нужно выбрать один из них и использовать его в своем проекте.

Другой возможностью является использование отдельной программы с именем rlwrap, которая оборачивает вашу программу, добавляя возможности readline.

person n. 1.8e9-where's-my-share m.    schedule 11.07.2021