Комментарии 42
Кнопки и обработка ввода остались за кадром. Очень жаль. Было бы интересно почитать еще и про них
+14
Для обработки пользовательского ввода можно использовать удобную библиотеку libtermkey. А для создания цикла обработки ввода, который бы поддерживал возобновление по разным сигналам (не только по завершении getch()) использовать eventfd.
+1
Раз такая поддержка, я подготовлю второй пост на эту тему. Когда писал, я вообще не ожидал комментариев к этому посту. Раз тема интересна, с большим удовольсвтием продолжу
+7
Так как обычно ширина букв в 2 раза меньше высоты, то тень от окон лучше рисовать как: 1 символ снизу, 2 справа.
+4
Прочитал статью.
+3
Все действительно тепло и лампово, но, увы, современный пользователь вряд ли осилит подобный интерфейс. В нем нет большой красивой кнопки «сделать все как надо».
0
Этот интерфейс не предназначен для конечного пользователя-потребителя. Зато он отлично подходит для упрощения работы админам. Всё же проще запустить такую программу и быстро всё настроить, чем разбираться в синтаксисе и допустимых комбинациях параметров различных конфигурационных файлов. Тем более такие программы можно спокойно запускать удалённо по ssh.
+4
Всё-таки непонятна целевая аудитория. Админам и олдскульным программистам (типа меня) намного удобнее консоль. А остальным лучше привычный графический интерфейс. Имхо, конечно
P.S. Исправьте, пожалуйста «симпотично» — режет глаз не меньше чем «правельно» :) Я не наци, ноэто «режущие глаз» ошибки :)
P.S. Исправьте, пожалуйста «симпотично» — режет глаз не меньше чем «правельно» :) Я не наци, ноэто «режущие глаз» ошибки :)
+4
Так она и будет запускаться в консоли :)
Про «симпотично», наверное, к автору.
Про «симпотично», наверное, к автору.
0
Я имел ввиду чистая консоль. С ключиками
+1
Некоторые программы имеют сложные конфиги. Например, ядро Linux. Обычно его конфигурируют из menuconfig. Думается, что и для других сложноконфигурируемых вещей (веб-сервера, почтовые службы) такие штуки найдут применение.
+5
Да, возможно вы правы. Спасибо
0
Как раз ядро показывает что нужны оба варианта: ncurses чтобы что-то аккуратно выбрать из меню и консольная программа с сотней опций (или конфиг-файлом) чтобы интегрировать её ещё куда-то.
Практически проще всего написать пару таких программ где ncurses'ная генерирует ключики для «настоящей».
Конечно если процесс интерактивен (выбрали одну команду, посмотрели результат, выбрали другую, что-то ещё сделали), то так не получится, но тут уже уровень сложности начинает приближаться к «настоящей» программе, которую нужно разрабатывать уже не в одиночку и, возможно, даже иметь красивую кнопку «сделать всё как надо»…
Практически проще всего написать пару таких программ где ncurses'ная генерирует ключики для «настоящей».
Конечно если процесс интерактивен (выбрали одну команду, посмотрели результат, выбрали другую, что-то ещё сделали), то так не получится, но тут уже уровень сложности начинает приближаться к «настоящей» программе, которую нужно разрабатывать уже не в одиночку и, возможно, даже иметь красивую кнопку «сделать всё как надо»…
0
Просто все гуевые конфигураторы там оказались менее удобными. Впрочем, инсталляторы и подобные вещи единственное исключение, где подобный интерфейс может быть удобен. Хотя не очень представляю как делать make menuconfig с планшета по ssh, например. :)
0
Смотрели на turbovision?
Например такой tvision.sourceforge.net/
Например такой tvision.sourceforge.net/
+9
Прекрасная библиотека.
Именно она привила мне «ООП головного мозга» ;)
Именно она привила мне «ООП головного мозга» ;)
+3
Морально устаревшее API. Но для С/С++ наверное пока лучше всё равно ничего нет. Для C# я потихоньку пишу удобную библиотеку, там можно будет описывать интерфейсы в XAML, и компоновать контролы как в WPF. Но пока ещё не готово (хотя для маленьких программ уже можно использовать). Описание окна будет выглядеть примерно так:
А само окно так:
Data binding, нормальная система layout'ов, поддержка Win32 и Linux (с использованием Mono) — всё будет в комплекте.
<Window Name="window2" Title="Очень длинное название окна">
<GroupBox Title="Title">
<ScrollViewer VerticalAlignment="Stretch">
<ScrollViewer.HorizontalScrollEnabled>false</ScrollViewer.HorizontalScrollEnabled>
<ListBox>
<ListBox.Items>
<item>Длинный элемент 2</item>
<item>Длинный элемент 3</item>
<item>Длинный элемент 4</item>
<item>Длинный элемент 5</item>
<item>Длинный элемент 6</item>
<item>Длинный элемент 700</item>
</ListBox.Items>
</ListBox>
</ScrollViewer>
</GroupBox>
</Window>
А само окно так:
Data binding, нормальная система layout'ов, поддержка Win32 и Linux (с использованием Mono) — всё будет в комплекте.
+2
Декларативность — это, конечно, хорошо, но поддержки не windows систем у вас по сути не будет. Я еще не видел системы, на которую бы устанавливали mono для запуска какой-нибудь программы и эта программа при этом нормально работала.
+2
Моно занимает немного, мегабайт 20 всего в «базовой комплектации». Плюс в некоторых дистрибутивах (если я ничего не путаю) оно уже установлено по умолчанию. Gnome Do, например — это же моно-приложение.
+1
Я не говорю про его размеры, я говорю про то, что оно еще не допилено до конца и редкая программа работает на нем без глюков. И это перманентное состояние, потому что мс регулярно выпускает новые версии фреймворков, не совместимые со старыми.
Писать программы на C# для не windows систем — очень странное решение по тем же самым причинам.
Писать программы на C# для не windows систем — очень странное решение по тем же самым причинам.
+1
По-моему, новые версии .NET от Microsoft не особо влияют на стабильность моно ) Да и ядро моно давно уже стабилизировалось, в частности, я знаю программистов, которые доверяют ему и делают на нём даже веб-приложения. Вообще изначально я писал это для Windows. Но потом решил, что нельзя пренебрегать важным Linux-направлением, и добавил поддержку Mono. Тем более что такого рода инструменты в nix-среде хотя бы могут быть востребованы по сравнению с Windows, где это вообще никому не нужно. А вариантов нет, можно конечно попробовать написать на пайтоне, но я его не знаю ) По-моему, моно для этого вполне адекватный вариант. Поставить моно для работы нужной программы — это вообще не проблема для прагматически настроенных людей. Попробовали — работает — все довольны. Не работает — почистили, удалили моно, ждём фиксов.
+1
Удивительно, что не видел этого раньше. Обязательно посмотрю, ибо тот же pdcurses не умеет меню, я их велосипедил руками под винду
+1
Ух, оно еще живо? Сколько лет прошло :) В свое время было очень круто.
0
Вспомнилась молодость. Лет этак 20 назад активно разбирался с TVision, писал тогда на Паскале. Уже в 2000 клиенту потребовалось написать фронтэнд к базе под текстовые терминалы на Unix-e. Как ни странно нашел билд TVision под юникс который без проблем компилился и работал. Юзеры хрюкали от счастья.
Помню к TVision кстати был то ли add-on то ли сторонняя разработка, которая добавляла полезных виджетов.
Помню к TVision кстати был то ли add-on то ли сторонняя разработка, которая добавляла полезных виджетов.
+1
"… современные люди не очень понимают и любят простую командную строку. А читать мануалы им тем более лень."
А в основном у современных людей для этого просто нет времени. Хорошо когда раньше программ было 2-3 десятка и ты знал все команды наизусть, теперь все иначе.
Немножко побуду капитаном, но интерфейс как раз предназначен для того, чтобы не читая мануалов работать с программой (даже неизвестной) и чем интерфейс лучше, тем эта работа будет проще.
Командная строка незаменима для процессов автоматизации, но для общения с живым человеком уже есть более человечные, простите за тавтологию, подходы.
А в основном у современных людей для этого просто нет времени. Хорошо когда раньше программ было 2-3 десятка и ты знал все команды наизусть, теперь все иначе.
Немножко побуду капитаном, но интерфейс как раз предназначен для того, чтобы не читая мануалов работать с программой (даже неизвестной) и чем интерфейс лучше, тем эта работа будет проще.
Командная строка незаменима для процессов автоматизации, но для общения с живым человеком уже есть более человечные, простите за тавтологию, подходы.
0
Конечно, более того, сложилось мнение, что «красноглазить» за консолью должны админы и прочие системнщики. И все бы хорошо, но за три года работы в поддержке одной фирмы я пришел к печальному выводу — «админы уже не те». И чем крупнее фирма, тем хуже. Они покупают поддержку и просто звонят — делайте. Поэтому чем «человечней лицо» командлайновой программы, тем меньше издержки на поддержку и меньше ложных багов будет заводится. Тем меньше ошибок будет. Такая банальная вещь, как парсинг параметров почему-то у многих вызывает проблему. Жесткая последовательность там, где она нелогичная и так далее.
Из современных программ мне очень нравится xe в составе Xen Cloud. И автодополнение, и «подстрочные» подсказки и приятный разбор параметров, с гибким синтаксисом.
Из современных программ мне очень нравится xe в составе Xen Cloud. И автодополнение, и «подстрочные» подсказки и приятный разбор параметров, с гибким синтаксисом.
0
Недавно я решил поэксперементировать и сверстать TUI на HTML. Используя блочную модель и привычные border, background-color можно сделать интерфейс, который будет транслироваться в текст. Пока проект существует как proof-of-concept. Можно запускать в браузере или в консоли через phantomjs. Те мы фактически за даром получаем движок(CSS Box Model) и используя привычные многим языки(HTML+CSS+JS) можем рендерить текстовые интерфейсы. Живет на GH.
+2
Вот не понимал никогда причем тут командная строка и подобная псевдографика, она куда ближе к gui, чем к интерфейсу командной строки. Поэтому я никогда особо не видел смысла во всех этих midnight commander'ах, проще уж графическими ФМами пользоваться, а в командной строке пользоваться командами и скриптами, а не окошками на псевдографике.
0
Иногда графической оболочки просто нет (например, на серверах она просто не нужна) или пользователь выполняет операции удалённо (например, через ssh) и ему доступна только консоль. В таком случае полезно иметь псевдогуёвое представление для упрощения работы.
0
Все очень просто. MC полезен, когда значительная часть работы связана с командной строкой, но при этом приходится очень часто передавать файлы в качестве аргументов. Просто такая удобная форма представления списка файлов прямо в консоли вместе со средствами управления этими файлами. Все же нормально скрещивать консоль с GUI в рамках самого GUI все еще не научились и проще делать это посредством отрисовки псевдо-GUI в консоли, чем наоборот. Кстати, когда я пробовал GUI-вые файловые менеджеры, то ощущение было такое, как будто все хорошо, но руки связаны за спиной.
0
Года три назад пытался писать консольный торрент-клиент на жаве, там же и нашел jcurses, а потом энтузиазм закончился. Спасибо, что напомнили.
0
Сделать свои гуи к rtorrent — практически одна из первых мыслей была в свое время, ибо штатные не устраивали. А потмо прикрутил вебморду…
0
Ненене, в rtorrent меня не устраивало то, что он смотрит файлы только по имени — в utorrent в папке с раздачей можно переименовать файлы и папки, он их не потеряет, т. к. действует по другому принципу: если размер файла совпадает до байта с описанным в .torrent-файле, то начинает проверять хеш. Хеш проверяется — файл найден. В никсах можно конечно симлинков наделать, но это костыль, не избавляющий от срача в папках с раздачами.
Насколько помню, написал либу по парсингу bencode и созданию .torrent-файлов из указанных папок. Потом написал разбиралку ответов трекера, нашел jcurses для консольной морды, нарисовал пару окошек и менюшек, на том и забросил. Т.к. сейчас в rtorrent у меня висит ~300 раздач и он грузит систему, судя по top, на 5-10%, то даже боюсь представить, что творилось бы с загрузкой системы java-поделием, будь оно дописано.
Насколько помню, написал либу по парсингу bencode и созданию .torrent-файлов из указанных папок. Потом написал разбиралку ответов трекера, нашел jcurses для консольной морды, нарисовал пару окошек и менюшек, на том и забросил. Т.к. сейчас в rtorrent у меня висит ~300 раздач и он грузит систему, судя по top, на 5-10%, то даже боюсь представить, что творилось бы с загрузкой системы java-поделием, будь оно дописано.
+1
Если что, к трансмишну есть патч с переименованием раздач. Для того чтобы собрать его на моем NAS пришлось повозиться, но в конце-концов получилось навести с раздачами порядок да и загрузка вполне скромная. Минусы — переименование только в консоли, а также в специально патченом transmission remote .NET, вебинтерфейс патчем не затронут.
0
После статьи создалось впечатление, что вы только что начали читать книгу Петера Нортона о разработке его Коммандера, название, увы, вылетело из головы.
0
А было бы интересно узнать, ибо быстрое гугление ничего не дало. И вроде бы автором был John Socha?
0
Немного запоздало, но, всё же, спрошу.
Ваш тестовый образец корректно воспринимал одиночные нажатия Escape и не гадил в консоль разными символами вроде ~:#] при нажатии сочетаний клавиш вроде Shift+F1 или Ctrl+A?
Ваш тестовый образец корректно воспринимал одиночные нажатия Escape и не гадил в консоль разными символами вроде ~:#] при нажатии сочетаний клавиш вроде Shift+F1 или Ctrl+A?
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Теплый ламповый текстовый интерфейс. Просто о простом