Ограничения на число пунктов в главном меню

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

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

Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

TWinKey установлен? Если да, то ноги растут, скорее всего, оттуда. Отключи и попробуй. Сейчас лень искать (если надо, то найду) мои диалоги с VadiMGP по этому поводу.
А вот такие аццкие цифры появляются по воле доброхотов типа Petermad, которые стряпают отличные расширенные меню и присобачивают в языковый файл хренову гору собственных em_ команд.
Сейчас подсчитал - у меня около сотни своих и около двухсот - от Petermad'а. Хотя триста - это не 2000... После того, как VadiMGP подрихтовал TWinKey, у меня глюки прекратились. Может, он просто расширил границы, не решив проблему принципиально?
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
Maximus
Сообщения: 927
Зарегистрирован: Чт апр 07, 2005 10:51
Откуда: Украина, Кировоградская обл., г. Знаменка
Контактная информация:

Сообщение Maximus »

[cut="LonerD"]Ты в личку заглядываешь хоть иногда? :)[/cut]
Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Maximus
відповів


Вахмурка
Спасибо, но причина не в TWinKey. Он действительно установлен, но проблема проявляется и после его отключения, и в 64-х битном Тотале.
Windows 11 | TC DreamLair eternal pre-α
Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Вот же, нашёл таки обсуждение. Утверждается про 2000 пользовательских команд.

Но у меня глюки начинаются раньше чем меню достигает этих команд.
Сократил количество пунктов меню.
Осталось 1899 em-команд и 99 cm-команд.
Не помогло.

Такс... Начали закрадываться сомнения. А ограничения ли это Тотала? Или всё же не совсем Тотала? Или совсем не Тотала?

MVV, у меня многие команды запускаются через TCFS2, фактически панели и построены на этой утилите. Так вот именно команды, вызываемые через TCFS2 и начинает колбасить. Причём команды на панели, которая вызывается первой, отрабатывают нормально, а дальше - чудеса в решете.
Провёл эксперимент. Поместил рядышком две команды:

em_Program
и
[em_Program_TCFS2]
cmd=%commander_path%\Plugins\exe\TCFS2\TCFS2.exe /ef tem(em_Program)

Если пунктов в меню указанное выше количество, то первая отрабатывает, вторая - нет.
Убираю часть пунктов из меню - вторая команда работает.
Windows 11 | TC DreamLair eternal pre-α
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

All
Во избежание ненужного дублирования темы объединены. Заголовок общей темы изменён на более универсальный.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

LonerD,
Ну уж TCFS2 тут точно не при чем, она ж ничего сама не парсит, просто просит тотала выполнить команду...
Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

MVV писал(а):LonerD,
Ну уж TCFS2 тут точно не при чем, она ж ничего сама не парсит, просто просит тотала выполнить команду...
Согласен.
Попробовал вызвать скрипт с той же пользовательской командой - получаю аналогичное сообщение "File not found" :|
Причём если вызывать скрипт с панели напрямую
%COMMANDER_PATH%\Utilities\AutoHotkey\AutoHotkey.exe %COMMANDER_PATH%\Scripts\SendTCUser.ahk
то он отрабатывает.
А если назначить этот же скрипт на em_-команду и сделать кнопку для этой команды и разместить её не на главной панели, то не отрабатывает. Если эту же кнопку перенести на ту панель, которая загружается по умолчанию - тогда кнопка отрабатывает.

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

Поправьте, плиз.
Я правильно понял принцип работы Тотала с командами?:
В памяти создаётся некий массив команд (всех или только em?). При загрузке Тотал вначале считывает файл главного меню и прописывает в этот массив все команды из меню. Также по мере выполнения прописываются все команды, вызванные в процессе работы другими средствами (через плагин autorun, через хоткеи, одна из другой и т.д...). При открытии панели инструментов Тотал перечитывает содержимое файла панели и тоже прописывает в массив все найденные на панели команды.
Размер массива с командами ограничен (сознательно Гислером или системные ограничения?). За один сеанс работы туда может быть прописано не более n-команд.
Windows 11 | TC DreamLair eternal pre-α
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Если так подумать, из USERCMD.ini можно считывать команды средствами чтения INI-файлов, и знать нужно лишь их имена. С помощью Process Monitor можно посмотреть, к каким файлам тотал обращается при вызове команды. А хранит ли тотал команды в памяти, можно посмотреть, создавая команды с уникальными параметрами, чтобы искать их в памяти процесса.
Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

MVV
Смысл слов понял. Как проверить через Process Monitor - не понял
Проверил несколько другим способом.
Запустил Тотала, с помощью диспетчера задач сохранил дамп, перешёл в Тотале на вторую панель, сохранил дамп снова. Открыл дампы в гекс-редакторе. ЕМ-команды, прописанные на первой панели - встречаются в обоих дампах по два раза - один раз это фрагмент файла панели, а второй раз - это видимо загруженная в память команда. Прописанные на второй панели - встречаются в дампе только один раз как фрагмент файла панели.
Причём первые шесть команд второй панели - рабочие (и в дампе встречаются по два раза), а все команды что идут дальше - нет. То есть уже понятно, что Тотал прочитал файл панели, начал вносить встретившиеся em-команды в некий массив, но место в массиве закончилось.

Моя теория подтверждается. Чем больше em-команд встречает Тотал в процессе сеанса работы, тем больше переполняется его память, и начиная с некоторой встреченной команды все последующие встреченные команды уже не будут восприниматься.

Похоже, суммарно и получается лимит - 2000 пользовательских команд или около того.

Намеренное ли это ограничение для того, чтобы Тотал потреблял меньше памяти? Ненамеренные ограничения (Гислер прописал такое значение и не подумал, что кому-то может понадобиться больше)? Баг Тотала? Ограничения, накладываемые системой?

MVV
Можешь как-то донести эту мысль до Гислера, сформулировав её более правильно с точки зрения программиста (и самое главное - на английском) ?
Windows 11 | TC DreamLair eternal pre-α
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Нарыл с ходу, наверное имеет смысл.
Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Хм... А может Тахер и має рацію.
А может и нет. А может это лишь часть правды, а истина по прежнему где-то там...

Имена em-команд у меня занимают 37 Кб только для главного меню(даже если удалить все разделители между ними). И работают ведь. Именно в главном меню все команды работают. Значит, порог, похоже, всё же выше названных Тахером 32 кб.

У меня действительно имена комманд длинные, и составлены не просто из набора цифр, а "по смыслу".
Сильно длинные названия команд? ОК, все названия сложно перевести в циферки, как советует Тахер. Но в названиях многих команд у меня есть повторяющиеся символы. (em_prog_NazvaProgramy). Сделал кардинальное сокращение имён файлов (убрал приставку prog_ из названий) - везде, в меню, в пользовательских командах, в ассоциациях. Итого, суммарно имена всех em-команд сократились на 2000 символов. Что это дало? Ровным счётом - НИЧЕГО !!!. Если раньше работало меню, главная панель и первые несколько команд второй панели, то и теперь они же работают :? :? :?
Попробовал наоборот - удлиннить названия всех команд. Опять та же история.

Попробовал сосчитать количество всех команд. При таком количестве это проблемно... В главном меню часть пунктов повторяется в разных местах... На панелях инструментов имена уникальные (отличаются от главного меню). В ассоциациях и хоткеях ещё есть уникальные еm-команды, которые грузятся с Тоталом.
Но если прикинуть (плюс-минус 10-20 команд), то как раз и получается
ВЫВОД: За сеанс работы Тотал может работать только с первыми 2000 увиденными (загруженными в память) пользовательскими командами.
Windows 11 | TC DreamLair eternal pre-α
Skif_off
Сообщения: 1255
Зарегистрирован: Ср ноя 28, 2012 13:44

Сообщение Skif_off »

Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Доу. Пока я считал и писал - Гислер таки подтвердил опасения по поводу вызова всего 2000 команд. Почему? Зачем? За что такая несправедливость?
Попросил его увеличить количество команд... Если откажет - то можно идти за верёвкой и мылом.
Windows 11 | TC DreamLair eternal pre-α
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

LonerD писал(а):Пока я считал и писал - Гислер таки подтвердил опасения по поводу вызова всего 2000 команд.
Он подтвердил ещё в 2010. Поддержал как мог) на офф сайте, если нет, так нет. Если уберёт или расширит ограничение - будет хорошо.
Ответить