avva: (Default)
[personal profile] avva

Будет интересно только тем, кто знает, что такое Перл и Юникод. ncurses по умолчанию не поддерживает многобайтные символы, в том числе UTF-8. Начиная с какой-то недавней версии, есть возможность построить отдельную библиотеку, libncursesw вдобавок к обычной libncurses, у которой идентичный интерфейс и встроенная поддержка многобайтных символов.

Однако перловский интерфейс к curses, библиотека Curses, ничего об этом не знает и линкуется всегда с libncurses.

Предположим, я хочу написать программу на Перле, с текстовым интерфейсом через curses, с поддержкой вывода в разных кодировках, в том числе (самое простое и идеальное) utf-8, если терминал поддерживает. Я это не могу сделать, потому что libncurses портит некоторые мультибайтные символы, вставляя вместо них мусор. Стандартный интерфейс к curses-библиотеке ОС, который будет установлен там, где будет бежать моя программа - какой-нибудь линукс или BSD - будет заранее слинкован с libncurses (та часть интерфейса, которая написана на C и компилируется в динамическую библиотеку, которую перл подгружает в рантайме - Curses.so - динамически слинкована с libncurses). Что я могу сделать? Написать новую версию интерфейса Curses, которая линкуется с libncursesw если такая есть, и послать ее мейнтейнеру? Там всего-то менять - список библиотек для поиска, потому что на уровне API библиотеки ncurses и ncursesw совместимы. Но не факт, что он примет; если да, пройдет еще полгода, пока выпустит новую версию, и еще год после этого, пока она войдет в стабильные пакеты основных дистрибутивов. Написать полностью свой интерфейс к libncursesw и включить его в пакет программы? Идиотизм. Включить в пакет программы измененную версию стандартного Curses, которая линкуется с libncursesw, и устанавливать ее в отдельном месте под другим именем? Идиотизм. Ах да, есть еще прелестная возможность хака, скажем, скопировать системный /lib/libncursesw.so.5.5 в отдельную копию в свою директорию, назвать копию libncurses.so.5 (без w), и поставить LD_LIBRARY_PRELOAD так, чтобы она загрузилась вместо обычной libncurses.so.5, когда будет загружаться стандарнтый интерфейс Curses. Причем все работает тогда, я проверил. Но это ж несерьезно.

2006 год на дворе, типа.

Page 1 of 3 << [1] [2] [3] >>

Ну есть еще...

Date: 2006-09-22 09:22 pm (UTC)
From: (Anonymous)
libterm-slang-perl

Date: 2006-09-22 09:25 pm (UTC)
From: [identity profile] graycrow.livejournal.com
О, надо будет добавить в меморис, буду показывать тем, кто кричит "мастдай".

Date: 2006-09-22 09:32 pm (UTC)
From: [identity profile] avnik.livejournal.com
Написать Curses.pm на pure perl ;)
Будет работать всегда и везде ;)

PS Я уже думаю списочек делать -- библиотек которые на Pure Perl написаны.

Date: 2006-09-22 09:32 pm (UTC)
From: [identity profile] talash.livejournal.com
That library didn't have that name given to it in vain ;)

Re: Ну есть еще...

Date: 2006-09-22 09:41 pm (UTC)
nine_k: A stream of colors expanding from brain (Default)
From: [personal profile] nine_k
LD_LIBRARY_PRELOAD -- первое, что пришло в голову ;)

А maintainer-у надо послать патч, который позволит при инициализации модуля выбирать, с какой ncurses линковаться.

Btw, кто заставляет в 2006 году писать строго через ncurses? %) (про slang тут уже сказали)

Date: 2006-09-22 09:45 pm (UTC)
From: [identity profile] eth0-blog.livejournal.com
В дебиане есть в багрепортах такая же проблема - Bug #346476 (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=346476) - с патчем, кстати.
В Альлинуксе вроде уже добавили в стейбл.

Я думаю проблема в том, что на UTF-8 далеко не все дистрибутивы ещё перешли по умолчанию. Да и ncurses уже не так активно используется, как Qt :-)))

Re: Ну есть еще...

Date: 2006-09-22 09:49 pm (UTC)
From: [identity profile] avva.livejournal.com
Я посмотрел - она старая, 2000 года, не поддерживает еще наверняка те версии S-Lang, в которых есть нормальная поддержка UTF-8. Это не говоря уж о том, что я не люблю S-Lang, и хотел бы ncurses.

Re: Ну есть еще...

Date: 2006-09-22 09:51 pm (UTC)
From: [identity profile] avva.livejournal.com
что предложите вместо ncurses? slang не предлагать :)

Date: 2006-09-22 09:52 pm (UTC)
From: [identity profile] avva.livejournal.com
Я работаю под Ubuntu с локалью на utf-8 и очень доволен. "Все работает". Так например мой mutt слинкован с libncursesw итд. Все это уже так было и я ничего не менял.

Date: 2006-09-22 09:52 pm (UTC)
From: [identity profile] avva.livejournal.com
Спасибо за ссылку на багрепорт :)

Re: Ну есть еще...

Date: 2006-09-22 09:54 pm (UTC)
From: [identity profile] avva.livejournal.com
А патч такой мейнтейнер не примет, подозреваю.

Date: 2006-09-22 09:56 pm (UTC)
From: [identity profile] avva.livejournal.com
Это тоже подпадает под категорию "несерьезно" :)

Date: 2006-09-22 09:56 pm (UTC)
From: [identity profile] eth0-blog.livejournal.com
Ну Убунту вообще один из самых прогрессивных дистров :)
В дебиане, к примеру, утф8 по дефолту только в etch.

Re: Ну есть еще...

Date: 2006-09-22 09:58 pm (UTC)
From: [identity profile] avva.livejournal.com
А сделать действительно так, чтобы приложение пользовалось LD_LIBRARY_PRELOAD для своей нормальной работы - это слишком хак, конечно. "Пацаны не поймут".

Date: 2006-09-22 10:01 pm (UTC)
From: [identity profile] avnik.livejournal.com
Я в свое время мигрировал (точнее рекомендовал) на чисто перловую реализацию пары модулей --- в основном из за того, чтобы не бодаться с путями и разнымив ерсиями перла на солярке. Если продукт планируется распространяемым, и данная функциональность не сильно критичка по скорости выполениня -- то выбор чисто перловых модулей объясним -- их можно таскать с собой, если лицензия позволяет.

Date: 2006-09-22 10:02 pm (UTC)
From: [identity profile] avnik.livejournal.com
Ну от этого не легче тем, кто ставился еще до potato ;)
Тут миграции мешается куча окаменелостей ;)

Date: 2006-09-22 10:04 pm (UTC)
From: [identity profile] avva.livejournal.com
Да в принципе это знакомая идея, но вы подумайте, сколько работы curses-библиотека делает - анализ способностей терминала через terminfo/termcap, организацию виртуальных окон с прокруткой и прочими прелестями, компоновка виртуальных окон в виртуальный экран, эффективное использование способностей терминала для вывода виртуального экрана на терминал... это целая оконная текстовая библиотека, и это еще не говоря о вводе и других всяких ее штуках. Все это переписывать на перле - безумие.

Re: Ну есть еще...

Date: 2006-09-22 10:05 pm (UTC)
nine_k: A stream of colors expanding from brain (Default)
From: [personal profile] nine_k
Не знаю :-\
В последнее время я могу позволить себе роскошь писать UI исключительно под web browser-ы.
Вроде, кроме ncurses и slang, ничего приличного нет :( По кр. мере найти не могу.

Date: 2006-09-22 10:07 pm (UTC)
From: [identity profile] avnik.livejournal.com
Ну я же не знаю какая часть libcurses там используетися.
Кстати а что за софт это использует?
Я еще ни разу не видел консольного fullscreen написаного на перле.

Date: 2006-09-22 10:10 pm (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
koi8-r. это единственная кодировка, достойная внимания

Date: 2006-09-22 10:13 pm (UTC)
From: [identity profile] avva.livejournal.com
Нет, спасибо.

Date: 2006-09-22 10:17 pm (UTC)
From: [identity profile] avva.livejournal.com
Никакой, пока. Просто у меня есть глупая идея, которая может воплотится, а может и нет.

Не припомню известного текстового фулскрина на перле, но реально-то нет никакой причины, чтобы его не было.

Date: 2006-09-22 10:38 pm (UTC)
nine_k: A stream of colors expanding from brain (Default)
From: [personal profile] nine_k
Это вам никогда не доводилось писать на одном экране по-русски, по-испански и по-японски.

Date: 2006-09-22 11:08 pm (UTC)
From: [identity profile] ex-cheran.livejournal.com
На радость гугляндексу сюда можно добавить, что и попытки компиляции программы MrBayes (http://mrbayes.csit.fsu.edu/) на Ubuntu сталкиваются с ровно этой же проблемой, и ничего лучше описанного Анатолием хака мы не придумали.

Date: 2006-09-23 03:20 am (UTC)
From: [identity profile] ygam.livejournal.com
Вона не підтримує українські літери.
Page 1 of 3 << [1] [2] [3] >>

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 30th, 2025 05:02 pm
Powered by Dreamwidth Studios