Возможно ли иметь кросс-платформенный способ обработки клавиш backspace и стрелок в программе C или OCaml?Распознавание клавиш со стрелками с помощью stdin
На самом деле решение OCaml было бы оценено, но многие стандартные функции unix привязаны непосредственно к соответствующим вызовам API, поэтому при портировании решения C не должно быть проблем.
То, что я собираюсь достичь, - это уловить клавиши со стрелками, чтобы переопределить его поведение внутри оболочки (путем повторной обработки последней строки или операций, подобных этим). Я думаю, что эта вещь падает до фактической программы, и она не обрабатывается самим кодом, поэтому я не знаю, возможно ли это.
Программа составлена либо на Linux, OS X и Windows, (на Cygwin), поэтому я хотел бы сделать это для всех платформ ..
Мне почти удалось сделать эту работу, но как мне управлять ручным эхом персонажа? Я спрашиваю об этом, потому что stdin затем перенаправляется в парсер, который анализирует строки за строкой и интерпретирует его. Я должен разместить посередине и распечатать каждый символ? Но тогда, когда пользователь нажимает клавишу upkey, он должен заменить уже напечатанный символ на что-то другое. – Jack
Перечитав ваши вопросы, я думаю, что использование readline/ledit - это, вероятно, ваш лучший выбор. Но если вы хотите делать что-то вручную, вам придется вручную управлять stdin вашего синтаксического анализатора. Прочтите из stdin, проверьте, есть ли escape-последовательность, прямо на stdin вашего парсера. Я делаю что-то подобное здесь: https://github.com/aplusbi/reflow/blob/master/reflow.ml в функции 'main', где я читаю stdin для строки и затем записываю ее в файл_descr , Вы, вероятно, в конечном итоге делаете то же самое, но сначала проверяете escape-последовательности. –
эти символы стрелок на самом деле из стандартного ECMA 48 http://man7.org/linux/man-pages/man4/console_codes.4.html вы можете видеть, какие управляющие символы ECMA 48 поддерживает Linux: казалось бы, что переместить курсор влево 5 символов, которые вы можете сделать \ 027 [5D – aeroson