Comments 23
Один финский студент тоже озаботился написанием своей версии telnet...
Ну, я не знаю такую историю конечно
Но я просто пытаюсь сделать чуть удобнее терминал =)
Все вы так говорите поначалу:
У меня возникло множество претензий к Minix. Хуже всего была эмуляция терминала, очень важная для меня программа, потому что именно ее я использовал для подключения к университетскому компьютеру. Я зависел от этой эмуляции каждый раз, когда связывался с университетским компьютером, чтобы поработать с мощной Unix-системой или просто выйти в онлайн. Пришлось писать собственную программу эмуляции.
(C) Торвальдс Л. "Just for fun"
;)
Мне кажется, обычно для подобных статей добавляется некий дисклеймер, что там автор, например, учится в 7 классе и первый раз что-то такое делает. Потому что такие статьи от 14-летних школьников - это скорее похвально, что что-то сделал, да и решился выложить, молодец.
А от магистра-разработчика, даже если он впервые взялся за новый язык программирования - впечатление скорее сомнительное и минусов больше нахватает.
В итоге получился не терминал, а оболочка aka shell. Терминал (а если точнее - псевдотерминал aka pty) занимается в основном приёмом ввода от пользователя и рендерингом всякого текстового на экран. Собственно Windows Command Line, Windows Terminal, Kitty, Alacritty, wezterm, xterm и тд - это именно терминалы. Bash, fish, zsh, ksh, nushell - это уже командные оболочки, которые занимаются обработкой ввода пользователя, управления сессиями, окружением и прочим. Ваш питон как раз относится к последним.
Ну и чисто совет для новичка - научитесь поьзоваться вирутальным окружением aka venv и посмотрите как устанавливаются питоновские пакеты.
А почему load_modules делает COMMANDS[cmd_name] = func, а не дергает register_command?
Спасибо за такое объяснение
Когда я читал обо всем этом связанном, то почти везде cmd называлось как "терминал", а программы и их команды - CLI Apps.
Но лично здесь я написал "терминал" так, как пытался заменить стандартные команды и создать свои для cmd, получилось конечно CLI в итоге.
Извините, если статья как-то вводит в заблуждение, я вроде писал, что получился в итоге CLI App
На текущий момент я стараюсь создать "консольный CLI" как раз таки дополняющий системные команды (для ускорения и удобства работы).
В будущем же планируется написать вдобавок эмулятор самого shell, который будет работать на основе CLI, который как сможет запускать и системные команды, и кастомные, не входящие в стандартный пакет.
Спасибо Вам за фидбек, в следующих статьях я учту сказанную Вами теорию!
А вы один собираетесь это делать? Я могу помочь если надо.
Джва года хочу терминал, чтобы слева закладки, или, может, шаблоны команд, и чтобы быстро и удобно как-то можно было прыгать по нужным частям командной строки, хоть мышью, хоть табом, и эти части (только их) менять, например, только input и output в строке вроде `ffmpeg -y -i input.mp4 -progress pipe:1 -loglevel error -vn -c:a libmp3lame -q:a 1 output.mp3`, и чтобы... чтобы два раздельных окна для вывода того, что оно там навыводит - одно для stdout, другое для stderr... И чтобы горячие клавиши работали стандартные, а не какие-то особые, специальные, свои, только для терминала. Сохраняться можно.
Спасибо за некоторые идеи.
На текущий момент в Terminode есть простейший шаблонизатор. Если хотите, то можете создать свои моды с различным функионалом. Также в скором времени добавятся хоткеи, автодополнение и еще несколько функций. Насчет стандартных хоткеев, это смотря, что Вы имеете под в виду этими горячими клавишами.
В будущем планируется уже эмулятор терминала с интерфейсом. Также неплохая идея того, что создавать несколько окон, я подумаю над этим и возможно реализую. Если кратко - будет 2 версии, консольная и как приложение. В консольной все командами и кнопками, а в приложении уже и тыкать можно будет.
Спасибо за фидбек!
Насчет стандартных хоткеев, это смотря, что Вы имеете под в виду этими горячими клавишами.
Стандартные, типа Ctrl-C, Ctrl-V. Вряд ли будет хорошо, если так просто взять и сделать, потому что чем тогда процесс убивать, и т. п., но, может, можно упороться в мульти-модальность, а-ля Vim - в одном режиме прям терминал-терминал, в другом - закос под текстовый редактор.
Кажется , в декораторе command определять wrapper не нужно, т.к. поведение функции func не меняется, достаточно возвращать прямо ее.
Как новичок пытался написать свой «терминал»