TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое

Обсуждение только плагинов и утилит для Total Commander.

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

Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

ask-rus
А ты этими плагинами не пользуешься? Соответственно, главное меню ты тоже не скрываешь при обращении к режиму FullScreen (что лишает TCFS2 полноценности) ? В любом случае мой вариант сам по себе юзабильнее, дело даже не в дополнительных нюансах. Это всё мелочи.
Аватара пользователя
ask-rus
Сообщения: 2077
Зарегистрирован: Вт ноя 10, 2009 14:06
Откуда: Russian Federation

Сообщение ask-rus »

Flasher писал(а):А ты этими плагинами не пользуешься?
Пока нет.
Flasher писал(а):Соответственно, главное меню ты тоже не скрываешь при обращении к режиму FullScreen (что лишает TCFS2 полноценности) ?
Так точно.
Flasher писал(а):В любом случае мой вариант сам по себе юзабильнее, дело даже не в дополнительных нюансах.
Может и так.
Flasher писал(а):Это всё мелочи.
Конечно.
«Минимализм - это кратчайший путь бесконечного стремления к идеалу»
«Не бойся, что не знаешь, - бойся, что не учишься» Китайская пословица
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Почти готова к выпуску TCFS2 2.0. Пока подправляю описание, возможно, что-то не так работает, хорошо бы потестить, чтобы к релизу исправить найденные баги. :)

Добавлены макросы, вызов функций из параметров других функций, наконец-то поддерживается перенаправление секций wincmd.ini. Формат записи некоторых команд заметно упростился или стал более понятным. Например:

Код: Выделить всё

m2=show(style(# & $01000000) ? 9 : 3), , m2
t2=move(, , , , isTopmost ? 0 : 1), , t2
sp_set_active=run_item(set_separator, isActiveL ? (#1) : 100 - (#1))
Помимо TCFS2 обновился и модуль Autorun_HideMenu, который теперь называется TCFS2Tools. В него перенесен функционал по управлению сепаратором панелей (теперь на саму TCFS2 даже дебильные антивирусы ругаться не должны), добавлена возможность определять текущий режим панели (только основные, в соответствии со значениями параметра ShowAllDetails файла wincmd.ini: краткий, подробный или пользовательский, дерево - различить пользователские режимы практически невозможно). Также с помощью TCFS2Tools можно получать размеры рабочей области экрана без панели задач. Обновленный модуль TCFS2Tools можно загружать как через Autorun.wdx, так и напрямую, если установить его как WDX-модуль и добавить схему раскраски файлов (для тех, кто не использует Autorun.wdx).

В стандартном конфиге TCFS2 можно посмотреть, как теперь нужно вызывать set_separator, которая теперь является командой, а не встроенной функцией. Порядок вызова sp_set_active не изменился.

TCFS2 2.0.1.222 на rghost.ru

Было бы здорово, если бы те, кто активно пользуется TCFS2, нашли время проверить работу новой версии.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV
Я пока не качал. 1 вопрос:
Как новая форма записи повлияет на работу команд, созданных ранее?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

По идее, всё старое должно работать, просто стало возможно использовать новые переменные и функции в параметрах. Единственное, что нужно будет исправить - команды, которые вызывают set_separator. Небольшое неудобство - символ # больше не поддерживается в параметрах, вместо него надо писать sepPos, или прямо msg(1075, 65561) (этот вариант на какие-то доли секунды быстрее, т.к. не требует обращения к макросам).

Было:

Код: Выделить всё

sp_inc=set_separator(#+10)
sp_dec=set_separator(#-10)
sp_inc_r=set_separator(# > 80 ? 20 : # + 20)
Стало:

Код: Выделить всё

sp_inc=run_item(set_separator, sepPos+10)
sp_dec=run_item(set_separator, sepPos-10)
sp_inc_r=run_item(set_separator, sepPos > 80 ? 20 : sepPos + 20)
Да, кстати, забыл включить в конфиг в архиве саму команду set_separator (в блок [Items]). :oops:

Код: Выделить всё

set_separator=msg(1075, 65562, #1)
Возможно, что-то ещё забыл (в debug-версии на работе остались, завтра перенесу).
Аватара пользователя
ask-rus
Сообщения: 2077
Зарегистрирован: Вт ноя 10, 2009 14:06
Откуда: Russian Federation

Сообщение ask-rus »

MVV писал(а):Было бы здорово, если бы те, кто активно пользуется TCFS2, нашли время проверить работу новой версии.
MVV писал(а):Возможно, что-то ещё забыл (в debug-версии на работе остались, завтра перенесу).
Пожалуй, подожду тогда до завтра.
«Минимализм - это кратчайший путь бесконечного стремления к идеалу»
«Не бойся, что не знаешь, - бойся, что не учишься» Китайская пословица
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

А зря :) так может уже завтра вопросы бы появились :D
И потом, не считая команд с сепараторами всё остальное из конфига старой версии должно работать. А проверить это было бы неплохо, причем, на как можно большем числе компов.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

MVV писал(а):Формат записи некоторых команд заметно упростился или стал более понятным.
Кому?
Было:

Код: Выделить всё

sp_set_active=set_separator(#1), tcm(65551) | set_separator(100-#1)
Стало:

Код: Выделить всё

sp_set_active=run_item(set_separator, isActiveL ? (#1) : 100 - (#1))
Где тут простота, я не понял. Использование везде run_item - вообще отход от простоты. Убор решётки из параметров сюда же. Было куда удобней. Зачем убрал то? Несколько команд надо переписывать и у себя, и на форуме (посты заморожены)..

Код: Выделить всё

sp_move=run_item(set_separator, -1)
- не работает.

Зачем в командах использовать номер 1075?

test(isTopmost) - так и будет со словом test? Или это временное название?

SeparatorGet - ИМХО, бесполезная штука.

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

Сообщение MVV »

Для начала напишу макросы, которые забыл добавить в конфиг в архиве. Точнее, всю секцию в последнем варианте.

Код: Выделить всё

[Macros]
; Некоторые константы для функции show
SW_HIDE=0
SW_SHOWMAXIMIZED=3
SW_MINIMIZE=6
SW_RESTORE=9

; Некоторые константы для функций style/set_style
WS_CAPTION=$00C00000
WS_MAXIMIZE=$01000000
WS_VISIBLE=$10000000
WS_MINIMIZE=$20000000
WS_EX_TOPMOST=$00000008
WS_EX_TOOLWINDOW=$00000080

; Некоторые константы для функции msg
WM_TC_COMMAND=$433
WM_KEYDOWN=$0100
WM_KEYUP=$0101
WM_SYSCOMMAND=$0112

; Некоторые номера команд TCFS2Tools (могут быть изменены в TCFS2Tools.ini)
tt_ShowMainMenu=65537
tt_HideMainMenu=65538
tt_SwitchMainMenu=65539
tt_TrackMainMenu=65540
tt_LeftIsActive=65551
tt_RightIsActive=65552
tt_LeftGetViewMode=65553
tt_RightGetViewMode=65554
tt_SeparatorGet=65561
tt_SeparatorSet=65562
tt_GetSystemMetrics=65570
tt_GetWorkArea=65571

hasCaption=style(# & $00C00000)
isMaximized=style(# & $01000000)
isTopmost=style(, # & $08)

; Некоторые команды, возвращающие информацию (необходим активный TCFS2Tools.dll)
GetSystemMetrics=msg($433, tt_GetSystemMetrics, #1)

cxScreen=GetSystemMetrics(0)
cyScreen=GetSystemMetrics(1)
cxWorkArea=msg($433, tt_GetWorkArea, 0)
cyWorkArea=msg($433, tt_GetWorkArea, 1)

sepPos=msg($433, tt_SeparatorGet)
L_isActive=tcm(tt_LeftIsActive)
R_isActive=tcm(tt_RightIsActive)
L_viewMode=tcm(tt_LeftGetViewMode)
R_viewMode=tcm(tt_RightGetViewMode)
S_viewMode=(L_isActive ? L_viewMode : R_viewMode)
Соответственно, пара команд по управлению сепаратором:

Код: Выделить всё

[Items]
set_separator=msg($433, tt_SeparatorSet, #1)
sp_set_active=run_item(set_separator, L_isActive ? (#1) : 100 - (#1))
Flasher писал(а):Где тут простота, я не понял.
Проще стало в том плане, что теперь можно организовать проверку условия внутри одного вызова функции, а не городить кучу дополнительных команд через палки |. И, думаю, смысл записи test(isTopmost) куда яснее, чем записи style(, # & $08). Ничто не заставляет использовать новые функции, всё старое осталось работоспособным.
Flasher писал(а):Использование везде run_item - вообще отход от простоты. Убор решётки из параметров сюда же. Было куда удобней. Зачем убрал то?
Как я и говорил, единственное, что изменилось - команды с set_separator и separator. Поэтому определение "везде" здесь, мягко говоря, не уместно. Причина - вынос костыля из TCFS2 в отдельный модуль (я давно хотел это сделать). Следствия - переход от функции к команде и невозможность использовать # в параметрах (так как вначале вычисляется выражение, а потом отправляется сообщение с числом).

Код: Выделить всё

sp_move=run_item(set_separator, -1)
- не работает.
У меня работает. Но для этого необходимо прописать команду set_separator (в моём предыдущем посте).
Flasher писал(а):Зачем в командах использовать номер 1075?
Номер 1075 (или $433) - это номер оконного сообщения, который тотал ожидает для выполнения внутренних команд. Вообще, tcm(x) делает ровно то же самое, что и msg(1075, x, 0, 0). А если надо передать в команду параметр, нужно использовать полную форму.
test(isTopmost) - так и будет со словом test? Или это временное название?
Да, так и будет. Напрямую макрос вызвать нельзя, только из какой-либо стандартной функции. Поэтому добавлена функция test для проверки (она просто возвращает результат вычисления выражения в скобках).
SeparatorGet - ИМХО, бесполезная штука.
Я бы не говорил так уверенно. Это теперь единственный способ узнать текущую позицию сепаратора, т.к. # для этой цели уже не работает.
Flasher писал(а):С GetSystemMetrics и GetWorkArea примеры не помешали бы. Со вторым параметром на примере switch_sp, если можно.
Пара примеров приведена выше - cxScreen, cyScreen, cyWorkArea. Здесь приведен полный перечень номеров, которые можно передавать в параметре. Да, многим из них сложно будет придумать применение, но остальные вполне могут пригодиться. В switch_sp, как и в s00008000_switch_sp, можно писать cyWorkArea вместо @-33 - и это должно работать правильно при любой высоте панели задач (при желании можно вычесть еще несколько пикселей для добавления промежутка).

Код: Выделить всё

switch_sp=move(# ? 0 : @*7/64, # ? 0 : @*7/64, @-# ? @ : @*25/32, cyWorkArea-# ? cyWorkArea : @*25/32), , switch_sp
Последний раз редактировалось MVV Пт май 06, 2011 11:58, всего редактировалось 1 раз.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

MVV
Не разобрался, как теперь записать такую команду?

Код: Выделить всё

FullSeparat = tcm(102) tcm(202), separator(50) | tcm(175)  tcm(74), separator(60) | tcm(174)  tcm(75), separator(40)
В readme.txt: Пример увеличения позиции разделителя файловых панелей на 10%:
TCFS2 /ef "set_separator(#+10)"
вместо /ef теперь должно быть /ei.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Попробуй так:

Код: Выделить всё

FullSeparat = tcm(102) tcm(202), test(sepPos==50) | tcm(175)  tcm(74), test(sepPos==60) | tcm(174)  tcm(75), test(sepPos==40)
Не забудь добавить макрос sepPos (а лучше - все из предыдущего поста).

Спасибо, Readme я ещё не закончил править. Да, теперь для set_separator нужно использовать режим /ei вместо режима /ef. Но вместо # при вызове сепараторных команд нужно писать sepPos:

Код: Выделить всё

TCFS2 /ei "set_separator(sepPos+10)"
Кстати, вот в Readme пример, который с учетом нововведений можно записать в разы понятнее:

Код: Выделить всё

multi_switch=run_action(multi_enable), tcini(Layout, DriveBar1, 0) | run_action(multi_enable), tcini(Layout, DriveCombo, 0) | run_action(multi_enable), tcini(Layout, CmdLine, 0) | run_action(multi_disable)

Код: Выделить всё

multi_switch=run_action(multi_disable), test(hasDriveBar && hasDriveCombo && hasCmdLine) | run_action(multi_enable)
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

MVV писал(а):Попробуй так:
Спасибо, работает.
Про функцию test хорошо бы тоже где-то упомянуть.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Уже добавил описание функции test в текущей версии Readme, как и пример её применения в команде multi_switch. А раздел макросов пополнился следующими:

Код: Выделить всё

hasButtonBar=tcini(Layout, ButtonBar, 1, 1)
hasDriveBar=tcini(Layout, DriveBar1, 1)
hasDriveCombo=tcini(Layout, DriveCombo, 1)
hasDirTabs=tcini(Layout, DirectoryTabs, 1)
hasPathHeader=tcini(Layout, CurDir, 1)
hasTabHeader=tcini(Layout, TabHeader, 1)
hasStatusBar=tcini(Layout, StatusBar, 1)
hasCmdLine=tcini(Layout, CmdLine, 1)
hasKeyButtons=tcini(Layout, KeyButtons, 1)
Аватара пользователя
ask-rus
Сообщения: 2077
Зарегистрирован: Вт ноя 10, 2009 14:06
Откуда: Russian Federation

Сообщение ask-rus »

MVV писал(а):А зря так может уже завтра вопросы бы появились
Куда денутся, появятся. Например, как правильно теперь двинуть сепаратор в 5/95 (с возвратом в 50/50) и как установить окно в это положение - центр:

Код: Выделить всё

[1280x1024 (8x16)]
x=100
y=100
dx=1080
dy=820
«Минимализм - это кратчайший путь бесконечного стремления к идеалу»
«Не бойся, что не знаешь, - бойся, что не учишься» Китайская пословица
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Вот такой вариант у меня работает (если ширина активной панели равна 50%, расширяет до 95%, иначе сбрасывает на 50%):

Код: Выделить всё

sp_sw_50_95=run_item(sp_set_active, sepPos == 50 ? 95 : 50)
Для надежности можно проверять не просто sepPos == 50, а (sepPos > 45 && sepPos < 55) - а то мало ли, вдруг шальной пиксель. :) Хотя и не должно быть проблем, т.к. я вычисляю так же точно, как и сам тотал.

А насчет окна не понял, что именно требуется. Опиши задачу подробнее.
Ответить