LINUX.ORG.RU

Консоль с раздельными областями для ввода и вывода

 ,


0

1

Консоль по типу виндовой cmd, которую генерит сишное консольное приложение. Должно быть верхнее окно для вывода текста и нижний «edit» для пользовательского ввода. Желательно чтобы верхнее окно не моргало при вводе. Можно ли это сделать на чистом С++? Если нет, то посоветуйте легкую кроссплатформенную либу.

★★

Последнее исправление: CYB3R (всего исправлений: 2)
Ответ на: комментарий от Booster

Ничего кроссплатформенного нет? Что делать? Мне ничего навороченного не надо, только то что описал.

Должно быть верхнее окно для вывода текста и нижний «edit» для пользовательского ввода. Желательно чтобы верхнее окно не моргало при вводе.

Для этого тебе нужно:

1. Знать размеры терминала.

2. Уметь его очищать и переводить курсор в нужное место.

3. Иметь 2 буфера (для ввода и вывода) и как-то ими рулить (для буфера вывода будет динамический перевод строк? буфер будет FIFO с затиранием первой записи или хранить все, а выводить только что влезет? скролл?)

Ооочень простая задача. Пока не начнешь велосипедить.

Stil ★★★★★
()
Ответ на: комментарий от Booster

Она разве кроссплатформа?

Вроде через цигвин должна работать.

ya-betmen ★★★★★
()
Ответ на: комментарий от Stil

Область редактирования может быть самой простой, одна строка, без всяких скролов. Когда нажали enter, то ввод стирается. Для вывода да, должен быть перевод строк.

Booster ★★
() автор топика
Последнее исправление: Booster (всего исправлений: 1)

можно в bash`е такого добиться извернувшись с PS1 PS2

могу незадорого сделать на tcl`е :-) или дороже на gtk

MKuznetsov ★★★★★
()

Можно сделать на баше и screen/tmux.

x3al ★★★★★
()
Ответ на: комментарий от Booster

Для начала определись со своими требованиями. Что ты хочешь в своём эмуляторе терминала? Кроссплатформенность — какую именно? Ты хочешь VT100+? Или VTNT (оффтопик-консоль)? Ты осознаёшь, что одновременно оба варианта не бывают, в лучшем случае переключение? Или тебе ни того, ни другого?

Понимаешь, что «лёгких либ» для VT100+ нет в принципе, если не считать всякие libvte?

x3al ★★★★★
()
Ответ на: комментарий от Booster

И если тебе вообще не нужно форматирование и прочие фичи терминала, а просто дампить вывод в верхнюю половину, то бери и пиши, тут ничерта сложного нет и никаких библиотек для такой примитивщины тоже.

x3al ★★★★★
()
Ответ на: комментарий от x3al

И если тебе вообще не нужно форматирование и прочие фичи терминала, а просто дампить вывод в верхнюю половину, то бери и пиши, тут ничерта сложного нет и никаких библиотек для такой примитивщины тоже.

Если бы знал как, то не спрашивал. :)

Booster ★★
() автор топика
Ответ на: комментарий от Booster

Эмм. Сделать edit-бокс, popen того, что там введут, по enter, выхлоп писать в textbox сверху (никакой интерактивности)? Это буквально десяток строк на любом тулките.

man 3 popen процитировать или man по выбранному тобой тулкиту?

Или ты хочешь это в эмуляторе терминала? Тогда про ncurses тебе уже говорили. Кроссплатформенность (с windows) — проблемно.

x3al ★★★★★
()
Ответ на: комментарий от Booster

Тогда тебе велосипедить. Разбить вывод на 2 псевдографических окна — уже терминалозависимо, и кроссплатформенно ты это не сделаешь без библиотек. И готовых библиотек я не видел.

ncurses и что-нибудь виндовое по ifdef, может.

x3al ★★★★★
()
Ответ на: комментарий от Booster

Какой баш или gtk. Читайте требования.

И где требования прочесть? Ты не озвучил их. В треде все гадают на кофейной гуще **ЧТО ИМЕННО** тебе нужно. Быть может стоит тебе расписать свою задачу несколько яснее?

Такая херня что ли нужна? http://i.imgur.com/FjUa3gv.png

См. Передать команду в konsole и выполнить ее

EXL ★★★★★
()
Ответ на: комментарий от EXL

Да нет, консоль которая получается из консольного сишного приложения. По типу черной виндовой cmd.

Booster ★★
() автор топика

Escape sequences. После ввода переводишь курсор, куда нужно, печатаешь, переводишь обратно в строку ввода. Только придётся сначала узнать размер терминала (не знаю, как это делают в винде).

Psych218 ★★★★★
()
Ответ на: комментарий от Booster

Нет необходимости везде использовать pdcurses, его ещё и ставить надо будет. Интерфейс curses один (XSI curses standard определяет его), если никаких расширений не использовать (а для этой задачи это и не нужно), то написав под curses, где есть ncurses, можно использовать его, на винде pdcurses, на маках там чё-то своё, но тоже рабочее. Эти библиотеки только разные реализации, API у них общий по большей части.

xaizek ★★★★★
()

Я собирал такое из вима и dtach-а. Оба, AFAIK, написаны на C, т.ч. можно.

DonkeyHot ★★★★★
()
Ответ на: комментарий от int13h

Какие наезды? Всего лишь написал, что интерфейс должен быть консольный. Может кто-то не понимает что это, тогда скажу что должен быть терминал. :)

Booster ★★
() автор топика
Ответ на: комментарий от Booster

Тон вашего сообщения был грубым - заставили смотреть ТЗ, в котром явно ничего не было. Вы не указали требования к консоли/терминалу. Вам предложили bash, gtk. Почему вы не рассматриваете создание консоли через тулкит gtk - не ясно. В техтребованиях явно не указано, что необходим textmode.

int13h ★★★★★
()

На сколько я понял, ТСу надо что-то вроде этого, но только в консоли

#!/usr/bin/wish

ttk::frame .f -borderwidth 1
pack .f -fill both -expand 1

text .f.output -padx 5 -pady 5
pack .f.output

set cmd {}
ttk::entry .cmd_field -textvariable cmd
pack .cmd_field -side left -fill x -expand 1

ttk::button .btn_do -text "Enter" -command {runCommand; }
pack .btn_do -side left 

wm title . "MyBestConsole"

proc runCommand {} {
    global cmd
    if {![string length $cmd]} { 
        return 
    }
    .f.output insert end "$cmd - command output"
    .f.output insert end "\n\n"
    set cmd {}
}
WRG ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.