№46 Консоль следующего поколения
Суббота, Сентябрь 6th, 2008Большинство современных консольных приложений умеют делать подстановку команд, файлов и папок по нажатию табуляции. Чего не хватает:
Выпадающего списка:
-Проводить взглядом по столбцу названий быстрее, чем читать название через каждое нажатие на клавишу Tab
-Полоса прокрутки позволяет увидеть количество оставшихся вариантов
-Иконки возле каждого элемента в списке дают дополнительную информацию о элементе
В таком урезанном виде это кое-где уже реализовалось. Но, по-видимому, не получило широкого распространения. (Или я отстал от жизни? Тогда поправьте, пожалуйста).
Сравнительно полно автоподстановка реализована в средах для программистов. Visual Studio не спрашивает, как это делают консоли: «Вы действительно хотите увидеть весь список с 1500 элементами?». В NetBeans возле каждого элемента из списка автоподстановки может отображаться документация с гиперссылками. Окно с документацией в Eclipse может превращаться в отдельное окно. То же самое нужно сделать возможным и в консолях.

Откуда брать «документацию» к каждому элементу из списка автоподстановки?
-Если идет подстановка файла, как параметра к набираемой команде, то для папок и файлов любого типа можно выводить информацию о времени создания/модификации, о правах доступа и владельце
-Для директорий, в дополнение к информации из предыдущего пункта, в окно с «документацией» (а по сути, с любой дополнительной информацией) также можно выводить содержимое директории. Можно и с полосой прокрутки, и с гиперссылками на папках для просмотра, и с надписью/панелью текущего адреса, и с кнопками навигации
-Для файлов, в дополнение к общей информации, можно добавлять предварительный просмотр. Для мультимедиа файлов это могут изображения, видео- и звуковые проигрыватели, для текстовых файлов – их содержимое. Желательно, также с полосой прокрутки, чтобы можно было оценить, что внутри
После ввода команды/имени исполняемого файла:
-Под *NIX системами, можно выполнить команду «man команда», и при нахождении документации вывести полученную информацию. Желательно в самом богатом из доступных форматов.
-Если man ничего не находит, можно выполнить саму команду с параметром «–help». В целях безопасности, выполнение можно производить с самыми урезанными правами. Еще более безопасный вариант – разрешать такие попытки получения информации только для программ из некоторого списка
-Набранные недавно команды также отображаются в списке. Рядом с командой, показывается информация о результате ее выполнения и времени запуска. При перенаправлении вывода команды в файл, можно вывести содержимое этого файла
Все варианты, рассмотренные до этого момента, работают без дополнительных усилий со стороны разработчиков сторонних программ. Но разработчики заинтересованы в том, чтобы делать свои программы более удобными. Если такие консоли станут популярны (а рано или поздно это случится по всем законам развития), то можно будет предусмотреть дополнительные механизмы. Например, в списке автоподстановки могут быть уже отдельные параметры запуска приложения. Это можно сделать при помощи интеллектуального парсинга существующей документации, но более легко – хранить разметку в отдельном файле. Например, рядом с каждой программой может лежать файл, с именем, сформированным по каким-либо правилам, например, «команда ПомощьДляКонсоли.xml». Оттуда можно брать информацию о параметрах, с гиперссылками, с проверкой типов. Например, в списке автоподстановки есть «-f файл». Выбираете эту опцию, и тут уже в дополнительном окне приоритет отдается файлам и папкам, может появится дополнительное окно – мини-браузер по локальной файловой системе. Сразу же может выводиться информация типа «у вас нету прав на изменение этого файла» («ой, забыли sudo», или «не тот файл»), «файл не должен быть read-only», «введите число», и т. д.
В более сложных случаях, можно предусмотреть генерацию такого файла с документацией автоматически после построения/сборки приложения программистом. Post-build step запускает что-то типа «команда –help-xml». Если парсер параметров в приложении объектный, то все происходит очень мило – каждый объект-команда выводит информацию о себе. Можно генерировать достаточно сложный xml, с вложенными параметрами, с целым описанием языка формата ввода параметров. В еще более замысловатых случаях можно предусмотреть интерфейс «консоль-парсер приложения».
Брутальные программисты, вошедшие во вкус, могут реализовать подгрузку и обновление документации для любых программ по сети. Для разгрузки центральных серверов с документацией можно применять P2P. Еще можно предусмотреть анализ консолью вывода приложений. Например, если выводятся имена файлов, то можно превращать их в гиперссылки, давать возможность перейти в необходимой паке или просматривать thumbnails.
Эти возможности настолько заманчивые, что, не будь других проектов, сам бы занялся. Если это все не реализовано, нужно будет пропиарить эти идеи. В крайнем случае, это ускорит создание такой программы через актуализацию этих идей в общемировом банке знаний.
Этот текст – Copyleft.
С учетом того, что у меня нет авторитета в соответствующих кругах, пиаром лучше заниматься кому-то другому.

