webBG - програмисти, машинно обучение, javascript, python, php, питам, говорим, публикации

Писане на терминален емулатор на Linux

Бих искал да напиша x11 терминален емулатор, но не знам как трябва да хвърлям хайвера си и да комуникирам с обвивката, има ли някакъв основен (псевдо- или C) код за това? като какъв тип PTY да създам, как да обвържа обвивката към него, какви сигнали трябва да уловя или изпратя и т.н. всъщност не ми се струва да сортирам из целия източник на xterm.

РЕДАКТИРАНЕ: о, и аз искам да внедря начин за комуникация с всякакви приложения в него, как да направя откриването на функция? някаква скрита ansi последователност в "клиентите", надявайки се, че не се сблъсква с други терминални емулатори? някаква променлива на средата, надявайки се, че не се сблъсква с "клиентите" или е премахната от обвивката?


  • Започнете, като прочетете Разширено Linux програмиране и tty демистифициран след това проучете изходния код на напр. xterm или gnome-terminal (изучаването на такъв код отнема много по-малко време от преоткриването му) 22.03.2014
  • Донякъде се надявах да избегна изучаването на чужд код: P 22.03.2014
  • Тогава вероятно няма да имате достатъчно време, за да постигнете амбициозните си цели. Може би проучете rxvt изходния код (вероятно е по-малък). И защо искате да преоткриете друг терминален емулатор? Защо не подобрите съществуващ? 22.03.2014
  • защото не просто искам приложението за терминален емулатор, но то да бъде вградено в по-голяма моя програма, подобна на ide. 22.03.2014
  • има ли библиотека, която вече прави подобни неща? РЕДАКТИРАНЕ: libvterm, тестване на това. 22.03.2014
  • зависимостта от curses на libvterm е ужасна -_- 22.03.2014
  • добре, тъй като така или иначе използвам luajit, сега използвам само tset.de/lpty, което работи добре. 22.03.2014

Отговори:


1

YAT (още един терминал) https://github.com/jorgen/yat е подходящ за вграждане в Qt Бързи програми. Приносите за подобрение са добре дошли. (Отказ от отговорност: приятел започна този проект и аз работя по него понякога.) Той използва най-вече правилен подход (напр. използва правилно псевдотерминал на Linux, нещо, за което не знаех, преди моят приятел да обясни това) и има много функции; анализаторът обаче е написан от нулата и все още не е пълен с функции или без грешки.

За съжаление повечето терминални реализации досега са започвали от нулата или с еднократно монолитно разклонение (от rxvt например), което е много работа и води до това, че всички те са непълни. Така че мисля, че по-добра алтернатива би била използването на многократна библиотека само за логика, наречена libvterm: http://www.leonerd.org.uk/code/libvterm/ или да базирате терминала си на такъв, който вече го използва. По този начин, ако откриете грешки и ги поправите, ще подобрите цялата екосистема.

https://github.com/timmoorhouse/imgui-terminal е интересно и работи (поне донякъде), но е основен кандидат за пренаписване с libvterm, IMO. Ако обичате рендиране в незабавен режим в OpenGL, може да е добър избор така или иначе.

http://41j.com/hterm/ наистина използва libvterm и добавя няколко функции, които libvterm не използва имат за вградено изобразяване на графики (ReGIS и PNG). Но кодът не е достатъчно елегантен или достатъчно преносим, ​​IMO, и изобразяването на графиката „плава“ върху текста, вместо да бъде наистина вградено. Все още може да бъде адекватна отправна точка за някои случаи на употреба. В моето разклонение https://github.com/ec1oud/hackterm го накарах за изграждане с предимно модерна система библиотеки, но все още зависи от остаряла версия на SDL, която е включена.

03.11.2017
  • Здравейте, има ли официален документ или ръководство за libvterm? в сайта leonerd.org.uk не видях такъв. 14.01.2020

  • 2

    Добре, ако някой също се нуждае от това и използва lua, намерих http://www.tset.de/lpty библиотеката работи добре. все още тества ansi escapes и други неща, но трябва да работи.

    22.03.2014
    Нови материали

    Записване на грешки — Как да записвате грешки във вашето приложение, за да ги отстраните по-късно
    Записването на грешки е важна част от „обработването на грешки“. Накратко, когато възникнат определени грешки в програмите, вие искате да знаете за това. Това е особено важно при грешки. Ти..

    Кратко въведение в теорията на графите
    Кратко въведение в теорията на графите Втора част: внедряване на python на пълни графики В моята предишна статия въведох три основни концепции за графите: върхове, ръбове и тегла. В тази..

    Днес ще пиша за машинно обучение. Смятам се за ентусиаст, а не за експерт, така че имайте това предвид. С това казано, искам...
    Днес ще пиша за машинно обучение. Смятам се за ентусиаст, а не за експерт, така че имайте това предвид. С това казано искам да обясня защо машинното обучение има значение. За да бъда съвсем..

    Какво е структурно типизиране и как Typescript го използва в своя полза?
    Всички знаят тези дни, че „Typescript е строго синтактично надмножество на JavaScript и добавя незадължително статично въвеждане към езика.“. Но какво всъщност означава? Защо миграцията от..

    3 начина за премахване на дубликати от масив в Javascript
    Вие сте уеб разработчик? Програмист ли си? Тогава ще сте запознати с JavaScript и различните му вградени функции, методи и т.н. за различни реализации, проблеми и цели. Един от тези широко..

    Архитектура и обучение на конволюционни невронни мрежи (7 точки):
    Тази публикация предоставя подробности за архитектурата на Конволюционната невронна мрежа (CNN), функциите и обучението на всеки слой, завършвайки с резюме на обучението на CNN...

    Създайте разширение за Chrome с помощта на Angular
    Този урок е базиран на манифеста на разширението на chrome версия 3 (MV3), а също и на Angular версия 2+ (2, 3 и...). Ако не сте използвали манифест версия 3, можете да следвате този урок ,..