Может ли rlwrap использовать собственное завершение TAB для обернутой команды?

Я хочу использовать rlwrap с пользовательской репликой erlang.

Он отлично работает, если я запускаю его как «rlwrap -a myrepl».

Проблема в том, что myrepl имеет встроенное автодополнение табуляции, которое rlwrap топчет.

Я хочу сделать rlwrap, чтобы отпустить клавишу TAB


person Gabriel Tudor    schedule 09.02.2012    source источник
comment
Что такое майрепл? Это вопрос erlang или вопрос perl/rlwrap?   -  person Isac    schedule 09.02.2012
comment
Для меня преимущества использования rlwrap больше, чем ценность автозаполнения Erlang. Я не мог заставить их работать вместе, поэтому я использую rlwrap erl -oldshell.   -  person alavrik    schedule 09.02.2012


Ответы (2)


Вы не можете одновременно использовать редактирование/историю строки rlwrap и завершение TAB вашего repl.

rlwrap обеспечивает редактирование строк, историю и (очень простое) завершение для команд, у которых его нет. Команде, в которой есть что-то такое причудливое, как завершение TAB, не нужно rlwrap для редактирования строки, не так ли?

Параметр -a (--always-readline) — это довольно грубый способ заменить поведение редактирования строки rlwrap на поведение вашей команды. Это в первую очередь предназначено для команд, которые имеют очень простой редактор строк, без, например. история команд

Если вы хотите использовать опцию -a, потому что вы предпочитаете причудливость rlwrap (например, постоянную историю или цветные подсказки) вашей команде (например, завершение TAB), продолжайте, но невозможно выбрать какую-то причудливость одного и сохранить некоторые другие. .

Это (небольшая) цена, которую программы (и их пользователи) должны платить за отказ от библиотеки readline и прилагаемой к ней лицензии GPL.

Ганс (rlwrap автор)


Изменить (апрель 2017 г.):

Во многих случаях можно будет использовать фильтр для восстановления завершения. . Пример см. в оболочке узла на основе readline. этого.

person Hans Lub    schedule 09.02.2012
comment
В оболочке Erlang есть дополнение TAB, но отсутствуют некоторые другие области. Нет истории между сессиями, ограниченные возможности редактирования строк и т. д. - person Adam Lindberg; 10.02.2012
comment
@ Ханс, вы видите какие-либо причины, по которым, если я изменю источник rlwrap и удалю TAB из специальных клавиш или, возможно, переназначу его на какую-то другую клавишу, я не заставлю это работать? У меня не было времени попробовать, но я пользуюсь тем, что вы ответили на мой пост. - person Gabriel Tudor; 25.02.2012
comment
@ Габриэль: Удалить TAB из специальных клавиш недостаточно, это только даст вам мертвую клавишу TAB. Что действительно нужно сделать, так это то, что TAB очищает входной буфер базовой команды, передает ему текущий входной буфер readline, позиционирует его курсор, затем передает TAB, анализирует результирующий вывод (включая команды перемещения курсора) и, наконец, заполняет входной буфер readline и соответственно устанавливает rl_point. Все эти шаги сложны и подвержены ошибкам; особенно для анализа вывода вашей команды потребуется, чтобы rlwrap содержал эмулятор виртуального терминала. - person Hans Lub; 26.02.2012
comment
@HansLub спасибо, что прояснили это. Я отмечу это как решенное. Я бы проголосовал за вас, но у меня пока недостаточно репутации. - person Gabriel Tudor; 27.02.2012
comment
Позор, я хотел использовать rlwrap, чтобы получить привязки vim к реплике эликсира. Думаю, вместо этого я просто использую его из emacs. Спасибо за краткое объяснение. - person Mike H-R; 10.07.2014

Рлврап симпатичный. Но в Erlang он предлагает только постоянную историю, нарушая завершение табуляции erl.

Фундаментальная проблема заключается в том, что erl REPL в Erlang просто устарел и не работает и не следует обычным соглашениям * nix. Кроме того, они отказываются исправлять это из-за боязни случайных ворчливых системных администраторов, которые не могут принять никаких изменений. Никакие лайфхаки rlwrap не могут исправить плохой UX REPL.

Было бы лучше (хотя и значительно больше работы) написать REPL с нуля, например pry/ipython/etc. который выполняет настраиваемый цвет, завершение вкладок, постоянную историю, пейджинг, наблюдатель CLI, плагины и т. д.

Rlwrap отлично справляется с программами с примитивными оболочками.

person Community    schedule 13.04.2017
comment
Я думаю, что вы слишком суровы к случайным, ворчливым системным администраторам и переоцениваете сложность использования превосходной библиотеки readline. Основная причина этих старых и разоренных REPL — лицензия GPL readline: использование readline означает, что ваша программа должна быть GPL. См. этот обмен электронными письмами четверть века назад - вероятно, один из первых случаев применения GPL, в котором ключевую роль сыграла readline. - person Hans Lub; 24.04.2017