Обсуждение возможных улучшений работы с консолью для TC7.5

Обсуждение Total Commander. Установка, использование, настройка, решение проблем, скрытые функции. Обсуждение новых версий.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Аватара пользователя
D1P
Сообщения: 2987
Зарегистрирован: Пн дек 20, 2004 18:30
Откуда: Тбилиси
Контактная информация:

Сообщение D1P »

TotalConsole не имитирует cmd она его и запускает на своей форме.
Кстати... м.б. оффтоп, но всё же - видели, как реализована консоль во Фрегате? Она там своя - не встроенная в гуй консоль, а именно свой контрол, имитирующий работу консоли. Как оно работает с псевдографическими прогами - другой вопрос, но всё-таки, может имеет смысл сделать в TC нечто подобное? По крайней мере не будет проблем с тем, что консоль как-то что-то не так как надо обрабатывает.
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

D1P,
знаю компонент (Дельфи, open source), который реализует такое.
Можно закинуть Гислеру.
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

Нет уж, не надо такую. :)
У меня есть другая идея на этот счёт - воспользоваться средствами винды для обычного аттача консоли к самому Тоталу и пускать приложения в ней, а по Ctrl+O эту самую приаттаченную консоль показывать/скрывать. Я уже и тестовую демо-прожку набросал, хочу предложить такой подход для 7.5.
Почему же, ё-моё, ты нигде не пишешь "ё"?
Аватара пользователя
D1P
Сообщения: 2987
Зарегистрирован: Пн дек 20, 2004 18:30
Откуда: Тбилиси
Контактная информация:

Сообщение D1P »

Нет уж, не надо такую.
Такую же - может и не надо. Тем более во Фрегате она глючная и медленная.
У меня есть другая идея на этот счёт - воспользоваться средствами винды для обычного аттача консоли к самому Тоталу и пускать приложения в ней, а по Ctrl+O эту самую приаттаченную консоль показывать/скрывать
В принципе, тоже вариант. Хотя у меня всё-таки есть вопросы по тому, как это организовать.
Допустим, при наборе команды в командной строке TC она передаётся в связанную консоль. Консоль - отдельное приложение, и потому полноценное взаимодействие с тоталом так просто не организовать. Как она будет перехватывать хоткеи? Что делать если запущено две консоли (запустили в одной бесконечный пинг, тут же в TC задали новую команду)? В общем, разные не очень существенные вопросы остаются в любом случае.
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

D1P писал(а):Консоль - отдельное приложение, и потому полноценное взаимодействие с тоталом так просто не организовать.
Нет. В моём случае консоль - это часть самого Тотала. Отдельная консоль запускается только в том случае, если основная консоль занята, но отдельными консолями управление не предусматривается.
D1P писал(а):Как она будет перехватывать хоткеи?
Пока не знаю. Не уверен, что вообще хоткеи получится перехватывать. Но в любом случае, даже без хоткеев это будет на порядок лучше, чем то безобразие, что сейчас в Тотале.
D1P писал(а):Что делать если запущено две консоли (запустили в одной бесконечный пинг, тут же в TC задали новую команду)?
Смотря в какой что запустили. В ридми-файле у меня всё чётко описано: управляемая консоль одна. Если запустить в ней приложение, которое долго выполняется, то всё, все остальные команды будут запускаться в точности так же, как сейчас - запускается новая отдельная консолька, мигает и исчезает, и никак её не вернуть.
D1P писал(а):В общем, разные не очень существенные вопросы остаются в любом случае.
Я их все постарался продумать и описать в прилагаемом документе. Естественно, абсолютно все мыслимые ситуации разобрать я не имел возможности, тогда бы документик вышел длинным и нечитабельным, но общая концепция там описана. Разумеется, есть недостатки (типа того же блокирования основной консоли), но всё же это достаточно редкая ситуация. Кроме того, никто не мешает запускать блокирующее приложение в отдельной консоли, не связанной с Тоталом, тогда связанная останется свободной для запуска других приложений и команд.
Почему же, ё-моё, ты нигде не пишешь "ё"?
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

Может, сплитнуть эту тему (консоль в ТС 7.5)?
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

Alextp писал(а):Может, сплитнуть эту тему (консоль в ТС 7.5)?
Угу.
Почему же, ё-моё, ты нигде не пишешь "ё"?
Аватара пользователя
D1P
Сообщения: 2987
Зарегистрирован: Пн дек 20, 2004 18:30
Откуда: Тбилиси
Контактная информация:

Сообщение D1P »

Название темы:
Обсуждение возможных улучшений работы с консолью для TC7.5
Улучшение, собственно, должно быть одно: сама консоль должна присутствовать в TC. Хоть как, хоть плагином, хоть встроенная. И работать с ней должно быть удобно. Так же удобно, как с обычной консолью... нет, даже ещё удобнее.
Собственно, консоль, юникод, и, возможно, фоновый поиск - имхо всё, что нужно TC для получения статуса Абсолютного и Универсального Повелителя Файлов :)
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

D1P писал(а):сама консоль должна присутствовать в TC.
Это само собой. Вопрос лишь в том, как это должно выглядеть технически и с точки зрения пользователя, чтобы этим можно было пользоваться с удобством. Этому и посвящена (я надеюсь) данная тема.
Почему же, ё-моё, ты нигде не пишешь "ё"?
Аватара пользователя
D1P
Сообщения: 2987
Зарегистрирован: Пн дек 20, 2004 18:30
Откуда: Тбилиси
Контактная информация:

Сообщение D1P »

Вот моё имхо насчёт консоли:
Выглядеть это должно примерно так же, как сейчас это сделано в TotalConsole, само собой без несуразных кнопок. Т.е. окно с консолью, размер которой регулируется сплиттером с изменением размера файловых панелей. Опционально возможно разворачивание консоли на всё окно TC (аналог Ctrl+O в FAR/MC), разве что имеет смысл оставлять видимыми тогда меню и панель инструментов.
Должен обрабатываться d'n'd в консоль (тащим файл, подставляется его имя), передача имён подкурсорных файлов по хоткею, ну и вообще, опциональная возможность копипастить в консоль что угодно в текстовом виде. Хотелось бы также возможность копипастить ИЗ консоли привычным образом - через выделение мышью/курсорными клавишами с шифтом, копированием через ctrl+c (а не Enter, как в стандартной консоли).
Само собой, что консоль забирает фокус, нужно будет предусмотреть переключение из/в консоль хоткеем. Но что делать со стандартными тоталовскими хоткеями, если консоль в фокусе? Ведь приложение, работающее в консоли, может использовать такие же клавиатурные сочетания? Самый очевидный вариант - блокировать.
Вспомним и про псевдографику. Пусть я запущу в тоталовской консоли псевдографический нортон? что с ним делать, как с ним быть? Куча проблем... Или ФАР - который, вроде бы, поддерживает драг'н'дроп из/в себя... Или нет - я хочу запустить в консоли полноэкранную графическую игрушку (для отладки можно придумать что-то и поизвращённее). Что тогда?
Хотя меня устроит и просто консолька "как в фаре" :)
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

D1P писал(а):Выглядеть это должно примерно так же, как сейчас это сделано в TotalConsole, само собой без несуразных кнопок.
То, что сейчас творит автор TotalConsole со всеми этими хуками, перехватами, внедрениями в чужой процесс, для Гислера вряд ли будет приемлемо. Как-то всё это очень некрасиво выглядит, плюс сколько времени автор эту самую консольку отлаживает, а захочет ли Гислер столько с ней возиться, получая глюк за глюком?
D1P писал(а):Должен обрабатываться d'n'd в консоль (тащим файл, подставляется его имя), передача имён подкурсорных файлов по хоткею, ну и вообще, опциональная возможность копипастить в консоль что угодно в текстовом виде.
Как ты представляешь себе такую интеграцию, чисто на техническом уровне? В моём идеале должна быть тесная интеграция консоли с командной строкой Тотала, но я пока что себе даже вообразить, как оно должно работать, не могу, что уж говорить о конкретном алгоритме и API-вызовах... Именно поэтому мой вариант никакой интеграции не позволяет, и ввод в основной консоли вообще отключён (если, разумеется, там не запущена какая-нибудь интерактивная прога).
D1P писал(а):Хотя меня устроит и просто консолька "как в фаре"
Да неужели? Ты готов мириться с тем, что работа с Тоталом полностью блокируется, пока не закончит выполняться какой-нибудь несчастный пинг? А вот я - не готов.
Кроме того, консоль - это одно, а GUI - это совершенно другое. Нельзя вот так запросто переносить функции консольного Фара на графический Тотал, для этого попросту нет соответствующих системных средств.

И вообще, просьба ко всем участникам этого обсуждения: не забывайте, что мы живём в реальном мире. Гислеру консоль нафиг не нужна, это очевидно, иначе бы он давно её реализовал. Отсюда следует, что необходимыми (но отнюдь не достаточными) условиями реализации консоли являются следующие:
1. Простота реализации.
2. Чётко поставленная задача, полное описание интерфейса и поведения с точки зрения пользователя.
3. Крайне желательно наличие готового алгоритма, а то и работающего куска кода.

Я завёл это обсуждение не для того, чтобы можно было представлять себе, какой могла бы быть идеальная реализация консоли (причмокивая и мечтательно закатывая глаза), а для того, чтобы выявить пример реализации, а) достаточно удобный для того, чтобы хотя бы частично удовлетворить нужды консольщиков, б) имеющий потенциал для развития в дальнейшем, в) достаточно простой в реализации, чтобы можно было уговорить Гислера всё-таки его добавить.
Своё предложение я привёл выше. Чистый код работы с консолью в моём варианте занимает меньше двухсот строк, полный исходный код я, естественно, отдам Гислеру (если кому надо, могу и здесь выложить). Реализация не идеальная, но она покрывает 80% всех моих нужд. Осталось найти пример реализации, покрывающий примерно такую же часть нужд остальных пользователей, но только чтобы эта реализация не была намного сложнее (иначе Гислер её просто не будет добавлять).
Почему же, ё-моё, ты нигде не пишешь "ё"?
DrShark
Сообщения: 911
Зарегистрирован: Сб окт 21, 2006 20:27
Откуда: Kyiv, Ukraine
Контактная информация:

Сообщение DrShark »

Посмотрел я на демо-прожку.
Тут у меня такие вопросы, на случай, если Гислер решится встраивать нечто подобное в TC.
1) будет ли в TC 7.5 поддержка Unicode? Если да, то и сконсолью он тоже должен будет работать в этом режиме.
2) если будет Юникод, откажется ли Гислер от поддержки Win9x?
Вроде бы он ANSI-версию для этих осей делать собирается. Тогда ему придётся поддержку Command.com делать.
Т.к. консоль в TC нужна далеко не всем, и, наверное, даже не большинству, то он может просто забить на эту идею. Или, во всяком случае, отложить до версии 8.0 или выше.
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

DrShark писал(а):1) будет ли в TC 7.5 поддержка Unicode?
Он собирается её добавлять. Получится в 7.5 или нет - пока неизвестно, в своих сообщениях о юникоде он всегда говорил с осторожностью о "версии 7.5 или 8.0".
DrShark писал(а):Если да, то и сконсолью он тоже должен будет работать в этом режиме.
Само собой. В Тотале после этого все вызовы будут юникодными, лишь для поддержки Win9x будут добавлены заглушки-конверторы.
DrShark писал(а):2) если будет Юникод, откажется ли Гислер от поддержки Win9x?
Отказываться он очень не хочет, но сказал, что теоретически такая возможность не исключена, поскольку не знает, какие проблемы могут вылезти при переписывании всего на юникод.
DrShark писал(а):Вроде бы он ANSI-версию для этих осей делать собирается.
ANSI-версию - нет, не собирался. Он сказал, что уже достаточно намучился с одновременной поддержкой 16- и 32-битной версий.
DrShark писал(а):Тогда ему придётся поддержку Command.com делать.
Вот на command.com я в своей прожке не рассчитывал, хотя намеревался... :( Забыл.
Но моё личное мнение (никому его не навязываю), что 9x - уже мёртвые системы, и я не вижу особого криминала, если Тотал будет поддерживать интегрированную консоль только в более-менее современных виндах.
DrShark писал(а):Т.к. консоль в TC нужна далеко не всем, и, наверное, даже не большинству, то он может просто забить на эту идею. Или, во всяком случае, отложить до версии 8.0 или выше.
Это запросто, и в первую очередь именно по этой причине я ищу решение, которое при минимально возможных трудозатратах Гислера дало бы максимальную отдачу.
Почему же, ё-моё, ты нигде не пишешь "ё"?
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

условиями реализации консоли являются следующие:
1. Простота реализации.
2. Чётко поставленная задача, полное описание интерфейса и поведения с точки зрения пользователя.
3. Крайне желательно наличие готового алгоритма,
тогда только твой вариант прокатит.
У D1P вижу, нет четкого плана
Аватара пользователя
D1P
Сообщения: 2987
Зарегистрирован: Пн дек 20, 2004 18:30
Откуда: Тбилиси
Контактная информация:

Сообщение D1P »

У D1P вижу, нет четкого плана
Само собой. Я написал только то, что хотелось бы. Как это будет реализовано - я не знаю и не представляю.
Ответить