Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Обсуждение возможных улучшений работы с консолью для TC7.5
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы printer-friendly view
View previous topic :: View next topic  
Author Message
D1P



Joined: 20 Dec 2004
Posts: 2973
Location: Тбилиси

Post (Separately) Posted: Tue Sep 04, 2007 17:41    Post subject: Reply with quote

Quote:
Функция перенаправления всех запускаемых в Тотале приложений (через командную строку, через запуск из файловой панели, с панели инструментов, из меню Запуск или при помощи пользовательских команд - абсолютно всех) - такая функция не может пригодиться ни одному WIX-плагину, кроме одного-единственного "черноокошечного плагина".

Всё... кажется понял. Для тебя командная строка - это командная строка. Ввод команд, запуск приложений и т.п.
Теперь пойми ты. Для меня командная строка - строка ввода текста. Интерпретировать его должен плагин.

Про перенаправление запуска приложений я, насколько помню, вообще предложений не высказывал. Мне и в голову не приходило, что это нужно. Потому что это бесполезно делать плагином, я интерфейс для других целей предлагаю.

И если рассматривать ввод просто как ввод (так, например, как это делается в WFX API), а не получение чего-то там готового, то становится ясно, что это можно использовать для кучи всяких разных плагинов. Согласен?
_________________
База знаний о Total Commander
Блог
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6197
Location: Москва

Post (Separately) Posted: Tue Sep 04, 2007 18:05    Post subject: Reply with quote

D1P wrote:
Потому что это бесполезно делать плагином, я интерфейс для других целей предлагаю.

О! О чём и я!

D1P wrote:
И если рассматривать ввод просто как ввод (так, например, как это делается в WFX API), а не получение чего-то там готового, то становится ясно, что это можно использовать для кучи всяких разных плагинов. Согласен?

Если под вводом понимать исключительно командную строку Тотала (возможно, с переключением в командную строку, реализованную плагином), то абсолютно согласен.

Слава Богу, разобрались. Теперь, когда стало ясно, что для реализации "черноокошечного плагина" этого не достаточно, каково будет мнение относительно моего предложения реквестить обе фичи (API и поддержку Ctrl+O) независимо?
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
VadiMGP



Joined: 21 Mar 2007
Posts: 1625

Post (Separately) Posted: Tue Sep 04, 2007 19:44    Post subject: Reply with quote

2CaptainFlint
Не для спора, а просто поделиться одной мыслью, которая мне в голову пришла.
Помнишь о чем мы говорили на прошлом "сеансе связи" - несколько месяцев назад? Для того, чтобы смотреть вывод по Ctrl+O, Гислер должен перестать использовать CREATE_NEW_CONSOLE. Так? А что произойдет если он перестанет его использовать? Дал ты команду "ping mycomp1 -t", вернулся в коммандер? поработал и дал другую команду - "ftp mycomp2". Что произойдет? Правильно, абзац. И что Гислер должен с этим делать?
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6197
Location: Москва

Post (Separately) Posted: Tue Sep 04, 2007 20:21    Post subject: Reply with quote

VadiMGP wrote:
И что Гислер должен с этим делать?

Ничего - я же, вроде, писал об этом... Это ограничение, на которое я пошёл сознательно ради упрощения первой версии реализации. Управляемая консоль будет только одна, все остальные будут точно такими же, какими сейчас являются все консольные окна, запускаемые из Тотала (т.е. будут закрываться и уничтожаться по окончанию работы приложения).

Если Гислер реализует хотя бы такой одноконсольный вариант, это будет уже громадным шагом вперёд, после чего можно будет дополнительно предложить улучшение - расширить функциональность, добавив ещё несколько управляемых консолей и механизм для более удобной работы с ними. Иначе говоря, я остановился на варианте, который имеет минимальное соотношение трудозатрат к результативности: сейчас нет вообще никакой консоли - будет хотя бы одна, и достигается это относительно несложным и не громоздким добавлением (изменением) в коде. Следующий этап - увеличение числа консолей - требует уже разработки дополнительных команд, возможно - диалогов для того, чтобы знать, на какую из консолей переключаться, надо продумывать, как это сделать поудобнее для пользователя, и т.д. - трудозатраты значительно выше, чем в первом случае, а результативность заметно меньше (переход от нуля к одному куда значительнее перехода от одного к двум).

VadiMGP wrote:
Для того, чтобы смотреть вывод по Ctrl+O, Гислер должен перестать использовать CREATE_NEW_CONSOLE. Так?

Фактически - да, только не для всех команд, а для тех, которые будут выполняться в управляемой консоли. В частности, если эта управляемая консоль уже занята (например, тем же самым пингом), новая команда выполняется с флагом CREATE_NEW_CONSOLE.

Почитай мой документик, я там это всё описал.
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
D1P



Joined: 20 Dec 2004
Posts: 2973
Location: Тбилиси

Post (Separately) Posted: Wed Sep 05, 2007 08:44    Post subject: Reply with quote

Quote:
Теперь, когда стало ясно, что для реализации "черноокошечного плагина" этого не достаточно, каково будет мнение относительно моего предложения реквестить обе фичи (API и поддержку Ctrl+O) независимо?

Пожалуйста, чтобы не было очередного потока недоразумений, напиши, какими ты видишь эти фичи, и каким образом они должны будут использоваться. Боюсь, перечитывая все темы, посвящённые вопросу, я много чего упустил из виду.
_________________
База знаний о Total Commander
Блог
Back to top
View user's profile Send private message
VadiMGP



Joined: 21 Mar 2007
Posts: 1625

Post (Separately) Posted: Wed Sep 05, 2007 10:28    Post subject: Reply with quote

CaptainFlint
Да читал, я долументик, читал. Я же говорю - я это не для спора, меня просто сомнения грызут - можно ли это реализовать на уровне коммерческого продукта.
CaptainFlint wrote:
если эта управляемая консоль уже занята (например, тем же самым пингом), новая команда выполняется с флагом CREATE_NEW_CONSOLE
А возможно ли, например, определить занятость консоли учитывая и то, что юзер запустит batch, в котором находится команда start? Не знаю. Если возможно - хорошо, а если нет, то в такой ситуации "ничего не делать" чревато боком.
Back to top
View user's profile Send private message
Митяй



Joined: 05 Oct 2005
Posts: 102
Location: Москва

Post (Separately) Posted: Wed Sep 05, 2007 11:35    Post subject: Reply with quote

CaptainFlint wrote:
Функция перенаправления всех запускаемых в Тотале приложений (через командную строку, через запуск из файловой панели, с панели инструментов, из меню Запуск или при помощи пользовательских команд - абсолютно всех) - такая функция не может пригодиться ни одному WIX-плагину, кроме одного-единственного "черноокошечного плагина".

Разрешите Вас перебить Smile
Перенаправление всех запускаемых приложений можно считать частным случаем перенаправления всех внутренних команд. Если интерфейс позволит передавать в плагин информацию о всех выполняемых командах (с возможностью запретить выполнение или выполнить команду самому), то у нас появится возможность создать нехилый список таких плагинов перехватчиков.
Вот примеры:
1) Лог. Возможность записывать все действия TC в лог, превышающий своими возможностями стандартный. Настройки условий логирования и способа его хранения зависят только от воображения пользователя.
2) Блокировщик. Возможность заблокировать любое действие в TC. Например запуск программы, копирование определенного файла, удаление нескольких заданных файлов. Если делать TC в качестве шела, то это может пригодиться.
3) Оповещатель. Для слежения за работающим на компе. Посылает информацию о выполненном действии. Например на е-мэйл. Или любым другим способом. Или логирует и посылает лог при выходе из TC.
4) Записыватель макросов. Запоминает действия пользователя и на их основе пишет скрипт. Например на vbs. Такой плагин постоянно конечно запущен не будет, но перехват всех действий ему нужен.
5) Помощник Very Happy. Скрепка. Которая будет следить за пользователем и давать советы. Напоминать о горячих клавишах. Подсказывать. При запуске выдавать совет дня.

Можно и другие плагины придумать. Например, можно заблокировать стандартное окно копирования TC и запустить свой собственный метод. Или заменить окно поиска. И появятся плагины копирования и поиска. Кажется, многие хотели такую возможность.

Добавлено:
Забыл написать ещё одну идею
6) Undo. Отмена последнего действия. Плагин делает бэкапы удаляемых файлов. Запоминает пути перемещения и копирования. При необходимости восстанавливает прежнее состояние. Можно даже делать резервные копии открываемых и редактируемых файлов.
_________________
#155578
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6197
Location: Москва

Post (Separately) Posted: Wed Sep 05, 2007 18:35    Post subject: Reply with quote

D1P wrote:
Пожалуйста, чтобы не было очередного потока недоразумений, напиши, какими ты видишь эти фичи, и каким образом они должны будут использоваться. Боюсь, перечитывая все темы, посвящённые вопросу, я много чего упустил из виду.

Фича нумер один: подробнейшим образом расписана в документе в скачиваемом архиве. В качестве готовой иллюстрации приложена прожка, показывающая общие принципы (конкретно - как выглядит запуск программ в управляемой консоли и в обычной консоли). Единственное, чего в ней не хватает - это кнопки принудительного запуска приложения в новой консоли (обычной), если управляемая консоль свободна. Сделать это несложно, пара строчек кода, просто возиться сейчас лень.
Иллюстрируемая функция реализуется совершенно самостоятельно, в коде самого Тотала, никаких API, никаких плагинов.

Фича нумер два: Новый WIX-интерфейс для реализации нового типа плагинов - интерфейсных, имеющих свою панель (а-ля TotalConsole), умеющих получать ввод из командной строки Тотала (а-ля WFX-плагины) и так далее - приблизительно так, как ты это описал в своём сообщении. Детали реализации для меня в этом случае становятся абсолютно некритичными, поскольку сохранение вывода консольных прожек (чему, изначально и посвящена была тема-то!) будет реализовано в полном объёме фичей нумер один.


VadiMGP wrote:
Я же говорю - я это не для спора, меня просто сомнения грызут - можно ли это реализовать на уровне коммерческого продукта.

Согласись, это куда лучше того безобразия, что сейчас творится. Достаточно вспомнить хотя бы noclose.pif, реализованный через этот убогий command.com. И ничего, тоже на уровне коммерческого продукта вроде как...

VadiMGP wrote:
А возможно ли, например, определить занятость консоли учитывая и то, что юзер запустит batch, в котором находится команда start? Не знаю. Если возможно - хорошо, а если нет, то в такой ситуации "ничего не делать" чревато боком.

Для того период бета-тестирования и существует. Конкретно твой пример (разумеется, с параметром /B) в моей программе не обнаружился, и консоль пометилась как свободная, хотя в ней продолжала работать программа.

VadiMGP wrote:
Если возможно - хорошо, а если нет, то в такой ситуации "ничего не делать" чревато боком.

Обычный юзер подобные батчи писать не станет, а продвинутый сможет явным образом запустить этот батч в отдельной консоли, не занимая основную (управляемую). Это, разумеется, как крайний случай, если абсолютно ничего невозможно в такой ситутации сделать (в чём я сильно сомневаюсь).


Митяй wrote:
Разрешите Вас перебить

Разрешаю. Smile

Митяй wrote:
Перенаправление всех запускаемых приложений можно считать частным случаем перенаправления всех внутренних команд. Если интерфейс позволит передавать в плагин информацию о всех выполняемых командах

(теперь перебью я) ... то задача превращается в нереальную. Такие плагины должны будут иметь возможность перебросить команду обратно Тоталу, а таких callback-ов пока не предусмотрено. Реализовывать подобный механизм очень муторно - потому что у каждой команды свой набор параметров, более того, во внутреннем представлении все эти форматы могут отличаться, как небо и земля, и Тоталу придётся постоянно конвертить данные туда-сюда между своим внутренним форматом и форматом, придуманным для работы с плагином (который должен быть хоть сколь-нибудь унифицированным, ведь не будут же плагинописатели перебирать структуры данных для всех - сколько там сейчас сотен команд уже набралось?), и такая конвертация существенно замедлит работу Тотала.

В целом идея неплохая, согласен, но дождаться её реализации (и не какой-нибудь, а удобной и быстро работающей), скажу честно, у меня надежды нет ни малейшей.
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
Митяй



Joined: 05 Oct 2005
Posts: 102
Location: Москва

Post (Separately) Posted: Wed Sep 05, 2007 19:10    Post subject: Reply with quote

CaptainFlint wrote:
Такие плагины должны будут иметь возможность перебросить команду обратно Тоталу

Не совсем понял, что Вы имеете в виду. Под передачей команды я подразумевал только передачу номера этой команды. Для команд с параметрами, конечно, передаются эти параметры. Ну и можно запросить текущие каталоги, выделенные файлы и имя файла под курсором (это можно сделать и в отдельной функции). Всё.
Тотал передаёт плагину номер команды. Плагин может сделать две вещи - разрешить выполнение команды и запретить её выполнение.
Он может сначала совершить определённое действие (сделать резервные копии файлов), а потом разрешить выполнение тоталу. И тотал спокойно удалит файл, но пользователь может вызвать плагин и восстановить файл из резервной копии.
Или плагин может запретить тоталу выполнять команду и выполнит её сам. Тогда, он должен сам позаботиться о наиболее полной реализации функционала тотала. Сам нарисовать все окна и прогрессбары, сам вывести запросы на перезапись файлов и т.д.

Всё это я говорю даже не в качестве предложения, а как простое теоретическое размышление, максимально оторванное от реальной жизни.
_________________
#155578
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6197
Location: Москва

Post (Separately) Posted: Wed Sep 05, 2007 19:31    Post subject: Reply with quote

Митяй wrote:
Под передачей команды я подразумевал только передачу номера этой команды.

Плагин получил номер команды 905 (cm_Copy). Кто ему скажет, какие файлы, откуда и куда копирует Тотал? Какие у Тотала настройки, скажем, по работе с комментариями и эскизами (копируются ли они с файлами или нет)? Какие файлы реально окажутся скопированными, а какие - нет? (Из-за списка исключений, наличия одноимённых файлов, файлов "только для чтения", которые можно перезаписать, а можно и пропустить)? И таких параметров у каждой команды - тучи неисчислимые.

Митяй wrote:
Тотал передаёт плагину номер команды. Плагин может сделать две вещи - разрешить выполнение команды и запретить её выполнение.

Тогда как будет построен твои примеры плагинов логирования и записывателя макросов, если они даже знать не будут, что конкретно пользователь собрался копировать?

Митяй wrote:
Или плагин может запретить тоталу выполнять команду и выполнит её сам.

А для этого он должен знать хотя бы, какие файлы выделил пользователь в панели, какой текущий путь и какой путь к целевому каталогу.
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
VadiMGP



Joined: 21 Mar 2007
Posts: 1625

Post (Separately) Posted: Wed Sep 05, 2007 20:48    Post subject: Reply with quote

CaptainFlint wrote:
Согласись, это куда лучше того безобразия, что сейчас творится. Достаточно вспомнить хотя бы noclose.pif, реализованный через этот убогий command.com.
То, что noclose сделан убого спору нет. А насчет лучше... Честно говорю - не знаю пока. noclose я все равно не использую, но я и не слышал об ошибках, связанных с ним. А вот batch co start внутри - я пока даже придумать не могу куда рыть, чтобы обслужить такое.
Конечно, такие команды будут работать в отдельном cmd, но посуди сам - я сегодня захожу в директорию ORACLE, где лежат тучи неведомых мне файлов и запускаю их по инструкции. Что там внутри - понятия не имею. Причем всё, и примитивный пинг, ipcofig и навороченный батник работает в одном и том же окне (либо cmd.exe либо TConsole). Одно окно (неважно какое, но одно) на всё.
А вот знать что именно сидит внутри чужого тысячестрочного batch или vbs или cmd файла и, в зависимости от этого решать где его запускать... Ну ты понял. Это не метод. Не может быть, чтобы тебя это устроило. Решение должно работать всегда.

Чтобы не было недопонимания. Я, естессно, за твое предложение, ведь я сам же и говорил: просить надо и то и другое - авось, что-нибудь, да получим. Я сейчас, просто верчу твою идею более тщательно и ищу подводные камни. Я не люблю, когда они возникают внезапно.
Back to top
View user's profile Send private message
D1P



Joined: 20 Dec 2004
Posts: 2973
Location: Тбилиси

Post (Separately) Posted: Wed Sep 05, 2007 21:12    Post subject: Reply with quote

2CaptainFlint: отписал в личку.
_________________
База знаний о Total Commander
Блог
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6197
Location: Москва

Post (Separately) Posted: Thu Sep 06, 2007 00:35    Post subject: Reply with quote

VadiMGP wrote:
А вот batch co start внутри - я пока даже придумать не могу куда рыть, чтобы обслужить такое.

Ну ёпрст... Ну хорошо, на этот вопрос отвечу. Итак:
1. Буквально первый же взгляд в MSDN сразу обнаруживает функцию GetConsoleProcessList, возвращающую список процессов, приаттаченных к текущей консоли.
2. Попробуй написать такой батничек и запустить его в самом обычном cmd-шном окне. О результатах можно не докладываться, просто ответь: если в винде, в стандартных приложениях наблюдаются такие эффекты, считается ли криминалом наличие таких же эффектов в Тотале? Согласен, отсутствие их было бы плюсом - и по этому поводу см. пункт 1.

Может, не стоит тратить время на подобные выяснения, а всё же, наконец, предложить идеи Гислеру, пока он сам не сказал, что уже выбрал себе списочек из виш-листа и больше ничего добавлять не хочет?

VadiMGP wrote:
Чтобы не было недопонимания. Я, естессно, за твое предложение, ведь я сам же и говорил: просить надо и то и другое - авось, что-нибудь, да получим. Я сейчас, просто верчу твою идею более тщательно и ищу подводные камни. Я не люблю, когда они возникают внезапно.

Искать и находить можно до бесконечности. Сразу заявляю: камни были, есть и будут - как практически в любой функции Тотала. Но ведь живём как-то.
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
VadiMGP



Joined: 21 Mar 2007
Posts: 1625

Post (Separately) Posted: Thu Sep 06, 2007 01:12    Post subject: Reply with quote

Я не понял при чем тут GetConsoleProcessList к моему вопросу, но это уже неважно.
CaptainFlint wrote:
Может, не стоит тратить время на подобные выяснения, а всё же, наконец, предложить идеи Гислеру, пока он сам не сказал, что уже выбрал себе списочек из виш-листа и больше ничего добавлять не хочет?
Господи, я же не знал, что из-за этих выяснений дело стоит. я думал это никак не связано. Тогда, конечно, все вопросы снимаю. Фиг с ними.
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6197
Location: Москва

Post (Separately) Posted: Thu Sep 06, 2007 01:21    Post subject: Reply with quote

VadiMGP wrote:
Я не понял при чем тут GetConsoleProcessList к моему вопросу, но это уже неважно.

Всё же отвечу. Функция позволяет получить список процессов, работающих в данной консоли. Процессы, запущенные через start /B сюда тоже включаются. Тоталу остаётся лишь проверять этот список и смотреть, есть ли в нём ещё хоть кто-нибудь, кроме самого Тотала. Если есть - консоль занята, если нет - свободна. Всё элементарно, Ватсон. Smile
Единственная загвоздка: функция эта есть только в виндах XP и выше - я на это сразу внимания не обратил. Впрочем, это не так уж и существенно: во-первых, не исключено, что в более старых NT-ядрёных системах можно сделать то же самое, но более хитрым способом, а во-вторых, уж если саму винду так плющит при использовании start /B, недостатком Тотала такое поведение никак не может считаться.

VadiMGP wrote:
Господи, я же не знал, что из-за этих выяснений дело стоит. я думал это никак не связано. Тогда, конечно, все вопросы снимаю. Фиг с ними.

Не только из-за этих, просто у меня возникло опасение, что даже когда всё будет готово, какие-нибудь мелкие перепалки будут продолжаться, затягивая выдачу идеи Гислеру. В данный момент мы ещё дообсуждовываем кое-какие детали с D1P по личке; думаю, скоро можно будет оформлять реквест. Если, конечно, у кого-то не появилось существенных возражений или замечаний.
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы All times are GMT + 4 Hours
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8  Next
Page 7 of 8

 
Jump to:  
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