Autorun

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

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

Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Понравился один момент, так пусть не затеряется.)

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

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

SetHotkeyAction /H:F1 F1HintText

Func F1HintText()

 ShowHint(FirstHint())
 sleep(500)
 If IsPressed (0x10) Then ShowHint(SecondtHint())
 
EndFunc
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Loopback
Наткнулся на проблемы с функцией StrLeft: почему-то больше 127 символов она не принимает, т.е.

MsgBox(StrLeft(hint, 127)) - работает.
MsgBox(StrLeft(hint, 128)) - не работает.

Разумеется, числа могут быть как и больше, так и меньше (у меня строка вообще-то больше 1000 символов). При этом со StrMid такой проблемы нет:

MsgBox(StrMid(hint, 1, 1000)) - ОК.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Orion9 писал(а):Наткнулся на проблемы с функцией StrLeft
Да, подтверждаю. Довольно интересный и неожиданный баг с приведением типов. Надо будет проверить остальные функции.

Собственно, вот поэтому и хотелось бы выпустить следующую бету, чтобы такие мелкие, но неприятные косяки править оперативно.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Loopback
Беты бывают опасны, это да. Особенно когда в них меняют внутренний механизм уже более-менее рабочих функций. Недавний пример с ShowPopupMenu это показывает. Но выпускать их все же стоит, иначе вам одному будет гораздо сложнее все протестировать. Это я к тому, что нет необходимости 1,5-2 года доводить до ума очередную версию готового релиза, все-равно до конца безупречной она не будет. Если в проекте теплится жизнь, можно раз в несколько месяцев или раз в полгода радовать нас бетой :)

А тем временем, довёл до ума функцию показа только тех переменных окружения, которые создаются во время работы/старта ТС плагином Autorun.

[cut]

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

ControlSetMouseAction /L /K:C /B:1 17 ShowSetEnviroments

Global Envrs

ProcessExecGetOutput /OEM Envrs %COMSPEC% "/c SET"

If Not StrPos(Envrs, "COMMANDER_HANDLE") > 0 Then
   SetEnv SET_SNAPSHOT %Envrs%
Endif

SetEnv COMMANDER_PID %AUTORUN_TCPID%
SetEnv COMMANDER_HANDLE %AUTORUN_TCHANDLE%

Func ShowSetEnviroments()

   EnvrsHint(SET_SNAPSHOT, 60)
   Sleep(500)
   If IsPressed (0x10) Then EnvrsHint(Envrs, 60)
   If IsPressed (0x11) Then EnvrsHint(SET_SNAPSHOT, 90)   
   
EndFunc

Func EnvrsHint(SetVar, Length)
Local out, hint, line, i
   ProcessExecGetOutput /OEM out %COMSPEC% "/c SET"
   i=1
   while i < 200
      line=StrPart(out, auCRLF, i)
      If ERROR = 1 Then Break
      If StrPos(line, "SET_SNAPSHOT") > 0 Or StrPos(SetVar, line) > 0 Then
         i = i + 1         
         Continue
      Endif
      If StrLen(line) > Length Then
         line = StrLeft(line, Length)
      Endif
      hint = hint & line & auLF
      i = i + 1
   Wend
   i = StrLen(hint) - 1
   ShowHint(StrMid(hint, 1, i))
EndFunc
[/cut]
Теперь еще и с зажимом Shift, Ctrl есть опции.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Orion9 писал(а):Особенно когда в них меняют внутренний механизм уже более-менее рабочих функций.
Это да, не люблю трогать такие вещи. Хотя что-то базовое еще придется трогать. Но это не до ближайшей беты, иначе тестирование затянется навечно.
Orion9 писал(а):Это я к тому, что нет необходимости 1,5-2 года доводить до ума очередную версию готового релиза, все-равно до конца безупречной она не будет.
Тут немного другой случай, дело совсем не в перфекционизме. Но после выхода ближайшей беты надеюсь прийти к более равномерному выпуску версий.
Orion9 писал(а):А тем временем, довёл до ума функцию показа только тех переменных окружения, которые создаются во время работы/старта ТС плагином Autorun.
Попробовал, интересное решение. Возможно, возьму на вооружение, но только с тем же модификатором, который изначально вызывает хинт (в данном случае Ctrl). Перескакивать на другой модификатор лично мне что-то не очень удобно.

Кстати, стоит упомянуть, что метод работает, только если этот код размещен до других установок переменных окружения через Autorun. Иначе показывает только COMMANDER_HANDLE :)
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Loopback
Я в тот момент очень торопился, на потом откладывать не хотел - в итоге пост получился недописанным.

Да, нужно размещать код сразу за LoadLibrary в шапке основного конфига и перед объявлениями других переменных окружения.

Поскольку ТС при перезагрузке командой cm_Exit 9 тянет за собой все переменные окружения, пришлось создать дополнительную проверку на переменную COMMANDER_HANDLE, которая не существует при первой загрузке, хотя при последующих перезагрузках ее содержимое меняется.

Но мне понравилось больше то, что фактически там сейчас три разных хинта. Если вызвать первый хинт с Ctrl, он покажется. Но если при этом не отпускать Ctrl, то покажется второй, более широкий хинт. Если же сразу после показа первого нажать Shift, то всплывет третий, маленький, который отобразит только изменения в переменных, характерные для этой конкретной сессии/перезагрузки.

Прикольная фича, я считаю. Уже взял ее на вооружение в заголовке, поскольку там теперь два хинта - один с технической информацией о файлах. Надеюсь, завтра всё доделать, да и пора закрывать тему с заголовком. :lol:

P.s. А с хинтом можно поступить еще интереснее. Повесить его на F1, к примеру. Тогда после нажатия на F1, если сразу зажать шифт после этого, то на экране всплывет второй хинт вслед за первым. Я, кстати, так и сделал c хинтом заголовка)
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Наверное, я слишком многого хочу :). Нельзя ли сделать так, чтобы после появления подсказки для заданного элемента окна, она не исчезала при перемещении мышки, пока её указатель находится внутри данного элемента (например, в пределах функциональной кнопки или заголовка)? По аналогии с подсказкой для кнопок панели инструментов.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

sa
А если использовать ShowHint?

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

ControlSetHint /F /D:100 /H:2 0 "TitleHintText"

Func TitleHintText()
   ShowHint(GetInfoData())
EndFunc
Приемлемо, но все же не то... Или пойдет?
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Orion9 писал(а):но все же не то...
Да, не то! Для закрытия потребуется клик или нажатие ESC, а не просто перемещение указателя на другой объект (другую кнопку в случае панели инструментов TC).
Удобнее просто замереть (если рука крепка).
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

sa писал(а):Удобнее просто замереть (если рука крепка).
Смешно))
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

sa писал(а):Наверное, я слишком многого хочу
Хотел утром ответить что да, потом посмотрел - а почему бы и нет :)

Версия Tweaks от [url=https:///total.darkhost.ru/files/temp/tweaks_20240529.zip]29.05.2024[/url]

Вроде выглядит и неплохо, но не уверен, стоит ли делать так по умолчанию, поэтому включается временным ключом /R в ControlSetHint. На маленьких кнопках ок, но вот на больших функциональных как по мне спорно. Кроме того с опцией /O работать не будет. В общем, надо еще погонять, в случае чего ключ можно инвертировать.
Аватара пользователя
Orion9
Сообщения: 1283
Зарегистрирован: Пн янв 01, 2024 17:18

Сообщение Orion9 »

Loopback
Вроде выглядит и неплохо, но не уверен, стоит ли делать так по умолчанию
На мой взгляд, не стоит. Для каких-то задач , наверное, пригодится, но этот ключ нарушает привычную логику. Попробовал сейчас в деле, т.ч. исхожу не только из теории.

А что имеется в виду "с опцией /O работать не будет"?
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Loopback писал(а):а почему бы и нет
Я подозревал, что с Autorun всё возможно :) .
Спасибо! Работает немного иначе, чем в варианте с тоталовскими подсказками для кнопок панели инструментов, но это даже и лучше: можно не только по области функциональной кнопки или заголовка перемещать указатель, но и по полю самой подсказки.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Orion9 писал(а):но этот ключ нарушает привычную логику
Да не, если и нарушает, то только когда используются разные подходы одновременно. Если на всех контролах будет одинаково, то нормально. Но я что-то не уверен, что мне больше нравится новый вариант. Вообще, может и не нужна эта опция для каждого контрола отдельно, сделать одну общую на всё...
Orion9 писал(а):А что имеется в виду "с опцией /O работать не будет"?
При включенной опции /O этот метод работать не будет, т.к. фокус уходит к подсказке.
sa писал(а):Я подозревал, что с Autorun всё возможно
Если бы, но впечатление, конечно же, обманчивое :) Не в каждом случае можно легко достигнуть результата.
sa писал(а):Работает немного иначе, чем в варианте с тоталовскими подсказками
Очевидно, что со стороны меньше возможностей контроля. Многие вещи, которые легко делаются изнутри программы, намного сложнее и "костыльнее", если навешивать их извне. Особенно в случае с Delphi. Но не думаю, что это критично.
Аватара пользователя
yozhik
Сообщения: 353
Зарегистрирован: Вс май 04, 2014 20:34
Откуда: Электросталь

Сообщение yozhik »

Loopback
У меня на кнопку назначен хинт и меню по ПКМ. Подвожу курсор к кнопке, жму ПКМ, появляется меню, затем всплывает хинт поверх меню. И в таком сочетании куда курсором уже ни двигай, хинт не закрывается, пока не щёлкнешь по пункту меню или где ещё в окне ТК, или Esc-ом меню не закроешь:
Изображение
Возможно ли это как-то отследить, чтобы при открытом меню хинт не всплывал?
Loopback писал(а):При включенной опции /O этот метод работать не будет, т.к. фокус уходит к подсказке.
Где-то что-то я опять прозевал... а где эта опция /O ?
Amo ergo sum
Ответить