View previous topic :: View next topic |
Author |
Message |
D1P

Joined: 20 Dec 2004 Posts: 2973 Location: Тбилиси
|
(Separately) Posted: Tue Sep 04, 2007 17:41 Post subject: |
|
|
Quote: | Функция перенаправления всех запускаемых в Тотале приложений (через командную строку, через запуск из файловой панели, с панели инструментов, из меню Запуск или при помощи пользовательских команд - абсолютно всех) - такая функция не может пригодиться ни одному WIX-плагину, кроме одного-единственного "черноокошечного плагина". |
Всё... кажется понял. Для тебя командная строка - это командная строка. Ввод команд, запуск приложений и т.п.
Теперь пойми ты. Для меня командная строка - строка ввода текста. Интерпретировать его должен плагин.
Про перенаправление запуска приложений я, насколько помню, вообще предложений не высказывал. Мне и в голову не приходило, что это нужно. Потому что это бесполезно делать плагином, я интерфейс для других целей предлагаю.
И если рассматривать ввод просто как ввод (так, например, как это делается в WFX API), а не получение чего-то там готового, то становится ясно, что это можно использовать для кучи всяких разных плагинов. Согласен? _________________ База знаний о Total Commander
Блог |
|
Back to top |
|
 |
CaptainFlint

Joined: 14 Dec 2004 Posts: 6197 Location: Москва
|
(Separately) Posted: Tue Sep 04, 2007 18:05 Post subject: |
|
|
D1P wrote: | Потому что это бесполезно делать плагином, я интерфейс для других целей предлагаю. |
О! О чём и я!
D1P wrote: | И если рассматривать ввод просто как ввод (так, например, как это делается в WFX API), а не получение чего-то там готового, то становится ясно, что это можно использовать для кучи всяких разных плагинов. Согласен? |
Если под вводом понимать исключительно командную строку Тотала (возможно, с переключением в командную строку, реализованную плагином), то абсолютно согласен.
Слава Богу, разобрались. Теперь, когда стало ясно, что для реализации "черноокошечного плагина" этого не достаточно, каково будет мнение относительно моего предложения реквестить обе фичи (API и поддержку Ctrl+O) независимо? _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
 |
VadiMGP
Joined: 21 Mar 2007 Posts: 1625
|
(Separately) Posted: Tue Sep 04, 2007 19:44 Post subject: |
|
|
2CaptainFlint
Не для спора, а просто поделиться одной мыслью, которая мне в голову пришла.
Помнишь о чем мы говорили на прошлом "сеансе связи" - несколько месяцев назад? Для того, чтобы смотреть вывод по Ctrl+O, Гислер должен перестать использовать CREATE_NEW_CONSOLE. Так? А что произойдет если он перестанет его использовать? Дал ты команду "ping mycomp1 -t", вернулся в коммандер? поработал и дал другую команду - "ftp mycomp2". Что произойдет? Правильно, абзац. И что Гислер должен с этим делать? |
|
Back to top |
|
 |
CaptainFlint

Joined: 14 Dec 2004 Posts: 6197 Location: Москва
|
(Separately) Posted: Tue Sep 04, 2007 20:21 Post subject: |
|
|
VadiMGP wrote: | И что Гислер должен с этим делать? |
Ничего - я же, вроде, писал об этом... Это ограничение, на которое я пошёл сознательно ради упрощения первой версии реализации. Управляемая консоль будет только одна, все остальные будут точно такими же, какими сейчас являются все консольные окна, запускаемые из Тотала (т.е. будут закрываться и уничтожаться по окончанию работы приложения).
Если Гислер реализует хотя бы такой одноконсольный вариант, это будет уже громадным шагом вперёд, после чего можно будет дополнительно предложить улучшение - расширить функциональность, добавив ещё несколько управляемых консолей и механизм для более удобной работы с ними. Иначе говоря, я остановился на варианте, который имеет минимальное соотношение трудозатрат к результативности: сейчас нет вообще никакой консоли - будет хотя бы одна, и достигается это относительно несложным и не громоздким добавлением (изменением) в коде. Следующий этап - увеличение числа консолей - требует уже разработки дополнительных команд, возможно - диалогов для того, чтобы знать, на какую из консолей переключаться, надо продумывать, как это сделать поудобнее для пользователя, и т.д. - трудозатраты значительно выше, чем в первом случае, а результативность заметно меньше (переход от нуля к одному куда значительнее перехода от одного к двум).
VadiMGP wrote: | Для того, чтобы смотреть вывод по Ctrl+O, Гислер должен перестать использовать CREATE_NEW_CONSOLE. Так? |
Фактически - да, только не для всех команд, а для тех, которые будут выполняться в управляемой консоли. В частности, если эта управляемая консоль уже занята (например, тем же самым пингом), новая команда выполняется с флагом CREATE_NEW_CONSOLE.
Почитай мой документик, я там это всё описал. _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
 |
D1P

Joined: 20 Dec 2004 Posts: 2973 Location: Тбилиси
|
(Separately) Posted: Wed Sep 05, 2007 08:44 Post subject: |
|
|
Quote: | Теперь, когда стало ясно, что для реализации "черноокошечного плагина" этого не достаточно, каково будет мнение относительно моего предложения реквестить обе фичи (API и поддержку Ctrl+O) независимо? |
Пожалуйста, чтобы не было очередного потока недоразумений, напиши, какими ты видишь эти фичи, и каким образом они должны будут использоваться. Боюсь, перечитывая все темы, посвящённые вопросу, я много чего упустил из виду. _________________ База знаний о Total Commander
Блог |
|
Back to top |
|
 |
VadiMGP
Joined: 21 Mar 2007 Posts: 1625
|
(Separately) Posted: Wed Sep 05, 2007 10:28 Post subject: |
|
|
CaptainFlint
Да читал, я долументик, читал. Я же говорю - я это не для спора, меня просто сомнения грызут - можно ли это реализовать на уровне коммерческого продукта. CaptainFlint wrote: | если эта управляемая консоль уже занята (например, тем же самым пингом), новая команда выполняется с флагом CREATE_NEW_CONSOLE | А возможно ли, например, определить занятость консоли учитывая и то, что юзер запустит batch, в котором находится команда start? Не знаю. Если возможно - хорошо, а если нет, то в такой ситуации "ничего не делать" чревато боком. |
|
Back to top |
|
 |
Митяй

Joined: 05 Oct 2005 Posts: 102 Location: Москва
|
(Separately) Posted: Wed Sep 05, 2007 11:35 Post subject: |
|
|
CaptainFlint wrote: | Функция перенаправления всех запускаемых в Тотале приложений (через командную строку, через запуск из файловой панели, с панели инструментов, из меню Запуск или при помощи пользовательских команд - абсолютно всех) - такая функция не может пригодиться ни одному WIX-плагину, кроме одного-единственного "черноокошечного плагина". |
Разрешите Вас перебить
Перенаправление всех запускаемых приложений можно считать частным случаем перенаправления всех внутренних команд. Если интерфейс позволит передавать в плагин информацию о всех выполняемых командах (с возможностью запретить выполнение или выполнить команду самому), то у нас появится возможность создать нехилый список таких плагинов перехватчиков.
Вот примеры:
1) Лог. Возможность записывать все действия TC в лог, превышающий своими возможностями стандартный. Настройки условий логирования и способа его хранения зависят только от воображения пользователя.
2) Блокировщик. Возможность заблокировать любое действие в TC. Например запуск программы, копирование определенного файла, удаление нескольких заданных файлов. Если делать TC в качестве шела, то это может пригодиться.
3) Оповещатель. Для слежения за работающим на компе. Посылает информацию о выполненном действии. Например на е-мэйл. Или любым другим способом. Или логирует и посылает лог при выходе из TC.
4) Записыватель макросов. Запоминает действия пользователя и на их основе пишет скрипт. Например на vbs. Такой плагин постоянно конечно запущен не будет, но перехват всех действий ему нужен.
5) Помощник . Скрепка. Которая будет следить за пользователем и давать советы. Напоминать о горячих клавишах. Подсказывать. При запуске выдавать совет дня.
Можно и другие плагины придумать. Например, можно заблокировать стандартное окно копирования TC и запустить свой собственный метод. Или заменить окно поиска. И появятся плагины копирования и поиска. Кажется, многие хотели такую возможность.
Добавлено:
Забыл написать ещё одну идею
6) Undo. Отмена последнего действия. Плагин делает бэкапы удаляемых файлов. Запоминает пути перемещения и копирования. При необходимости восстанавливает прежнее состояние. Можно даже делать резервные копии открываемых и редактируемых файлов. _________________ #155578 |
|
Back to top |
|
 |
CaptainFlint

Joined: 14 Dec 2004 Posts: 6197 Location: Москва
|
(Separately) Posted: Wed Sep 05, 2007 18:35 Post subject: |
|
|
D1P wrote: | Пожалуйста, чтобы не было очередного потока недоразумений, напиши, какими ты видишь эти фичи, и каким образом они должны будут использоваться. Боюсь, перечитывая все темы, посвящённые вопросу, я много чего упустил из виду. |
Фича нумер один: подробнейшим образом расписана в документе в скачиваемом архиве. В качестве готовой иллюстрации приложена прожка, показывающая общие принципы (конкретно - как выглядит запуск программ в управляемой консоли и в обычной консоли). Единственное, чего в ней не хватает - это кнопки принудительного запуска приложения в новой консоли (обычной), если управляемая консоль свободна. Сделать это несложно, пара строчек кода, просто возиться сейчас лень.
Иллюстрируемая функция реализуется совершенно самостоятельно, в коде самого Тотала, никаких API, никаких плагинов.
Фича нумер два: Новый WIX-интерфейс для реализации нового типа плагинов - интерфейсных, имеющих свою панель (а-ля TotalConsole), умеющих получать ввод из командной строки Тотала (а-ля WFX-плагины) и так далее - приблизительно так, как ты это описал в своём сообщении. Детали реализации для меня в этом случае становятся абсолютно некритичными, поскольку сохранение вывода консольных прожек (чему, изначально и посвящена была тема-то!) будет реализовано в полном объёме фичей нумер один.
VadiMGP wrote: | Я же говорю - я это не для спора, меня просто сомнения грызут - можно ли это реализовать на уровне коммерческого продукта. |
Согласись, это куда лучше того безобразия, что сейчас творится. Достаточно вспомнить хотя бы noclose.pif, реализованный через этот убогий command.com. И ничего, тоже на уровне коммерческого продукта вроде как...
VadiMGP wrote: | А возможно ли, например, определить занятость консоли учитывая и то, что юзер запустит batch, в котором находится команда start? Не знаю. Если возможно - хорошо, а если нет, то в такой ситуации "ничего не делать" чревато боком. |
Для того период бета-тестирования и существует. Конкретно твой пример (разумеется, с параметром /B) в моей программе не обнаружился, и консоль пометилась как свободная, хотя в ней продолжала работать программа.
VadiMGP wrote: | Если возможно - хорошо, а если нет, то в такой ситуации "ничего не делать" чревато боком. |
Обычный юзер подобные батчи писать не станет, а продвинутый сможет явным образом запустить этот батч в отдельной консоли, не занимая основную (управляемую). Это, разумеется, как крайний случай, если абсолютно ничего невозможно в такой ситутации сделать (в чём я сильно сомневаюсь).
Митяй wrote: | Разрешите Вас перебить |
Разрешаю.
Митяй wrote: | Перенаправление всех запускаемых приложений можно считать частным случаем перенаправления всех внутренних команд. Если интерфейс позволит передавать в плагин информацию о всех выполняемых командах |
(теперь перебью я) ... то задача превращается в нереальную. Такие плагины должны будут иметь возможность перебросить команду обратно Тоталу, а таких callback-ов пока не предусмотрено. Реализовывать подобный механизм очень муторно - потому что у каждой команды свой набор параметров, более того, во внутреннем представлении все эти форматы могут отличаться, как небо и земля, и Тоталу придётся постоянно конвертить данные туда-сюда между своим внутренним форматом и форматом, придуманным для работы с плагином (который должен быть хоть сколь-нибудь унифицированным, ведь не будут же плагинописатели перебирать структуры данных для всех - сколько там сейчас сотен команд уже набралось?), и такая конвертация существенно замедлит работу Тотала.
В целом идея неплохая, согласен, но дождаться её реализации (и не какой-нибудь, а удобной и быстро работающей), скажу честно, у меня надежды нет ни малейшей. _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
 |
Митяй

Joined: 05 Oct 2005 Posts: 102 Location: Москва
|
(Separately) Posted: Wed Sep 05, 2007 19:10 Post subject: |
|
|
CaptainFlint wrote: | Такие плагины должны будут иметь возможность перебросить команду обратно Тоталу |
Не совсем понял, что Вы имеете в виду. Под передачей команды я подразумевал только передачу номера этой команды. Для команд с параметрами, конечно, передаются эти параметры. Ну и можно запросить текущие каталоги, выделенные файлы и имя файла под курсором (это можно сделать и в отдельной функции). Всё.
Тотал передаёт плагину номер команды. Плагин может сделать две вещи - разрешить выполнение команды и запретить её выполнение.
Он может сначала совершить определённое действие (сделать резервные копии файлов), а потом разрешить выполнение тоталу. И тотал спокойно удалит файл, но пользователь может вызвать плагин и восстановить файл из резервной копии.
Или плагин может запретить тоталу выполнять команду и выполнит её сам. Тогда, он должен сам позаботиться о наиболее полной реализации функционала тотала. Сам нарисовать все окна и прогрессбары, сам вывести запросы на перезапись файлов и т.д.
Всё это я говорю даже не в качестве предложения, а как простое теоретическое размышление, максимально оторванное от реальной жизни. _________________ #155578 |
|
Back to top |
|
 |
CaptainFlint

Joined: 14 Dec 2004 Posts: 6197 Location: Москва
|
(Separately) Posted: Wed Sep 05, 2007 19:31 Post subject: |
|
|
Митяй wrote: | Под передачей команды я подразумевал только передачу номера этой команды. |
Плагин получил номер команды 905 (cm_Copy). Кто ему скажет, какие файлы, откуда и куда копирует Тотал? Какие у Тотала настройки, скажем, по работе с комментариями и эскизами (копируются ли они с файлами или нет)? Какие файлы реально окажутся скопированными, а какие - нет? (Из-за списка исключений, наличия одноимённых файлов, файлов "только для чтения", которые можно перезаписать, а можно и пропустить)? И таких параметров у каждой команды - тучи неисчислимые.
Митяй wrote: | Тотал передаёт плагину номер команды. Плагин может сделать две вещи - разрешить выполнение команды и запретить её выполнение. |
Тогда как будет построен твои примеры плагинов логирования и записывателя макросов, если они даже знать не будут, что конкретно пользователь собрался копировать?
Митяй wrote: | Или плагин может запретить тоталу выполнять команду и выполнит её сам. |
А для этого он должен знать хотя бы, какие файлы выделил пользователь в панели, какой текущий путь и какой путь к целевому каталогу. _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
 |
VadiMGP
Joined: 21 Mar 2007 Posts: 1625
|
(Separately) Posted: Wed Sep 05, 2007 20:48 Post subject: |
|
|
CaptainFlint wrote: | Согласись, это куда лучше того безобразия, что сейчас творится. Достаточно вспомнить хотя бы noclose.pif, реализованный через этот убогий command.com. | То, что noclose сделан убого спору нет. А насчет лучше... Честно говорю - не знаю пока. noclose я все равно не использую, но я и не слышал об ошибках, связанных с ним. А вот batch co start внутри - я пока даже придумать не могу куда рыть, чтобы обслужить такое.
Конечно, такие команды будут работать в отдельном cmd, но посуди сам - я сегодня захожу в директорию ORACLE, где лежат тучи неведомых мне файлов и запускаю их по инструкции. Что там внутри - понятия не имею. Причем всё, и примитивный пинг, ipcofig и навороченный батник работает в одном и том же окне (либо cmd.exe либо TConsole). Одно окно (неважно какое, но одно) на всё.
А вот знать что именно сидит внутри чужого тысячестрочного batch или vbs или cmd файла и, в зависимости от этого решать где его запускать... Ну ты понял. Это не метод. Не может быть, чтобы тебя это устроило. Решение должно работать всегда.
Чтобы не было недопонимания. Я, естессно, за твое предложение, ведь я сам же и говорил: просить надо и то и другое - авось, что-нибудь, да получим. Я сейчас, просто верчу твою идею более тщательно и ищу подводные камни. Я не люблю, когда они возникают внезапно. |
|
Back to top |
|
 |
D1P

Joined: 20 Dec 2004 Posts: 2973 Location: Тбилиси
|
|
Back to top |
|
 |
CaptainFlint

Joined: 14 Dec 2004 Posts: 6197 Location: Москва
|
(Separately) Posted: Thu Sep 06, 2007 00:35 Post subject: |
|
|
VadiMGP wrote: | А вот batch co start внутри - я пока даже придумать не могу куда рыть, чтобы обслужить такое. |
Ну ёпрст... Ну хорошо, на этот вопрос отвечу. Итак:
1. Буквально первый же взгляд в MSDN сразу обнаруживает функцию GetConsoleProcessList, возвращающую список процессов, приаттаченных к текущей консоли.
2. Попробуй написать такой батничек и запустить его в самом обычном cmd-шном окне. О результатах можно не докладываться, просто ответь: если в винде, в стандартных приложениях наблюдаются такие эффекты, считается ли криминалом наличие таких же эффектов в Тотале? Согласен, отсутствие их было бы плюсом - и по этому поводу см. пункт 1.
Может, не стоит тратить время на подобные выяснения, а всё же, наконец, предложить идеи Гислеру, пока он сам не сказал, что уже выбрал себе списочек из виш-листа и больше ничего добавлять не хочет?
VadiMGP wrote: | Чтобы не было недопонимания. Я, естессно, за твое предложение, ведь я сам же и говорил: просить надо и то и другое - авось, что-нибудь, да получим. Я сейчас, просто верчу твою идею более тщательно и ищу подводные камни. Я не люблю, когда они возникают внезапно. |
Искать и находить можно до бесконечности. Сразу заявляю: камни были, есть и будут - как практически в любой функции Тотала. Но ведь живём как-то. _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
 |
VadiMGP
Joined: 21 Mar 2007 Posts: 1625
|
(Separately) Posted: Thu Sep 06, 2007 01:12 Post subject: |
|
|
Я не понял при чем тут GetConsoleProcessList к моему вопросу, но это уже неважно.
CaptainFlint wrote: | Может, не стоит тратить время на подобные выяснения, а всё же, наконец, предложить идеи Гислеру, пока он сам не сказал, что уже выбрал себе списочек из виш-листа и больше ничего добавлять не хочет? | Господи, я же не знал, что из-за этих выяснений дело стоит. я думал это никак не связано. Тогда, конечно, все вопросы снимаю. Фиг с ними. |
|
Back to top |
|
 |
CaptainFlint

Joined: 14 Dec 2004 Posts: 6197 Location: Москва
|
(Separately) Posted: Thu Sep 06, 2007 01:21 Post subject: |
|
|
VadiMGP wrote: | Я не понял при чем тут GetConsoleProcessList к моему вопросу, но это уже неважно. |
Всё же отвечу. Функция позволяет получить список процессов, работающих в данной консоли. Процессы, запущенные через start /B сюда тоже включаются. Тоталу остаётся лишь проверять этот список и смотреть, есть ли в нём ещё хоть кто-нибудь, кроме самого Тотала. Если есть - консоль занята, если нет - свободна. Всё элементарно, Ватсон.
Единственная загвоздка: функция эта есть только в виндах XP и выше - я на это сразу внимания не обратил. Впрочем, это не так уж и существенно: во-первых, не исключено, что в более старых NT-ядрёных системах можно сделать то же самое, но более хитрым способом, а во-вторых, уж если саму винду так плющит при использовании start /B, недостатком Тотала такое поведение никак не может считаться.
VadiMGP wrote: | Господи, я же не знал, что из-за этих выяснений дело стоит. я думал это никак не связано. Тогда, конечно, все вопросы снимаю. Фиг с ними. |
Не только из-за этих, просто у меня возникло опасение, что даже когда всё будет готово, какие-нибудь мелкие перепалки будут продолжаться, затягивая выдачу идеи Гислеру. В данный момент мы ещё дообсуждовываем кое-какие детали с D1P по личке; думаю, скоро можно будет оформлять реквест. Если, конечно, у кого-то не появилось существенных возражений или замечаний. _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|