Комментарии 22
Один финский студент тоже озаботился написанием своей версии 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?
Помоему, автор путает CLI и терминал.
Терминал предназначен для отображения приходящих сообщений в ASCII на экран (в том числе с исполнением управляющих кодов) и отправления сообщений, которые вводит пользователь с клавиатуры. С какой системой и/или программой и каким интерфейсом связывается терминал - это не важно. RS232/RS485 (COM/UART), ethernet и т.д. Примеры аппаратных терминалов - DEC VT52. Есть их программные эмуляторы, из известных это штатный HyperTerminal винды и совсем крутой PuTTY.
CLI это не терминал, это вид управления системой - Command Line Interface. И основа его - командный процессор. Это та самая программа, с которой терминал, собственно, и связывается и которая исполняет введеные команды и посылает ответные сообщения. Например, command.com или bash.
Спасибо за такое объяснение
Когда я читал обо всем этом связанном, то почти везде cmd называлось как "терминал", а программы и их команды - CLI Apps.
Но лично здесь я написал "терминал" так, как пытался заменить стандартные команды и создать свои для cmd, получилось конечно CLI в итоге.
Извините, если статья как-то вводит в заблуждение, я вроде писал, что получился в итоге CLI App
Ну ничего страшного. Кстати верно заметили, что набор директив (команд) командного пооцессора может быть расширен. Например, для того же COMMAND.COM (или его эмулятора для NT CMD.EXE) директива CD встроена, а вот FORMAT уже нет. Это отдельная программа, которая ищется согласно списку путей %PATH% и запускается при нахождении (ну или командный процессор выведет "bad command or file name" если не найдёт). Нормальная практика.
На текущий момент я стараюсь создать "консольный 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 - в одном режиме прям терминал-терминал, в другом - закос под текстовый редактор.
Как новичок пытался написать свой «терминал»