LINUX.ORG.RU

[python] Ищу адекватную альтернативу ncurses для ввода/вывода.

 


0

0

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

Что мне нужно для вывода - полноценный utf-8 без танцев с бубном. В целом вроде бы неплохо подходит легковесный termbox (http://code.google.com/p/termbox/), который хотя и ограничен в плане поддерживаемых терминалов, самые популярные и основные в целом держит, через ssh работает и изначально ориентирован на utf-8, так что претензий у меня к нему довольно немного и биндинги к питону я готов даже сам написать, но увы никак не могу связаться с автором для уточнения ряда интересующих меня вопросов.

Но вот со вводом полная беда. Мне нужна система ввода, которая давала бы полный контроль над клавиатурой и мышью, оповешала о нажатии/отпускании определенных клавиш по скан-кодам, предоставляла полный контроль над клавишами-модификаторми (alt, ctrl) и при этом без проблем работала опять же с юникодом в случае ввода в нелатинской локали. Судя по описании хорошо подходит gii, но она сильно наворочена, возможно даже излишне, а существующие биндинги к питону (с говорящим названием piggy) совершенно неадекватны, а писать свои биндинги я банально не потяну.

Есть у кого какие соображения?

★★★

>Имею наполеоновские планы начать довольно серьезный проект консольного приложения

Что за проект-то?

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

Полнофункциональный аналог старого доброго TurboVision (то есть полноценный оконный интерфейс в текстовом (читай - консольном) режиме) средствами Питона и потом уже довольно массивное приложение на нем написанное (пока не буду распространяться, какое).

ЗЫ. Существующие биндинги к, собственно, TurboVision не катят. Тем более, что они тоже завязанны на сраный ncurses, от одного вида которого со мной нервный тик случается.

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

Кстати, тоже давно интересует альтернатива. Хотя у меня планы маленькие, наконец, сделать приличный консольный файловый менеджер :) Но ncurses в Питоне очень уж нетороплив, ощущения неприятные...

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

> ncurses в Питоне очень уж нетороплив, ощущения неприятные...

В чём это заключается?

true_admin ★★★★★
()

может плагин для vim прикрутишь? или тебе скиллы прокачать тоже?

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

>Хотя у меня планы маленькие, наконец, сделать приличный консольный файловый менеджер :

Ты не поверишь, у меня ровно аналогичные планы. =) Так что если что, предлагаю скооперироваться. Да, а ncurses в питоне не катит не только по причине тормознутости, а по иной, гораздо более важной причине - по умолчанию питон слинкован с библиотекой ncurses, которая не понимает юникода, а не с ncursesw, в которой utf-8 таки работает. Не требовать же от конечного пользователя перекомпилировать интерпретатор, чтобы тот заработал с твоим поделием, ибо абсурд!

S-H-Dat
()

> но увы никак не могу связаться с автором для уточнения ряда интересующих меня вопросов.

могу связать с автором, когда он в ирц вылезет, в принципе, он тут уже недавно зарегался http://www.linux.org.ru/whois.jsp?nick=nsf

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

>newt попробуй

Выглядит интересно, а как у него дела обстоят с utf-8? И да, в принципе библиотеку всех этих виджетов я хочу написать с нуля на чистом питоне, так что мне бы чего нибудь более низкоуровневого для прямой работы с экраном. А как у него дела с вводом? Можно с клавиатурой на низком уровне работать?

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

>S-Lang ?

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

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

>могу связать с автором, когда он в ирц вылезет

Было бы неплохо. Хотя там у него в профиле сайт указан, на котором таки наконец-то я узрел его мыло. Пойду намылю. :)

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

>есть как минимум 2 версии turbovision под линукс

В смысле, родного турбовижна? Мне они не подходят по ряду причин. Ибо во первых в данный момент меня интересует прежде всего гибкость написания кода, так что привязывать себя к С-стилю я не считаю надобным. Во вторых они чаще всего реализованы на все том же curses, отказом от которого я считаю принципиальным моментом, ибо нефиг. В третих так как там у них дела обстоят с поддержкой юникода? Вот то-то и оно.

Имхо легче оно все в пайтон-стайл с нуля переписать, чем старое наследие дремучих лет в наследство тянуть. Или я не прав?

YogSagot ★★★
() автор топика
Ответ на: комментарий от S-H-Dat

>Ты не поверишь, у меня ровно аналогичные планы. =) Так что если что, предлагаю скооперироваться.

Ок, я не против. Но, учитывая мои нынешние темпы работы по сторонним проктам, вряд ли реально займусь этим вопросом в ближайшие пол-года - год :)

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

>Ок, я не против. Но, учитывая мои нынешние темпы работы по сторонним проктам, вряд ли реально займусь этим вопросом в ближайшие пол-года - год :)

А раньше и по любому не получится. Это время в лучшем случае на разработку начальной версии тулкита уйдет еще ДО начала, собственно, работы над самим файловым менеджером.

Кстати, то сообщение я писал, просто перелогиниться забыл.

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

Вот собсно я и есть тот самый автор termbox. Да я тоже хочу написать приличный файловый менеджер и изначально термбокс писался именно для этих целей. Но как вы сами понимаете, получился только termbox, а faraway (рабочее название файлого менеджера) не начался даже особо.

По поводу инпута. Вы не найдете либу где есть полный контроль над клавой, потому что в линуксе терминал просто физически не может такое проделывать. Т.е. придется либо брать напрямую инпут из ядра и писать свои драйвера для поддержки кеймапов, переключения раскладок и прочей ереси, либо в X'ах перехватывать сообщения окна терминала.

Тем не менее, я считаю, что имея тот набор клавиш, который однозначно работает (в сурцах термбокс где-то есть файл с описанием того, что работает и почему). Можно сделать прекрасный GUI! Vim, Emacs тому примеры.

По поводу файлого менеджера на питоне - не смешите мои тапочки. Напишите какой-нибудь никому не нужный lfm клон. Итак на головы линуксоидов сыпется куча недософта. Жаль конечно, что у нас нет своего Евгения Рошала.

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

Ну вот и славненько! Я сейчас копаю в сторону S-Lang, ибо уже в двух местах мне на него указали с таким намеком, что многие программисты используют его вместо curses (хотя я пока еще смутно себе представляю, зачем нужно спаивать питон с еще одним интерпретируемым языком).

Termbox мне показался хорош, во всяком случае мы запустили его удаленно по ssh заставив выводить кучу всяких нужных utf-8 символов (кириллицу, символы псевдографики, диактрики латышского, китайские иероглифы). В плане вывода неясна лишь пара моментов. Во первых можно ли как в curses определить момент смены разрешения экрана? Во вторых, можно ли определить ширину выводимого символа, ибо в случае с восточно-азиатскими языками один символ занимает не одну, а сразу две ячейки. В третих я уже почти не питаю надежд на этот счет, но все же реально ли получить содержимое консоли ДО инициализации перехода в режим библиотеки? Как я понял, ndn пытается для этого использовать средства vesa, но в других режимах работы терминала оно не работает, увы.

А что касается ввода, то набор доступных клавиш, конечно же, немал. Но я не свой интерфейс писать планирую, а клонировать интерфейс уже существующей программы и там есть очень значимые хоткеи, которые в термбоксе, увы, не работают. Как например ctrl+ins и shift+ins. Да, о невозможности работы на низком уровне это, конечно же, неприятная новость. Но с другой стороны, в документации к gii утверждается, что оно его умеет и очень этим оно гордиться (другое дело, что мне пока еще не удалось его скомпилировать, ага). То есть как-то оно наверное возможно же!

З.Ы. И да. Говоря о файловом менеджере на питоне никто клон никакого lfm делать даже думать не пытается, вообще в сторону mc да и вообще в целом nc-клонов никто даже не смотрит. Существовали же файловые менеджеры с принципиально иным подходом к интерфейсу!

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

> Во первых можно ли как в curses определить момент смены разрешения экрана?

В последних версиях в git приходит сообщение о смене размеров окна буфера. Реализовано отловом SIGWINCH.

> Во вторых, можно ли определить ширину выводимого символа, ибо в случае с восточно-азиатскими языками один символ занимает не одну, а сразу две ячейки.

Это они сами виноваты, что у них всё через жопу. У арабов тоже справа на лево.

Удачи вам, я уже понял, что ничего у вас не получится. :)

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

Еще одну вещь спросить забыл. Там в исходникак termbox'а определено 8 цветов, а мне точно потребуются все 16. Сложно ли будет определить такие цвета, как темно-серый и светло-серый и тому подобное?

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

>Удачи вам, я уже понял, что ничего у вас не получится. :)

Всегда любил ЛОР за непередаваемый оптимизм! =)

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

> Еще одну вещь спросить забыл. Там в исходникак termbox'а определено 8 цветов, а мне точно потребуются все 16. Сложно ли будет определить такие цвета, как темно-серый и светло-серый и тому подобное?

В терминале 8 цветов и модификатор BOLD. Ещё там какие-то сюрпризы были с бакграундом я не помню. Вроде не во всех терминалах бакграунд имеет все эти 16 цветов, а только 8.

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

>В терминале 8 цветов и модификатор BOLD

Правильно ли я понимаю, что модификатор BOLD обозначает вывод символов болдовым шрифтом и на цвет никак не влияет?

YogSagot ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.