Pull to refresh

Comments 42

Кнопки и обработка ввода остались за кадром. Очень жаль. Было бы интересно почитать еще и про них
Для обработки пользовательского ввода можно использовать удобную библиотеку libtermkey. А для создания цикла обработки ввода, который бы поддерживал возобновление по разным сигналам (не только по завершении getch()) использовать eventfd.
Раз такая поддержка, я подготовлю второй пост на эту тему. Когда писал, я вообще не ожидал комментариев к этому посту. Раз тема интересна, с большим удовольсвтием продолжу
Так как обычно ширина букв в 2 раза меньше высоты, то тень от окон лучше рисовать как: 1 символ снизу, 2 справа.
На первом курсе университета писал что-то подобное, но на ncurses под линух.

Прочитал статью.
Все действительно тепло и лампово, но, увы, современный пользователь вряд ли осилит подобный интерфейс. В нем нет большой красивой кнопки «сделать все как надо».
Этот интерфейс не предназначен для конечного пользователя-потребителя. Зато он отлично подходит для упрощения работы админам. Всё же проще запустить такую программу и быстро всё настроить, чем разбираться в синтаксисе и допустимых комбинациях параметров различных конфигурационных файлов. Тем более такие программы можно спокойно запускать удалённо по ssh.
Всё-таки непонятна целевая аудитория. Админам и олдскульным программистам (типа меня) намного удобнее консоль. А остальным лучше привычный графический интерфейс. Имхо, конечно

P.S. Исправьте, пожалуйста «симпотично» — режет глаз не меньше чем «правельно» :) Я не наци, ноэто «режущие глаз» ошибки :)
Так она и будет запускаться в консоли :)

Про «симпотично», наверное, к автору.
Я имел ввиду чистая консоль. С ключиками
Некоторые программы имеют сложные конфиги. Например, ядро Linux. Обычно его конфигурируют из menuconfig. Думается, что и для других сложноконфигурируемых вещей (веб-сервера, почтовые службы) такие штуки найдут применение.
Да, возможно вы правы. Спасибо
Как раз ядро показывает что нужны оба варианта: ncurses чтобы что-то аккуратно выбрать из меню и консольная программа с сотней опций (или конфиг-файлом) чтобы интегрировать её ещё куда-то.

Практически проще всего написать пару таких программ где ncurses'ная генерирует ключики для «настоящей».

Конечно если процесс интерактивен (выбрали одну команду, посмотрели результат, выбрали другую, что-то ещё сделали), то так не получится, но тут уже уровень сложности начинает приближаться к «настоящей» программе, которую нужно разрабатывать уже не в одиночку и, возможно, даже иметь красивую кнопку «сделать всё как надо»…
Просто все гуевые конфигураторы там оказались менее удобными. Впрочем, инсталляторы и подобные вещи единственное исключение, где подобный интерфейс может быть удобен. Хотя не очень представляю как делать make menuconfig с планшета по ssh, например. :)
Прекрасная библиотека.
Именно она привила мне «ООП головного мозга» ;)
Морально устаревшее API. Но для С/С++ наверное пока лучше всё равно ничего нет. Для C# я потихоньку пишу удобную библиотеку, там можно будет описывать интерфейсы в XAML, и компоновать контролы как в WPF. Но пока ещё не готово (хотя для маленьких программ уже можно использовать). Описание окна будет выглядеть примерно так:

<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) — всё будет в комплекте.
Декларативность — это, конечно, хорошо, но поддержки не windows систем у вас по сути не будет. Я еще не видел системы, на которую бы устанавливали mono для запуска какой-нибудь программы и эта программа при этом нормально работала.
Моно занимает немного, мегабайт 20 всего в «базовой комплектации». Плюс в некоторых дистрибутивах (если я ничего не путаю) оно уже установлено по умолчанию. Gnome Do, например — это же моно-приложение.
Я не говорю про его размеры, я говорю про то, что оно еще не допилено до конца и редкая программа работает на нем без глюков. И это перманентное состояние, потому что мс регулярно выпускает новые версии фреймворков, не совместимые со старыми.

Писать программы на C# для не windows систем — очень странное решение по тем же самым причинам.
По-моему, новые версии .NET от Microsoft не особо влияют на стабильность моно ) Да и ядро моно давно уже стабилизировалось, в частности, я знаю программистов, которые доверяют ему и делают на нём даже веб-приложения. Вообще изначально я писал это для Windows. Но потом решил, что нельзя пренебрегать важным Linux-направлением, и добавил поддержку Mono. Тем более что такого рода инструменты в nix-среде хотя бы могут быть востребованы по сравнению с Windows, где это вообще никому не нужно. А вариантов нет, можно конечно попробовать написать на пайтоне, но я его не знаю ) По-моему, моно для этого вполне адекватный вариант. Поставить моно для работы нужной программы — это вообще не проблема для прагматически настроенных людей. Попробовали — работает — все довольны. Не работает — почистили, удалили моно, ждём фиксов.
Удивительно, что не видел этого раньше. Обязательно посмотрю, ибо тот же pdcurses не умеет меню, я их велосипедил руками под винду
Ух, оно еще живо? Сколько лет прошло :) В свое время было очень круто.
Насколько я помню, TurboVision была переписана под «современные» реалии 10 лет назад под (в том числе) и Win32 платформу. Переписана автором Ida Pro. В принципе тогда я эту библиотеку и пользовал в крайний раз.
Вспомнилась молодость. Лет этак 20 назад активно разбирался с TVision, писал тогда на Паскале. Уже в 2000 клиенту потребовалось написать фронтэнд к базе под текстовые терминалы на Unix-e. Как ни странно нашел билд TVision под юникс который без проблем компилился и работал. Юзеры хрюкали от счастья.

Помню к TVision кстати был то ли add-on то ли сторонняя разработка, которая добавляла полезных виджетов.
Для консольного UI есть плюсовая библиотека cwidget. Работает поверх curses.
"… современные люди не очень понимают и любят простую командную строку. А читать мануалы им тем более лень."
А в основном у современных людей для этого просто нет времени. Хорошо когда раньше программ было 2-3 десятка и ты знал все команды наизусть, теперь все иначе.
Немножко побуду капитаном, но интерфейс как раз предназначен для того, чтобы не читая мануалов работать с программой (даже неизвестной) и чем интерфейс лучше, тем эта работа будет проще.
Командная строка незаменима для процессов автоматизации, но для общения с живым человеком уже есть более человечные, простите за тавтологию, подходы.
Конечно, более того, сложилось мнение, что «красноглазить» за консолью должны админы и прочие системнщики. И все бы хорошо, но за три года работы в поддержке одной фирмы я пришел к печальному выводу — «админы уже не те». И чем крупнее фирма, тем хуже. Они покупают поддержку и просто звонят — делайте. Поэтому чем «человечней лицо» командлайновой программы, тем меньше издержки на поддержку и меньше ложных багов будет заводится. Тем меньше ошибок будет. Такая банальная вещь, как парсинг параметров почему-то у многих вызывает проблему. Жесткая последовательность там, где она нелогичная и так далее.
Из современных программ мне очень нравится xe в составе Xen Cloud. И автодополнение, и «подстрочные» подсказки и приятный разбор параметров, с гибким синтаксисом.
UFO just landed and posted this here
Недавно я решил поэксперементировать и сверстать TUI на HTML. Используя блочную модель и привычные border, background-color можно сделать интерфейс, который будет транслироваться в текст. Пока проект существует как proof-of-concept. Можно запускать в браузере или в консоли через phantomjs. Те мы фактически за даром получаем движок(CSS Box Model) и используя привычные многим языки(HTML+CSS+JS) можем рендерить текстовые интерфейсы. Живет на GH.
Вот не понимал никогда причем тут командная строка и подобная псевдографика, она куда ближе к gui, чем к интерфейсу командной строки. Поэтому я никогда особо не видел смысла во всех этих midnight commander'ах, проще уж графическими ФМами пользоваться, а в командной строке пользоваться командами и скриптами, а не окошками на псевдографике.
Иногда графической оболочки просто нет (например, на серверах она просто не нужна) или пользователь выполняет операции удалённо (например, через ssh) и ему доступна только консоль. В таком случае полезно иметь псевдогуёвое представление для упрощения работы.
Все очень просто. MC полезен, когда значительная часть работы связана с командной строкой, но при этом приходится очень часто передавать файлы в качестве аргументов. Просто такая удобная форма представления списка файлов прямо в консоли вместе со средствами управления этими файлами. Все же нормально скрещивать консоль с GUI в рамках самого GUI все еще не научились и проще делать это посредством отрисовки псевдо-GUI в консоли, чем наоборот. Кстати, когда я пробовал GUI-вые файловые менеджеры, то ощущение было такое, как будто все хорошо, но руки связаны за спиной.
Года три назад пытался писать консольный торрент-клиент на жаве, там же и нашел jcurses, а потом энтузиазм закончился. Спасибо, что напомнили.
Сделать свои гуи к rtorrent — практически одна из первых мыслей была в свое время, ибо штатные не устраивали. А потмо прикрутил вебморду…
Ненене, в rtorrent меня не устраивало то, что он смотрит файлы только по имени — в utorrent в папке с раздачей можно переименовать файлы и папки, он их не потеряет, т. к. действует по другому принципу: если размер файла совпадает до байта с описанным в .torrent-файле, то начинает проверять хеш. Хеш проверяется — файл найден. В никсах можно конечно симлинков наделать, но это костыль, не избавляющий от срача в папках с раздачами.
Насколько помню, написал либу по парсингу bencode и созданию .torrent-файлов из указанных папок. Потом написал разбиралку ответов трекера, нашел jcurses для консольной морды, нарисовал пару окошек и менюшек, на том и забросил. Т.к. сейчас в rtorrent у меня висит ~300 раздач и он грузит систему, судя по top, на 5-10%, то даже боюсь представить, что творилось бы с загрузкой системы java-поделием, будь оно дописано.
Если что, к трансмишну есть патч с переименованием раздач. Для того чтобы собрать его на моем NAS пришлось повозиться, но в конце-концов получилось навести с раздачами порядок да и загрузка вполне скромная. Минусы — переименование только в консоли, а также в специально патченом transmission remote .NET, вебинтерфейс патчем не затронут.
После статьи создалось впечатление, что вы только что начали читать книгу Петера Нортона о разработке его Коммандера, название, увы, вылетело из головы.
А было бы интересно узнать, ибо быстрое гугление ничего не дало. И вроде бы автором был John Socha?
Да, я тоже прошерстил библиографию Нортона, но, увы, не нашёл. Год примерно 98й. Увлекательная и доступная. По её мотивам написал свой просмотрщик-редактор памяти с псевдографическими окнами, мышью.
Это наверное
Нортон П., Соухэ Д. Язык ассемблера для IBM PC. М.: Компьютер, 1992.
Немного запоздало, но, всё же, спрошу.
Ваш тестовый образец корректно воспринимал одиночные нажатия Escape и не гадил в консоль разными символами вроде ~:#] при нажатии сочетаний клавиш вроде Shift+F1 или Ctrl+A?
Sign up to leave a comment.

Articles

Change theme settings