D1P

|
Posted: Mon Sep 03, 2007 04:15 Post subject: |
|
|
Спокойствие, только спокойствие!
Quote: | Всё, это для меня уже за границей применимости. Такая консоль для меня абсолютно бесполезна, что бы в ней ни накрутили. |
Вот алгоритм, каким я себе его представляю (к сожалению, под рукой нет никаких средств построения диаграмм, иначе изобразил бы графически):
1) Есть несколько WIX-плагинов, которые могут получать ввод от командной строки (эта возможность регистрируется примерно так же, как и возможности архиваторных плагинов, через числовые константы, записываемые плагином в wincmd.ini). Допустим, это следующие плагины: cmd, putty, irc, icq, ru/en translator, spellchecker, calc, browser (назовём их консольными). Плюс у нас будут несколько WIX-плагинов, которые ввод из командной строки получать не смогут (он им не нужен) - буфер обмена, часы, трей, и т.д.
2) В глобальных настройках плагинов мы указываем, какой из плагинов должен получать введённую строку. Никакого "маршрутизатора" не требуется, это действительно сложно и не нужно. Мы просто выбираем из нескольких предложенных вариантов, так же, как это сделано в настройках просмотра по F3. Указываем ОДИН плагин, считающийся основным (по сути это тот, который мы будем использовать чаще всего) - аналогично тому, как мы выбираем альтернативное средство просмотра в настройках просмотра. Далее указываем как вести себя Тоталу при вводе в командную строку:
* "Поведение по умолчанию". TC ведёт себя как и прежде, плагин получает содержимое командной строки только при выполнений внутренней команды cm_SendToConsolePlugin. На команду может быть повешен хоткей, кнопка, пункт меню, плюс рядом с командной строкой может быть показана кнопка специально для этой команды.
* "Shift+Enter - перенаправление в консольный плагин". По Enter ввод идёт как обычно, по Shift+Enter - содержимое командной строки получит плагин. Обычное поведение по Shift+Enter (запуск через Noclose.pif) будет недоступно, однако можно предусмотреть внутреннюю команду cm_RunCMDWithNoClose со всеми вытекающими последствиями.
* "Enter - перенаправление в консольный плагин". Выбранный нами плагин безоговорочно получит ввод при нажатии Enter в командной строке. Shift+Enter будет работать как обычный ввод или через NoClose (мне всё равно, это не существенно). Можно также, чтобы все были счастливы, предусмотреть команду cm_RunCMD.
3) Итак, один плагин у нас "избранный" и тем или иным способом получает ввод. Это удобно, когда работа с этим плагином ведётся постоянно, но что делать, если требуется постоянно переключаться между ними? Я предлагаю следующие возможности:
3.1) Переключение через контекстное меню. В меню список всех консольных-WIX плагинов. Выбираем плагин, который будет активным. Так сделано с переключением наборов колонок WDX-плагинов, и никого не смущает, что это неудобно или медленно. Хотя это действительно неудобно и медленно.
3.2) Переключение по горячей клавише. Хоткей настраивается на команду cm_SetActivePluginX, где X - номер консольного плагина. Аналог - команды cm_SrcCustomViewX, переключающие наборы колонок. Само собой будут и cm_NextActivePlugin/cm_PrevActivePlugin (аналоги cm_SrcNextCustomView/cm_SrcPrevCustomView).
3.3) Переключение между табами на панели плагинов (об этом ниже).
4) Как смотреть ввод/вывод в плагине? Есть следующие режимы работы (и отображения) консольного плагина:
4.1) Панель. У TC будет дополнительная панель, похожая на то, что реализовал B4rr4cuda в своей консольке. Каждый консольный плагин будет иметь своё окошко в этой панели, переключение между окнами - через табы, как сейчас это сделано в файловых панелях. Я вижу это примерно так же, как сделано в Opera, т.е. это будет полноценный MDI-интерфейс. Хотя можно сделать и проще, для меня это не принципиально. Расположение панели иожно менять (drag'n'drop, или заранее предопределённые положения). Панель можно скрыть (свернуть в TC-трей, см. ниже), либо просто убрать как элемент интерфейса. Для этих функций должны быть предусмотрены внутренние команды
Активный плагин получает ввод, тут же можно посмотреть результат работы. Всё, по-моему, просто. Плагин может быть переведён в один из трёх других режимов.
4.2) Фон. Плагин никак себя не показывает, работая в фоне. Если он установлен, как активный, он получает ввод, но результаты очевидным образом не показывает. Либо, идёт в обход WIX API, самостоятельно создавая окошко для отбражения вывода (всплывающее оповещение в углу экрана, как в Opera). Такой режим работы удобен для задач, где вывод не важен, или отсутствует (например для IRC, висящей в фоне, можно командной запустить какой-нить скрипт). Для отображения списка плагинов, работающих в фоне, реализация WIX API должна предусматривать некое подобие трея, имеющегося у TC. Засунуть TC-трей можно куда угодно, либо показывать/скрывать его по настраиваемому хоткею. Также этот TC-трей сам мог бы быть реализован в виде плагина. Он был бы крайне удобен, скажем, для отбражения информации о фоновых процессах TC. Ближайший аналог такого TC-трея - трей виндовый.
Плагин может быть переведён из фонового в один из трёх других режимов.
4.3) Полный экран. Панель с плагинами разворачивается на всё окно (можно оставить панель интсрументов/командную строку, остальные элементы интерфейса в таком режиме будут явно ненужны). Разворачивание/сворачивание происходит по предусмотренным для этого внутренним командам. Выглядеть это будет как Ctrl+O в консольных файлменеджерах. Работа в развёрнутой панели аналогична работе в режиме панели обычной, т.е. это простое изменениеразмера панели. Аналог - изменение размера файловой панели TC.
4.4) Плавающее окно. Таб (окно) плагина может быть "отцеплено" из общей панели, и далее вести себя аналогично тому, как ведут себя окна листера, т.е. эту будет стандартное окно, принадлежащее TC. Удобство и отличие от обычного листер-плагина в таком режиме будет в том, что это окно может быть опять прицеплено к панели, и/или переведено в один из трёх других режимов. Для плавающего окна также должна быть предусмотрена возможность перехода в полноэкранный режим (аналог F11 в окне листера).
5) Что происходит при выключении плагина? Просиходит его выключение (логично). Плагин cmd, само собой, теряет всю историю вывода (если, конечно, он реализован как встройка стандартной консоли; если он сделан поверх консоли, как во Фригате, то вывод может и сохраняться), историю ввода терять вовсе необязательно. Другие плагины тоже могут хранить историю ввода/вывода где-нибудь у себя.
Вроде всё. Для всех "непонятных" пунктов я привёл примеры того, как это УЖЕ реализовано в аналогичных случаях в TC или других программах. Если описанное кажется сложным и неудобным - тогда почему в других случаях оно таким не кажется? В любом случае, я думаю, что проще реализовать не получится, и потому это не повод, чтобы браковать всю идею.
Если CG не захочет реализовать это сам - можно предусмотреть следующий вариант: API разрабатывается кем-то другим (B4rr4cuda - это, при должном подходе, вполне тянет на дипломную работу), готовое решение отдаётся CG, он приспосабливает его для TC. В конце концов, он использовал чужие наработки в TC (код работы с ZIP и регулярными выражениями).
Quote: | Короче говоря, у меня есть предложение. |
Возможно, ты его теперь пересмотришь. Я думаю, я привёл достаточно аргументов, идей и примеров. _________________ База знаний о Total Commander
Блог |
|