2016-07-28 5 views
0

В качестве упражнения я хотел бы написать эмулятор терминала для Linux с нуля, чтобы понять, какие движущиеся части задействованы в нем. Мой язык выбора - D (потому что я изучаю его в настоящее время).Как написать эмулятор терминала с нуля (или не с нуля)?

Очевидно, что это не должно быть чем-то большим. Я бы хотел, чтобы у него было окно с цветом фона (и непрозрачность, позже), отображающее команду promt. Пользователь может ввести команду, и она вытолкнет результат. Основные вещи. Кроме того, я даже не знаю, с чего начать.

Я полагаю, что визуальная часть должна обрабатываться чем-то вроде gtk (с которым я никогда не работал), но как насчет всего остального? Может ли кто-нибудь описать возможную архитектуру и на что я должен смотреть?

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

Я также понимаю, что могут возникнуть другие вопросы, такие как этот, но я не мог найти ответы на качество. Если вы знаете такие ответы, обратитесь к ним.

+0

Почему бы вам не перевести ваш любимый терминал с открытым исходным кодом с его текущего языка на 'D'. Затем вы можете решить, достаточно ли вы научились, и вы можете найти лучшие термины (специальная тематическая терминология) для дальнейших исследований. Удачи. – shellter

+2

Я не думаю, что этот вопрос подходит для переполнения стека, потому что он не очень специфичен. Я думаю, самое лучшее, что вы можете сделать, это посмотреть на другие терминальные эмуляторы (которые также могут не быть записаны в D), а также передать какой-либо код или посмотреть на них. Но я не думаю, что есть общий ответ на то, что вы должны делать, потому что это ваш проект, и вы решите, что вы добавите и что вы не добавите. Но если вы хотите посмотреть эмулятор терминала, написанный в D, есть один в github: https://github.com/gnunn1/terminix – WebFreak001

+2

Я подозреваю, что вы можете объединить терминальные эмуляторы с оболочками. Терминальный эмулятор просто эмулирует устройство ввода-вывода, он не запускает команды или ничего не знает о запросах. В Linux эмулятор терминала выделяет псевдотерминал, открывая устройство мультиплексора '/ dev/ptmx' (возможно, используя' posix_openpt() '), это приводит к появлению подчиненного устройства на'/dev/pts'. Затем эмулятор терминала обычно генерирует оболочку с std {in, out, err}, подключенной к подчиненному устройству. – ninjalj

ответ

3

У вас уже есть отличный эмулятор терминала, реализованный в D под лицензией Mozilla Public License. Код здесь: https://github.com/gnunn1/terminix/tree/master/source/gx/terminix/terminal

Хорошим началом, однако, будет Адам Руппе (автор книги «D Cookbook») https://github.com/adamdruppe/terminal-emulator.

+1

Да, мой эмулятор терминала - именно то, о чем говорит OP: он на 100% с нуля (ну, я использую xlib и ядро, но это не считается :)) и обрабатывает множество распространенных программ, в том числе vim. Это на самом деле довольно сложнее, чем вы думаете ... эмуляция терминала - это боль в заднице. BTW: Я действительно использую мой как мой ежедневный терминал, на обеих Windows (sshing обратно в мою linux box, такую ​​как putty) и Linux. Он мягко багги и неэффективен в местах, но нет разбойников и, кроме того, он мой: P –

Смежные вопросы