Сделать в своей консольной программе консоль с командами
От: Romantic306  
Дата: 23.03.11 06:36
Оценка:
Пишу консольную программу под линукс, у нее должен быть сетевой интерфейс (вэб-служба какая-нибудь), но хочу предусмотреть возможность локального управления ее работой, например, организовать ввод от пользователя команд с параметрами, но не простым чтением stdin с помощью scanf, а с возможностью редактировать команды (использовать перемещение курсора, del, backspace) и вызывать на редактирование предыдущие команды (вверх-вниз), как это делается в менеджерах консоли типа sh.
подозреваю, что эта задача не нова, но никак не могу найти библиотечку на языках C/C++, которая бы это реализовала.
Поможите, если кто знает, есть такой готовый компонент?
консоль c
Re: Сделать в своей консольной программе консоль с командами
От: LuciferSaratov Россия  
Дата: 23.03.11 06:51
Оценка:
Здравствуйте, Romantic306, Вы писали:


R>Поможите, если кто знает, есть такой готовый компонент?


GNU Readline Library
http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html
Re: Сделать в своей консольной программе консоль с командами
От: Кодёнок  
Дата: 23.03.11 06:51
Оценка:
Здравствуйте, Romantic306, Вы писали:

R>Пишу консольную программу под линукс, у нее должен быть сетевой интерфейс (вэб-служба какая-нибудь), но хочу предусмотреть возможность локального управления ее работой, например, организовать ввод от пользователя команд с параметрами, но не простым чтением stdin с помощью scanf, а с возможностью редактировать команды (использовать перемещение курсора, del, backspace) и вызывать на редактирование предыдущие команды (вверх-вниз), как это делается в менеджерах консоли типа sh.

R>подозреваю, что эта задача не нова, но никак не могу найти библиотечку на языках C/C++, которая бы это реализовала.
R>Поможите, если кто знает, есть такой готовый компонент?

man readline
Re[2]: Сделать в своей консольной программе консоль с команд
От: Romantic306  
Дата: 23.03.11 08:56
Оценка:
Здравствуйте, LuciferSaratov, Вы писали:

LS>Здравствуйте, Romantic306, Вы писали:



R>>Поможите, если кто знает, есть такой готовый компонент?


LS>GNU Readline Library

LS>http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html

Спасибо, как раз в точку!

Кстати, вот еще аналог — libedit
Re: Сделать в своей консольной программе консоль с командами
От: andrey_nado  
Дата: 23.03.11 12:55
Оценка:
Вообще говоря Вам, возможно, нужен командный процессор, интегрированный в Вашу программу. Тогда пользователь сможет не только вызвать, например, предыдущую команду, но и написать целый скрипт.

Я использую для этого библиотеку Tcl. Это не легковесное решение, зато к моим услугам целая стандартная библиотека Tcl, где есть, в том числе, и сетевые средства.
Re: Сделать в своей консольной программе консоль с командами
От: dmitry_npi Россия  
Дата: 24.03.11 07:05
Оценка:
Здравствуйте, Romantic306, Вы писали:

R> хочу предусмотреть возможность локального управления ее работой,...с возможностью редактировать команды (использовать перемещение курсора, del, backspace) и вызывать на редактирование предыдущие команды (вверх-вниз), как это делается в менеджерах консоли типа sh.


Я вообще-то Windows-программист, но мне кажется, что будет очень "linux way", если Вы напишете просто несколько консольных утилит, которые будут посылать сообщения вашей службе. Ну и их просто вызывать из sh... И будет там редактирование, и история команд, и все такое.
А если не хочется писать большое количество утилит, сделайте единого клиента, как например, svn:

svn checkout, svn update и т.д.

Это заодно даст возможность взаимодействовать с другими утилитами ОС, например послать вывод вашей утилиты в grep, или еще куда.
Атмосферная музыка — www.aventuel.net
Re: Сделать в своей консольной программе консоль с командами
От: gegMOPO4  
Дата: 24.03.11 12:07
Оценка:
Здравствуйте, Romantic306, Вы писали:
Как уже выше сказали — Readline (кроме редактирования и истории, позволяет сделать автодополнение, что тоже очень полезно). Обратите внимание, она под GPL. Значит, и ваша утилита должна быть под соответствующей лицензией.

libedit пока довольно плохо работает с UTF-8.

Если достаточно редактирования и истории, то простейшим решением будет rlwrap — обёртка, позволяющая использовать мощь Readline для ввода в любые программы. И GPL тут не обязательна. Или можно написать на баше свою обёртку, бесконечный цикл и read.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.