ما هو عليه : مكتبة تسهيل تويس المعقدة على المحاكيات الطرفية الحديثة ، ودعم الألوان الزاهية ، والوسائط المتعددة ، والخيوط ، و Unicode إلى أقصى درجة ممكنة. يمكن القيام بالأشياء باستخدام notcurs التي لا يمكن القيام بها ببساطة مع ncurses. علاوة على ذلك بسرعة مثل القرف. ما هو ليس : تطبيق X/Open Curses المتوافق مع المصدر ، ولا بديل لـ Ncurses على الأنظمة الحالية.
لمزيد من المعلومات ، راجع صفحات Dankwiki و Man. بالإضافة إلى ذلك ، هناك إخراج doxygen. للاشتراك في القائمة البريدية ، أرسل بريدًا إلكترونيًا إلى [email protected] (لا تهم محتويات البريد الإلكتروني). لقد كتبت دليلًا متماسكًا ، وهو متاح للتنزيل المجاني (أو شراء غلاف عادي).
لم أضف بعد العديد من الأمثلة الموثقة ، ولكن SRC/ POC/ و SRC/ POCPP/ تحتوي على العديد من برامج C ++ الصغيرة على التوالي. يغطي notcurses-demo معظم وظائف Notcurses.
إذا كنت تقوم بتشغيل تطبيقات Notcurses في Docker ، فيرجى الرجوع إلى "Notes Environment" أدناه.



لا تتخلى Notcurses عن واجهة برمجة تطبيقات X/Open Curses المجمعة كجزء من مواصفات UNIX الفردية. بالنسبة لبعض الخلفية اللازمة ، استشر الأسئلة الشائعة الرائعة والموثوقة لـ Thomas E. Dickey. على هذا النحو ، فإن Notcurses ليس بديلًا للعملة.
كلما كان ذلك ممكنًا ، تستخدم Notcurses مكتبة TermInfo التي يتم شحنها مع ncurses ، وتستفيد بشكل كبير من قابلية الحمل وشدتها.
تفتح Notcurses وظائف متقدمة للمستخدم التفاعلي على محطات العمل والهواتف وأجهزة الكمبيوتر المحمولة والأجهزة اللوحية ، وربما على حساب بعض المحطات الصناعية والتجزئة. في الأساس ، تفترض Curses الحد الأدنى وتتيح لك (بجهد) التقدم ، في حين تفترض Notcurses الحد الأقصى ويتنحى (بنفسه) عند الضرورة. من المحتمل أن ينهار النهج الأخير على بعض الأجهزة القديمة ، لكن النهج السابق ينتج عنه برامج جديدة تبدو مثل الأجهزة القديمة.
لماذا تستخدم هذه المكتبة غير القياسية؟
كانت سلامة الخيط ، والاستخدام الفعال في البرامج الموازية ، بمثابة اعتبار تصميم من البداية.
سطح أكثر ترتيبًا من السطح الذي تم تدوينه بواسطة X/Open: يتم مسبوقة المعرفات المصدرة لتجنب تصادمات مساحة الأسماء الشائعة. حيث يتم استخدام رمز static inline فقط. هذا يسهل التحسينات المترجمة ، ويقلل من وقت المحمل. يمكن بناء Notcurses بدون وظائف الوسائط المتعددة ، والتي تتطلب مجموعة أقل بكثير من التبعيات.
تدعم جميع واجهات برمجة التطبيقات (APIs) مجموعة الأحرف العالمية (Unicode). تعتمد API nccell حول مفهوم مجموعة Grapheme الممتدة من Unicode.
الميزات المرئية بما في ذلك الصور والخطوط والفيديو والنص العالي التباين والعفاريت والمناطق الشفافة. تدعم جميع واجهات برمجة التطبيقات ألوان 24 بت أصليًا ، حيث تم تحديدها ككمية حسب الضرورة للمحطة.
الدعم المحمول للرسومات المعتادة ، باستخدام Sixel و Kitty وحتى وحدة التحكم Linux FrameBuffer.
دعم لبروتوكولات لوحة المفاتيح.
يسهل "وضع TUI" تطبيقات عالية الأداء ، غير الفاشلة ، على شاشة كاملة. يدعم "Mode CLI" التمرير لمرافق الصدفة ، ولكن مع الطاقة الكاملة لـ Notcurses.
إنه مرخص له Apache2 بالكامل ، على عكس الدراما في العديد من الأفعال التي هي رخصة Ncurses (تم تلخيص الأخير على أنه "إعادة صياغة لـ MIT-X11").
يمكن أن يكون الكثير مما سبق مع ncurses ، لكنهم ليسوا ما تم تصميمه من أجل. من ناحية أخرى ، إذا كنت تستهدف التطبيقات الصناعية أو الحرجة ، أو ترغب في الاستفادة من الموثوقية التي تم اختبارها وقابليتها للوقت ، فيجب عليك استخدام هذه المكتبة الجميلة بكل الوسائل.
تشير الإصدارات الدنيا عمومًا إلى أقدم إصدار اختبرته ؛ قد يكون من الممكن استخدام الإصدارات القديمة التي لا تزال. اسمحوا لي أن أعرف أي نجاحات!
مزيد من المعلومات حول البناء والتثبيت متوفرة في install.md.
إذا كنت ترغب في استخدام لغة أخرى غير C للعمل مع Notcurses ، فستتوفر العديد من الأغلفة. يتم تضمين العديد منها في هذا المستودع ، في حين أن البعض الآخر خارجي.
| لغة | الرصاص (ق) | مستودع |
|---|---|---|
| أدا | جيريمي غروسر | Jeremygrosser/notcursesada |
| C ++ | ماريك هابيرز ، نيك بلاك | داخلي |
| دارت | نيلسون فرنانديز | kascote/dart_notcurses |
| جوليا | Dheepak Krishnamurthy | kdheepak/notcurses.jl |
| نيم | مايكل س. برادلي جونيور | Michaelsbradleyjr/nim-notcurses |
| بيثون | نيك بلاك | داخلي |
| بيثون | IGO95862 | داخلي |
| الصدأ | خوسيه لويس كروز | Dankamongmen/libnotcurses-sys |
| متعرج | جاكوب دندالك | Dundalek/notcurses-zig-example |
يتم تثبيت تسعة تنفيذيين كجزء من Notcurses:
ncls : ls الذي يعرض الوسائط المتعددة في المحطةncneofetch : ripoff neofetchncplayer : تقديم الوسائط المرئية (الصور/مقاطع الفيديو)nctetris : استنساخ Tetrisnotcurses-demo : بعض رمز العرضnotcurses-info : اكتشاف وطباعة إمكانات/تشخيصات الطرفيةnotcurses-input : فك تشفير وطباعة المفاتيحnotcurses-tester : اختبار الوحدةtfman : متصفح يدوي Swank لتشغيل notcurses-demo من الخروج ، قم بتوفير دليل data عبر وسيطة -p . العروض التوضيحية التي تتطلب ملفات البيانات سوف تعمل على الإحباط. يمكن تغيير التأخير الأساسي المستخدم في notcurses-demo باستخدام -d ، وقبول مضاعف نقطة عائمة. القيم التي تقل عن 1 ستعمل على تسريع العرض التوضيحي ، في حين أن القيم التي تزيد عن 1 ستبطئها.
تتطلب notcurses-tester بالمثل أن يتم تحديد data المملوءة بملفات البيانات اللازمة ، باستخدام -p . يمكن تشغيله بمفرده ، أو عن طريق make test .
مع -DUSE_PANDOC=on (الافتراضي) ، سيتم بناء مجموعة كاملة من صفحات MAN و XHTML من doc/man . يتم تضمين وثائق التخفيضات التالية مباشرة:
TERM البيئة المتغير والمحاكيات الطرفية المختلفة.إذا كنت (من المفهوم) ترغب في تجنب مكدس Pandoc الكبير ، ولكن لا يزال أستمتع بالصفحات اليدوية ، فإنني أنشر كرة تار مع Man/XHTML المولدة مع كل إصدار. قم بتنزيله وتثبيت المحتويات كما تراه مناسبًا.
إذا كان متغير TERM خاطئًا ، أو أن تعريف TermInfo هذا خارج التاريخ ، فستكون لديك وقت سيء للغاية. استخدم قيم TERM المناسبة فقط للمحطة الخاصة بك. إذا كان هذا المتغير غير محدد ، أو لا يمكن أن يحمل إدخال TermInfo المحدد ، فسوف يرفض البدء ، ولن تذهب إلى الفضاء اليوم.
يستفسر Notcurs من الطرف عند بدء التشغيل ، مما يتيح بعض الميزات المتقدمة بناءً على المحطة المحددة (وحتى الإصدار). القدرات الأساسية ، ومع ذلك ، مأخوذة من terminfo. لذا ، إذا كان لديك ، على سبيل المثال ، Kitty ، ولكن TERM=vt100 ، فستكون قادرًا على رسم رسومات RGBA BITMAP (على الرغم من أن هذه الأشياء هي مجرد حلم لـ VT100) ، ولكنها غير قادرة على استخدام الشاشة البديلة (على الرغم من دعمها من قبل كل إصدار كيتي). لا يزال TERM وقاعدة بيانات TermInfo محدثة مهمة.
تأكد من تعيين متغير بيئة LANG الخاص بك على لغة مشفرة UTF8 ، وأنه قد تم إنشاء هذا المكان. هذا يعني عادة "[language]_[Countrycode].UTF-8" ، أي en_US.UTF-8 . الجزء الأول ( en_US ) يجب أن يكون موجودًا كدليل أو symlink في /usr/share/locales . يتطلب هذا عادةً التحرير /etc/locale.gen وتشغيل locale-gen . على أنظمة Debian ، يمكن تحقيق ذلك باستخدام dpkg-reconfigure locales ، وتمكين اللغة المطلوبة. يتم تخزين اللغة الافتراضية في مكان ما مثل /etc/default/locale .
إذا كان لدى المحطة الخاصة بك خيار حول التفسير الافتراضي لـ "أحرف العرض الغامضة" (هذا في الواقع مصطلح تقني من Unicode) ، فتأكد من ضبطه على نطاق واسع ، وليس ضيقًا (إذا لم ينجح ذلك ، تأكد من ضبطه على الضيق ، هيه).
إذا كانت المحطة الخاصة بك تدعم لون RGB 3x8bit عبر setaf و setbf (معظم المحطات الحديثة) ، ولكن لا تصدر إمكانية RGB أو Tc terminfo ، يمكنك تصدير متغير بيئة COLORTERM على أنه truecolor أو 24bit . لاحظ أن بعض المحطات تقبل مواصفات 24 بت ، ولكن قم بتخطيطها لألوان أقل. يتم تمكين RGB دون قيد أو شرط كلما تم تحديد معظم المحطات الحديثة.
يعتمد عرض الرسول الرسمية ، وفي الواقع ما إذا كان يمكن عرض الرسول الرسمية على الإطلاق ، جزئيًا على تكوين الخط. من الناحية المثالية ، فإن تكوين الخط الخاص بك يحتوي على غروب لكل EGC Unicode ، ويتطابق عرض كل Glyph مع نتيجة wcswidth() POSIX لـ EGC. إذا لم يكن هذا هو الحال ، فمن المحتمل أن تحصل على فراغات أو � (U+FFFD ، حرف بديل) للشخصيات المفقودة ، وقد تكون الأحرف اللاحقة على الخط في غير محله.
تجدر الإشارة إلى أن العديد من المحطات ترسم أحرف الكتلة مباشرة ، بدلاً من تحميلها من خط. هذا أمر مرغوب فيه بشكل عام. الربعات والسيكستان ليست هي المكان المناسب لإظهار براعة التصميم الخاصة بك. لتفقد تقديم بيئتك في رسم الشخصيات ، قم بتشغيل notcurses-info . يجب أن يبدو الإخراج المطلوب شيئًا من هذا القبيل:
إذا كسرت الأمور أو تبدو باهتة على خلاف ذلك ، فيرجى استشارة قسم ملاحظات البيئة! تحتاج إلى تعريفات TERM صحيحة و LANG ، وقد ترغب COLORTERM .
NCOPTION_CLI_MODE (اسم مستعار للعديد من الأعلام الحقيقية ؛ انظر notcurses_init(1) لمزيد من المعلومات). لا يزال يتعين عليك تقديم صراحة.-DUSE_MULTIMEDIA=none .notcurses_core_init() أو ncdirect_core_init() بدلاً من notcurses_init() / ncdirect_init() ، والربط مع -lnotcurses-core . من المحتمل أن يبدأ طلبك بضع مللي ثانية أسرع ؛ الأهم من ذلك ، سوف يربط مع الحد الأدنى من منشآت Notcurses.notcurses-demo (وربما بعض البرامج الأخرى). استخدم -DUSE_CXX=off .TERM الصحيحة ، يتم دعم العديد من محطات الأجهزة. بشكل عام ، إذا كان إدخال قاعدة بيانات TermInFO يشير إلى التأخير الإلزامي ، فلن تدعم Notcurses حاليًا هذه المحطة بشكل صحيح. من المعروف أن Notcurs يمكن أن تقود VT320 و VT340 ، بما في ذلك رسومات Sixel على الأخير.NCBLIT_PIXEL . وبالمثل ، لن يتم استخدام sextants ( NCBLIT_3x2 ) بدون NCVISUAL_OPTION_NODEGRADE Unicode 13 ncvisual_blit() إلخscreen .screen ألوان RGB (على الأقل من 4.08.00) ؛ إذا كان لديك COLORTERM محدد ، فستكون لديك وقت سيء. إذا كان لديك screen تم تجميعها باستخدام- --enable-colors256 ، فحاول تصدير TERM=screen-256color بدلاً من TERM=screen .mosh .NC_ENTER NCTYPE_RELEASE ، وسيؤدي كل مفاتيح عادةً إلى إدخالين على الأقل.NCKEY_RESIZE حتى أضغط على بعض المفاتيح الأخرى.SIGWINCH في بعض مؤشرات الترابط ، ويتلقى هذا الموضوع الإشارة بدلاً من مؤشر الترابط الذي يسمى notcurses_getc_blocking() . نتيجة لذلك ، لم ينقطع poll() . استدعاء pthread_sigmask() قبل التفريخ أي مؤشرات ترابط.NotCurses عندما أعود من main() ؟NotCurses الخاص بك قد تم تحديدها إلى main() ).ncplane_move_yx() ، حركه تحت مستوى غير شفاف مع ncplane_move_below() ، أو نقله خارج البليون مع ncplane_reparent() .ncplane_box_yx() ؟ هل تكره التعامد ، هل أنت مملة؟ncplane_box() والأصدقاء لديهم بالفعل الكثير من الحجج ، أنت وحش.graphics/qr-code-generator .cmake -DCMAKE_REQUIRED_INCLUDES=/usr/local/include . يتم تمرير هذا بواسطة bsd.port.mkLANG الخاص بك غير محدد أو محدد بشكل غير صحيح ، أو أن اللغة اللازمة غير موجودة على جهازك (من الممكن أيضًا أن تكون لديك NCOPTION_INHIBIT_SETLOCALE ، ولكن لا تسمى أبدًا setlocale(3) ، وفي هذه الحالة لا تفعل ذلك).ncplane عند استخدام nccell . لماذا لا يحمل الأخير مؤشر إلى السابق؟nccell صغيرة قدر الإمكان ، وكنت دائمًا ما يكون لديك ncplane في متناول يدي إذا كان لديك إشارة إلى nccell صالح على أي حال.valgrind /Asan ، ويظهر تسرب الذاكرة من libtinfo.so ، ما الأمر مع ذلك؟notcurses-demo ، لكن أرقام الطاولات الخاصة بي لا تتطابق مع أرقام شعار Notcurses ، أنت تشارلاتان.notcurses-demo يجعل عدة إطارات تتجاوز العروض التوضيحية الفعلية.notcurses_stop() / ncdirect_stop() على جميع مسارات الخروج ، بما في ذلك الإشارات المميتة (لاحظ أنه ، بشكل افتراضي ، يقوم Notcurs بتثبيت معالجات لمعظم الإشارات المميتة للقيام بذلك بالضبط).ncdirect_readline() موجودًا ، ويعمل الآن حتى بدون LIBREADLINE ، على الرغم من أنه بالطبع ليس بالضبط LIBREADLINE. في أي حال ، من المحتمل أن تكون أفضل حالًا باستخدام وضع CLI مع ncreader .pkg-config --static --libs notcurses (أو- --libs notcurses-core ) لاكتشافها.mintty مع -P on الوسائط ، أو تصدير MSYS=enable_pcon قبل بدء تشغيله.COLORTERM=24bit في كل مكان؟SendEnv COLORTERM إلى .ssh/config ، AcceptEnv COLORTERM إلى sshd_config على الخادم البعيد. نعم ، ربما يتطلب هذا الجذر على الخادم البعيد. لا تلومني يا رجل. لم أفعل ذلك.ncvisual من ذاكرة RGBA باستخدام ncvisual_from_rgba() .NCSTYLE_REVERSE ؟ncchannels_reverse() لعكس ألوان الأمامية والخلفية بشكل صحيح.ncsubproc .notcurses_refresh() بعد إرجاع notcurses_init() بنجاح."تم تطوير فنوننا الجميلة ، وقد تم إنشاء أنواعها واستخداماتها ، في أوقات مختلفة تمامًا عن الحاضر ، من قبل الرجال الذين كانت قوة العمل على الأشياء غير مهمة بالمقارنة معنا. لكن النمو المذهل لتقنياتنا ، والقدرة على التكيف والدقة التي حققوها ، والأفكار والعادات التي يخلقونها ، تجعل من المؤكد أن التغييرات العميقة وشيكة في الحرفة القديمة للجمال . " - بول فاليري